@tarojs/components-react 4.1.12-beta.6 → 4.1.12-beta.60
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/components/image/index.js +5 -3
- package/dist/components/image/index.js.map +1 -1
- package/dist/components/map/MapContext.js +628 -0
- package/dist/components/map/MapContext.js.map +1 -0
- package/dist/components/map/MapCustomCallout.js +91 -0
- package/dist/components/map/MapCustomCallout.js.map +1 -0
- package/dist/components/map/common.js +4 -0
- package/dist/components/map/common.js.map +1 -0
- package/dist/components/map/createMapContext.js +34 -0
- package/dist/components/map/createMapContext.js.map +1 -0
- package/dist/components/map/handler.js +50 -0
- package/dist/components/map/handler.js.map +1 -0
- package/dist/components/map/index.js +329 -0
- package/dist/components/map/index.js.map +1 -0
- package/dist/components/picker/index.js +119 -38
- package/dist/components/picker/index.js.map +1 -1
- package/dist/components/picker/picker-group.js +400 -111
- package/dist/components/picker/picker-group.js.map +1 -1
- package/dist/components/scroll-view/index.js +80 -36
- package/dist/components/scroll-view/index.js.map +1 -1
- package/dist/components/switch/index.js +125 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/style/index.scss.js +4 -0
- package/dist/components/switch/style/index.scss.js.map +1 -0
- package/dist/contexts/ScrollElementContext.js +6 -0
- package/dist/contexts/ScrollElementContext.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/original/components/image/index.js +5 -3
- package/dist/original/components/image/index.js.map +1 -1
- package/dist/original/components/image/style/index.scss +5 -1
- package/dist/original/components/map/MapContext.js +628 -0
- package/dist/original/components/map/MapContext.js.map +1 -0
- package/dist/original/components/map/MapCustomCallout.js +91 -0
- package/dist/original/components/map/MapCustomCallout.js.map +1 -0
- package/dist/original/components/map/common.js +4 -0
- package/dist/original/components/map/common.js.map +1 -0
- package/dist/original/components/map/createMapContext.js +34 -0
- package/dist/original/components/map/createMapContext.js.map +1 -0
- package/dist/original/components/map/handler.js +50 -0
- package/dist/original/components/map/handler.js.map +1 -0
- package/dist/original/components/map/index.js +329 -0
- package/dist/original/components/map/index.js.map +1 -0
- package/dist/original/components/picker/index.js +119 -38
- package/dist/original/components/picker/index.js.map +1 -1
- package/dist/original/components/picker/picker-group.js +400 -111
- package/dist/original/components/picker/picker-group.js.map +1 -1
- package/dist/original/components/picker/style/index.scss +9 -8
- package/dist/original/components/scroll-view/index.js +80 -36
- package/dist/original/components/scroll-view/index.js.map +1 -1
- package/dist/original/components/switch/index.js +125 -0
- package/dist/original/components/switch/index.js.map +1 -0
- package/dist/original/components/switch/style/index.scss +35 -0
- package/dist/original/contexts/ScrollElementContext.js +6 -0
- package/dist/original/contexts/ScrollElementContext.js.map +1 -0
- package/dist/original/index.js +5 -1
- package/dist/original/index.js.map +1 -1
- package/dist/solid/components/image/index.js +5 -3
- package/dist/solid/components/image/index.js.map +1 -1
- package/dist/solid/components/picker/index.js +132 -45
- package/dist/solid/components/picker/index.js.map +1 -1
- package/dist/solid/components/picker/picker-group.js +423 -135
- package/dist/solid/components/picker/picker-group.js.map +1 -1
- package/dist/solid/components/scroll-view/index.js +84 -40
- package/dist/solid/components/scroll-view/index.js.map +1 -1
- package/dist/solid/contexts/ScrollElementContext.js +6 -0
- package/dist/solid/contexts/ScrollElementContext.js.map +1 -0
- package/dist/solid/index.css +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/map/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\nimport React, { Children, useEffect, useState } from 'react'\nimport { MultiMarker, MultiPolyline, TMap } from 'tlbs-map-react'\n\nimport { createForwardRefComponent } from '../../utils'\nimport { logPrefix } from './common'\nimport { registerMapInstance, unregisterMapInstance } from './MapContext'\nimport MapCustomCallout from './MapCustomCallout'\n\nimport type { MapProps as TaroMapProps } from '@tarojs/components'\nimport type MapTypes from 'tmap-gl-types'\n\nexport interface MapProps extends Omit<TaroMapProps, 'onError'> {\n forwardedRef?: React.MutableRefObject<any>\n authKey?: string\n libraries?: string\n onError?: (e: any) => void\n}\n\nfunction Map (props: MapProps) {\n const {\n forwardedRef,\n id,\n className,\n style,\n authKey,\n libraries,\n longitude,\n latitude,\n scale,\n minScale,\n maxScale,\n enableRotate,\n rotate,\n skew,\n markers,\n polyline,\n onTap,\n onAuthSuccess,\n onError,\n } = props\n // eslint-disable-next-line no-console\n console.log(logPrefix, 'props', props)\n\n /** ************************处理 style********************** */\n const styleObj = typeof style === 'string' || style === undefined ? {} : (style as Record<string, string>)\n\n /** ************************处理 marker********************** */\n const normalizedMarkers = markers ?? []\n const markerStyles: Record<string, any> = {}\n const markerGeometries: any[] = []\n\n normalizedMarkers.forEach((m, index) => {\n const markerId = String(m.id ?? index)\n const styleId = `marker-${markerId}`\n\n // Taro: iconPath (string);tlbs-map-react: styles 中指定图标\n // Taro: width, height (number|string);tlbs-map-react: width, height\n // Taro: rotate (number);tlbs-map-react: rotation\n // Taro: alpha (number 0-1);tlbs-map-react: opacity (0-1)\n // Taro: zIndex (number);tlbs-map-react: zIndex\n\n // 解析宽高,支持数字和字符串(如 '20px')\n const parseSize = (size: number | string | undefined): number => {\n if (typeof size === 'number') return size\n if (typeof size === 'string') {\n const parsed = parseInt(size, 10)\n return isNaN(parsed) ? 20 : parsed\n }\n return 20 // 默认宽度\n }\n\n const markerWidth = parseSize(m.width)\n const markerHeight = parseSize(m.height)\n\n // 宽高为 0 时跳过渲染(隐藏 marker,仅保留气泡)\n if (markerWidth === 0 || markerHeight === 0) {\n return\n }\n\n markerStyles[styleId] = {\n width: markerWidth,\n height: markerHeight,\n anchor: { x: markerWidth / 2, y: markerHeight }, // 默认底部中心为锚点\n ...(m.iconPath && { src: m.iconPath }),\n ...(typeof m.rotate === 'number' && { rotation: m.rotate }),\n ...(typeof m.alpha === 'number' && { opacity: m.alpha }),\n ...(typeof m.zIndex === 'number' && { zIndex: m.zIndex }),\n }\n\n markerGeometries.push({\n id: markerId,\n styleId,\n position: { lat: m.latitude, lng: m.longitude },\n })\n })\n\n /** ************************处理 polyline********************** */\n const normalizedPolylines = polyline ?? []\n const polylineStyles: Record<string, any> = {}\n const polylineGeometries: any[] = []\n\n normalizedPolylines.forEach((line, lineIndex) => {\n if (!line.points || line.points.length === 0) return\n\n const styleId = `polyline-${lineIndex}`\n\n // Taro: color (hex);腾讯地图: color\n // Taro: width (number);腾讯地图: width\n // Taro: dottedLine (boolean);腾讯地图: dashArray ([10,10]虚线, [0,0]实线)\n polylineStyles[styleId] = {\n color: line.color || '#3777FF',\n width: Math.round(line.width ?? 3), // 取整,tlbs-map-react 要求 width 为整数\n // 虚线:[10, 10] 表示10像素实线 + 10像素空白;实线:[0, 0]\n dashArray: line.dottedLine ? [10, 10] : [0, 0],\n }\n\n // Taro: points 是 {latitude, longitude}[] 数组\n // tlbs-map-react: geometries 需要路径点数组\n polylineGeometries.push({\n id: String(lineIndex),\n styleId,\n paths: line.points.map((point) => ({\n lat: point.latitude,\n lng: point.longitude,\n })),\n })\n })\n\n /** ************************适配options参数********************** */\n const hasCenter = typeof latitude === 'number' && typeof longitude === 'number'\n const mergedOptions = {\n ...(hasCenter ? { center: { lat: latitude, lng: longitude } } : {}),\n zoom: scale ?? 13,\n minZoom: minScale ?? 3,\n maxZoom: maxScale ?? 20,\n rotatable: enableRotate ?? false, // Taro: enableRotate;tlbs-map-react: options.rotatable\n ...(typeof rotate === 'number' && { rotation: rotate }), // Taro: rotate;tlbs-map-react: options.rotation\n ...(typeof skew === 'number' && { pitch: skew }), // Taro: skew;tlbs-map-react: options.pitch\n }\n\n /** ************************处理事件********************** */\n // Taro: onTap;腾讯地图: click\n // 腾讯地图事件返回: MapEvent { latLng: LatLng, point: {x, y}, type, target, originalEvent }\n // Taro 事件格式: BaseEventOrig { type, timeStamp, target, currentTarget, detail, ... }\n const handleMapClick = (e: MapTypes.MapEvent) => {\n console.log(logPrefix, 'source click e:', e)\n if (typeof onTap === 'function') {\n onTap({\n type: e.type,\n timeStamp: Date.now(),\n target: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n currentTarget: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n detail: {\n latitude: e.latLng.lat,\n longitude: e.latLng.lng,\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n })\n }\n }\n\n // 存储地图实例,用于 H5 端自定义气泡\n const [mapInstance, setMapInstance] = useState<MapTypes.Map | null>(null)\n\n // 地图初始化成功\n const handleMapInited = (instance: MapTypes.Map) => {\n console.log(logPrefix, '地图初始化成功', instance)\n setMapInstance(instance)\n\n // 注册地图实例到全局存储\n if (id) {\n registerMapInstance(id, instance)\n console.log(logPrefix, '已注册地图实例到 MapContext, id:', id)\n }\n\n let settled = false\n instance.on('tilesloaded', (_res) => { /** 瓦片加载完成,地图真正可用 */\n // TODO: 临时先这么简单处理鉴权成功\n if (!settled && typeof onAuthSuccess === 'function') {\n settled = true\n onAuthSuccess({\n type: 'authsuccess',\n timeStamp: Date.now(),\n target: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n currentTarget: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n detail: {\n errCode: 0,\n errMsg: 'ok',\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n })\n }\n })\n setTimeout(() => {\n if (!settled && typeof onError === 'function') {\n settled = true\n onError({\n type: 'error',\n timeStamp: Date.now(),\n target: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n currentTarget: {\n id: id || '',\n tagName: 'map',\n dataset: {},\n },\n detail: {\n errCode: 1001,\n errMsg: 'timeout',\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n })\n }\n }, 3000)\n }\n\n // 组件卸载时清理地图实例\n useEffect(() => {\n return () => {\n if (id) {\n unregisterMapInstance(id)\n console.log(logPrefix, '已注销地图实例, id:', id)\n }\n }\n }, [id])\n\n return (\n <TMap\n id={id}\n ref={forwardedRef}\n className={className}\n style={styleObj}\n apiKey={authKey ?? ''}\n libraries={libraries}\n options={mergedOptions}\n onClick={handleMapClick}\n onMapInited={handleMapInited}\n >\n {normalizedMarkers.length > 0 ? (\n <MultiMarker id=\"taro-markers\" styles={markerStyles} geometries={markerGeometries} />\n ) : null}\n {polylineGeometries.length > 0 ? (\n <MultiPolyline id=\"taro-polylines\" styles={polylineStyles} geometries={polylineGeometries} />\n ) : null}\n\n {/* H5 端:自动处理 slot=\"callout\" 的 CoverView */}\n {process.env.TARO_ENV === 'h5' ? renderH5CustomCallouts() : props.children}\n </TMap>\n )\n\n /**\n * H5 端渲染自定义气泡\n * 拦截 slot=\"callout\" 的 CoverView,转换为自定义 Overlay\n */\n function renderH5CustomCallouts() {\n if (!mapInstance) return null\n\n // 1. 遍历 props.children,找到 slot=\"callout\" 的 CoverView\n const childrenArray = Children.toArray(props.children)\n const calloutSlot = childrenArray.find((child: any) =>\n React.isValidElement(child) && child.props?.slot === 'callout'\n )\n\n if (!calloutSlot || !React.isValidElement(calloutSlot)) {\n return null\n }\n\n // 2. 遍历内层的 CoverView,提取 markerId 和内容\n const innerCoverViews = Children.toArray(calloutSlot.props.children)\n\n return innerCoverViews.map((child: any) => {\n if (!React.isValidElement(child)) return null\n\n const markerId = child.props?.markerId\n if (!markerId) return null\n\n // 3. 找到对应的 marker 信息\n const marker = normalizedMarkers.find((m: any) => m.id === markerId)\n if (!marker) {\n console.warn(logPrefix, `未找到 markerId=${markerId} 对应的 marker`)\n return null\n }\n\n // 4. 渲染自定义气泡\n return (\n <MapCustomCallout\n key={markerId}\n map={mapInstance}\n markerId={markerId}\n position={{ lat: marker.latitude, lng: marker.longitude }}\n anchorX={marker.customCallout?.anchorX ?? 0}\n anchorY={marker.customCallout?.anchorY ?? 0}\n display={marker.customCallout?.display ?? 'ALWAYS'}\n onCalloutTap={(id) => {\n // 触发 onCalloutTap 事件\n if (typeof props.onCalloutTap === 'function') {\n props.onCalloutTap({\n type: 'callouttap',\n timeStamp: Date.now(),\n target: {\n id: String(id) || '',\n tagName: 'callout',\n dataset: {},\n },\n currentTarget: {\n id: String(id) || '',\n tagName: 'callout',\n dataset: {},\n },\n detail: { markerId: id },\n preventDefault: () => {},\n stopPropagation: () => {},\n })\n }\n }}\n >\n {child.props.children}\n </MapCustomCallout>\n )\n })\n }\n}\n\nexport default createForwardRefComponent(Map)\n\n/**\n * @deprecated 请使用 Taro.createMapContext 代替\n *\n * 此导出仅用于向后兼容,将在未来版本中移除。\n *\n * 推荐用法:\n * ```tsx\n * import Taro from '@tarojs/taro'\n *\n * const mapCtx = Taro.createMapContext('mapId')\n * ```\n */\nexport { createMapContext } from './createMapContext'\n"],"names":["Map","props","forwardedRef","id","className","style","authKey","libraries","longitude","latitude","scale","minScale","maxScale","enableRotate","rotate","skew","markers","polyline","onTap","onAuthSuccess","onError","console","log","logPrefix","styleObj","undefined","normalizedMarkers","markerStyles","markerGeometries","forEach","m","index","markerId","String","_a","styleId","parseSize","size","parsed","parseInt","isNaN","markerWidth","width","markerHeight","height","anchor","x","y","iconPath","src","rotation","alpha","opacity","zIndex","push","position","lat","lng","normalizedPolylines","polylineStyles","polylineGeometries","line","lineIndex","points","length","color","Math","round","dashArray","dottedLine","paths","map","point","hasCenter","mergedOptions","center","zoom","minZoom","maxZoom","rotatable","pitch","handleMapClick","e","type","timeStamp","Date","now","target","tagName","dataset","currentTarget","detail","latLng","preventDefault","stopPropagation","mapInstance","setMapInstance","useState","handleMapInited","instance","registerMapInstance","settled","on","_res","errCode","errMsg","setTimeout","useEffect","unregisterMapInstance","_jsxs","TMap","ref","apiKey","options","onClick","onMapInited","children","_jsx","MultiMarker","styles","geometries","MultiPolyline","process","env","TARO_ENV","renderH5CustomCallouts","childrenArray","Children","toArray","calloutSlot","find","child","React","isValidElement","slot","innerCoverViews","marker","warn","MapCustomCallout","anchorX","_c","_b","customCallout","anchorY","_e","_d","display","_g","_f","onCalloutTap","createForwardRefComponent"],"mappings":";;;;;;;;;AAAA;AAmBA,SAASA,GAAGA,CAAEC,KAAe,EAAA;EAC3B,MAAM;IACJC,YAAY;IACZC,EAAE;IACFC,SAAS;IACTC,KAAK;IACLC,OAAO;IACPC,SAAS;IACTC,SAAS;IACTC,QAAQ;IACRC,KAAK;IACLC,QAAQ;IACRC,QAAQ;IACRC,YAAY;IACZC,MAAM;IACNC,IAAI;IACJC,OAAO;IACPC,QAAQ;IACRC,KAAK;IACLC,aAAa;AACbC,IAAAA;AACD,GAAA,GAAGnB,KAAK;AACT;EACAoB,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,OAAO,EAAEtB,KAAK,CAAC;AAEtC;AACA,EAAA,MAAMuB,QAAQ,GAAG,OAAOnB,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAKoB,SAAS,GAAG,EAAE,GAAIpB,KAAgC;AAE1G;AACA,EAAA,MAAMqB,iBAAiB,GAAGV,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAP,KAAA,CAAA,GAAAA,OAAO,GAAI,EAAE;EACvC,MAAMW,YAAY,GAAwB,EAAE;EAC5C,MAAMC,gBAAgB,GAAU,EAAE;AAElCF,EAAAA,iBAAiB,CAACG,OAAO,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAI;;IACrC,MAAMC,QAAQ,GAAGC,MAAM,CAAC,CAAAC,EAAA,GAAAJ,CAAC,CAAC3B,EAAE,MAAA,IAAA,IAAA+B,EAAA,KAAA,KAAA,CAAA,GAAAA,EAAA,GAAIH,KAAK,CAAC;AACtC,IAAA,MAAMI,OAAO,GAAG,CAAUH,OAAAA,EAAAA,QAAQ,CAAE,CAAA;AAEpC;AACA;AACA;AACA;AACA;AAEA;IACA,MAAMI,SAAS,GAAIC,IAAiC,IAAY;AAC9D,MAAA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE,OAAOA,IAAI;AACzC,MAAA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,MAAMC,MAAM,GAAGC,QAAQ,CAACF,IAAI,EAAE,EAAE,CAAC;AACjC,QAAA,OAAOG,KAAK,CAACF,MAAM,CAAC,GAAG,EAAE,GAAGA,MAAM;AACpC;MACA,OAAO,EAAE,CAAA;KACV;AAED,IAAA,MAAMG,WAAW,GAAGL,SAAS,CAACN,CAAC,CAACY,KAAK,CAAC;AACtC,IAAA,MAAMC,YAAY,GAAGP,SAAS,CAACN,CAAC,CAACc,MAAM,CAAC;AAExC;AACA,IAAA,IAAIH,WAAW,KAAK,CAAC,IAAIE,YAAY,KAAK,CAAC,EAAE;AAC3C,MAAA;AACF;AAEAhB,IAAAA,YAAY,CAACQ,OAAO,CAAC;AACnBO,MAAAA,KAAK,EAAED,WAAW;AAClBG,MAAAA,MAAM,EAAED,YAAY;AACpBE,MAAAA,MAAM,EAAE;QAAEC,CAAC,EAAEL,WAAW,GAAG,CAAC;AAAEM,QAAAA,CAAC,EAAEJ;;AAC9B,KAAA,EAACb,CAAC,CAACkB,QAAQ,IAAI;MAAEC,GAAG,EAAEnB,CAAC,CAACkB;KAAW,GAClC,OAAOlB,CAAC,CAAChB,MAAM,KAAK,QAAQ,IAAI;MAAEoC,QAAQ,EAAEpB,CAAC,CAAChB;KAAS,CAAA,EACvD,OAAOgB,CAAC,CAACqB,KAAK,KAAK,QAAQ,IAAI;MAAEC,OAAO,EAAEtB,CAAC,CAACqB;KAAQ,CACrD,EAAC,OAAOrB,CAAC,CAACuB,MAAM,KAAK,QAAQ,IAAI;MAAEA,MAAM,EAAEvB,CAAC,CAACuB;AAAQ,KAAC,CAC1D;IAEDzB,gBAAgB,CAAC0B,IAAI,CAAC;AACpBnD,MAAAA,EAAE,EAAE6B,QAAQ;MACZG,OAAO;AACPoB,MAAAA,QAAQ,EAAE;QAAEC,GAAG,EAAE1B,CAAC,CAACrB,QAAQ;QAAEgD,GAAG,EAAE3B,CAAC,CAACtB;AAAW;AAChD,KAAA,CAAC;AACJ,GAAC,CAAC;AAEF;AACA,EAAA,MAAMkD,mBAAmB,GAAGzC,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAAR,KAAA,CAAA,GAAAA,QAAQ,GAAI,EAAE;EAC1C,MAAM0C,cAAc,GAAwB,EAAE;EAC9C,MAAMC,kBAAkB,GAAU,EAAE;AAEpCF,EAAAA,mBAAmB,CAAC7B,OAAO,CAAC,CAACgC,IAAI,EAAEC,SAAS,KAAI;;AAC9C,IAAA,IAAI,CAACD,IAAI,CAACE,MAAM,IAAIF,IAAI,CAACE,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;AAE9C,IAAA,MAAM7B,OAAO,GAAG,CAAY2B,SAAAA,EAAAA,SAAS,CAAE,CAAA;AAEvC;AACA;AACA;IACAH,cAAc,CAACxB,OAAO,CAAC,GAAG;AACxB8B,MAAAA,KAAK,EAAEJ,IAAI,CAACI,KAAK,IAAI,SAAS;MAC9BvB,KAAK,EAAEwB,IAAI,CAACC,KAAK,CAAC,CAAAjC,EAAA,GAAA2B,IAAI,CAACnB,KAAK,MAAA,IAAA,IAAAR,EAAA,KAAA,KAAA,CAAA,GAAAA,EAAA,GAAI,CAAC,CAAC;AAAE;AACpC;AACAkC,MAAAA,SAAS,EAAEP,IAAI,CAACQ,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;KAC9C;AAED;AACA;IACAT,kBAAkB,CAACN,IAAI,CAAC;AACtBnD,MAAAA,EAAE,EAAE8B,MAAM,CAAC6B,SAAS,CAAC;MACrB3B,OAAO;MACPmC,KAAK,EAAET,IAAI,CAACE,MAAM,CAACQ,GAAG,CAAEC,KAAK,KAAM;QACjChB,GAAG,EAAEgB,KAAK,CAAC/D,QAAQ;QACnBgD,GAAG,EAAEe,KAAK,CAAChE;AACZ,OAAA,CAAC;AACH,KAAA,CAAC;AACJ,GAAC,CAAC;AAEF;EACA,MAAMiE,SAAS,GAAG,OAAOhE,QAAQ,KAAK,QAAQ,IAAI,OAAOD,SAAS,KAAK,QAAQ;EAC/E,MAAMkE,aAAa,+DACbD,SAAS,GAAG;AAAEE,IAAAA,MAAM,EAAE;AAAEnB,MAAAA,GAAG,EAAE/C,QAAQ;AAAEgD,MAAAA,GAAG,EAAEjD;AAAS;GAAI,GAAG,EAAG;AACnEoE,IAAAA,IAAI,EAAElE,KAAK,KAAL,IAAA,IAAAA,KAAK,cAALA,KAAK,GAAI,EAAE;AACjBmE,IAAAA,OAAO,EAAElE,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAAR,KAAA,CAAA,GAAAA,QAAQ,GAAI,CAAC;AACtBmE,IAAAA,OAAO,EAAElE,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,GAARA,QAAQ,GAAI,EAAE;IACvBmE,SAAS,EAAElE,YAAY,KAAZ,IAAA,IAAAA,YAAY,cAAZA,YAAY,GAAI;AACxB,GAAA,CAAA,EAAC,OAAOC,MAAM,KAAK,QAAQ,IAAI;AAAEoC,IAAAA,QAAQ,EAAEpC;GAAS,CAAA,EACnD,OAAOC,IAAI,KAAK,QAAQ,IAAI;AAAEiE,IAAAA,KAAK,EAAEjE;AAAM,GAAC,CACjD;AAED;AACA;AACA;AACA;EACA,MAAMkE,cAAc,GAAIC,CAAoB,IAAI;IAC9C7D,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,iBAAiB,EAAE2D,CAAC,CAAC;AAC5C,IAAA,IAAI,OAAOhE,KAAK,KAAK,UAAU,EAAE;AAC/BA,MAAAA,KAAK,CAAC;QACJiE,IAAI,EAAED,CAAC,CAACC,IAAI;AACZC,QAAAA,SAAS,EAAEC,IAAI,CAACC,GAAG,EAAE;AACrBC,QAAAA,MAAM,EAAE;UACNpF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,UAAAA,OAAO,EAAE,KAAK;AACdC,UAAAA,OAAO,EAAE;SACV;AACDC,QAAAA,aAAa,EAAE;UACbvF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,UAAAA,OAAO,EAAE,KAAK;AACdC,UAAAA,OAAO,EAAE;SACV;AACDE,QAAAA,MAAM,EAAE;AACNlF,UAAAA,QAAQ,EAAEyE,CAAC,CAACU,MAAM,CAACpC,GAAG;AACtBhD,UAAAA,SAAS,EAAE0E,CAAC,CAACU,MAAM,CAACnC;SACrB;AACDoC,QAAAA,cAAc,EAAEA,MAAK,EAAG;QACxBC,eAAe,EAAEA,MAAK;AACvB,OAAA,CAAC;AACJ;GACD;AAED;EACA,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGC,QAAQ,CAAsB,IAAI,CAAC;AAEzE;EACA,MAAMC,eAAe,GAAIC,QAAsB,IAAI;IACjD9E,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,SAAS,EAAE4E,QAAQ,CAAC;IAC3CH,cAAc,CAACG,QAAQ,CAAC;AAExB;AACA,IAAA,IAAIhG,EAAE,EAAE;AACNiG,MAAAA,mBAAmB,CAACjG,EAAE,EAAEgG,QAAQ,CAAC;MACjC9E,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,0BAA0B,EAAEpB,EAAE,CAAC;AACxD;IAEA,IAAIkG,OAAO,GAAG,KAAK;AACnBF,IAAAA,QAAQ,CAACG,EAAE,CAAC,aAAa,EAAGC,IAAI,IAAI;AAClC;AACA,MAAA,IAAI,CAACF,OAAO,IAAI,OAAOlF,aAAa,KAAK,UAAU,EAAE;AACnDkF,QAAAA,OAAO,GAAG,IAAI;AACdlF,QAAAA,aAAa,CAAC;AACZgE,UAAAA,IAAI,EAAE,aAAa;AACnBC,UAAAA,SAAS,EAAEC,IAAI,CAACC,GAAG,EAAE;AACrBC,UAAAA,MAAM,EAAE;YACNpF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,YAAAA,OAAO,EAAE,KAAK;AACdC,YAAAA,OAAO,EAAE;WACV;AACDC,UAAAA,aAAa,EAAE;YACbvF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,YAAAA,OAAO,EAAE,KAAK;AACdC,YAAAA,OAAO,EAAE;WACV;AACDE,UAAAA,MAAM,EAAE;AACNa,YAAAA,OAAO,EAAE,CAAC;AACVC,YAAAA,MAAM,EAAE;WACT;AACDZ,UAAAA,cAAc,EAAEA,MAAK,EAAG;UACxBC,eAAe,EAAEA,MAAK;AACvB,SAAA,CAAC;AACJ;AACF,KAAC,CAAC;AACFY,IAAAA,UAAU,CAAC,MAAK;AACd,MAAA,IAAI,CAACL,OAAO,IAAI,OAAOjF,OAAO,KAAK,UAAU,EAAE;AAC7CiF,QAAAA,OAAO,GAAG,IAAI;AACdjF,QAAAA,OAAO,CAAC;AACN+D,UAAAA,IAAI,EAAE,OAAO;AACbC,UAAAA,SAAS,EAAEC,IAAI,CAACC,GAAG,EAAE;AACrBC,UAAAA,MAAM,EAAE;YACNpF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,YAAAA,OAAO,EAAE,KAAK;AACdC,YAAAA,OAAO,EAAE;WACV;AACDC,UAAAA,aAAa,EAAE;YACbvF,EAAE,EAAEA,EAAE,IAAI,EAAE;AACZqF,YAAAA,OAAO,EAAE,KAAK;AACdC,YAAAA,OAAO,EAAE;WACV;AACDE,UAAAA,MAAM,EAAE;AACNa,YAAAA,OAAO,EAAE,IAAI;AACbC,YAAAA,MAAM,EAAE;WACT;AACDZ,UAAAA,cAAc,EAAEA,MAAK,EAAG;UACxBC,eAAe,EAAEA,MAAK;AACvB,SAAA,CAAC;AACJ;KACD,EAAE,IAAI,CAAC;GACT;AAED;AACAa,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,OAAO,MAAK;AACV,MAAA,IAAIxG,EAAE,EAAE;QACNyG,qBAAqB,CAACzG,EAAE,CAAC;QACzBkB,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,cAAc,EAAEpB,EAAE,CAAC;AAC5C;KACD;AACH,GAAC,EAAE,CAACA,EAAE,CAAC,CAAC;EAER,oBACE0G,IAAA,CAACC,IAAI,EAAA;AACH3G,IAAAA,EAAE,EAAEA,EAAG;AACP4G,IAAAA,GAAG,EAAE7G,YAAa;AAClBE,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,KAAK,EAAEmB,QAAS;AAChBwF,IAAAA,MAAM,EAAE1G,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,KAAA,CAAA,GAAPA,OAAO,GAAI,EAAG;AACtBC,IAAAA,SAAS,EAAEA,SAAU;AACrB0G,IAAAA,OAAO,EAAEvC,aAAc;AACvBwC,IAAAA,OAAO,EAAEjC,cAAe;AACxBkC,IAAAA,WAAW,EAAEjB,eAAgB;IAAAkB,QAAA,EAAA,CAE5B1F,iBAAiB,CAACsC,MAAM,GAAG,CAAC,gBAC3BqD,GAAA,CAACC,WAAW,EAAA;AAACnH,MAAAA,EAAE,EAAC,cAAc;AAACoH,MAAAA,MAAM,EAAE5F,YAAa;AAAC6F,MAAAA,UAAU,EAAE5F;AAAiB,MAAG,GACnF,IAAI,EACPgC,kBAAkB,CAACI,MAAM,GAAG,CAAC,gBAC5BqD,GAAA,CAACI,aAAa,EAAA;AAACtH,MAAAA,EAAE,EAAC,gBAAgB;AAACoH,MAAAA,MAAM,EAAE5D,cAAe;AAAC6D,MAAAA,UAAU,EAAE5D;AAAmB,MAAG,GAC3F,IAAI,EAGP8D,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,IAAI,GAAGC,sBAAsB,EAAE,GAAG5H,KAAK,CAACmH,QAAQ;AAAA,GACtE,CAAC;AAGT;;;AAGG;EACH,SAASS,sBAAsBA,GAAA;AAC7B,IAAA,IAAI,CAAC9B,WAAW,EAAE,OAAO,IAAI;AAE7B;IACA,MAAM+B,aAAa,GAAGC,QAAQ,CAACC,OAAO,CAAC/H,KAAK,CAACmH,QAAQ,CAAC;AACtD,IAAA,MAAMa,WAAW,GAAGH,aAAa,CAACI,IAAI,CAAEC,KAAU,IAChD;AAAA,MAAA,IAAAjG,EAAA;AAAA,MAAA,oBAAAkG,cAAK,CAACC,cAAc,CAACF,KAAK,CAAC,IAAI,CAAA,CAAAjG,EAAA,GAAAiG,KAAK,CAAClI,KAAK,MAAE,IAAA,IAAAiC,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAAoG,IAAI,MAAK,SAAS;AAAA,KAAA,CAC/D;IAED,IAAI,CAACL,WAAW,IAAI,eAACG,cAAK,CAACC,cAAc,CAACJ,WAAW,CAAC,EAAE;AACtD,MAAA,OAAO,IAAI;AACb;AAEA;IACA,MAAMM,eAAe,GAAGR,QAAQ,CAACC,OAAO,CAACC,WAAW,CAAChI,KAAK,CAACmH,QAAQ,CAAC;AAEpE,IAAA,OAAOmB,eAAe,CAAChE,GAAG,CAAE4D,KAAU,IAAI;;MACxC,IAAI,eAACC,cAAK,CAACC,cAAc,CAACF,KAAK,CAAC,EAAE,OAAO,IAAI;MAE7C,MAAMnG,QAAQ,GAAG,CAAAE,EAAA,GAAAiG,KAAK,CAAClI,KAAK,MAAA,IAAA,IAAAiC,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAEF,QAAQ;AACtC,MAAA,IAAI,CAACA,QAAQ,EAAE,OAAO,IAAI;AAE1B;AACA,MAAA,MAAMwG,MAAM,GAAG9G,iBAAiB,CAACwG,IAAI,CAAEpG,CAAM,IAAKA,CAAC,CAAC3B,EAAE,KAAK6B,QAAQ,CAAC;MACpE,IAAI,CAACwG,MAAM,EAAE;QACXnH,OAAO,CAACoH,IAAI,CAAClH,SAAS,EAAE,CAAgBS,aAAAA,EAAAA,QAAQ,aAAa,CAAC;AAC9D,QAAA,OAAO,IAAI;AACb;AAEA;MACA,oBACEqF,GAAA,CAACqB,gBAAgB,EAAA;AAEfnE,QAAAA,GAAG,EAAEwB,WAAY;AACjB/D,QAAAA,QAAQ,EAAEA,QAAS;AACnBuB,QAAAA,QAAQ,EAAE;UAAEC,GAAG,EAAEgF,MAAM,CAAC/H,QAAQ;UAAEgD,GAAG,EAAE+E,MAAM,CAAChI;SAAY;AAC1DmI,QAAAA,OAAO,EAAE,CAAAC,EAAA,GAAA,CAAAC,EAAA,GAAAL,MAAM,CAACM,aAAa,MAAA,IAAA,IAAAD,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAEF,OAAO,MAAI,IAAA,IAAAC,EAAA,KAAA,KAAA,CAAA,GAAAA,EAAA,GAAA,CAAE;AAC5CG,QAAAA,OAAO,EAAE,CAAAC,EAAA,GAAA,MAAAR,MAAM,CAACM,aAAa,MAAE,IAAA,IAAAG,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAAF,OAAO,mCAAI,CAAE;AAC5CG,QAAAA,OAAO,EAAE,CAAAC,EAAA,GAAA,MAAAX,MAAM,CAACM,aAAa,MAAE,IAAA,IAAAM,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAAF,OAAO,mCAAI,QAAS;QACnDG,YAAY,EAAGlJ,EAAE,IAAI;AACnB;AACA,UAAA,IAAI,OAAOF,KAAK,CAACoJ,YAAY,KAAK,UAAU,EAAE;YAC5CpJ,KAAK,CAACoJ,YAAY,CAAC;AACjBlE,cAAAA,IAAI,EAAE,YAAY;AAClBC,cAAAA,SAAS,EAAEC,IAAI,CAACC,GAAG,EAAE;AACrBC,cAAAA,MAAM,EAAE;AACNpF,gBAAAA,EAAE,EAAE8B,MAAM,CAAC9B,EAAE,CAAC,IAAI,EAAE;AACpBqF,gBAAAA,OAAO,EAAE,SAAS;AAClBC,gBAAAA,OAAO,EAAE;eACV;AACDC,cAAAA,aAAa,EAAE;AACbvF,gBAAAA,EAAE,EAAE8B,MAAM,CAAC9B,EAAE,CAAC,IAAI,EAAE;AACpBqF,gBAAAA,OAAO,EAAE,SAAS;AAClBC,gBAAAA,OAAO,EAAE;eACV;AACDE,cAAAA,MAAM,EAAE;AAAE3D,gBAAAA,QAAQ,EAAE7B;eAAI;AACxB0F,cAAAA,cAAc,EAAEA,MAAK,EAAG;cACxBC,eAAe,EAAEA,MAAK;AACvB,aAAA,CAAC;AACJ;SACA;AAAAsB,QAAAA,QAAA,EAEDe,KAAK,CAAClI,KAAK,CAACmH;AAAQ,OAAA,EA9BhBpF,QA+BW,CAAC;AAEvB,KAAC,CAAC;AACJ;AACF;AAEA,YAAesH,yBAAyB,CAACtJ,GAAG,CAAC;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __rest } from 'tslib';
|
|
2
2
|
import './style/index.scss.js';
|
|
3
3
|
import { View } from '@tarojs/components';
|
|
4
|
+
import Taro from '@tarojs/taro';
|
|
4
5
|
import classNames from 'classnames';
|
|
5
6
|
import React__default from 'react';
|
|
6
7
|
import { verifyValue, verifyTime, hoursRange, minutesRange, verifyDate, getYearRange, getMonthRange, getDayRange, compareTime, omit } from '../../utils/index.js';
|
|
@@ -127,12 +128,13 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
127
128
|
children,
|
|
128
129
|
formType,
|
|
129
130
|
lang,
|
|
130
|
-
theme = 'light'
|
|
131
|
+
theme = 'light',
|
|
132
|
+
enableClickItemScroll = true
|
|
131
133
|
} = props,
|
|
132
|
-
restProps = __rest(props, ["mode", "disabled", "range", "rangeKey", "value", "start", "end", "fields", "headerText", "level", "regionData", "textProps", "colors", "onChange", "onColumnChange", "onCancel", "children", "formType", "lang", "theme"]);
|
|
134
|
+
restProps = __rest(props, ["mode", "disabled", "range", "rangeKey", "value", "start", "end", "fields", "headerText", "level", "regionData", "textProps", "colors", "onChange", "onColumnChange", "onCancel", "children", "formType", "lang", "theme", "enableClickItemScroll"]);
|
|
133
135
|
const indexRef = React__default.useRef([]);
|
|
134
136
|
const pickerDateRef = React__default.useRef();
|
|
135
|
-
//
|
|
137
|
+
// region:首次用户滚动初始化完成前不入库
|
|
136
138
|
const isInitializationCompletedRef = React__default.useRef(false);
|
|
137
139
|
const [state, setState] = React__default.useState({
|
|
138
140
|
pickerValue: value || EMPTY_ARRAY,
|
|
@@ -141,14 +143,47 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
141
143
|
hidden: true,
|
|
142
144
|
fadeOut: false,
|
|
143
145
|
isWillLoadCalled: false,
|
|
144
|
-
|
|
146
|
+
a11yTimeLimitColumnId: null,
|
|
147
|
+
a11yTimeLimitNonce: 0
|
|
145
148
|
});
|
|
149
|
+
// 安全区域底部距离
|
|
150
|
+
const [safeAreaBottom, setSafeAreaBottom] = React__default.useState(0);
|
|
146
151
|
// 在组件内部
|
|
147
152
|
const [columnsCount, setColumnsCount] = React__default.useState(() => getRegionColumnsCount(level));
|
|
148
153
|
// 只在level变化时更新列数
|
|
149
154
|
React__default.useEffect(() => {
|
|
150
155
|
setColumnsCount(getRegionColumnsCount(level));
|
|
151
156
|
}, [level]);
|
|
157
|
+
// 更新安全区域
|
|
158
|
+
const updateSafeArea = React__default.useCallback(() => {
|
|
159
|
+
try {
|
|
160
|
+
const systemInfo = Taro.getSystemInfoSync();
|
|
161
|
+
const {
|
|
162
|
+
safeArea,
|
|
163
|
+
windowHeight
|
|
164
|
+
} = systemInfo;
|
|
165
|
+
// safeArea.bottom 为安全区底边的 Y 坐标,有效值应接近 windowHeight;
|
|
166
|
+
// 全 0 表示安全区信息尚不可用,此时不能用 windowHeight-0 算出整屏高度作为底部间距
|
|
167
|
+
if (safeArea && windowHeight && safeArea.bottom > 0) {
|
|
168
|
+
const lengthScaleRatio = systemInfo.lengthScaleRatio || 1;
|
|
169
|
+
const bottom = (windowHeight - safeArea.bottom) / lengthScaleRatio;
|
|
170
|
+
setSafeAreaBottom(Math.max(0, bottom));
|
|
171
|
+
} else {
|
|
172
|
+
setSafeAreaBottom(0);
|
|
173
|
+
}
|
|
174
|
+
} catch (e) {
|
|
175
|
+
// H5 环境或其他异常情况,不设置安全区域
|
|
176
|
+
setSafeAreaBottom(0);
|
|
177
|
+
}
|
|
178
|
+
}, []);
|
|
179
|
+
// 初始化安全区域
|
|
180
|
+
React__default.useEffect(() => {
|
|
181
|
+
updateSafeArea();
|
|
182
|
+
}, [updateSafeArea]);
|
|
183
|
+
// 监听窗口变化(导航方式切换等)
|
|
184
|
+
Taro.useResize(() => {
|
|
185
|
+
updateSafeArea();
|
|
186
|
+
});
|
|
152
187
|
// 获取当前索引数组
|
|
153
188
|
const getIndices = React__default.useCallback(() => {
|
|
154
189
|
return indexRef.current;
|
|
@@ -199,25 +234,36 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
199
234
|
const monthRange = getMonthRange(_start, _end, currentYear);
|
|
200
235
|
const dayRange = getDayRange(_start, _end, currentYear, currentMonth);
|
|
201
236
|
indexRef.current = [yearRange.indexOf(currentYear), monthRange.indexOf(currentMonth), dayRange.indexOf(currentDay)];
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
237
|
+
// 与 props 同步时始终刷新 _updateValue,避免取消后再开时日列草稿与索引不一致
|
|
238
|
+
pickerDateRef.current = {
|
|
239
|
+
_value,
|
|
240
|
+
_start,
|
|
241
|
+
_end,
|
|
242
|
+
_updateValue: [currentYear, currentMonth, currentDay]
|
|
243
|
+
};
|
|
210
244
|
} else if (mode === 'region') {
|
|
211
245
|
// region 模式处理 - 验证数据
|
|
212
246
|
if (!regionData) {
|
|
213
247
|
console.error('Picker: regionData is required for region mode');
|
|
214
|
-
indexRef.current =
|
|
248
|
+
indexRef.current = Array.from({
|
|
249
|
+
length: columnsCount
|
|
250
|
+
}, () => 0);
|
|
251
|
+
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
252
|
+
selectedIndices: [...indexRef.current],
|
|
253
|
+
pickerValue: value || EMPTY_ARRAY
|
|
254
|
+
}));
|
|
215
255
|
return;
|
|
216
256
|
}
|
|
217
257
|
const validation = validateRegionData(regionData, 'Picker');
|
|
218
258
|
if (!validation.valid) {
|
|
219
259
|
console.error(validation.error);
|
|
220
|
-
indexRef.current =
|
|
260
|
+
indexRef.current = Array.from({
|
|
261
|
+
length: columnsCount
|
|
262
|
+
}, () => 0);
|
|
263
|
+
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
264
|
+
selectedIndices: [...indexRef.current],
|
|
265
|
+
pickerValue: value || EMPTY_ARRAY
|
|
266
|
+
}));
|
|
221
267
|
return;
|
|
222
268
|
}
|
|
223
269
|
// 获取列数
|
|
@@ -264,16 +310,18 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
264
310
|
handleProps();
|
|
265
311
|
}
|
|
266
312
|
}, [handleProps, state.isWillLoadCalled, JSON.stringify(value)]);
|
|
267
|
-
//
|
|
313
|
+
// 打开时按 props 重算索引,避免未确认的滑动与 indexRef 残留导致再开抖动
|
|
268
314
|
const showPicker = React__default.useCallback(() => {
|
|
269
315
|
if (disabled) return;
|
|
316
|
+
// 打开弹层时再读一次:此时安全区必然已稳定,避免 mount 首帧拿到全 0 的无效值
|
|
317
|
+
updateSafeArea();
|
|
270
318
|
isInitializationCompletedRef.current = false;
|
|
271
|
-
|
|
319
|
+
handleProps();
|
|
272
320
|
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
273
|
-
|
|
274
|
-
|
|
321
|
+
hidden: false,
|
|
322
|
+
a11yTimeLimitColumnId: null
|
|
275
323
|
}));
|
|
276
|
-
}, [disabled,
|
|
324
|
+
}, [disabled, handleProps, updateSafeArea]);
|
|
277
325
|
// 隐藏 Picker
|
|
278
326
|
const hidePicker = React__default.useCallback(() => {
|
|
279
327
|
isInitializationCompletedRef.current = false;
|
|
@@ -348,11 +396,11 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
348
396
|
finalIndices = [...newIndices];
|
|
349
397
|
hasLimited = true;
|
|
350
398
|
}
|
|
351
|
-
// 触发限位,更新状态,其它状态不用主动触发滚动
|
|
352
399
|
if (hasLimited) {
|
|
353
400
|
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
354
401
|
selectedIndices: finalIndices,
|
|
355
|
-
|
|
402
|
+
a11yTimeLimitColumnId: columnId,
|
|
403
|
+
a11yTimeLimitNonce: prev.a11yTimeLimitNonce + 1
|
|
356
404
|
}));
|
|
357
405
|
} else {
|
|
358
406
|
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
@@ -585,11 +633,17 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
585
633
|
}
|
|
586
634
|
});
|
|
587
635
|
}, [onColumnChange]);
|
|
588
|
-
|
|
636
|
+
const consumeTimeA11yLimitFocus = React__default.useCallback(() => {
|
|
637
|
+
setState(prev => Object.assign(Object.assign({}, prev), {
|
|
638
|
+
a11yTimeLimitColumnId: null
|
|
639
|
+
}));
|
|
640
|
+
}, []);
|
|
641
|
+
// 取消时按 props 回同步索引,避免与 value 脱节
|
|
589
642
|
const handleCancel = React__default.useCallback(() => {
|
|
643
|
+
handleProps();
|
|
590
644
|
hidePicker();
|
|
591
645
|
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
592
|
-
}, [hidePicker, onCancel]);
|
|
646
|
+
}, [handleProps, hidePicker, onCancel]);
|
|
593
647
|
// 渲染选择器组
|
|
594
648
|
const renderPickerGroup = React__default.useMemo(() => {
|
|
595
649
|
switch (mode) {
|
|
@@ -603,11 +657,16 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
603
657
|
columnId: String(index),
|
|
604
658
|
selectedIndex: state.selectedIndices[index] // 传递对应列的selectedIndex
|
|
605
659
|
,
|
|
606
|
-
colors: colors
|
|
660
|
+
colors: colors,
|
|
661
|
+
enableClickItemScroll: enableClickItemScroll
|
|
607
662
|
}, index));
|
|
608
663
|
}
|
|
609
664
|
case 'time':
|
|
610
665
|
{
|
|
666
|
+
const timeA11yLimitFocus = state.a11yTimeLimitColumnId != null ? {
|
|
667
|
+
nonce: state.a11yTimeLimitNonce,
|
|
668
|
+
columnId: state.a11yTimeLimitColumnId
|
|
669
|
+
} : null;
|
|
611
670
|
return [/*#__PURE__*/jsx(PickerGroup, {
|
|
612
671
|
mode: "time",
|
|
613
672
|
range: hoursRange,
|
|
@@ -615,16 +674,24 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
615
674
|
columnId: "0",
|
|
616
675
|
selectedIndex: state.selectedIndices[0] // 传递小时列的selectedIndex
|
|
617
676
|
,
|
|
618
|
-
colors: colors
|
|
619
|
-
|
|
677
|
+
colors: colors,
|
|
678
|
+
timeA11yLimitFocus: timeA11yLimitFocus,
|
|
679
|
+
onTimeA11yLimitFocusConsumed: consumeTimeA11yLimitFocus,
|
|
680
|
+
timeA11yLimitEventNonce: state.a11yTimeLimitNonce,
|
|
681
|
+
enableClickItemScroll: enableClickItemScroll
|
|
682
|
+
}, "hour"), /*#__PURE__*/jsx(PickerGroup, {
|
|
620
683
|
mode: "time",
|
|
621
684
|
range: minutesRange,
|
|
622
685
|
updateIndex: updateIndex,
|
|
623
686
|
columnId: "1",
|
|
624
687
|
selectedIndex: state.selectedIndices[1] // 传递分钟列的selectedIndex
|
|
625
688
|
,
|
|
626
|
-
colors: colors
|
|
627
|
-
|
|
689
|
+
colors: colors,
|
|
690
|
+
timeA11yLimitFocus: timeA11yLimitFocus,
|
|
691
|
+
onTimeA11yLimitFocusConsumed: consumeTimeA11yLimitFocus,
|
|
692
|
+
timeA11yLimitEventNonce: state.a11yTimeLimitNonce,
|
|
693
|
+
enableClickItemScroll: enableClickItemScroll
|
|
694
|
+
}, "minute")];
|
|
628
695
|
}
|
|
629
696
|
case 'date':
|
|
630
697
|
{
|
|
@@ -649,7 +716,8 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
649
716
|
columnId: "0",
|
|
650
717
|
selectedIndex: state.selectedIndices[0] // 传递年份列的selectedIndex
|
|
651
718
|
,
|
|
652
|
-
colors: colors
|
|
719
|
+
colors: colors,
|
|
720
|
+
enableClickItemScroll: enableClickItemScroll
|
|
653
721
|
}, `year`)];
|
|
654
722
|
if (fields === 'month' || fields === 'day') {
|
|
655
723
|
renderView.push(/*#__PURE__*/jsx(PickerGroup, {
|
|
@@ -660,7 +728,8 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
660
728
|
columnId: "1",
|
|
661
729
|
selectedIndex: state.selectedIndices[1] // 传递月份列的selectedIndex
|
|
662
730
|
,
|
|
663
|
-
colors: colors
|
|
731
|
+
colors: colors,
|
|
732
|
+
enableClickItemScroll: enableClickItemScroll
|
|
664
733
|
}, `month`));
|
|
665
734
|
}
|
|
666
735
|
if (fields === 'day') {
|
|
@@ -672,7 +741,8 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
672
741
|
columnId: "2",
|
|
673
742
|
selectedIndex: state.selectedIndices[2] // 传递日期列的selectedIndex
|
|
674
743
|
,
|
|
675
|
-
colors: colors
|
|
744
|
+
colors: colors,
|
|
745
|
+
enableClickItemScroll: enableClickItemScroll
|
|
676
746
|
}, `day`));
|
|
677
747
|
}
|
|
678
748
|
return renderView;
|
|
@@ -707,7 +777,8 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
707
777
|
updateIndex: updateIndex,
|
|
708
778
|
columnId: String(i),
|
|
709
779
|
selectedIndex: state.selectedIndices[i],
|
|
710
|
-
colors: colors
|
|
780
|
+
colors: colors,
|
|
781
|
+
enableClickItemScroll: enableClickItemScroll
|
|
711
782
|
}, `region-${i}`));
|
|
712
783
|
}
|
|
713
784
|
return columns;
|
|
@@ -720,10 +791,11 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
720
791
|
columnId: "0",
|
|
721
792
|
selectedIndex: state.selectedIndices[0] // 传递selector模式的selectedIndex
|
|
722
793
|
,
|
|
723
|
-
colors: colors
|
|
794
|
+
colors: colors,
|
|
795
|
+
enableClickItemScroll: enableClickItemScroll
|
|
724
796
|
});
|
|
725
797
|
}
|
|
726
|
-
}, [mode, range, rangeKey, fields, updateIndex, updateDay, handleColumnChange, pickerDateRef.current, level, regionData, state.selectedIndices, columnsCount, lang, colors]);
|
|
798
|
+
}, [mode, range, rangeKey, fields, updateIndex, updateDay, handleColumnChange, pickerDateRef.current, level, regionData, state.selectedIndices, state.a11yTimeLimitColumnId, state.a11yTimeLimitNonce, consumeTimeA11yLimitFocus, columnsCount, lang, colors, enableClickItemScroll]);
|
|
727
799
|
// 动画类名控制逻辑
|
|
728
800
|
const clsMask = classNames('taro-picker__mask-overlay', 'taro-picker__animate-fade-in', {
|
|
729
801
|
'taro-picker__animate-fade-out': state.fadeOut
|
|
@@ -737,6 +809,9 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
737
809
|
const titleStyle = colors.titleColor ? {
|
|
738
810
|
color: colors.titleColor
|
|
739
811
|
} : null;
|
|
812
|
+
const maskOverlayStyle = colors.maskColor ? {
|
|
813
|
+
backgroundColor: colors.maskColor
|
|
814
|
+
} : undefined;
|
|
740
815
|
// 暴露方法给外部
|
|
741
816
|
React__default.useImperativeHandle(ref, () => ({
|
|
742
817
|
showPicker,
|
|
@@ -755,15 +830,14 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
755
830
|
onClick: showPicker,
|
|
756
831
|
children: children
|
|
757
832
|
}), !state.hidden && /*#__PURE__*/jsxs(View, {
|
|
758
|
-
className:
|
|
833
|
+
className: classNames('taro-picker__overlay', `taro-picker__overlay--theme-${theme}`),
|
|
759
834
|
children: [/*#__PURE__*/jsx(View, {
|
|
760
835
|
className: clsMask,
|
|
836
|
+
style: maskOverlayStyle,
|
|
761
837
|
onClick: handleCancel
|
|
762
838
|
}), /*#__PURE__*/jsxs(View, {
|
|
763
839
|
className: clsSlider,
|
|
764
|
-
|
|
765
|
-
style: backgroundStyle
|
|
766
|
-
} : {}),
|
|
840
|
+
style: Object.assign({}, backgroundStyle),
|
|
767
841
|
children: [/*#__PURE__*/jsxs(View, {
|
|
768
842
|
className: "taro-picker__hd",
|
|
769
843
|
...(backgroundStyle ? {
|
|
@@ -796,6 +870,13 @@ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
|
|
|
796
870
|
style: backgroundStyle
|
|
797
871
|
} : {}),
|
|
798
872
|
children: renderPickerGroup
|
|
873
|
+
}), safeAreaBottom > 0 && /*#__PURE__*/jsx(View, {
|
|
874
|
+
className: "taro-picker__bd",
|
|
875
|
+
style: Object.assign(Object.assign({}, backgroundStyle), {
|
|
876
|
+
height: `${safeAreaBottom}px`,
|
|
877
|
+
flex: 'none',
|
|
878
|
+
overflow: 'visible'
|
|
879
|
+
})
|
|
799
880
|
})]
|
|
800
881
|
})]
|
|
801
882
|
})]
|