Fakultas Ilmu Komputer UI

schema.ts 8.55 KB
Newer Older
1
2
import { FieldValidation, FieldType } from 'utils/form';
import { TextFieldSchema, RadioButtonGroupSchema } from 'types/form';
3
import { DietProfileRequest } from 'services/dietelaQuiz/models';
4

5
export const textFields: TextFieldSchema[] = [
6
7
8
9
  {
    label: 'Nama',
    placeholder: 'Wendy Asri Karim',
    required: true,
10
    name: 'name',
11
12
13
  },
  {
    label: 'Email',
14
    placeholder: 'example@address.com',
15
    required: true,
16
    name: 'email',
17
18
19
  },
  {
    label: 'Usia (tahun)',
20
    placeholder: 'Ex: 20',
21
    required: true,
22
    name: 'age',
23
24
25
26
    keyboardType: 'numeric',
  },
  {
    label: 'Berat badan (kg)',
27
    placeholder: 'Ex: 60',
28
    required: true,
29
    name: 'weight',
30
31
32
33
    keyboardType: 'numeric',
  },
  {
    label: 'Tinggi badan (cm)',
34
    placeholder: 'Ex: 160',
35
    required: true,
36
    name: 'height',
37
38
39
40
    keyboardType: 'numeric',
  },
];

41
export const radioButtonGroups: RadioButtonGroupSchema[] = [
42
43
44
  {
    label: 'Jenis kelamin',
    required: true,
45
    name: 'gender',
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
    choices: [
      {
        value: 1,
        label: 'Pria',
      },
      {
        value: 2,
        label: 'Wanita',
      },
    ],
  },
];

export const initialValues = {
  name: '',
  email: '',
  age: '',
  weight: '',
  height: '',
  gender: 0,
  special_condition: 0,
  body_activity: 0,
  vegetables_in_one_day: 0,
  fruits_in_one_day: 0,
  fried_food_in_one_day: 0,
  sweet_snacks_in_one_day: 0,
  sweet_drinks_in_one_day: 0,
  packaged_food_in_one_day: 0,
  large_meal_in_one_day: 0,
  snacks_in_one_day: 0,
  breakfast_type: 0,
  current_condition: 0,
  problem_to_solve: 0,
  health_problem: [],
};

