PluginProbe
The Innovative Form Builder – IvyForms / 1.1
The Innovative Form Builder – IvyForms v1.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / frontend / src / views / _components / table / composables / useTableDatePicker.ts

useTableDatePicker.ts in The Innovative Form Builder – IvyForms 1.1, at frontend/src/views/_components/table/composables/useTableDatePicker.ts

55 lines 1.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { computed, nextTick, ref, type ComputedRef, type Ref } from 'vue'
2
3 function resolveElement(value: unknown): HTMLElement | null {
4 if (!value) return null
5 if (value instanceof HTMLElement) return value
6 if (typeof value === 'object' && value !== null && '$el' in value) {
7 const el = (value as { $el: unknown }).$el
8 return el instanceof HTMLElement ? el : null
9 }
10 return null
11 }
12
13 export function useTableDatePicker(
14 selectedDate: Ref<[string, string] | null>,
15 onOpen?: () => void,
16 pickerRef?: Ref<unknown>,
17 ) {
18 const showDatePicker = ref(false)
19
20 const datePickerIndicator: ComputedRef<boolean> = computed(() => selectedDate.value !== null)
21
22 const openDatePicker = () => {
23 showDatePicker.value = true
24 nextTick(() => {
25 onOpen?.()
26 const scope = resolveElement(pickerRef?.value) ?? document
27 const datePickerInput = scope.querySelector('.el-date-editor') as HTMLInputElement | null
28 datePickerInput?.click()
29 })
30 }
31
32 const closeDatePicker = () => {
33 showDatePicker.value = false
34 }
35
36 const hideDatePickerIndicator = () => {
37 selectedDate.value = null
38 showDatePicker.value = false
39 }
40
41 const toggleDatePicker = () => {
42 if (showDatePicker.value) closeDatePicker()
43 else openDatePicker()
44 }
45
46 return {
47 showDatePicker,
48 datePickerIndicator,
49 openDatePicker,
50 closeDatePicker,
51 hideDatePickerIndicator,
52 toggleDatePicker,
53 }
54 }
55