70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
|
|
import { watch } from 'vue'
|
||
|
|
|
||
|
|
export function useTravelReimbursementApplicationPreviewDateEditor({
|
||
|
|
applicationPreviewEditor,
|
||
|
|
cancelApplicationPreviewEditor,
|
||
|
|
commitApplicationPreviewDateEditor,
|
||
|
|
composerDateMode,
|
||
|
|
composerDatePickerOpen,
|
||
|
|
composerRangeEndDate,
|
||
|
|
composerRangeStartDate,
|
||
|
|
composerSingleDate,
|
||
|
|
formatDateInputValue,
|
||
|
|
isApplicationPreviewEditing,
|
||
|
|
messages,
|
||
|
|
openApplicationPreviewEditor,
|
||
|
|
travelCalculatorOpen
|
||
|
|
}) {
|
||
|
|
function applyLinkedApplicationPreviewDateSelection(selection) {
|
||
|
|
const editor = applicationPreviewEditor.value
|
||
|
|
if (editor.fieldKey !== 'time' || !editor.messageId) {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
const targetMessage = messages.value.find((item) =>
|
||
|
|
String(item.id || '') === String(editor.messageId || '')
|
||
|
|
)
|
||
|
|
if (!targetMessage?.applicationPreview) {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
applicationPreviewEditor.value = {
|
||
|
|
...editor,
|
||
|
|
dateMode: selection.mode === 'range' ? 'range' : 'single',
|
||
|
|
singleDate: selection.startDate,
|
||
|
|
rangeStartDate: selection.startDate,
|
||
|
|
rangeEndDate: selection.endDate || selection.startDate
|
||
|
|
}
|
||
|
|
return commitApplicationPreviewDateEditor(targetMessage)
|
||
|
|
}
|
||
|
|
|
||
|
|
function syncComposerDateFromApplicationEditor() {
|
||
|
|
const editor = applicationPreviewEditor.value
|
||
|
|
const today = formatDateInputValue()
|
||
|
|
composerDateMode.value = editor.dateMode === 'range' ? 'range' : 'single'
|
||
|
|
composerSingleDate.value = editor.singleDate || today
|
||
|
|
composerRangeStartDate.value = editor.rangeStartDate || composerSingleDate.value || today
|
||
|
|
composerRangeEndDate.value = editor.rangeEndDate || composerRangeStartDate.value || today
|
||
|
|
composerDatePickerOpen.value = true
|
||
|
|
travelCalculatorOpen.value = false
|
||
|
|
}
|
||
|
|
|
||
|
|
function openApplicationPreviewEditorFromUi(message, fieldKey, value) {
|
||
|
|
openApplicationPreviewEditor(message, fieldKey, value)
|
||
|
|
if (fieldKey === 'time' && isApplicationPreviewEditing(message, 'time')) {
|
||
|
|
syncComposerDateFromApplicationEditor()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
watch(composerDatePickerOpen, (open, previousOpen) => {
|
||
|
|
if (!open && previousOpen && applicationPreviewEditor.value.fieldKey === 'time') {
|
||
|
|
cancelApplicationPreviewEditor()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
return {
|
||
|
|
applyLinkedApplicationPreviewDateSelection,
|
||
|
|
openApplicationPreviewEditorFromUi
|
||
|
|
}
|
||
|
|
}
|