@@ -33,6 +33,8 @@ Licensed under the Elastic License 2.0. */
3333 import { useToastService } from ' ../../composable/toastService' ;
3434 import MultiSelect from ' primevue/multiselect' ;
3535 import { useObservationGroupStore } from ' ../../stores/observationGroupStore' ;
36+ import VisibilityToggle from ' ../subComponents/VisibilityToggle.vue' ;
37+ import ReminderToggle from ' ../subComponents/ReminderToggle.vue' ;
3638
3739 const { handleToastErrors, showErrorToast } = useToastService ();
3840 const dialog = useDialog ();
@@ -45,13 +47,14 @@ Licensed under the Elastic License 2.0. */
4547 const dialogRef: any = inject (' dialogRef' );
4648 const observation = dialogRef .value .data .observation as Observation ;
4749 const groupStates = dialogRef .value .data .groupStates || [];
48- const observationGroupStates: MoreTableChoice [] = observationGroupStore .observationGroups .map (
49- (observationGroup ) =>
50- ({
51- label: observationGroup .title ,
52- value: observationGroup .observationGroupId ?.toString (),
53- }) as MoreTableChoice ,
54- );
50+ const observationGroupStates: MoreTableChoice [] =
51+ observationGroupStore .observationGroups .map (
52+ (observationGroup ) =>
53+ ({
54+ label: observationGroup .title ,
55+ value: observationGroup .observationGroupId ?.toString (),
56+ }) as MoreTableChoice ,
57+ );
5558 const factory = dialogRef .value .data .factory ;
5659 const editable =
5760 studyStore .study .status === StudyStatus .Draft ||
@@ -67,15 +70,19 @@ Licensed under the Elastic License 2.0. */
6770 .map ((p : Property <any >) => p .setValue (observation .properties ?.[p .id ])),
6871 );
6972 const selectedObservationGroups = ref (
70- observation .observationGroupIds ?.map ((id : number ) => id .toString ()) ?? []
71- )
73+ observation .observationGroupIds ?.map ((id : number ) => id .toString ()) ?? [],
74+ );
7275
7376 const hidden: Ref <boolean > = ref (
7477 observation .hidden !== undefined
7578 ? observation .hidden
7679 : factory .visibility .hiddenByDefault ,
7780 );
7881
82+ const reminder: Ref <boolean > = ref (
83+ observation .reminder !== undefined ? observation .reminder : false ,
84+ );
85+
7986 const scheduler: Ref <ObservationSchedule > = ref (
8087 observation .schedule ? observation .schedule : {},
8188 );
@@ -186,12 +193,15 @@ Licensed under the Elastic License 2.0. */
186193 title: title .value ,
187194 purpose: purpose .value ,
188195 participantInfo: participantInfo .value ,
189- observationGroupIds: selectedObservationGroups .value ?.length ? selectedObservationGroups .value .map ((id : string ) => parseInt (id )) : [],
196+ observationGroupIds: selectedObservationGroups .value ?.length
197+ ? selectedObservationGroups .value .map ((id : string ) => parseInt (id ))
198+ : [],
190199 type: observation .type ,
191200 properties: props ,
192201 schedule: scheduler .value ,
193202 studyGroupId: studyGroupId .value ,
194203 hidden: hidden .value ,
204+ reminder: reminder .value ,
195205 } as Observation ;
196206
197207 if (! isObjectEmpty (scheduler .value )) {
@@ -236,18 +246,21 @@ Licensed under the Elastic License 2.0. */
236246 }
237247 function extractCurrentLimeDomain(): string {
238248 const hostnameParts = window .location .hostname .split (' .' );
239- return hostnameParts .slice (1 ).join (' .' ) ? ` https://lime.${hostnameParts .slice (1 ).join (' .' )}/admin/ ` : ' https://lime.platform-test.more.redlink.io/' ;
249+ return hostnameParts .slice (1 ).join (' .' )
250+ ? ` https://lime.${hostnameParts .slice (1 ).join (' .' )}/admin/ `
251+ : ' https://lime.platform-test.more.redlink.io/' ;
240252 }
241-
242-
243253 </script >
244254
245255<template >
246256 <div class =" dialog" :class =" { 'dialog-disabled': !editable }" >
247257 <div class =" mb-4" :class =" { 'pb-4': !editable }" >
248258 <h5 class =" mb-1" >{{ $t(factory.title) }}</h5 >
249259 <!-- eslint-disable vue/no-v-html -->
250- <h6 v-if =" factory.description" v-html =" $t(factory.description, {link: extractCurrentLimeDomain()})" ></h6 >
260+ <h6
261+ v-if =" factory.description"
262+ v-html =" $t(factory.description, { link: extractCurrentLimeDomain() })"
263+ ></h6 >
251264 </div >
252265
253266 <form
@@ -328,14 +341,22 @@ Licensed under the Elastic License 2.0. */
328341 <div class =" col-start-0 col-span-8 flex items-center justify-between" >
329342 <div >
330343 <h5 v-if =" editable" class =" pb-2 font-bold" >
331- {{ editable ? $t('study.dialog.label.chooseGroups') : $t('study.props.groups') }}
344+ {{
345+ editable
346+ ? $t('study.dialog.label.chooseGroups')
347+ : $t('study.props.groups')
348+ }}
332349 </h5 >
333350 <div v-if =" editable" class =" mb-2" >
334- {{ $t('study.dialog.description.howToCreateGroups', {for: $t('studyNavigation.tabs.observations')}) }}
351+ {{
352+ $t('study.dialog.description.howToCreateGroups', {
353+ for: $t('studyNavigation.tabs.observations'),
354+ })
355+ }}
335356 </div >
336357 <div class =" flex gap-5" >
337358 <div >
338- <div class =" mb-1" >{{ $t('studyGroup.plural')}}</div >
359+ <div class =" mb-1" >{{ $t('studyGroup.plural') }}</div >
339360 <Dropdown
340361 v-model =" studyGroupId "
341362 :options =" groupStates "
@@ -351,87 +372,68 @@ Licensed under the Elastic License 2.0. */
351372 </div >
352373 <div >
353374 <div class =" mb-1" >{{ $t('observationGroup.plural') }}</div >
354- <MultiSelect
355- v-model =" selectedObservationGroups "
356- :options =" observationGroupStates "
357- :disabled =" ! editable "
358- option-label="label"
359- option-value="value"
360- :placeholder =" $t (' global.placeholder.chooseDropdownOptionDefault' )"
361- :show-toggle-all =" false "
362- class="z-top custom-multiselect-root"
363- :panel-class =" ' custom-multiselect-panel' "
364- >
365- <template #value =" { value } " >
366- <span v-if =" value?.length > 0" >{{ value.map((item: string) => observationGroupStates.find(
367- (group: MoreTableChoice) => group.value === item
368- )?.label).join(', ') }}</span >
369- <span v-else class =" text-gray-400" >
370- {{ $t('global.placeholder.chooseDropdownOptionDefault') }}
371- </span >
372- </template >
373-
374- </MultiSelect >
375- </div >
375+ <MultiSelect
376+ v-model =" selectedObservationGroups "
377+ :options =" observationGroupStates "
378+ :disabled =" ! editable "
379+ option-label="label"
380+ option-value="value"
381+ :placeholder ="
382+ $t (' global.placeholder.chooseDropdownOptionDefault' )
383+ "
384+ :show-toggle-all =" false "
385+ class="z-top custom-multiselect-root"
386+ :panel-class =" ' custom-multiselect-panel' "
387+ >
388+ <template #value =" { value } " >
389+ <span v-if =" value?.length > 0" >{{
390+ value
391+ .map(
392+ (item: string) =>
393+ observationGroupStates.find(
394+ (group: MoreTableChoice) => group.value === item,
395+ )?.label,
396+ )
397+ .join(', ')
398+ }}</span >
399+ <span v-else class =" text-gray-400" >
400+ {{ $t('global.placeholder.chooseDropdownOptionDefault') }}
401+ </span >
402+ </template >
403+ </MultiSelect >
404+ </div >
376405 </div >
377406 </div >
378407 </div >
379408
380- <div
381- class =" col-start-0 buttons col-span-8 mt-1 grid grid-cols-2"
382- >
383- <div
384- class =" info-box relative flex cursor-pointer flex-row items-center"
385- >
386- <div
387- v-if =" editable && factory.visibility.changeable"
388- class =" flex items-center"
389- >
390- <div class =" icon-box eye" >
391- <span
392- class =" pi cursor-pointer"
393- :class =" hidden ? 'pi-eye-slash' : 'pi-eye'"
394- @click =" hidden = !hidden"
395- />
396- </div >
397- </div >
398- <div v-else class =" icon-box eye preview" >
399- <span
400- class =" pi"
401- :class ="
402- observation.hidden
403- ? 'pi-eye color-approved'
404- : 'pi-eye-slash color-important'
405- "
406- />
407- </div >
408- <div class =" inline" >
409- <div
410- class =" info-box-hidden pointer-events-none absolute bottom-full right-0 bg-white p-5 text-center opacity-0"
411- >
412- {{ $t('observation.dialog.msg.hiddenInfo') }}
413- </div >
414- </div >
415- <span class =" ml-2 inline" >
416- {{ $t(`observation.props.hidden.${hidden}`) }}
417- </span >
418- <i
419- class =" pi pi-info-circle color-primary mx-1"
420- :class =" { 'me-2': editable && factory.visibility.changeable }"
409+ <div class =" col-start-0 buttons col-span-8 mt-1 grid grid-cols-2" >
410+ <div class =" flex flex-col flex-wrap gap-3" >
411+ <VisibilityToggle
412+ v-model =" hidden "
413+ :editable =" editable "
414+ :changeable =" factory .visibility .changeable "
415+ :info-text =" $t (' observation.dialog.msg.hiddenInfo' )"
416+ :label =" $t (` observation.props.hidden.${hidden } ` )"
417+ />
418+ <ReminderToggle
419+ v-model =" reminder "
420+ :editable =" editable "
421+ :info-text =" $t (' observation.dialog.msg.reminderInfo' )"
422+ :label =" $t (` observation.props.reminder.${reminder } ` )"
421423 />
422424 </div >
423425 <div class =" flex flex-row items-center justify-end text-right" >
424- <Button class="btn-gray" @click =" cancel ()" >
425- <span v-if =" editable" >{{ $t('global.labels.cancel') }}</span >
426- <span v-else >{{ $t('global.labels.close') }}</span >
427- </Button >
428- <Button
429- v-if =" editable "
430- :type =" editable ? ' submit' : ' button' "
431- :label =" $t (' global.labels.save' )"
432- :disabled =" ! editable "
433- @click =" checkRequiredFields ()"
434- />
426+ <Button class="btn-gray" @click =" cancel ()" >
427+ <span v-if =" editable" >{{ $t('global.labels.cancel') }}</span >
428+ <span v-else >{{ $t('global.labels.close') }}</span >
429+ </Button >
430+ <Button
431+ v-if =" editable "
432+ :type =" editable ? ' submit' : ' button' "
433+ :label =" $t (' global.labels.save' )"
434+ :disabled =" ! editable "
435+ @click =" checkRequiredFields ()"
436+ />
435437 </div >
436438 </div >
437439 </form >
0 commit comments