Skip to content
This repository was archived by the owner on Apr 17, 2022. It is now read-only.

Commit fb30db6

Browse files
committed
refactor: Code cleanup
- Redundant interfaces removed - Shared props extracted - Props passing from main to menu improved
1 parent cea5e0e commit fb30db6

File tree

11 files changed

+172
-386
lines changed

11 files changed

+172
-386
lines changed

src/Vue3DatePicker/Vue3DatePicker.vue

Lines changed: 4 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -43,80 +43,12 @@
4343
:class="theme"
4444
:style="menuPosition"
4545
v-bind="{
46-
weekNumbers,
47-
weekStart,
48-
disableMonthYearSelect,
49-
menuClassName,
50-
calendarClassName,
51-
yearRange,
52-
range,
46+
...passCommonProps($props),
5347
multiCalendars: multiCalendarDefault,
54-
multiCalendarsSolo,
55-
calendarCellClassName,
56-
enableTimePicker,
57-
is24,
58-
hoursIncrement,
59-
minutesIncrement,
60-
hoursGridIncrement,
61-
minutesGridIncrement,
62-
minDate,
63-
maxDate,
64-
autoApply,
65-
selectText,
66-
cancelText,
6748
previewFormat: previewFormatDefault,
68-
locale,
69-
weekNumName,
70-
disabledDates,
7149
filters: defaultFilters,
72-
minTime,
73-
maxTime,
74-
inline,
7550
openOnTop,
76-
monthPicker,
77-
timePicker,
78-
monthNameFormat,
79-
startDate,
8051
startTime: defaultStartTime,
81-
monthYearComponent,
82-
timePickerComponent,
83-
actionRowComponent,
84-
customProps,
85-
hideOffsetDates,
86-
autoRange,
87-
noToday,
88-
noHoursOverlay,
89-
noMinutesOverlay,
90-
disabledWeekDays,
91-
allowedDates,
92-
showNowButton,
93-
nowButtonLabel,
94-
monthChangeOnScroll,
95-
markers,
96-
uid,
97-
modeHeight,
98-
enableSeconds,
99-
secondsIncrement,
100-
secondsGridIncrement,
101-
noSecondsOverlay,
102-
escClose,
103-
spaceConfirm,
104-
monthChangeOnArrows,
105-
textInput,
106-
disabled,
107-
readonly,
108-
multiDates,
109-
presetRanges,
110-
flow,
111-
preventMinMaxNavigation,
112-
minRange,
113-
maxRange,
114-
fixedStart,
115-
fixedEnd,
116-
multiDatesLimit,
117-
reverseYears,
118-
keepActionRow,
119-
weekPicker,
12052
}"
12153
v-model:internalModelValue="internalModelValue"
12254
@close-picker="closeMenu"
@@ -136,18 +68,7 @@
13668
</template>
13769

