seeder-resources-view 1.0.0 → 1.0.2

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/index.css CHANGED
@@ -1 +1 @@
1
- .resources-view{background:#313131;flex:1;width:100%}.resources-view .content-container{border-top:1px solid #000;display:flex;height:calc(100vh - 50px)}.resources-view .content-container .directory-tree{position:relative;width:400px}.resources-view .content-container .directory-tree:after{border-right:1px solid #171717;content:"";height:100%;position:absolute;right:0;top:0;width:0}.resources-view .content-container .directory-tree .ant-tree{background-color:#313131}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode{padding-inline:16px;padding-left:0;position:relative}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode:before{bottom:0;content:"";height:auto;inset-inline-end:0;inset-inline-start:0;pointer-events:none;position:absolute;top:0;transition:background-color .2s;z-index:0}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode:hover:before{background:hsla(0,0%,100%,.08)}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode-selected:before,.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode-selected:hover:before{background:#595959}.resources-view .content-container .directory-tree .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected,.resources-view .content-container .directory-tree .ant-tree .ant-tree-node-content-wrapper:hover{background:none}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-node-content-wrapper{display:flex;padding:0 1px}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-title{display:flex;flex:auto}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-icon__customize .anticon-folder,.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-icon__customize .anticon-folder-open{font-size:16px}.resources-view .content-container .folder-contents{display:flex;flex:1;flex-direction:column}.resources-view .content-container .folder-contents .media-grid-container{background:#171717;flex:1;max-height:810px;overflow:auto;padding:36px;padding-block-end:20px;padding-block-start:16px}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar-track-piece{background:#141414}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar{width:6px}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar-thumb{background:#434343;border-radius:2px}.resources-view .content-container .folder-contents .media-grid-container .batch-operations{display:flex;margin-block-end:16px}.resources-view .content-container .folder-contents .media-grid-container .ant-list .ant-row{height:auto}.resources-view .content-container .folder-contents .media-grid-container .ant-list-grid .ant-col>.ant-list-item{border:1px solid #424242;margin-block-end:0;padding:20px}.resources-view .content-container .search-bar{border-bottom:1px solid #171717;height:50px;position:relative}.resources-view .content-container .search-bar .upload-icon{color:#a3a3a3;cursor:pointer;font-size:24px;position:absolute;right:14px}.media-grid-item{cursor:pointer}.media-grid-item .media-grid-checkbox-wrapper{display:flex;justify-content:flex-end;margin-block-end:12px;margin-block-start:-12px;margin-inline-end:-12px}.media-grid-item .media-grid-thumbnail{height:124px;width:100%}.media-grid-item .media-grid-info{margin-block-start:4px;text-align:center}.tree-title{align-items:center;flex:1;justify-content:space-between}.tree-title,.tree-title .tree-node-icons{display:flex}.tree-title .tree-node-icons .px-1{padding-inline:4px}.upload-progress{align-items:center;background:rgba(0,0,0,.65);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0}
1
+ .resources-view{background:#313131;flex:1;width:100%}.resources-view .content-container{border-top:1px solid #000;display:flex;height:calc(100vh - 50px)}.resources-view .content-container .directory-tree{position:relative;width:400px}.resources-view .content-container .directory-tree:after{border-right:1px solid #171717;content:"";height:100%;position:absolute;right:0;top:0;width:0}.resources-view .content-container .directory-tree .ant-tree{background-color:#313131}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode{padding-inline:16px;padding-left:0;position:relative}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode:before{bottom:0;content:"";height:auto;inset-inline-end:0;inset-inline-start:0;pointer-events:none;position:absolute;top:0;transition:background-color .2s;z-index:0}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode:hover:before{background:hsla(0,0%,100%,.08)}.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode-selected:before,.resources-view .content-container .directory-tree .ant-tree .ant-tree-treenode-selected:hover:before{background:#595959}.resources-view .content-container .directory-tree .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected,.resources-view .content-container .directory-tree .ant-tree .ant-tree-node-content-wrapper:hover{background:none}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-node-content-wrapper{display:flex;padding:0 1px}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-title{display:flex;flex:auto}.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-icon__customize .anticon-folder,.resources-view .content-container .directory-tree .ant-tree .ant-tree-list .ant-tree-icon__customize .anticon-folder-open{font-size:16px}.resources-view .content-container .folder-contents{display:flex;flex:1;flex-direction:column}.resources-view .content-container .folder-contents .media-grid-container{background:#171717;flex:1;max-height:810px;overflow:auto;padding:36px;padding-block-end:20px;padding-block-start:16px}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar-track-piece{background:#141414}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar{width:6px}.resources-view .content-container .folder-contents .media-grid-container::-webkit-scrollbar-thumb{background:#434343;border-radius:2px}.resources-view .content-container .folder-contents .media-grid-container .batch-operations{display:flex;margin-block-end:16px}.resources-view .content-container .folder-contents .media-grid-container .ant-list .ant-row{height:auto}.resources-view .content-container .folder-contents .media-grid-container .ant-list-grid .ant-col>.ant-list-item{border:1px solid #424242;margin-block-end:0;padding:20px}.resources-view .content-container .search-bar{border-bottom:1px solid #171717;height:50px;position:relative}.resources-view .content-container .search-bar .search-input{width:320px}.resources-view .content-container .search-bar .upload-icon{color:#a3a3a3;cursor:pointer;font-size:24px;position:absolute;right:14px}.media-grid-item{cursor:pointer}.media-grid-item .media-grid-checkbox-wrapper{display:flex;justify-content:flex-end;margin-block-end:12px;margin-block-start:-12px;margin-inline-end:-12px}.media-grid-item .media-grid-thumbnail{height:124px;width:100%}.media-grid-item .media-grid-info{margin-block-start:4px;text-align:center}.tree-title{align-items:center;flex:1;justify-content:space-between}.tree-title,.tree-title .tree-node-icons{display:flex}.tree-title .tree-node-icons .px-1{padding-inline:4px}.upload-progress{align-items:center;background:rgba(0,0,0,.65);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0}
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- import { memo, useCallback, useState, useEffect, useRef, forwardRef, useContext, createContext, useMemo as useMemo$1 } from 'react';
1
+ import { memo, useMemo, useCallback, useState, useEffect, useRef, forwardRef, useContext, createContext } from 'react';
2
2
  import { Spin, List, Dropdown, Checkbox, Image, Typography, Form, Modal, Button, Cascader, Progress, Popover, Input, Flex, Popconfirm, Empty, ConfigProvider, Tree, App, Space } from 'antd';
3
- import { FolderOpenOutlined, FolderOutlined, ExclamationCircleFilled, CloudUploadOutlined } from '@ant-design/icons';
3
+ import { FolderOpenOutlined, FolderOutlined, ExclamationCircleFilled, SearchOutlined, CloudUploadOutlined } from '@ant-design/icons';
4
4
  import axios from 'axios';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -842,7 +842,7 @@ const useDirectoryTree = _ref => {
842
842
  handleError(error, 'REMOVE FILE');
843
843
  }
844
844
  }, [updateFileContents]);
