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,
};
}