onboardingTasks.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type {Client} from 'sentry/api';
  2. import ConfigStore from 'sentry/stores/configStore';
  3. import OrganizationStore from 'sentry/stores/organizationStore';
  4. import type {OnboardingTaskStatus, UpdatedTask} from 'sentry/types/onboarding';
  5. import type {Organization} from 'sentry/types/organization';
  6. import {isDemoModeEnabled} from 'sentry/utils/demoMode';
  7. import {updateDemoWalkthroughTask} from 'sentry/utils/demoMode/guides';
  8. /**
  9. * Update an onboarding task.
  10. *
  11. * If no API client is provided the task will not be updated on the server side
  12. * and will only update in the organization store.
  13. */
  14. export function updateOnboardingTask(
  15. api: Client | null,
  16. organization: Organization,
  17. updatedTask: UpdatedTask
  18. ) {
  19. if (isDemoModeEnabled()) {
  20. updateDemoWalkthroughTask(updatedTask);
  21. return;
  22. }
  23. if (api !== null) {
  24. api.requestPromise(`/organizations/${organization.slug}/onboarding-tasks/`, {
  25. method: 'POST',
  26. data: updatedTask,
  27. });
  28. }
  29. const hasExistingTask = organization.onboardingTasks.find(
  30. task => task.task === updatedTask.task
  31. );
  32. const user = ConfigStore.get('user');
  33. const onboardingTasks = hasExistingTask
  34. ? organization.onboardingTasks.map(task =>
  35. task.task === updatedTask.task ? {...task, ...updatedTask} : task
  36. )
  37. : [...organization.onboardingTasks, {...updatedTask, user} as OnboardingTaskStatus];
  38. OrganizationStore.onUpdate({onboardingTasks});
  39. }