@tarojs/components-react 4.1.4-beta.10 → 4.1.4-beta.13

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.
Files changed (80) hide show
  1. package/README.md +25 -0
  2. package/dist/components/picker/index.js +732 -0
  3. package/dist/components/picker/index.js.map +1 -0
  4. package/dist/components/picker/picker-group.js +469 -0
  5. package/dist/components/picker/picker-group.js.map +1 -0
  6. package/dist/index.css +1 -1
  7. package/dist/index.js +79 -11
  8. package/dist/index.js.map +1 -1
  9. package/dist/solid/components/picker/index.js +775 -0
  10. package/dist/solid/components/picker/index.js.map +1 -0
  11. package/dist/solid/components/picker/picker-group.js +482 -0
  12. package/dist/solid/components/picker/picker-group.js.map +1 -0
  13. package/dist/solid/index.css +1 -1
  14. package/dist/solid/index.js +79 -8
  15. package/dist/solid/index.js.map +1 -1
  16. package/dist/solid/utils/index.js +116 -1
  17. package/dist/solid/utils/index.js.map +1 -1
  18. package/dist/styles/picker-styles.css +2 -0
  19. package/dist/styles/picker-styles.css.map +1 -0
  20. package/dist/styles/picker-styles.js +7 -0
  21. package/dist/styles/picker-styles.js.map +1 -0
  22. package/dist/utils/index.js +116 -1
  23. package/dist/utils/index.js.map +1 -1
  24. package/package.json +6 -6
  25. package/dist/components/button/index.js +0 -87
  26. package/dist/components/button/index.js.map +0 -1
  27. package/dist/components/icon/index.js +0 -36
  28. package/dist/components/icon/index.js.map +0 -1
  29. package/dist/components/image/index.js +0 -86
  30. package/dist/components/image/index.js.map +0 -1
  31. package/dist/components/image/style/index.css.js +0 -4
  32. package/dist/components/image/style/index.css.js.map +0 -1
  33. package/dist/components/input/index.js +0 -233
  34. package/dist/components/input/index.js.map +0 -1
  35. package/dist/components/input/style/index.scss.js +0 -4
  36. package/dist/components/input/style/index.scss.js.map +0 -1
  37. package/dist/components/pull-down-refresh/index.js +0 -320
  38. package/dist/components/pull-down-refresh/index.js.map +0 -1
  39. package/dist/components/pull-down-refresh/style/index.css.js +0 -4
  40. package/dist/components/pull-down-refresh/style/index.css.js.map +0 -1
  41. package/dist/components/scroll-view/index.js +0 -184
  42. package/dist/components/scroll-view/index.js.map +0 -1
  43. package/dist/components/scroll-view/style/index.css.js +0 -4
  44. package/dist/components/scroll-view/style/index.css.js.map +0 -1
  45. package/dist/components/swiper/index.js +0 -461
  46. package/dist/components/swiper/index.js.map +0 -1
  47. package/dist/components/swiper/style/index.css.js +0 -4
  48. package/dist/components/swiper/style/index.css.js.map +0 -1
  49. package/dist/components/text/index.js +0 -28
  50. package/dist/components/text/index.js.map +0 -1
  51. package/dist/components/text/style/index.css.js +0 -4
  52. package/dist/components/text/style/index.css.js.map +0 -1
  53. package/dist/components/view/index.js +0 -80
  54. package/dist/components/view/index.js.map +0 -1
  55. package/dist/solid/components/button/index.js +0 -95
  56. package/dist/solid/components/button/index.js.map +0 -1
  57. package/dist/solid/components/button/style/index.scss.js +0 -4
  58. package/dist/solid/components/button/style/index.scss.js.map +0 -1
  59. package/dist/solid/components/icon/index.js +0 -39
  60. package/dist/solid/components/icon/index.js.map +0 -1
  61. package/dist/solid/components/icon/style/index.scss.js +0 -4
  62. package/dist/solid/components/icon/style/index.scss.js.map +0 -1
  63. package/dist/solid/components/image/index.js +0 -94
  64. package/dist/solid/components/image/index.js.map +0 -1
  65. package/dist/solid/components/image/style/index.css.js +0 -4
  66. package/dist/solid/components/image/style/index.css.js.map +0 -1
  67. package/dist/solid/components/scroll-view/index.js +0 -188
  68. package/dist/solid/components/scroll-view/index.js.map +0 -1
  69. package/dist/solid/components/scroll-view/style/index.css.js +0 -4
  70. package/dist/solid/components/scroll-view/style/index.css.js.map +0 -1
  71. package/dist/solid/components/text/index.js +0 -32
  72. package/dist/solid/components/text/index.js.map +0 -1
  73. package/dist/solid/components/text/style/index.css.js +0 -4
  74. package/dist/solid/components/text/style/index.css.js.map +0 -1
  75. package/dist/solid/components/view/index.js +0 -88
  76. package/dist/solid/components/view/index.js.map +0 -1
  77. /package/dist/components/{button → picker}/style/index.scss.js +0 -0
  78. /package/dist/components/{button → picker}/style/index.scss.js.map +0 -0
  79. /package/dist/{components/icon → solid/components/picker}/style/index.scss.js +0 -0
  80. /package/dist/{components/icon → solid/components/picker}/style/index.scss.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/picker/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport { View } from '@tarojs/components'\nimport classNames from 'classnames'\nimport * as React from 'react'\n\nimport {\n compareTime,\n getDayRange,\n getMonthRange,\n getYearRange,\n hoursRange,\n minutesRange,\n omit,\n verifyDate,\n verifyTime,\n verifyValue\n} from '../../utils'\nimport { PickerGroup } from './picker-group'\n\n// 定义 RegionData 类型,与 Taro 官方保持一致\nexport interface RegionData {\n value: string\n code: string\n postcode?: string\n children?: RegionData[]\n}\n\n// 稳定的空数组引用,避免每次渲染都创建新引用\nconst EMPTY_ARRAY: any[] = []\nconst EMPTY_OBJECT: Record<string, any> = {}\n\n// 数据验证函数\nfunction validateRegionData(data: RegionData[], componentName = 'Picker'): { valid: boolean, error?: string } {\n if (!data) {\n return { valid: false, error: `${componentName}: regionData is required for region mode` }\n }\n\n if (!Array.isArray(data)) {\n return { valid: false, error: `${componentName}: regionData must be an array` }\n }\n\n if (data.length === 0) {\n return { valid: false, error: `${componentName}: regionData cannot be empty` }\n }\n\n // 检查数据结构\n const validateItem = (item: RegionData, path: string): { valid: boolean, error?: string } => {\n if (!item || typeof item !== 'object') {\n return { valid: false, error: `${componentName}: Invalid item at ${path}` }\n }\n\n if (!item.value || typeof item.value !== 'string') {\n return { valid: false, error: `${componentName}: Missing or invalid 'value' field at ${path}` }\n }\n\n if (!item.code || typeof item.code !== 'string') {\n return { valid: false, error: `${componentName}: Missing or invalid 'code' field at ${path}` }\n }\n\n if (item.postcode !== undefined && typeof item.postcode !== 'string') {\n return { valid: false, error: `${componentName}: Invalid 'postcode' field at ${path}` }\n }\n\n if (item.children && !Array.isArray(item.children)) {\n return { valid: false, error: `${componentName}: 'children' must be an array at ${path}` }\n }\n\n if (item.children) {\n for (let i = 0; i < item.children.length; i++) {\n const childResult = validateItem(item.children[i], `${path}.children[${i}]`)\n if (!childResult.valid) return childResult\n }\n }\n\n return { valid: true }\n }\n\n for (let i = 0; i < data.length; i++) {\n const result = validateItem(data[i], `regionData[${i}]`)\n if (!result.valid) return result\n }\n\n return { valid: true }\n}\n\nexport type Mode = 'selector' | 'multiSelector' | 'time' | 'date' | 'region'\nexport type Fields = 'day' | 'month' | 'year'\nexport type RegionLevel = 'province' | 'city' | 'region'\nexport type PickerValue = number | number[] | string | string[]\n\nexport interface PickerText {\n okText?: string\n cancelText?: string\n}\n\nexport interface PickerDate {\n _value: Date\n _start: Date\n _end: Date\n _updateValue: [number, number, number]\n}\n\ninterface IProps {\n mode?: Mode\n disabled?: boolean\n range?: any[]\n rangeKey?: string\n value?: PickerValue\n start?: string\n end?: string\n fields?: Fields\n name?: string\n headerText?: string\n regionData?: RegionData[] // 省市区/县数据(region 模式专用)\n level?: RegionLevel\n textProps?: PickerText\n onChange?: (e: { detail: { value: PickerValue, code?: string, postcode?: string } }) => void\n onColumnChange?: (e: { detail: { column: number, value: number } }) => void\n onCancel?: () => void\n children?: React.ReactNode\n style?: React.CSSProperties\n forwardedRef?: React.MutableRefObject<HTMLDivElement | null>\n formType?: string\n}\n\ninterface IState {\n pickerValue: PickerValue\n selectedIndices: number[] // 索引数组\n hidden: boolean\n fadeOut: boolean\n isWillLoadCalled: boolean\n timestamp: number\n}\n\n// 普通函数,不需要useCallback\nfunction getRegionColumnsCount(level: RegionLevel): number {\n switch (level) {\n case 'province': return 1\n case 'city': return 2\n case 'region': return 3\n default: return 3 // 默认显示省市区/县三列\n }\n}\n\nexport function Picker(props: IProps) {\n const {\n mode = 'selector',\n disabled = false,\n range = EMPTY_ARRAY,\n rangeKey,\n value,\n start = '',\n end = '',\n fields = 'day',\n headerText,\n level = 'region',\n regionData,\n textProps = EMPTY_OBJECT,\n onChange,\n onColumnChange,\n onCancel,\n children,\n style,\n forwardedRef,\n formType,\n ...restProps\n } = props\n const indexRef = React.useRef<number[]>([])\n const pickerDateRef = React.useRef<PickerDate>()\n\n const [state, setState] = React.useState<IState>({\n pickerValue: value || EMPTY_ARRAY,\n selectedIndices: EMPTY_ARRAY.slice(), // 索引数组\n hidden: true,\n fadeOut: false,\n isWillLoadCalled: false,\n timestamp: 0 // 用以部分模式下强制刷新组件的的时间戳,多用于反复限位\n })\n\n // 在组件内部\n const [columnsCount, setColumnsCount] = React.useState(() => getRegionColumnsCount(level))\n\n // 只在level变化时更新列数\n React.useEffect(() => {\n setColumnsCount(getRegionColumnsCount(level))\n }, [level])\n\n // 获取当前索引数组\n const getIndices = React.useCallback(() => {\n return indexRef.current\n }, [])\n\n // 处理属性变化\n const handleProps = React.useCallback(() => {\n if (mode === 'selector') {\n const val = value as number\n indexRef.current = [verifyValue(val, range) ? Math.floor(val) : 0]\n } else if (mode === 'multiSelector') {\n const val = value as number[]\n indexRef.current = []\n range.forEach((rangeItem, index) => {\n const valItem = val?.[index]\n const item = verifyValue(valItem, rangeItem as any[]) ? Math.floor(valItem) : 0\n indexRef.current.push(item)\n })\n } else if (mode === 'time') {\n let val = value as string\n if (!verifyTime(val)) {\n console.warn('time picker value illegal')\n val = '0:0'\n }\n const time = val.split(':').map(n => +n)\n\n // 在 hoursRange 和 minutesRange 中找到对应的索引\n const hourIndex = hoursRange.findIndex(item => parseInt(item) === time[0])\n const minuteIndex = minutesRange.findIndex(item => parseInt(item) === time[1])\n\n // 确保索引在有效范围内\n const safeHourIndex = hourIndex >= 0 ? hourIndex : 0 // 默认为第一项\n const safeMinuteIndex = minuteIndex >= 0 ? minuteIndex : 0 // 默认为第一项\n\n indexRef.current = [\n Math.max(0, Math.min(safeHourIndex, hoursRange.length - 1)),\n Math.max(0, Math.min(safeMinuteIndex, minutesRange.length - 1))\n ]\n } else if (mode === 'date') {\n const val = value as string\n let _value = verifyDate(val) || new Date(new Date().setHours(0, 0, 0, 0))\n const _start = verifyDate(start) || new Date('1970/01/01')\n const _end = verifyDate(end) || new Date('2999/01/01')\n if (!(_start <= _end)) {\n throw new Error(`Picker start time must be less than end time.`)\n }\n if (!(_value >= _start && _value <= _end)) {\n _value = _start\n }\n const currentYear = _value.getFullYear()\n const currentMonth = _value.getMonth() + 1\n const currentDay = _value.getDate()\n const yearRange = getYearRange(_start.getFullYear(), _end.getFullYear())\n const monthRange = getMonthRange(_start, _end, currentYear)\n const dayRange = getDayRange(_start, _end, currentYear, currentMonth)\n indexRef.current = [\n yearRange.indexOf(currentYear),\n monthRange.indexOf(currentMonth),\n dayRange.indexOf(currentDay)\n ]\n if (\n !pickerDateRef.current ||\n pickerDateRef.current._value.getTime() !== _value.getTime() ||\n pickerDateRef.current._start.getTime() !== _start.getTime() ||\n pickerDateRef.current._end.getTime() !== _end.getTime()\n ) {\n pickerDateRef.current = {\n _value,\n _start,\n _end,\n _updateValue: [currentYear, currentMonth, currentDay]\n }\n }\n } else if (mode === 'region') {\n // region 模式处理 - 验证数据\n if (!regionData) {\n console.error('Picker: regionData is required for region mode')\n indexRef.current = [0]\n return\n }\n\n const validation = validateRegionData(regionData, 'Picker')\n if (!validation.valid) {\n console.error(validation.error)\n indexRef.current = [0]\n return\n }\n\n // 获取列数\n const val = Array.isArray(value) ? (value as unknown as string[]) : []\n\n // 根据level和当前值确定索引\n indexRef.current = []\n let currentData = regionData\n\n for (let i = 0; i < columnsCount; i++) {\n if (i >= val.length || !currentData?.length) {\n indexRef.current.push(0)\n continue\n }\n\n const currentValue = val[i]\n const index = currentData.findIndex(item => item.value === currentValue)\n\n if (index >= 0) {\n indexRef.current.push(index)\n // 为下一列准备数据\n const selectedItem = currentData[index]\n currentData = selectedItem.children || []\n } else {\n indexRef.current.push(0)\n // 如果找不到匹配项,为下一列准备第一项的子数据\n currentData = currentData[0]?.children || []\n }\n }\n } else {\n throw new Error(`Picker not support \"${mode}\" mode.`)\n }\n\n // 更新索引值\n const newIndices = getIndices()\n setState(prev => ({\n ...prev,\n selectedIndices: newIndices,\n pickerValue: value || EMPTY_ARRAY\n }))\n }, [mode, range, value, start, end, fields, regionData, level, columnsCount, getIndices])\n\n // 组件初始化\n React.useEffect(() => {\n setState(prev => ({ ...prev, isWillLoadCalled: true }))\n handleProps()\n }, [])\n\n // 属性变化监听 - 添加 value 依赖以支持联动选择器\n React.useEffect(() => {\n if (state.isWillLoadCalled) {\n handleProps()\n }\n }, [handleProps, state.isWillLoadCalled, JSON.stringify(value)])\n\n // 显示 Picker\n const showPicker = React.useCallback(() => {\n if (disabled) return\n const newIndices = getIndices()\n setState(prev => ({\n ...prev,\n selectedIndices: newIndices,\n hidden: false\n }))\n }, [disabled, getIndices])\n\n // 隐藏 Picker\n const hidePicker = React.useCallback(() => {\n setState(prev => ({ ...prev, fadeOut: true }))\n setTimeout(() => {\n setState(prev => ({\n ...prev,\n hidden: true,\n fadeOut: false\n }))\n }, 350)\n }, [])\n\n // 更新索引\n const updateIndex = React.useCallback((index: number, columnId: string, needRevise = false) => {\n const columnIndex = Number(columnId)\n let finalIndices = [...state.selectedIndices]\n finalIndices[columnIndex] = index\n let hasLimited = false\n\n // region 模式的级联更新逻辑\n if (mode === 'region' && regionData) {\n // 重置后续列\n for (let i = columnIndex + 1; i < columnsCount; i++) {\n finalIndices[i] = 0\n }\n setState(prev => ({\n ...prev,\n selectedIndices: finalIndices,\n timestamp: Date.now()\n }))\n return // 直接返回\n }\n\n // time picker\n if (needRevise && mode === 'time') {\n let startTime = start\n let endTime = end\n\n if (!verifyTime(startTime)) startTime = '00:00'\n if (!verifyTime(endTime)) endTime = '23:59'\n if (!compareTime(startTime, endTime)) return false\n\n const timeRanges = [hoursRange.slice(), minutesRange.slice()]\n // 然后基于更新后的索引数组计算时间\n const timeStr = finalIndices.map((idx, i) => {\n const rangeIdx = Math.max(0, Math.min(idx, timeRanges[i].length - 1))\n return timeRanges[i][rangeIdx] || '00'\n }).join(':')\n\n // 检查是否需要限位\n if (!compareTime(startTime, timeStr)) {\n // 修正到 start\n const startParts = startTime.split(':').map(part => parseInt(part))\n const newIndices = startParts.map((time, i) => {\n const idx = timeRanges[i].findIndex(item => parseInt(item) === time)\n return idx >= 0 ? idx : 0\n })\n\n finalIndices = [...newIndices]\n hasLimited = true\n } else if (!compareTime(timeStr, endTime)) {\n // 修正到 end\n const endParts = endTime.split(':').map(part => parseInt(part))\n const newIndices = endParts.map((time, i) => {\n const idx = timeRanges[i].findIndex(item => parseInt(item) === time)\n return idx >= 0 ? idx : 0\n })\n\n finalIndices = [...newIndices]\n hasLimited = true\n }\n\n // 无论是否限位,都更新状态\n setState(prev => ({\n ...prev,\n selectedIndices: finalIndices,\n timestamp: Date.now()\n }))\n\n return hasLimited\n }\n\n // 常规更新\n finalIndices[columnIndex] = index\n setState(prev => ({\n ...prev,\n selectedIndices: finalIndices,\n timestamp: Date.now()\n }))\n\n return false // 没有限位\n }, [start, end, mode, regionData, state.selectedIndices, columnsCount])\n\n // 更新日期\n const updateDay = React.useCallback((value: number, fields: number) => {\n if (!pickerDateRef.current) return\n\n const { _start, _end, _updateValue } = pickerDateRef.current\n\n // 更新当前字段的值\n _updateValue[fields] = value\n\n // 获取当前年月日\n const currentYear = _updateValue[0]\n const currentMonth = _updateValue[1]\n const currentDay = _updateValue[2]\n\n // 保存原始值用于后面比较\n const originalValues = [..._updateValue]\n\n // 准备最终的索引数组 - 复制当前索引状态作为起点\n const finalIndices = [...state.selectedIndices]\n\n // 获取基础范围数据\n const yearRange = getYearRange(_start.getFullYear(), _end.getFullYear())\n const monthRange = getMonthRange(_start, _end, currentYear)\n let dayRange = getDayRange(_start, _end, currentYear, currentMonth)\n\n // 根据修改的字段进行不同处理\n if (fields === 0) { // 年份变化\n // 年份索引直接更新\n finalIndices[0] = yearRange.indexOf(currentYear)\n\n // 月份限位处理\n if (monthRange.length > 0) {\n if (currentMonth > monthRange[monthRange.length - 1]) {\n _updateValue[1] = monthRange[monthRange.length - 1]\n }\n if (currentMonth < monthRange[0]) {\n _updateValue[1] = monthRange[0]\n }\n\n // 更新月份索引\n finalIndices[1] = monthRange.indexOf(_updateValue[1])\n\n // 重新计算日期范围\n dayRange = getDayRange(_start, _end, currentYear, _updateValue[1])\n\n // 日期限位处理\n if (dayRange.length > 0) {\n if (currentDay > dayRange[dayRange.length - 1]) {\n _updateValue[2] = dayRange[dayRange.length - 1]\n }\n if (currentDay < dayRange[0]) {\n _updateValue[2] = dayRange[0]\n }\n\n // 更新日期索引\n finalIndices[2] = dayRange.indexOf(_updateValue[2])\n }\n }\n } else if (fields === 1) { // 月份变化\n // 月份索引直接更新\n finalIndices[1] = monthRange.indexOf(currentMonth)\n\n // 日期限位处理\n if (dayRange.length > 0) {\n if (currentDay > dayRange[dayRange.length - 1]) {\n _updateValue[2] = dayRange[dayRange.length - 1]\n }\n if (currentDay < dayRange[0]) {\n _updateValue[2] = dayRange[0]\n }\n\n // 更新日期索引\n finalIndices[2] = dayRange.indexOf(_updateValue[2])\n }\n } else if (fields === 2) { // 日期变化\n // 日期索引直接更新\n finalIndices[2] = dayRange.indexOf(currentDay)\n }\n\n // 只在有实际变化时更新状态\n if (\n JSON.stringify(originalValues) !== JSON.stringify(_updateValue) ||\n JSON.stringify(finalIndices) !== JSON.stringify(state.selectedIndices)\n ) {\n // 一次性更新状态\n setState(prev => ({\n ...prev,\n selectedIndices: finalIndices,\n timestamp: Date.now()\n }))\n }\n }, [state.selectedIndices])\n\n // 处理确认\n const handleChange = React.useCallback(() => {\n const newIndices = [...state.selectedIndices]\n indexRef.current = newIndices\n\n let newValue: PickerValue = newIndices.length && mode !== 'selector'\n ? newIndices\n : newIndices[0]\n\n if (mode === 'time') {\n const range = [hoursRange.slice(), minutesRange.slice()]\n\n // 安全的时间处理,添加边界检查\n const timeArr = newIndices.map<string>((idx, i) => {\n const index = Math.max(0, Math.min(idx, range[i].length - 1))\n return range[i][index] || (i === 0 ? '00' : '00')\n })\n\n // 确保时间值有效\n const validTimeArr = timeArr.map(time => {\n const num = parseInt(time)\n return isNaN(num) ? '00' : time\n })\n\n indexRef.current = validTimeArr.map(item => parseInt(item))\n newValue = validTimeArr.join(':')\n }\n\n if (mode === 'date') {\n if (!pickerDateRef.current) return\n\n const { _start, _end, _updateValue } = pickerDateRef.current\n const currentYear = _updateValue[0]\n const currentMonth = _updateValue[1]\n const yearRange = getYearRange(_start.getFullYear(), _end.getFullYear())\n const monthRange = getMonthRange(_start, _end, currentYear)\n const dayRange = getDayRange(_start, _end, currentYear, currentMonth)\n\n // 添加边界检查,确保索引有效\n const yearIndex = Math.min(Math.max(Math.floor(newIndices[0]), 0), yearRange.length - 1)\n const monthIndex = Math.min(Math.max(Math.floor(newIndices[1]), 0), monthRange.length - 1)\n const dayIndex = Math.min(Math.max(Math.floor(newIndices[2]), 0), dayRange.length - 1)\n\n const year = yearRange[yearIndex]\n const month = monthRange[monthIndex]\n const day = dayRange[dayIndex]\n\n // 确保所有值都存在\n if (year === undefined || month === undefined || day === undefined) {\n console.warn('Date picker: invalid date values', { year, month, day })\n return\n }\n\n if (fields === 'year') {\n newValue = year.toString()\n } else if (fields === 'month') {\n // YYYY-MM 格式\n newValue = `${year}-${month < 10 ? `0${month}` : month}`\n } else {\n // YYYY-MM-DD 格式\n newValue = `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`\n }\n\n hidePicker()\n setState(prev => ({\n ...prev,\n pickerValue: newValue\n }))\n\n onChange?.({ detail: { value: newValue } })\n return\n }\n\n if (mode === 'region') {\n if (!regionData) {\n console.error('Picker: regionData is required for region mode')\n return\n }\n\n const validation = validateRegionData(regionData, 'Picker')\n if (!validation.valid) {\n console.error(validation.error)\n return\n }\n\n // 直接使用索引数组\n const selectedCodes: string[] = []\n let postcode = ''\n\n // 安全获取选中值\n let currentData = regionData\n for (let i = 0; i < columnsCount; i++) {\n if (!currentData || currentData.length === 0) break\n\n const index = newIndices[i] || 0\n if (index < 0 || index >= currentData.length) break\n\n const item = currentData[index]\n selectedCodes.push(item.code)\n\n // 如果是最后一项,获取邮政编码\n if (i === columnsCount - 1 && item.postcode) {\n postcode = item.postcode\n }\n\n // 准备下一级数据\n currentData = item.children || []\n }\n\n // 检查索引数组长度是否符合要求\n if (newIndices.length < columnsCount) {\n console.warn('Region picker: incomplete selection')\n return\n }\n\n // 触发 onChange 事件,包含 code 信息\n hidePicker()\n setState(prev => ({\n ...prev,\n pickerValue: newIndices\n }))\n\n onChange?.({\n detail: {\n value: newIndices,\n code: selectedCodes.join(','),\n postcode\n }\n })\n return\n }\n\n hidePicker()\n setState(prev => ({\n ...prev,\n pickerValue: newValue\n }))\n\n // 触发 onChange 事件,格式与原始组件一致\n onChange?.({ detail: { value: newValue } })\n }, [hidePicker, state.selectedIndices, mode, fields, onChange, regionData, columnsCount])\n\n // 处理列变化\n const handleColumnChange = React.useCallback((e: { columnId: string, index: number }) => {\n const { columnId, index } = e\n onColumnChange?.({\n detail: {\n column: Number(columnId),\n value: index\n }\n })\n }, [onColumnChange])\n\n // 处理取消\n const handleCancel = React.useCallback(() => {\n hidePicker()\n onCancel?.()\n }, [hidePicker, onCancel])\n\n // 渲染选择器组\n const renderPickerGroup = React.useMemo(() => {\n switch (mode) {\n case 'multiSelector': {\n return range.map((rangeItem, index) => (\n <PickerGroup\n key={index}\n range={rangeItem}\n rangeKey={rangeKey}\n updateIndex={updateIndex}\n onColumnChange={handleColumnChange}\n columnId={String(index)}\n selectedIndex={state.selectedIndices[index]} // 传递对应列的selectedIndex\n />\n ))\n }\n case 'time': {\n return [\n <PickerGroup\n key={`hour-${state.timestamp}`}\n mode=\"time\"\n range={hoursRange}\n updateIndex={updateIndex}\n columnId=\"0\"\n selectedIndex={state.selectedIndices[0]} // 传递小时列的selectedIndex\n />,\n <PickerGroup\n key={`minute-${state.timestamp}`}\n mode=\"time\"\n range={minutesRange}\n updateIndex={updateIndex}\n columnId=\"1\"\n selectedIndex={state.selectedIndices[1]} // 传递分钟列的selectedIndex\n />\n ]\n }\n case 'date': {\n if (!pickerDateRef.current) return null\n\n const { _start, _end, _updateValue } = pickerDateRef.current\n const currentYear = _updateValue[0]\n const currentMonth = _updateValue[1]\n\n const yearRange = getYearRange(_start.getFullYear(), _end.getFullYear())\n .map(item => `${item}年`)\n const monthRange = getMonthRange(_start, _end, currentYear)\n .map(item => `${item < 10 ? `0${item}` : item}月`)\n const dayRange = getDayRange(_start, _end, currentYear, currentMonth)\n .map(item => `${item < 10 ? `0${item}` : item}日`)\n\n const renderView = [\n <PickerGroup\n key={`year`}\n mode=\"date\"\n range={yearRange}\n updateDay={updateDay}\n updateIndex={updateIndex}\n columnId=\"0\"\n selectedIndex={state.selectedIndices[0]} // 传递年份列的selectedIndex\n />\n ]\n if (fields === 'month' || fields === 'day') {\n renderView.push(\n <PickerGroup\n key={`month`}\n mode=\"date\"\n range={monthRange}\n updateDay={updateDay}\n updateIndex={updateIndex}\n columnId=\"1\"\n selectedIndex={state.selectedIndices[1]} // 传递月份列的selectedIndex\n />\n )\n }\n if (fields === 'day') {\n renderView.push(\n <PickerGroup\n key={`day`}\n mode=\"date\"\n range={dayRange}\n updateDay={updateDay}\n updateIndex={updateIndex}\n columnId=\"2\"\n selectedIndex={state.selectedIndices[2]} // 传递日期列的selectedIndex\n />\n )\n }\n return renderView\n }\n case 'region': {\n // region 模式处理 - 自动识别数据层级\n if (!regionData) {\n console.error('Picker: regionData is required for region mode')\n return null\n }\n\n // 简化验证逻辑\n if (!validateRegionData(regionData, 'Picker').valid) {\n return null\n }\n\n const columns: JSX.Element[] = []\n let currentData = regionData\n\n for (let i = 0; i < columnsCount; i++) {\n if (i > 0 && currentData?.length) {\n // 获取上一级选中项的children作为当前列数据\n const prevIndex = state.selectedIndices[i - 1] || 0\n if (prevIndex >= 0 && prevIndex < currentData.length) {\n currentData = currentData[prevIndex].children || []\n } else {\n currentData = []\n }\n }\n\n columns.push(\n <PickerGroup\n key={`region-${i}`}\n mode=\"region\"\n range={currentData}\n rangeKey=\"value\"\n updateIndex={updateIndex}\n columnId={String(i)}\n selectedIndex={state.selectedIndices[i]}\n />\n )\n }\n\n return columns\n }\n default:\n return (\n <PickerGroup\n range={range}\n rangeKey={rangeKey}\n updateIndex={updateIndex}\n columnId=\"0\"\n selectedIndex={state.selectedIndices[0]} // 传递selector模式的selectedIndex\n />\n )\n }\n }, [mode, range, rangeKey, fields, updateIndex, updateDay, handleColumnChange, pickerDateRef.current, level, regionData, state.selectedIndices, columnsCount])\n\n // 动画类名控制逻辑\n const clsMask = classNames('taro-picker__mask-overlay', 'taro-picker__animate-fade-in', {\n 'taro-picker__animate-fade-out': state.fadeOut\n })\n const clsSlider = classNames('taro-picker', 'taro-picker__animate-slide-up', {\n 'taro-picker__animate-slide-down': state.fadeOut\n })\n\n return (\n <View\n ref={forwardedRef}\n style={style}\n {...(formType ? { 'data-form-type': formType } : {})}\n {...omit(restProps, ['mode', 'disabled', 'range', 'rangeKey', 'value', 'start', 'end', 'fields', 'name', 'textProps', 'onChange', 'onColumnChange', 'onCancel', 'children', 'style', 'forwardedRef', 'formType'])}\n >\n <View onClick={showPicker}>\n {children}\n </View>\n {!state.hidden && (\n <View className=\"taro-picker__overlay\">\n <View className={clsMask} onClick={handleCancel} />\n <View className={clsSlider}>\n <View className=\"taro-picker__hd\">\n <View className=\"taro-picker__action\" onClick={handleCancel}>\n {textProps.cancelText ?? '取消'}\n </View>\n {headerText && (\n <View className=\"taro-picker__title\">{headerText}</View>\n )}\n <View className=\"taro-picker__action\" onClick={handleChange}>\n {textProps.okText ?? '确定'}\n </View>\n </View>\n <View className=\"taro-picker__bd\">{renderPickerGroup}</View>\n </View>\n </View>\n )}\n </View>\n )\n}\n\nexport default Picker\n"],"names":["EMPTY_ARRAY","EMPTY_OBJECT","validateRegionData","data","componentName","arguments","length","undefined","valid","error","Array","isArray","validateItem","item","path","value","code","postcode","children","i","childResult","result","getRegionColumnsCount","level","Picker","props","mode","disabled","range","rangeKey","start","end","fields","headerText","regionData","textProps","onChange","onColumnChange","onCancel","style","forwardedRef","formType","restProps","__rest","indexRef","React","useRef","pickerDateRef","state","setState","useState","pickerValue","selectedIndices","slice","hidden","fadeOut","isWillLoadCalled","timestamp","columnsCount","setColumnsCount","useEffect","getIndices","useCallback","current","handleProps","val","verifyValue","Math","floor","forEach","rangeItem","index","valItem","push","verifyTime","console","warn","time","split","map","n","hourIndex","hoursRange","findIndex","parseInt","minuteIndex","minutesRange","safeHourIndex","safeMinuteIndex","max","min","_value","verifyDate","Date","setHours","_start","_end","Error","currentYear","getFullYear","currentMonth","getMonth","currentDay","getDate","yearRange","getYearRange","monthRange","getMonthRange","dayRange","getDayRange","indexOf","getTime","_updateValue","validation","currentData","currentValue","selectedItem","_a","newIndices","prev","Object","assign","JSON","stringify","showPicker","hidePicker","setTimeout","updateIndex","columnId","needRevise","columnIndex","Number","finalIndices","hasLimited","now","startTime","endTime","compareTime","timeRanges","timeStr","idx","rangeIdx","join","startParts","part","endParts","updateDay","originalValues","handleChange","newValue","timeArr","validTimeArr","num","isNaN","yearIndex","monthIndex","dayIndex","year","month","day","toString","detail","selectedCodes","handleColumnChange","e","column","handleCancel","renderPickerGroup","useMemo","_$createComponent","PickerGroup","key","String","selectedIndex","renderView","columns","prevIndex","clsMask","classNames","clsSlider","View","_$mergeProps","ref","omit","onClick","_$memo","className","cancelText","okText","_b"],"mappings":"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"}
