tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"useTableData.mjs","sources":["../../../../components/date-picker/hooks/useTableData.tsx"],"sourcesContent":["import { useConfig } from '@tdesign/shared-hooks';\nimport { isArray, isFunction } from 'lodash-es';\nimport dayjs from 'dayjs';\nimport {\n getWeeks,\n getYears,\n getMonths,\n getQuarters,\n flagActive,\n getRangeBounds,\n monthHasAnyAllowed as monthAllowed,\n yearHasAnyAllowed as yearAllowed,\n} from '@tdesign/common-js/date-picker/utils';\n\nexport function useTableData(props: any) {\n // 国际化文本初始化\n const { globalConfig } = useConfig('datePicker');\n\n const options = {\n minDate: props.minDate,\n maxDate: props.maxDate,\n disableDate: props.disableDate,\n firstDayOfWeek: props.firstDayOfWeek ?? globalConfig.value.firstDayOfWeek,\n monthLocal: globalConfig.value.months as string[],\n quarterLocal: globalConfig.value.quarters as string[],\n showWeekOfYear: props.mode === 'week',\n dayjsLocale: globalConfig.value.dayjsLocale,\n cancelRangeSelectLimit: props.cancelRangeSelectLimit,\n };\n\n // 结合 range 进行禁用与边界设置\n const baseDisableDate = options.disableDate as (d: Date) => boolean | undefined;\n let finalDisableDate: (d: Date) => boolean = (date: Date) => (baseDisableDate ? !!baseDisableDate(date) : false);\n\n if (isArray(props.range)) {\n const { min: rawMin, max: rawMax } = getRangeBounds(props.range);\n const rangeMin = rawMin ? new Date(dayjs(rawMin).startOf('day').format()) : null;\n const rangeMax = rawMax ? new Date(dayjs(rawMax).endOf('day').format()) : null;\n const min = rangeMin;\n const max = rangeMax;\n\n // 与原有 min/maxDate 求交集(仅在 date/week 模式下使用,以免 year/month/quarter 被过度限制)\n if (['date', 'week'].includes(props.mode)) {\n if (min) {\n options.minDate = options.minDate ? new Date(Math.max(options.minDate.getTime(), min.getTime())) : min;\n }\n if (max) {\n options.maxDate = options.maxDate ? new Date(Math.min(options.maxDate.getTime(), max.getTime())) : max;\n }\n }\n\n // 额外通过函数层面确保越界禁用(防御性)\n const intervalOverlap = (aStart: Date, aEnd: Date, bStart: Date | null, bEnd: Date | null) => {\n const s1 = aStart.getTime();\n const e1 = aEnd.getTime();\n const s2 = bStart ? bStart.getTime() : -Infinity;\n const e2 = bEnd ? bEnd.getTime() : +Infinity;\n return !(e1 < s2 || s1 > e2);\n };\n\n finalDisableDate = (date: Date) => {\n const base = baseDisableDate ? !!baseDisableDate(date) : false;\n\n if (props.mode === 'date' || props.mode === 'week') {\n const t = date.getTime();\n const aboveMin = min ? t >= min.getTime() : true;\n const belowMax = max ? t <= max.getTime() : true;\n const allowed = aboveMin && belowMax;\n return base || !allowed;\n }\n\n if (props.mode === 'month') {\n const start = new Date(date.getFullYear(), date.getMonth(), 1);\n const end = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n end.setHours(23, 59, 59, 999);\n const allowed = intervalOverlap(start, end, min, max);\n return base || !allowed;\n }\n\n if (props.mode === 'quarter') {\n const startMonth = Math.floor(date.getMonth() / 3) * 3;\n const start = new Date(date.getFullYear(), startMonth, 1);\n const end = new Date(date.getFullYear(), startMonth + 3, 0);\n end.setHours(23, 59, 59, 999);\n const allowed = intervalOverlap(start, end, min, max);\n return base || !allowed;\n }\n\n if (props.mode === 'year') {\n const start = new Date(date.getFullYear(), 0, 1);\n const end = new Date(date.getFullYear(), 11, 31);\n end.setHours(23, 59, 59, 999);\n const allowed = intervalOverlap(start, end, min, max);\n return base || !allowed;\n }\n\n return base;\n };\n } else if (isFunction(props.range)) {\n const allow = props.range as (d: Date) => boolean;\n finalDisableDate = (date: Date) => {\n const base = baseDisableDate ? !!baseDisableDate(date) : false;\n\n if (props.mode === 'date' || props.mode === 'week') {\n const disallowedByRange = !allow(date);\n return base || disallowedByRange;\n }\n\n if (props.mode === 'month') {\n const allowed = monthAllowed(props.range, date.getFullYear(), date.getMonth());\n return base || !allowed;\n }\n\n if (props.mode === 'quarter') {\n const startMonth = Math.floor(date.getMonth() / 3) * 3;\n let allowed = false;\n for (let m = startMonth; m < startMonth + 3; m++) {\n if (monthAllowed(props.range, date.getFullYear(), m)) {\n allowed = true;\n break;\n }\n }\n return base || !allowed;\n }\n\n if (props.mode === 'year') {\n const allowed = yearAllowed(props.range, date.getFullYear());\n return base || !allowed;\n }\n\n return base;\n };\n }\n\n options.disableDate = finalDisableDate;\n\n let data: Array<any> = [];\n if (props.mode === 'date') {\n data = getWeeks({ year: props.year, month: props.month }, options);\n } else if (props.mode === 'week') {\n data = getWeeks({ year: props.year, month: props.month }, options);\n } else if (props.mode === 'quarter') {\n data = getQuarters(props.year, options);\n } else if (props.mode === 'month') {\n data = getMonths(props.year, options);\n } else if (props.mode === 'year') {\n data = getYears(props.year, options);\n }\n return flagActive(data, {\n start: props.start,\n end: props.end,\n hoverStart: props.hoverStart,\n hoverEnd: props.hoverEnd,\n type: props.mode,\n isRange: props.isRange,\n value: props.value,\n multiple: props.multiple,\n });\n}\n"],"names":["useTableData","props","_props$firstDayOfWeek","_useConfig","useConfig","globalConfig","options","minDate","maxDate","disableDate","firstDayOfWeek","value","monthLocal","months","quarterLocal","quarters","showWeekOfYear","mode","dayjsLocale","cancelRangeSelectLimit","baseDisableDate","finalDisableDate","date","isArray","range","_getRangeBounds","getRangeBounds","rawMin","min","rawMax","max","rangeMin","Date","dayjs","startOf","format","rangeMax","endOf","includes","Math","getTime","intervalOverlap","aStart","aEnd","bStart","bEnd","s1","e1","s2","Infinity","e2","base","t","aboveMin","belowMax","allowed","start","getFullYear","getMonth","end","setHours","startMonth","floor","isFunction","allow","disallowedByRange","monthAllowed","m","yearAllowed","data","getWeeks","year","month","getQuarters","getMonths","getYears","flagActive","hoverStart","hoverEnd","type","isRange","multiple"],"mappings":"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"}