@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xy-planning-network/trees",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "repository": "github:xy-planning-network/trees",
@@ -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(`#${uuid}`, {
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>
@@ -2,3 +2,9 @@ export interface DateRange {
2
2
  minDate: number;
3
3
  maxDate: number;
4
4
  }
5
+ export interface DateRangeProps {
6
+ help?: string;
7
+ label?: string;
8
+ maxRange?: number;
9
+ startDate?: number;
10
+ }
@@ -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;