@xy-planning-network/trees 0.6.8 → 0.6.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/trees.es.js +1361 -1342
- package/dist/trees.umd.js +6 -6
- package/package.json +1 -1
- package/src/lib-components/forms/DateRangePicker.vue +35 -2
- package/src/lib-components/lists/DynamicTable.vue +23 -0
- package/types/composables/date.d.ts +6 -0
- package/types/composables/table.d.ts +2 -1
- package/types/lib-components/forms/DateRangePicker.vue.d.ts +5 -0
package/package.json
CHANGED
|
@@ -11,11 +11,13 @@ const props = withDefaults(
|
|
|
11
11
|
minDate: number
|
|
12
12
|
maxDate: number
|
|
13
13
|
}
|
|
14
|
+
maxRange?: number
|
|
14
15
|
startDate?: number
|
|
15
16
|
label?: string
|
|
16
17
|
help?: string
|
|
17
18
|
}>(),
|
|
18
19
|
{
|
|
20
|
+
maxRange: 0,
|
|
19
21
|
startDate: 0,
|
|
20
22
|
label: "",
|
|
21
23
|
help: "",
|
|
@@ -31,7 +33,7 @@ const updateModelValue = (value: { minDate: number; maxDate: number }) => {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
onMounted(() => {
|
|
34
|
-
flatpickr
|
|
36
|
+
const opts: flatpickr.Options.Options = {
|
|
35
37
|
dateFormat: "m-d-Y",
|
|
36
38
|
mode: "range",
|
|
37
39
|
maxDate: new Date(), // So far, we cannot have options past today for ranges
|
|
@@ -51,7 +53,38 @@ onMounted(() => {
|
|
|
51
53
|
})
|
|
52
54
|
}
|
|
53
55
|
},
|
|
54
|
-
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Handle initial values if set
|
|
59
|
+
if (props.modelValue.minDate != 0 && props.modelValue.maxDate != 0) {
|
|
60
|
+
opts.defaultDate = [
|
|
61
|
+
props.modelValue.minDate * 1000,
|
|
62
|
+
props.modelValue.maxDate * 1000,
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (props.maxRange) {
|
|
67
|
+
// Handle onChange to dynamically adjust maxDate to x days ahead of the selected start date
|
|
68
|
+
opts.onChange = (selectedDates, _, self) => {
|
|
69
|
+
if (selectedDates.length === 1) {
|
|
70
|
+
// Clone date so as to not change selectedDates[0] value
|
|
71
|
+
var daysAhead = new Date(selectedDates[0].getTime())
|
|
72
|
+
var daysBefore = new Date(selectedDates[0].getTime())
|
|
73
|
+
daysAhead.setDate(daysAhead.getDate() + props.maxRange)
|
|
74
|
+
daysBefore.setDate(daysBefore.getDate() - props.maxRange)
|
|
75
|
+
const now = new Date()
|
|
76
|
+
|
|
77
|
+
if (daysAhead > now) {
|
|
78
|
+
daysAhead = now
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
self.set("minDate", daysBefore)
|
|
82
|
+
self.set("maxDate", daysAhead)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
flatpickr(`#${uuid}`, opts)
|
|
55
88
|
})
|
|
56
89
|
</script>
|
|
57
90
|
<template>
|
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
} from "@/composables/table"
|
|
13
13
|
import { useAppFlasher } from "@/composables/useFlashes"
|
|
14
14
|
import { TrailsRespPaged } from "@/api/client"
|
|
15
|
+
import { DateRangeProps } from "@/composables/date"
|
|
15
16
|
import { useTable } from "@/composables/useTable"
|
|
16
17
|
import TableActionButtons from "./TableActionButtons.vue"
|
|
17
18
|
|
|
@@ -66,6 +67,20 @@ const reloadTable = (): void => {
|
|
|
66
67
|
loadAndRender()
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
const setDateRange = (): void => {
|
|
71
|
+
if (dateSearchProps.value.maxRange) {
|
|
72
|
+
const daysAgo = new Date()
|
|
73
|
+
const minDate = daysAgo.setDate(
|
|
74
|
+
daysAgo.getDate() - dateSearchProps.value.maxRange
|
|
75
|
+
)
|
|
76
|
+
const maxDate = new Date()
|
|
77
|
+
dateRange.value = {
|
|
78
|
+
minDate: Math.floor(minDate / 1000),
|
|
79
|
+
maxDate: Math.floor(maxDate.getTime() / 1000),
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
69
84
|
const tableData = ref<Record<string, any>[]>([])
|
|
70
85
|
|
|
71
86
|
const publicMethods: DynamicTableAPI = {
|
|
@@ -121,6 +136,12 @@ const handleSort = (selectedSort: string): void => {
|
|
|
121
136
|
loadAndRender()
|
|
122
137
|
}
|
|
123
138
|
|
|
139
|
+
const dateSearchProps = computed((): DateRangeProps => {
|
|
140
|
+
if (typeof props.tableOptions.dateSearch === "object")
|
|
141
|
+
return props.tableOptions.dateSearch
|
|
142
|
+
return {}
|
|
143
|
+
})
|
|
144
|
+
|
|
124
145
|
const hasContent = computed((): boolean => {
|
|
125
146
|
return rows.value.length ? true : false
|
|
126
147
|
})
|
|
@@ -145,6 +166,7 @@ defineExpose(publicMethods)
|
|
|
145
166
|
|
|
146
167
|
// onCreated
|
|
147
168
|
loadAndRender()
|
|
169
|
+
setDateRange()
|
|
148
170
|
</script>
|
|
149
171
|
<template>
|
|
150
172
|
<div>
|
|
@@ -181,6 +203,7 @@ loadAndRender()
|
|
|
181
203
|
<div v-if="tableOptions.dateSearch" class="w-full max-w-lg lg:max-w-xs">
|
|
182
204
|
<DateRangePicker
|
|
183
205
|
v-model="dateRange"
|
|
206
|
+
v-bind="{ ...dateSearchProps }"
|
|
184
207
|
@update:model-value="dateRangeChanged"
|
|
185
208
|
/>
|
|
186
209
|
</div>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { VNodeChild } from "vue";
|
|
2
2
|
import { ActionItem } from "../composables/nav";
|
|
3
|
+
import { DateRangeProps } from "./date";
|
|
3
4
|
export interface DynamicTableOptions {
|
|
4
|
-
dateSearch?: boolean;
|
|
5
|
+
dateSearch?: boolean | DateRangeProps;
|
|
5
6
|
defaultSort?: string;
|
|
6
7
|
defaultSortDirection?: string;
|
|
7
8
|
refreshTrigger: number;
|
|
@@ -4,10 +4,12 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
|
|
|
4
4
|
minDate: number;
|
|
5
5
|
maxDate: number;
|
|
6
6
|
};
|
|
7
|
+
maxRange?: number | undefined;
|
|
7
8
|
startDate?: number | undefined;
|
|
8
9
|
label?: string | undefined;
|
|
9
10
|
help?: string | undefined;
|
|
10
11
|
}>, {
|
|
12
|
+
maxRange: number;
|
|
11
13
|
startDate: number;
|
|
12
14
|
label: string;
|
|
13
15
|
help: string;
|
|
@@ -16,10 +18,12 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
|
|
|
16
18
|
minDate: number;
|
|
17
19
|
maxDate: number;
|
|
18
20
|
};
|
|
21
|
+
maxRange?: number | undefined;
|
|
19
22
|
startDate?: number | undefined;
|
|
20
23
|
label?: string | undefined;
|
|
21
24
|
help?: string | undefined;
|
|
22
25
|
}>, {
|
|
26
|
+
maxRange: number;
|
|
23
27
|
startDate: number;
|
|
24
28
|
label: string;
|
|
25
29
|
help: string;
|
|
@@ -28,6 +32,7 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
|
|
|
28
32
|
}, {
|
|
29
33
|
label: string;
|
|
30
34
|
help: string;
|
|
35
|
+
maxRange: number;
|
|
31
36
|
startDate: number;
|
|
32
37
|
}, {}>;
|
|
33
38
|
export default _default;
|