export function getStatus()

in experimenter/experimenter/nimbus-ui/src/lib/experiment.ts [14:72]


export function getStatus(
  experiment?: getExperiment_experimentBySlug | getAllExperiments_experiments,
) {
  const {
    status,
    statusNext,
    publishStatus,
    isEnrollmentPausePending,
    isArchived,
    isRollout,
    isRolloutDirty,
  } = experiment || {};

  // The experiment is or was out in the wild (live or complete)
  const launched = [
    NimbusExperimentStatusEnum.LIVE,
    NimbusExperimentStatusEnum.COMPLETE,
  ].includes(status!);

  return {
    archived: isArchived,
    draft: status === NimbusExperimentStatusEnum.DRAFT,
    preview: status === NimbusExperimentStatusEnum.PREVIEW,
    live: status === NimbusExperimentStatusEnum.LIVE,
    complete: status === NimbusExperimentStatusEnum.COMPLETE,
    idle: publishStatus === NimbusExperimentPublishStatusEnum.IDLE,
    approved: publishStatus === NimbusExperimentPublishStatusEnum.APPROVED,
    review: publishStatus === NimbusExperimentPublishStatusEnum.REVIEW,
    waiting: publishStatus === NimbusExperimentPublishStatusEnum.WAITING,
    dirty: isRolloutDirty === true,
    // TODO: EXP-1325 Need to check something else here for end enrollment in particular?
    pauseRequested:
      status === NimbusExperimentStatusEnum.LIVE &&
      statusNext === NimbusExperimentStatusEnum.LIVE &&
      isEnrollmentPausePending === true,
    endRequested:
      status === NimbusExperimentStatusEnum.LIVE &&
      statusNext === NimbusExperimentStatusEnum.COMPLETE,
    updateRequested:
      isRollout &&
      isRolloutDirty &&
      status === NimbusExperimentStatusEnum.LIVE &&
      publishStatus === NimbusExperimentPublishStatusEnum.REVIEW &&
      statusNext === NimbusExperimentStatusEnum.LIVE,
    updateRequestedApproved:
      isRollout &&
      isRolloutDirty &&
      status === NimbusExperimentStatusEnum.LIVE &&
      publishStatus === NimbusExperimentPublishStatusEnum.APPROVED &&
      statusNext === NimbusExperimentStatusEnum.LIVE,
    updateRequestedWaiting:
      isRollout &&
      isRolloutDirty &&
      status === NimbusExperimentStatusEnum.LIVE &&
      publishStatus === NimbusExperimentPublishStatusEnum.WAITING &&
      statusNext === NimbusExperimentStatusEnum.LIVE,
    launched,
  };
}