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