-
-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathuseSettingsQuestionsViewModel.ts
More file actions
69 lines (57 loc) · 1.88 KB
/
useSettingsQuestionsViewModel.ts
File metadata and controls
69 lines (57 loc) · 1.88 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { ref } from "@nuxtjs/composition-api";
import { useResolve } from "ts-injecty";
import { Question } from "~/v1/domain/entities/question/Question";
import { UpdateQuestionSettingUseCase } from "~/v1/domain/usecases/dataset-setting/update-question-setting-use-case";
import { useNotifications } from "~/v1/infrastructure/services/useNotifications";
export const useSettingsQuestionsViewModel = () => {
const updateQuestionSettingsUseCase = useResolve(UpdateQuestionSettingUseCase);
const notification = useNotifications();
const newLabelText = ref({});
const restore = (question: Question) => {
question.restore();
};
const update = async (question: Question) => {
try {
await updateQuestionSettingsUseCase.execute(question);
} catch (error) {
// TODO
}
};
const addOption = (question: Question) => {
const text = newLabelText.value[question.id]?.trim();
if (!text) return;
const existingOption = question.settings.options.find(option =>
option.value.toLowerCase() === text.toLowerCase() ||
option.text.toLowerCase() === text.toLowerCase()
);
if (existingOption) {
notification.notify({
message: "Label already exists. Please choose a different one.",
type: "warning",
});
return;
}
question.settings.options.push({
value: text.toLowerCase().replace(/\s+/g, '_'),
text: text
});
newLabelText.value[question.id] = '';
question.reloadAnswerFromOptions();
};
const deleteOption = (question: Question, optionToDelete: any) => {
const index = question.settings.options.findIndex(option =>
option.value === optionToDelete.value
);
if (index > -1) {
question.settings.options.splice(index, 1);
question.reloadAnswerFromOptions();
}
};
return {
restore,
update,
newLabelText,
addOption,
deleteOption,
};
};