export const allAccessQuestions = [
  {
    fieldName: 'special_condition',
    questionLabel: 'Apakah kamu punya kondisi keibuan?',
    choiceList: [
      'Tidak ada kondisi keibuan',
      'Sedang hamil trimester 1',
      'Sedang hamil trimester 2',
      'Sedang hamil trimester 3',
      'Menyusui bayi 0-6 bulan',
      'Menyusui bayi 7-12 bulan',
    ],
  },
  {
    fieldName: 'body_activity',
    questionLabel: 'Seberapa aktif badanmu bergerak dalam sehari?',
    choiceList: [
      'Saya lebih banyak duduk dan tidak rutin olahraga',
      'Banyak jalan, banyak bergerak, tapi tidak rutin olahraga',
      'Olahraga rutin 30-45 menit setiap hari',
      'Olahraga rutin 45-60 menit setiap hari',
      'Olahraga rutin lebih dari 60 menit setiap hari',
    ],
  },
  {
    fieldName: 'vegetables_in_one_day',
    questionLabel:
      'Biasanya, berapa banyak sayur yang dimakan dalam satu hari?',
    choiceList: [
      '0 porsi sayur per hari',
      '1 porsi sayur per hari',
      '2 porsi sayur per hari',
      '3 porsi sayur per hari',
      'Lebih dari 3 porsi sayur per hari',
    ],
  },
  {
    fieldName: 'fruits_in_one_day',
    questionLabel: 'Biasanya, berapa banyak buah yang dimakan dalam satu hari?',
    choiceList: [
      '0 porsi buah per hari',
      '1 porsi buah per hari',
      '2 porsi buah per hari',
      '3 porsi buah per hari',
      'Lebih dari 3 porsi buah per hari',
    ],
  },
  {
    fieldName: 'fried_food_in_one_day',
    questionLabel:
      'Biasanya, berapa potong gorengan yang kamu makan dalam satu hari?',
    choiceList: [
      '0 potong gorengan per hari',
      '1 potong gorengan per hari',
      '2 potong gorengan per hari',
      '3 potong gorengan per hari',
      'Lebih dari 3 potong gorengan per hari',
    ],
  },
  {
    fieldName: 'sweet_snacks_in_one_day',
    questionLabel:
      'Biasanya, berapa potong cemilan manis yang kamu makan dalam satu hari?',
    helperText:
      'Contoh cemilan manis adalah berupa kue-kue manis, cokelat, wafer, biskuit, dan cemilan lainnya. Pilih satu yang paling cocok.',
    choiceList: [
      '0 potong cemilan manis per hari',
      '1 potong cemilan manis per hari',
      '2 potong cemilan manis per hari',
      '3 potong cemilan manis per hari',
      'Lebih dari 3 potong cemilan manis per hari',
    ],
  },
  {
    fieldName: 'sweet_drinks_in_one_day',
    questionLabel:
      'Biasanya, berapa gelas minuman manis yang kamu habiskan dalam satu hari?',
    helperText:
      'Contoh minuman manis adalah kopi susu, teh manis, soda, dan lain-lain. Pilih satu yang paling cocok.',
    choiceList: [
      '0 gelas minuman manis per hari',
      '1 gelas minuman manis per hari',
      '2 gelas minuman manis per hari',
      '3 gelas minuman manis per hari',
      'Lebih dari 3 gelas minuman manis per hari',
    ],
  },
  {
    fieldName: 'packaged_food_in_one_day',
    questionLabel:
      'Biasanya, berapa porsi makanan kemasan dan makanan cepat saji yang kamu makan dalam satu hari?',
    choiceList: [
      '0 porsi per hari',
      '1 porsi per hari',
      '2 porsi per hari',
      '3 porsi per hari',
      'Lebih dari 3 porsi per hari',
    ],
  },
  {
    fieldName: 'large_meal_in_one_day',
    questionLabel: 'Berapa kali makan besar dalam satu hari?',
    choiceList: [
      '1 kali makan besar per hari',
      '2 kali makan besar per hari',
      '3 kali makan besar per hari',
      'Lebih dari 3 kali makan besar per hari',
    ],
  },
  {
    fieldName: 'snacks_in_one_day',
    questionLabel: 'Berapa kali makan cemilan dalam satu hari?',
    choiceList: [
      'Tidak makan cemilan',
      '1 kali ngemil per hari',
      '2 kali ngemil per hari',
      '3 kali ngemil per hari',
      'Lebih dari 3 kali ngemil per hari',
    ],
  },
  {
    fieldName: 'breakfast_type',
    questionLabel: 'Jenis makanan saat makan pagi?',
    choiceList: [
      'Tidak pernah makan pagi',
      'Makanan yang ringan saja',
      'Makanan yang sampai mengenyangkan perut',
    ],
  },
  {
    fieldName: 'current_condition',
    questionLabel: 'Kondisi mana yang paling sesuai denganmu saat ini?',
    helperText: 'Saya...',
    choiceList: [
      'BELUM tertarik melakukan diet dan gaya hidup sehat dan TIDAK TAHU kondisi gizi serta kesehatan saya',
      'BELUM tertarik melakukan diet dan gaya hidup sehat meskipun TAHU kondisi gizi serta kesehatan saya',
      'MULAI tertarik melakukan diet dan gaya hidup sehat meskipun saya TIDAK TAHU kondisi gizi serta kesehatan saya',
      'MULAI tertarik melakukan diet dan gaya hidup sehat dan TAHU kondisi gizi dan kesehatan saya',
      'Sudah tahu manfaat diet dan gaya hidup sehat, tapi tidak tahu harus mulai menerapkannya dari mana',
      'Sudah pernah mengubah diet dan gaya hidup menjadi lebih sehat tetapi tidak bertahan lama (dilakukan kurang dari 6 bulan)',
      'Sudah pernah berhasil menjalani diet dan gaya hidup sehat selama lebih dari 6 bulan dan ingin melakukannya lagi',
    ],
  },
  {
    fieldName: 'problem_to_solve',
    questionLabel: 'Masalah yang ingin kamu selesaikan?',
    helperText: 'Saya ingin...',
    choiceList: [
      'Turun berat badan dengan target yang realistis',
      'Naik berat badan dengan target yang realistis',
      'Berat badan yang bertahan permanen, menjaga agar berat badan tidak naik, anti yo-yo diet',
      'Butuh pengaturan gizi Ibu Hamil',
      'Butuh pengaturan gizi Ibu Menyusui',
      'Menyiapkan tubuh untuk mencapai kesuburan dan persiapan kehamilan',
      'Mengatur gula darah tinggi (Pre-diabetes), hiperlipidemia (kolesterol), hipertensi (tekanan darah tinggi)',
      'Capai pola makan sehat dan tetap enjoy menikmati makanan yang disukai',
      'Transisi vegan',
      'Butuh pengaturan gizi pada anak-anak atau remaja',
    ],
  },
  {
    fieldName: 'health_problem',
    questionLabel: 'Masalah kesehatan yang kamu miliki?',
    multiple: true,
    choiceList: [
      'Diabetes Tipe 2',
      'Diabetes Tipe 1',
      'PCOS (Polycystic Ovary Syndrome)',
      'Kolesterol tinggi',
      'Asam urat tinggi',
      'Tekanan darah tinggi',
      'Gula darah tinggi',
      'Kanker',
      'HIV/AIDS',
      'Maag/GERD/Dispepsia/Gangguan lambung',
      'Penyintas Kanker',
      'Penyakit Kronis Lainnya',
    ],
  },
];
262
263
264
265
266
267
268
269
270
271
272
273
274
275

export const fieldValidations: FieldValidation[] = [
  ...textFields.map((field) => ({
    name: field.name,
    required: field.required,
    label: field.label,
    type: field.name === 'email' ? FieldType.EMAIL : FieldType.TEXT,
  })),
  ...radioButtonGroups.map((field) => ({
    name: field.name,
    required: field.required,
    label: field.label,
    type: FieldType.RADIO_BUTTON,
  })),
276
277
278
279
280
281
  ...allAccessQuestions
    .filter((field) => !field.multiple)
    .map((field) => ({
      name: field.fieldName,
      type: FieldType.RADIO_BUTTON,
    })),
282
];
283
284
285
286
287
288
289
290

export const convertPayload = (
  values: typeof initialValues,
): DietProfileRequest => ({
  ...values,
  age: parseInt(values.age, 10),
  height: parseInt(values.age, 10),
  weight: parseInt(values.age, 10),
291
292
  health_problem:
    values.health_problem.length === 0 ? [1] : values.health_problem,
293
});