845
- const MemoizedTree = useMemo$1(() => {
845
+ const MemoizedTree = useMemo(() => {
846
846
  var _treeState$data;
847
847
  if (!((_treeState$data = treeState.data) !== null && _treeState$data !== void 0 && _treeState$data.length)) {
848
848
  return /*#__PURE__*/jsx(Empty, {
@@ -926,7 +926,7 @@ const ResourcesView = _ref => {
926
926
  renderGridHeader,
927
927
  acceptFileTypes = "video/*,.mxf,application/mxf,video/mxf",
928
928
  uploadTimeout = 60 * 60 * 1000,
929
- searchPlaceholder = "Search resources..."
929
+ searchPlaceholder = "Search ..."
930
930
  } = _ref;
931
931
  const {
932
932
  message,
@@ -934,11 +934,11 @@ const ResourcesView = _ref => {
934
934
  } = App.useApp();
935
935
 
936
936
  // 合并默认配置和传入配置
937
- const mergedApiConfig = useMemo$1(() => _objectSpread2({
937
+ const mergedApiConfig = useMemo(() => _objectSpread2({
938
938
  upload: '/api/dvr/media/source/upload',
939
939
  download: '/download'
940
940
  }, apiConfig), [apiConfig]);
941
- const mergedFeatures = useMemo$1(() => _objectSpread2({
941
+ const mergedFeatures = useMemo(() => _objectSpread2({
942
942
  upload: true,
943
943
  download: true,
944
944
  copy: true,
@@ -973,7 +973,7 @@ const ResourcesView = _ref => {
973
973
  const [keyword, setKeyword] = useState('');
974
974
 
975
975
  // 过滤内容
976
- const filteredContents = useMemo$1(() => {
976
+ const filteredContents = useMemo(() => {
977
977
  if (!keyword) return contents;
978
978
  return contents.filter(item => item.name.toLowerCase().includes(keyword.toLowerCase()));
979
979
  }, [contents, keyword]);
@@ -1179,7 +1179,7 @@ const ResourcesView = _ref => {
1179
1179
  };
1180
1180
 
1181
1181
  // 创建 URL 构建器
1182
- const getFullUrl = useMemo$1(() => {
1182
+ const getFullUrl = useMemo(() => {
1183
1183
  return createUrlBuilder({
1184
1184
  baseUrl: apiConfig.baseUrl,
1185
1185
  devBaseUrl: apiConfig.devBaseUrl,
@@ -1203,11 +1203,12 @@ const ResourcesView = _ref => {
1203
1203
  justify: "center",
1204
1204
  align: "center",
1205
1205
  className: "search-bar",
1206
- children: [mergedFeatures.search && /*#__PURE__*/jsx("input", {
1207
- type: "text",
1208
- placeholder: searchPlaceholder,
1206
+ children: [mergedFeatures.search && /*#__PURE__*/jsx(Input, {
1209
1207
  value: keyword,
1210
1208
  onChange: handleSearchChange,
1209
+ placeholder: searchPlaceholder,
1210
+ prefix: /*#__PURE__*/jsx(SearchOutlined, {}),
1211
+ allowClear: true,
1211
1212
  className: "search-input"
1212
1213
  }), mergedFeatures.upload && /*#__PURE__*/jsxs(Fragment, {
1213
1214
  children: [/*#__PURE__*/jsx(CloudUploadOutlined, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/MediaGrid/index.jsx","../src/components/SelectFolderPathModal/index.jsx","../src/components/UploadProgress/index.jsx","../src/components/TreeTitle/EditablePopover.jsx","../src/components/TreeTitle/index.jsx","../src/utils/treeUtils.js","../src/hooks/useDirectoryTree.js","../src/utils/urlBuilder.js","../src/ResourcesView.jsx"],"sourcesContent":["import { Dropdown, Image, List, Typography, Spin, Checkbox } from 'antd';\r\nimport { useCallback, memo } from 'react';\r\n\r\n// 基础菜单项配置\r\nconst BASE_MENU_ITEMS = [\r\n {\r\n label: 'Download',\r\n key: 'download',\r\n featureKey: 'download'\r\n },\r\n {\r\n label: 'Copy',\r\n key: 'copy',\r\n featureKey: 'copy'\r\n },\r\n {\r\n label: 'Delete',\r\n key: 'del',\r\n featureKey: 'delete'\r\n }\r\n];\r\n\r\nconst MediaGridItem = memo(({\r\n item, \r\n onContextMenu, \r\n menuItems = DEFAULT_MENU_ITEMS,\r\n checked,\r\n onSelectChange,\r\n showCheckbox = true,\r\n onClick,\r\n getFullUrl\r\n}) => {\r\n const handleMenuClick = useCallback(\r\n ({ key }) => onContextMenu(key, item),\r\n [item, onContextMenu]\r\n );\r\n\r\n const handleItemClick = useCallback(() => {\r\n onClick?.(item);\r\n }, [item, onClick]);\r\n\r\n const handleCheckboxChange = useCallback((e) => {\r\n e.stopPropagation();\r\n onSelectChange?.(item, e.target.checked);\r\n }, [item, onSelectChange]);\r\n\r\n return (\r\n <Dropdown \r\n menu={{ items: menuItems, onClick: handleMenuClick }} \r\n trigger={['contextMenu']}\r\n disabled={!onContextMenu}\r\n >\r\n <List.Item \r\n className={`media-grid-item ${checked ? 'media-grid-item-selected' : ''}`}\r\n title={item.name}\r\n onClick={handleItemClick}\r\n >\r\n {showCheckbox && (\r\n <div\r\n className=\"media-grid-checkbox-wrapper\" \r\n onClick={e => e.stopPropagation()}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onChange={handleCheckboxChange}\r\n />\r\n </div>\r\n )}\r\n <div className=\"media-grid-thumbnail\">\r\n <Image\r\n width=\"100%\"\r\n height=\"100%\"\r\n src={getFullUrl(item.head_thumbnail)}\r\n preview={false}\r\n />\r\n </div>\r\n <div className=\"media-grid-info\">\r\n <Typography.Text ellipsis>\r\n {item.name}\r\n </Typography.Text>\r\n </div>\r\n </List.Item>\r\n </Dropdown>\r\n );\r\n});\r\n\r\nconst MediaGrid = memo(({ \r\n items = [], \r\n loading = false, \r\n onContextMenu,\r\n selectedKeys = [],\r\n onSelectChange,\r\n menuItems: customMenuItems,\r\n gridConfig = { gutter: 0, column: 6 },\r\n showCheckbox = true,\r\n onClick,\r\n features = {},\r\n getFullUrl\r\n}) => {\r\n // 合并默认 features 和传入的 features\r\n const mergedFeatures = useMemo(() => ({\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n ...features\r\n }), [features]);\r\n\r\n // 根据 features 动态生成 menuItems\r\n const menuItems = useMemo(() => {\r\n // 如果传入了自定义 menuItems,则优先使用\r\n if (customMenuItems) return customMenuItems;\r\n \r\n // 否则根据 features 过滤出可用的菜单项\r\n return BASE_MENU_ITEMS.filter(item => \r\n mergedFeatures[item.featureKey] !== false\r\n );\r\n }, [customMenuItems, mergedFeatures]);\r\n\r\n const renderItem = useCallback(\r\n (item) => (\r\n <MediaGridItem \r\n item={item} \r\n onContextMenu={menuItems.length > 0 ? onContextMenu : null}\r\n menuItems={menuItems}\r\n checked={selectedKeys.includes(item.url)} // 使用url作为唯一标识\r\n onSelectChange={onSelectChange}\r\n showCheckbox={showCheckbox}\r\n onClick={onClick}\r\n getFullUrl={getFullUrl} // 传递 getFullUrl 给子组件\r\n />\r\n ),\r\n [onContextMenu, menuItems, selectedKeys, onSelectChange, showCheckbox, onClick]\r\n );\r\n\r\n return (\r\n <Spin\r\n spinning={loading} \r\n size=\"large\"\r\n >\r\n <List\r\n grid={gridConfig}\r\n dataSource={items}\r\n renderItem={renderItem}\r\n pagination={false}\r\n // locale={{ emptyText: 'No media files found' }}\r\n />\r\n </Spin>\r\n );\r\n});\r\n\r\nexport default MediaGrid;","import { Button, Cascader, Form, Modal, Spin } from \"antd\";\r\nimport { memo, useEffect, useState, useCallback } from \"react\";\r\n\r\nconst SelectFolderPathModal = ({\r\n open, \r\n onClose, \r\n onOk, \r\n directoryTree,\r\n loading: externalLoading,\r\n batchLoading,\r\n title = \"Select Folder Path\",\r\n okText = \"Copy\",\r\n cancelText = \"Cancel\",\r\n placeholder = \"Please select (click arrow to expand)\",\r\n width = 520,\r\n formItemLabel = \"Folder Path\",\r\n showFullPath = false,\r\n disabled = false,\r\n allowClear = true,\r\n expandTrigger = \"hover\"\r\n}) => {\r\n const [form] = Form.useForm();\r\n const [options, setOptions] = useState([]);\r\n const [internalLoading, setInternalLoading] = useState(false);\r\n const [selectedPath, setSelectedPath] = useState([]);\r\n\r\n const loading = externalLoading || internalLoading;\r\n\r\n // 将 directoryTree 转换为 Cascader 需要的 options 格式\r\n const convertToCascaderOptions = useCallback((treeData) => {\r\n if (!treeData || !Array.isArray(treeData)) return [];\r\n\r\n return treeData.map(item => {\r\n if (!item) return null;\r\n\r\n const option = {\r\n value: item.id,\r\n label: item.sd_index || item.name,\r\n isLeaf: !item.contents || item.contents.length === 0,\r\n path: item.path,\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n if (item.contents && Array.isArray(item.contents) && item.contents.length > 0) {\r\n // 递归处理子目录\r\n option.children = convertToCascaderOptions(\r\n item.contents.filter(child => child && child.type === 'directory')\r\n );\r\n }\r\n\r\n return option;\r\n }).filter(Boolean);;\r\n }, []);\r\n\r\n // 初始化 options\r\n useEffect(() => {\r\n if (open && directoryTree) {\r\n setInternalLoading(true);\r\n try {\r\n const formattedOptions = convertToCascaderOptions(directoryTree);\r\n setOptions(formattedOptions);\r\n } catch (error) {\r\n console.error('Error converting directory tree:', error);\r\n } finally {\r\n setInternalLoading(false);\r\n }\r\n }\r\n }, [open, directoryTree, convertToCascaderOptions]);\r\n\r\n // 根据value路径查找对应的节点信息\r\n const getSelectedNodes = useCallback((valuePath, currentOptions, collectedNodes = []) => {\r\n if (!valuePath || valuePath.length === 0 || !currentOptions) return collectedNodes;\r\n \r\n const currentValue = valuePath[0];\r\n const currentNode = currentOptions.find(opt => opt && opt.value === currentValue);\r\n \r\n if (!currentNode) return collectedNodes;\r\n \r\n collectedNodes.push(currentNode);\r\n \r\n if (valuePath.length > 1 && currentNode.children) {\r\n return getSelectedNodes(\r\n valuePath.slice(1), \r\n currentNode.children, \r\n collectedNodes\r\n );\r\n }\r\n \r\n return collectedNodes;\r\n }, []);\r\n\r\n const handleOk = useCallback(() => {\r\n form.validateFields().then(values => {\r\n if (!values.path) {\r\n message.warning('Please select a folder path');\r\n return;\r\n }\r\n\r\n const selectedNodes = getSelectedNodes(values.path, options);\r\n if (selectedNodes.length === 0) {\r\n message.warning('Invalid path selected');\r\n return;\r\n }\r\n\r\n const lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n // 返回完整路径或最后节点路径\r\n const resultPath = showFullPath \r\n ? selectedNodes.map(node => node.path).join('/')\r\n : lastNode.path;\r\n\r\n onOk?.(resultPath);\r\n }).catch(error => {\r\n console.error('Validation failed:', error);\r\n });\r\n }, [form, options, getSelectedNodes, onOk, showFullPath]);\r\n\r\n const handleAfterClose = useCallback(() => {\r\n form.resetFields();\r\n setSelectedPath([]);\r\n }, [form]);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n open={open}\r\n onCancel={onClose}\r\n afterClose={handleAfterClose}\r\n width={width}\r\n destroyOnHidden \r\n footer={[\r\n <Button \r\n key=\"cancel\"\r\n onClick={onClose}\r\n disabled={batchLoading}\r\n >\r\n {cancelText}\r\n </Button>,\r\n <Button \r\n key=\"submit\" \r\n type=\"primary\" \r\n onClick={handleOk}\r\n loading={batchLoading}\r\n disabled={disabled || selectedPath.length === 0}\r\n >\r\n {okText}\r\n </Button>\r\n ]}\r\n >\r\n <Spin spinning={loading}>\r\n <Form form={form}>\r\n <Form.Item name=\"path\" label={formItemLabel}>\r\n <Cascader\r\n options={options}\r\n changeOnSelect\r\n placeholder={placeholder}\r\n style={{ width: '100%' }}\r\n disabled={disabled || loading}\r\n expandTrigger={expandTrigger}\r\n allowClear={allowClear}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </Spin>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default memo(SelectFolderPathModal);","import { Progress } from 'antd';\r\nimport { memo } from 'react';\r\n\r\nconst UploadProgress = ({ percent }) => (\r\n <div className=\"upload-progress\">\r\n <Progress type=\"circle\" percent={percent} />\r\n </div>\r\n);\r\n\r\nexport default memo(UploadProgress);","import { Input, Form, Popover, Button, Flex } from 'antd';\r\nimport { forwardRef, useEffect, useRef, useState, useCallback, memo } from 'react';\r\n\r\nconst PopoverContent = forwardRef(({ onClose, onConfirm }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n const handleConfirm = useCallback(() => {\r\n onConfirm(value, () => setValue(''));\r\n }, [confirm, value]);\r\n\r\n const handleKeyDown = useCallback((e) => {\r\n if (e.key === 'Enter') {\r\n handleConfirm();\r\n }\r\n }, [handleConfirm]);\r\n \r\n return (\r\n <>\r\n <Form.Item\r\n label=\"Folder Name\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n <Input\r\n ref={ref}\r\n value={value} \r\n onChange={(e) => setValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n size=\"small\"\r\n style={{ width: 120 }}\r\n autoFocus\r\n />\r\n </Form.Item>\r\n <Flex justify=\"flex-end\" gap=\"small\">\r\n <Button type=\"default\" size=\"small\" onClick={onClose}>Close</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleConfirm}>OK</Button>\r\n </Flex>\r\n </>\r\n )\r\n})\r\n\r\nconst EditablePopover = ({ children, add }) => {\r\n const inputRef = useRef(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (open && inputRef.current) {\r\n const timer = setTimeout(() => {\r\n inputRef.current?.focus();\r\n }, 100);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [open]);\r\n\r\n // 使用 open 属性控制浮层显示\r\n const hide = useCallback(() => {\r\n setOpen(false);\r\n }, []);\r\n \r\n const handleConfirm = useCallback((newTitle, callback) => {\r\n add(newTitle);\r\n callback?.();\r\n hide();\r\n }, [add, hide]);\r\n\r\n const handleOpenChange = useCallback((newOpen) => {\r\n setOpen(newOpen);\r\n }, []);\r\n\r\n return (\r\n <Popover\r\n content={\r\n <PopoverContent\r\n ref={inputRef}\r\n onClose={hide}\r\n onConfirm={handleConfirm}\r\n />\r\n }\r\n trigger=\"click\"\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n destroyOnHidden\r\n >\r\n {children}\r\n </Popover>\r\n )\r\n}\r\n\r\nexport default memo(EditablePopover);","import { Typography, Popconfirm, Input, Form } from 'antd';\r\nimport { createContext, memo, useContext, useEffect, useRef, useState, useCallback } from 'react';\r\nimport EditablePopover from './EditablePopover';\r\n\r\nconst EditableContext = createContext(null);\r\n\r\nconst TreeTitle = ({ ...props }) => {\r\n const [form] = Form.useForm();\r\n\r\n return (\r\n <Form form={form} component={false}>\r\n <EditableContext.Provider value={form}>\r\n <TreeTitleNode {...props} />\r\n </EditableContext.Provider>\r\n </Form>\r\n );\r\n};\r\n\r\nconst TreeTitleNode = ({\r\n title,\r\n nodeData,\r\n handleSave,\r\n handleDel,\r\n handleAdd\r\n}) => {\r\n const [editing, setEditing] = useState(false);\r\n const inputRef = useRef(null);\r\n const form = useContext(EditableContext);\r\n\r\n useEffect(() => {\r\n if (editing) {\r\n inputRef.current?.focus();\r\n }\r\n }, [editing]);\r\n\r\n const toggleEdit = useCallback(() => {\r\n setEditing(prev => !prev);\r\n form.setFieldsValue({\r\n [nodeData.title]: nodeData.title,\r\n });\r\n }, [form, nodeData.title]);\r\n\r\n const save = useCallback(async () => {\r\n try {\r\n const values = await form.validateFields();\r\n toggleEdit();\r\n handleSave({\r\n ...nodeData,\r\n title: values[nodeData.title]\r\n });\r\n } catch (errInfo) {\r\n console.error('Save failed:', errInfo);\r\n }\r\n }, [form, toggleEdit, handleSave, nodeData]);\r\n\r\n // 新建文件夹 \r\n // 修改文件/文件夹\r\n // 删除文件/文件夹\r\n const renderIconNode = useCallback(() => {\r\n return (\r\n <span className=\"tree-node-icons\" onClick={(e) => e.stopPropagation()}>\r\n <EditablePopover add={(newTitle) => handleAdd(nodeData, newTitle)}>\r\n <div className=\"px-1\" title=\"create\">\r\n <i className=\"iconfont icon-jia\" />\r\n </div>\r\n </EditablePopover>\r\n \r\n {!nodeData.isRoot && (\r\n <>\r\n <div \r\n className=\"px-1\" \r\n onClick={toggleEdit} \r\n title=\"edit\"\r\n >\r\n <i className=\"iconfont icon-bianji\" />\r\n </div>\r\n <Popconfirm\r\n title=\"Confirm deletion?\"\r\n onConfirm={() => handleDel(nodeData)}\r\n okText=\"Yes\"\r\n cancelText=\"No\"\r\n >\r\n <div className=\"px-1\" title=\"delete\">\r\n <i className=\"iconfont icon-jian\" />\r\n </div>\r\n </Popconfirm>\r\n </>\r\n )}\r\n </span>\r\n );\r\n }, [handleAdd, nodeData, title, toggleEdit, handleDel]);\r\n\r\n const renderChildNode = useCallback(() => {\r\n return editing ? (\r\n <Form.Item\r\n style={{ margin: 0, width: \"100%\" }}\r\n name={nodeData.title}\r\n >\r\n <Input \r\n ref={inputRef} \r\n onPressEnter={save} \r\n onBlur={save} \r\n autoComplete=\"off\" \r\n size=\"small\" \r\n />\r\n </Form.Item>\r\n ) : (\r\n <>\r\n <Typography.Text ellipsis style={{width: \"75%\"}}>{title}</Typography.Text>\r\n {renderIconNode()}\r\n </>\r\n );\r\n }, [editing, nodeData.title, save, title, renderIconNode]);\r\n\r\n return (\r\n <div className=\"tree-title\">\r\n {renderChildNode()}\r\n </div>\r\n )\r\n};\r\n\r\nexport default memo(TreeTitle);\r\n","import { FolderOutlined, FolderOpenOutlined } from '@ant-design/icons'\r\n\r\n/**\r\n * 递归转换目录结构为树形结构\r\n * @param {Array} data - 原始数据\r\n * @param {string} [basePath='0'] - 基础路径\r\n * @param {string} [parentRoute] - 父级路由路径\r\n * @returns {Array} 转换后的树形结构\r\n */\r\nexport const buildDirectoryTree = (data, basePath = '0', parentRoute) => {\r\n if (!Array.isArray(data)) return [];\r\n\r\n return data.reduce((acc, item, index) => {\r\n // 跳过文件类型,只处理目录\r\n if (item.type === 'file') return acc;\r\n\r\n const title = parentRoute ? item.name : item.sd_index ?? item.name;\r\n const key = `${basePath}-${index}`; \r\n const currentPath = parentRoute ? `${parentRoute}/${title}` : item.path;\r\n \r\n const treeNode = {\r\n title, // 文件/文件夹名称\r\n key,\r\n icon: ({ expanded }) => expanded ? <FolderOpenOutlined /> : <FolderOutlined />,\r\n children: [],\r\n isLeaf: false,\r\n isRoot: Boolean(item.sd_index),\r\n path: currentPath,\r\n contents: (item.contents || []).filter(content => content.type === 'file'),\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n // 递归处理子目录\r\n if (Array.isArray(item.contents) && item.contents.length > 0) {\r\n treeNode.children = buildDirectoryTree(\r\n item.contents.filter(content => content.type !== 'file'),\r\n key,\r\n currentPath\r\n );\r\n }\r\n\r\n acc.push(treeNode);\r\n return acc;\r\n }, []);\r\n};\r\n\r\n/**\r\n * 查找树中指定key的节点\r\n * @param {Array} treeData - 树数据\r\n * @param {string} targetKey - 要查找的key\r\n * @returns {Array} 包含匹配节点的数组\r\n */\r\nexport const findTreeNode = (treeData, targetKey) => {\r\n if (!Array.isArray(treeData) || typeof targetKey !== 'string') return [];\r\n \r\n const result = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key === targetKey) {\r\n result.push(node);\r\n // 如果只需要第一个匹配项,可以在这里break\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return result;\r\n};\r\n\r\n/**\r\n * 获取树中所有节点的keys\r\n * @param {Array} treeData - 树数据\r\n * @returns {Array} 包含所有节点keys的数组\r\n */\r\nexport const getAllNodeKeys = (treeData) => {\r\n if (!Array.isArray(treeData)) return [];\r\n \r\n const keys = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key != null) {\r\n keys.push(node.key);\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return keys;\r\n};","import { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { Tree, ConfigProvider, Empty } from 'antd';\r\nimport TreeTitle from '../components/TreeTitle';\r\nimport { buildDirectoryTree, findTreeNode, getAllNodeKeys } from '../utils/treeUtils.js';\r\n\r\nconst useDirectoryTree = ({\r\n getFolderData,\r\n createFolder,\r\n removeFolderFile,\r\n renameFolderFile,\r\n height = 760,\r\n theme = { components: { Tree: { titleHeight: 30 } } }\r\n}) => {\r\n const [treeState, setTreeState] = useState({\r\n data: [],\r\n selectedKeys: [],\r\n expandedKeys: [],\r\n currentPath: \"\",\r\n contents: [],\r\n loading: false\r\n });\r\n const [originTreeData, setOriginTreeData] = useState([]);\r\n\r\n const updateTreeState = (partialState) => {\r\n setTreeState(prev => ({ ...prev, ...partialState }));\r\n };\r\n\r\n // 错误处理\r\n const handleError = (error, operation) => {\r\n console.error(`${operation} ERROR`, error);\r\n // 可以添加通知等统一错误处理\r\n };\r\n\r\n // 路径处理工具\r\n const pathUtils = {\r\n getNewPath: (node, newTitle) => {\r\n const arr = node.path.split('/');\r\n arr[arr.length - 1] = newTitle;\r\n return arr.join('/');\r\n },\r\n isSamePath: (path1, path2) => {\r\n return path1 === path2;\r\n }\r\n };\r\n\r\n // 节点查找工具\r\n const nodeUtils = {\r\n findNode: (treeData, key) => {\r\n let result = [];\r\n return findTreeNode(treeData, key, result);\r\n }\r\n };\r\n\r\n // 获取文件夹数据 文件夹名称为空时返回根目录数据\r\n const fetchFolderData = useCallback(async (initialization = false) => {\r\n try {\r\n const data = await getFolderData({ folder: \"\" });\r\n if (!data?.directoryTree) {\r\n return null;\r\n }\r\n\r\n setOriginTreeData(data.directoryTree);\r\n\r\n // 递归生成treenodes\r\n const treeNodes = buildDirectoryTree(data.directoryTree);\r\n\r\n if (!treeNodes.length) {\r\n return null;\r\n }\r\n\r\n const firstChild = treeNodes[0];\r\n const newState = {\r\n data: treeNodes,\r\n ...(initialization && {\r\n selectedKeys: [firstChild?.key],\r\n expandedKeys: getAllNodeKeys(treeNodes),\r\n currentPath: firstChild?.path,\r\n contents: firstChild?.contents || []\r\n })\r\n };\r\n \r\n updateTreeState(newState);\r\n return treeNodes;\r\n } catch (error) {\r\n handleError(error, 'GET FOLDER DATA');\r\n }\r\n }, []);\r\n\r\n // 初始化数据\r\n useEffect(() => {\r\n fetchFolderData(true);\r\n }, [fetchFolderData]);\r\n \r\n // 创建文件夹\r\n const handleCreate = useCallback(async (node, newTitle) => {\r\n if (!newTitle?.trim()) return false;\r\n\r\n try {\r\n const path = `${node.path}/${newTitle}`;\r\n await createFolder({ path });\r\n const newTreeData = await fetchFolderData();\r\n\r\n // 找到新增节点的父节点\r\n const parentNode = nodeUtils.findNode(newTreeData, node.key);\r\n if (parentNode?.[0]?.children) {\r\n const expectedPath = `${node.path}/${newTitle}`;\r\n // 通过 path 找到新增节点,得到新增节点的key\r\n const addedNode = parentNode[0].children.find(ch => \r\n pathUtils.isSamePath(ch.path, expectedPath)\r\n );\r\n if (addedNode) {\r\n updateTreeState({\r\n expandedKeys: [...treeState.expandedKeys, addedNode.key, parentNode[0].key]\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n handleError(error, 'CREATE FOLDER');\r\n }\r\n }, [fetchFolderData, treeState.expandedKeys])\r\n \r\n // 删除文件/文件夹\r\n const handleRemove = useCallback(async (node) => {\r\n if (!node.path) return;\r\n\r\n try {\r\n await removeFolderFile({\r\n paths: [\r\n { path: node.path }\r\n ]\r\n });\r\n // 如果删除的是当前选中节点,则重新初始化\r\n const shouldReinitialize = treeState.selectedKeys[0] === node.key;\r\n await fetchFolderData(shouldReinitialize);\r\n } catch (error) {\r\n handleError(error, 'REMOVE FOLDER/FILE');\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 修改文件/文件夹\r\n const handleRename = useCallback(async (node) => {\r\n const newPath = pathUtils.getNewPath(node, node.title);\r\n if (pathUtils.isSamePath(node.path, newPath)) return false;\r\n\r\n try {\r\n await renameFolderFile({ \r\n old_path: node.path, \r\n new_path: newPath \r\n });\r\n await fetchFolderData();\r\n } catch (error) {\r\n handleError(error, 'RENAME FOLDER/FILE');\r\n }\r\n }, [fetchFolderData])\r\n \r\n // 选择节点\r\n const onSelect = useCallback(async (keys, info) => {\r\n if (!keys.length || (keys[0] === treeState.selectedKeys[0] && \r\n pathUtils.isSamePath(info.node.path, treeState.currentPath))) return;\r\n\r\n updateTreeState({ \r\n selectedKeys: keys,\r\n currentPath: info.node.path,\r\n loading: true \r\n });\r\n\r\n try {\r\n // 模拟延迟加载\r\n // eslint-disable-next-line no-promise-executor-return\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n updateTreeState({\r\n contents: info.node.contents,\r\n loading: false\r\n });\r\n } catch (error) {\r\n handleError(error, 'SELECT NODE');\r\n updateTreeState({ loading: false });\r\n }\r\n }, [treeState.selectedKeys, treeState.currentPath]);\r\n \r\n // 展开节点\r\n const onExpand = useCallback((keys) => {\r\n updateTreeState({ expandedKeys: keys });\r\n }, []);\r\n \r\n // 上传右侧文件或删除右侧文件 成功后的回调函数\r\n const updateFileContents = useCallback(async () => {\r\n // 找到当前选中的节点,更新当前节点的 contents\r\n const newTreeData = await fetchFolderData();\r\n const selectedNode = nodeUtils.findNode(newTreeData, treeState.selectedKeys[0]);\r\n if (selectedNode?.[0]) {\r\n updateTreeState({\r\n contents: selectedNode[0].contents\r\n });\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 删除文件\r\n const removeFile = useCallback(async (url) => {\r\n try {\r\n await removeFolderFile({ path: url });\r\n await updateFileContents();\r\n } catch (error) {\r\n handleError(error, 'REMOVE FILE');\r\n }\r\n }, [updateFileContents]);\r\n\r\n const MemoizedTree = useMemo(() => {\r\n if (!treeState.data?.length) {\r\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\r\n }\r\n\r\n return (\r\n <div key=\"folder-directory\" style={{ paddingTop: 16 }}>\r\n <ConfigProvider theme={theme}>\r\n <Tree\r\n blockNode\r\n showIcon\r\n selectedKeys={treeState.selectedKeys}\r\n expandedKeys={treeState.expandedKeys}\r\n onSelect={onSelect}\r\n onExpand={onExpand}\r\n treeData={treeState.data}\r\n titleRender={(nodeData) => \r\n <TreeTitle\r\n title={nodeData.title}\r\n nodeData={nodeData}\r\n handleSave={handleRename}\r\n handleDel={handleRemove}\r\n handleAdd={handleCreate}\r\n />\r\n }\r\n height={height}\r\n />\r\n </ConfigProvider>\r\n </div>\r\n );\r\n }, [treeState.data, treeState.selectedKeys, treeState.expandedKeys]);\r\n\r\n return {\r\n directoryTree: MemoizedTree,\r\n contents: treeState.contents,\r\n currentPath: treeState.currentPath,\r\n loading: treeState.loading,\r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n };\r\n}\r\n\r\nexport { useDirectoryTree };","export const createUrlBuilder = (config = {}) => {\r\n const {\r\n baseUrl = '',\r\n isDev = false,\r\n devBaseUrl = '',\r\n isBrowser = false\r\n } = config;\r\n\r\n return (path) => {\r\n if (!path) return '';\r\n \r\n // 如果传入的是完整 URL,直接返回\r\n if (/^https?:\\/\\//.test(path)) {\r\n return path;\r\n }\r\n\r\n // 去除 path 开头可能的多余斜杠\r\n const cleanPath = path.replace(/^\\/+/, '');\r\n\r\n // 开发环境使用 devBaseUrl,否则使用 baseUrl\r\n const host = isDev ? devBaseUrl : baseUrl;\r\n \r\n // 如果没有配置 baseUrl,则根据环境返回相对路径或完整路径\r\n if (!host) {\r\n return isBrowser ? `/${cleanPath}` : cleanPath;\r\n }\r\n\r\n return host ? `${host}/${cleanPath}` : `/${cleanPath}`;\r\n };\r\n};","import { useRef, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport { App, Button, Checkbox, Flex, Space } from 'antd';\r\nimport { CloudUploadOutlined, ExclamationCircleFilled } from '@ant-design/icons';\r\nimport axios from 'axios';\r\nimport MediaGrid from './components/MediaGrid';\r\nimport SelectFolderPathModal from './components/SelectFolderPathModal';\r\nimport UploadProgress from './components/UploadProgress';\r\nimport { useDirectoryTree } from './hooks/useDirectoryTree';\r\nimport { createUrlBuilder } from './utils/urlBuilder';\r\nimport \"./style/resources.less\";\r\n\r\nconst ResourcesView = ({\r\n apiConfig = {},\r\n features = {},\r\n className = '',\r\n style = {},\r\n renderTreeHeader,\r\n renderGridHeader,\r\n acceptFileTypes = \"video/*,.mxf,application/mxf,video/mxf\",\r\n uploadTimeout = 60 * 60 * 1000,\r\n searchPlaceholder = \"Search resources...\"\r\n}) => {\r\n const { message, modal } = App.useApp();\r\n\r\n // 合并默认配置和传入配置\r\n const mergedApiConfig = useMemo(() => ({\r\n upload: '/api/dvr/media/source/upload',\r\n download: '/download',\r\n ...apiConfig\r\n }), [apiConfig]);\r\n\r\n const mergedFeatures = useMemo(() => ({\r\n upload: true,\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n search: true,\r\n batchOperations: true,\r\n ...features\r\n }), [features]);\r\n \r\n const {\r\n directoryTree,\r\n contents,\r\n currentPath,\r\n loading, \r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n } = useDirectoryTree({\r\n getFolderData: mergedApiConfig.getFolderData,\r\n createFolder: mergedApiConfig.createFolder,\r\n removeFolderFile: mergedApiConfig.removeFolderFile,\r\n renameFolderFile: mergedApiConfig.renameFolderFile,\r\n });\r\n\r\n const [showProgress, setShowProgress] = useState(false);\r\n const [percent, setPercent] = useState(0);\r\n const inputRef = useRef(null);\r\n const uploadController = useRef(new AbortController());\r\n const [modalVisible, setModalVisible] = useState(false);\r\n // 处理批量操作\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [indeterminate, setIndeterminate] = useState(false);\r\n const [checkAll, setCheckAll] = useState(false);\r\n const [batchLoading, setBatchLoading] = useState(false);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n // 过滤内容\r\n const filteredContents = useMemo(() => {\r\n if (!keyword) return contents;\r\n return contents.filter(item =>\r\n item.name.toLowerCase().includes(keyword.toLowerCase())\r\n );\r\n }, [contents, keyword]);\r\n\r\n // 在组件卸载时取消上传\r\n useEffect(() => {\r\n return () => uploadController.current?.abort();\r\n }, []);\r\n\r\n // 重置批量状态的效果\r\n useEffect(() => {\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n }, [currentPath]);\r\n\r\n // 上传相关函数\r\n const onTriggerUpload = useCallback(() => {\r\n inputRef.current?.click();\r\n }, []);\r\n\r\n const onUploadFile = async (event) => {\r\n const files = event.target.files;\r\n if (!files?.length) return;\r\n \r\n // 初始化上传状态\r\n setShowProgress(true);\r\n setPercent(0);\r\n\r\n try {\r\n await uploadFiles(files, currentPath);\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n await updateFileContents();\r\n } catch (error) {\r\n if (axios.isCancel(error)) {\r\n console.log('Upload canceled');\r\n } else if (error.response) {\r\n console.error(`Upload failed: ${error.response.data?.message || error.response.status}`);\r\n } else {\r\n console.error(`Upload error: ${error.message}`);\r\n }\r\n } finally {\r\n resetUploadState();\r\n }\r\n }\r\n\r\n const uploadFiles = async (files, folder) => {\r\n // 计算所有文件的总大小\r\n const totalSize = calculateTotalSize(files);\r\n // 存储每个文件的上一次 loaded 值(避免重复计算)\r\n const previousLoadedMap = new Map();\r\n let uploadedSize = 0; // 记录已上传的字节数\r\n\r\n const uploadTasks = Array.from(files).map(file => \r\n uploadSingleFile(file, folder, previousLoadedMap, (newLoaded) => {\r\n uploadedSize += newLoaded;\r\n updateProgress(uploadedSize, totalSize);\r\n })\r\n );\r\n\r\n await Promise.all(uploadTasks);\r\n}\r\n\r\n // 计算总文件大小\r\n const calculateTotalSize = (files) => \r\n Array.from(files).reduce((sum, file) => sum + file.size, 0);\r\n\r\n // 上传单个文件\r\n const uploadSingleFile = (file, folder, previousLoadedMap, onProgress) => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('folder', folder);\r\n\r\n return axios.post(mergedApiConfig.upload, formData, {\r\n timeout: uploadTimeout,\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n // signal: uploadController.current.signal,\r\n onUploadProgress: (progressEvent) => {\r\n if (progressEvent.lengthComputable) {\r\n // 获取当前文件的上一次 loaded 值(默认 0)\r\n const previousLoaded = previousLoadedMap.get(file.name) || 0;\r\n // 计算新增的字节数(避免重复累加)\r\n const newLoaded = progressEvent.loaded - previousLoaded;\r\n // 更新当前文件的 loaded 值\r\n previousLoadedMap.set(file.name, progressEvent.loaded);\r\n onProgress(newLoaded);\r\n }\r\n }\r\n })\r\n }\r\n\r\n const updateProgress = (uploadedSize, totalSize) => {\r\n const totalPercent = Math.round((uploadedSize / totalSize) * 100);\r\n setPercent(totalPercent);\r\n };\r\n\r\n // 重置上传状态\r\n const resetUploadState = () => {\r\n setShowProgress(false);\r\n setPercent(0);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n // 文件操作函数\r\n const downloadFile = async(url) => {\r\n try {\r\n const isDev = process.env.NODE_ENV === 'development';\r\n const baseUrl = isDev \r\n ? process.env.API_HOST // 开发环境默认值\r\n : window.location.origin; // 生产环境用当前域名\r\n\r\n const link = document.createElement('a');\r\n link.href = `${baseUrl}${mergedApiConfig.download}/${url}`;\r\n // link.download = filename;\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error(\"Download failed:\", error);\r\n }\r\n }\r\n\r\n const copyFile = () => {\r\n setModalVisible(true);\r\n }\r\n\r\n const onContextMenu = (key, item) => {\r\n if (key === 'del') removeFile(item.url);\r\n if (key === 'download') downloadFile(item.url);\r\n if (key === 'copy') copyFile(item.url);\r\n };\r\n\r\n const handleBatchRemove = useCallback(async () => {\r\n if (!selectedItems.length) return;\r\n \r\n modal.confirm({\r\n icon: <ExclamationCircleFilled />,\r\n title: `Are you sure you want to delete ${selectedItems.length} files?`,\r\n cancelText: \"No\",\r\n okText: \"Yes\",\r\n onOk: async () => {\r\n try {\r\n // 批量处理所有删除请求\r\n await mergedApiConfig.removeFolderFile({\r\n paths: selectedItems.map(itemUrl => ({ path: itemUrl }))\r\n });\r\n \r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n await updateFileContents(); // 刷新文件列表\r\n } catch (error) {\r\n console.error('Batch deletion error:', error);\r\n }\r\n }\r\n });\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n const handleCopyConfirm = useCallback(async (newPath) => {\r\n setBatchLoading(true);\r\n \r\n try {\r\n // 批量处理所有拷贝请求\r\n await mergedApiConfig.copyFile({\r\n old_paths: selectedItems.map(itemUrl => ({ old_path: itemUrl })),\r\n new_path: newPath\r\n });\r\n\r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n message.success('Success');\r\n setModalVisible(false);\r\n\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000)); \r\n await updateFileContents();\r\n } catch (error) {\r\n console.error(\"Batch copy error:\", error);\r\n } finally {\r\n setBatchLoading(false);\r\n }\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n // 处理单个项目的选择变化\r\n const handleSelectChange = (item, checked) => {\r\n const newSelectedItems = checked \r\n ? [...selectedItems, item.url] \r\n : selectedItems.filter(url => url !== item.url);\r\n \r\n setSelectedItems(newSelectedItems);\r\n setIndeterminate(!!newSelectedItems.length && newSelectedItems.length !== filteredContents.length);\r\n setCheckAll(newSelectedItems.length === filteredContents.length);\r\n };\r\n\r\n // 处理全选/取消全选\r\n const handleSelectAll = e => {\r\n const checked = e.target.checked;\r\n setSelectedItems(checked ? filteredContents.map(item => item.url) : []);\r\n setIndeterminate(false);\r\n setCheckAll(checked);\r\n };\r\n\r\n // 搜索处理\r\n const handleSearchChange = (e) => {\r\n setKeyword(e.target.value);\r\n };\r\n\r\n // 创建 URL 构建器\r\n const getFullUrl = useMemo(() => {\r\n return createUrlBuilder({\r\n baseUrl: apiConfig.baseUrl,\r\n devBaseUrl: apiConfig.devBaseUrl,\r\n isDev: process.env.NODE_ENV === 'development',\r\n isBrowser: typeof window !== 'undefined'\r\n });\r\n }, [apiConfig.baseUrl, apiConfig.devBaseUrl]);\r\n\r\n return (\r\n <div className={`resources-view ${className}`} style={style}>\r\n <div className=\"content-container\">\r\n <div className=\"directory-tree\">\r\n {renderTreeHeader ? renderTreeHeader() : (\r\n <div className=\"search-bar\"></div>\r\n )}\r\n {directoryTree}\r\n </div>\r\n <div className=\"folder-contents\">\r\n <Flex justify=\"center\" align=\"center\" className=\"search-bar\">\r\n {mergedFeatures.search && (\r\n <input\r\n type=\"text\"\r\n placeholder={searchPlaceholder}\r\n value={keyword}\r\n onChange={handleSearchChange}\r\n className=\"search-input\"\r\n />\r\n )}\r\n {mergedFeatures.upload && (\r\n <>\r\n <CloudUploadOutlined \r\n className=\"upload-icon\" \r\n title=\"upload\" \r\n onClick={onTriggerUpload} \r\n />\r\n <input\r\n ref={inputRef} \r\n type=\"file\"\r\n onChange={onUploadFile} \r\n className=\"hidden\" \r\n accept={acceptFileTypes}\r\n multiple\r\n />\r\n </>\r\n )}\r\n </Flex>\r\n <div \r\n className=\"media-grid-container\"\r\n onContextMenu={(e) => e.preventDefault()}\r\n >\r\n {renderGridHeader ? renderGridHeader() : (\r\n filteredContents.length > 0 && mergedFeatures.batchOperations && (\r\n <div className=\"batch-operations\">\r\n <Space size=\"middle\">\r\n <Checkbox \r\n indeterminate={indeterminate}\r\n checked={checkAll}\r\n onChange={handleSelectAll}\r\n >\r\n Select All\r\n </Checkbox>\r\n <Button\r\n type=\"primary\"\r\n disabled={!selectedItems.length}\r\n onClick={() => setModalVisible(true)}\r\n >\r\n Batch Copy\r\n </Button>\r\n <Button\r\n className=\"btn-gray\"\r\n disabled={!selectedItems.length}\r\n onClick={handleBatchRemove}\r\n >\r\n Batch Delete\r\n </Button>\r\n </Space>\r\n </div>\r\n )\r\n )}\r\n <MediaGrid\r\n items={filteredContents} \r\n loading={loading} \r\n onContextMenu={mergedFeatures.delete || mergedFeatures.download || mergedFeatures.copy ? onContextMenu : null}\r\n selectedKeys={selectedItems}\r\n onSelectChange={mergedFeatures.batchOperations ? handleSelectChange : null}\r\n onClick={() => {}}\r\n features={mergedFeatures}\r\n getFullUrl={getFullUrl}\r\n />\r\n </div>\r\n </div>\r\n </div> \r\n {showProgress && <UploadProgress percent={percent} />}\r\n <SelectFolderPathModal\r\n open={modalVisible}\r\n directoryTree={originTreeData}\r\n batchLoading={batchLoading}\r\n onClose={() => setModalVisible(false)}\r\n onOk={handleCopyConfirm}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ResourcesView;\r\n"],"names":["BASE_MENU_ITEMS","label","key","featureKey","MediaGridItem","memo","_ref","item","onContextMenu","menuItems","DEFAULT_MENU_ITEMS","checked","onSelectChange","showCheckbox","onClick","getFullUrl","handleMenuClick","useCallback","_ref2","handleItemClick","handleCheckboxChange","e","stopPropagation","target","_jsx","Dropdown","menu","items","trigger","disabled","children","_jsxs","List","Item","className","concat","title","name","Checkbox","onChange","Image","width","height","src","head_thumbnail","preview","Typography","Text","ellipsis","MediaGrid","_ref3","loading","selectedKeys","customMenuItems","gridConfig","gutter","column","features","mergedFeatures","useMemo","_objectSpread","download","copy","delete","filter","renderItem","length","includes","url","Spin","spinning","size","grid","dataSource","pagination","SelectFolderPathModal","open","onClose","onOk","directoryTree","externalLoading","batchLoading","okText","cancelText","placeholder","formItemLabel","showFullPath","allowClear","expandTrigger","form","Form","useForm","options","setOptions","useState","internalLoading","setInternalLoading","selectedPath","setSelectedPath","convertToCascaderOptions","treeData","Array","isArray","map","option","value","id","sd_index","isLeaf","contents","path","rawData","child","type","Boolean","useEffect","formattedOptions","error","console","getSelectedNodes","valuePath","currentOptions","collectedNodes","arguments","undefined","currentValue","currentNode","find","opt","push","slice","handleOk","validateFields","then","values","message","warning","selectedNodes","lastNode","resultPath","node","join","catch","handleAfterClose","resetFields","Modal","onCancel","afterClose","destroyOnHidden","footer","Button","Cascader","changeOnSelect","style","UploadProgress","percent","Progress","PopoverContent","forwardRef","ref","onConfirm","setValue","handleConfirm","confirm","handleKeyDown","_Fragment","marginBottom","Input","onKeyDown","autoFocus","Flex","justify","gap","EditablePopover","add","inputRef","useRef","setOpen","current","timer","setTimeout","_inputRef$current","focus","clearTimeout","hide","newTitle","callback","handleOpenChange","newOpen","Popover","content","onOpenChange","EditableContext","createContext","TreeTitle","props","_extends","_objectDestructuringEmpty","component","Provider","TreeTitleNode","nodeData","handleSave","handleDel","handleAdd","editing","setEditing","useContext","toggleEdit","prev","setFieldsValue","save","errInfo","renderIconNode","isRoot","Popconfirm","renderChildNode","margin","onPressEnter","onBlur","autoComplete","buildDirectoryTree","data","basePath","parentRoute","reduce","acc","index","_item$sd_index","currentPath","treeNode","icon","expanded","FolderOpenOutlined","FolderOutlined","findTreeNode","targetKey","result","stack","pop","getAllNodeKeys","keys","useDirectoryTree","getFolderData","createFolder","removeFolderFile","renameFolderFile","theme","components","Tree","titleHeight","treeState","setTreeState","expandedKeys","originTreeData","setOriginTreeData","updateTreeState","partialState","handleError","operation","pathUtils","getNewPath","arr","split","isSamePath","path1","path2","nodeUtils","findNode","fetchFolderData","initialization","folder","treeNodes","firstChild","newState","handleCreate","trim","_parentNode$","newTreeData","parentNode","expectedPath","addedNode","ch","handleRemove","paths","shouldReinitialize","handleRename","newPath","old_path","new_path","onSelect","info","Promise","resolve","onExpand","updateFileContents","selectedNode","removeFile","MemoizedTree","_treeState$data","Empty","image","PRESENTED_IMAGE_SIMPLE","paddingTop","ConfigProvider","blockNode","showIcon","titleRender","createUrlBuilder","config","baseUrl","isDev","devBaseUrl","isBrowser","test","cleanPath","replace","host","ResourcesView","apiConfig","renderTreeHeader","renderGridHeader","acceptFileTypes","uploadTimeout","searchPlaceholder","modal","App","useApp","mergedApiConfig","upload","search","batchOperations","showProgress","setShowProgress","setPercent","uploadController","AbortController","modalVisible","setModalVisible","selectedItems","setSelectedItems","indeterminate","setIndeterminate","checkAll","setCheckAll","setBatchLoading","keyword","setKeyword","filteredContents","toLowerCase","_uploadController$cur","abort","onTriggerUpload","click","onUploadFile","event","files","uploadFiles","axios","isCancel","log","response","_error$response$data","status","resetUploadState","totalSize","calculateTotalSize","previousLoadedMap","Map","uploadedSize","uploadTasks","from","file","uploadSingleFile","newLoaded","updateProgress","all","sum","onProgress","formData","FormData","append","post","timeout","headers","onUploadProgress","progressEvent","lengthComputable","previousLoaded","get","loaded","set","totalPercent","Math","round","downloadFile","process","env","NODE_ENV","API_HOST","window","location","origin","link","document","createElement","href","display","body","appendChild","removeChild","copyFile","handleBatchRemove","ExclamationCircleFilled","itemUrl","handleCopyConfirm","old_paths","success","handleSelectChange","newSelectedItems","handleSelectAll","handleSearchChange","align","CloudUploadOutlined","accept","multiple","preventDefault","Space"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/MediaGrid/index.jsx","../src/components/SelectFolderPathModal/index.jsx","../src/components/UploadProgress/index.jsx","../src/components/TreeTitle/EditablePopover.jsx","../src/components/TreeTitle/index.jsx","../src/utils/treeUtils.js","../src/hooks/useDirectoryTree.js","../src/utils/urlBuilder.js","../src/ResourcesView.jsx"],"sourcesContent":["import { Dropdown, Image, List, Typography, Spin, Checkbox } from 'antd';\r\nimport { useCallback, memo, useMemo } from 'react';\r\n\r\n// 基础菜单项配置\r\nconst BASE_MENU_ITEMS = [\r\n {\r\n label: 'Download',\r\n key: 'download',\r\n featureKey: 'download'\r\n },\r\n {\r\n label: 'Copy',\r\n key: 'copy',\r\n featureKey: 'copy'\r\n },\r\n {\r\n label: 'Delete',\r\n key: 'del',\r\n featureKey: 'delete'\r\n }\r\n];\r\n\r\nconst MediaGridItem = memo(({\r\n item, \r\n onContextMenu, \r\n menuItems = DEFAULT_MENU_ITEMS,\r\n checked,\r\n onSelectChange,\r\n showCheckbox = true,\r\n onClick,\r\n getFullUrl\r\n}) => {\r\n const handleMenuClick = useCallback(\r\n ({ key }) => onContextMenu(key, item),\r\n [item, onContextMenu]\r\n );\r\n\r\n const handleItemClick = useCallback(() => {\r\n onClick?.(item);\r\n }, [item, onClick]);\r\n\r\n const handleCheckboxChange = useCallback((e) => {\r\n e.stopPropagation();\r\n onSelectChange?.(item, e.target.checked);\r\n }, [item, onSelectChange]);\r\n\r\n return (\r\n <Dropdown \r\n menu={{ items: menuItems, onClick: handleMenuClick }} \r\n trigger={['contextMenu']}\r\n disabled={!onContextMenu}\r\n >\r\n <List.Item \r\n className={`media-grid-item ${checked ? 'media-grid-item-selected' : ''}`}\r\n title={item.name}\r\n onClick={handleItemClick}\r\n >\r\n {showCheckbox && (\r\n <div\r\n className=\"media-grid-checkbox-wrapper\" \r\n onClick={e => e.stopPropagation()}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onChange={handleCheckboxChange}\r\n />\r\n </div>\r\n )}\r\n <div className=\"media-grid-thumbnail\">\r\n <Image\r\n width=\"100%\"\r\n height=\"100%\"\r\n src={getFullUrl(item.head_thumbnail)}\r\n preview={false}\r\n />\r\n </div>\r\n <div className=\"media-grid-info\">\r\n <Typography.Text ellipsis>\r\n {item.name}\r\n </Typography.Text>\r\n </div>\r\n </List.Item>\r\n </Dropdown>\r\n );\r\n});\r\n\r\nconst MediaGrid = memo(({ \r\n items = [], \r\n loading = false, \r\n onContextMenu,\r\n selectedKeys = [],\r\n onSelectChange,\r\n menuItems: customMenuItems,\r\n gridConfig = { gutter: 0, column: 6 },\r\n showCheckbox = true,\r\n onClick,\r\n features = {},\r\n getFullUrl\r\n}) => {\r\n // 合并默认 features 和传入的 features\r\n const mergedFeatures = useMemo(() => ({\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n ...features\r\n }), [features]);\r\n\r\n // 根据 features 动态生成 menuItems\r\n const menuItems = useMemo(() => {\r\n // 如果传入了自定义 menuItems,则优先使用\r\n if (customMenuItems) return customMenuItems;\r\n \r\n // 否则根据 features 过滤出可用的菜单项\r\n return BASE_MENU_ITEMS.filter(item => \r\n mergedFeatures[item.featureKey] !== false\r\n );\r\n }, [customMenuItems, mergedFeatures]);\r\n\r\n const renderItem = useCallback(\r\n (item) => (\r\n <MediaGridItem \r\n item={item} \r\n onContextMenu={menuItems.length > 0 ? onContextMenu : null}\r\n menuItems={menuItems}\r\n checked={selectedKeys.includes(item.url)} // 使用url作为唯一标识\r\n onSelectChange={onSelectChange}\r\n showCheckbox={showCheckbox}\r\n onClick={onClick}\r\n getFullUrl={getFullUrl} // 传递 getFullUrl 给子组件\r\n />\r\n ),\r\n [onContextMenu, menuItems, selectedKeys, onSelectChange, showCheckbox, onClick]\r\n );\r\n\r\n return (\r\n <Spin\r\n spinning={loading} \r\n size=\"large\"\r\n >\r\n <List\r\n grid={gridConfig}\r\n dataSource={items}\r\n renderItem={renderItem}\r\n pagination={false}\r\n // locale={{ emptyText: 'No media files found' }}\r\n />\r\n </Spin>\r\n );\r\n});\r\n\r\nexport default MediaGrid;","import { Button, Cascader, Form, Modal, Spin } from \"antd\";\r\nimport { memo, useEffect, useState, useCallback } from \"react\";\r\n\r\nconst SelectFolderPathModal = ({\r\n open, \r\n onClose, \r\n onOk, \r\n directoryTree,\r\n loading: externalLoading,\r\n batchLoading,\r\n title = \"Select Folder Path\",\r\n okText = \"Copy\",\r\n cancelText = \"Cancel\",\r\n placeholder = \"Please select (click arrow to expand)\",\r\n width = 520,\r\n formItemLabel = \"Folder Path\",\r\n showFullPath = false,\r\n disabled = false,\r\n allowClear = true,\r\n expandTrigger = \"hover\"\r\n}) => {\r\n const [form] = Form.useForm();\r\n const [options, setOptions] = useState([]);\r\n const [internalLoading, setInternalLoading] = useState(false);\r\n const [selectedPath, setSelectedPath] = useState([]);\r\n\r\n const loading = externalLoading || internalLoading;\r\n\r\n // 将 directoryTree 转换为 Cascader 需要的 options 格式\r\n const convertToCascaderOptions = useCallback((treeData) => {\r\n if (!treeData || !Array.isArray(treeData)) return [];\r\n\r\n return treeData.map(item => {\r\n if (!item) return null;\r\n\r\n const option = {\r\n value: item.id,\r\n label: item.sd_index || item.name,\r\n isLeaf: !item.contents || item.contents.length === 0,\r\n path: item.path,\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n if (item.contents && Array.isArray(item.contents) && item.contents.length > 0) {\r\n // 递归处理子目录\r\n option.children = convertToCascaderOptions(\r\n item.contents.filter(child => child && child.type === 'directory')\r\n );\r\n }\r\n\r\n return option;\r\n }).filter(Boolean);;\r\n }, []);\r\n\r\n // 初始化 options\r\n useEffect(() => {\r\n if (open && directoryTree) {\r\n setInternalLoading(true);\r\n try {\r\n const formattedOptions = convertToCascaderOptions(directoryTree);\r\n setOptions(formattedOptions);\r\n } catch (error) {\r\n console.error('Error converting directory tree:', error);\r\n } finally {\r\n setInternalLoading(false);\r\n }\r\n }\r\n }, [open, directoryTree, convertToCascaderOptions]);\r\n\r\n // 根据value路径查找对应的节点信息\r\n const getSelectedNodes = useCallback((valuePath, currentOptions, collectedNodes = []) => {\r\n if (!valuePath || valuePath.length === 0 || !currentOptions) return collectedNodes;\r\n \r\n const currentValue = valuePath[0];\r\n const currentNode = currentOptions.find(opt => opt && opt.value === currentValue);\r\n \r\n if (!currentNode) return collectedNodes;\r\n \r\n collectedNodes.push(currentNode);\r\n \r\n if (valuePath.length > 1 && currentNode.children) {\r\n return getSelectedNodes(\r\n valuePath.slice(1), \r\n currentNode.children, \r\n collectedNodes\r\n );\r\n }\r\n \r\n return collectedNodes;\r\n }, []);\r\n\r\n const handleOk = useCallback(() => {\r\n form.validateFields().then(values => {\r\n if (!values.path) {\r\n message.warning('Please select a folder path');\r\n return;\r\n }\r\n\r\n const selectedNodes = getSelectedNodes(values.path, options);\r\n if (selectedNodes.length === 0) {\r\n message.warning('Invalid path selected');\r\n return;\r\n }\r\n\r\n const lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n // 返回完整路径或最后节点路径\r\n const resultPath = showFullPath \r\n ? selectedNodes.map(node => node.path).join('/')\r\n : lastNode.path;\r\n\r\n onOk?.(resultPath);\r\n }).catch(error => {\r\n console.error('Validation failed:', error);\r\n });\r\n }, [form, options, getSelectedNodes, onOk, showFullPath]);\r\n\r\n const handleAfterClose = useCallback(() => {\r\n form.resetFields();\r\n setSelectedPath([]);\r\n }, [form]);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n open={open}\r\n onCancel={onClose}\r\n afterClose={handleAfterClose}\r\n width={width}\r\n destroyOnHidden \r\n footer={[\r\n <Button \r\n key=\"cancel\"\r\n onClick={onClose}\r\n disabled={batchLoading}\r\n >\r\n {cancelText}\r\n </Button>,\r\n <Button \r\n key=\"submit\" \r\n type=\"primary\" \r\n onClick={handleOk}\r\n loading={batchLoading}\r\n disabled={disabled || selectedPath.length === 0}\r\n >\r\n {okText}\r\n </Button>\r\n ]}\r\n >\r\n <Spin spinning={loading}>\r\n <Form form={form}>\r\n <Form.Item name=\"path\" label={formItemLabel}>\r\n <Cascader\r\n options={options}\r\n changeOnSelect\r\n placeholder={placeholder}\r\n style={{ width: '100%' }}\r\n disabled={disabled || loading}\r\n expandTrigger={expandTrigger}\r\n allowClear={allowClear}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </Spin>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default memo(SelectFolderPathModal);","import { Progress } from 'antd';\r\nimport { memo } from 'react';\r\n\r\nconst UploadProgress = ({ percent }) => (\r\n <div className=\"upload-progress\">\r\n <Progress type=\"circle\" percent={percent} />\r\n </div>\r\n);\r\n\r\nexport default memo(UploadProgress);","import { Input, Form, Popover, Button, Flex } from 'antd';\r\nimport { forwardRef, useEffect, useRef, useState, useCallback, memo } from 'react';\r\n\r\nconst PopoverContent = forwardRef(({ onClose, onConfirm }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n const handleConfirm = useCallback(() => {\r\n onConfirm(value, () => setValue(''));\r\n }, [confirm, value]);\r\n\r\n const handleKeyDown = useCallback((e) => {\r\n if (e.key === 'Enter') {\r\n handleConfirm();\r\n }\r\n }, [handleConfirm]);\r\n \r\n return (\r\n <>\r\n <Form.Item\r\n label=\"Folder Name\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n <Input\r\n ref={ref}\r\n value={value} \r\n onChange={(e) => setValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n size=\"small\"\r\n style={{ width: 120 }}\r\n autoFocus\r\n />\r\n </Form.Item>\r\n <Flex justify=\"flex-end\" gap=\"small\">\r\n <Button type=\"default\" size=\"small\" onClick={onClose}>Close</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleConfirm}>OK</Button>\r\n </Flex>\r\n </>\r\n )\r\n})\r\n\r\nconst EditablePopover = ({ children, add }) => {\r\n const inputRef = useRef(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (open && inputRef.current) {\r\n const timer = setTimeout(() => {\r\n inputRef.current?.focus();\r\n }, 100);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [open]);\r\n\r\n // 使用 open 属性控制浮层显示\r\n const hide = useCallback(() => {\r\n setOpen(false);\r\n }, []);\r\n \r\n const handleConfirm = useCallback((newTitle, callback) => {\r\n add(newTitle);\r\n callback?.();\r\n hide();\r\n }, [add, hide]);\r\n\r\n const handleOpenChange = useCallback((newOpen) => {\r\n setOpen(newOpen);\r\n }, []);\r\n\r\n return (\r\n <Popover\r\n content={\r\n <PopoverContent\r\n ref={inputRef}\r\n onClose={hide}\r\n onConfirm={handleConfirm}\r\n />\r\n }\r\n trigger=\"click\"\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n destroyOnHidden\r\n >\r\n {children}\r\n </Popover>\r\n )\r\n}\r\n\r\nexport default memo(EditablePopover);","import { Typography, Popconfirm, Input, Form } from 'antd';\r\nimport { createContext, memo, useContext, useEffect, useRef, useState, useCallback } from 'react';\r\nimport EditablePopover from './EditablePopover';\r\n\r\nconst EditableContext = createContext(null);\r\n\r\nconst TreeTitle = ({ ...props }) => {\r\n const [form] = Form.useForm();\r\n\r\n return (\r\n <Form form={form} component={false}>\r\n <EditableContext.Provider value={form}>\r\n <TreeTitleNode {...props} />\r\n </EditableContext.Provider>\r\n </Form>\r\n );\r\n};\r\n\r\nconst TreeTitleNode = ({\r\n title,\r\n nodeData,\r\n handleSave,\r\n handleDel,\r\n handleAdd\r\n}) => {\r\n const [editing, setEditing] = useState(false);\r\n const inputRef = useRef(null);\r\n const form = useContext(EditableContext);\r\n\r\n useEffect(() => {\r\n if (editing) {\r\n inputRef.current?.focus();\r\n }\r\n }, [editing]);\r\n\r\n const toggleEdit = useCallback(() => {\r\n setEditing(prev => !prev);\r\n form.setFieldsValue({\r\n [nodeData.title]: nodeData.title,\r\n });\r\n }, [form, nodeData.title]);\r\n\r\n const save = useCallback(async () => {\r\n try {\r\n const values = await form.validateFields();\r\n toggleEdit();\r\n handleSave({\r\n ...nodeData,\r\n title: values[nodeData.title]\r\n });\r\n } catch (errInfo) {\r\n console.error('Save failed:', errInfo);\r\n }\r\n }, [form, toggleEdit, handleSave, nodeData]);\r\n\r\n // 新建文件夹 \r\n // 修改文件/文件夹\r\n // 删除文件/文件夹\r\n const renderIconNode = useCallback(() => {\r\n return (\r\n <span className=\"tree-node-icons\" onClick={(e) => e.stopPropagation()}>\r\n <EditablePopover add={(newTitle) => handleAdd(nodeData, newTitle)}>\r\n <div className=\"px-1\" title=\"create\">\r\n <i className=\"iconfont icon-jia\" />\r\n </div>\r\n </EditablePopover>\r\n \r\n {!nodeData.isRoot && (\r\n <>\r\n <div \r\n className=\"px-1\" \r\n onClick={toggleEdit} \r\n title=\"edit\"\r\n >\r\n <i className=\"iconfont icon-bianji\" />\r\n </div>\r\n <Popconfirm\r\n title=\"Confirm deletion?\"\r\n onConfirm={() => handleDel(nodeData)}\r\n okText=\"Yes\"\r\n cancelText=\"No\"\r\n >\r\n <div className=\"px-1\" title=\"delete\">\r\n <i className=\"iconfont icon-jian\" />\r\n </div>\r\n </Popconfirm>\r\n </>\r\n )}\r\n </span>\r\n );\r\n }, [handleAdd, nodeData, title, toggleEdit, handleDel]);\r\n\r\n const renderChildNode = useCallback(() => {\r\n return editing ? (\r\n <Form.Item\r\n style={{ margin: 0, width: \"100%\" }}\r\n name={nodeData.title}\r\n >\r\n <Input \r\n ref={inputRef} \r\n onPressEnter={save} \r\n onBlur={save} \r\n autoComplete=\"off\" \r\n size=\"small\" \r\n />\r\n </Form.Item>\r\n ) : (\r\n <>\r\n <Typography.Text ellipsis style={{width: \"75%\"}}>{title}</Typography.Text>\r\n {renderIconNode()}\r\n </>\r\n );\r\n }, [editing, nodeData.title, save, title, renderIconNode]);\r\n\r\n return (\r\n <div className=\"tree-title\">\r\n {renderChildNode()}\r\n </div>\r\n )\r\n};\r\n\r\nexport default memo(TreeTitle);\r\n","import { FolderOutlined, FolderOpenOutlined } from '@ant-design/icons'\r\n\r\n/**\r\n * 递归转换目录结构为树形结构\r\n * @param {Array} data - 原始数据\r\n * @param {string} [basePath='0'] - 基础路径\r\n * @param {string} [parentRoute] - 父级路由路径\r\n * @returns {Array} 转换后的树形结构\r\n */\r\nexport const buildDirectoryTree = (data, basePath = '0', parentRoute) => {\r\n if (!Array.isArray(data)) return [];\r\n\r\n return data.reduce((acc, item, index) => {\r\n // 跳过文件类型,只处理目录\r\n if (item.type === 'file') return acc;\r\n\r\n const title = parentRoute ? item.name : item.sd_index ?? item.name;\r\n const key = `${basePath}-${index}`; \r\n const currentPath = parentRoute ? `${parentRoute}/${title}` : item.path;\r\n \r\n const treeNode = {\r\n title, // 文件/文件夹名称\r\n key,\r\n icon: ({ expanded }) => expanded ? <FolderOpenOutlined /> : <FolderOutlined />,\r\n children: [],\r\n isLeaf: false,\r\n isRoot: Boolean(item.sd_index),\r\n path: currentPath,\r\n contents: (item.contents || []).filter(content => content.type === 'file'),\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n // 递归处理子目录\r\n if (Array.isArray(item.contents) && item.contents.length > 0) {\r\n treeNode.children = buildDirectoryTree(\r\n item.contents.filter(content => content.type !== 'file'),\r\n key,\r\n currentPath\r\n );\r\n }\r\n\r\n acc.push(treeNode);\r\n return acc;\r\n }, []);\r\n};\r\n\r\n/**\r\n * 查找树中指定key的节点\r\n * @param {Array} treeData - 树数据\r\n * @param {string} targetKey - 要查找的key\r\n * @returns {Array} 包含匹配节点的数组\r\n */\r\nexport const findTreeNode = (treeData, targetKey) => {\r\n if (!Array.isArray(treeData) || typeof targetKey !== 'string') return [];\r\n \r\n const result = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key === targetKey) {\r\n result.push(node);\r\n // 如果只需要第一个匹配项,可以在这里break\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return result;\r\n};\r\n\r\n/**\r\n * 获取树中所有节点的keys\r\n * @param {Array} treeData - 树数据\r\n * @returns {Array} 包含所有节点keys的数组\r\n */\r\nexport const getAllNodeKeys = (treeData) => {\r\n if (!Array.isArray(treeData)) return [];\r\n \r\n const keys = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key != null) {\r\n keys.push(node.key);\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return keys;\r\n};","import { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { Tree, ConfigProvider, Empty } from 'antd';\r\nimport TreeTitle from '../components/TreeTitle';\r\nimport { buildDirectoryTree, findTreeNode, getAllNodeKeys } from '../utils/treeUtils.js';\r\n\r\nconst useDirectoryTree = ({\r\n getFolderData,\r\n createFolder,\r\n removeFolderFile,\r\n renameFolderFile,\r\n height = 760,\r\n theme = { components: { Tree: { titleHeight: 30 } } }\r\n}) => {\r\n const [treeState, setTreeState] = useState({\r\n data: [],\r\n selectedKeys: [],\r\n expandedKeys: [],\r\n currentPath: \"\",\r\n contents: [],\r\n loading: false\r\n });\r\n const [originTreeData, setOriginTreeData] = useState([]);\r\n\r\n const updateTreeState = (partialState) => {\r\n setTreeState(prev => ({ ...prev, ...partialState }));\r\n };\r\n\r\n // 错误处理\r\n const handleError = (error, operation) => {\r\n console.error(`${operation} ERROR`, error);\r\n // 可以添加通知等统一错误处理\r\n };\r\n\r\n // 路径处理工具\r\n const pathUtils = {\r\n getNewPath: (node, newTitle) => {\r\n const arr = node.path.split('/');\r\n arr[arr.length - 1] = newTitle;\r\n return arr.join('/');\r\n },\r\n isSamePath: (path1, path2) => {\r\n return path1 === path2;\r\n }\r\n };\r\n\r\n // 节点查找工具\r\n const nodeUtils = {\r\n findNode: (treeData, key) => {\r\n let result = [];\r\n return findTreeNode(treeData, key, result);\r\n }\r\n };\r\n\r\n // 获取文件夹数据 文件夹名称为空时返回根目录数据\r\n const fetchFolderData = useCallback(async (initialization = false) => {\r\n try {\r\n const data = await getFolderData({ folder: \"\" });\r\n if (!data?.directoryTree) {\r\n return null;\r\n }\r\n\r\n setOriginTreeData(data.directoryTree);\r\n\r\n // 递归生成treenodes\r\n const treeNodes = buildDirectoryTree(data.directoryTree);\r\n\r\n if (!treeNodes.length) {\r\n return null;\r\n }\r\n\r\n const firstChild = treeNodes[0];\r\n const newState = {\r\n data: treeNodes,\r\n ...(initialization && {\r\n selectedKeys: [firstChild?.key],\r\n expandedKeys: getAllNodeKeys(treeNodes),\r\n currentPath: firstChild?.path,\r\n contents: firstChild?.contents || []\r\n })\r\n };\r\n \r\n updateTreeState(newState);\r\n return treeNodes;\r\n } catch (error) {\r\n handleError(error, 'GET FOLDER DATA');\r\n }\r\n }, []);\r\n\r\n // 初始化数据\r\n useEffect(() => {\r\n fetchFolderData(true);\r\n }, [fetchFolderData]);\r\n \r\n // 创建文件夹\r\n const handleCreate = useCallback(async (node, newTitle) => {\r\n if (!newTitle?.trim()) return false;\r\n\r\n try {\r\n const path = `${node.path}/${newTitle}`;\r\n await createFolder({ path });\r\n const newTreeData = await fetchFolderData();\r\n\r\n // 找到新增节点的父节点\r\n const parentNode = nodeUtils.findNode(newTreeData, node.key);\r\n if (parentNode?.[0]?.children) {\r\n const expectedPath = `${node.path}/${newTitle}`;\r\n // 通过 path 找到新增节点,得到新增节点的key\r\n const addedNode = parentNode[0].children.find(ch => \r\n pathUtils.isSamePath(ch.path, expectedPath)\r\n );\r\n if (addedNode) {\r\n updateTreeState({\r\n expandedKeys: [...treeState.expandedKeys, addedNode.key, parentNode[0].key]\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n handleError(error, 'CREATE FOLDER');\r\n }\r\n }, [fetchFolderData, treeState.expandedKeys])\r\n \r\n // 删除文件/文件夹\r\n const handleRemove = useCallback(async (node) => {\r\n if (!node.path) return;\r\n\r\n try {\r\n await removeFolderFile({\r\n paths: [\r\n { path: node.path }\r\n ]\r\n });\r\n // 如果删除的是当前选中节点,则重新初始化\r\n const shouldReinitialize = treeState.selectedKeys[0] === node.key;\r\n await fetchFolderData(shouldReinitialize);\r\n } catch (error) {\r\n handleError(error, 'REMOVE FOLDER/FILE');\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 修改文件/文件夹\r\n const handleRename = useCallback(async (node) => {\r\n const newPath = pathUtils.getNewPath(node, node.title);\r\n if (pathUtils.isSamePath(node.path, newPath)) return false;\r\n\r\n try {\r\n await renameFolderFile({ \r\n old_path: node.path, \r\n new_path: newPath \r\n });\r\n await fetchFolderData();\r\n } catch (error) {\r\n handleError(error, 'RENAME FOLDER/FILE');\r\n }\r\n }, [fetchFolderData])\r\n \r\n // 选择节点\r\n const onSelect = useCallback(async (keys, info) => {\r\n if (!keys.length || (keys[0] === treeState.selectedKeys[0] && \r\n pathUtils.isSamePath(info.node.path, treeState.currentPath))) return;\r\n\r\n updateTreeState({ \r\n selectedKeys: keys,\r\n currentPath: info.node.path,\r\n loading: true \r\n });\r\n\r\n try {\r\n // 模拟延迟加载\r\n // eslint-disable-next-line no-promise-executor-return\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n updateTreeState({\r\n contents: info.node.contents,\r\n loading: false\r\n });\r\n } catch (error) {\r\n handleError(error, 'SELECT NODE');\r\n updateTreeState({ loading: false });\r\n }\r\n }, [treeState.selectedKeys, treeState.currentPath]);\r\n \r\n // 展开节点\r\n const onExpand = useCallback((keys) => {\r\n updateTreeState({ expandedKeys: keys });\r\n }, []);\r\n \r\n // 上传右侧文件或删除右侧文件 成功后的回调函数\r\n const updateFileContents = useCallback(async () => {\r\n // 找到当前选中的节点,更新当前节点的 contents\r\n const newTreeData = await fetchFolderData();\r\n const selectedNode = nodeUtils.findNode(newTreeData, treeState.selectedKeys[0]);\r\n if (selectedNode?.[0]) {\r\n updateTreeState({\r\n contents: selectedNode[0].contents\r\n });\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 删除文件\r\n const removeFile = useCallback(async (url) => {\r\n try {\r\n await removeFolderFile({ path: url });\r\n await updateFileContents();\r\n } catch (error) {\r\n handleError(error, 'REMOVE FILE');\r\n }\r\n }, [updateFileContents]);\r\n\r\n const MemoizedTree = useMemo(() => {\r\n if (!treeState.data?.length) {\r\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\r\n }\r\n\r\n return (\r\n <div key=\"folder-directory\" style={{ paddingTop: 16 }}>\r\n <ConfigProvider theme={theme}>\r\n <Tree\r\n blockNode\r\n showIcon\r\n selectedKeys={treeState.selectedKeys}\r\n expandedKeys={treeState.expandedKeys}\r\n onSelect={onSelect}\r\n onExpand={onExpand}\r\n treeData={treeState.data}\r\n titleRender={(nodeData) => \r\n <TreeTitle\r\n title={nodeData.title}\r\n nodeData={nodeData}\r\n handleSave={handleRename}\r\n handleDel={handleRemove}\r\n handleAdd={handleCreate}\r\n />\r\n }\r\n height={height}\r\n />\r\n </ConfigProvider>\r\n </div>\r\n );\r\n }, [treeState.data, treeState.selectedKeys, treeState.expandedKeys]);\r\n\r\n return {\r\n directoryTree: MemoizedTree,\r\n contents: treeState.contents,\r\n currentPath: treeState.currentPath,\r\n loading: treeState.loading,\r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n };\r\n}\r\n\r\nexport { useDirectoryTree };","export const createUrlBuilder = (config = {}) => {\r\n const {\r\n baseUrl = '',\r\n isDev = false,\r\n devBaseUrl = '',\r\n isBrowser = false\r\n } = config;\r\n\r\n return (path) => {\r\n if (!path) return '';\r\n \r\n // 如果传入的是完整 URL,直接返回\r\n if (/^https?:\\/\\//.test(path)) {\r\n return path;\r\n }\r\n\r\n // 去除 path 开头可能的多余斜杠\r\n const cleanPath = path.replace(/^\\/+/, '');\r\n\r\n // 开发环境使用 devBaseUrl,否则使用 baseUrl\r\n const host = isDev ? devBaseUrl : baseUrl;\r\n \r\n // 如果没有配置 baseUrl,则根据环境返回相对路径或完整路径\r\n if (!host) {\r\n return isBrowser ? `/${cleanPath}` : cleanPath;\r\n }\r\n\r\n return host ? `${host}/${cleanPath}` : `/${cleanPath}`;\r\n };\r\n};","import { useRef, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport { App, Button, Checkbox, Flex, Space, Input } from 'antd';\r\nimport { CloudUploadOutlined, ExclamationCircleFilled, SearchOutlined } from '@ant-design/icons';\r\nimport axios from 'axios';\r\nimport MediaGrid from './components/MediaGrid';\r\nimport SelectFolderPathModal from './components/SelectFolderPathModal';\r\nimport UploadProgress from './components/UploadProgress';\r\nimport { useDirectoryTree } from './hooks/useDirectoryTree';\r\nimport { createUrlBuilder } from './utils/urlBuilder';\r\nimport \"./style/resources.less\";\r\n\r\nconst ResourcesView = ({\r\n apiConfig = {},\r\n features = {},\r\n className = '',\r\n style = {},\r\n renderTreeHeader,\r\n renderGridHeader,\r\n acceptFileTypes = \"video/*,.mxf,application/mxf,video/mxf\",\r\n uploadTimeout = 60 * 60 * 1000,\r\n searchPlaceholder = \"Search ...\"\r\n}) => {\r\n const { message, modal } = App.useApp();\r\n\r\n // 合并默认配置和传入配置\r\n const mergedApiConfig = useMemo(() => ({\r\n upload: '/api/dvr/media/source/upload',\r\n download: '/download',\r\n ...apiConfig\r\n }), [apiConfig]);\r\n\r\n const mergedFeatures = useMemo(() => ({\r\n upload: true,\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n search: true,\r\n batchOperations: true,\r\n ...features\r\n }), [features]);\r\n \r\n const {\r\n directoryTree,\r\n contents,\r\n currentPath,\r\n loading, \r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n } = useDirectoryTree({\r\n getFolderData: mergedApiConfig.getFolderData,\r\n createFolder: mergedApiConfig.createFolder,\r\n removeFolderFile: mergedApiConfig.removeFolderFile,\r\n renameFolderFile: mergedApiConfig.renameFolderFile,\r\n });\r\n\r\n const [showProgress, setShowProgress] = useState(false);\r\n const [percent, setPercent] = useState(0);\r\n const inputRef = useRef(null);\r\n const uploadController = useRef(new AbortController());\r\n const [modalVisible, setModalVisible] = useState(false);\r\n // 处理批量操作\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [indeterminate, setIndeterminate] = useState(false);\r\n const [checkAll, setCheckAll] = useState(false);\r\n const [batchLoading, setBatchLoading] = useState(false);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n // 过滤内容\r\n const filteredContents = useMemo(() => {\r\n if (!keyword) return contents;\r\n return contents.filter(item =>\r\n item.name.toLowerCase().includes(keyword.toLowerCase())\r\n );\r\n }, [contents, keyword]);\r\n\r\n // 在组件卸载时取消上传\r\n useEffect(() => {\r\n return () => uploadController.current?.abort();\r\n }, []);\r\n\r\n // 重置批量状态的效果\r\n useEffect(() => {\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n }, [currentPath]);\r\n\r\n // 上传相关函数\r\n const onTriggerUpload = useCallback(() => {\r\n inputRef.current?.click();\r\n }, []);\r\n\r\n const onUploadFile = async (event) => {\r\n const files = event.target.files;\r\n if (!files?.length) return;\r\n \r\n // 初始化上传状态\r\n setShowProgress(true);\r\n setPercent(0);\r\n\r\n try {\r\n await uploadFiles(files, currentPath);\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n await updateFileContents();\r\n } catch (error) {\r\n if (axios.isCancel(error)) {\r\n console.log('Upload canceled');\r\n } else if (error.response) {\r\n console.error(`Upload failed: ${error.response.data?.message || error.response.status}`);\r\n } else {\r\n console.error(`Upload error: ${error.message}`);\r\n }\r\n } finally {\r\n resetUploadState();\r\n }\r\n }\r\n\r\n const uploadFiles = async (files, folder) => {\r\n // 计算所有文件的总大小\r\n const totalSize = calculateTotalSize(files);\r\n // 存储每个文件的上一次 loaded 值(避免重复计算)\r\n const previousLoadedMap = new Map();\r\n let uploadedSize = 0; // 记录已上传的字节数\r\n\r\n const uploadTasks = Array.from(files).map(file => \r\n uploadSingleFile(file, folder, previousLoadedMap, (newLoaded) => {\r\n uploadedSize += newLoaded;\r\n updateProgress(uploadedSize, totalSize);\r\n })\r\n );\r\n\r\n await Promise.all(uploadTasks);\r\n}\r\n\r\n // 计算总文件大小\r\n const calculateTotalSize = (files) => \r\n Array.from(files).reduce((sum, file) => sum + file.size, 0);\r\n\r\n // 上传单个文件\r\n const uploadSingleFile = (file, folder, previousLoadedMap, onProgress) => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('folder', folder);\r\n\r\n return axios.post(mergedApiConfig.upload, formData, {\r\n timeout: uploadTimeout,\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n // signal: uploadController.current.signal,\r\n onUploadProgress: (progressEvent) => {\r\n if (progressEvent.lengthComputable) {\r\n // 获取当前文件的上一次 loaded 值(默认 0)\r\n const previousLoaded = previousLoadedMap.get(file.name) || 0;\r\n // 计算新增的字节数(避免重复累加)\r\n const newLoaded = progressEvent.loaded - previousLoaded;\r\n // 更新当前文件的 loaded 值\r\n previousLoadedMap.set(file.name, progressEvent.loaded);\r\n onProgress(newLoaded);\r\n }\r\n }\r\n })\r\n }\r\n\r\n const updateProgress = (uploadedSize, totalSize) => {\r\n const totalPercent = Math.round((uploadedSize / totalSize) * 100);\r\n setPercent(totalPercent);\r\n };\r\n\r\n // 重置上传状态\r\n const resetUploadState = () => {\r\n setShowProgress(false);\r\n setPercent(0);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n // 文件操作函数\r\n const downloadFile = async(url) => {\r\n try {\r\n const isDev = process.env.NODE_ENV === 'development';\r\n const baseUrl = isDev \r\n ? process.env.API_HOST // 开发环境默认值\r\n : window.location.origin; // 生产环境用当前域名\r\n\r\n const link = document.createElement('a');\r\n link.href = `${baseUrl}${mergedApiConfig.download}/${url}`;\r\n // link.download = filename;\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error(\"Download failed:\", error);\r\n }\r\n }\r\n\r\n const copyFile = () => {\r\n setModalVisible(true);\r\n }\r\n\r\n const onContextMenu = (key, item) => {\r\n if (key === 'del') removeFile(item.url);\r\n if (key === 'download') downloadFile(item.url);\r\n if (key === 'copy') copyFile(item.url);\r\n };\r\n\r\n const handleBatchRemove = useCallback(async () => {\r\n if (!selectedItems.length) return;\r\n \r\n modal.confirm({\r\n icon: <ExclamationCircleFilled />,\r\n title: `Are you sure you want to delete ${selectedItems.length} files?`,\r\n cancelText: \"No\",\r\n okText: \"Yes\",\r\n onOk: async () => {\r\n try {\r\n // 批量处理所有删除请求\r\n await mergedApiConfig.removeFolderFile({\r\n paths: selectedItems.map(itemUrl => ({ path: itemUrl }))\r\n });\r\n \r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n await updateFileContents(); // 刷新文件列表\r\n } catch (error) {\r\n console.error('Batch deletion error:', error);\r\n }\r\n }\r\n });\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n const handleCopyConfirm = useCallback(async (newPath) => {\r\n setBatchLoading(true);\r\n \r\n try {\r\n // 批量处理所有拷贝请求\r\n await mergedApiConfig.copyFile({\r\n old_paths: selectedItems.map(itemUrl => ({ old_path: itemUrl })),\r\n new_path: newPath\r\n });\r\n\r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n message.success('Success');\r\n setModalVisible(false);\r\n\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000)); \r\n await updateFileContents();\r\n } catch (error) {\r\n console.error(\"Batch copy error:\", error);\r\n } finally {\r\n setBatchLoading(false);\r\n }\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n // 处理单个项目的选择变化\r\n const handleSelectChange = (item, checked) => {\r\n const newSelectedItems = checked \r\n ? [...selectedItems, item.url] \r\n : selectedItems.filter(url => url !== item.url);\r\n \r\n setSelectedItems(newSelectedItems);\r\n setIndeterminate(!!newSelectedItems.length && newSelectedItems.length !== filteredContents.length);\r\n setCheckAll(newSelectedItems.length === filteredContents.length);\r\n };\r\n\r\n // 处理全选/取消全选\r\n const handleSelectAll = e => {\r\n const checked = e.target.checked;\r\n setSelectedItems(checked ? filteredContents.map(item => item.url) : []);\r\n setIndeterminate(false);\r\n setCheckAll(checked);\r\n };\r\n\r\n // 搜索处理\r\n const handleSearchChange = (e) => {\r\n setKeyword(e.target.value);\r\n };\r\n\r\n // 创建 URL 构建器\r\n const getFullUrl = useMemo(() => {\r\n return createUrlBuilder({\r\n baseUrl: apiConfig.baseUrl,\r\n devBaseUrl: apiConfig.devBaseUrl,\r\n isDev: process.env.NODE_ENV === 'development',\r\n isBrowser: typeof window !== 'undefined'\r\n });\r\n }, [apiConfig.baseUrl, apiConfig.devBaseUrl]);\r\n\r\n return (\r\n <div className={`resources-view ${className}`} style={style}>\r\n <div className=\"content-container\">\r\n <div className=\"directory-tree\">\r\n {renderTreeHeader ? renderTreeHeader() : (\r\n <div className=\"search-bar\"></div>\r\n )}\r\n {directoryTree}\r\n </div>\r\n <div className=\"folder-contents\">\r\n <Flex justify=\"center\" align=\"center\" className=\"search-bar\">\r\n {mergedFeatures.search && (\r\n <Input\r\n value={keyword}\r\n onChange={handleSearchChange}\r\n placeholder={searchPlaceholder}\r\n prefix={<SearchOutlined />}\r\n allowClear\r\n className=\"search-input\"\r\n />\r\n )}\r\n {mergedFeatures.upload && (\r\n <>\r\n <CloudUploadOutlined \r\n className=\"upload-icon\" \r\n title=\"upload\" \r\n onClick={onTriggerUpload} \r\n />\r\n <input\r\n ref={inputRef} \r\n type=\"file\"\r\n onChange={onUploadFile} \r\n className=\"hidden\" \r\n accept={acceptFileTypes}\r\n multiple\r\n />\r\n </>\r\n )}\r\n </Flex>\r\n <div \r\n className=\"media-grid-container\"\r\n onContextMenu={(e) => e.preventDefault()}\r\n >\r\n {renderGridHeader ? renderGridHeader() : (\r\n filteredContents.length > 0 && mergedFeatures.batchOperations && (\r\n <div className=\"batch-operations\">\r\n <Space size=\"middle\">\r\n <Checkbox \r\n indeterminate={indeterminate}\r\n checked={checkAll}\r\n onChange={handleSelectAll}\r\n >\r\n Select All\r\n </Checkbox>\r\n <Button\r\n type=\"primary\"\r\n disabled={!selectedItems.length}\r\n onClick={() => setModalVisible(true)}\r\n >\r\n Batch Copy\r\n </Button>\r\n <Button\r\n className=\"btn-gray\"\r\n disabled={!selectedItems.length}\r\n onClick={handleBatchRemove}\r\n >\r\n Batch Delete\r\n </Button>\r\n </Space>\r\n </div>\r\n )\r\n )}\r\n <MediaGrid\r\n items={filteredContents} \r\n loading={loading} \r\n onContextMenu={mergedFeatures.delete || mergedFeatures.download || mergedFeatures.copy ? onContextMenu : null}\r\n selectedKeys={selectedItems}\r\n onSelectChange={mergedFeatures.batchOperations ? handleSelectChange : null}\r\n onClick={() => {}}\r\n features={mergedFeatures}\r\n getFullUrl={getFullUrl}\r\n />\r\n </div>\r\n </div>\r\n </div> \r\n {showProgress && <UploadProgress percent={percent} />}\r\n <SelectFolderPathModal\r\n open={modalVisible}\r\n directoryTree={originTreeData}\r\n batchLoading={batchLoading}\r\n onClose={() => setModalVisible(false)}\r\n onOk={handleCopyConfirm}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ResourcesView;\r\n"],"names":["BASE_MENU_ITEMS","label","key","featureKey","MediaGridItem","memo","_ref","item","onContextMenu","menuItems","DEFAULT_MENU_ITEMS","checked","onSelectChange","showCheckbox","onClick","getFullUrl","handleMenuClick","useCallback","_ref2","handleItemClick","handleCheckboxChange","e","stopPropagation","target","_jsx","Dropdown","menu","items","trigger","disabled","children","_jsxs","List","Item","className","concat","title","name","Checkbox","onChange","Image","width","height","src","head_thumbnail","preview","Typography","Text","ellipsis","MediaGrid","_ref3","loading","selectedKeys","customMenuItems","gridConfig","gutter","column","features","mergedFeatures","useMemo","_objectSpread","download","copy","delete","filter","renderItem","length","includes","url","Spin","spinning","size","grid","dataSource","pagination","SelectFolderPathModal","open","onClose","onOk","directoryTree","externalLoading","batchLoading","okText","cancelText","placeholder","formItemLabel","showFullPath","allowClear","expandTrigger","form","Form","useForm","options","setOptions","useState","internalLoading","setInternalLoading","selectedPath","setSelectedPath","convertToCascaderOptions","treeData","Array","isArray","map","option","value","id","sd_index","isLeaf","contents","path","rawData","child","type","Boolean","useEffect","formattedOptions","error","console","getSelectedNodes","valuePath","currentOptions","collectedNodes","arguments","undefined","currentValue","currentNode","find","opt","push","slice","handleOk","validateFields","then","values","message","warning","selectedNodes","lastNode","resultPath","node","join","catch","handleAfterClose","resetFields","Modal","onCancel","afterClose","destroyOnHidden","footer","Button","Cascader","changeOnSelect","style","UploadProgress","percent","Progress","PopoverContent","forwardRef","ref","onConfirm","setValue","handleConfirm","confirm","handleKeyDown","_Fragment","marginBottom","Input","onKeyDown","autoFocus","Flex","justify","gap","EditablePopover","add","inputRef","useRef","setOpen","current","timer","setTimeout","_inputRef$current","focus","clearTimeout","hide","newTitle","callback","handleOpenChange","newOpen","Popover","content","onOpenChange","EditableContext","createContext","TreeTitle","props","_extends","_objectDestructuringEmpty","component","Provider","TreeTitleNode","nodeData","handleSave","handleDel","handleAdd","editing","setEditing","useContext","toggleEdit","prev","setFieldsValue","save","errInfo","renderIconNode","isRoot","Popconfirm","renderChildNode","margin","onPressEnter","onBlur","autoComplete","buildDirectoryTree","data","basePath","parentRoute","reduce","acc","index","_item$sd_index","currentPath","treeNode","icon","expanded","FolderOpenOutlined","FolderOutlined","findTreeNode","targetKey","result","stack","pop","getAllNodeKeys","keys","useDirectoryTree","getFolderData","createFolder","removeFolderFile","renameFolderFile","theme","components","Tree","titleHeight","treeState","setTreeState","expandedKeys","originTreeData","setOriginTreeData","updateTreeState","partialState","handleError","operation","pathUtils","getNewPath","arr","split","isSamePath","path1","path2","nodeUtils","findNode","fetchFolderData","initialization","folder","treeNodes","firstChild","newState","handleCreate","trim","_parentNode$","newTreeData","parentNode","expectedPath","addedNode","ch","handleRemove","paths","shouldReinitialize","handleRename","newPath","old_path","new_path","onSelect","info","Promise","resolve","onExpand","updateFileContents","selectedNode","removeFile","MemoizedTree","_treeState$data","Empty","image","PRESENTED_IMAGE_SIMPLE","paddingTop","ConfigProvider","blockNode","showIcon","titleRender","createUrlBuilder","config","baseUrl","isDev","devBaseUrl","isBrowser","test","cleanPath","replace","host","ResourcesView","apiConfig","renderTreeHeader","renderGridHeader","acceptFileTypes","uploadTimeout","searchPlaceholder","modal","App","useApp","mergedApiConfig","upload","search","batchOperations","showProgress","setShowProgress","setPercent","uploadController","AbortController","modalVisible","setModalVisible","selectedItems","setSelectedItems","indeterminate","setIndeterminate","checkAll","setCheckAll","setBatchLoading","keyword","setKeyword","filteredContents","toLowerCase","_uploadController$cur","abort","onTriggerUpload","click","onUploadFile","event","files","uploadFiles","axios","isCancel","log","response","_error$response$data","status","resetUploadState","totalSize","calculateTotalSize","previousLoadedMap","Map","uploadedSize","uploadTasks","from","file","uploadSingleFile","newLoaded","updateProgress","all","sum","onProgress","formData","FormData","append","post","timeout","headers","onUploadProgress","progressEvent","lengthComputable","previousLoaded","get","loaded","set","totalPercent","Math","round","downloadFile","process","env","NODE_ENV","API_HOST","window","location","origin","link","document","createElement","href","display","body","appendChild","removeChild","copyFile","handleBatchRemove","ExclamationCircleFilled","itemUrl","handleCopyConfirm","old_paths","success","handleSelectChange","newSelectedItems","handleSelectAll","handleSearchChange","align","prefix","SearchOutlined","CloudUploadOutlined","accept","multiple","preventDefault","Space"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAMA,eAAe,GAAG,CACtB;AACEC,EAAAA,KAAK,EAAE,UAAU;AACjBC,EAAAA,GAAG,EAAE,UAAU;AACfC,EAAAA,UAAU,EAAE,UAAA;AACd,CAAC,EACD;AACEF,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,GAAG,EAAE,MAAM;AACXC,EAAAA,UAAU,EAAE,MAAA;AACd,CAAC,EACD;AACEF,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,KAAK;AACVC,EAAAA,UAAU,EAAE,QAAA;AACd,CAAC,CACF,CAAA;AAED,MAAMC,aAAa,gBAAGC,IAAI,CAACC,IAAA,IASrB;EAAA,IATsB;IAC1BC,IAAI;IACJC,aAAa;AACbC,IAAAA,SAAS,GAAGC,kBAAkB;IAC9BC,OAAO;IACPC,cAAc;AACdC,IAAAA,YAAY,GAAG,IAAI;IACnBC,OAAO;AACPC,IAAAA,UAAAA;AACF,GAAC,GAAAT,IAAA,CAAA;AACC,EAAA,MAAMU,eAAe,GAAGC,WAAW,CACjCC,KAAA,IAAA;IAAA,IAAC;AAAEhB,MAAAA,GAAAA;AAAI,KAAC,GAAAgB,KAAA,CAAA;AAAA,IAAA,OAAKV,aAAa,CAACN,GAAG,EAAEK,IAAI,CAAC,CAAA;AAAA,GAAA,EACrC,CAACA,IAAI,EAAEC,aAAa,CACtB,CAAC,CAAA;AAED,EAAA,MAAMW,eAAe,GAAGF,WAAW,CAAC,MAAM;AACxCH,IAAAA,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,IAAPA,OAAO,CAAGP,IAAI,CAAC,CAAA;AACjB,GAAC,EAAE,CAACA,IAAI,EAAEO,OAAO,CAAC,CAAC,CAAA;AAEnB,EAAA,MAAMM,oBAAoB,GAAGH,WAAW,CAAEI,CAAC,IAAK;IAC9CA,CAAC,CAACC,eAAe,EAAE,CAAA;AACnBV,IAAAA,cAAc,KAAdA,IAAAA,IAAAA,cAAc,KAAdA,KAAAA,CAAAA,IAAAA,cAAc,CAAGL,IAAI,EAAEc,CAAC,CAACE,MAAM,CAACZ,OAAO,CAAC,CAAA;AAC1C,GAAC,EAAE,CAACJ,IAAI,EAAEK,cAAc,CAAC,CAAC,CAAA;EAE1B,oBACEY,GAAA,CAACC,QAAQ,EAAA;AACPC,IAAAA,IAAI,EAAE;AAAEC,MAAAA,KAAK,EAAElB,SAAS;AAAEK,MAAAA,OAAO,EAAEE,eAAAA;KAAkB;IACrDY,OAAO,EAAE,CAAC,aAAa,CAAE;IACzBC,QAAQ,EAAE,CAACrB,aAAc;AAAAsB,IAAAA,QAAA,eAEzBC,IAAA,CAACC,IAAI,CAACC,IAAI,EAAA;MACRC,SAAS,EAAA,kBAAA,CAAAC,MAAA,CAAqBxB,OAAO,GAAG,0BAA0B,GAAG,EAAE,CAAG;MAC1EyB,KAAK,EAAE7B,IAAI,CAAC8B,IAAK;AACjBvB,MAAAA,OAAO,EAAEK,eAAgB;MAAAW,QAAA,EAAA,CAExBjB,YAAY,iBACXW,GAAA,CAAA,KAAA,EAAA;AACEU,QAAAA,SAAS,EAAC,6BAA6B;AACvCpB,QAAAA,OAAO,EAAEO,CAAC,IAAIA,CAAC,CAACC,eAAe,EAAG;QAAAQ,QAAA,eAElCN,GAAA,CAACc,QAAQ,EAAA;AACP3B,UAAAA,OAAO,EAAEA,OAAQ;AACjB4B,UAAAA,QAAQ,EAAEnB,oBAAAA;SACX,CAAA;OACE,CACN,eACDI,GAAA,CAAA,KAAA,EAAA;AAAKU,QAAAA,SAAS,EAAC,sBAAsB;QAAAJ,QAAA,eACnCN,GAAA,CAACgB,KAAK,EAAA;AACJC,UAAAA,KAAK,EAAC,MAAM;AACZC,UAAAA,MAAM,EAAC,MAAM;AACbC,UAAAA,GAAG,EAAE5B,UAAU,CAACR,IAAI,CAACqC,cAAc,CAAE;AACrCC,UAAAA,OAAO,EAAE,KAAA;SACV,CAAA;OACE,CAAC,eACNrB,GAAA,CAAA,KAAA,EAAA;AAAKU,QAAAA,SAAS,EAAC,iBAAiB;AAAAJ,QAAAA,QAAA,eAC9BN,GAAA,CAACsB,UAAU,CAACC,IAAI,EAAA;UAACC,QAAQ,EAAA,IAAA;UAAAlB,QAAA,EACtBvB,IAAI,CAAC8B,IAAAA;SACS,CAAA;AAAC,OACf,CAAC,CAAA;KACG,CAAA;AAAC,GACJ,CAAC,CAAA;AAEf,CAAC,CAAC,CAAA;AAEF,MAAMY,SAAS,gBAAG5C,IAAI,CAAC6C,KAAA,IAYjB;EAAA,IAZkB;AACtBvB,IAAAA,KAAK,GAAG,EAAE;AACVwB,IAAAA,OAAO,GAAG,KAAK;IACf3C,aAAa;AACb4C,IAAAA,YAAY,GAAG,EAAE;IACjBxC,cAAc;AACdH,IAAAA,SAAS,EAAE4C,eAAe;AAC1BC,IAAAA,UAAU,GAAG;AAAEC,MAAAA,MAAM,EAAE,CAAC;AAAEC,MAAAA,MAAM,EAAE,CAAA;KAAG;AACrC3C,IAAAA,YAAY,GAAG,IAAI;IACnBC,OAAO;IACP2C,QAAQ,GAAG,EAAE;AACb1C,IAAAA,UAAAA;AACF,GAAC,GAAAmC,KAAA,CAAA;AACC;AACA,EAAA,MAAMQ,cAAc,GAAGC,OAAO,CAAC,MAAAC,cAAA,CAAA;AAC7BC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,MAAM,EAAE,IAAA;AAAI,GAAA,EACTN,QAAQ,CACX,EAAE,CAACA,QAAQ,CAAC,CAAC,CAAA;;AAEf;AACA,EAAA,MAAMhD,SAAS,GAAGkD,OAAO,CAAC,MAAM;AAC9B;IACA,IAAIN,eAAe,EAAE,OAAOA,eAAe,CAAA;;AAE3C;AACA,IAAA,OAAOrD,eAAe,CAACgE,MAAM,CAACzD,IAAI,IAChCmD,cAAc,CAACnD,IAAI,CAACJ,UAAU,CAAC,KAAK,KACtC,CAAC,CAAA;AACH,GAAC,EAAE,CAACkD,eAAe,EAAEK,cAAc,CAAC,CAAC,CAAA;EAErC,MAAMO,UAAU,GAAGhD,WAAW,CAC3BV,IAAI,iBACHiB,GAAA,CAACpB,aAAa,EAAA;AACZG,IAAAA,IAAI,EAAEA,IAAK;IACXC,aAAa,EAAEC,SAAS,CAACyD,MAAM,GAAG,CAAC,GAAG1D,aAAa,GAAG,IAAK;AAC3DC,IAAAA,SAAS,EAAEA,SAAU;IACrBE,OAAO,EAAEyC,YAAY,CAACe,QAAQ,CAAC5D,IAAI,CAAC6D,GAAG,CAAE;AAAC;AAC1CxD,IAAAA,cAAc,EAAEA,cAAe;AAC/BC,IAAAA,YAAY,EAAEA,YAAa;AAC3BC,IAAAA,OAAO,EAAEA,OAAQ;IACjBC,UAAU,EAAEA,UAAW;AAAC,GACzB,CACF,EACD,CAACP,aAAa,EAAEC,SAAS,EAAE2C,YAAY,EAAExC,cAAc,EAAEC,YAAY,EAAEC,OAAO,CAChF,CAAC,CAAA;EAED,oBACEU,GAAA,CAAC6C,IAAI,EAAA;AACHC,IAAAA,QAAQ,EAAEnB,OAAQ;AAClBoB,IAAAA,IAAI,EAAC,OAAO;IAAAzC,QAAA,eAEZN,GAAA,CAACQ,IAAI,EAAA;AACHwC,MAAAA,IAAI,EAAElB,UAAW;AACjBmB,MAAAA,UAAU,EAAE9C,KAAM;AAClBsC,MAAAA,UAAU,EAAEA,UAAW;AACvBS,MAAAA,UAAU,EAAE,KAAA;AACZ;KACD,CAAA;AAAC,GACE,CAAC,CAAA;AAEX,CAAC,CAAC,CAAA;AAEF,kBAAezB,SAAS;;ACnJxB,MAAM0B,qBAAqB,GAAGrE,IAAA,IAiBxB;EAAA,IAjByB;IAC7BsE,IAAI;IACJC,OAAO;IACPC,IAAI;IACJC,aAAa;AACb5B,IAAAA,OAAO,EAAE6B,eAAe;IACxBC,YAAY;AACZ7C,IAAAA,KAAK,GAAG,oBAAoB;AAC5B8C,IAAAA,MAAM,GAAG,MAAM;AACfC,IAAAA,UAAU,GAAG,QAAQ;AACrBC,IAAAA,WAAW,GAAG,uCAAuC;AACrD3C,IAAAA,KAAK,GAAG,GAAG;AACX4C,IAAAA,aAAa,GAAG,aAAa;AAC7BC,IAAAA,YAAY,GAAG,KAAK;AACpBzD,IAAAA,QAAQ,GAAG,KAAK;AAChB0D,IAAAA,UAAU,GAAG,IAAI;AACjBC,IAAAA,aAAa,GAAG,OAAA;AAClB,GAAC,GAAAlF,IAAA,CAAA;EACC,MAAM,CAACmF,IAAI,CAAC,GAAGC,IAAI,CAACC,OAAO,EAAE,CAAA;EAC7B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAC,EAAE,CAAC,CAAA;EAC1C,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGF,QAAQ,CAAC,KAAK,CAAC,CAAA;EAC7D,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAGJ,QAAQ,CAAC,EAAE,CAAC,CAAA;AAEpD,EAAA,MAAM3C,OAAO,GAAG6B,eAAe,IAAIe,eAAe,CAAA;;AAElD;AACA,EAAA,MAAMI,wBAAwB,GAAGlF,WAAW,CAAEmF,QAAQ,IAAK;AACzD,IAAA,IAAI,CAACA,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;AAEpD,IAAA,OAAOA,QAAQ,CAACG,GAAG,CAAChG,IAAI,IAAI;AAC1B,MAAA,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI,CAAA;AAEtB,MAAA,MAAMiG,MAAM,GAAG;QACbC,KAAK,EAAElG,IAAI,CAACmG,EAAE;AACdzG,QAAAA,KAAK,EAAEM,IAAI,CAACoG,QAAQ,IAAIpG,IAAI,CAAC8B,IAAI;AACjCuE,QAAAA,MAAM,EAAE,CAACrG,IAAI,CAACsG,QAAQ,IAAItG,IAAI,CAACsG,QAAQ,CAAC3C,MAAM,KAAK,CAAC;QACpD4C,IAAI,EAAEvG,IAAI,CAACuG,IAAI;QACfC,OAAO,EAAExG,IAAI;OACd,CAAA;MAED,IAAIA,IAAI,CAACsG,QAAQ,IAAIR,KAAK,CAACC,OAAO,CAAC/F,IAAI,CAACsG,QAAQ,CAAC,IAAItG,IAAI,CAACsG,QAAQ,CAAC3C,MAAM,GAAG,CAAC,EAAE;AAC7E;QACAsC,MAAM,CAAC1E,QAAQ,GAAGqE,wBAAwB,CACxC5F,IAAI,CAACsG,QAAQ,CAAC7C,MAAM,CAACgD,KAAK,IAAIA,KAAK,IAAIA,KAAK,CAACC,IAAI,KAAK,WAAW,CACnE,CAAC,CAAA;AACH,OAAA;AAEA,MAAA,OAAOT,MAAM,CAAA;AACf,KAAC,CAAC,CAACxC,MAAM,CAACkD,OAAO,CAAC,CAAA;GACnB,EAAE,EAAE,CAAC,CAAA;;AAEN;AACAC,EAAAA,SAAS,CAAC,MAAM;IACd,IAAIvC,IAAI,IAAIG,aAAa,EAAE;MACzBiB,kBAAkB,CAAC,IAAI,CAAC,CAAA;MACxB,IAAI;AACF,QAAA,MAAMoB,gBAAgB,GAAGjB,wBAAwB,CAACpB,aAAa,CAAC,CAAA;QAChEc,UAAU,CAACuB,gBAAgB,CAAC,CAAA;OAC7B,CAAC,OAAOC,KAAK,EAAE;AACdC,QAAAA,OAAO,CAACD,KAAK,CAAC,kCAAkC,EAAEA,KAAK,CAAC,CAAA;AAC1D,OAAC,SAAS;QACRrB,kBAAkB,CAAC,KAAK,CAAC,CAAA;AAC3B,OAAA;AACF,KAAA;GACD,EAAE,CAACpB,IAAI,EAAEG,aAAa,EAAEoB,wBAAwB,CAAC,CAAC,CAAA;;AAEnD;EACA,MAAMoB,gBAAgB,GAAGtG,WAAW,CAAC,UAACuG,SAAS,EAAEC,cAAc,EAA0B;AAAA,IAAA,IAAxBC,cAAc,GAAAC,SAAA,CAAAzD,MAAA,GAAA,CAAA,IAAAyD,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAClF,IAAA,IAAI,CAACH,SAAS,IAAIA,SAAS,CAACtD,MAAM,KAAK,CAAC,IAAI,CAACuD,cAAc,EAAE,OAAOC,cAAc,CAAA;AAElF,IAAA,MAAMG,YAAY,GAAGL,SAAS,CAAC,CAAC,CAAC,CAAA;AACjC,IAAA,MAAMM,WAAW,GAAGL,cAAc,CAACM,IAAI,CAACC,GAAG,IAAIA,GAAG,IAAIA,GAAG,CAACvB,KAAK,KAAKoB,YAAY,CAAC,CAAA;AAEjF,IAAA,IAAI,CAACC,WAAW,EAAE,OAAOJ,cAAc,CAAA;AAEvCA,IAAAA,cAAc,CAACO,IAAI,CAACH,WAAW,CAAC,CAAA;IAEhC,IAAIN,SAAS,CAACtD,MAAM,GAAG,CAAC,IAAI4D,WAAW,CAAChG,QAAQ,EAAE;AAChD,MAAA,OAAOyF,gBAAgB,CACrBC,SAAS,CAACU,KAAK,CAAC,CAAC,CAAC,EAClBJ,WAAW,CAAChG,QAAQ,EACpB4F,cACF,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,OAAOA,cAAc,CAAA;GACtB,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,MAAMS,QAAQ,GAAGlH,WAAW,CAAC,MAAM;IACjCwE,IAAI,CAAC2C,cAAc,EAAE,CAACC,IAAI,CAACC,MAAM,IAAI;AACnC,MAAA,IAAI,CAACA,MAAM,CAACxB,IAAI,EAAE;AAChByB,QAAAA,OAAO,CAACC,OAAO,CAAC,6BAA6B,CAAC,CAAA;AAC9C,QAAA,OAAA;AACF,OAAA;MAEA,MAAMC,aAAa,GAAGlB,gBAAgB,CAACe,MAAM,CAACxB,IAAI,EAAElB,OAAO,CAAC,CAAA;AAC5D,MAAA,IAAI6C,aAAa,CAACvE,MAAM,KAAK,CAAC,EAAE;AAC9BqE,QAAAA,OAAO,CAACC,OAAO,CAAC,uBAAuB,CAAC,CAAA;AACxC,QAAA,OAAA;AACF,OAAA;MAEA,MAAME,QAAQ,GAAGD,aAAa,CAACA,aAAa,CAACvE,MAAM,GAAG,CAAC,CAAC,CAAA;;AAExD;MACA,MAAMyE,UAAU,GAAGrD,YAAY,GAC3BmD,aAAa,CAAClC,GAAG,CAACqC,IAAI,IAAIA,IAAI,CAAC9B,IAAI,CAAC,CAAC+B,IAAI,CAAC,GAAG,CAAC,GAC9CH,QAAQ,CAAC5B,IAAI,CAAA;AAEjBhC,MAAAA,IAAI,aAAJA,IAAI,KAAA,KAAA,CAAA,IAAJA,IAAI,CAAG6D,UAAU,CAAC,CAAA;AACpB,KAAC,CAAC,CAACG,KAAK,CAACzB,KAAK,IAAI;AAChBC,MAAAA,OAAO,CAACD,KAAK,CAAC,oBAAoB,EAAEA,KAAK,CAAC,CAAA;AAC5C,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAAC5B,IAAI,EAAEG,OAAO,EAAE2B,gBAAgB,EAAEzC,IAAI,EAAEQ,YAAY,CAAC,CAAC,CAAA;AAEzD,EAAA,MAAMyD,gBAAgB,GAAG9H,WAAW,CAAC,MAAM;IACzCwE,IAAI,CAACuD,WAAW,EAAE,CAAA;IAClB9C,eAAe,CAAC,EAAE,CAAC,CAAA;AACrB,GAAC,EAAE,CAACT,IAAI,CAAC,CAAC,CAAA;EAEV,oBACEjE,GAAA,CAACyH,KAAK,EAAA;AACJ7G,IAAAA,KAAK,EAAEA,KAAM;AACbwC,IAAAA,IAAI,EAAEA,IAAK;AACXsE,IAAAA,QAAQ,EAAErE,OAAQ;AAClBsE,IAAAA,UAAU,EAAEJ,gBAAiB;AAC7BtG,IAAAA,KAAK,EAAEA,KAAM;IACb2G,eAAe,EAAA,IAAA;AACfC,IAAAA,MAAM,EAAE,cACN7H,GAAA,CAAC8H,MAAM,EAAA;AAELxI,MAAAA,OAAO,EAAE+D,OAAQ;AACjBhD,MAAAA,QAAQ,EAAEoD,YAAa;AAAAnD,MAAAA,QAAA,EAEtBqD,UAAAA;AAAU,KAAA,EAJP,QAKE,CAAC,eACT3D,GAAA,CAAC8H,MAAM,EAAA;AAELrC,MAAAA,IAAI,EAAC,SAAS;AACdnG,MAAAA,OAAO,EAAEqH,QAAS;AAClBhF,MAAAA,OAAO,EAAE8B,YAAa;AACtBpD,MAAAA,QAAQ,EAAEA,QAAQ,IAAIoE,YAAY,CAAC/B,MAAM,KAAK,CAAE;AAAApC,MAAAA,QAAA,EAE/CoD,MAAAA;KANG,EAAA,QAOE,CAAC,CACT;IAAApD,QAAA,eAEFN,GAAA,CAAC6C,IAAI,EAAA;AAACC,MAAAA,QAAQ,EAAEnB,OAAQ;MAAArB,QAAA,eACtBN,GAAA,CAACkE,IAAI,EAAA;AAACD,QAAAA,IAAI,EAAEA,IAAK;AAAA3D,QAAAA,QAAA,eACfN,GAAA,CAACkE,IAAI,CAACzD,IAAI,EAAA;AAACI,UAAAA,IAAI,EAAC,MAAM;AAACpC,UAAAA,KAAK,EAAEoF,aAAc;UAAAvD,QAAA,eAC1CN,GAAA,CAAC+H,QAAQ,EAAA;AACP3D,YAAAA,OAAO,EAAEA,OAAQ;YACjB4D,cAAc,EAAA,IAAA;AACdpE,YAAAA,WAAW,EAAEA,WAAY;AACzBqE,YAAAA,KAAK,EAAE;AAAEhH,cAAAA,KAAK,EAAE,MAAA;aAAS;YACzBZ,QAAQ,EAAEA,QAAQ,IAAIsB,OAAQ;AAC9BqC,YAAAA,aAAa,EAAEA,aAAc;AAC7BD,YAAAA,UAAU,EAAEA,UAAAA;WACb,CAAA;SACQ,CAAA;OACP,CAAA;KACF,CAAA;AAAC,GACF,CAAC,CAAA;AAEZ,CAAC,CAAA;AAED,8BAAelF,aAAAA,IAAI,CAACsE,qBAAqB,CAAC;;ACrK1C,MAAM+E,cAAc,GAAGpJ,IAAA,IAAA;EAAA,IAAC;AAAEqJ,IAAAA,OAAAA;AAAQ,GAAC,GAAArJ,IAAA,CAAA;AAAA,EAAA,oBACjCkB,GAAA,CAAA,KAAA,EAAA;AAAKU,IAAAA,SAAS,EAAC,iBAAiB;IAAAJ,QAAA,eAC9BN,GAAA,CAACoI,QAAQ,EAAA;AAAC3C,MAAAA,IAAI,EAAC,QAAQ;AAAC0C,MAAAA,OAAO,EAAEA,OAAAA;KAAU,CAAA;AAAC,GACzC,CAAC,CAAA;AAAA,CACP,CAAA;AAED,uBAAetJ,aAAAA,IAAI,CAACqJ,cAAc,CAAC;;ACNnC,MAAMG,cAAc,gBAAGC,UAAU,CAAC,CAAAxJ,IAAA,EAAyByJ,GAAG,KAAK;EAAA,IAAhC;IAAElF,OAAO;AAAEmF,IAAAA,SAAAA;AAAU,GAAC,GAAA1J,IAAA,CAAA;EACvD,MAAM,CAACmG,KAAK,EAAEwD,QAAQ,CAAC,GAAGnE,QAAQ,CAAC,EAAE,CAAC,CAAA;AAEtC,EAAA,MAAMoE,aAAa,GAAGjJ,WAAW,CAAC,MAAM;IACtC+I,SAAS,CAACvD,KAAK,EAAE,MAAMwD,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;AACtC,GAAC,EAAE,CAACE,OAAO,EAAE1D,KAAK,CAAC,CAAC,CAAA;AAEpB,EAAA,MAAM2D,aAAa,GAAGnJ,WAAW,CAAEI,CAAC,IAAK;AACvC,IAAA,IAAIA,CAAC,CAACnB,GAAG,KAAK,OAAO,EAAE;AACrBgK,MAAAA,aAAa,EAAE,CAAA;AACjB,KAAA;AACF,GAAC,EAAE,CAACA,aAAa,CAAC,CAAC,CAAA;EAEnB,oBACEnI,IAAA,CAAAsI,QAAA,EAAA;AAAAvI,IAAAA,QAAA,EACEN,cAAAA,GAAA,CAACkE,IAAI,CAACzD,IAAI,EAAA;AACRhC,MAAAA,KAAK,EAAC,aAAa;AACnBwJ,MAAAA,KAAK,EAAE;AAAEa,QAAAA,YAAY,EAAE,CAAA;OAAI;MAAAxI,QAAA,eAE3BN,GAAA,CAAC+I,KAAK,EAAA;AACJR,QAAAA,GAAG,EAAEA,GAAI;AACTtD,QAAAA,KAAK,EAAEA,KAAM;QACblE,QAAQ,EAAGlB,CAAC,IAAK4I,QAAQ,CAAC5I,CAAC,CAACE,MAAM,CAACkF,KAAK,CAAE;AAC1C+D,QAAAA,SAAS,EAAEJ,aAAc;AACzB7F,QAAAA,IAAI,EAAC,OAAO;AACZkF,QAAAA,KAAK,EAAE;AAAEhH,UAAAA,KAAK,EAAE,GAAA;SAAM;QACtBgI,SAAS,EAAA,IAAA;OACV,CAAA;AAAC,KACO,CAAC,eACZ1I,IAAA,CAAC2I,IAAI,EAAA;AAACC,MAAAA,OAAO,EAAC,UAAU;AAACC,MAAAA,GAAG,EAAC,OAAO;MAAA9I,QAAA,EAAA,cAClCN,GAAA,CAAC8H,MAAM,EAAA;AAACrC,QAAAA,IAAI,EAAC,SAAS;AAAC1C,QAAAA,IAAI,EAAC,OAAO;AAACzD,QAAAA,OAAO,EAAE+D,OAAQ;AAAA/C,QAAAA,QAAA,EAAC,OAAA;AAAK,OAAQ,CAAC,eACpEN,GAAA,CAAC8H,MAAM,EAAA;AAACrC,QAAAA,IAAI,EAAC,SAAS;AAAC1C,QAAAA,IAAI,EAAC,OAAO;AAACzD,QAAAA,OAAO,EAAEoJ,aAAc;AAAApI,QAAAA,QAAA,EAAC,IAAA;AAAE,OAAQ,CAAC,CAAA;AAAA,KACnE,CAAC,CAAA;AAAA,GACP,CAAC,CAAA;AAEP,CAAC,CAAC,CAAA;AAEF,MAAM+I,eAAe,GAAG3J,KAAA,IAAuB;EAAA,IAAtB;IAAEY,QAAQ;AAAEgJ,IAAAA,GAAAA;AAAI,GAAC,GAAA5J,KAAA,CAAA;AACxC,EAAA,MAAM6J,QAAQ,GAAGC,MAAM,CAAC,IAAI,CAAC,CAAA;EAC7B,MAAM,CAACpG,IAAI,EAAEqG,OAAO,CAAC,GAAGnF,QAAQ,CAAC,KAAK,CAAC,CAAA;AAEvCqB,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIvC,IAAI,IAAImG,QAAQ,CAACG,OAAO,EAAE;AAC5B,MAAA,MAAMC,KAAK,GAAGC,UAAU,CAAC,MAAM;AAAA,QAAA,IAAAC,iBAAA,CAAA;AAC7B,QAAA,CAAAA,iBAAA,GAAAN,QAAQ,CAACG,OAAO,MAAA,IAAA,IAAAG,iBAAA,KAAA,KAAA,CAAA,IAAhBA,iBAAA,CAAkBC,KAAK,EAAE,CAAA;OAC1B,EAAE,GAAG,CAAC,CAAA;AACP,MAAA,OAAO,MAAMC,YAAY,CAACJ,KAAK,CAAC,CAAA;AAClC,KAAA;AACF,GAAC,EAAE,CAACvG,IAAI,CAAC,CAAC,CAAA;;AAEV;AACA,EAAA,MAAM4G,IAAI,GAAGvK,WAAW,CAAC,MAAM;IAC7BgK,OAAO,CAAC,KAAK,CAAC,CAAA;GACf,EAAE,EAAE,CAAC,CAAA;EAEN,MAAMf,aAAa,GAAGjJ,WAAW,CAAC,CAACwK,QAAQ,EAAEC,QAAQ,KAAK;IACxDZ,GAAG,CAACW,QAAQ,CAAC,CAAA;AACbC,IAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,EAAI,CAAA;AACZF,IAAAA,IAAI,EAAE,CAAA;AACR,GAAC,EAAE,CAACV,GAAG,EAAEU,IAAI,CAAC,CAAC,CAAA;AAEf,EAAA,MAAMG,gBAAgB,GAAG1K,WAAW,CAAE2K,OAAO,IAAK;IAChDX,OAAO,CAACW,OAAO,CAAC,CAAA;GACjB,EAAE,EAAE,CAAC,CAAA;EAEN,oBACEpK,GAAA,CAACqK,OAAO,EAAA;IACNC,OAAO,eACLtK,GAAA,CAACqI,cAAc,EAAA;AACbE,MAAAA,GAAG,EAAEgB,QAAS;AACdlG,MAAAA,OAAO,EAAE2G,IAAK;AACdxB,MAAAA,SAAS,EAAEE,aAAAA;AAAc,KAC1B,CACF;AACDtI,IAAAA,OAAO,EAAC,OAAO;AACfgD,IAAAA,IAAI,EAAEA,IAAK;AACXmH,IAAAA,YAAY,EAAEJ,gBAAiB;IAC/BvC,eAAe,EAAA,IAAA;AAAAtH,IAAAA,QAAA,EAEdA,QAAAA;AAAQ,GACF,CAAC,CAAA;AAEd,CAAC,CAAA;AAED,wBAAezB,aAAAA,IAAI,CAACwK,eAAe,CAAC;;ACnFpC,MAAMmB,eAAe,gBAAGC,aAAa,CAAC,IAAI,CAAC,CAAA;AAE3C,MAAMC,SAAS,GAAG5L,IAAA,IAAkB;EAAA,IAAZ6L,KAAK,GAAAC,QAAA,CAAA,EAAA,GAAAC,yBAAA,CAAA/L,IAAA,GAAAA,IAAA,EAAA,CAAA;EAC3B,MAAM,CAACmF,IAAI,CAAC,GAAGC,IAAI,CAACC,OAAO,EAAE,CAAA;EAE7B,oBACEnE,GAAA,CAACkE,IAAI,EAAA;AAACD,IAAAA,IAAI,EAAEA,IAAK;AAAC6G,IAAAA,SAAS,EAAE,KAAM;AAAAxK,IAAAA,QAAA,eACjCN,GAAA,CAACwK,eAAe,CAACO,QAAQ,EAAA;AAAC9F,MAAAA,KAAK,EAAEhB,IAAK;MAAA3D,QAAA,eACpCN,GAAA,CAACgL,aAAa,EAAA5I,cAAA,CAAA,EAAA,EAAKuI,KAAK,CAAG,CAAA;KACH,CAAA;AAAC,GACvB,CAAC,CAAA;AAEX,CAAC,CAAA;AAED,MAAMK,aAAa,GAAGtL,KAAA,IAMhB;EAAA,IANiB;IACrBkB,KAAK;IACLqK,QAAQ;IACRC,UAAU;IACVC,SAAS;AACTC,IAAAA,SAAAA;AACF,GAAC,GAAA1L,KAAA,CAAA;EACC,MAAM,CAAC2L,OAAO,EAAEC,UAAU,CAAC,GAAGhH,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7C,EAAA,MAAMiF,QAAQ,GAAGC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC7B,EAAA,MAAMvF,IAAI,GAAGsH,UAAU,CAACf,eAAe,CAAC,CAAA;AAExC7E,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI0F,OAAO,EAAE;AAAA,MAAA,IAAAxB,iBAAA,CAAA;AACX,MAAA,CAAAA,iBAAA,GAAAN,QAAQ,CAACG,OAAO,MAAA,IAAA,IAAAG,iBAAA,KAAA,KAAA,CAAA,IAAhBA,iBAAA,CAAkBC,KAAK,EAAE,CAAA;AAC3B,KAAA;AACF,GAAC,EAAE,CAACuB,OAAO,CAAC,CAAC,CAAA;AAEb,EAAA,MAAMG,UAAU,GAAG/L,WAAW,CAAC,MAAM;AACnC6L,IAAAA,UAAU,CAACG,IAAI,IAAI,CAACA,IAAI,CAAC,CAAA;IACzBxH,IAAI,CAACyH,cAAc,CAAC;AAClB,MAAA,CAACT,QAAQ,CAACrK,KAAK,GAAGqK,QAAQ,CAACrK,KAAAA;AAC7B,KAAC,CAAC,CAAA;GACH,EAAE,CAACqD,IAAI,EAAEgH,QAAQ,CAACrK,KAAK,CAAC,CAAC,CAAA;AAE1B,EAAA,MAAM+K,IAAI,GAAGlM,WAAW,CAAC,YAAY;IACnC,IAAI;AACF,MAAA,MAAMqH,MAAM,GAAG,MAAM7C,IAAI,CAAC2C,cAAc,EAAE,CAAA;AAC1C4E,MAAAA,UAAU,EAAE,CAAA;AACZN,MAAAA,UAAU,CAAA9I,cAAA,CAAAA,cAAA,KACL6I,QAAQ,CAAA,EAAA,EAAA,EAAA;AACXrK,QAAAA,KAAK,EAAEkG,MAAM,CAACmE,QAAQ,CAACrK,KAAK,CAAA;AAAC,OAAA,CAC9B,CAAC,CAAA;KACH,CAAC,OAAOgL,OAAO,EAAE;AAChB9F,MAAAA,OAAO,CAACD,KAAK,CAAC,cAAc,EAAE+F,OAAO,CAAC,CAAA;AACxC,KAAA;GACD,EAAE,CAAC3H,IAAI,EAAEuH,UAAU,EAAEN,UAAU,EAAED,QAAQ,CAAC,CAAC,CAAA;;AAE5C;AACA;AACA;AACA,EAAA,MAAMY,cAAc,GAAGpM,WAAW,CAAC,MAAM;AACvC,IAAA,oBACEc,IAAA,CAAA,MAAA,EAAA;AAAMG,MAAAA,SAAS,EAAC,iBAAiB;AAACpB,MAAAA,OAAO,EAAGO,CAAC,IAAKA,CAAC,CAACC,eAAe,EAAG;MAAAQ,QAAA,EAAA,cACpEN,GAAA,CAACqJ,iBAAe,EAAA;QAACC,GAAG,EAAGW,QAAQ,IAAKmB,SAAS,CAACH,QAAQ,EAAEhB,QAAQ,CAAE;AAAA3J,QAAAA,QAAA,eAChEN,GAAA,CAAA,KAAA,EAAA;AAAKU,UAAAA,SAAS,EAAC,MAAM;AAACE,UAAAA,KAAK,EAAC,QAAQ;AAAAN,UAAAA,QAAA,eAClCN,GAAA,CAAA,GAAA,EAAA;AAAGU,YAAAA,SAAS,EAAC,mBAAA;WAAqB,CAAA;SAC/B,CAAA;OACU,CAAC,EAEjB,CAACuK,QAAQ,CAACa,MAAM,iBACfvL,IAAA,CAAAsI,QAAA,EAAA;AAAAvI,QAAAA,QAAA,gBACEN,GAAA,CAAA,KAAA,EAAA;AACEU,UAAAA,SAAS,EAAC,MAAM;AAChBpB,UAAAA,OAAO,EAAEkM,UAAW;AACpB5K,UAAAA,KAAK,EAAC,MAAM;AAAAN,UAAAA,QAAA,eAEZN,GAAA,CAAA,GAAA,EAAA;AAAGU,YAAAA,SAAS,EAAC,sBAAA;WAAwB,CAAA;AAAC,SACnC,CAAC,eACNV,GAAA,CAAC+L,UAAU,EAAA;AACTnL,UAAAA,KAAK,EAAC,mBAAmB;AACzB4H,UAAAA,SAAS,EAAEA,MAAM2C,SAAS,CAACF,QAAQ,CAAE;AACrCvH,UAAAA,MAAM,EAAC,KAAK;AACZC,UAAAA,UAAU,EAAC,IAAI;AAAArD,UAAAA,QAAA,eAEfN,GAAA,CAAA,KAAA,EAAA;AAAKU,YAAAA,SAAS,EAAC,MAAM;AAACE,YAAAA,KAAK,EAAC,QAAQ;AAAAN,YAAAA,QAAA,eAClCN,GAAA,CAAA,GAAA,EAAA;AAAGU,cAAAA,SAAS,EAAC,oBAAA;aAAsB,CAAA;WAChC,CAAA;AAAC,SACI,CAAC,CAAA;AAAA,OACb,CACH,CAAA;AAAA,KACG,CAAC,CAAA;AAEX,GAAC,EAAE,CAAC0K,SAAS,EAAEH,QAAQ,EAAErK,KAAK,EAAE4K,UAAU,EAAEL,SAAS,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAMa,eAAe,GAAGvM,WAAW,CAAC,MAAM;AACxC,IAAA,OAAO4L,OAAO,gBACZrL,GAAA,CAACkE,IAAI,CAACzD,IAAI,EAAA;AACRwH,MAAAA,KAAK,EAAE;AAAEgE,QAAAA,MAAM,EAAE,CAAC;AAAEhL,QAAAA,KAAK,EAAE,MAAA;OAAS;MACpCJ,IAAI,EAAEoK,QAAQ,CAACrK,KAAM;MAAAN,QAAA,eAErBN,GAAA,CAAC+I,KAAK,EAAA;AACJR,QAAAA,GAAG,EAAEgB,QAAS;AACd2C,QAAAA,YAAY,EAAEP,IAAK;AACnBQ,QAAAA,MAAM,EAAER,IAAK;AACbS,QAAAA,YAAY,EAAC,KAAK;AAClBrJ,QAAAA,IAAI,EAAC,OAAA;OACN,CAAA;AAAC,KACO,CAAC,gBAEZxC,IAAA,CAAAsI,QAAA,EAAA;AAAAvI,MAAAA,QAAA,EACEN,cAAAA,GAAA,CAACsB,UAAU,CAACC,IAAI,EAAA;QAACC,QAAQ,EAAA,IAAA;AAACyG,QAAAA,KAAK,EAAE;AAAChH,UAAAA,KAAK,EAAE,KAAA;SAAO;AAAAX,QAAAA,QAAA,EAAEM,KAAAA;AAAK,OAAkB,CAAC,EACzEiL,cAAc,EAAE,CAAA;AAAA,KACjB,CACH,CAAA;AACH,GAAC,EAAE,CAACR,OAAO,EAAEJ,QAAQ,CAACrK,KAAK,EAAE+K,IAAI,EAAE/K,KAAK,EAAEiL,cAAc,CAAC,CAAC,CAAA;AAE1D,EAAA,oBACE7L,GAAA,CAAA,KAAA,EAAA;AAAKU,IAAAA,SAAS,EAAC,YAAY;IAAAJ,QAAA,EACxB0L,eAAe,EAAC;AAAC,GACf,CAAC,CAAA;AAEV,CAAC,CAAA;AAED,kBAAenN,aAAAA,IAAI,CAAC6L,SAAS,CAAC;;AChHvB,MAAM2B,kBAAkB,GAAG,UAACC,IAAI,EAAkC;AAAA,EAAA,IAAhCC,QAAQ,GAAApG,SAAA,CAAAzD,MAAA,GAAA,CAAA,IAAAyD,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,GAAG,CAAA;EAAA,IAAEqG,WAAW,GAAArG,SAAA,CAAAzD,MAAA,GAAAyD,CAAAA,GAAAA,SAAA,MAAAC,SAAA,CAAA;EAClE,IAAI,CAACvB,KAAK,CAACC,OAAO,CAACwH,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;EAEnC,OAAOA,IAAI,CAACG,MAAM,CAAC,CAACC,GAAG,EAAE3N,IAAI,EAAE4N,KAAK,KAAK;AAAA,IAAA,IAAAC,cAAA,CAAA;AACvC;AACA,IAAA,IAAI7N,IAAI,CAAC0G,IAAI,KAAK,MAAM,EAAE,OAAOiH,GAAG,CAAA;IAEpC,MAAM9L,KAAK,GAAG4L,WAAW,GAAGzN,IAAI,CAAC8B,IAAI,IAAA+L,cAAA,GAAG7N,IAAI,CAACoG,QAAQ,cAAAyH,cAAA,KAAA,KAAA,CAAA,GAAAA,cAAA,GAAI7N,IAAI,CAAC8B,IAAI,CAAA;IAClE,MAAMnC,GAAG,MAAAiC,MAAA,CAAM4L,QAAQ,EAAA5L,GAAAA,CAAAA,CAAAA,MAAA,CAAIgM,KAAK,CAAE,CAAA;AAClC,IAAA,MAAME,WAAW,GAAGL,WAAW,GAAA,EAAA,CAAA7L,MAAA,CAAM6L,WAAW,EAAA7L,GAAAA,CAAAA,CAAAA,MAAA,CAAIC,KAAK,CAAK7B,GAAAA,IAAI,CAACuG,IAAI,CAAA;AAEvE,IAAA,MAAMwH,QAAQ,GAAG;MACflM,KAAK;AAAE;MACPlC,GAAG;AACHqO,MAAAA,IAAI,EAAEjO,IAAA,IAAA;QAAA,IAAC;AAAEkO,UAAAA,QAAAA;AAAS,SAAC,GAAAlO,IAAA,CAAA;AAAA,QAAA,OAAKkO,QAAQ,gBAAGhN,GAAA,CAACiN,kBAAkB,EAAA,EAAE,CAAC,gBAAGjN,GAAA,CAACkN,cAAc,EAAA,EAAE,CAAC,CAAA;AAAA,OAAA;AAC9E5M,MAAAA,QAAQ,EAAE,EAAE;AACZ8E,MAAAA,MAAM,EAAE,KAAK;AACb0G,MAAAA,MAAM,EAAEpG,OAAO,CAAC3G,IAAI,CAACoG,QAAQ,CAAC;AAC9BG,MAAAA,IAAI,EAAEuH,WAAW;AACjBxH,MAAAA,QAAQ,EAAE,CAACtG,IAAI,CAACsG,QAAQ,IAAI,EAAE,EAAE7C,MAAM,CAAC8H,OAAO,IAAIA,OAAO,CAAC7E,IAAI,KAAK,MAAM,CAAC;MAC1EF,OAAO,EAAExG,IAAI;KACd,CAAA;;AAED;AACA,IAAA,IAAI8F,KAAK,CAACC,OAAO,CAAC/F,IAAI,CAACsG,QAAQ,CAAC,IAAItG,IAAI,CAACsG,QAAQ,CAAC3C,MAAM,GAAG,CAAC,EAAE;MAC5DoK,QAAQ,CAACxM,QAAQ,GAAG+L,kBAAkB,CACpCtN,IAAI,CAACsG,QAAQ,CAAC7C,MAAM,CAAC8H,OAAO,IAAIA,OAAO,CAAC7E,IAAI,KAAK,MAAM,CAAC,EACxD/G,GAAG,EACHmO,WACF,CAAC,CAAA;AACH,KAAA;AAEAH,IAAAA,GAAG,CAACjG,IAAI,CAACqG,QAAQ,CAAC,CAAA;AAClB,IAAA,OAAOJ,GAAG,CAAA;GACX,EAAE,EAAE,CAAC,CAAA;AACR,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,MAAMS,YAAY,GAAGA,CAACvI,QAAQ,EAAEwI,SAAS,KAAK;AACnD,EAAA,IAAI,CAACvI,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,IAAI,OAAOwI,SAAS,KAAK,QAAQ,EAAE,OAAO,EAAE,CAAA;EAExE,MAAMC,MAAM,GAAG,EAAE,CAAA;AACjB,EAAA,MAAMC,KAAK,GAAG,CAAC,GAAG1I,QAAQ,CAAC,CAAA;EAE3B,OAAO0I,KAAK,CAAC5K,MAAM,EAAE;AACnB,IAAA,MAAM0E,IAAI,GAAGkG,KAAK,CAACC,GAAG,EAAE,CAAA;AACxB,IAAA,IAAInG,IAAI,CAAC1I,GAAG,KAAK0O,SAAS,EAAE;AAC1BC,MAAAA,MAAM,CAAC5G,IAAI,CAACW,IAAI,CAAC,CAAA;AACjB;AACF,KAAA;IAEA,IAAIvC,KAAK,CAACC,OAAO,CAACsC,IAAI,CAAC9G,QAAQ,CAAC,EAAE;AAChCgN,MAAAA,KAAK,CAAC7G,IAAI,CAAC,GAAGW,IAAI,CAAC9G,QAAQ,CAAC,CAAA;AAC9B,KAAA;AACF,GAAA;AAEA,EAAA,OAAO+M,MAAM,CAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMG,cAAc,GAAI5I,QAAQ,IAAK;EAC1C,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;EAEvC,MAAM6I,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,MAAMH,KAAK,GAAG,CAAC,GAAG1I,QAAQ,CAAC,CAAA;EAE3B,OAAO0I,KAAK,CAAC5K,MAAM,EAAE;AACnB,IAAA,MAAM0E,IAAI,GAAGkG,KAAK,CAACC,GAAG,EAAE,CAAA;AACxB,IAAA,IAAInG,IAAI,CAAC1I,GAAG,IAAI,IAAI,EAAE;AACpB+O,MAAAA,IAAI,CAAChH,IAAI,CAACW,IAAI,CAAC1I,GAAG,CAAC,CAAA;AACrB,KAAA;IAEA,IAAImG,KAAK,CAACC,OAAO,CAACsC,IAAI,CAAC9G,QAAQ,CAAC,EAAE;AAChCgN,MAAAA,KAAK,CAAC7G,IAAI,CAAC,GAAGW,IAAI,CAAC9G,QAAQ,CAAC,CAAA;AAC9B,KAAA;AACF,GAAA;AAEA,EAAA,OAAOmN,IAAI,CAAA;AACb,CAAC;;AC3FD,MAAMC,gBAAgB,GAAG5O,IAAA,IAOnB;EAAA,IAPoB;IACxB6O,aAAa;IACbC,YAAY;IACZC,gBAAgB;IAChBC,gBAAgB;AAChB5M,IAAAA,MAAM,GAAG,GAAG;AACZ6M,IAAAA,KAAK,GAAG;AAAEC,MAAAA,UAAU,EAAE;AAAEC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,WAAW,EAAE,EAAA;AAAG,SAAA;AAAE,OAAA;AAAE,KAAA;AACtD,GAAC,GAAApP,IAAA,CAAA;AACC,EAAA,MAAM,CAACqP,SAAS,EAAEC,YAAY,CAAC,GAAG9J,QAAQ,CAAC;AACzCgI,IAAAA,IAAI,EAAE,EAAE;AACR1K,IAAAA,YAAY,EAAE,EAAE;AAChByM,IAAAA,YAAY,EAAE,EAAE;AAChBxB,IAAAA,WAAW,EAAE,EAAE;AACfxH,IAAAA,QAAQ,EAAE,EAAE;AACZ1D,IAAAA,OAAO,EAAE,KAAA;AACX,GAAC,CAAC,CAAA;EACF,MAAM,CAAC2M,cAAc,EAAEC,iBAAiB,CAAC,GAAGjK,QAAQ,CAAC,EAAE,CAAC,CAAA;EAExD,MAAMkK,eAAe,GAAIC,YAAY,IAAK;IACxCL,YAAY,CAAC3C,IAAI,IAAArJ,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAUqJ,IAAI,CAAA,EAAKgD,YAAY,CAAG,CAAC,CAAA;GACrD,CAAA;;AAED;AACA,EAAA,MAAMC,WAAW,GAAGA,CAAC7I,KAAK,EAAE8I,SAAS,KAAK;IACxC7I,OAAO,CAACD,KAAK,CAAAlF,EAAAA,CAAAA,MAAA,CAAIgO,SAAS,EAAA,QAAA,CAAA,EAAU9I,KAAK,CAAC,CAAA;AAC1C;GACD,CAAA;;AAED;AACA,EAAA,MAAM+I,SAAS,GAAG;AAChBC,IAAAA,UAAU,EAAEA,CAACzH,IAAI,EAAE6C,QAAQ,KAAK;MAC9B,MAAM6E,GAAG,GAAG1H,IAAI,CAAC9B,IAAI,CAACyJ,KAAK,CAAC,GAAG,CAAC,CAAA;MAChCD,GAAG,CAACA,GAAG,CAACpM,MAAM,GAAG,CAAC,CAAC,GAAGuH,QAAQ,CAAA;AAC9B,MAAA,OAAO6E,GAAG,CAACzH,IAAI,CAAC,GAAG,CAAC,CAAA;KACrB;AACD2H,IAAAA,UAAU,EAAEA,CAACC,KAAK,EAAEC,KAAK,KAAK;MAC5B,OAAOD,KAAK,KAAKC,KAAK,CAAA;AACxB,KAAA;GACD,CAAA;;AAED;AACA,EAAA,MAAMC,SAAS,GAAG;AAChBC,IAAAA,QAAQ,EAAEA,CAACxK,QAAQ,EAAElG,GAAG,KAAK;AAE3B,MAAA,OAAOyO,YAAY,CAACvI,QAAQ,EAAElG,GAAW,CAAC,CAAA;AAC5C,KAAA;GACD,CAAA;;AAED;AACA,EAAA,MAAM2Q,eAAe,GAAG5P,WAAW,CAAC,kBAAkC;AAAA,IAAA,IAA3B6P,cAAc,GAAAnJ,SAAA,CAAAzD,MAAA,GAAA,CAAA,IAAAyD,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;IAC/D,IAAI;AACF,MAAA,MAAMmG,IAAI,GAAG,MAAMqB,aAAa,CAAC;AAAE4B,QAAAA,MAAM,EAAE,EAAA;AAAG,OAAC,CAAC,CAAA;MAChD,IAAI,EAACjD,IAAI,KAAJA,IAAAA,IAAAA,IAAI,eAAJA,IAAI,CAAE/I,aAAa,CAAE,EAAA;AACxB,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AAEAgL,MAAAA,iBAAiB,CAACjC,IAAI,CAAC/I,aAAa,CAAC,CAAA;;AAErC;AACA,MAAA,MAAMiM,SAAS,GAAGnD,kBAAkB,CAACC,IAAI,CAAC/I,aAAa,CAAC,CAAA;AAExD,MAAA,IAAI,CAACiM,SAAS,CAAC9M,MAAM,EAAE;AACrB,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AAEA,MAAA,MAAM+M,UAAU,GAAGD,SAAS,CAAC,CAAC,CAAC,CAAA;MAC/B,MAAME,QAAQ,GAAAtN,cAAA,CAAA;AACZkK,QAAAA,IAAI,EAAEkD,SAAAA;AAAS,OAAA,EACXF,cAAc,IAAI;QACpB1N,YAAY,EAAE,CAAC6N,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAE/Q,GAAG,CAAC;AAC/B2P,QAAAA,YAAY,EAAEb,cAAc,CAACgC,SAAS,CAAC;AACvC3C,QAAAA,WAAW,EAAE4C,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAEnK,IAAI;QAC7BD,QAAQ,EAAE,CAAAoK,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAEpK,QAAQ,KAAI,EAAA;AACpC,OAAC,CACF,CAAA;MAEDmJ,eAAe,CAACkB,QAAQ,CAAC,CAAA;AACzB,MAAA,OAAOF,SAAS,CAAA;KACjB,CAAC,OAAO3J,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,iBAAiB,CAAC,CAAA;AACvC,KAAA;GACD,EAAE,EAAE,CAAC,CAAA;;AAEN;AACAF,EAAAA,SAAS,CAAC,MAAM;IACd0J,eAAe,CAAC,IAAI,CAAC,CAAA;AACvB,GAAC,EAAE,CAACA,eAAe,CAAC,CAAC,CAAA;;AAErB;EACA,MAAMM,YAAY,GAAGlQ,WAAW,CAAC,OAAO2H,IAAI,EAAE6C,QAAQ,KAAK;AACzD,IAAA,IAAI,EAACA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,CAAE2F,IAAI,EAAE,CAAE,EAAA,OAAO,KAAK,CAAA;IAEnC,IAAI;AAAA,MAAA,IAAAC,YAAA,CAAA;MACF,MAAMvK,IAAI,GAAA3E,EAAAA,CAAAA,MAAA,CAAMyG,IAAI,CAAC9B,IAAI,EAAA3E,GAAAA,CAAAA,CAAAA,MAAA,CAAIsJ,QAAQ,CAAE,CAAA;AACvC,MAAA,MAAM2D,YAAY,CAAC;AAAEtI,QAAAA,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC5B,MAAA,MAAMwK,WAAW,GAAG,MAAMT,eAAe,EAAE,CAAA;;AAE3C;MACA,MAAMU,UAAU,GAAGZ,SAAS,CAACC,QAAQ,CAACU,WAAW,EAAE1I,IAAI,CAAC1I,GAAG,CAAC,CAAA;AAC5D,MAAA,IAAIqR,UAAU,KAAVA,IAAAA,IAAAA,UAAU,KAAAF,KAAAA,CAAAA,IAAAA,CAAAA,YAAA,GAAVE,UAAU,CAAG,CAAC,CAAC,cAAAF,YAAA,KAAA,KAAA,CAAA,IAAfA,YAAA,CAAiBvP,QAAQ,EAAE;QAC7B,MAAM0P,YAAY,GAAArP,EAAAA,CAAAA,MAAA,CAAMyG,IAAI,CAAC9B,IAAI,EAAA3E,GAAAA,CAAAA,CAAAA,MAAA,CAAIsJ,QAAQ,CAAE,CAAA;AAC/C;QACA,MAAMgG,SAAS,GAAGF,UAAU,CAAC,CAAC,CAAC,CAACzP,QAAQ,CAACiG,IAAI,CAAC2J,EAAE,IAC9CtB,SAAS,CAACI,UAAU,CAACkB,EAAE,CAAC5K,IAAI,EAAE0K,YAAY,CAC5C,CAAC,CAAA;AACD,QAAA,IAAIC,SAAS,EAAE;AACbzB,UAAAA,eAAe,CAAC;AACdH,YAAAA,YAAY,EAAE,CAAC,GAAGF,SAAS,CAACE,YAAY,EAAE4B,SAAS,CAACvR,GAAG,EAAEqR,UAAU,CAAC,CAAC,CAAC,CAACrR,GAAG,CAAA;AAC5E,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAA;KACD,CAAC,OAAOmH,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,eAAe,CAAC,CAAA;AACrC,KAAA;GACD,EAAE,CAACwJ,eAAe,EAAElB,SAAS,CAACE,YAAY,CAAC,CAAC,CAAA;;AAE7C;AACA,EAAA,MAAM8B,YAAY,GAAG1Q,WAAW,CAAC,MAAO2H,IAAI,IAAK;AAC/C,IAAA,IAAI,CAACA,IAAI,CAAC9B,IAAI,EAAE,OAAA;IAEhB,IAAI;AACF,MAAA,MAAMuI,gBAAgB,CAAC;AACrBuC,QAAAA,KAAK,EAAE,CACL;UAAE9K,IAAI,EAAE8B,IAAI,CAAC9B,IAAAA;SAAM,CAAA;AAEvB,OAAC,CAAC,CAAA;AACF;MACA,MAAM+K,kBAAkB,GAAGlC,SAAS,CAACvM,YAAY,CAAC,CAAC,CAAC,KAAKwF,IAAI,CAAC1I,GAAG,CAAA;MACjE,MAAM2Q,eAAe,CAACgB,kBAAkB,CAAC,CAAA;KAC1C,CAAC,OAAOxK,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,oBAAoB,CAAC,CAAA;AAC1C,KAAA;GACD,EAAE,CAACwJ,eAAe,EAAElB,SAAS,CAACvM,YAAY,CAAC,CAAC,CAAA;;AAE7C;AACA,EAAA,MAAM0O,YAAY,GAAG7Q,WAAW,CAAC,MAAO2H,IAAI,IAAK;IAC/C,MAAMmJ,OAAO,GAAG3B,SAAS,CAACC,UAAU,CAACzH,IAAI,EAAEA,IAAI,CAACxG,KAAK,CAAC,CAAA;AACtD,IAAA,IAAIgO,SAAS,CAACI,UAAU,CAAC5H,IAAI,CAAC9B,IAAI,EAAEiL,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IAE1D,IAAI;AACF,MAAA,MAAMzC,gBAAgB,CAAC;QACrB0C,QAAQ,EAAEpJ,IAAI,CAAC9B,IAAI;AACnBmL,QAAAA,QAAQ,EAAEF,OAAAA;AACZ,OAAC,CAAC,CAAA;MACF,MAAMlB,eAAe,EAAE,CAAA;KACxB,CAAC,OAAOxJ,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,oBAAoB,CAAC,CAAA;AAC1C,KAAA;AACF,GAAC,EAAE,CAACwJ,eAAe,CAAC,CAAC,CAAA;;AAErB;EACA,MAAMqB,QAAQ,GAAGjR,WAAW,CAAC,OAAOgO,IAAI,EAAEkD,IAAI,KAAK;AACjD,IAAA,IAAI,CAAClD,IAAI,CAAC/K,MAAM,IAAK+K,IAAI,CAAC,CAAC,CAAC,KAAKU,SAAS,CAACvM,YAAY,CAAC,CAAC,CAAC,IACxDgN,SAAS,CAACI,UAAU,CAAC2B,IAAI,CAACvJ,IAAI,CAAC9B,IAAI,EAAE6I,SAAS,CAACtB,WAAW,CAAE,EAAE,OAAA;AAEhE2B,IAAAA,eAAe,CAAC;AACd5M,MAAAA,YAAY,EAAE6L,IAAI;AAClBZ,MAAAA,WAAW,EAAE8D,IAAI,CAACvJ,IAAI,CAAC9B,IAAI;AAC3B3D,MAAAA,OAAO,EAAE,IAAA;AACX,KAAC,CAAC,CAAA;IAEF,IAAI;AACF;AACA;MACA,MAAM,IAAIiP,OAAO,CAACC,OAAO,IAAIjH,UAAU,CAACiH,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AACtDrC,MAAAA,eAAe,CAAC;AACdnJ,QAAAA,QAAQ,EAAEsL,IAAI,CAACvJ,IAAI,CAAC/B,QAAQ;AAC5B1D,QAAAA,OAAO,EAAE,KAAA;AACX,OAAC,CAAC,CAAA;KACH,CAAC,OAAOkE,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,aAAa,CAAC,CAAA;AACjC2I,MAAAA,eAAe,CAAC;AAAE7M,QAAAA,OAAO,EAAE,KAAA;AAAM,OAAC,CAAC,CAAA;AACrC,KAAA;GACD,EAAE,CAACwM,SAAS,CAACvM,YAAY,EAAEuM,SAAS,CAACtB,WAAW,CAAC,CAAC,CAAA;;AAEnD;AACA,EAAA,MAAMiE,QAAQ,GAAGrR,WAAW,CAAEgO,IAAI,IAAK;AACrCe,IAAAA,eAAe,CAAC;AAAEH,MAAAA,YAAY,EAAEZ,IAAAA;AAAK,KAAC,CAAC,CAAA;GACxC,EAAE,EAAE,CAAC,CAAA;;AAEN;AACA,EAAA,MAAMsD,kBAAkB,GAAGtR,WAAW,CAAC,YAAY;AACjD;AACA,IAAA,MAAMqQ,WAAW,GAAG,MAAMT,eAAe,EAAE,CAAA;AAC3C,IAAA,MAAM2B,YAAY,GAAG7B,SAAS,CAACC,QAAQ,CAACU,WAAW,EAAE3B,SAAS,CAACvM,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/E,IAAIoP,YAAY,aAAZA,YAAY,KAAA,KAAA,CAAA,IAAZA,YAAY,CAAG,CAAC,CAAC,EAAE;AACrBxC,MAAAA,eAAe,CAAC;AACdnJ,QAAAA,QAAQ,EAAE2L,YAAY,CAAC,CAAC,CAAC,CAAC3L,QAAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,EAAE,CAACgK,eAAe,EAAElB,SAAS,CAACvM,YAAY,CAAC,CAAC,CAAA;;AAE7C;AACA,EAAA,MAAMqP,UAAU,GAAGxR,WAAW,CAAC,MAAOmD,GAAG,IAAK;IAC5C,IAAI;AACF,MAAA,MAAMiL,gBAAgB,CAAC;AAAEvI,QAAAA,IAAI,EAAE1C,GAAAA;AAAI,OAAC,CAAC,CAAA;MACrC,MAAMmO,kBAAkB,EAAE,CAAA;KAC3B,CAAC,OAAOlL,KAAK,EAAE;AACd6I,MAAAA,WAAW,CAAC7I,KAAK,EAAE,aAAa,CAAC,CAAA;AACnC,KAAA;AACF,GAAC,EAAE,CAACkL,kBAAkB,CAAC,CAAC,CAAA;AAExB,EAAA,MAAMG,YAAY,GAAG/O,OAAO,CAAC,MAAM;AAAA,IAAA,IAAAgP,eAAA,CAAA;AACjC,IAAA,IAAI,EAAAA,CAAAA,eAAA,GAAChD,SAAS,CAAC7B,IAAI,MAAA6E,IAAAA,IAAAA,eAAA,KAAdA,KAAAA,CAAAA,IAAAA,eAAA,CAAgBzO,MAAM,CAAE,EAAA;MAC3B,oBAAO1C,GAAA,CAACoR,KAAK,EAAA;QAACC,KAAK,EAAED,KAAK,CAACE,sBAAAA;AAAuB,OAAE,CAAC,CAAA;AACvD,KAAA;AAEA,IAAA,oBACEtR,GAAA,CAAA,KAAA,EAAA;AAA4BiI,MAAAA,KAAK,EAAE;AAAEsJ,QAAAA,UAAU,EAAE,EAAA;OAAK;MAAAjR,QAAA,eACpDN,GAAA,CAACwR,cAAc,EAAA;AAACzD,QAAAA,KAAK,EAAEA,KAAM;QAAAzN,QAAA,eAC3BN,GAAA,CAACiO,IAAI,EAAA;UACHwD,SAAS,EAAA,IAAA;UACTC,QAAQ,EAAA,IAAA;UACR9P,YAAY,EAAEuM,SAAS,CAACvM,YAAa;UACrCyM,YAAY,EAAEF,SAAS,CAACE,YAAa;AACrCqC,UAAAA,QAAQ,EAAEA,QAAS;AACnBI,UAAAA,QAAQ,EAAEA,QAAS;UACnBlM,QAAQ,EAAEuJ,SAAS,CAAC7B,IAAK;AACzBqF,UAAAA,WAAW,EAAG1G,QAAQ,iBACpBjL,GAAA,CAAC0K,WAAS,EAAA;YACR9J,KAAK,EAAEqK,QAAQ,CAACrK,KAAM;AACtBqK,YAAAA,QAAQ,EAAEA,QAAS;AACnBC,YAAAA,UAAU,EAAEoF,YAAa;AACzBnF,YAAAA,SAAS,EAAEgF,YAAa;AACxB/E,YAAAA,SAAS,EAAEuE,YAAAA;AAAa,WACzB,CACF;AACDzO,UAAAA,MAAM,EAAEA,MAAAA;SACT,CAAA;OACa,CAAA;AAAC,KAAA,EArBV,kBAsBJ,CAAC,CAAA;AAEV,GAAC,EAAE,CAACiN,SAAS,CAAC7B,IAAI,EAAE6B,SAAS,CAACvM,YAAY,EAAEuM,SAAS,CAACE,YAAY,CAAC,CAAC,CAAA;EAEpE,OAAO;AACL9K,IAAAA,aAAa,EAAE2N,YAAY;IAC3B7L,QAAQ,EAAE8I,SAAS,CAAC9I,QAAQ;IAC5BwH,WAAW,EAAEsB,SAAS,CAACtB,WAAW;IAClClL,OAAO,EAAEwM,SAAS,CAACxM,OAAO;IAC1B2M,cAAc;IACdyC,kBAAkB;AAClBE,IAAAA,UAAAA;GACD,CAAA;AACH,CAAC;;ACxPM,MAAMW,gBAAgB,GAAG,YAAiB;AAAA,EAAA,IAAhBC,MAAM,GAAA1L,SAAA,CAAAzD,MAAA,GAAA,CAAA,IAAAyD,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;EAC1C,MAAM;AACJ2L,IAAAA,OAAO,GAAG,EAAE;AACZC,IAAAA,KAAK,GAAG,KAAK;AACbC,IAAAA,UAAU,GAAG,EAAE;AACfC,IAAAA,SAAS,GAAG,KAAA;AACd,GAAC,GAAGJ,MAAM,CAAA;AAEV,EAAA,OAAQvM,IAAI,IAAK;AACf,IAAA,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE,CAAA;;AAEpB;AACA,IAAA,IAAI,cAAc,CAAC4M,IAAI,CAAC5M,IAAI,CAAC,EAAE;AAC7B,MAAA,OAAOA,IAAI,CAAA;AACb,KAAA;;AAEA;IACA,MAAM6M,SAAS,GAAG7M,IAAI,CAAC8M,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;;AAE1C;AACA,IAAA,MAAMC,IAAI,GAAGN,KAAK,GAAGC,UAAU,GAAGF,OAAO,CAAA;;AAEzC;IACA,IAAI,CAACO,IAAI,EAAE;AACT,MAAA,OAAOJ,SAAS,GAAAtR,GAAAA,CAAAA,MAAA,CAAOwR,SAAS,IAAKA,SAAS,CAAA;AAChD,KAAA;AAEA,IAAA,OAAOE,IAAI,GAAA,EAAA,CAAA1R,MAAA,CAAM0R,IAAI,EAAA,GAAA,CAAA,CAAA1R,MAAA,CAAIwR,SAAS,CAAA,GAAA,GAAA,CAAAxR,MAAA,CAASwR,SAAS,CAAE,CAAA;GACvD,CAAA;AACH,CAAC;;AClBD,MAAMG,aAAa,GAAGxT,IAAA,IAUhB;EAAA,IAViB;IACrByT,SAAS,GAAG,EAAE;IACdtQ,QAAQ,GAAG,EAAE;AACbvB,IAAAA,SAAS,GAAG,EAAE;IACduH,KAAK,GAAG,EAAE;IACVuK,gBAAgB;IAChBC,gBAAgB;AAChBC,IAAAA,eAAe,GAAG,wCAAwC;AAC1DC,IAAAA,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC9BC,IAAAA,iBAAiB,GAAG,YAAA;AACtB,GAAC,GAAA9T,IAAA,CAAA;EACC,MAAM;IAAEiI,OAAO;AAAE8L,IAAAA,KAAAA;AAAM,GAAC,GAAGC,GAAG,CAACC,MAAM,EAAE,CAAA;;AAEvC;AACA,EAAA,MAAMC,eAAe,GAAG7Q,OAAO,CAAC,MAAAC,cAAA,CAAA;AAC9B6Q,IAAAA,MAAM,EAAE,8BAA8B;AACtC5Q,IAAAA,QAAQ,EAAE,WAAA;AAAW,GAAA,EAClBkQ,SAAS,CACZ,EAAE,CAACA,SAAS,CAAC,CAAC,CAAA;AAEhB,EAAA,MAAMrQ,cAAc,GAAGC,OAAO,CAAC,MAAAC,cAAA,CAAA;AAC7B6Q,IAAAA,MAAM,EAAE,IAAI;AACZ5Q,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,MAAM,EAAE,IAAI;AACZ2Q,IAAAA,MAAM,EAAE,IAAI;AACZC,IAAAA,eAAe,EAAE,IAAA;AAAI,GAAA,EAClBlR,QAAQ,CACX,EAAE,CAACA,QAAQ,CAAC,CAAC,CAAA;EAEf,MAAM;IACJsB,aAAa;IACb8B,QAAQ;IACRwH,WAAW;IACXlL,OAAO;IACP2M,cAAc;IACdyC,kBAAkB;AAClBE,IAAAA,UAAAA;GACD,GAAGvD,gBAAgB,CAAC;IACnBC,aAAa,EAAEqF,eAAe,CAACrF,aAAa;IAC5CC,YAAY,EAAEoF,eAAe,CAACpF,YAAY;IAC1CC,gBAAgB,EAAEmF,eAAe,CAACnF,gBAAgB;IAClDC,gBAAgB,EAAEkF,eAAe,CAAClF,gBAAAA;AACpC,GAAC,CAAC,CAAA;EAEF,MAAM,CAACsF,YAAY,EAAEC,eAAe,CAAC,GAAG/O,QAAQ,CAAC,KAAK,CAAC,CAAA;EACvD,MAAM,CAAC6D,OAAO,EAAEmL,UAAU,CAAC,GAAGhP,QAAQ,CAAC,CAAC,CAAC,CAAA;AACzC,EAAA,MAAMiF,QAAQ,GAAGC,MAAM,CAAC,IAAI,CAAC,CAAA;EAC7B,MAAM+J,gBAAgB,GAAG/J,MAAM,CAAC,IAAIgK,eAAe,EAAE,CAAC,CAAA;EACtD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGpP,QAAQ,CAAC,KAAK,CAAC,CAAA;AACvD;EACA,MAAM,CAACqP,aAAa,EAAEC,gBAAgB,CAAC,GAAGtP,QAAQ,CAAC,EAAE,CAAC,CAAA;EACtD,MAAM,CAACuP,aAAa,EAAEC,gBAAgB,CAAC,GAAGxP,QAAQ,CAAC,KAAK,CAAC,CAAA;EACzD,MAAM,CAACyP,QAAQ,EAAEC,WAAW,CAAC,GAAG1P,QAAQ,CAAC,KAAK,CAAC,CAAA;EAC/C,MAAM,CAACb,YAAY,EAAEwQ,eAAe,CAAC,GAAG3P,QAAQ,CAAC,KAAK,CAAC,CAAA;EACvD,MAAM,CAAC4P,OAAO,EAAEC,UAAU,CAAC,GAAG7P,QAAQ,CAAC,EAAE,CAAC,CAAA;;AAE1C;AACA,EAAA,MAAM8P,gBAAgB,GAAGjS,OAAO,CAAC,MAAM;AACrC,IAAA,IAAI,CAAC+R,OAAO,EAAE,OAAO7O,QAAQ,CAAA;IAC7B,OAAOA,QAAQ,CAAC7C,MAAM,CAACzD,IAAI,IACzBA,IAAI,CAAC8B,IAAI,CAACwT,WAAW,EAAE,CAAC1R,QAAQ,CAACuR,OAAO,CAACG,WAAW,EAAE,CACxD,CAAC,CAAA;AACH,GAAC,EAAE,CAAChP,QAAQ,EAAE6O,OAAO,CAAC,CAAC,CAAA;;AAEvB;AACAvO,EAAAA,SAAS,CAAC,MAAM;IACd,OAAO,MAAA;AAAA,MAAA,IAAA2O,qBAAA,CAAA;AAAA,MAAA,OAAA,CAAAA,qBAAA,GAAMf,gBAAgB,CAAC7J,OAAO,MAAA,IAAA,IAAA4K,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAxBA,qBAAA,CAA0BC,KAAK,EAAE,CAAA;AAAA,KAAA,CAAA;GAC/C,EAAE,EAAE,CAAC,CAAA;;AAEN;AACA5O,EAAAA,SAAS,CAAC,MAAM;IACdiO,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACpBE,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvBE,WAAW,CAAC,KAAK,CAAC,CAAA;AACpB,GAAC,EAAE,CAACnH,WAAW,CAAC,CAAC,CAAA;;AAEjB;AACA,EAAA,MAAM2H,eAAe,GAAG/U,WAAW,CAAC,MAAM;AAAA,IAAA,IAAAoK,iBAAA,CAAA;AACxC,IAAA,CAAAA,iBAAA,GAAAN,QAAQ,CAACG,OAAO,MAAA,IAAA,IAAAG,iBAAA,KAAA,KAAA,CAAA,IAAhBA,iBAAA,CAAkB4K,KAAK,EAAE,CAAA;GAC1B,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,MAAMC,YAAY,GAAG,MAAOC,KAAK,IAAK;AACpC,IAAA,MAAMC,KAAK,GAAGD,KAAK,CAAC5U,MAAM,CAAC6U,KAAK,CAAA;IAChC,IAAI,EAACA,KAAK,KAALA,IAAAA,IAAAA,KAAK,eAALA,KAAK,CAAElS,MAAM,CAAE,EAAA,OAAA;;AAEpB;IACA2Q,eAAe,CAAC,IAAI,CAAC,CAAA;IACrBC,UAAU,CAAC,CAAC,CAAC,CAAA;IAEb,IAAI;AACF,MAAA,MAAMuB,WAAW,CAACD,KAAK,EAAE/H,WAAW,CAAC,CAAA;AACrC;MACA,MAAM,IAAI+D,OAAO,CAACC,OAAO,IAAIjH,UAAU,CAACiH,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;MACvD,MAAME,kBAAkB,EAAE,CAAA;KAC3B,CAAC,OAAOlL,KAAK,EAAE;AACd,MAAA,IAAIiP,KAAK,CAACC,QAAQ,CAAClP,KAAK,CAAC,EAAE;AACzBC,QAAAA,OAAO,CAACkP,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAChC,OAAC,MAAM,IAAInP,KAAK,CAACoP,QAAQ,EAAE;AAAA,QAAA,IAAAC,oBAAA,CAAA;QACzBpP,OAAO,CAACD,KAAK,CAAA,iBAAA,CAAAlF,MAAA,CAAmB,CAAAuU,CAAAA,oBAAA,GAAArP,KAAK,CAACoP,QAAQ,CAAC3I,IAAI,cAAA4I,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAnBA,oBAAA,CAAqBnO,OAAO,KAAIlB,KAAK,CAACoP,QAAQ,CAACE,MAAM,CAAE,CAAC,CAAA;AAC1F,OAAC,MAAM;QACLrP,OAAO,CAACD,KAAK,CAAAlF,gBAAAA,CAAAA,MAAA,CAAkBkF,KAAK,CAACkB,OAAO,CAAE,CAAC,CAAA;AACjD,OAAA;AACF,KAAC,SAAS;AACRqO,MAAAA,gBAAgB,EAAE,CAAA;AACpB,KAAA;GACD,CAAA;AAED,EAAA,MAAMP,WAAW,GAAG,OAAOD,KAAK,EAAErF,MAAM,KAAK;AAC3C;AACA,IAAA,MAAM8F,SAAS,GAAGC,kBAAkB,CAACV,KAAK,CAAC,CAAA;AAC3C;AACA,IAAA,MAAMW,iBAAiB,GAAG,IAAIC,GAAG,EAAE,CAAA;AACnC,IAAA,IAAIC,YAAY,GAAG,CAAC,CAAC;;IAErB,MAAMC,WAAW,GAAG7Q,KAAK,CAAC8Q,IAAI,CAACf,KAAK,CAAC,CAAC7P,GAAG,CAAC6Q,IAAI,IAC5CC,gBAAgB,CAACD,IAAI,EAAErG,MAAM,EAAEgG,iBAAiB,EAAGO,SAAS,IAAK;AAC/DL,MAAAA,YAAY,IAAIK,SAAS,CAAA;AACzBC,MAAAA,cAAc,CAACN,YAAY,EAAEJ,SAAS,CAAC,CAAA;AACzC,KAAC,CACH,CAAC,CAAA;AAED,IAAA,MAAMzE,OAAO,CAACoF,GAAG,CAACN,WAAW,CAAC,CAAA;GACjC,CAAA;;AAEC;EACA,MAAMJ,kBAAkB,GAAIV,KAAK,IAC/B/P,KAAK,CAAC8Q,IAAI,CAACf,KAAK,CAAC,CAACnI,MAAM,CAAC,CAACwJ,GAAG,EAAEL,IAAI,KAAKK,GAAG,GAAGL,IAAI,CAAC7S,IAAI,EAAE,CAAC,CAAC,CAAA;;AAE7D;EACA,MAAM8S,gBAAgB,GAAGA,CAACD,IAAI,EAAErG,MAAM,EAAEgG,iBAAiB,EAAEW,UAAU,KAAK;AACxE,IAAA,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,EAAE,CAAA;AAC/BD,IAAAA,QAAQ,CAACE,MAAM,CAAC,MAAM,EAAET,IAAI,CAAC,CAAA;AAC7BO,IAAAA,QAAQ,CAACE,MAAM,CAAC,QAAQ,EAAE9G,MAAM,CAAC,CAAA;IAEjC,OAAOuF,KAAK,CAACwB,IAAI,CAACtD,eAAe,CAACC,MAAM,EAAEkD,QAAQ,EAAE;AAClDI,MAAAA,OAAO,EAAE5D,aAAa;AACtB6D,MAAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE,qBAAA;OAAuB;AAClD;MACAC,gBAAgB,EAAGC,aAAa,IAAK;QACnC,IAAIA,aAAa,CAACC,gBAAgB,EAAE;AAClC;UACA,MAAMC,cAAc,GAAGrB,iBAAiB,CAACsB,GAAG,CAACjB,IAAI,CAAC/U,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5D;AACA,UAAA,MAAMiV,SAAS,GAAGY,aAAa,CAACI,MAAM,GAAGF,cAAc,CAAA;AACvD;UACArB,iBAAiB,CAACwB,GAAG,CAACnB,IAAI,CAAC/U,IAAI,EAAE6V,aAAa,CAACI,MAAM,CAAC,CAAA;UACtDZ,UAAU,CAACJ,SAAS,CAAC,CAAA;AACvB,SAAA;AACF,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,MAAMC,cAAc,GAAGA,CAACN,YAAY,EAAEJ,SAAS,KAAK;IAClD,MAAM2B,YAAY,GAAGC,IAAI,CAACC,KAAK,CAAEzB,YAAY,GAAGJ,SAAS,GAAI,GAAG,CAAC,CAAA;IACjE/B,UAAU,CAAC0D,YAAY,CAAC,CAAA;GACzB,CAAA;;AAED;EACA,MAAM5B,gBAAgB,GAAGA,MAAM;IAC7B/B,eAAe,CAAC,KAAK,CAAC,CAAA;IACtBC,UAAU,CAAC,CAAC,CAAC,CAAA;IACb,IAAI/J,QAAQ,CAACG,OAAO,EAAEH,QAAQ,CAACG,OAAO,CAACzE,KAAK,GAAG,EAAE,CAAA;GAClD,CAAA;;AAED;AACA,EAAA,MAAMkS,YAAY,GAAG,MAAMvU,GAAG,IAAK;IACjC,IAAI;MACF,MAAMmP,KAAK,GAAGqF,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,CAAA;MACpD,MAAMxF,OAAO,GAAGC,KAAK,GACjBqF,OAAO,CAACC,GAAG,CAACE,QAAQ;AAAI,QACxBC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC;;AAE3B,MAAA,MAAMC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CAAA;AACxCF,MAAAA,IAAI,CAACG,IAAI,GAAA,EAAA,CAAAnX,MAAA,CAAMmR,OAAO,CAAAnR,CAAAA,MAAA,CAAGqS,eAAe,CAAC3Q,QAAQ,EAAA,GAAA,CAAA,CAAA1B,MAAA,CAAIiC,GAAG,CAAE,CAAA;AAC1D;AACA+U,MAAAA,IAAI,CAAC1P,KAAK,CAAC8P,OAAO,GAAG,MAAM,CAAA;AAC3BH,MAAAA,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,IAAI,CAAC,CAAA;MAC/BA,IAAI,CAAClD,KAAK,EAAE,CAAA;AACZmD,MAAAA,QAAQ,CAACI,IAAI,CAACE,WAAW,CAACP,IAAI,CAAC,CAAA;KAChC,CAAC,OAAO9R,KAAK,EAAE;AACdC,MAAAA,OAAO,CAACD,KAAK,CAAC,kBAAkB,EAAEA,KAAK,CAAC,CAAA;AAC1C,KAAA;GACD,CAAA;EAED,MAAMsS,QAAQ,GAAGA,MAAM;IACrBzE,eAAe,CAAC,IAAI,CAAC,CAAA;GACtB,CAAA;AAED,EAAA,MAAM1U,aAAa,GAAGA,CAACN,GAAG,EAAEK,IAAI,KAAK;IACnC,IAAIL,GAAG,KAAK,KAAK,EAAEuS,UAAU,CAAClS,IAAI,CAAC6D,GAAG,CAAC,CAAA;IACvC,IAAIlE,GAAG,KAAK,UAAU,EAAEyY,YAAY,CAACpY,IAAI,CAAC6D,GAAG,CAAC,CAAA;IAC9C,IAAIlE,GAAG,KAAK,MAAM,EAAEyZ,QAAQ,CAACpZ,IAAI,CAAC6D,GAAG,CAAC,CAAA;GACvC,CAAA;AAED,EAAA,MAAMwV,iBAAiB,GAAG3Y,WAAW,CAAC,YAAY;AAChD,IAAA,IAAI,CAACkU,aAAa,CAACjR,MAAM,EAAE,OAAA;IAE3BmQ,KAAK,CAAClK,OAAO,CAAC;AACZoE,MAAAA,IAAI,eAAE/M,GAAA,CAACqY,uBAAuB,IAAE,CAAC;AACjCzX,MAAAA,KAAK,qCAAAD,MAAA,CAAqCgT,aAAa,CAACjR,MAAM,EAAS,SAAA,CAAA;AACvEiB,MAAAA,UAAU,EAAE,IAAI;AAChBD,MAAAA,MAAM,EAAE,KAAK;MACbJ,IAAI,EAAE,YAAY;QAChB,IAAI;AACF;UACA,MAAM0P,eAAe,CAACnF,gBAAgB,CAAC;AACrCuC,YAAAA,KAAK,EAAEuD,aAAa,CAAC5O,GAAG,CAACuT,OAAO,KAAK;AAAEhT,cAAAA,IAAI,EAAEgT,OAAAA;AAAQ,aAAC,CAAC,CAAA;AACzD,WAAC,CAAC,CAAA;;AAEF;UACA1E,gBAAgB,CAAC,EAAE,CAAC,CAAA;UACpBE,gBAAgB,CAAC,KAAK,CAAC,CAAA;UACvBE,WAAW,CAAC,KAAK,CAAC,CAAA;AAClB,UAAA,MAAMjD,kBAAkB,EAAE,CAAC;SAC5B,CAAC,OAAOlL,KAAK,EAAE;AACdC,UAAAA,OAAO,CAACD,KAAK,CAAC,uBAAuB,EAAEA,KAAK,CAAC,CAAA;AAC/C,SAAA;AACF,OAAA;AACF,KAAC,CAAC,CAAA;GACH,EAAE,CAAC8N,aAAa,EAAEX,eAAe,EAAEjC,kBAAkB,CAAC,CAAC,CAAA;AAExD,EAAA,MAAMwH,iBAAiB,GAAG9Y,WAAW,CAAC,MAAO8Q,OAAO,IAAK;IACvD0D,eAAe,CAAC,IAAI,CAAC,CAAA;IAErB,IAAI;AACF;MACA,MAAMjB,eAAe,CAACmF,QAAQ,CAAC;AAC7BK,QAAAA,SAAS,EAAE7E,aAAa,CAAC5O,GAAG,CAACuT,OAAO,KAAK;AAAE9H,UAAAA,QAAQ,EAAE8H,OAAAA;AAAQ,SAAC,CAAC,CAAC;AAChE7H,QAAAA,QAAQ,EAAEF,OAAAA;AACZ,OAAC,CAAC,CAAA;;AAEF;MACAqD,gBAAgB,CAAC,EAAE,CAAC,CAAA;MACpBE,gBAAgB,CAAC,KAAK,CAAC,CAAA;MACvBE,WAAW,CAAC,KAAK,CAAC,CAAA;AAClBjN,MAAAA,OAAO,CAAC0R,OAAO,CAAC,SAAS,CAAC,CAAA;MAC1B/E,eAAe,CAAC,KAAK,CAAC,CAAA;;AAEtB;MACA,MAAM,IAAI9C,OAAO,CAACC,OAAO,IAAIjH,UAAU,CAACiH,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;MACvD,MAAME,kBAAkB,EAAE,CAAA;KAC3B,CAAC,OAAOlL,KAAK,EAAE;AACdC,MAAAA,OAAO,CAACD,KAAK,CAAC,mBAAmB,EAAEA,KAAK,CAAC,CAAA;AAC3C,KAAC,SAAS;MACRoO,eAAe,CAAC,KAAK,CAAC,CAAA;AACxB,KAAA;GACD,EAAE,CAACN,aAAa,EAAEX,eAAe,EAAEjC,kBAAkB,CAAC,CAAC,CAAA;;AAExD;AACA,EAAA,MAAM2H,kBAAkB,GAAGA,CAAC3Z,IAAI,EAAEI,OAAO,KAAK;IAC5C,MAAMwZ,gBAAgB,GAAGxZ,OAAO,GAC5B,CAAC,GAAGwU,aAAa,EAAE5U,IAAI,CAAC6D,GAAG,CAAC,GAC5B+Q,aAAa,CAACnR,MAAM,CAACI,GAAG,IAAIA,GAAG,KAAK7D,IAAI,CAAC6D,GAAG,CAAC,CAAA;IAEjDgR,gBAAgB,CAAC+E,gBAAgB,CAAC,CAAA;AAClC7E,IAAAA,gBAAgB,CAAC,CAAC,CAAC6E,gBAAgB,CAACjW,MAAM,IAAIiW,gBAAgB,CAACjW,MAAM,KAAK0R,gBAAgB,CAAC1R,MAAM,CAAC,CAAA;IAClGsR,WAAW,CAAC2E,gBAAgB,CAACjW,MAAM,KAAK0R,gBAAgB,CAAC1R,MAAM,CAAC,CAAA;GACjE,CAAA;;AAED;EACA,MAAMkW,eAAe,GAAG/Y,CAAC,IAAI;AAC3B,IAAA,MAAMV,OAAO,GAAGU,CAAC,CAACE,MAAM,CAACZ,OAAO,CAAA;AAChCyU,IAAAA,gBAAgB,CAACzU,OAAO,GAAGiV,gBAAgB,CAACrP,GAAG,CAAChG,IAAI,IAAIA,IAAI,CAAC6D,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;IACvEkR,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvBE,WAAW,CAAC7U,OAAO,CAAC,CAAA;GACrB,CAAA;;AAED;EACA,MAAM0Z,kBAAkB,GAAIhZ,CAAC,IAAK;AAChCsU,IAAAA,UAAU,CAACtU,CAAC,CAACE,MAAM,CAACkF,KAAK,CAAC,CAAA;GAC3B,CAAA;;AAED;AACA,EAAA,MAAM1F,UAAU,GAAG4C,OAAO,CAAC,MAAM;AAC/B,IAAA,OAAOyP,gBAAgB,CAAC;MACtBE,OAAO,EAAES,SAAS,CAACT,OAAO;MAC1BE,UAAU,EAAEO,SAAS,CAACP,UAAU;AAChCD,MAAAA,KAAK,EAAEqF,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa;MAC7CrF,SAAS,EAAE,OAAOuF,MAAM,KAAK,WAAA;AAC/B,KAAC,CAAC,CAAA;GACH,EAAE,CAACjF,SAAS,CAACT,OAAO,EAAES,SAAS,CAACP,UAAU,CAAC,CAAC,CAAA;AAE7C,EAAA,oBACEzR,IAAA,CAAA,KAAA,EAAA;AAAKG,IAAAA,SAAS,EAAAC,iBAAAA,CAAAA,MAAA,CAAoBD,SAAS,CAAG;AAACuH,IAAAA,KAAK,EAAEA,KAAM;AAAA3H,IAAAA,QAAA,gBAC1DC,IAAA,CAAA,KAAA,EAAA;AAAKG,MAAAA,SAAS,EAAC,mBAAmB;AAAAJ,MAAAA,QAAA,gBAChCC,IAAA,CAAA,KAAA,EAAA;AAAKG,QAAAA,SAAS,EAAC,gBAAgB;AAAAJ,QAAAA,QAAA,GAC5BkS,gBAAgB,GAAGA,gBAAgB,EAAE,gBACpCxS,GAAA,CAAA,KAAA,EAAA;AAAKU,UAAAA,SAAS,EAAC,YAAA;SAAkB,CAClC,EACA6C,aAAa,CAAA;OACX,CAAC,eACNhD,IAAA,CAAA,KAAA,EAAA;AAAKG,QAAAA,SAAS,EAAC,iBAAiB;QAAAJ,QAAA,EAAA,cAC9BC,IAAA,CAAC2I,IAAI,EAAA;AAACC,UAAAA,OAAO,EAAC,QAAQ;AAAC2P,UAAAA,KAAK,EAAC,QAAQ;AAACpY,UAAAA,SAAS,EAAC,YAAY;AAAAJ,UAAAA,QAAA,GACzD4B,cAAc,CAACgR,MAAM,iBACpBlT,GAAA,CAAC+I,KAAK,EAAA;AACJ9D,YAAAA,KAAK,EAAEiP,OAAQ;AACfnT,YAAAA,QAAQ,EAAE8X,kBAAmB;AAC7BjV,YAAAA,WAAW,EAAEgP,iBAAkB;AAC/BmG,YAAAA,MAAM,eAAE/Y,GAAA,CAACgZ,cAAc,IAAE,CAAE;YAC3BjV,UAAU,EAAA,IAAA;AACVrD,YAAAA,SAAS,EAAC,cAAA;WACX,CACF,EACAwB,cAAc,CAAC+Q,MAAM,iBACpB1S,IAAA,CAAAsI,QAAA,EAAA;YAAAvI,QAAA,EAAA,cACEN,GAAA,CAACiZ,mBAAmB,EAAA;AAClBvY,cAAAA,SAAS,EAAC,aAAa;AACvBE,cAAAA,KAAK,EAAC,QAAQ;AACdtB,cAAAA,OAAO,EAAEkV,eAAAA;aACV,CAAC,eACFxU,GAAA,CAAA,OAAA,EAAA;AACEuI,cAAAA,GAAG,EAAEgB,QAAS;AACd9D,cAAAA,IAAI,EAAC,MAAM;AACX1E,cAAAA,QAAQ,EAAE2T,YAAa;AACvBhU,cAAAA,SAAS,EAAC,QAAQ;AAClBwY,cAAAA,MAAM,EAAExG,eAAgB;cACxByG,QAAQ,EAAA,IAAA;AAAA,aACT,CAAC,CAAA;AAAA,WACF,CACH,CAAA;SACG,CAAC,eACP5Y,IAAA,CAAA,KAAA,EAAA;AACEG,UAAAA,SAAS,EAAC,sBAAsB;AAChC1B,UAAAA,aAAa,EAAGa,CAAC,IAAKA,CAAC,CAACuZ,cAAc,EAAG;AAAA9Y,UAAAA,QAAA,GAExCmS,gBAAgB,GAAGA,gBAAgB,EAAE,GACpC2B,gBAAgB,CAAC1R,MAAM,GAAG,CAAC,IAAIR,cAAc,CAACiR,eAAe,iBAC3DnT,GAAA,CAAA,KAAA,EAAA;AAAKU,YAAAA,SAAS,EAAC,kBAAkB;YAAAJ,QAAA,eAC/BC,IAAA,CAAC8Y,KAAK,EAAA;AAACtW,cAAAA,IAAI,EAAC,QAAQ;cAAAzC,QAAA,EAAA,cAClBN,GAAA,CAACc,QAAQ,EAAA;AACP+S,gBAAAA,aAAa,EAAEA,aAAc;AAC7B1U,gBAAAA,OAAO,EAAE4U,QAAS;AAClBhT,gBAAAA,QAAQ,EAAE6X,eAAgB;AAAAtY,gBAAAA,QAAA,EAC3B,YAAA;AAED,eAAU,CAAC,eACXN,GAAA,CAAC8H,MAAM,EAAA;AACLrC,gBAAAA,IAAI,EAAC,SAAS;AACdpF,gBAAAA,QAAQ,EAAE,CAACsT,aAAa,CAACjR,MAAO;AAChCpD,gBAAAA,OAAO,EAAEA,MAAMoU,eAAe,CAAC,IAAI,CAAE;AAAApT,gBAAAA,QAAA,EACtC,YAAA;AAED,eAAQ,CAAC,eACTN,GAAA,CAAC8H,MAAM,EAAA;AACLpH,gBAAAA,SAAS,EAAC,UAAU;AACpBL,gBAAAA,QAAQ,EAAE,CAACsT,aAAa,CAACjR,MAAO;AAChCpD,gBAAAA,OAAO,EAAE8Y,iBAAkB;AAAA9X,gBAAAA,QAAA,EAC5B,cAAA;AAED,eAAQ,CAAC,CAAA;aACJ,CAAA;AAAC,WACL,CAER,eACDN,GAAA,CAACyB,WAAS,EAAA;AACRtB,YAAAA,KAAK,EAAEiU,gBAAiB;AACxBzS,YAAAA,OAAO,EAAEA,OAAQ;AACjB3C,YAAAA,aAAa,EAAEkD,cAAc,CAACK,MAAM,IAAIL,cAAc,CAACG,QAAQ,IAAIH,cAAc,CAACI,IAAI,GAAGtD,aAAa,GAAG,IAAK;AAC9G4C,YAAAA,YAAY,EAAE+R,aAAc;AAC5BvU,YAAAA,cAAc,EAAE8C,cAAc,CAACiR,eAAe,GAAGuF,kBAAkB,GAAG,IAAK;AAC3EpZ,YAAAA,OAAO,EAAEA,MAAM,EAAG;AAClB2C,YAAAA,QAAQ,EAAEC,cAAe;AACzB3C,YAAAA,UAAU,EAAEA,UAAAA;AAAW,WACxB,CAAC,CAAA;AAAA,SACC,CAAC,CAAA;AAAA,OACH,CAAC,CAAA;AAAA,KACH,CAAC,EACL6T,YAAY,iBAAIpT,GAAA,CAACkI,gBAAc,EAAA;AAACC,MAAAA,OAAO,EAAEA,OAAAA;AAAQ,KAAE,CAAC,eACrDnI,GAAA,CAACmD,uBAAqB,EAAA;AACpBC,MAAAA,IAAI,EAAEqQ,YAAa;AACnBlQ,MAAAA,aAAa,EAAE+K,cAAe;AAC9B7K,MAAAA,YAAY,EAAEA,YAAa;AAC3BJ,MAAAA,OAAO,EAAEA,MAAMqQ,eAAe,CAAC,KAAK,CAAE;AACtCpQ,MAAAA,IAAI,EAAEiV,iBAAAA;AAAkB,KACzB,CAAC,CAAA;AAAA,GACC,CAAC,CAAA;AAEV,CAAC,CAAA;AAED,sBAAejG,aAAa;;;;"}
package/dist/index.js CHANGED
@@ -153,14 +153,14 @@ const MediaGrid = /*#__PURE__*/react.memo(_ref3 => {
153
153
  getFullUrl
154
154
  } = _ref3;
155
155
  // 合并默认 features 和传入的 features
156
- const mergedFeatures = useMemo(() => _objectSpread2({
156
+ const mergedFeatures = react.useMemo(() => _objectSpread2({
157
157
  download: true,
158
158
  copy: true,
159
159
  delete: true
160
160
  }, features), [features]);
161
161
 
162
162
  // 根据 features 动态生成 menuItems
163
- const menuItems = useMemo(() => {
163
+ const menuItems = react.useMemo(() => {
164
164
  // 如果传入了自定义 menuItems,则优先使用
165
165
  if (customMenuItems) return customMenuItems;
166
166
 
@@ -928,7 +928,7 @@ const ResourcesView = _ref => {
928
928
  renderGridHeader,
929
929
  acceptFileTypes = "video/*,.mxf,application/mxf,video/mxf",
930
930
  uploadTimeout = 60 * 60 * 1000,
931
- searchPlaceholder = "Search resources..."
931
+ searchPlaceholder = "Search ..."
932
932
  } = _ref;
933
933
  const {
934
934
  message,
@@ -1205,11 +1205,12 @@ const ResourcesView = _ref => {
1205
1205
  justify: "center",
1206
1206
  align: "center",
1207
1207
  className: "search-bar",
1208
- children: [mergedFeatures.search && /*#__PURE__*/jsxRuntime.jsx("input", {
1209
- type: "text",
1210
- placeholder: searchPlaceholder,
1208
+ children: [mergedFeatures.search && /*#__PURE__*/jsxRuntime.jsx(antd.Input, {
1211
1209
  value: keyword,
1212
1210
  onChange: handleSearchChange,
1211
+ placeholder: searchPlaceholder,
1212
+ prefix: /*#__PURE__*/jsxRuntime.jsx(icons.SearchOutlined, {}),
1213
+ allowClear: true,
1213
1214
  className: "search-input"
1214
1215
  }), mergedFeatures.upload && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1215
1216
  children: [/*#__PURE__*/jsxRuntime.jsx(icons.CloudUploadOutlined, {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/MediaGrid/index.jsx","../src/components/SelectFolderPathModal/index.jsx","../src/components/UploadProgress/index.jsx","../src/components/TreeTitle/EditablePopover.jsx","../src/components/TreeTitle/index.jsx","../src/utils/treeUtils.js","../src/hooks/useDirectoryTree.js","../src/utils/urlBuilder.js","../src/ResourcesView.jsx"],"sourcesContent":["import { Dropdown, Image, List, Typography, Spin, Checkbox } from 'antd';\r\nimport { useCallback, memo } from 'react';\r\n\r\n// 基础菜单项配置\r\nconst BASE_MENU_ITEMS = [\r\n {\r\n label: 'Download',\r\n key: 'download',\r\n featureKey: 'download'\r\n },\r\n {\r\n label: 'Copy',\r\n key: 'copy',\r\n featureKey: 'copy'\r\n },\r\n {\r\n label: 'Delete',\r\n key: 'del',\r\n featureKey: 'delete'\r\n }\r\n];\r\n\r\nconst MediaGridItem = memo(({\r\n item, \r\n onContextMenu, \r\n menuItems = DEFAULT_MENU_ITEMS,\r\n checked,\r\n onSelectChange,\r\n showCheckbox = true,\r\n onClick,\r\n getFullUrl\r\n}) => {\r\n const handleMenuClick = useCallback(\r\n ({ key }) => onContextMenu(key, item),\r\n [item, onContextMenu]\r\n );\r\n\r\n const handleItemClick = useCallback(() => {\r\n onClick?.(item);\r\n }, [item, onClick]);\r\n\r\n const handleCheckboxChange = useCallback((e) => {\r\n e.stopPropagation();\r\n onSelectChange?.(item, e.target.checked);\r\n }, [item, onSelectChange]);\r\n\r\n return (\r\n <Dropdown \r\n menu={{ items: menuItems, onClick: handleMenuClick }} \r\n trigger={['contextMenu']}\r\n disabled={!onContextMenu}\r\n >\r\n <List.Item \r\n className={`media-grid-item ${checked ? 'media-grid-item-selected' : ''}`}\r\n title={item.name}\r\n onClick={handleItemClick}\r\n >\r\n {showCheckbox && (\r\n <div\r\n className=\"media-grid-checkbox-wrapper\" \r\n onClick={e => e.stopPropagation()}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onChange={handleCheckboxChange}\r\n />\r\n </div>\r\n )}\r\n <div className=\"media-grid-thumbnail\">\r\n <Image\r\n width=\"100%\"\r\n height=\"100%\"\r\n src={getFullUrl(item.head_thumbnail)}\r\n preview={false}\r\n />\r\n </div>\r\n <div className=\"media-grid-info\">\r\n <Typography.Text ellipsis>\r\n {item.name}\r\n </Typography.Text>\r\n </div>\r\n </List.Item>\r\n </Dropdown>\r\n );\r\n});\r\n\r\nconst MediaGrid = memo(({ \r\n items = [], \r\n loading = false, \r\n onContextMenu,\r\n selectedKeys = [],\r\n onSelectChange,\r\n menuItems: customMenuItems,\r\n gridConfig = { gutter: 0, column: 6 },\r\n showCheckbox = true,\r\n onClick,\r\n features = {},\r\n getFullUrl\r\n}) => {\r\n // 合并默认 features 和传入的 features\r\n const mergedFeatures = useMemo(() => ({\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n ...features\r\n }), [features]);\r\n\r\n // 根据 features 动态生成 menuItems\r\n const menuItems = useMemo(() => {\r\n // 如果传入了自定义 menuItems,则优先使用\r\n if (customMenuItems) return customMenuItems;\r\n \r\n // 否则根据 features 过滤出可用的菜单项\r\n return BASE_MENU_ITEMS.filter(item => \r\n mergedFeatures[item.featureKey] !== false\r\n );\r\n }, [customMenuItems, mergedFeatures]);\r\n\r\n const renderItem = useCallback(\r\n (item) => (\r\n <MediaGridItem \r\n item={item} \r\n onContextMenu={menuItems.length > 0 ? onContextMenu : null}\r\n menuItems={menuItems}\r\n checked={selectedKeys.includes(item.url)} // 使用url作为唯一标识\r\n onSelectChange={onSelectChange}\r\n showCheckbox={showCheckbox}\r\n onClick={onClick}\r\n getFullUrl={getFullUrl} // 传递 getFullUrl 给子组件\r\n />\r\n ),\r\n [onContextMenu, menuItems, selectedKeys, onSelectChange, showCheckbox, onClick]\r\n );\r\n\r\n return (\r\n <Spin\r\n spinning={loading} \r\n size=\"large\"\r\n >\r\n <List\r\n grid={gridConfig}\r\n dataSource={items}\r\n renderItem={renderItem}\r\n pagination={false}\r\n // locale={{ emptyText: 'No media files found' }}\r\n />\r\n </Spin>\r\n );\r\n});\r\n\r\nexport default MediaGrid;","import { Button, Cascader, Form, Modal, Spin } from \"antd\";\r\nimport { memo, useEffect, useState, useCallback } from \"react\";\r\n\r\nconst SelectFolderPathModal = ({\r\n open, \r\n onClose, \r\n onOk, \r\n directoryTree,\r\n loading: externalLoading,\r\n batchLoading,\r\n title = \"Select Folder Path\",\r\n okText = \"Copy\",\r\n cancelText = \"Cancel\",\r\n placeholder = \"Please select (click arrow to expand)\",\r\n width = 520,\r\n formItemLabel = \"Folder Path\",\r\n showFullPath = false,\r\n disabled = false,\r\n allowClear = true,\r\n expandTrigger = \"hover\"\r\n}) => {\r\n const [form] = Form.useForm();\r\n const [options, setOptions] = useState([]);\r\n const [internalLoading, setInternalLoading] = useState(false);\r\n const [selectedPath, setSelectedPath] = useState([]);\r\n\r\n const loading = externalLoading || internalLoading;\r\n\r\n // 将 directoryTree 转换为 Cascader 需要的 options 格式\r\n const convertToCascaderOptions = useCallback((treeData) => {\r\n if (!treeData || !Array.isArray(treeData)) return [];\r\n\r\n return treeData.map(item => {\r\n if (!item) return null;\r\n\r\n const option = {\r\n value: item.id,\r\n label: item.sd_index || item.name,\r\n isLeaf: !item.contents || item.contents.length === 0,\r\n path: item.path,\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n if (item.contents && Array.isArray(item.contents) && item.contents.length > 0) {\r\n // 递归处理子目录\r\n option.children = convertToCascaderOptions(\r\n item.contents.filter(child => child && child.type === 'directory')\r\n );\r\n }\r\n\r\n return option;\r\n }).filter(Boolean);;\r\n }, []);\r\n\r\n // 初始化 options\r\n useEffect(() => {\r\n if (open && directoryTree) {\r\n setInternalLoading(true);\r\n try {\r\n const formattedOptions = convertToCascaderOptions(directoryTree);\r\n setOptions(formattedOptions);\r\n } catch (error) {\r\n console.error('Error converting directory tree:', error);\r\n } finally {\r\n setInternalLoading(false);\r\n }\r\n }\r\n }, [open, directoryTree, convertToCascaderOptions]);\r\n\r\n // 根据value路径查找对应的节点信息\r\n const getSelectedNodes = useCallback((valuePath, currentOptions, collectedNodes = []) => {\r\n if (!valuePath || valuePath.length === 0 || !currentOptions) return collectedNodes;\r\n \r\n const currentValue = valuePath[0];\r\n const currentNode = currentOptions.find(opt => opt && opt.value === currentValue);\r\n \r\n if (!currentNode) return collectedNodes;\r\n \r\n collectedNodes.push(currentNode);\r\n \r\n if (valuePath.length > 1 && currentNode.children) {\r\n return getSelectedNodes(\r\n valuePath.slice(1), \r\n currentNode.children, \r\n collectedNodes\r\n );\r\n }\r\n \r\n return collectedNodes;\r\n }, []);\r\n\r\n const handleOk = useCallback(() => {\r\n form.validateFields().then(values => {\r\n if (!values.path) {\r\n message.warning('Please select a folder path');\r\n return;\r\n }\r\n\r\n const selectedNodes = getSelectedNodes(values.path, options);\r\n if (selectedNodes.length === 0) {\r\n message.warning('Invalid path selected');\r\n return;\r\n }\r\n\r\n const lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n // 返回完整路径或最后节点路径\r\n const resultPath = showFullPath \r\n ? selectedNodes.map(node => node.path).join('/')\r\n : lastNode.path;\r\n\r\n onOk?.(resultPath);\r\n }).catch(error => {\r\n console.error('Validation failed:', error);\r\n });\r\n }, [form, options, getSelectedNodes, onOk, showFullPath]);\r\n\r\n const handleAfterClose = useCallback(() => {\r\n form.resetFields();\r\n setSelectedPath([]);\r\n }, [form]);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n open={open}\r\n onCancel={onClose}\r\n afterClose={handleAfterClose}\r\n width={width}\r\n destroyOnHidden \r\n footer={[\r\n <Button \r\n key=\"cancel\"\r\n onClick={onClose}\r\n disabled={batchLoading}\r\n >\r\n {cancelText}\r\n </Button>,\r\n <Button \r\n key=\"submit\" \r\n type=\"primary\" \r\n onClick={handleOk}\r\n loading={batchLoading}\r\n disabled={disabled || selectedPath.length === 0}\r\n >\r\n {okText}\r\n </Button>\r\n ]}\r\n >\r\n <Spin spinning={loading}>\r\n <Form form={form}>\r\n <Form.Item name=\"path\" label={formItemLabel}>\r\n <Cascader\r\n options={options}\r\n changeOnSelect\r\n placeholder={placeholder}\r\n style={{ width: '100%' }}\r\n disabled={disabled || loading}\r\n expandTrigger={expandTrigger}\r\n allowClear={allowClear}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </Spin>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default memo(SelectFolderPathModal);","import { Progress } from 'antd';\r\nimport { memo } from 'react';\r\n\r\nconst UploadProgress = ({ percent }) => (\r\n <div className=\"upload-progress\">\r\n <Progress type=\"circle\" percent={percent} />\r\n </div>\r\n);\r\n\r\nexport default memo(UploadProgress);","import { Input, Form, Popover, Button, Flex } from 'antd';\r\nimport { forwardRef, useEffect, useRef, useState, useCallback, memo } from 'react';\r\n\r\nconst PopoverContent = forwardRef(({ onClose, onConfirm }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n const handleConfirm = useCallback(() => {\r\n onConfirm(value, () => setValue(''));\r\n }, [confirm, value]);\r\n\r\n const handleKeyDown = useCallback((e) => {\r\n if (e.key === 'Enter') {\r\n handleConfirm();\r\n }\r\n }, [handleConfirm]);\r\n \r\n return (\r\n <>\r\n <Form.Item\r\n label=\"Folder Name\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n <Input\r\n ref={ref}\r\n value={value} \r\n onChange={(e) => setValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n size=\"small\"\r\n style={{ width: 120 }}\r\n autoFocus\r\n />\r\n </Form.Item>\r\n <Flex justify=\"flex-end\" gap=\"small\">\r\n <Button type=\"default\" size=\"small\" onClick={onClose}>Close</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleConfirm}>OK</Button>\r\n </Flex>\r\n </>\r\n )\r\n})\r\n\r\nconst EditablePopover = ({ children, add }) => {\r\n const inputRef = useRef(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (open && inputRef.current) {\r\n const timer = setTimeout(() => {\r\n inputRef.current?.focus();\r\n }, 100);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [open]);\r\n\r\n // 使用 open 属性控制浮层显示\r\n const hide = useCallback(() => {\r\n setOpen(false);\r\n }, []);\r\n \r\n const handleConfirm = useCallback((newTitle, callback) => {\r\n add(newTitle);\r\n callback?.();\r\n hide();\r\n }, [add, hide]);\r\n\r\n const handleOpenChange = useCallback((newOpen) => {\r\n setOpen(newOpen);\r\n }, []);\r\n\r\n return (\r\n <Popover\r\n content={\r\n <PopoverContent\r\n ref={inputRef}\r\n onClose={hide}\r\n onConfirm={handleConfirm}\r\n />\r\n }\r\n trigger=\"click\"\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n destroyOnHidden\r\n >\r\n {children}\r\n </Popover>\r\n )\r\n}\r\n\r\nexport default memo(EditablePopover);","import { Typography, Popconfirm, Input, Form } from 'antd';\r\nimport { createContext, memo, useContext, useEffect, useRef, useState, useCallback } from 'react';\r\nimport EditablePopover from './EditablePopover';\r\n\r\nconst EditableContext = createContext(null);\r\n\r\nconst TreeTitle = ({ ...props }) => {\r\n const [form] = Form.useForm();\r\n\r\n return (\r\n <Form form={form} component={false}>\r\n <EditableContext.Provider value={form}>\r\n <TreeTitleNode {...props} />\r\n </EditableContext.Provider>\r\n </Form>\r\n );\r\n};\r\n\r\nconst TreeTitleNode = ({\r\n title,\r\n nodeData,\r\n handleSave,\r\n handleDel,\r\n handleAdd\r\n}) => {\r\n const [editing, setEditing] = useState(false);\r\n const inputRef = useRef(null);\r\n const form = useContext(EditableContext);\r\n\r\n useEffect(() => {\r\n if (editing) {\r\n inputRef.current?.focus();\r\n }\r\n }, [editing]);\r\n\r\n const toggleEdit = useCallback(() => {\r\n setEditing(prev => !prev);\r\n form.setFieldsValue({\r\n [nodeData.title]: nodeData.title,\r\n });\r\n }, [form, nodeData.title]);\r\n\r\n const save = useCallback(async () => {\r\n try {\r\n const values = await form.validateFields();\r\n toggleEdit();\r\n handleSave({\r\n ...nodeData,\r\n title: values[nodeData.title]\r\n });\r\n } catch (errInfo) {\r\n console.error('Save failed:', errInfo);\r\n }\r\n }, [form, toggleEdit, handleSave, nodeData]);\r\n\r\n // 新建文件夹 \r\n // 修改文件/文件夹\r\n // 删除文件/文件夹\r\n const renderIconNode = useCallback(() => {\r\n return (\r\n <span className=\"tree-node-icons\" onClick={(e) => e.stopPropagation()}>\r\n <EditablePopover add={(newTitle) => handleAdd(nodeData, newTitle)}>\r\n <div className=\"px-1\" title=\"create\">\r\n <i className=\"iconfont icon-jia\" />\r\n </div>\r\n </EditablePopover>\r\n \r\n {!nodeData.isRoot && (\r\n <>\r\n <div \r\n className=\"px-1\" \r\n onClick={toggleEdit} \r\n title=\"edit\"\r\n >\r\n <i className=\"iconfont icon-bianji\" />\r\n </div>\r\n <Popconfirm\r\n title=\"Confirm deletion?\"\r\n onConfirm={() => handleDel(nodeData)}\r\n okText=\"Yes\"\r\n cancelText=\"No\"\r\n >\r\n <div className=\"px-1\" title=\"delete\">\r\n <i className=\"iconfont icon-jian\" />\r\n </div>\r\n </Popconfirm>\r\n </>\r\n )}\r\n </span>\r\n );\r\n }, [handleAdd, nodeData, title, toggleEdit, handleDel]);\r\n\r\n const renderChildNode = useCallback(() => {\r\n return editing ? (\r\n <Form.Item\r\n style={{ margin: 0, width: \"100%\" }}\r\n name={nodeData.title}\r\n >\r\n <Input \r\n ref={inputRef} \r\n onPressEnter={save} \r\n onBlur={save} \r\n autoComplete=\"off\" \r\n size=\"small\" \r\n />\r\n </Form.Item>\r\n ) : (\r\n <>\r\n <Typography.Text ellipsis style={{width: \"75%\"}}>{title}</Typography.Text>\r\n {renderIconNode()}\r\n </>\r\n );\r\n }, [editing, nodeData.title, save, title, renderIconNode]);\r\n\r\n return (\r\n <div className=\"tree-title\">\r\n {renderChildNode()}\r\n </div>\r\n )\r\n};\r\n\r\nexport default memo(TreeTitle);\r\n","import { FolderOutlined, FolderOpenOutlined } from '@ant-design/icons'\r\n\r\n/**\r\n * 递归转换目录结构为树形结构\r\n * @param {Array} data - 原始数据\r\n * @param {string} [basePath='0'] - 基础路径\r\n * @param {string} [parentRoute] - 父级路由路径\r\n * @returns {Array} 转换后的树形结构\r\n */\r\nexport const buildDirectoryTree = (data, basePath = '0', parentRoute) => {\r\n if (!Array.isArray(data)) return [];\r\n\r\n return data.reduce((acc, item, index) => {\r\n // 跳过文件类型,只处理目录\r\n if (item.type === 'file') return acc;\r\n\r\n const title = parentRoute ? item.name : item.sd_index ?? item.name;\r\n const key = `${basePath}-${index}`; \r\n const currentPath = parentRoute ? `${parentRoute}/${title}` : item.path;\r\n \r\n const treeNode = {\r\n title, // 文件/文件夹名称\r\n key,\r\n icon: ({ expanded }) => expanded ? <FolderOpenOutlined /> : <FolderOutlined />,\r\n children: [],\r\n isLeaf: false,\r\n isRoot: Boolean(item.sd_index),\r\n path: currentPath,\r\n contents: (item.contents || []).filter(content => content.type === 'file'),\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n // 递归处理子目录\r\n if (Array.isArray(item.contents) && item.contents.length > 0) {\r\n treeNode.children = buildDirectoryTree(\r\n item.contents.filter(content => content.type !== 'file'),\r\n key,\r\n currentPath\r\n );\r\n }\r\n\r\n acc.push(treeNode);\r\n return acc;\r\n }, []);\r\n};\r\n\r\n/**\r\n * 查找树中指定key的节点\r\n * @param {Array} treeData - 树数据\r\n * @param {string} targetKey - 要查找的key\r\n * @returns {Array} 包含匹配节点的数组\r\n */\r\nexport const findTreeNode = (treeData, targetKey) => {\r\n if (!Array.isArray(treeData) || typeof targetKey !== 'string') return [];\r\n \r\n const result = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key === targetKey) {\r\n result.push(node);\r\n // 如果只需要第一个匹配项,可以在这里break\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return result;\r\n};\r\n\r\n/**\r\n * 获取树中所有节点的keys\r\n * @param {Array} treeData - 树数据\r\n * @returns {Array} 包含所有节点keys的数组\r\n */\r\nexport const getAllNodeKeys = (treeData) => {\r\n if (!Array.isArray(treeData)) return [];\r\n \r\n const keys = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key != null) {\r\n keys.push(node.key);\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return keys;\r\n};","import { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { Tree, ConfigProvider, Empty } from 'antd';\r\nimport TreeTitle from '../components/TreeTitle';\r\nimport { buildDirectoryTree, findTreeNode, getAllNodeKeys } from '../utils/treeUtils.js';\r\n\r\nconst useDirectoryTree = ({\r\n getFolderData,\r\n createFolder,\r\n removeFolderFile,\r\n renameFolderFile,\r\n height = 760,\r\n theme = { components: { Tree: { titleHeight: 30 } } }\r\n}) => {\r\n const [treeState, setTreeState] = useState({\r\n data: [],\r\n selectedKeys: [],\r\n expandedKeys: [],\r\n currentPath: \"\",\r\n contents: [],\r\n loading: false\r\n });\r\n const [originTreeData, setOriginTreeData] = useState([]);\r\n\r\n const updateTreeState = (partialState) => {\r\n setTreeState(prev => ({ ...prev, ...partialState }));\r\n };\r\n\r\n // 错误处理\r\n const handleError = (error, operation) => {\r\n console.error(`${operation} ERROR`, error);\r\n // 可以添加通知等统一错误处理\r\n };\r\n\r\n // 路径处理工具\r\n const pathUtils = {\r\n getNewPath: (node, newTitle) => {\r\n const arr = node.path.split('/');\r\n arr[arr.length - 1] = newTitle;\r\n return arr.join('/');\r\n },\r\n isSamePath: (path1, path2) => {\r\n return path1 === path2;\r\n }\r\n };\r\n\r\n // 节点查找工具\r\n const nodeUtils = {\r\n findNode: (treeData, key) => {\r\n let result = [];\r\n return findTreeNode(treeData, key, result);\r\n }\r\n };\r\n\r\n // 获取文件夹数据 文件夹名称为空时返回根目录数据\r\n const fetchFolderData = useCallback(async (initialization = false) => {\r\n try {\r\n const data = await getFolderData({ folder: \"\" });\r\n if (!data?.directoryTree) {\r\n return null;\r\n }\r\n\r\n setOriginTreeData(data.directoryTree);\r\n\r\n // 递归生成treenodes\r\n const treeNodes = buildDirectoryTree(data.directoryTree);\r\n\r\n if (!treeNodes.length) {\r\n return null;\r\n }\r\n\r\n const firstChild = treeNodes[0];\r\n const newState = {\r\n data: treeNodes,\r\n ...(initialization && {\r\n selectedKeys: [firstChild?.key],\r\n expandedKeys: getAllNodeKeys(treeNodes),\r\n currentPath: firstChild?.path,\r\n contents: firstChild?.contents || []\r\n })\r\n };\r\n \r\n updateTreeState(newState);\r\n return treeNodes;\r\n } catch (error) {\r\n handleError(error, 'GET FOLDER DATA');\r\n }\r\n }, []);\r\n\r\n // 初始化数据\r\n useEffect(() => {\r\n fetchFolderData(true);\r\n }, [fetchFolderData]);\r\n \r\n // 创建文件夹\r\n const handleCreate = useCallback(async (node, newTitle) => {\r\n if (!newTitle?.trim()) return false;\r\n\r\n try {\r\n const path = `${node.path}/${newTitle}`;\r\n await createFolder({ path });\r\n const newTreeData = await fetchFolderData();\r\n\r\n // 找到新增节点的父节点\r\n const parentNode = nodeUtils.findNode(newTreeData, node.key);\r\n if (parentNode?.[0]?.children) {\r\n const expectedPath = `${node.path}/${newTitle}`;\r\n // 通过 path 找到新增节点,得到新增节点的key\r\n const addedNode = parentNode[0].children.find(ch => \r\n pathUtils.isSamePath(ch.path, expectedPath)\r\n );\r\n if (addedNode) {\r\n updateTreeState({\r\n expandedKeys: [...treeState.expandedKeys, addedNode.key, parentNode[0].key]\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n handleError(error, 'CREATE FOLDER');\r\n }\r\n }, [fetchFolderData, treeState.expandedKeys])\r\n \r\n // 删除文件/文件夹\r\n const handleRemove = useCallback(async (node) => {\r\n if (!node.path) return;\r\n\r\n try {\r\n await removeFolderFile({\r\n paths: [\r\n { path: node.path }\r\n ]\r\n });\r\n // 如果删除的是当前选中节点,则重新初始化\r\n const shouldReinitialize = treeState.selectedKeys[0] === node.key;\r\n await fetchFolderData(shouldReinitialize);\r\n } catch (error) {\r\n handleError(error, 'REMOVE FOLDER/FILE');\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 修改文件/文件夹\r\n const handleRename = useCallback(async (node) => {\r\n const newPath = pathUtils.getNewPath(node, node.title);\r\n if (pathUtils.isSamePath(node.path, newPath)) return false;\r\n\r\n try {\r\n await renameFolderFile({ \r\n old_path: node.path, \r\n new_path: newPath \r\n });\r\n await fetchFolderData();\r\n } catch (error) {\r\n handleError(error, 'RENAME FOLDER/FILE');\r\n }\r\n }, [fetchFolderData])\r\n \r\n // 选择节点\r\n const onSelect = useCallback(async (keys, info) => {\r\n if (!keys.length || (keys[0] === treeState.selectedKeys[0] && \r\n pathUtils.isSamePath(info.node.path, treeState.currentPath))) return;\r\n\r\n updateTreeState({ \r\n selectedKeys: keys,\r\n currentPath: info.node.path,\r\n loading: true \r\n });\r\n\r\n try {\r\n // 模拟延迟加载\r\n // eslint-disable-next-line no-promise-executor-return\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n updateTreeState({\r\n contents: info.node.contents,\r\n loading: false\r\n });\r\n } catch (error) {\r\n handleError(error, 'SELECT NODE');\r\n updateTreeState({ loading: false });\r\n }\r\n }, [treeState.selectedKeys, treeState.currentPath]);\r\n \r\n // 展开节点\r\n const onExpand = useCallback((keys) => {\r\n updateTreeState({ expandedKeys: keys });\r\n }, []);\r\n \r\n // 上传右侧文件或删除右侧文件 成功后的回调函数\r\n const updateFileContents = useCallback(async () => {\r\n // 找到当前选中的节点,更新当前节点的 contents\r\n const newTreeData = await fetchFolderData();\r\n const selectedNode = nodeUtils.findNode(newTreeData, treeState.selectedKeys[0]);\r\n if (selectedNode?.[0]) {\r\n updateTreeState({\r\n contents: selectedNode[0].contents\r\n });\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 删除文件\r\n const removeFile = useCallback(async (url) => {\r\n try {\r\n await removeFolderFile({ path: url });\r\n await updateFileContents();\r\n } catch (error) {\r\n handleError(error, 'REMOVE FILE');\r\n }\r\n }, [updateFileContents]);\r\n\r\n const MemoizedTree = useMemo(() => {\r\n if (!treeState.data?.length) {\r\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\r\n }\r\n\r\n return (\r\n <div key=\"folder-directory\" style={{ paddingTop: 16 }}>\r\n <ConfigProvider theme={theme}>\r\n <Tree\r\n blockNode\r\n showIcon\r\n selectedKeys={treeState.selectedKeys}\r\n expandedKeys={treeState.expandedKeys}\r\n onSelect={onSelect}\r\n onExpand={onExpand}\r\n treeData={treeState.data}\r\n titleRender={(nodeData) => \r\n <TreeTitle\r\n title={nodeData.title}\r\n nodeData={nodeData}\r\n handleSave={handleRename}\r\n handleDel={handleRemove}\r\n handleAdd={handleCreate}\r\n />\r\n }\r\n height={height}\r\n />\r\n </ConfigProvider>\r\n </div>\r\n );\r\n }, [treeState.data, treeState.selectedKeys, treeState.expandedKeys]);\r\n\r\n return {\r\n directoryTree: MemoizedTree,\r\n contents: treeState.contents,\r\n currentPath: treeState.currentPath,\r\n loading: treeState.loading,\r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n };\r\n}\r\n\r\nexport { useDirectoryTree };","export const createUrlBuilder = (config = {}) => {\r\n const {\r\n baseUrl = '',\r\n isDev = false,\r\n devBaseUrl = '',\r\n isBrowser = false\r\n } = config;\r\n\r\n return (path) => {\r\n if (!path) return '';\r\n \r\n // 如果传入的是完整 URL,直接返回\r\n if (/^https?:\\/\\//.test(path)) {\r\n return path;\r\n }\r\n\r\n // 去除 path 开头可能的多余斜杠\r\n const cleanPath = path.replace(/^\\/+/, '');\r\n\r\n // 开发环境使用 devBaseUrl,否则使用 baseUrl\r\n const host = isDev ? devBaseUrl : baseUrl;\r\n \r\n // 如果没有配置 baseUrl,则根据环境返回相对路径或完整路径\r\n if (!host) {\r\n return isBrowser ? `/${cleanPath}` : cleanPath;\r\n }\r\n\r\n return host ? `${host}/${cleanPath}` : `/${cleanPath}`;\r\n };\r\n};","import { useRef, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport { App, Button, Checkbox, Flex, Space } from 'antd';\r\nimport { CloudUploadOutlined, ExclamationCircleFilled } from '@ant-design/icons';\r\nimport axios from 'axios';\r\nimport MediaGrid from './components/MediaGrid';\r\nimport SelectFolderPathModal from './components/SelectFolderPathModal';\r\nimport UploadProgress from './components/UploadProgress';\r\nimport { useDirectoryTree } from './hooks/useDirectoryTree';\r\nimport { createUrlBuilder } from './utils/urlBuilder';\r\nimport \"./style/resources.less\";\r\n\r\nconst ResourcesView = ({\r\n apiConfig = {},\r\n features = {},\r\n className = '',\r\n style = {},\r\n renderTreeHeader,\r\n renderGridHeader,\r\n acceptFileTypes = \"video/*,.mxf,application/mxf,video/mxf\",\r\n uploadTimeout = 60 * 60 * 1000,\r\n searchPlaceholder = \"Search resources...\"\r\n}) => {\r\n const { message, modal } = App.useApp();\r\n\r\n // 合并默认配置和传入配置\r\n const mergedApiConfig = useMemo(() => ({\r\n upload: '/api/dvr/media/source/upload',\r\n download: '/download',\r\n ...apiConfig\r\n }), [apiConfig]);\r\n\r\n const mergedFeatures = useMemo(() => ({\r\n upload: true,\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n search: true,\r\n batchOperations: true,\r\n ...features\r\n }), [features]);\r\n \r\n const {\r\n directoryTree,\r\n contents,\r\n currentPath,\r\n loading, \r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n } = useDirectoryTree({\r\n getFolderData: mergedApiConfig.getFolderData,\r\n createFolder: mergedApiConfig.createFolder,\r\n removeFolderFile: mergedApiConfig.removeFolderFile,\r\n renameFolderFile: mergedApiConfig.renameFolderFile,\r\n });\r\n\r\n const [showProgress, setShowProgress] = useState(false);\r\n const [percent, setPercent] = useState(0);\r\n const inputRef = useRef(null);\r\n const uploadController = useRef(new AbortController());\r\n const [modalVisible, setModalVisible] = useState(false);\r\n // 处理批量操作\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [indeterminate, setIndeterminate] = useState(false);\r\n const [checkAll, setCheckAll] = useState(false);\r\n const [batchLoading, setBatchLoading] = useState(false);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n // 过滤内容\r\n const filteredContents = useMemo(() => {\r\n if (!keyword) return contents;\r\n return contents.filter(item =>\r\n item.name.toLowerCase().includes(keyword.toLowerCase())\r\n );\r\n }, [contents, keyword]);\r\n\r\n // 在组件卸载时取消上传\r\n useEffect(() => {\r\n return () => uploadController.current?.abort();\r\n }, []);\r\n\r\n // 重置批量状态的效果\r\n useEffect(() => {\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n }, [currentPath]);\r\n\r\n // 上传相关函数\r\n const onTriggerUpload = useCallback(() => {\r\n inputRef.current?.click();\r\n }, []);\r\n\r\n const onUploadFile = async (event) => {\r\n const files = event.target.files;\r\n if (!files?.length) return;\r\n \r\n // 初始化上传状态\r\n setShowProgress(true);\r\n setPercent(0);\r\n\r\n try {\r\n await uploadFiles(files, currentPath);\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n await updateFileContents();\r\n } catch (error) {\r\n if (axios.isCancel(error)) {\r\n console.log('Upload canceled');\r\n } else if (error.response) {\r\n console.error(`Upload failed: ${error.response.data?.message || error.response.status}`);\r\n } else {\r\n console.error(`Upload error: ${error.message}`);\r\n }\r\n } finally {\r\n resetUploadState();\r\n }\r\n }\r\n\r\n const uploadFiles = async (files, folder) => {\r\n // 计算所有文件的总大小\r\n const totalSize = calculateTotalSize(files);\r\n // 存储每个文件的上一次 loaded 值(避免重复计算)\r\n const previousLoadedMap = new Map();\r\n let uploadedSize = 0; // 记录已上传的字节数\r\n\r\n const uploadTasks = Array.from(files).map(file => \r\n uploadSingleFile(file, folder, previousLoadedMap, (newLoaded) => {\r\n uploadedSize += newLoaded;\r\n updateProgress(uploadedSize, totalSize);\r\n })\r\n );\r\n\r\n await Promise.all(uploadTasks);\r\n}\r\n\r\n // 计算总文件大小\r\n const calculateTotalSize = (files) => \r\n Array.from(files).reduce((sum, file) => sum + file.size, 0);\r\n\r\n // 上传单个文件\r\n const uploadSingleFile = (file, folder, previousLoadedMap, onProgress) => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('folder', folder);\r\n\r\n return axios.post(mergedApiConfig.upload, formData, {\r\n timeout: uploadTimeout,\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n // signal: uploadController.current.signal,\r\n onUploadProgress: (progressEvent) => {\r\n if (progressEvent.lengthComputable) {\r\n // 获取当前文件的上一次 loaded 值(默认 0)\r\n const previousLoaded = previousLoadedMap.get(file.name) || 0;\r\n // 计算新增的字节数(避免重复累加)\r\n const newLoaded = progressEvent.loaded - previousLoaded;\r\n // 更新当前文件的 loaded 值\r\n previousLoadedMap.set(file.name, progressEvent.loaded);\r\n onProgress(newLoaded);\r\n }\r\n }\r\n })\r\n }\r\n\r\n const updateProgress = (uploadedSize, totalSize) => {\r\n const totalPercent = Math.round((uploadedSize / totalSize) * 100);\r\n setPercent(totalPercent);\r\n };\r\n\r\n // 重置上传状态\r\n const resetUploadState = () => {\r\n setShowProgress(false);\r\n setPercent(0);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n // 文件操作函数\r\n const downloadFile = async(url) => {\r\n try {\r\n const isDev = process.env.NODE_ENV === 'development';\r\n const baseUrl = isDev \r\n ? process.env.API_HOST // 开发环境默认值\r\n : window.location.origin; // 生产环境用当前域名\r\n\r\n const link = document.createElement('a');\r\n link.href = `${baseUrl}${mergedApiConfig.download}/${url}`;\r\n // link.download = filename;\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error(\"Download failed:\", error);\r\n }\r\n }\r\n\r\n const copyFile = () => {\r\n setModalVisible(true);\r\n }\r\n\r\n const onContextMenu = (key, item) => {\r\n if (key === 'del') removeFile(item.url);\r\n if (key === 'download') downloadFile(item.url);\r\n if (key === 'copy') copyFile(item.url);\r\n };\r\n\r\n const handleBatchRemove = useCallback(async () => {\r\n if (!selectedItems.length) return;\r\n \r\n modal.confirm({\r\n icon: <ExclamationCircleFilled />,\r\n title: `Are you sure you want to delete ${selectedItems.length} files?`,\r\n cancelText: \"No\",\r\n okText: \"Yes\",\r\n onOk: async () => {\r\n try {\r\n // 批量处理所有删除请求\r\n await mergedApiConfig.removeFolderFile({\r\n paths: selectedItems.map(itemUrl => ({ path: itemUrl }))\r\n });\r\n \r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n await updateFileContents(); // 刷新文件列表\r\n } catch (error) {\r\n console.error('Batch deletion error:', error);\r\n }\r\n }\r\n });\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n const handleCopyConfirm = useCallback(async (newPath) => {\r\n setBatchLoading(true);\r\n \r\n try {\r\n // 批量处理所有拷贝请求\r\n await mergedApiConfig.copyFile({\r\n old_paths: selectedItems.map(itemUrl => ({ old_path: itemUrl })),\r\n new_path: newPath\r\n });\r\n\r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n message.success('Success');\r\n setModalVisible(false);\r\n\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000)); \r\n await updateFileContents();\r\n } catch (error) {\r\n console.error(\"Batch copy error:\", error);\r\n } finally {\r\n setBatchLoading(false);\r\n }\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n // 处理单个项目的选择变化\r\n const handleSelectChange = (item, checked) => {\r\n const newSelectedItems = checked \r\n ? [...selectedItems, item.url] \r\n : selectedItems.filter(url => url !== item.url);\r\n \r\n setSelectedItems(newSelectedItems);\r\n setIndeterminate(!!newSelectedItems.length && newSelectedItems.length !== filteredContents.length);\r\n setCheckAll(newSelectedItems.length === filteredContents.length);\r\n };\r\n\r\n // 处理全选/取消全选\r\n const handleSelectAll = e => {\r\n const checked = e.target.checked;\r\n setSelectedItems(checked ? filteredContents.map(item => item.url) : []);\r\n setIndeterminate(false);\r\n setCheckAll(checked);\r\n };\r\n\r\n // 搜索处理\r\n const handleSearchChange = (e) => {\r\n setKeyword(e.target.value);\r\n };\r\n\r\n // 创建 URL 构建器\r\n const getFullUrl = useMemo(() => {\r\n return createUrlBuilder({\r\n baseUrl: apiConfig.baseUrl,\r\n devBaseUrl: apiConfig.devBaseUrl,\r\n isDev: process.env.NODE_ENV === 'development',\r\n isBrowser: typeof window !== 'undefined'\r\n });\r\n }, [apiConfig.baseUrl, apiConfig.devBaseUrl]);\r\n\r\n return (\r\n <div className={`resources-view ${className}`} style={style}>\r\n <div className=\"content-container\">\r\n <div className=\"directory-tree\">\r\n {renderTreeHeader ? renderTreeHeader() : (\r\n <div className=\"search-bar\"></div>\r\n )}\r\n {directoryTree}\r\n </div>\r\n <div className=\"folder-contents\">\r\n <Flex justify=\"center\" align=\"center\" className=\"search-bar\">\r\n {mergedFeatures.search && (\r\n <input\r\n type=\"text\"\r\n placeholder={searchPlaceholder}\r\n value={keyword}\r\n onChange={handleSearchChange}\r\n className=\"search-input\"\r\n />\r\n )}\r\n {mergedFeatures.upload && (\r\n <>\r\n <CloudUploadOutlined \r\n className=\"upload-icon\" \r\n title=\"upload\" \r\n onClick={onTriggerUpload} \r\n />\r\n <input\r\n ref={inputRef} \r\n type=\"file\"\r\n onChange={onUploadFile} \r\n className=\"hidden\" \r\n accept={acceptFileTypes}\r\n multiple\r\n />\r\n </>\r\n )}\r\n </Flex>\r\n <div \r\n className=\"media-grid-container\"\r\n onContextMenu={(e) => e.preventDefault()}\r\n >\r\n {renderGridHeader ? renderGridHeader() : (\r\n filteredContents.length > 0 && mergedFeatures.batchOperations && (\r\n <div className=\"batch-operations\">\r\n <Space size=\"middle\">\r\n <Checkbox \r\n indeterminate={indeterminate}\r\n checked={checkAll}\r\n onChange={handleSelectAll}\r\n >\r\n Select All\r\n </Checkbox>\r\n <Button\r\n type=\"primary\"\r\n disabled={!selectedItems.length}\r\n onClick={() => setModalVisible(true)}\r\n >\r\n Batch Copy\r\n </Button>\r\n <Button\r\n className=\"btn-gray\"\r\n disabled={!selectedItems.length}\r\n onClick={handleBatchRemove}\r\n >\r\n Batch Delete\r\n </Button>\r\n </Space>\r\n </div>\r\n )\r\n )}\r\n <MediaGrid\r\n items={filteredContents} \r\n loading={loading} \r\n onContextMenu={mergedFeatures.delete || mergedFeatures.download || mergedFeatures.copy ? onContextMenu : null}\r\n selectedKeys={selectedItems}\r\n onSelectChange={mergedFeatures.batchOperations ? handleSelectChange : null}\r\n onClick={() => {}}\r\n features={mergedFeatures}\r\n getFullUrl={getFullUrl}\r\n />\r\n </div>\r\n </div>\r\n </div> \r\n {showProgress && <UploadProgress percent={percent} />}\r\n <SelectFolderPathModal\r\n open={modalVisible}\r\n directoryTree={originTreeData}\r\n batchLoading={batchLoading}\r\n onClose={() => setModalVisible(false)}\r\n onOk={handleCopyConfirm}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ResourcesView;\r\n"],"names":["BASE_MENU_ITEMS","label","key","featureKey","MediaGridItem","memo","_ref","item","onContextMenu","menuItems","DEFAULT_MENU_ITEMS","checked","onSelectChange","showCheckbox","onClick","getFullUrl","handleMenuClick","useCallback","_ref2","handleItemClick","handleCheckboxChange","e","stopPropagation","target","_jsx","Dropdown","menu","items","trigger","disabled","children","_jsxs","List","Item","className","concat","title","name","Checkbox","onChange","Image","width","height","src","head_thumbnail","preview","Typography","Text","ellipsis","MediaGrid","_ref3","loading","selectedKeys","customMenuItems","gridConfig","gutter","column","features","mergedFeatures","useMemo","_objectSpread","download","copy","delete","filter","renderItem","length","includes","url","Spin","spinning","size","grid","dataSource","pagination","SelectFolderPathModal","open","onClose","onOk","directoryTree","externalLoading","batchLoading","okText","cancelText","placeholder","formItemLabel","showFullPath","allowClear","expandTrigger","form","Form","useForm","options","setOptions","useState","internalLoading","setInternalLoading","selectedPath","setSelectedPath","convertToCascaderOptions","treeData","Array","isArray","map","option","value","id","sd_index","isLeaf","contents","path","rawData","child","type","Boolean","useEffect","formattedOptions","error","console","getSelectedNodes","valuePath","currentOptions","collectedNodes","arguments","undefined","currentValue","currentNode","find","opt","push","slice","handleOk","validateFields","then","values","message","warning","selectedNodes","lastNode","resultPath","node","join","catch","handleAfterClose","resetFields","Modal","onCancel","afterClose","destroyOnHidden","footer","Button","Cascader","changeOnSelect","style","UploadProgress","percent","Progress","PopoverContent","forwardRef","ref","onConfirm","setValue","handleConfirm","confirm","handleKeyDown","_Fragment","marginBottom","Input","onKeyDown","autoFocus","Flex","justify","gap","EditablePopover","add","inputRef","useRef","setOpen","current","timer","setTimeout","_inputRef$current","focus","clearTimeout","hide","newTitle","callback","handleOpenChange","newOpen","Popover","content","onOpenChange","EditableContext","createContext","TreeTitle","props","_extends","_objectDestructuringEmpty","component","Provider","TreeTitleNode","nodeData","handleSave","handleDel","handleAdd","editing","setEditing","useContext","toggleEdit","prev","setFieldsValue","save","errInfo","renderIconNode","isRoot","Popconfirm","renderChildNode","margin","onPressEnter","onBlur","autoComplete","buildDirectoryTree","data","basePath","parentRoute","reduce","acc","index","_item$sd_index","currentPath","treeNode","icon","expanded","FolderOpenOutlined","FolderOutlined","findTreeNode","targetKey","result","stack","pop","getAllNodeKeys","keys","useDirectoryTree","getFolderData","createFolder","removeFolderFile","renameFolderFile","theme","components","Tree","titleHeight","treeState","setTreeState","expandedKeys","originTreeData","setOriginTreeData","updateTreeState","partialState","handleError","operation","pathUtils","getNewPath","arr","split","isSamePath","path1","path2","nodeUtils","findNode","fetchFolderData","initialization","folder","treeNodes","firstChild","newState","handleCreate","trim","_parentNode$","newTreeData","parentNode","expectedPath","addedNode","ch","handleRemove","paths","shouldReinitialize","handleRename","newPath","old_path","new_path","onSelect","info","Promise","resolve","onExpand","updateFileContents","selectedNode","removeFile","MemoizedTree","_treeState$data","Empty","image","PRESENTED_IMAGE_SIMPLE","paddingTop","ConfigProvider","blockNode","showIcon","titleRender","createUrlBuilder","config","baseUrl","isDev","devBaseUrl","isBrowser","test","cleanPath","replace","host","ResourcesView","apiConfig","renderTreeHeader","renderGridHeader","acceptFileTypes","uploadTimeout","searchPlaceholder","modal","App","useApp","mergedApiConfig","upload","search","batchOperations","showProgress","setShowProgress","setPercent","uploadController","AbortController","modalVisible","setModalVisible","selectedItems","setSelectedItems","indeterminate","setIndeterminate","checkAll","setCheckAll","setBatchLoading","keyword","setKeyword","filteredContents","toLowerCase","_uploadController$cur","abort","onTriggerUpload","click","onUploadFile","event","files","uploadFiles","axios","isCancel","log","response","_error$response$data","status","resetUploadState","totalSize","calculateTotalSize","previousLoadedMap","Map","uploadedSize","uploadTasks","from","file","uploadSingleFile","newLoaded","updateProgress","all","sum","onProgress","formData","FormData","append","post","timeout","headers","onUploadProgress","progressEvent","lengthComputable","previousLoaded","get","loaded","set","totalPercent","Math","round","downloadFile","process","env","NODE_ENV","API_HOST","window","location","origin","link","document","createElement","href","display","body","appendChild","removeChild","copyFile","handleBatchRemove","ExclamationCircleFilled","itemUrl","handleCopyConfirm","old_paths","success","handleSelectChange","newSelectedItems","handleSelectAll","handleSearchChange","align","CloudUploadOutlined","accept","multiple","preventDefault","Space"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/MediaGrid/index.jsx","../src/components/SelectFolderPathModal/index.jsx","../src/components/UploadProgress/index.jsx","../src/components/TreeTitle/EditablePopover.jsx","../src/components/TreeTitle/index.jsx","../src/utils/treeUtils.js","../src/hooks/useDirectoryTree.js","../src/utils/urlBuilder.js","../src/ResourcesView.jsx"],"sourcesContent":["import { Dropdown, Image, List, Typography, Spin, Checkbox } from 'antd';\r\nimport { useCallback, memo, useMemo } from 'react';\r\n\r\n// 基础菜单项配置\r\nconst BASE_MENU_ITEMS = [\r\n {\r\n label: 'Download',\r\n key: 'download',\r\n featureKey: 'download'\r\n },\r\n {\r\n label: 'Copy',\r\n key: 'copy',\r\n featureKey: 'copy'\r\n },\r\n {\r\n label: 'Delete',\r\n key: 'del',\r\n featureKey: 'delete'\r\n }\r\n];\r\n\r\nconst MediaGridItem = memo(({\r\n item, \r\n onContextMenu, \r\n menuItems = DEFAULT_MENU_ITEMS,\r\n checked,\r\n onSelectChange,\r\n showCheckbox = true,\r\n onClick,\r\n getFullUrl\r\n}) => {\r\n const handleMenuClick = useCallback(\r\n ({ key }) => onContextMenu(key, item),\r\n [item, onContextMenu]\r\n );\r\n\r\n const handleItemClick = useCallback(() => {\r\n onClick?.(item);\r\n }, [item, onClick]);\r\n\r\n const handleCheckboxChange = useCallback((e) => {\r\n e.stopPropagation();\r\n onSelectChange?.(item, e.target.checked);\r\n }, [item, onSelectChange]);\r\n\r\n return (\r\n <Dropdown \r\n menu={{ items: menuItems, onClick: handleMenuClick }} \r\n trigger={['contextMenu']}\r\n disabled={!onContextMenu}\r\n >\r\n <List.Item \r\n className={`media-grid-item ${checked ? 'media-grid-item-selected' : ''}`}\r\n title={item.name}\r\n onClick={handleItemClick}\r\n >\r\n {showCheckbox && (\r\n <div\r\n className=\"media-grid-checkbox-wrapper\" \r\n onClick={e => e.stopPropagation()}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onChange={handleCheckboxChange}\r\n />\r\n </div>\r\n )}\r\n <div className=\"media-grid-thumbnail\">\r\n <Image\r\n width=\"100%\"\r\n height=\"100%\"\r\n src={getFullUrl(item.head_thumbnail)}\r\n preview={false}\r\n />\r\n </div>\r\n <div className=\"media-grid-info\">\r\n <Typography.Text ellipsis>\r\n {item.name}\r\n </Typography.Text>\r\n </div>\r\n </List.Item>\r\n </Dropdown>\r\n );\r\n});\r\n\r\nconst MediaGrid = memo(({ \r\n items = [], \r\n loading = false, \r\n onContextMenu,\r\n selectedKeys = [],\r\n onSelectChange,\r\n menuItems: customMenuItems,\r\n gridConfig = { gutter: 0, column: 6 },\r\n showCheckbox = true,\r\n onClick,\r\n features = {},\r\n getFullUrl\r\n}) => {\r\n // 合并默认 features 和传入的 features\r\n const mergedFeatures = useMemo(() => ({\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n ...features\r\n }), [features]);\r\n\r\n // 根据 features 动态生成 menuItems\r\n const menuItems = useMemo(() => {\r\n // 如果传入了自定义 menuItems,则优先使用\r\n if (customMenuItems) return customMenuItems;\r\n \r\n // 否则根据 features 过滤出可用的菜单项\r\n return BASE_MENU_ITEMS.filter(item => \r\n mergedFeatures[item.featureKey] !== false\r\n );\r\n }, [customMenuItems, mergedFeatures]);\r\n\r\n const renderItem = useCallback(\r\n (item) => (\r\n <MediaGridItem \r\n item={item} \r\n onContextMenu={menuItems.length > 0 ? onContextMenu : null}\r\n menuItems={menuItems}\r\n checked={selectedKeys.includes(item.url)} // 使用url作为唯一标识\r\n onSelectChange={onSelectChange}\r\n showCheckbox={showCheckbox}\r\n onClick={onClick}\r\n getFullUrl={getFullUrl} // 传递 getFullUrl 给子组件\r\n />\r\n ),\r\n [onContextMenu, menuItems, selectedKeys, onSelectChange, showCheckbox, onClick]\r\n );\r\n\r\n return (\r\n <Spin\r\n spinning={loading} \r\n size=\"large\"\r\n >\r\n <List\r\n grid={gridConfig}\r\n dataSource={items}\r\n renderItem={renderItem}\r\n pagination={false}\r\n // locale={{ emptyText: 'No media files found' }}\r\n />\r\n </Spin>\r\n );\r\n});\r\n\r\nexport default MediaGrid;","import { Button, Cascader, Form, Modal, Spin } from \"antd\";\r\nimport { memo, useEffect, useState, useCallback } from \"react\";\r\n\r\nconst SelectFolderPathModal = ({\r\n open, \r\n onClose, \r\n onOk, \r\n directoryTree,\r\n loading: externalLoading,\r\n batchLoading,\r\n title = \"Select Folder Path\",\r\n okText = \"Copy\",\r\n cancelText = \"Cancel\",\r\n placeholder = \"Please select (click arrow to expand)\",\r\n width = 520,\r\n formItemLabel = \"Folder Path\",\r\n showFullPath = false,\r\n disabled = false,\r\n allowClear = true,\r\n expandTrigger = \"hover\"\r\n}) => {\r\n const [form] = Form.useForm();\r\n const [options, setOptions] = useState([]);\r\n const [internalLoading, setInternalLoading] = useState(false);\r\n const [selectedPath, setSelectedPath] = useState([]);\r\n\r\n const loading = externalLoading || internalLoading;\r\n\r\n // 将 directoryTree 转换为 Cascader 需要的 options 格式\r\n const convertToCascaderOptions = useCallback((treeData) => {\r\n if (!treeData || !Array.isArray(treeData)) return [];\r\n\r\n return treeData.map(item => {\r\n if (!item) return null;\r\n\r\n const option = {\r\n value: item.id,\r\n label: item.sd_index || item.name,\r\n isLeaf: !item.contents || item.contents.length === 0,\r\n path: item.path,\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n if (item.contents && Array.isArray(item.contents) && item.contents.length > 0) {\r\n // 递归处理子目录\r\n option.children = convertToCascaderOptions(\r\n item.contents.filter(child => child && child.type === 'directory')\r\n );\r\n }\r\n\r\n return option;\r\n }).filter(Boolean);;\r\n }, []);\r\n\r\n // 初始化 options\r\n useEffect(() => {\r\n if (open && directoryTree) {\r\n setInternalLoading(true);\r\n try {\r\n const formattedOptions = convertToCascaderOptions(directoryTree);\r\n setOptions(formattedOptions);\r\n } catch (error) {\r\n console.error('Error converting directory tree:', error);\r\n } finally {\r\n setInternalLoading(false);\r\n }\r\n }\r\n }, [open, directoryTree, convertToCascaderOptions]);\r\n\r\n // 根据value路径查找对应的节点信息\r\n const getSelectedNodes = useCallback((valuePath, currentOptions, collectedNodes = []) => {\r\n if (!valuePath || valuePath.length === 0 || !currentOptions) return collectedNodes;\r\n \r\n const currentValue = valuePath[0];\r\n const currentNode = currentOptions.find(opt => opt && opt.value === currentValue);\r\n \r\n if (!currentNode) return collectedNodes;\r\n \r\n collectedNodes.push(currentNode);\r\n \r\n if (valuePath.length > 1 && currentNode.children) {\r\n return getSelectedNodes(\r\n valuePath.slice(1), \r\n currentNode.children, \r\n collectedNodes\r\n );\r\n }\r\n \r\n return collectedNodes;\r\n }, []);\r\n\r\n const handleOk = useCallback(() => {\r\n form.validateFields().then(values => {\r\n if (!values.path) {\r\n message.warning('Please select a folder path');\r\n return;\r\n }\r\n\r\n const selectedNodes = getSelectedNodes(values.path, options);\r\n if (selectedNodes.length === 0) {\r\n message.warning('Invalid path selected');\r\n return;\r\n }\r\n\r\n const lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n // 返回完整路径或最后节点路径\r\n const resultPath = showFullPath \r\n ? selectedNodes.map(node => node.path).join('/')\r\n : lastNode.path;\r\n\r\n onOk?.(resultPath);\r\n }).catch(error => {\r\n console.error('Validation failed:', error);\r\n });\r\n }, [form, options, getSelectedNodes, onOk, showFullPath]);\r\n\r\n const handleAfterClose = useCallback(() => {\r\n form.resetFields();\r\n setSelectedPath([]);\r\n }, [form]);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n open={open}\r\n onCancel={onClose}\r\n afterClose={handleAfterClose}\r\n width={width}\r\n destroyOnHidden \r\n footer={[\r\n <Button \r\n key=\"cancel\"\r\n onClick={onClose}\r\n disabled={batchLoading}\r\n >\r\n {cancelText}\r\n </Button>,\r\n <Button \r\n key=\"submit\" \r\n type=\"primary\" \r\n onClick={handleOk}\r\n loading={batchLoading}\r\n disabled={disabled || selectedPath.length === 0}\r\n >\r\n {okText}\r\n </Button>\r\n ]}\r\n >\r\n <Spin spinning={loading}>\r\n <Form form={form}>\r\n <Form.Item name=\"path\" label={formItemLabel}>\r\n <Cascader\r\n options={options}\r\n changeOnSelect\r\n placeholder={placeholder}\r\n style={{ width: '100%' }}\r\n disabled={disabled || loading}\r\n expandTrigger={expandTrigger}\r\n allowClear={allowClear}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </Spin>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default memo(SelectFolderPathModal);","import { Progress } from 'antd';\r\nimport { memo } from 'react';\r\n\r\nconst UploadProgress = ({ percent }) => (\r\n <div className=\"upload-progress\">\r\n <Progress type=\"circle\" percent={percent} />\r\n </div>\r\n);\r\n\r\nexport default memo(UploadProgress);","import { Input, Form, Popover, Button, Flex } from 'antd';\r\nimport { forwardRef, useEffect, useRef, useState, useCallback, memo } from 'react';\r\n\r\nconst PopoverContent = forwardRef(({ onClose, onConfirm }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n const handleConfirm = useCallback(() => {\r\n onConfirm(value, () => setValue(''));\r\n }, [confirm, value]);\r\n\r\n const handleKeyDown = useCallback((e) => {\r\n if (e.key === 'Enter') {\r\n handleConfirm();\r\n }\r\n }, [handleConfirm]);\r\n \r\n return (\r\n <>\r\n <Form.Item\r\n label=\"Folder Name\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n <Input\r\n ref={ref}\r\n value={value} \r\n onChange={(e) => setValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n size=\"small\"\r\n style={{ width: 120 }}\r\n autoFocus\r\n />\r\n </Form.Item>\r\n <Flex justify=\"flex-end\" gap=\"small\">\r\n <Button type=\"default\" size=\"small\" onClick={onClose}>Close</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleConfirm}>OK</Button>\r\n </Flex>\r\n </>\r\n )\r\n})\r\n\r\nconst EditablePopover = ({ children, add }) => {\r\n const inputRef = useRef(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (open && inputRef.current) {\r\n const timer = setTimeout(() => {\r\n inputRef.current?.focus();\r\n }, 100);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [open]);\r\n\r\n // 使用 open 属性控制浮层显示\r\n const hide = useCallback(() => {\r\n setOpen(false);\r\n }, []);\r\n \r\n const handleConfirm = useCallback((newTitle, callback) => {\r\n add(newTitle);\r\n callback?.();\r\n hide();\r\n }, [add, hide]);\r\n\r\n const handleOpenChange = useCallback((newOpen) => {\r\n setOpen(newOpen);\r\n }, []);\r\n\r\n return (\r\n <Popover\r\n content={\r\n <PopoverContent\r\n ref={inputRef}\r\n onClose={hide}\r\n onConfirm={handleConfirm}\r\n />\r\n }\r\n trigger=\"click\"\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n destroyOnHidden\r\n >\r\n {children}\r\n </Popover>\r\n )\r\n}\r\n\r\nexport default memo(EditablePopover);","import { Typography, Popconfirm, Input, Form } from 'antd';\r\nimport { createContext, memo, useContext, useEffect, useRef, useState, useCallback } from 'react';\r\nimport EditablePopover from './EditablePopover';\r\n\r\nconst EditableContext = createContext(null);\r\n\r\nconst TreeTitle = ({ ...props }) => {\r\n const [form] = Form.useForm();\r\n\r\n return (\r\n <Form form={form} component={false}>\r\n <EditableContext.Provider value={form}>\r\n <TreeTitleNode {...props} />\r\n </EditableContext.Provider>\r\n </Form>\r\n );\r\n};\r\n\r\nconst TreeTitleNode = ({\r\n title,\r\n nodeData,\r\n handleSave,\r\n handleDel,\r\n handleAdd\r\n}) => {\r\n const [editing, setEditing] = useState(false);\r\n const inputRef = useRef(null);\r\n const form = useContext(EditableContext);\r\n\r\n useEffect(() => {\r\n if (editing) {\r\n inputRef.current?.focus();\r\n }\r\n }, [editing]);\r\n\r\n const toggleEdit = useCallback(() => {\r\n setEditing(prev => !prev);\r\n form.setFieldsValue({\r\n [nodeData.title]: nodeData.title,\r\n });\r\n }, [form, nodeData.title]);\r\n\r\n const save = useCallback(async () => {\r\n try {\r\n const values = await form.validateFields();\r\n toggleEdit();\r\n handleSave({\r\n ...nodeData,\r\n title: values[nodeData.title]\r\n });\r\n } catch (errInfo) {\r\n console.error('Save failed:', errInfo);\r\n }\r\n }, [form, toggleEdit, handleSave, nodeData]);\r\n\r\n // 新建文件夹 \r\n // 修改文件/文件夹\r\n // 删除文件/文件夹\r\n const renderIconNode = useCallback(() => {\r\n return (\r\n <span className=\"tree-node-icons\" onClick={(e) => e.stopPropagation()}>\r\n <EditablePopover add={(newTitle) => handleAdd(nodeData, newTitle)}>\r\n <div className=\"px-1\" title=\"create\">\r\n <i className=\"iconfont icon-jia\" />\r\n </div>\r\n </EditablePopover>\r\n \r\n {!nodeData.isRoot && (\r\n <>\r\n <div \r\n className=\"px-1\" \r\n onClick={toggleEdit} \r\n title=\"edit\"\r\n >\r\n <i className=\"iconfont icon-bianji\" />\r\n </div>\r\n <Popconfirm\r\n title=\"Confirm deletion?\"\r\n onConfirm={() => handleDel(nodeData)}\r\n okText=\"Yes\"\r\n cancelText=\"No\"\r\n >\r\n <div className=\"px-1\" title=\"delete\">\r\n <i className=\"iconfont icon-jian\" />\r\n </div>\r\n </Popconfirm>\r\n </>\r\n )}\r\n </span>\r\n );\r\n }, [handleAdd, nodeData, title, toggleEdit, handleDel]);\r\n\r\n const renderChildNode = useCallback(() => {\r\n return editing ? (\r\n <Form.Item\r\n style={{ margin: 0, width: \"100%\" }}\r\n name={nodeData.title}\r\n >\r\n <Input \r\n ref={inputRef} \r\n onPressEnter={save} \r\n onBlur={save} \r\n autoComplete=\"off\" \r\n size=\"small\" \r\n />\r\n </Form.Item>\r\n ) : (\r\n <>\r\n <Typography.Text ellipsis style={{width: \"75%\"}}>{title}</Typography.Text>\r\n {renderIconNode()}\r\n </>\r\n );\r\n }, [editing, nodeData.title, save, title, renderIconNode]);\r\n\r\n return (\r\n <div className=\"tree-title\">\r\n {renderChildNode()}\r\n </div>\r\n )\r\n};\r\n\r\nexport default memo(TreeTitle);\r\n","import { FolderOutlined, FolderOpenOutlined } from '@ant-design/icons'\r\n\r\n/**\r\n * 递归转换目录结构为树形结构\r\n * @param {Array} data - 原始数据\r\n * @param {string} [basePath='0'] - 基础路径\r\n * @param {string} [parentRoute] - 父级路由路径\r\n * @returns {Array} 转换后的树形结构\r\n */\r\nexport const buildDirectoryTree = (data, basePath = '0', parentRoute) => {\r\n if (!Array.isArray(data)) return [];\r\n\r\n return data.reduce((acc, item, index) => {\r\n // 跳过文件类型,只处理目录\r\n if (item.type === 'file') return acc;\r\n\r\n const title = parentRoute ? item.name : item.sd_index ?? item.name;\r\n const key = `${basePath}-${index}`; \r\n const currentPath = parentRoute ? `${parentRoute}/${title}` : item.path;\r\n \r\n const treeNode = {\r\n title, // 文件/文件夹名称\r\n key,\r\n icon: ({ expanded }) => expanded ? <FolderOpenOutlined /> : <FolderOutlined />,\r\n children: [],\r\n isLeaf: false,\r\n isRoot: Boolean(item.sd_index),\r\n path: currentPath,\r\n contents: (item.contents || []).filter(content => content.type === 'file'),\r\n rawData: item // 保留原始数据\r\n };\r\n\r\n // 递归处理子目录\r\n if (Array.isArray(item.contents) && item.contents.length > 0) {\r\n treeNode.children = buildDirectoryTree(\r\n item.contents.filter(content => content.type !== 'file'),\r\n key,\r\n currentPath\r\n );\r\n }\r\n\r\n acc.push(treeNode);\r\n return acc;\r\n }, []);\r\n};\r\n\r\n/**\r\n * 查找树中指定key的节点\r\n * @param {Array} treeData - 树数据\r\n * @param {string} targetKey - 要查找的key\r\n * @returns {Array} 包含匹配节点的数组\r\n */\r\nexport const findTreeNode = (treeData, targetKey) => {\r\n if (!Array.isArray(treeData) || typeof targetKey !== 'string') return [];\r\n \r\n const result = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key === targetKey) {\r\n result.push(node);\r\n // 如果只需要第一个匹配项,可以在这里break\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return result;\r\n};\r\n\r\n/**\r\n * 获取树中所有节点的keys\r\n * @param {Array} treeData - 树数据\r\n * @returns {Array} 包含所有节点keys的数组\r\n */\r\nexport const getAllNodeKeys = (treeData) => {\r\n if (!Array.isArray(treeData)) return [];\r\n \r\n const keys = [];\r\n const stack = [...treeData];\r\n \r\n while (stack.length) {\r\n const node = stack.pop();\r\n if (node.key != null) {\r\n keys.push(node.key);\r\n }\r\n \r\n if (Array.isArray(node.children)) {\r\n stack.push(...node.children);\r\n }\r\n }\r\n \r\n return keys;\r\n};","import { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { Tree, ConfigProvider, Empty } from 'antd';\r\nimport TreeTitle from '../components/TreeTitle';\r\nimport { buildDirectoryTree, findTreeNode, getAllNodeKeys } from '../utils/treeUtils.js';\r\n\r\nconst useDirectoryTree = ({\r\n getFolderData,\r\n createFolder,\r\n removeFolderFile,\r\n renameFolderFile,\r\n height = 760,\r\n theme = { components: { Tree: { titleHeight: 30 } } }\r\n}) => {\r\n const [treeState, setTreeState] = useState({\r\n data: [],\r\n selectedKeys: [],\r\n expandedKeys: [],\r\n currentPath: \"\",\r\n contents: [],\r\n loading: false\r\n });\r\n const [originTreeData, setOriginTreeData] = useState([]);\r\n\r\n const updateTreeState = (partialState) => {\r\n setTreeState(prev => ({ ...prev, ...partialState }));\r\n };\r\n\r\n // 错误处理\r\n const handleError = (error, operation) => {\r\n console.error(`${operation} ERROR`, error);\r\n // 可以添加通知等统一错误处理\r\n };\r\n\r\n // 路径处理工具\r\n const pathUtils = {\r\n getNewPath: (node, newTitle) => {\r\n const arr = node.path.split('/');\r\n arr[arr.length - 1] = newTitle;\r\n return arr.join('/');\r\n },\r\n isSamePath: (path1, path2) => {\r\n return path1 === path2;\r\n }\r\n };\r\n\r\n // 节点查找工具\r\n const nodeUtils = {\r\n findNode: (treeData, key) => {\r\n let result = [];\r\n return findTreeNode(treeData, key, result);\r\n }\r\n };\r\n\r\n // 获取文件夹数据 文件夹名称为空时返回根目录数据\r\n const fetchFolderData = useCallback(async (initialization = false) => {\r\n try {\r\n const data = await getFolderData({ folder: \"\" });\r\n if (!data?.directoryTree) {\r\n return null;\r\n }\r\n\r\n setOriginTreeData(data.directoryTree);\r\n\r\n // 递归生成treenodes\r\n const treeNodes = buildDirectoryTree(data.directoryTree);\r\n\r\n if (!treeNodes.length) {\r\n return null;\r\n }\r\n\r\n const firstChild = treeNodes[0];\r\n const newState = {\r\n data: treeNodes,\r\n ...(initialization && {\r\n selectedKeys: [firstChild?.key],\r\n expandedKeys: getAllNodeKeys(treeNodes),\r\n currentPath: firstChild?.path,\r\n contents: firstChild?.contents || []\r\n })\r\n };\r\n \r\n updateTreeState(newState);\r\n return treeNodes;\r\n } catch (error) {\r\n handleError(error, 'GET FOLDER DATA');\r\n }\r\n }, []);\r\n\r\n // 初始化数据\r\n useEffect(() => {\r\n fetchFolderData(true);\r\n }, [fetchFolderData]);\r\n \r\n // 创建文件夹\r\n const handleCreate = useCallback(async (node, newTitle) => {\r\n if (!newTitle?.trim()) return false;\r\n\r\n try {\r\n const path = `${node.path}/${newTitle}`;\r\n await createFolder({ path });\r\n const newTreeData = await fetchFolderData();\r\n\r\n // 找到新增节点的父节点\r\n const parentNode = nodeUtils.findNode(newTreeData, node.key);\r\n if (parentNode?.[0]?.children) {\r\n const expectedPath = `${node.path}/${newTitle}`;\r\n // 通过 path 找到新增节点,得到新增节点的key\r\n const addedNode = parentNode[0].children.find(ch => \r\n pathUtils.isSamePath(ch.path, expectedPath)\r\n );\r\n if (addedNode) {\r\n updateTreeState({\r\n expandedKeys: [...treeState.expandedKeys, addedNode.key, parentNode[0].key]\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n handleError(error, 'CREATE FOLDER');\r\n }\r\n }, [fetchFolderData, treeState.expandedKeys])\r\n \r\n // 删除文件/文件夹\r\n const handleRemove = useCallback(async (node) => {\r\n if (!node.path) return;\r\n\r\n try {\r\n await removeFolderFile({\r\n paths: [\r\n { path: node.path }\r\n ]\r\n });\r\n // 如果删除的是当前选中节点,则重新初始化\r\n const shouldReinitialize = treeState.selectedKeys[0] === node.key;\r\n await fetchFolderData(shouldReinitialize);\r\n } catch (error) {\r\n handleError(error, 'REMOVE FOLDER/FILE');\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 修改文件/文件夹\r\n const handleRename = useCallback(async (node) => {\r\n const newPath = pathUtils.getNewPath(node, node.title);\r\n if (pathUtils.isSamePath(node.path, newPath)) return false;\r\n\r\n try {\r\n await renameFolderFile({ \r\n old_path: node.path, \r\n new_path: newPath \r\n });\r\n await fetchFolderData();\r\n } catch (error) {\r\n handleError(error, 'RENAME FOLDER/FILE');\r\n }\r\n }, [fetchFolderData])\r\n \r\n // 选择节点\r\n const onSelect = useCallback(async (keys, info) => {\r\n if (!keys.length || (keys[0] === treeState.selectedKeys[0] && \r\n pathUtils.isSamePath(info.node.path, treeState.currentPath))) return;\r\n\r\n updateTreeState({ \r\n selectedKeys: keys,\r\n currentPath: info.node.path,\r\n loading: true \r\n });\r\n\r\n try {\r\n // 模拟延迟加载\r\n // eslint-disable-next-line no-promise-executor-return\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n updateTreeState({\r\n contents: info.node.contents,\r\n loading: false\r\n });\r\n } catch (error) {\r\n handleError(error, 'SELECT NODE');\r\n updateTreeState({ loading: false });\r\n }\r\n }, [treeState.selectedKeys, treeState.currentPath]);\r\n \r\n // 展开节点\r\n const onExpand = useCallback((keys) => {\r\n updateTreeState({ expandedKeys: keys });\r\n }, []);\r\n \r\n // 上传右侧文件或删除右侧文件 成功后的回调函数\r\n const updateFileContents = useCallback(async () => {\r\n // 找到当前选中的节点,更新当前节点的 contents\r\n const newTreeData = await fetchFolderData();\r\n const selectedNode = nodeUtils.findNode(newTreeData, treeState.selectedKeys[0]);\r\n if (selectedNode?.[0]) {\r\n updateTreeState({\r\n contents: selectedNode[0].contents\r\n });\r\n }\r\n }, [fetchFolderData, treeState.selectedKeys])\r\n \r\n // 删除文件\r\n const removeFile = useCallback(async (url) => {\r\n try {\r\n await removeFolderFile({ path: url });\r\n await updateFileContents();\r\n } catch (error) {\r\n handleError(error, 'REMOVE FILE');\r\n }\r\n }, [updateFileContents]);\r\n\r\n const MemoizedTree = useMemo(() => {\r\n if (!treeState.data?.length) {\r\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;\r\n }\r\n\r\n return (\r\n <div key=\"folder-directory\" style={{ paddingTop: 16 }}>\r\n <ConfigProvider theme={theme}>\r\n <Tree\r\n blockNode\r\n showIcon\r\n selectedKeys={treeState.selectedKeys}\r\n expandedKeys={treeState.expandedKeys}\r\n onSelect={onSelect}\r\n onExpand={onExpand}\r\n treeData={treeState.data}\r\n titleRender={(nodeData) => \r\n <TreeTitle\r\n title={nodeData.title}\r\n nodeData={nodeData}\r\n handleSave={handleRename}\r\n handleDel={handleRemove}\r\n handleAdd={handleCreate}\r\n />\r\n }\r\n height={height}\r\n />\r\n </ConfigProvider>\r\n </div>\r\n );\r\n }, [treeState.data, treeState.selectedKeys, treeState.expandedKeys]);\r\n\r\n return {\r\n directoryTree: MemoizedTree,\r\n contents: treeState.contents,\r\n currentPath: treeState.currentPath,\r\n loading: treeState.loading,\r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n };\r\n}\r\n\r\nexport { useDirectoryTree };","export const createUrlBuilder = (config = {}) => {\r\n const {\r\n baseUrl = '',\r\n isDev = false,\r\n devBaseUrl = '',\r\n isBrowser = false\r\n } = config;\r\n\r\n return (path) => {\r\n if (!path) return '';\r\n \r\n // 如果传入的是完整 URL,直接返回\r\n if (/^https?:\\/\\//.test(path)) {\r\n return path;\r\n }\r\n\r\n // 去除 path 开头可能的多余斜杠\r\n const cleanPath = path.replace(/^\\/+/, '');\r\n\r\n // 开发环境使用 devBaseUrl,否则使用 baseUrl\r\n const host = isDev ? devBaseUrl : baseUrl;\r\n \r\n // 如果没有配置 baseUrl,则根据环境返回相对路径或完整路径\r\n if (!host) {\r\n return isBrowser ? `/${cleanPath}` : cleanPath;\r\n }\r\n\r\n return host ? `${host}/${cleanPath}` : `/${cleanPath}`;\r\n };\r\n};","import { useRef, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport { App, Button, Checkbox, Flex, Space, Input } from 'antd';\r\nimport { CloudUploadOutlined, ExclamationCircleFilled, SearchOutlined } from '@ant-design/icons';\r\nimport axios from 'axios';\r\nimport MediaGrid from './components/MediaGrid';\r\nimport SelectFolderPathModal from './components/SelectFolderPathModal';\r\nimport UploadProgress from './components/UploadProgress';\r\nimport { useDirectoryTree } from './hooks/useDirectoryTree';\r\nimport { createUrlBuilder } from './utils/urlBuilder';\r\nimport \"./style/resources.less\";\r\n\r\nconst ResourcesView = ({\r\n apiConfig = {},\r\n features = {},\r\n className = '',\r\n style = {},\r\n renderTreeHeader,\r\n renderGridHeader,\r\n acceptFileTypes = \"video/*,.mxf,application/mxf,video/mxf\",\r\n uploadTimeout = 60 * 60 * 1000,\r\n searchPlaceholder = \"Search ...\"\r\n}) => {\r\n const { message, modal } = App.useApp();\r\n\r\n // 合并默认配置和传入配置\r\n const mergedApiConfig = useMemo(() => ({\r\n upload: '/api/dvr/media/source/upload',\r\n download: '/download',\r\n ...apiConfig\r\n }), [apiConfig]);\r\n\r\n const mergedFeatures = useMemo(() => ({\r\n upload: true,\r\n download: true,\r\n copy: true,\r\n delete: true,\r\n search: true,\r\n batchOperations: true,\r\n ...features\r\n }), [features]);\r\n \r\n const {\r\n directoryTree,\r\n contents,\r\n currentPath,\r\n loading, \r\n originTreeData,\r\n updateFileContents,\r\n removeFile\r\n } = useDirectoryTree({\r\n getFolderData: mergedApiConfig.getFolderData,\r\n createFolder: mergedApiConfig.createFolder,\r\n removeFolderFile: mergedApiConfig.removeFolderFile,\r\n renameFolderFile: mergedApiConfig.renameFolderFile,\r\n });\r\n\r\n const [showProgress, setShowProgress] = useState(false);\r\n const [percent, setPercent] = useState(0);\r\n const inputRef = useRef(null);\r\n const uploadController = useRef(new AbortController());\r\n const [modalVisible, setModalVisible] = useState(false);\r\n // 处理批量操作\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [indeterminate, setIndeterminate] = useState(false);\r\n const [checkAll, setCheckAll] = useState(false);\r\n const [batchLoading, setBatchLoading] = useState(false);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n // 过滤内容\r\n const filteredContents = useMemo(() => {\r\n if (!keyword) return contents;\r\n return contents.filter(item =>\r\n item.name.toLowerCase().includes(keyword.toLowerCase())\r\n );\r\n }, [contents, keyword]);\r\n\r\n // 在组件卸载时取消上传\r\n useEffect(() => {\r\n return () => uploadController.current?.abort();\r\n }, []);\r\n\r\n // 重置批量状态的效果\r\n useEffect(() => {\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n }, [currentPath]);\r\n\r\n // 上传相关函数\r\n const onTriggerUpload = useCallback(() => {\r\n inputRef.current?.click();\r\n }, []);\r\n\r\n const onUploadFile = async (event) => {\r\n const files = event.target.files;\r\n if (!files?.length) return;\r\n \r\n // 初始化上传状态\r\n setShowProgress(true);\r\n setPercent(0);\r\n\r\n try {\r\n await uploadFiles(files, currentPath);\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n await updateFileContents();\r\n } catch (error) {\r\n if (axios.isCancel(error)) {\r\n console.log('Upload canceled');\r\n } else if (error.response) {\r\n console.error(`Upload failed: ${error.response.data?.message || error.response.status}`);\r\n } else {\r\n console.error(`Upload error: ${error.message}`);\r\n }\r\n } finally {\r\n resetUploadState();\r\n }\r\n }\r\n\r\n const uploadFiles = async (files, folder) => {\r\n // 计算所有文件的总大小\r\n const totalSize = calculateTotalSize(files);\r\n // 存储每个文件的上一次 loaded 值(避免重复计算)\r\n const previousLoadedMap = new Map();\r\n let uploadedSize = 0; // 记录已上传的字节数\r\n\r\n const uploadTasks = Array.from(files).map(file => \r\n uploadSingleFile(file, folder, previousLoadedMap, (newLoaded) => {\r\n uploadedSize += newLoaded;\r\n updateProgress(uploadedSize, totalSize);\r\n })\r\n );\r\n\r\n await Promise.all(uploadTasks);\r\n}\r\n\r\n // 计算总文件大小\r\n const calculateTotalSize = (files) => \r\n Array.from(files).reduce((sum, file) => sum + file.size, 0);\r\n\r\n // 上传单个文件\r\n const uploadSingleFile = (file, folder, previousLoadedMap, onProgress) => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('folder', folder);\r\n\r\n return axios.post(mergedApiConfig.upload, formData, {\r\n timeout: uploadTimeout,\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n // signal: uploadController.current.signal,\r\n onUploadProgress: (progressEvent) => {\r\n if (progressEvent.lengthComputable) {\r\n // 获取当前文件的上一次 loaded 值(默认 0)\r\n const previousLoaded = previousLoadedMap.get(file.name) || 0;\r\n // 计算新增的字节数(避免重复累加)\r\n const newLoaded = progressEvent.loaded - previousLoaded;\r\n // 更新当前文件的 loaded 值\r\n previousLoadedMap.set(file.name, progressEvent.loaded);\r\n onProgress(newLoaded);\r\n }\r\n }\r\n })\r\n }\r\n\r\n const updateProgress = (uploadedSize, totalSize) => {\r\n const totalPercent = Math.round((uploadedSize / totalSize) * 100);\r\n setPercent(totalPercent);\r\n };\r\n\r\n // 重置上传状态\r\n const resetUploadState = () => {\r\n setShowProgress(false);\r\n setPercent(0);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n // 文件操作函数\r\n const downloadFile = async(url) => {\r\n try {\r\n const isDev = process.env.NODE_ENV === 'development';\r\n const baseUrl = isDev \r\n ? process.env.API_HOST // 开发环境默认值\r\n : window.location.origin; // 生产环境用当前域名\r\n\r\n const link = document.createElement('a');\r\n link.href = `${baseUrl}${mergedApiConfig.download}/${url}`;\r\n // link.download = filename;\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n console.error(\"Download failed:\", error);\r\n }\r\n }\r\n\r\n const copyFile = () => {\r\n setModalVisible(true);\r\n }\r\n\r\n const onContextMenu = (key, item) => {\r\n if (key === 'del') removeFile(item.url);\r\n if (key === 'download') downloadFile(item.url);\r\n if (key === 'copy') copyFile(item.url);\r\n };\r\n\r\n const handleBatchRemove = useCallback(async () => {\r\n if (!selectedItems.length) return;\r\n \r\n modal.confirm({\r\n icon: <ExclamationCircleFilled />,\r\n title: `Are you sure you want to delete ${selectedItems.length} files?`,\r\n cancelText: \"No\",\r\n okText: \"Yes\",\r\n onOk: async () => {\r\n try {\r\n // 批量处理所有删除请求\r\n await mergedApiConfig.removeFolderFile({\r\n paths: selectedItems.map(itemUrl => ({ path: itemUrl }))\r\n });\r\n \r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n await updateFileContents(); // 刷新文件列表\r\n } catch (error) {\r\n console.error('Batch deletion error:', error);\r\n }\r\n }\r\n });\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n const handleCopyConfirm = useCallback(async (newPath) => {\r\n setBatchLoading(true);\r\n \r\n try {\r\n // 批量处理所有拷贝请求\r\n await mergedApiConfig.copyFile({\r\n old_paths: selectedItems.map(itemUrl => ({ old_path: itemUrl })),\r\n new_path: newPath\r\n });\r\n\r\n // 更新状态\r\n setSelectedItems([]);\r\n setIndeterminate(false);\r\n setCheckAll(false);\r\n message.success('Success');\r\n setModalVisible(false);\r\n\r\n // 延迟2s刷新数据\r\n await new Promise(resolve => setTimeout(resolve, 2000)); \r\n await updateFileContents();\r\n } catch (error) {\r\n console.error(\"Batch copy error:\", error);\r\n } finally {\r\n setBatchLoading(false);\r\n }\r\n }, [selectedItems, mergedApiConfig, updateFileContents]);\r\n\r\n // 处理单个项目的选择变化\r\n const handleSelectChange = (item, checked) => {\r\n const newSelectedItems = checked \r\n ? [...selectedItems, item.url] \r\n : selectedItems.filter(url => url !== item.url);\r\n \r\n setSelectedItems(newSelectedItems);\r\n setIndeterminate(!!newSelectedItems.length && newSelectedItems.length !== filteredContents.length);\r\n setCheckAll(newSelectedItems.length === filteredContents.length);\r\n };\r\n\r\n // 处理全选/取消全选\r\n const handleSelectAll = e => {\r\n const checked = e.target.checked;\r\n setSelectedItems(checked ? filteredContents.map(item => item.url) : []);\r\n setIndeterminate(false);\r\n setCheckAll(checked);\r\n };\r\n\r\n // 搜索处理\r\n const handleSearchChange = (e) => {\r\n setKeyword(e.target.value);\r\n };\r\n\r\n // 创建 URL 构建器\r\n const getFullUrl = useMemo(() => {\r\n return createUrlBuilder({\r\n baseUrl: apiConfig.baseUrl,\r\n devBaseUrl: apiConfig.devBaseUrl,\r\n isDev: process.env.NODE_ENV === 'development',\r\n isBrowser: typeof window !== 'undefined'\r\n });\r\n }, [apiConfig.baseUrl, apiConfig.devBaseUrl]);\r\n\r\n return (\r\n <div className={`resources-view ${className}`} style={style}>\r\n <div className=\"content-container\">\r\n <div className=\"directory-tree\">\r\n {renderTreeHeader ? renderTreeHeader() : (\r\n <div className=\"search-bar\"></div>\r\n )}\r\n {directoryTree}\r\n </div>\r\n <div className=\"folder-contents\">\r\n <Flex justify=\"center\" align=\"center\" className=\"search-bar\">\r\n {mergedFeatures.search && (\r\n <Input\r\n value={keyword}\r\n onChange={handleSearchChange}\r\n placeholder={searchPlaceholder}\r\n prefix={<SearchOutlined />}\r\n allowClear\r\n className=\"search-input\"\r\n />\r\n )}\r\n {mergedFeatures.upload && (\r\n <>\r\n <CloudUploadOutlined \r\n className=\"upload-icon\" \r\n title=\"upload\" \r\n onClick={onTriggerUpload} \r\n />\r\n <input\r\n ref={inputRef} \r\n type=\"file\"\r\n onChange={onUploadFile} \r\n className=\"hidden\" \r\n accept={acceptFileTypes}\r\n multiple\r\n />\r\n </>\r\n )}\r\n </Flex>\r\n <div \r\n className=\"media-grid-container\"\r\n onContextMenu={(e) => e.preventDefault()}\r\n >\r\n {renderGridHeader ? renderGridHeader() : (\r\n filteredContents.length > 0 && mergedFeatures.batchOperations && (\r\n <div className=\"batch-operations\">\r\n <Space size=\"middle\">\r\n <Checkbox \r\n indeterminate={indeterminate}\r\n checked={checkAll}\r\n onChange={handleSelectAll}\r\n >\r\n Select All\r\n </Checkbox>\r\n <Button\r\n type=\"primary\"\r\n disabled={!selectedItems.length}\r\n onClick={() => setModalVisible(true)}\r\n >\r\n Batch Copy\r\n </Button>\r\n <Button\r\n className=\"btn-gray\"\r\n disabled={!selectedItems.length}\r\n onClick={handleBatchRemove}\r\n >\r\n Batch Delete\r\n </Button>\r\n </Space>\r\n </div>\r\n )\r\n )}\r\n <MediaGrid\r\n items={filteredContents} \r\n loading={loading} \r\n onContextMenu={mergedFeatures.delete || mergedFeatures.download || mergedFeatures.copy ? onContextMenu : null}\r\n selectedKeys={selectedItems}\r\n onSelectChange={mergedFeatures.batchOperations ? handleSelectChange : null}\r\n onClick={() => {}}\r\n features={mergedFeatures}\r\n getFullUrl={getFullUrl}\r\n />\r\n </div>\r\n </div>\r\n </div> \r\n {showProgress && <UploadProgress percent={percent} />}\r\n <SelectFolderPathModal\r\n open={modalVisible}\r\n directoryTree={originTreeData}\r\n batchLoading={batchLoading}\r\n onClose={() => setModalVisible(false)}\r\n onOk={handleCopyConfirm}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ResourcesView;\r\n"],"names":["BASE_MENU_ITEMS","label","key","featureKey","MediaGridItem","memo","_ref","item","onContextMenu","menuItems","DEFAULT_MENU_ITEMS","checked","onSelectChange","showCheckbox","onClick","getFullUrl","handleMenuClick","useCallback","_ref2","handleItemClick","handleCheckboxChange","e","stopPropagation","target","_jsx","Dropdown","menu","items","trigger","disabled","children","_jsxs","List","Item","className","concat","title","name","Checkbox","onChange","Image","width","height","src","head_thumbnail","preview","Typography","Text","ellipsis","MediaGrid","_ref3","loading","selectedKeys","customMenuItems","gridConfig","gutter","column","features","mergedFeatures","useMemo","_objectSpread","download","copy","delete","filter","renderItem","length","includes","url","Spin","spinning","size","grid","dataSource","pagination","SelectFolderPathModal","open","onClose","onOk","directoryTree","externalLoading","batchLoading","okText","cancelText","placeholder","formItemLabel","showFullPath","allowClear","expandTrigger","form","Form","useForm","options","setOptions","useState","internalLoading","setInternalLoading","selectedPath","setSelectedPath","convertToCascaderOptions","treeData","Array","isArray","map","option","value","id","sd_index","isLeaf","contents","path","rawData","child","type","Boolean","useEffect","formattedOptions","error","console","getSelectedNodes","valuePath","currentOptions","collectedNodes","arguments","undefined","currentValue","currentNode","find","opt","push","slice","handleOk","validateFields","then","values","message","warning","selectedNodes","lastNode","resultPath","node","join","catch","handleAfterClose","resetFields","Modal","onCancel","afterClose","destroyOnHidden","footer","Button","Cascader","changeOnSelect","style","UploadProgress","percent","Progress","PopoverContent","forwardRef","ref","onConfirm","setValue","handleConfirm","confirm","handleKeyDown","_Fragment","marginBottom","Input","onKeyDown","autoFocus","Flex","justify","gap","EditablePopover","add","inputRef","useRef","setOpen","current","timer","setTimeout","_inputRef$current","focus","clearTimeout","hide","newTitle","callback","handleOpenChange","newOpen","Popover","content","onOpenChange","EditableContext","createContext","TreeTitle","props","_extends","_objectDestructuringEmpty","component","Provider","TreeTitleNode","nodeData","handleSave","handleDel","handleAdd","editing","setEditing","useContext","toggleEdit","prev","setFieldsValue","save","errInfo","renderIconNode","isRoot","Popconfirm","renderChildNode","margin","onPressEnter","onBlur","autoComplete","buildDirectoryTree","data","basePath","parentRoute","reduce","acc","index","_item$sd_index","currentPath","treeNode","icon","expanded","FolderOpenOutlined","FolderOutlined","findTreeNode","targetKey","result","stack","pop","getAllNodeKeys","keys","useDirectoryTree","getFolderData","createFolder","removeFolderFile","renameFolderFile","theme","components","Tree","titleHeight","treeState","setTreeState","expandedKeys","originTreeData","setOriginTreeData","updateTreeState","partialState","handleError","operation","pathUtils","getNewPath","arr","split","isSamePath","path1","path2","nodeUtils","findNode","fetchFolderData","initialization","folder","treeNodes","firstChild","newState","handleCreate","trim","_parentNode$","newTreeData","parentNode","expectedPath","addedNode","ch","handleRemove","paths","shouldReinitialize","handleRename","newPath","old_path","new_path","onSelect","info","Promise","resolve","onExpand","updateFileContents","selectedNode","removeFile","MemoizedTree","_treeState$data","Empty","image","PRESENTED_IMAGE_SIMPLE","paddingTop","ConfigProvider","blockNode","showIcon","titleRender","createUrlBuilder","config","baseUrl","isDev","devBaseUrl","isBrowser","test","cleanPath","replace","host","ResourcesView","apiConfig","renderTreeHeader","renderGridHeader","acceptFileTypes","uploadTimeout","searchPlaceholder","modal","App","useApp","mergedApiConfig","upload","search","batchOperations","showProgress","setShowProgress","setPercent","uploadController","AbortController","modalVisible","setModalVisible","selectedItems","setSelectedItems","indeterminate","setIndeterminate","checkAll","setCheckAll","setBatchLoading","keyword","setKeyword","filteredContents","toLowerCase","_uploadController$cur","abort","onTriggerUpload","click","onUploadFile","event","files","uploadFiles","axios","isCancel","log","response","_error$response$data","status","resetUploadState","totalSize","calculateTotalSize","previousLoadedMap","Map","uploadedSize","uploadTasks","from","file","uploadSingleFile","newLoaded","updateProgress","all","sum","onProgress","formData","FormData","append","post","timeout","headers","onUploadProgress","progressEvent","lengthComputable","previousLoaded","get","loaded","set","totalPercent","Math","round","downloadFile","process","env","NODE_ENV","API_HOST","window","location","origin","link","document","createElement","href","display","body","appendChild","removeChild","copyFile","handleBatchRemove","ExclamationCircleFilled","itemUrl","handleCopyConfirm","old_paths","success","handleSelectChange","newSelectedItems","handleSelectAll","handleSearchChange","align","prefix","SearchOutlined","CloudUploadOutlined","accept","multiple","preventDefault","Space"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seeder-resources-view",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A reusable resources management component for React applications",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -47,4 +47,4 @@
47
47
  "dependencies": {
48
48
  "axios": "^0.27.2"
49
49
  }
50
- }
50
+ }
@@ -108,6 +108,9 @@
108
108
  height: 50px;
109
109
  border-bottom: 1px solid rgb(23, 23, 23);
110
110
  position: relative;
111
+ .search-input {
112
+ width: 320px;
113
+ }
111
114
  .upload-icon {
112
115
  position: absolute;
113
116
  right: 14px;