13870
<script lang="ts" setup>
139-
import {
140-
computed,
141-
DefineComponent,
142-
onMounted,
143-
onUnmounted,
144-
PropType,
145-
provide,
146-
ref,
147-
toRef,
148-
useSlots,
149-
watch,
150-
} from 'vue';
71+
import { computed, onMounted, onUnmounted, PropType, provide, ref, toRef, useSlots, watch } from 'vue';
15172
import { getHours, getMinutes, getSeconds, Locale } from 'date-fns';
15273
15374
import DatepickerInput from './components/DatepickerInput.vue';
@@ -161,14 +82,8 @@
16182
ITextInputOptions,
16283
ModelValue,
16384
ITimeValue,
164-
WeekStartNum,
165-
WeekStartStr,
166-
IMarker,
16785
ITransition,
168-
IDisableDates,
16986
AltPosition,
170-
PresetRange,
171-
Flow,
17287
} from './interfaces';
17388
import { getDefaultPattern, isValidTime } from './utils/date-utils';
17489
import { getDefaultTextInputOptions, getDefaultFilters, mergeDefaultTransitions } from './utils/util';
@@ -177,6 +92,7 @@
17792
import { isString } from './utils/type-guard';
17893
import { mapSlots } from './components/composition/slots';
17994
import { onClickOutside } from './directives/clickOutside';
95+
import { CommonProps, passCommonProps } from './utils/props';
18096
18197
const emit = defineEmits([
18298
'update:modelValue',
@@ -192,35 +108,14 @@
192108
'updateMonthYear',
193109
]);
194110
const props = defineProps({
195-
uid: { type: String as PropType<string>, default: null },
111+
...CommonProps,
196112
name: { type: String as PropType<string>, default: null },
197-
is24: { type: Boolean as PropType<boolean>, default: true },
198-
enableTimePicker: { type: Boolean as PropType<boolean>, default: true },
199-
locale: { type: String as PropType<string>, default: 'en-US' },
200-
range: { type: Boolean as PropType<boolean>, default: false },
201113
multiCalendars: { type: [Boolean, Number, String] as PropType<boolean | number | string>, default: null },
202-
multiCalendarsSolo: { type: Boolean as PropType<boolean>, default: false },
203114
modelValue: { type: [String, Date, Array, Object] as PropType<ModelValue>, default: null },
204115
position: { type: String as PropType<OpenPosition>, default: 'center' },
205116
placeholder: { type: String as PropType<string>, default: null },
206-
weekNumbers: { type: Boolean as PropType<boolean>, default: false },
207117
dark: { type: Boolean as PropType<boolean>, default: false },
208-
hoursIncrement: { type: [String, Number] as PropType<string | number>, default: 1 },
209-
minutesIncrement: { type: [String, Number] as PropType<string | number>, default: 1 },
210-
secondsIncrement: { type: [String, Number] as PropType<string | number>, default: 1 },
211-
hoursGridIncrement: { type: [String, Number] as PropType<string | number>, default: 1 },
212-
minutesGridIncrement: { type: [String, Number] as PropType<string | number>, default: 5 },
213-
secondsGridIncrement: { type: [String, Number] as PropType<string | number>, default: 5 },
214-
minDate: { type: [Date, String] as PropType<Date | string>, default: null },
215-
maxDate: { type: [Date, String] as PropType<Date | string>, default: null },
216-
minTime: { type: Object as PropType<ITimeValue>, default: null },
217-
maxTime: { type: Object as PropType<ITimeValue>, default: null },
218-
weekStart: { type: [String, Number] as PropType<WeekStartNum | WeekStartStr>, default: 1 },
219-
disabled: { type: Boolean as PropType<boolean>, default: false },
220-
readonly: { type: Boolean as PropType<boolean>, default: false },
221118
required: { type: Boolean as PropType<boolean>, default: false },
222-
monthNameFormat: { type: String as PropType<'long' | 'short'>, default: 'short' },
223-
weekNumName: { type: String as PropType<string>, default: 'W' },
224119
format: {
225120
type: [String, Function] as PropType<IFormat>,
226121
default: () => null,
@@ -230,71 +125,23 @@
230125
default: () => null,
231126
},
232127
inputClassName: { type: String as PropType<string>, default: null },
233-
menuClassName: { type: String as PropType<string>, default: null },
234-
calendarClassName: { type: String as PropType<string>, default: null },
235-
calendarCellClassName: { type: String as PropType<string>, default: null },
236128
hideInputIcon: { type: Boolean as PropType<boolean>, default: false },
237129
state: { type: Boolean as PropType<boolean>, default: null },
238130
clearable: { type: Boolean as PropType<boolean>, default: true },
239131
closeOnScroll: { type: Boolean as PropType<boolean>, default: false },
240-
autoApply: { type: Boolean as PropType<boolean>, default: false },
241132
filters: { type: Object as PropType<IDateFilter>, default: () => ({}) },
242-
disableMonthYearSelect: { type: Boolean as PropType<boolean>, default: false },
243-
yearRange: { type: Array as PropType<number[]>, default: () => [1900, 2100] },
244-
disabledDates: { type: [Array, Function] as PropType<Date[] | string[] | IDisableDates>, default: () => [] },
245-
disabledWeekDays: { type: Array as PropType<string[] | number[]>, default: () => [] },
246-
inline: { type: Boolean as PropType<boolean>, default: false },
247133
inlineWithInput: { type: Boolean as PropType<boolean>, default: false },
248-
selectText: { type: String as PropType<string>, default: 'Select' },
249-
cancelText: { type: String as PropType<string>, default: 'Cancel' },
250134
autoPosition: { type: Boolean as PropType<boolean>, default: true },
251-
monthPicker: { type: Boolean as PropType<boolean>, default: false },
252-
timePicker: { type: Boolean as PropType<boolean>, default: false },
253135
closeOnAutoApply: { type: Boolean as PropType<boolean>, default: true },
254-
textInput: { type: Boolean as PropType<boolean>, default: false },
255136
textInputOptions: { type: Object as PropType<ITextInputOptions>, default: () => ({}) },
256137
teleport: { type: String as PropType<string>, default: 'body' },
257-
startDate: { type: [Date, String] as PropType<string | Date>, default: null },
258-
startTime: { type: [Object, Array] as PropType<ITimeValue | ITimeValue[]>, default: null },
259-
monthYearComponent: { type: Object as PropType<DefineComponent>, default: null },
260-
timePickerComponent: { type: Object as PropType<DefineComponent>, default: null },
261-
actionRowComponent: { type: Object as PropType<DefineComponent>, default: null },
262-
customProps: { type: Object as PropType<Record<string, unknown>>, default: null },
263-
hideOffsetDates: { type: Boolean as PropType<boolean>, default: false },
264-
autoRange: { type: [Number, String] as PropType<number | string>, default: null },
265-
noToday: { type: Boolean as PropType<boolean>, default: false },
266-
noHoursOverlay: { type: Boolean as PropType<boolean>, default: false },
267-
noMinutesOverlay: { type: Boolean as PropType<boolean>, default: false },
268-
noSecondsOverlay: { type: Boolean as PropType<boolean>, default: false },
269138
altPosition: { type: [Boolean, Function] as PropType<AltPosition>, default: false },
270-
allowedDates: { type: Array as PropType<string[] | Date[]>, default: () => [] },
271-
showNowButton: { type: Boolean as PropType<boolean>, default: false },
272-
nowButtonLabel: { type: String as PropType<string>, default: 'Now' },
273139
partialRange: { type: Boolean as PropType<boolean>, default: true },
274-
monthChangeOnScroll: { type: [Boolean, String] as PropType<boolean | 'inverse'>, default: true },
275-
markers: { type: Array as PropType<IMarker[]>, default: () => [] },
276140
transitions: { type: Boolean as PropType<boolean | ITransition>, default: true },
277-
modeHeight: { type: [Number, String] as PropType<number | string>, default: 255 },
278-
enableSeconds: { type: Boolean as PropType<boolean>, default: false },
279141
openMenuOnFocus: { type: Boolean as PropType<boolean>, default: true },
280-
escClose: { type: Boolean as PropType<boolean>, default: true },
281-
spaceConfirm: { type: Boolean as PropType<boolean>, default: true },
282-
monthChangeOnArrows: { type: Boolean as PropType<boolean>, default: true },
283142
formatLocale: { type: Object as PropType<Locale>, default: null },
284143
autocomplete: { type: String as PropType<string>, default: null },
285-
multiDates: { type: Boolean as PropType<boolean>, default: false },
286-
presetRanges: { type: Array as PropType<PresetRange[]>, default: () => [] },
287-
flow: { type: Array as PropType<Flow>, default: () => [] },
288-
preventMinMaxNavigation: { type: Boolean as PropType<boolean>, default: false },
289-
minRange: { type: [Number, String] as PropType<number | string>, default: null },
290-
maxRange: { type: [Number, String] as PropType<number | string>, default: null },
291-
fixedStart: { type: Boolean as PropType<boolean>, default: false },
292-
fixedEnd: { type: Boolean as PropType<boolean>, default: false },
293144
utc: { type: Boolean as PropType<boolean>, default: false },
294-
multiDatesLimit: { type: [Number, String] as PropType<number | string>, default: null },
295-
reverseYears: { type: Boolean as PropType<boolean>, default: false },
296-
keepActionRow: { type: Boolean as PropType<boolean>, default: false },
297-
weekPicker: { type: Boolean as PropType<boolean>, default: false },
298145
});
299146
const slots = useSlots();
300147
const isOpen = ref(false);