@@ -0,0 +1,482 @@
1
+ import { createComponent } from 'solid-js/web';
2
+ import { View, ScrollView } from '@tarojs/components';
3
+ import * as React from 'react';
4
+
5
+ // 定义常量
6
+ const PICKER_LINE_HEIGHT = 34; // px
7
+ const PICKER_VISIBLE_ITEMS = 7; // 可见行数
8
+ const PICKER_BLANK_ITEMS = 3; // 空白行数
9
+ function PickerGroupBasic(props) {
10
+ const {
11
+ range = [],
12
+ rangeKey,
13
+ columnId,
14
+ updateIndex,
15
+ onColumnChange,
16
+ selectedIndex = 0 // 使用selectedIndex参数,默认为0
17
+ } = props;
18
+ const [targetScrollTop, setTargetScrollTop] = React.useState(0);
19
+ const scrollViewRef = React.useRef(null);
20
+ const itemRefs = React.useRef([]);
21
+ // 使用selectedIndex初始化当前索引
22
+ const [currentIndex, setCurrentIndex] = React.useState(selectedIndex);
23
+ // 触摸状态用于优化用户体验
24
+ const [isTouching, setIsTouching] = React.useState(false);
25
+ const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT);
26
+ React.useEffect(() => {
27
+ if (scrollViewRef.current) {
28
+ itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length;
29
+ }
30
+ }, [range.length]); // 只在range长度变化时重新计算
31
+ // 获取选中的索引
32
+ const getSelectedIndex = scrollTop => {
33
+ return Math.round(scrollTop / itemHeightRef.current);
34
+ };
35
+ // 当selectedIndex变化时,调整滚动位置
36
+ React.useEffect(() => {
37
+ if (scrollViewRef.current && range.length > 0 && !isTouching) {
38
+ setTargetScrollTop(selectedIndex * itemHeightRef.current);
39
+ setCurrentIndex(selectedIndex);
40
+ }
41
+ }, [selectedIndex, range]);
42
+ // 是否处于归中状态
43
+ const isCenterTimerId = React.useRef(null);
44
+ // 简化为直接在滚动结束时通知父组件
45
+ const handleScrollEnd = () => {
46
+ if (!scrollViewRef.current) return;
47
+ if (isCenterTimerId.current) {
48
+ clearTimeout(isCenterTimerId.current);
49
+ isCenterTimerId.current = null;
50
+ }
51
+ // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项
52
+ isCenterTimerId.current = setTimeout(() => {
53
+ const scrollTop = scrollViewRef.current.scrollTop;
54
+ const newIndex = getSelectedIndex(scrollTop);
55
+ setIsTouching(false);
56
+ setTargetScrollTop(newIndex * itemHeightRef.current + Math.random() * 0.001); // 随机数为了在一个项内滚动时强制刷新
57
+ updateIndex(newIndex, columnId);
58
+ onColumnChange === null || onColumnChange === void 0 ? void 0 : onColumnChange({
59
+ columnId,
60
+ index: newIndex
61
+ });
62
+ }, 100);
63
+ };
64
+ // 滚动处理 - 在滚动时计算索引然后更新选中项样式
65
+ const handleScroll = () => {
66
+ if (!scrollViewRef.current) return;
67
+ if (isCenterTimerId.current) {
68
+ clearTimeout(isCenterTimerId.current);
69
+ isCenterTimerId.current = null;
70
+ }
71
+ const scrollTop = scrollViewRef.current.scrollTop;
72
+ const newIndex = getSelectedIndex(scrollTop);
73
+ if (newIndex !== currentIndex) {
74
+ setCurrentIndex(newIndex);
75
+ }
76
+ };
77
+ // 渲染选项
78
+ const pickerItem = range.map((item, index) => {
79
+ const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item;
80
+ return createComponent(View, {
81
+ id: `picker-item-${columnId}-${index}`,
82
+ key: index,
83
+ ref: el => itemRefs.current[index] = el,
84
+ className: `taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`,
85
+ style: {
86
+ height: PICKER_LINE_HEIGHT
87
+ },
88
+ children: content
89
+ });
90
+ });
91
+ const realPickerItems = [...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
92
+ key: `blank-top-${idx}`,
93
+ className: "taro-picker__item taro-picker__item--blank",
94
+ style: {
95
+ height: PICKER_LINE_HEIGHT
96
+ }
97
+ })), ...pickerItem, ...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
98
+ key: `blank-bottom-${idx}`,
99
+ className: "taro-picker__item taro-picker__item--blank",
100
+ style: {
101
+ height: PICKER_LINE_HEIGHT
102
+ }
103
+ }))];
104
+ return createComponent(View, {
105
+ className: "taro-picker__group",
106
+ get children() {
107
+ return [createComponent(View, {
108
+ className: "taro-picker__mask"
109
+ }), createComponent(View, {
110
+ className: "taro-picker__indicator"
111
+ }), createComponent(ScrollView, {
112
+ ref: scrollViewRef,
113
+ scrollY: true,
114
+ className: "taro-picker__content",
115
+ style: {
116
+ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS
117
+ },
118
+ scrollTop: targetScrollTop,
119
+ onScroll: handleScroll,
120
+ onTouchStart: () => setIsTouching(true),
121
+ onScrollEnd: handleScrollEnd,
122
+ scrollWithAnimation: true,
123
+ children: realPickerItems
124
+ })];
125
+ }
126
+ });
127
+ }
128
+ // 时间选择器实现
129
+ function PickerGroupTime(props) {
130
+ const {
131
+ range = [],
132
+ rangeKey,
133
+ columnId,
134
+ updateIndex,
135
+ selectedIndex = 0
136
+ } = props;
137
+ const [targetScrollTop, setTargetScrollTop] = React.useState(0);
138
+ const scrollViewRef = React.useRef(null);
139
+ const itemRefs = React.useRef([]);
140
+ const [currentIndex, setCurrentIndex] = React.useState(selectedIndex);
141
+ const [isTouching, setIsTouching] = React.useState(false);
142
+ const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT);
143
+ React.useEffect(() => {
144
+ if (scrollViewRef.current) {
145
+ itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length;
146
+ }
147
+ }, [range.length]); // 只在range长度变化时重新计算
148
+ const getSelectedIndex = scrollTop => {
149
+ return Math.round(scrollTop / itemHeightRef.current);
150
+ };
151
+ // 当selectedIndex变化时,调整滚动位置
152
+ React.useEffect(() => {
153
+ if (scrollViewRef.current && range.length > 0 && !isTouching) {
154
+ setTargetScrollTop(selectedIndex * itemHeightRef.current);
155
+ setCurrentIndex(selectedIndex);
156
+ }
157
+ }, [selectedIndex, range]);
158
+ // 是否处于归中状态
159
+ const isCenterTimerId = React.useRef(null);
160
+ // 简化为直接在滚动结束时通知父组件
161
+ const handleScrollEnd = () => {
162
+ if (!scrollViewRef.current) return;
163
+ if (isCenterTimerId.current) {
164
+ clearTimeout(isCenterTimerId.current);
165
+ isCenterTimerId.current = null;
166
+ }
167
+ // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项
168
+ isCenterTimerId.current = setTimeout(() => {
169
+ const scrollTop = scrollViewRef.current.scrollTop;
170
+ const newIndex = getSelectedIndex(scrollTop);
171
+ setIsTouching(false);
172
+ // 调用updateIndex执行限位逻辑,获取是否触发了限位
173
+ const isLimited = Boolean(updateIndex(newIndex, columnId, true));
174
+ // 如果没有触发限位,才执行归中逻辑
175
+ if (!isLimited) {
176
+ setTargetScrollTop(newIndex * itemHeightRef.current + Math.random() * 0.001);
177
+ }
178
+ }, 100);
179
+ };
180
+ // 滚动处理
181
+ const handleScroll = () => {
182
+ if (!scrollViewRef.current) return;
183
+ if (isCenterTimerId.current) {
184
+ clearTimeout(isCenterTimerId.current);
185
+ isCenterTimerId.current = null;
186
+ }
187
+ const scrollTop = scrollViewRef.current.scrollTop;
188
+ const newIndex = getSelectedIndex(scrollTop);
189
+ if (newIndex !== currentIndex) {
190
+ setCurrentIndex(newIndex);
191
+ }
192
+ };
193
+ // 渲染选项
194
+ const pickerItem = range.map((item, index) => {
195
+ const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item;
196
+ return createComponent(View, {
197
+ id: `picker-item-${columnId}-${index}`,
198
+ key: index,
199
+ ref: el => itemRefs.current[index] = el,
200
+ className: `taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`,
201
+ style: {
202
+ height: PICKER_LINE_HEIGHT
203
+ },
204
+ children: content
205
+ });
206
+ });
207
+ const realPickerItems = [...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
208
+ key: `blank-top-${idx}`,
209
+ className: "taro-picker__item taro-picker__item--blank",
210
+ style: {
211
+ height: PICKER_LINE_HEIGHT
212
+ }
213
+ })), ...pickerItem, ...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
214
+ key: `blank-bottom-${idx}`,
215
+ className: "taro-picker__item taro-picker__item--blank",
216
+ style: {
217
+ height: PICKER_LINE_HEIGHT
218
+ }
219
+ }))];
220
+ return createComponent(View, {
221
+ className: "taro-picker__group",
222
+ get children() {
223
+ return [createComponent(View, {
224
+ className: "taro-picker__mask"
225
+ }), createComponent(View, {
226
+ className: "taro-picker__indicator"
227
+ }), createComponent(ScrollView, {
228
+ ref: scrollViewRef,
229
+ scrollY: true,
230
+ className: "taro-picker__content",
231
+ style: {
232
+ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS
233
+ },
234
+ scrollTop: targetScrollTop,
235
+ onScroll: handleScroll,
236
+ onTouchStart: () => setIsTouching(true),
237
+ onScrollEnd: handleScrollEnd,
238
+ scrollWithAnimation: true,
239
+ children: realPickerItems
240
+ })];
241
+ }
242
+ });
243
+ }
244
+ // 日期选择器实现
245
+ function PickerGroupDate(props) {
246
+ const {
247
+ range = [],
248
+ columnId,
249
+ updateDay,
250
+ selectedIndex = 0
251
+ } = props;
252
+ const [targetScrollTop, setTargetScrollTop] = React.useState(0);
253
+ const scrollViewRef = React.useRef(null);
254
+ const [currentIndex, setCurrentIndex] = React.useState(selectedIndex);
255
+ const [isTouching, setIsTouching] = React.useState(false);
256
+ const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT);
257
+ React.useEffect(() => {
258
+ if (scrollViewRef.current) {
259
+ itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length;
260
+ }
261
+ }, [range.length]); // 只在range长度变化时重新计算
262
+ const getSelectedIndex = scrollTop => {
263
+ return Math.round(scrollTop / itemHeightRef.current);
264
+ };
265
+ // 当selectedIndex变化时,调整滚动位置
266
+ React.useEffect(() => {
267
+ if (scrollViewRef.current && range.length > 0 && !isTouching) {
268
+ setTargetScrollTop(selectedIndex * itemHeightRef.current);
269
+ setCurrentIndex(selectedIndex);
270
+ }
271
+ }, [selectedIndex, range]);
272
+ // 是否处于归中状态
273
+ const isCenterTimerId = React.useRef(null);
274
+ // 简化为直接在滚动结束时通知父组件
275
+ const handleScrollEnd = () => {
276
+ if (!scrollViewRef.current) return;
277
+ if (isCenterTimerId.current) {
278
+ clearTimeout(isCenterTimerId.current);
279
+ isCenterTimerId.current = null;
280
+ }
281
+ // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项
282
+ isCenterTimerId.current = setTimeout(() => {
283
+ const scrollTop = scrollViewRef.current.scrollTop;
284
+ const newIndex = getSelectedIndex(scrollTop);
285
+ setIsTouching(false);
286
+ setTargetScrollTop(newIndex * itemHeightRef.current + Math.random() * 0.001); // 随机数为了在一个项内滚动时强制刷新
287
+ // 更新日期值
288
+ if (updateDay) {
289
+ // 解析文本中的数字(移除年、月、日等后缀)
290
+ const valueText = range[newIndex] || '';
291
+ const numericValue = parseInt(valueText.replace(/[^0-9]/g, ''));
292
+ updateDay(isNaN(numericValue) ? 0 : numericValue, parseInt(columnId));
293
+ }
294
+ }, 100);
295
+ };
296
+ // 滚动处理
297
+ const handleScroll = () => {
298
+ if (!scrollViewRef.current) return;
299
+ if (isCenterTimerId.current) {
300
+ clearTimeout(isCenterTimerId.current);
301
+ isCenterTimerId.current = null;
302
+ }
303
+ const scrollTop = scrollViewRef.current.scrollTop;
304
+ const newIndex = getSelectedIndex(scrollTop);
305
+ if (newIndex !== currentIndex) {
306
+ setCurrentIndex(newIndex);
307
+ }
308
+ };
309
+ // 渲染选项
310
+ const pickerItem = range.map((item, index) => {
311
+ return createComponent(View, {
312
+ id: `picker-item-${columnId}-${index}`,
313
+ key: index,
314
+ className: `taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`,
315
+ style: {
316
+ height: PICKER_LINE_HEIGHT
317
+ },
318
+ children: item
319
+ });
320
+ });
321
+ const realPickerItems = [...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
322
+ key: `blank-top-${idx}`,
323
+ className: "taro-picker__item taro-picker__item--blank",
324
+ style: {
325
+ height: PICKER_LINE_HEIGHT
326
+ }
327
+ })), ...pickerItem, ...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
328
+ key: `blank-bottom-${idx}`,
329
+ className: "taro-picker__item taro-picker__item--blank",
330
+ style: {
331
+ height: PICKER_LINE_HEIGHT
332
+ }
333
+ }))];
334
+ return createComponent(View, {
335
+ className: "taro-picker__group",
336
+ get children() {
337
+ return [createComponent(View, {
338
+ className: "taro-picker__mask"
339
+ }), createComponent(View, {
340
+ className: "taro-picker__indicator"
341
+ }), createComponent(ScrollView, {
342
+ ref: scrollViewRef,
343
+ scrollY: true,
344
+ className: "taro-picker__content",
345
+ style: {
346
+ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS
347
+ },
348
+ scrollTop: targetScrollTop,
349
+ onScroll: handleScroll,
350
+ onTouchStart: () => setIsTouching(true),
351
+ onScrollEnd: handleScrollEnd,
352
+ scrollWithAnimation: true,
353
+ children: realPickerItems
354
+ })];
355
+ }
356
+ });
357
+ }
358
+ // 地区选择器实现
359
+ function PickerGroupRegion(props) {
360
+ const {
361
+ range = [],
362
+ rangeKey,
363
+ columnId,
364
+ updateIndex,
365
+ selectedIndex = 0 // 使用selectedIndex参数,默认为0
366
+ } = props;
367
+ const scrollViewRef = React.useRef(null);
368
+ const [targetScrollTop, setTargetScrollTop] = React.useState(0);
369
+ const [currentIndex, setCurrentIndex] = React.useState(selectedIndex);
370
+ const [isTouching, setIsTouching] = React.useState(false);
371
+ const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT);
372
+ React.useEffect(() => {
373
+ if (scrollViewRef.current) {
374
+ itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length;
375
+ }
376
+ }, [range.length]); // 只在range长度变化时重新计算
377
+ const getSelectedIndex = scrollTop => {
378
+ return Math.round(scrollTop / itemHeightRef.current);
379
+ };
380
+ // 当selectedIndex变化时,调整滚动位置
381
+ React.useEffect(() => {
382
+ if (scrollViewRef.current && range.length > 0 && !isTouching) {
383
+ setTargetScrollTop(selectedIndex * itemHeightRef.current);
384
+ setCurrentIndex(selectedIndex);
385
+ }
386
+ }, [selectedIndex, range]);
387
+ // 滚动结束处理
388
+ const isCenterTimerId = React.useRef(null);
389
+ const handleScrollEnd = () => {
390
+ if (!scrollViewRef.current) return;
391
+ if (isCenterTimerId.current) {
392
+ clearTimeout(isCenterTimerId.current);
393
+ isCenterTimerId.current = null;
394
+ }
395
+ // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项
396
+ isCenterTimerId.current = setTimeout(() => {
397
+ const scrollTop = scrollViewRef.current.scrollTop;
398
+ const newIndex = getSelectedIndex(scrollTop);
399
+ setIsTouching(false);
400
+ setTargetScrollTop(newIndex * itemHeightRef.current + Math.random() * 0.001); // 随机数为了在一个项内滚动时强制刷新
401
+ updateIndex(newIndex, columnId);
402
+ }, 100);
403
+ };
404
+ // 滚动处理 - 在滚动时计算索引
405
+ const handleScroll = () => {
406
+ if (!scrollViewRef.current) return;
407
+ if (isCenterTimerId.current) {
408
+ clearTimeout(isCenterTimerId.current);
409
+ isCenterTimerId.current = null;
410
+ }
411
+ const scrollTop = scrollViewRef.current.scrollTop;
412
+ const newIndex = getSelectedIndex(scrollTop);
413
+ if (newIndex !== currentIndex) {
414
+ setCurrentIndex(newIndex);
415
+ }
416
+ };
417
+ // 渲染选项
418
+ const pickerItem = range.map((item, index) => {
419
+ const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item;
420
+ return createComponent(View, {
421
+ id: `picker-item-${columnId}-${index}`,
422
+ key: index,
423
+ className: `taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`,
424
+ style: {
425
+ height: PICKER_LINE_HEIGHT
426
+ },
427
+ children: content
428
+ });
429
+ });
430
+ const realPickerItems = [...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
431
+ key: `blank-top-${idx}`,
432
+ className: "taro-picker__item taro-picker__item--blank",
433
+ style: {
434
+ height: PICKER_LINE_HEIGHT
435
+ }
436
+ })), ...pickerItem, ...new Array(PICKER_BLANK_ITEMS).fill(null).map((_, idx) => createComponent(View, {
437
+ key: `blank-bottom-${idx}`,
438
+ className: "taro-picker__item taro-picker__item--blank",
439
+ style: {
440
+ height: PICKER_LINE_HEIGHT
441
+ }
442
+ }))];
443
+ return createComponent(View, {
444
+ className: "taro-picker__group",
445
+ get children() {
446
+ return [createComponent(View, {
447
+ className: "taro-picker__mask"
448
+ }), createComponent(View, {
449
+ className: "taro-picker__indicator"
450
+ }), createComponent(ScrollView, {
451
+ ref: scrollViewRef,
452
+ scrollY: true,
453
+ className: "taro-picker__content",
454
+ style: {
455
+ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS
456
+ },
457
+ scrollTop: targetScrollTop,
458
+ onScroll: handleScroll,
459
+ onTouchStart: () => setIsTouching(true),
460
+ onScrollEnd: handleScrollEnd,
461
+ scrollWithAnimation: true,
462
+ children: realPickerItems
463
+ })];
464
+ }
465
+ });
466
+ }
467
+ // 默认导出,根据 mode 自动分发
468
+ function PickerGroup(props) {
469
+ switch (props.mode) {
470
+ case 'time':
471
+ return createComponent(PickerGroupTime, props);
472
+ case 'date':
473
+ return createComponent(PickerGroupDate, props);
474
+ case 'region':
475
+ return createComponent(PickerGroupRegion, props);
476
+ default:
477
+ return createComponent(PickerGroupBasic, props);
478
+ }
479
+ }
480
+
481
+ export { PickerGroup, PickerGroupBasic, PickerGroupDate, PickerGroupRegion, PickerGroupTime };
482
+ //# sourceMappingURL=picker-group.js.map