Repository navigation
Expand file tree
/
Copy pathquestionAnswer.ts
More file actions
33 lines (29 loc) · 2.14 KB
/
Copy pathquestionAnswer.ts
File metadata and controls
33 lines (29 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import type { WebSetupPrompt } from '../../../src/application/contracts/web_setup_view';
type QuestionPrompt = Extract<WebSetupPrompt, { kind: 'question' }>;
export function initialQuestionAnswer(prompt: QuestionPrompt): { value: string; selected: string[] } {
const value = String(prompt.question.defaultValue);
const defaults = value.split(',').map(item => item.trim()).filter(Boolean);
const selected = prompt.question.kind === 'multi-select'
? defaults.includes('All') && prompt.question.choices?.includes('All') ? ['All']
: (prompt.question.choices ?? []).filter(item => item !== 'All' && defaults.includes(item.split(' — ')[0]))
: prompt.question.kind === 'scope-overrides' ? defaults
: prompt.question.kind === 'producer-select' ? value.split(';').map(item => item.trim()).filter(Boolean)
: prompt.question.kind === 'project-select' ? defaults.filter(number =>
prompt.question.projectCandidates?.some(candidate => String(candidate.number) === number)) : [];
const manualProjects = prompt.question.kind === 'project-select'
? defaults.filter(number => !selected.includes(number)).join(',') : value;
return { value: prompt.question.kind === 'producer-select' ? '' : manualProjects, selected };
}
export function toggleSelection(selected: string[], item: string): string[] {
if (item === 'All') return selected.includes('All') ? [] : ['All'];
return selected.includes(item)
? selected.filter(candidate => candidate !== item)
: [...selected.filter(candidate => candidate !== 'All'), item];
}
export function submittedQuestionAnswer(prompt: QuestionPrompt, value: string, selected: string[]): string {
if (prompt.question.kind === 'scope-overrides') return selected.length ? selected.join(',') : 'none';
if (prompt.question.kind === 'multi-select') return selected.length ? selected.join(',') : 'none';
if (prompt.question.kind === 'producer-select') return [...selected, ...value.split(';').map(item => item.trim()).filter(Boolean)].join(';');
if (prompt.question.kind === 'project-select') return [...selected, ...value.split(',').map(item => item.trim()).filter(Boolean)].join(',') || 'none';
return value;
}