src/Vue3DatePicker/components/Calendar.vue

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -109,48 +109,29 @@
109109
watch,
110110
} from 'vue';
111111
112-
import {
113-
DynamicClass,
114-
IDateFilter,
115-
ICalendarDate,
116-
ICalendarDay,
117-
IDefaultSelect,
118-
IMarker,
119-
ITransition,
120-
InternalModuleValue,
121-
} from '../interfaces';
112+
import { DynamicClass, ICalendarDate, ICalendarDay, IMarker, ITransition } from '../interfaces';
122113
import { getDayNames, getDefaultMarker, unrefElement } from '../utils/util';
123114
import { isDateAfter, isDateEqual, setDateMonthOrYear } from '../utils/date-utils';
115+
import { MonthCalendarSharedProps } from '../utils/props';
124116
125117
const emit = defineEmits(['selectDate', 'setHoverDate', 'handleScroll', 'mount']);
126118
127119
const props = defineProps({
120+
...MonthCalendarSharedProps,
128121
locale: { type: String as PropType<string>, default: 'en-Us' },
129122
weekNumName: { type: String as PropType<string>, default: 'W' },
130123
weekStart: { type: [Number, String] as PropType<number | string>, default: 1 },
131124
weekNumbers: { type: Boolean as PropType<boolean>, default: false },
132125
mappedDates: { type: Array as PropType<ICalendarDate[]>, default: () => [] },
133126
monthYearComponent: { type: Object as PropType<DefineComponent>, default: null },
134-
range: { type: Boolean as PropType<boolean>, default: false },
135-
filters: { type: Object as PropType<IDateFilter>, default: () => ({}) },
136-
customProps: { type: Object as PropType<Record<string, unknown>>, default: null },
137127
calendarClassName: { type: String as PropType<string>, default: null },
138-
monthPicker: { type: Boolean as PropType<boolean>, default: false },
139128
timePicker: { type: Boolean as PropType<boolean>, default: false },
140129
disableMonthYearSelect: { type: Boolean as PropType<boolean>, default: false },
141130
getWeekNum: {
142131
type: Function as PropType<(dates: UnwrapRef<ICalendarDay[]>) => string | number>,
143132
default: () => '',
144133
},
145-
instance: { type: Number as PropType<number>, default: 1 },
146-
multiCalendars: { type: Number as PropType<number>, default: 0 },
147-
multiCalendarsSolo: { type: Boolean as PropType<boolean>, default: false },
148-
years: { type: Array as PropType<IDefaultSelect[]>, default: () => [] },
149-
months: { type: Array as PropType<IDefaultSelect[]>, default: () => [] },
150-
month: { type: Number as PropType<number>, default: 0 },
151-
year: { type: Number as PropType<number>, default: 0 },
152134
modeHeight: { type: [Number, String] as PropType<number | string>, default: 255 },
153-
internalModelValue: { type: [Date, Array] as PropType<InternalModuleValue>, default: null },
154135
});
155136
156137
const showMakerTooltip = ref<Date | null>(null);

0 commit comments

Comments
 (0)