56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
type MaybeId = string | null | undefined;
|
|
|
|
export function resolveIssueGoalId(input: {
|
|
projectId: MaybeId;
|
|
goalId: MaybeId;
|
|
projectGoalId?: MaybeId;
|
|
defaultGoalId: MaybeId;
|
|
}): string | null {
|
|
if (input.goalId) return input.goalId;
|
|
if (input.projectId) return input.projectGoalId ?? null;
|
|
return input.defaultGoalId ?? null;
|
|
}
|
|
|
|
export function resolveNextIssueGoalId(input: {
|
|
currentProjectId: MaybeId;
|
|
currentGoalId: MaybeId;
|
|
currentProjectGoalId?: MaybeId;
|
|
projectId?: MaybeId;
|
|
goalId?: MaybeId;
|
|
projectGoalId?: MaybeId;
|
|
defaultGoalId: MaybeId;
|
|
}): string | null {
|
|
const projectId =
|
|
input.projectId !== undefined ? input.projectId : input.currentProjectId;
|
|
const projectGoalId =
|
|
input.projectGoalId !== undefined
|
|
? input.projectGoalId
|
|
: projectId
|
|
? input.currentProjectGoalId
|
|
: null;
|
|
|
|
const resolveFallbackGoalId = (targetProjectId: MaybeId, targetProjectGoalId: MaybeId) => {
|
|
if (targetProjectId) return targetProjectGoalId ?? null;
|
|
return input.defaultGoalId ?? null;
|
|
};
|
|
|
|
if (input.goalId !== undefined) {
|
|
return input.goalId ?? resolveFallbackGoalId(projectId, projectGoalId);
|
|
}
|
|
|
|
const currentFallbackGoalId = resolveFallbackGoalId(
|
|
input.currentProjectId,
|
|
input.currentProjectGoalId,
|
|
);
|
|
const nextFallbackGoalId = resolveFallbackGoalId(projectId, projectGoalId);
|
|
|
|
if (!input.currentGoalId) {
|
|
return nextFallbackGoalId;
|
|
}
|
|
|
|
if (input.currentGoalId === currentFallbackGoalId) {
|
|
return nextFallbackGoalId;
|
|
}
|
|
|
|
return input.currentGoalId;
|
|
}
|