@platox/pivot-table 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/es/dashboard-workbench/components/add-module-btn/index.js +14 -5
  2. package/es/dashboard-workbench/components/add-module-btn/index.js.map +1 -1
  3. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/custome-data.d.ts +3 -3
  4. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/custome-data.js +3 -3
  5. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/custome-data.js.map +1 -1
  6. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/index.js +4 -4
  7. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/index.js.map +1 -1
  8. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/CombinationChartOptionPicker.d.ts +18 -0
  9. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/CombinationChartOptionPicker.js +103 -0
  10. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/CombinationChartOptionPicker.js.map +1 -0
  11. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/GroupFieldConfigPicker.d.ts +14 -0
  12. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/GroupFieldConfigPicker.js +79 -0
  13. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/GroupFieldConfigPicker.js.map +1 -0
  14. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/index.module.less.js +11 -0
  15. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/index.module.less.js.map +1 -0
  16. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/config.d.ts +14 -0
  17. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/config.js +153 -0
  18. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/config.js.map +1 -0
  19. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-data.d.ts +1 -21
  20. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-data.js +132 -101
  21. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-data.js.map +1 -1
  22. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-styles.d.ts +0 -6
  23. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-styles.js +2 -4
  24. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-styles.js.map +1 -1
  25. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.js +4 -4
  26. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.js.map +1 -1
  27. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.module.less.js +7 -0
  28. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.module.less.js.map +1 -0
  29. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/interface.d.ts +62 -0
  30. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/interface.js +31 -0
  31. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/interface.js.map +1 -0
  32. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.d.ts +3 -3
  33. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js +2 -2
  34. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js.map +1 -1
  35. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js +16 -11
  36. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js.map +1 -1
  37. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/index.js +4 -4
  38. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/index.js.map +1 -1
  39. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/config.d.ts +30 -0
  40. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/config.js +132 -0
  41. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/config.js.map +1 -0
  42. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/debounce-select.js.map +1 -1
  43. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.d.ts +4 -12
  44. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js +6 -200
  45. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js.map +1 -1
  46. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/interface.d.ts +14 -0
  47. package/es/dashboard-workbench/components/global-filter-condition/ConditionRowItem.d.ts +9 -0
  48. package/es/dashboard-workbench/components/global-filter-condition/ConditionRowItem.js +90 -0
  49. package/es/dashboard-workbench/components/global-filter-condition/ConditionRowItem.js.map +1 -0
  50. package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.d.ts +15 -0
  51. package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js +218 -0
  52. package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js.map +1 -0
  53. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.d.ts +13 -0
  54. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.js +56 -0
  55. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.js.map +1 -0
  56. package/es/dashboard-workbench/components/global-filter-condition/index.d.ts +13 -0
  57. package/es/dashboard-workbench/components/global-filter-condition/index.js +311 -0
  58. package/es/dashboard-workbench/components/global-filter-condition/index.js.map +1 -0
  59. package/es/dashboard-workbench/components/global-filter-condition/index.module.less.js +8 -0
  60. package/es/dashboard-workbench/components/global-filter-condition/index.module.less.js.map +1 -0
  61. package/es/dashboard-workbench/components/global-filter-condition/interface.d.ts +9 -0
  62. package/es/dashboard-workbench/components/global-filter-condition/useContext.d.ts +13 -0
  63. package/es/dashboard-workbench/components/global-filter-condition/useContext.js +10 -0
  64. package/es/dashboard-workbench/components/global-filter-condition/useContext.js.map +1 -0
  65. package/es/dashboard-workbench/components/global-filter-condition/util.d.ts +1 -0
  66. package/es/dashboard-workbench/components/global-filter-condition/util.js +7 -0
  67. package/es/dashboard-workbench/components/global-filter-condition/util.js.map +1 -0
  68. package/es/dashboard-workbench/components/{ui/modal/editor-header.js → modal-editor-header/index.js} +4 -4
  69. package/es/dashboard-workbench/components/modal-editor-header/index.js.map +1 -0
  70. package/es/dashboard-workbench/components/modal-editor-header/index.module.less.js +9 -0
  71. package/es/dashboard-workbench/components/module-content/calendar-module/index.js +33 -19
  72. package/es/dashboard-workbench/components/module-content/calendar-module/index.js.map +1 -1
  73. package/es/dashboard-workbench/components/module-content/chart-module/Empty.js +1 -1
  74. package/es/dashboard-workbench/components/module-content/chart-module/Empty.js.map +1 -1
  75. package/es/dashboard-workbench/components/module-content/chart-module/base-chart/index.js +1 -1
  76. package/es/dashboard-workbench/components/module-content/chart-module/base-chart/index.js.map +1 -1
  77. package/es/dashboard-workbench/components/module-content/chart-module/index.d.ts +3 -4
  78. package/es/dashboard-workbench/components/module-content/chart-module/index.js +239 -158
  79. package/es/dashboard-workbench/components/module-content/chart-module/index.js.map +1 -1
  80. package/es/dashboard-workbench/components/module-content/chart-module/utils.d.ts +100 -2
  81. package/es/dashboard-workbench/components/module-content/chart-module/utils.js +66 -13
  82. package/es/dashboard-workbench/components/module-content/chart-module/utils.js.map +1 -1
  83. package/es/dashboard-workbench/components/module-content/index.js +3 -3
  84. package/es/dashboard-workbench/components/module-content/index.js.map +1 -1
  85. package/es/dashboard-workbench/components/module-content/statistics-module/index.d.ts +1 -1
  86. package/es/dashboard-workbench/components/module-content/statistics-module/index.js +17 -7
  87. package/es/dashboard-workbench/components/module-content/statistics-module/index.js.map +1 -1
  88. package/es/dashboard-workbench/components/module-content/text-module/editor/index.js +5 -5
  89. package/es/dashboard-workbench/components/module-content/text-module/editor/index.js.map +1 -1
  90. package/es/dashboard-workbench/components/module-content/utils.d.ts +2 -15
  91. package/es/dashboard-workbench/components/module-content/utils.js.map +1 -1
  92. package/es/dashboard-workbench/components/module-header/index.d.ts +1 -1
  93. package/es/dashboard-workbench/components/module-header/index.js +3 -3
  94. package/es/dashboard-workbench/components/module-header/index.js.map +1 -1
  95. package/es/dashboard-workbench/context.d.ts +21 -9
  96. package/es/dashboard-workbench/context.js +2 -9
  97. package/es/dashboard-workbench/context.js.map +1 -1
  98. package/es/dashboard-workbench/icon/icon-chart-combination.d.ts +3 -0
  99. package/es/dashboard-workbench/icon/icon-chart-combination.js +36 -0
  100. package/es/dashboard-workbench/icon/icon-chart-combination.js.map +1 -0
  101. package/es/dashboard-workbench/index.d.ts +2 -2
  102. package/es/dashboard-workbench/index.js +60 -30
  103. package/es/dashboard-workbench/index.js.map +1 -1
  104. package/es/dashboard-workbench/lang/en-US.d.ts +37 -0
  105. package/es/dashboard-workbench/lang/en-US.js +30 -3
  106. package/es/dashboard-workbench/lang/en-US.js.map +1 -1
  107. package/es/dashboard-workbench/lang/index.js +2 -2
  108. package/es/dashboard-workbench/lang/index.js.map +1 -1
  109. package/es/dashboard-workbench/lang/zh-CN.d.ts +37 -0
  110. package/es/dashboard-workbench/lang/zh-CN.js +30 -3
  111. package/es/dashboard-workbench/lang/zh-CN.js.map +1 -1
  112. package/es/dashboard-workbench/types.d.ts +18 -5
  113. package/es/dashboard-workbench/utils/index.d.ts +6 -4
  114. package/es/dashboard-workbench/utils/index.js +24 -3
  115. package/es/dashboard-workbench/utils/index.js.map +1 -1
  116. package/es/style.css +1 -1
  117. package/package.json +27 -24
  118. package/umd/pivot-table.umd.cjs +75 -75
  119. package/umd/style.css +1 -1
  120. package/es/dashboard-workbench/components/ui/modal/editor-header.js.map +0 -1
  121. package/es/dashboard-workbench/components/ui/modal/index.module.less.js +0 -9
  122. /package/es/dashboard-workbench/components/{ui/modal/editor-header.d.ts → modal-editor-header/index.d.ts} +0 -0
  123. /package/es/dashboard-workbench/components/{ui/modal → modal-editor-header}/index.module.less.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../packages/dashboard-workbench/components/module-content/text-module/editor/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo, useRef, useEffect, ReactNode, useCallback } from 'react'\nimport { Slate, Editable, withReact, useSlate, useFocused } from 'slate-react'\nimport {\n Editor,\n createEditor,\n Transforms,\n Range,\n Element as SlateElement,\n BaseElement,\n} from 'slate'\nimport { withHistory } from 'slate-history'\nimport {\n AlignCenterOutlined,\n AlignLeftOutlined,\n AlignRightOutlined,\n BoldOutlined,\n ColumnWidthOutlined,\n ItalicOutlined,\n OrderedListOutlined,\n UnderlineOutlined,\n UnorderedListOutlined,\n} from '@ant-design/icons'\nimport { Button } from 'antd'\nimport ReactDOM from 'react-dom'\nimport { JSX } from 'react/jsx-runtime'\nimport useDebounce from './useDebounce'\nimport { useTranslation } from 'react-i18next'\nimport './prose.css'\n\ninterface CustomElement extends BaseElement {\n type: string // 你需要的类型\n align?: string // 如果你有对齐属性\n}\n\nconst LIST_TYPES = ['numbered-list', 'bulleted-list']\nconst TEXT_ALIGN_TYPES = ['left', 'center', 'right', 'justify']\n\nconst Portal = ({ children }: { children?: ReactNode }) => {\n return typeof document === 'object' ? ReactDOM.createPortal(children, document.body) : null\n}\n\ninterface FormatButtonProps {\n format: string\n\n icon: any\n}\n\ninterface EditorProps {\n defaultValue: any\n onChange: (val: unknown) => void\n}\n\nconst BoxEditor: React.FC<EditorProps> = ({ defaultValue, onChange }) => {\n const { t } = useTranslation()\n const renderElement = useCallback(\n (\n props: JSX.IntrinsicAttributes & {\n attributes: any\n children: any\n element: any\n }\n ) => <Element {...props} />,\n []\n )\n const renderLeaf = useCallback(\n (\n props: JSX.IntrinsicAttributes & {\n attributes: any\n children: any\n leaf: any\n }\n ) => <Leaf {...props} />,\n []\n )\n const editor = useMemo(() => withHistory(withReact(createEditor())), [])\n\n const debouncedOnChange = useDebounce((val: any) => {\n onChange?.(val)\n }, 300) // 300 毫秒的延迟\n\n return (\n <div style={{ width: '100%', height: '100%' }}>\n <Slate editor={editor} initialValue={defaultValue} onChange={debouncedOnChange}>\n <HoveringToolbar />\n <Editable\n style={{ width: '100%', height: '100%', outline: 'none' }}\n className=\"prose prose-sm\"\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n spellCheck\n autoFocus\n placeholder={t('pleaseEnter')}\n onDOMBeforeInput={(event: InputEvent) => {\n switch (event.inputType) {\n case 'formatBold':\n event.preventDefault()\n return toggleMark(editor, 'bold')\n case 'formatItalic':\n event.preventDefault()\n return toggleMark(editor, 'italic')\n case 'formatUnderline':\n event.preventDefault()\n return toggleMark(editor, 'underlined')\n }\n }}\n />\n </Slate>\n </div>\n )\n}\n\n// 更新 toggleBlock 函数\nconst toggleBlock = (editor: Editor, format: string) => {\n const isActive = isBlockActive(\n editor,\n format,\n TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type'\n )\n const isList = LIST_TYPES.includes(format)\n\n Transforms.unwrapNodes(editor, {\n match: n =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes((n as CustomElement).type) && // 使用类型断言\n !TEXT_ALIGN_TYPES.includes(format),\n split: true,\n })\n\n const newProperties: Partial<CustomElement> = {}\n if (TEXT_ALIGN_TYPES.includes(format)) {\n newProperties.align = isActive ? undefined : format\n } else {\n newProperties.type = isActive ? 'paragraph' : isList ? 'list-item' : format\n }\n Transforms.setNodes<CustomElement>(editor, newProperties)\n\n if (!isActive && isList) {\n const block: CustomElement = { type: format, children: [] }\n Transforms.wrapNodes(editor, block)\n }\n}\n\nconst toggleMark = (editor: Editor, format: string) => {\n const isActive = isMarkActive(editor, format)\n\n if (isActive) {\n Editor.removeMark(editor, format)\n } else {\n Editor.addMark(editor, format, true)\n }\n}\n\n// 更新 isBlockActive 函数\nconst isBlockActive = (editor: Editor, format: string, blockType = 'type') => {\n const { selection } = editor\n if (!selection) return false\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: n =>\n !Editor.isEditor(n) && SlateElement.isElement(n) && (n as any)[blockType] === format, // 使用类型断言\n })\n )\n\n return !!match\n}\n\nconst isMarkActive = (editor: Editor, format: string) => {\n const marks: any = Editor.marks(editor)\n return marks ? marks[format] === true : false\n}\n\nconst Element = ({\n attributes,\n children,\n element,\n}: {\n attributes: any\n\n children: any\n\n element: any\n}) => {\n const style = { textAlign: element.align }\n switch (element.type) {\n case 'block-quote':\n return (\n <blockquote style={style} {...attributes}>\n {children}\n </blockquote>\n )\n case 'bulleted-list':\n return (\n <ul style={style} {...attributes}>\n {children}\n </ul>\n )\n case 'heading-one':\n return (\n <h1 style={style} {...attributes}>\n {children}\n </h1>\n )\n case 'heading-two':\n return (\n <h2 style={style} {...attributes}>\n {children}\n </h2>\n )\n case 'list-item':\n return (\n <li style={style} {...attributes}>\n {children}\n </li>\n )\n case 'numbered-list':\n return (\n <ol style={style} {...attributes}>\n {children}\n </ol>\n )\n default:\n return (\n <p style={style} {...attributes}>\n {children}\n </p>\n )\n }\n}\n\nconst Leaf = ({\n attributes,\n children,\n leaf,\n}: {\n attributes: any\n\n children: any\n\n leaf: any\n}) => {\n if (leaf.bold) {\n children = <strong>{children}</strong>\n }\n\n if (leaf.code) {\n children = <code>{children}</code>\n }\n\n if (leaf.italic) {\n children = <em>{children}</em>\n }\n\n if (leaf.underline) {\n children = <u>{children}</u>\n }\n\n return <span {...attributes}>{children}</span>\n}\n\nconst HoveringToolbar = () => {\n const ref = useRef<HTMLDivElement>(null)\n const editor = useSlate()\n const inFocus = useFocused()\n\n useEffect(() => {\n const el = ref.current\n const { selection } = editor\n\n if (!el) {\n return\n }\n\n if (\n !selection ||\n !inFocus ||\n Range.isCollapsed(selection) ||\n Editor.string(editor, selection) === ''\n ) {\n el.removeAttribute('style')\n return\n }\n\n const domSelection = window.getSelection()\n const domRange = domSelection?.getRangeAt(0)\n const rect = domRange?.getBoundingClientRect()\n el.style.opacity = '1'\n if (rect) {\n el.style.top = `${rect.top + window.pageYOffset - el.offsetHeight}px`\n el.style.left = `${rect.left + window.pageXOffset - el.offsetWidth / 2 + rect.width / 2}px`\n }\n })\n\n return (\n <Portal>\n <div\n ref={ref}\n className=\"editor-menu\"\n onMouseDown={e => {\n // prevent toolbar from taking focus away from editor\n e.preventDefault()\n }}\n >\n <FormatButton format=\"bold\" icon={<BoldOutlined />} />\n <FormatButton format=\"italic\" icon={<ItalicOutlined />} />\n <FormatButton format=\"underline\" icon={<UnderlineOutlined />} />\n <BlockButton format=\"numbered-list\" icon={<OrderedListOutlined />} />\n <BlockButton format=\"bulleted-list\" icon={<UnorderedListOutlined />} />\n <BlockButton format=\"left\" icon={<AlignLeftOutlined />} />\n <BlockButton format=\"center\" icon={<AlignCenterOutlined />} />\n <BlockButton format=\"right\" icon={<AlignRightOutlined />} />\n <BlockButton format=\"justify\" icon={<ColumnWidthOutlined />} />\n </div>\n </Portal>\n )\n}\n\nconst FormatButton: React.FC<FormatButtonProps> = ({ format, icon }) => {\n const editor = useSlate()\n return (\n <Button\n onClick={() => toggleMark(editor, format)}\n icon={icon}\n color={isMarkActive(editor, format) ? 'primary' : 'default'}\n variant=\"text\"\n ></Button>\n )\n}\n\nconst BlockButton: React.FC<FormatButtonProps> = ({ format, icon }) => {\n const editor = useSlate()\n return (\n <Button\n color={\n isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type')\n ? 'primary'\n : 'default'\n }\n icon={icon}\n variant=\"text\"\n onClick={() => {\n toggleBlock(editor, format)\n }}\n ></Button>\n )\n}\n\nexport default BoxEditor\n"],"names":["SlateElement"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../packages/dashboard-workbench/components/module-content/text-module/editor/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { ReactNode, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { Button } from 'antd'\nimport {\n AlignCenterOutlined,\n AlignLeftOutlined,\n AlignRightOutlined,\n BoldOutlined,\n ColumnWidthOutlined,\n ItalicOutlined,\n OrderedListOutlined,\n UnderlineOutlined,\n UnorderedListOutlined,\n} from '@ant-design/icons'\nimport ReactDOM from 'react-dom'\nimport { useTranslation } from 'react-i18next'\nimport { JSX } from 'react/jsx-runtime'\nimport {\n BaseElement,\n createEditor,\n Editor,\n Range,\n Element as SlateElement,\n Transforms,\n} from 'slate'\nimport { withHistory } from 'slate-history'\nimport { Editable, Slate, useFocused, useSlate, withReact } from 'slate-react'\nimport useDebounce from './useDebounce'\nimport './prose.css'\n\ninterface CustomElement extends BaseElement {\n type: string // 你需要的类型\n align?: string // 如果你有对齐属性\n}\n\nconst LIST_TYPES = ['numbered-list', 'bulleted-list']\nconst TEXT_ALIGN_TYPES = ['left', 'center', 'right', 'justify']\n\nconst Portal = ({ children }: { children?: ReactNode }) => {\n return typeof document === 'object' ? ReactDOM.createPortal(children, document.body) : null\n}\n\ninterface FormatButtonProps {\n format: string\n\n icon: any\n}\n\ninterface EditorProps {\n defaultValue: any\n onChange: (val: unknown) => void\n}\n\nconst BoxEditor: React.FC<EditorProps> = ({ defaultValue, onChange }) => {\n const { t } = useTranslation()\n const renderElement = useCallback(\n (\n props: JSX.IntrinsicAttributes & {\n attributes: any\n children: any\n element: any\n }\n ) => <Element {...props} />,\n []\n )\n const renderLeaf = useCallback(\n (\n props: JSX.IntrinsicAttributes & {\n attributes: any\n children: any\n leaf: any\n }\n ) => <Leaf {...props} />,\n []\n )\n const editor = useMemo(() => withHistory(withReact(createEditor())), [])\n\n const debouncedOnChange = useDebounce((val: any) => {\n onChange?.(val)\n }, 300) // 300 毫秒的延迟\n\n return (\n <div style={{ width: '100%', height: '100%' }}>\n <Slate editor={editor} initialValue={defaultValue} onChange={debouncedOnChange}>\n <HoveringToolbar />\n <Editable\n style={{ width: '100%', height: '100%', outline: 'none' }}\n className=\"prose prose-sm\"\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n spellCheck\n autoFocus\n placeholder={t('pleaseEnter')}\n onDOMBeforeInput={(event: InputEvent) => {\n switch (event.inputType) {\n case 'formatBold':\n event.preventDefault()\n return toggleMark(editor, 'bold')\n case 'formatItalic':\n event.preventDefault()\n return toggleMark(editor, 'italic')\n case 'formatUnderline':\n event.preventDefault()\n return toggleMark(editor, 'underlined')\n }\n }}\n />\n </Slate>\n </div>\n )\n}\n\n// 更新 toggleBlock 函数\nconst toggleBlock = (editor: Editor, format: string) => {\n const isActive = isBlockActive(\n editor,\n format,\n TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type'\n )\n const isList = LIST_TYPES.includes(format)\n\n Transforms.unwrapNodes(editor, {\n match: n =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes((n as CustomElement).type) && // 使用类型断言\n !TEXT_ALIGN_TYPES.includes(format),\n split: true,\n })\n\n const newProperties: Partial<CustomElement> = {}\n if (TEXT_ALIGN_TYPES.includes(format)) {\n newProperties.align = isActive ? undefined : format\n } else {\n newProperties.type = isActive ? 'paragraph' : isList ? 'list-item' : format\n }\n Transforms.setNodes<CustomElement>(editor, newProperties)\n\n if (!isActive && isList) {\n const block: CustomElement = { type: format, children: [] }\n Transforms.wrapNodes(editor, block)\n }\n}\n\nconst toggleMark = (editor: Editor, format: string) => {\n const isActive = isMarkActive(editor, format)\n\n if (isActive) {\n Editor.removeMark(editor, format)\n } else {\n Editor.addMark(editor, format, true)\n }\n}\n\n// 更新 isBlockActive 函数\nconst isBlockActive = (editor: Editor, format: string, blockType = 'type') => {\n const { selection } = editor\n if (!selection) return false\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: n =>\n !Editor.isEditor(n) && SlateElement.isElement(n) && (n as any)[blockType] === format, // 使用类型断言\n })\n )\n\n return !!match\n}\n\nconst isMarkActive = (editor: Editor, format: string) => {\n const marks: any = Editor.marks(editor)\n return marks ? marks[format] === true : false\n}\n\nconst Element = ({\n attributes,\n children,\n element,\n}: {\n attributes: any\n\n children: any\n\n element: any\n}) => {\n const style = { textAlign: element.align }\n switch (element.type) {\n case 'block-quote':\n return (\n <blockquote style={style} {...attributes}>\n {children}\n </blockquote>\n )\n case 'bulleted-list':\n return (\n <ul style={style} {...attributes}>\n {children}\n </ul>\n )\n case 'heading-one':\n return (\n <h1 style={style} {...attributes}>\n {children}\n </h1>\n )\n case 'heading-two':\n return (\n <h2 style={style} {...attributes}>\n {children}\n </h2>\n )\n case 'list-item':\n return (\n <li style={style} {...attributes}>\n {children}\n </li>\n )\n case 'numbered-list':\n return (\n <ol style={style} {...attributes}>\n {children}\n </ol>\n )\n default:\n return (\n <p style={style} {...attributes}>\n {children}\n </p>\n )\n }\n}\n\nconst Leaf = ({\n attributes,\n children,\n leaf,\n}: {\n attributes: any\n\n children: any\n\n leaf: any\n}) => {\n if (leaf.bold) {\n children = <strong>{children}</strong>\n }\n\n if (leaf.code) {\n children = <code>{children}</code>\n }\n\n if (leaf.italic) {\n children = <em>{children}</em>\n }\n\n if (leaf.underline) {\n children = <u>{children}</u>\n }\n\n return <span {...attributes}>{children}</span>\n}\n\nconst HoveringToolbar = () => {\n const ref = useRef<HTMLDivElement>(null)\n const editor = useSlate()\n const inFocus = useFocused()\n\n useEffect(() => {\n const el = ref.current\n const { selection } = editor\n\n if (!el) {\n return\n }\n\n if (\n !selection ||\n !inFocus ||\n Range.isCollapsed(selection) ||\n Editor.string(editor, selection) === ''\n ) {\n el.removeAttribute('style')\n return\n }\n\n const domSelection = window.getSelection()\n const domRange = domSelection?.getRangeAt(0)\n const rect = domRange?.getBoundingClientRect()\n el.style.opacity = '1'\n if (rect) {\n el.style.top = `${rect.top + window.pageYOffset - el.offsetHeight}px`\n el.style.left = `${rect.left + window.pageXOffset - el.offsetWidth / 2 + rect.width / 2}px`\n }\n })\n\n return (\n <Portal>\n <div\n ref={ref}\n className=\"editor-menu\"\n onMouseDown={e => {\n // prevent toolbar from taking focus away from editor\n e.preventDefault()\n }}\n >\n <FormatButton format=\"bold\" icon={<BoldOutlined />} />\n <FormatButton format=\"italic\" icon={<ItalicOutlined />} />\n <FormatButton format=\"underline\" icon={<UnderlineOutlined />} />\n <BlockButton format=\"numbered-list\" icon={<OrderedListOutlined />} />\n <BlockButton format=\"bulleted-list\" icon={<UnorderedListOutlined />} />\n <BlockButton format=\"left\" icon={<AlignLeftOutlined />} />\n <BlockButton format=\"center\" icon={<AlignCenterOutlined />} />\n <BlockButton format=\"right\" icon={<AlignRightOutlined />} />\n <BlockButton format=\"justify\" icon={<ColumnWidthOutlined />} />\n </div>\n </Portal>\n )\n}\n\nconst FormatButton: React.FC<FormatButtonProps> = ({ format, icon }) => {\n const editor = useSlate()\n return (\n <Button\n onClick={() => toggleMark(editor, format)}\n icon={icon}\n color={isMarkActive(editor, format) ? 'primary' : 'default'}\n variant=\"text\"\n ></Button>\n )\n}\n\nconst BlockButton: React.FC<FormatButtonProps> = ({ format, icon }) => {\n const editor = useSlate()\n return (\n <Button\n color={\n isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type')\n ? 'primary'\n : 'default'\n }\n icon={icon}\n variant=\"text\"\n onClick={() => {\n toggleBlock(editor, format)\n }}\n ></Button>\n )\n}\n\nexport default BoxEditor\n"],"names":["SlateElement"],"mappings":"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"}
@@ -1,15 +1,2 @@
1
- type Condition = {
2
- field: string;
3
- condition: string;
4
- val?: string | number;
5
- val2?: string | number;
6
- rdate?: any;
7
- type?: any;
8
- };
9
- type ConditionType = 'all' | 'any';
10
- export interface FilterData {
11
- conditionList: Condition[];
12
- conditionType: ConditionType;
13
- }
14
- export declare const mapConditionsToPostgrest: (filterData: FilterData) => string;
15
- export {};
1
+ import { ConditionBlock } from '../add-module-modal/components/condition-modal/interface';
2
+ export declare const mapConditionsToPostgrest: (filterData: ConditionBlock) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../packages/dashboard-workbench/components/module-content/utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype Condition = {\n field: string\n condition: string\n val?: string | number\n val2?: string | number\n rdate?: any\n type?: any\n}\n\ntype ConditionType = 'all' | 'any'\n\nexport interface FilterData {\n conditionList: Condition[]\n conditionType: ConditionType\n}\n\nfunction getRDate({ rdate, u, field, value }: any) {\n if (rdate) {\n switch (rdate) {\n case 'exactdate':\n return `${field}${u}eq.${value}`\n case 'today':\n return `${field}${u}eq.${dayjs().format('YYYY-MM-DD')}`\n case 'yesterday':\n return `${field}${u}eq.${dayjs().subtract(1, 'day').format('YYYY-MM-DD')}`\n case 'thisweek':\n return `${field}${u}gte.${dayjs()\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs()\n .endOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')}`\n case 'lastweek': {\n const startOfLastWeek = dayjs().subtract(1, 'week').startOf('week').add(1, 'day')\n const endOfLastWeek = dayjs().subtract(1, 'week').endOf('week').add(1, 'day')\n return `${field}${u}gte.${startOfLastWeek.format(\n 'YYYY-MM-DD'\n )}&${field}${u}lte.${endOfLastWeek.format('YYYY-MM-DD')}`\n }\n case 'thismonth':\n return `${field}${u}gte.${dayjs()\n .startOf('month')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().endOf('month').format('YYYY-MM-DD')}`\n case 'lastmonth': {\n const startOfLastMonth = dayjs().subtract(1, 'month').startOf('month')\n const endOfLastMonth = dayjs().subtract(1, 'month').endOf('month')\n return `${field}${u}gte.${startOfLastMonth.format(\n 'YYYY-MM-DD'\n )}&${field}${u}lte.${endOfLastMonth.format('YYYY-MM-DD')}`\n }\n case 'last7days':\n return `${field}${u}gte.${dayjs()\n .subtract(7, 'days')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().format('YYYY-MM-DD')}`\n case 'last30days':\n return `${field}${u}gte.${dayjs()\n .subtract(30, 'days')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().format('YYYY-MM-DD')}`\n default:\n return '' // 对于未支持的 rdate 值返回空字符串\n }\n }\n}\n\nexport const mapConditionsToPostgrest = (filterData: FilterData): string => {\n const { conditionList, conditionType = 'all' } = filterData\n const u = conditionType === 'all' ? '=' : '.' // 拼接逻辑\n const conditionStrings = conditionList\n .map(condition => {\n const { field, condition: cond, val, val2, rdate, type } = condition\n const value = (val as any)?.value ? (val as any)?.value : val\n switch (cond) {\n case '=':\n if (type !== 'timestamp') {\n return `${field}${u}eq.${value}`\n } else {\n if (rdate === 'exactdate') {\n return `${field}${u}eq.${value}`\n } else {\n return getRDate({ rdate, u, field, value })\n }\n }\n case '!=':\n return `${field}${u}neq.${value}`\n case 'include':\n return `${field}${u}cs.{${value}}` // 包含值\n case 'notinclude':\n return `${field}${u}not.cs.{${value}}` // 不包含值\n case '>':\n if (rdate === 'today') {\n return `${field}${u}gt.${new Date().toISOString().split('T')[0]}`\n }\n if (rdate === 'yesterday') {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n return `${field}${u}gt.${yesterday.toISOString().split('T')[0]}`\n }\n return `${field}${u}gt.${value}`\n case '>=':\n return `${field}${u}gte.${value}`\n case '<':\n if (rdate === 'today') {\n return `${field}${u}lt.${new Date().toISOString().split('T')[0]}`\n }\n if (rdate === 'yesterday') {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n return `${field}${u}lt.${yesterday.toISOString().split('T')[0]}`\n }\n return `${field}${u}lt.${value}`\n case '<=':\n return `${field}${u}lte.${value}`\n case 'contain':\n if (value && val2) {\n return `${field}${u}gte.${value},${field}.lte.${val2}`\n }\n return ''\n case 'before':\n return `${field}${u}lt.${value}`\n case 'after':\n return `${field}${u}gt.${value}`\n case 'null':\n return `${field}${u}is.null`\n case 'notnull':\n return `${field}${u}not.is.null`\n default:\n return ''\n }\n })\n .filter(Boolean) // 过滤掉空字符串\n\n let joinedCondition\n if (conditionType === 'all' || conditionStrings.length === 1) {\n joinedCondition = conditionStrings.join('&')\n } else {\n joinedCondition = `or=(${conditionStrings.join(',')})`\n }\n return joinedCondition\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../packages/dashboard-workbench/components/module-content/utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport { ConditionBlock } from '../add-module-modal/components/condition-modal/interface'\n\nfunction getRDate({ rdate, u, field, value }: any) {\n if (rdate) {\n switch (rdate) {\n case 'exactdate':\n return `${field}${u}eq.${value}`\n case 'today':\n return `${field}${u}eq.${dayjs().format('YYYY-MM-DD')}`\n case 'yesterday':\n return `${field}${u}eq.${dayjs().subtract(1, 'day').format('YYYY-MM-DD')}`\n case 'thisweek':\n return `${field}${u}gte.${dayjs()\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs()\n .endOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')}`\n case 'lastweek': {\n const startOfLastWeek = dayjs().subtract(1, 'week').startOf('week').add(1, 'day')\n const endOfLastWeek = dayjs().subtract(1, 'week').endOf('week').add(1, 'day')\n return `${field}${u}gte.${startOfLastWeek.format(\n 'YYYY-MM-DD'\n )}&${field}${u}lte.${endOfLastWeek.format('YYYY-MM-DD')}`\n }\n case 'thismonth':\n return `${field}${u}gte.${dayjs()\n .startOf('month')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().endOf('month').format('YYYY-MM-DD')}`\n case 'lastmonth': {\n const startOfLastMonth = dayjs().subtract(1, 'month').startOf('month')\n const endOfLastMonth = dayjs().subtract(1, 'month').endOf('month')\n return `${field}${u}gte.${startOfLastMonth.format(\n 'YYYY-MM-DD'\n )}&${field}${u}lte.${endOfLastMonth.format('YYYY-MM-DD')}`\n }\n case 'last7days':\n return `${field}${u}gte.${dayjs()\n .subtract(7, 'days')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().format('YYYY-MM-DD')}`\n case 'last30days':\n return `${field}${u}gte.${dayjs()\n .subtract(30, 'days')\n .format('YYYY-MM-DD')}&${field}${u}lte.${dayjs().format('YYYY-MM-DD')}`\n default:\n return '' // 对于未支持的 rdate 值返回空字符串\n }\n }\n}\n\nexport const mapConditionsToPostgrest = (filterData: ConditionBlock): string => {\n const { conditionList, conditionType = 'all' } = filterData\n const u = conditionType === 'all' ? '=' : '.' // 拼接逻辑\n const conditionStrings = conditionList\n .map(condition => {\n const { field, condition: cond, val, val2, rdate, type } = condition\n const value = (val as any)?.value ? (val as any)?.value : val\n switch (cond) {\n case '=':\n if (type !== 'timestamp') {\n return `${field}${u}eq.${value}`\n } else {\n if (rdate === 'exactdate') {\n return `${field}${u}eq.${value}`\n } else {\n return getRDate({ rdate, u, field, value })\n }\n }\n case '!=':\n return `${field}${u}neq.${value}`\n case 'include':\n return `${field}${u}cs.{${value}}` // 包含值\n case 'notinclude':\n return `${field}${u}not.cs.{${value}}` // 不包含值\n case '>':\n if (rdate === 'today') {\n return `${field}${u}gt.${new Date().toISOString().split('T')[0]}`\n }\n if (rdate === 'yesterday') {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n return `${field}${u}gt.${yesterday.toISOString().split('T')[0]}`\n }\n return `${field}${u}gt.${value}`\n case '>=':\n return `${field}${u}gte.${value}`\n case '<':\n if (rdate === 'today') {\n return `${field}${u}lt.${new Date().toISOString().split('T')[0]}`\n }\n if (rdate === 'yesterday') {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n return `${field}${u}lt.${yesterday.toISOString().split('T')[0]}`\n }\n return `${field}${u}lt.${value}`\n case '<=':\n return `${field}${u}lte.${value}`\n case 'contain':\n if (value && val2) {\n return `${field}${u}gte.${value},${field}.lte.${val2}`\n }\n return ''\n case 'before':\n return `${field}${u}lt.${value}`\n case 'after':\n return `${field}${u}gt.${value}`\n case 'null':\n return `${field}${u}is.null`\n case 'notnull':\n return `${field}${u}not.is.null`\n default:\n return ''\n }\n })\n .filter(Boolean) // 过滤掉空字符串\n\n let joinedCondition\n if (conditionType === 'all' || conditionStrings.length === 1) {\n joinedCondition = conditionStrings.join('&')\n } else {\n joinedCondition = `or=(${conditionStrings.join(',')})`\n }\n return joinedCondition\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { ModuleData } from '../module-content';
2
1
  import { default as React } from 'react';
2
+ import { ModuleData } from '../module-content';
3
3
  interface ModuleHeaderProps {
4
4
  defaultValue: string;
5
5
  onChange?: (val: string) => void;
@@ -1,10 +1,10 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { Input, Dropdown } from "antd";
3
2
  import React, { useState, useRef, useEffect } from "react";
4
- import useDebounce from "../module-content/text-module/editor/useDebounce.js";
3
+ import { Input, Dropdown } from "antd";
5
4
  import { useTranslation } from "react-i18next";
6
- import IconMove from "../../icon/icon-move.js";
7
5
  import IconDrag from "../../icon/icon-drag.js";
6
+ import IconMove from "../../icon/icon-move.js";
7
+ import useDebounce from "../module-content/text-module/editor/useDebounce.js";
8
8
  const ModuleHeader = ({
9
9
  defaultValue,
10
10
  onChange,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../packages/dashboard-workbench/components/module-header/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Dropdown, Input } from 'antd'\nimport { FC, useEffect, useRef, useState } from 'react'\nimport useDebounce from '../module-content/text-module/editor/useDebounce'\nimport { ModuleData } from '../module-content'\nimport { useTranslation } from 'react-i18next'\nimport IconMove from '../../icon/icon-move'\nimport IconDrag from '../../icon/icon-drag'\nimport React from 'react'\n\ninterface ModuleHeaderProps {\n defaultValue: string\n onChange?: (val: string) => void\n module: ModuleData\n onDropdownItem?: (key: string) => void\n onMouseDown?: () => void\n onMouseUp?: () => void\n}\n\nconst ModuleHeader: FC<ModuleHeaderProps> = ({\n defaultValue,\n onChange,\n module,\n onDropdownItem,\n onMouseDown,\n onMouseUp,\n}) => {\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [title, setTitle] = useState<string>('')\n const inputRef = useRef<any>(null)\n const debouncedOnChange = useDebounce(val => {\n onChange?.(val)\n }, 300) // 300 毫秒的延迟\n const { t } = useTranslation()\n\n useEffect(() => {\n setTitle(title)\n }, [defaultValue])\n\n const handleDblClick = () => {\n // 获取input DOM元素\n const inputElement = inputRef.current?.input\n // 双击事件发生在input元素上时,触发全选\n inputElement.select()\n }\n\n const handleEnterPress = (event: { key: string }) => {\n if (event.key === 'Enter') {\n setIsEdit(false)\n }\n }\n\n return (\n <div\n className={`layout-item-head isCanDrag`}\n onMouseDown={() => {\n onMouseDown?.()\n }}\n onMouseUp={() => {\n onMouseUp?.()\n }}\n >\n <div className=\"head-inner\">\n <span className=\"title\">\n <span\n className=\"title-child\"\n onDoubleClick={e => {\n e.stopPropagation()\n setIsEdit(true)\n setTimeout(() => {\n inputRef.current?.focus()\n }, 100)\n }}\n >\n {isEdit ? (\n <Input\n defaultValue={defaultValue}\n onBlur={() => {\n setIsEdit(false)\n }}\n ref={inputRef}\n onKeyDown={handleEnterPress}\n onDoubleClick={handleDblClick}\n onChange={e => {\n setTitle(e.target.value)\n debouncedOnChange(e.target.value)\n }}\n />\n ) : (\n defaultValue\n )}\n </span>\n </span>\n\n <div className=\"menu-slot isNoCanDrag\">\n <Dropdown\n trigger={['click']}\n menu={{\n items: [\n module.type !== 'text'\n ? {\n label: t('configuration'),\n key: 'edit',\n }\n : null,\n {\n label: t('copy'),\n key: 'copy',\n },\n {\n key: 'delete',\n danger: true,\n label: t('delete'),\n },\n ],\n onClick: ({ key }) => {\n onDropdownItem?.(key)\n },\n }}\n >\n <button type=\"button\" className=\"dashboard-grid-menu-button\">\n <span className=\"universe-icon\">\n <IconMove />\n </span>\n </button>\n </Dropdown>\n </div>\n </div>\n <div className={`drag isCanDrag`}>\n <span className=\"universe-icon drag-icon\">\n <IconDrag />\n </span>\n </div>\n </div>\n )\n}\n\nexport default React.memo(ModuleHeader)\n"],"names":[],"mappings":";;;;;;;AAmBA,MAAM,eAAsC,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAkB,KAAK;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,EAAE;AACvC,QAAA,WAAW,OAAY,IAAI;AAC3B,QAAA,oBAAoB,YAAY,CAAO,QAAA;AAC3C,yCAAW;AAAA,KACV,GAAG;AACA,QAAA,EAAE,EAAE,IAAI,eAAe;AAE7B,YAAU,MAAM;AACd,aAAS,KAAK;AAAA,EAAA,GACb,CAAC,YAAY,CAAC;AAEjB,QAAM,iBAAiB,MAAM;;AAErB,UAAA,gBAAe,cAAS,YAAT,mBAAkB;AAEvC,iBAAa,OAAO;AAAA,EACtB;AAEM,QAAA,mBAAmB,CAAC,UAA2B;AAC/C,QAAA,MAAM,QAAQ,SAAS;AACzB,gBAAU,KAAK;AAAA,IAAA;AAAA,EAEnB;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,aAAa,MAAM;AACH;AAAA,MAChB;AAAA,MACA,WAAW,MAAM;AACH;AAAA,MACd;AAAA,MAEA,UAAA;AAAA,QAAC,qBAAA,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAC,oBAAA,QAAA,EAAK,WAAU,SACd,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,eAAe,CAAK,MAAA;AAClB,kBAAE,gBAAgB;AAClB,0BAAU,IAAI;AACd,2BAAW,MAAM;;AACf,iCAAS,YAAT,mBAAkB;AAAA,mBACjB,GAAG;AAAA,cACR;AAAA,cAEC,UACC,SAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,QAAQ,MAAM;AACZ,8BAAU,KAAK;AAAA,kBACjB;AAAA,kBACA,KAAK;AAAA,kBACL,WAAW;AAAA,kBACX,eAAe;AAAA,kBACf,UAAU,CAAK,MAAA;AACJ,6BAAA,EAAE,OAAO,KAAK;AACL,sCAAA,EAAE,OAAO,KAAK;AAAA,kBAAA;AAAA,gBAClC;AAAA,cAAA,IAGF;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAEA,oBAAC,OAAI,EAAA,WAAU,yBACb,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,CAAC,OAAO;AAAA,cACjB,MAAM;AAAA,gBACJ,OAAO;AAAA,kBACL,OAAO,SAAS,SACZ;AAAA,oBACE,OAAO,EAAE,eAAe;AAAA,oBACxB,KAAK;AAAA,kBAAA,IAEP;AAAA,kBACJ;AAAA,oBACE,OAAO,EAAE,MAAM;AAAA,oBACf,KAAK;AAAA,kBACP;AAAA,kBACA;AAAA,oBACE,KAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,OAAO,EAAE,QAAQ;AAAA,kBAAA;AAAA,gBAErB;AAAA,gBACA,SAAS,CAAC,EAAE,UAAU;AACpB,mEAAiB;AAAA,gBAAG;AAAA,cAExB;AAAA,cAEA,UAAC,oBAAA,UAAA,EAAO,MAAK,UAAS,WAAU,8BAC9B,UAAC,oBAAA,QAAA,EAAK,WAAU,iBACd,UAAC,oBAAA,UAAA,CAAA,CAAS,GACZ,EACF,CAAA;AAAA,YAAA;AAAA,UAAA,EAEJ,CAAA;AAAA,QAAA,GACF;AAAA,QACA,oBAAC,OAAI,EAAA,WAAW,kBACd,UAAA,oBAAC,QAAK,EAAA,WAAU,2BACd,UAAA,oBAAC,UAAS,CAAA,CAAA,EAAA,CACZ,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,MAAA,iBAAe,MAAM,KAAK,YAAY;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/dashboard-workbench/components/module-header/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport { Dropdown, Input } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport IconDrag from '../../icon/icon-drag'\nimport IconMove from '../../icon/icon-move'\nimport { ModuleData } from '../module-content'\nimport useDebounce from '../module-content/text-module/editor/useDebounce'\n\ninterface ModuleHeaderProps {\n defaultValue: string\n onChange?: (val: string) => void\n module: ModuleData\n onDropdownItem?: (key: string) => void\n onMouseDown?: () => void\n onMouseUp?: () => void\n}\n\nconst ModuleHeader: FC<ModuleHeaderProps> = ({\n defaultValue,\n onChange,\n module,\n onDropdownItem,\n onMouseDown,\n onMouseUp,\n}) => {\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [title, setTitle] = useState<string>('')\n const inputRef = useRef<any>(null)\n const debouncedOnChange = useDebounce(val => {\n onChange?.(val)\n }, 300) // 300 毫秒的延迟\n const { t } = useTranslation()\n\n useEffect(() => {\n setTitle(title)\n }, [defaultValue])\n\n const handleDblClick = () => {\n // 获取input DOM元素\n const inputElement = inputRef.current?.input\n // 双击事件发生在input元素上时,触发全选\n inputElement.select()\n }\n\n const handleEnterPress = (event: { key: string }) => {\n if (event.key === 'Enter') {\n setIsEdit(false)\n }\n }\n\n return (\n <div\n className={`layout-item-head isCanDrag`}\n onMouseDown={() => {\n onMouseDown?.()\n }}\n onMouseUp={() => {\n onMouseUp?.()\n }}\n >\n <div className=\"head-inner\">\n <span className=\"title\">\n <span\n className=\"title-child\"\n onDoubleClick={e => {\n e.stopPropagation()\n setIsEdit(true)\n setTimeout(() => {\n inputRef.current?.focus()\n }, 100)\n }}\n >\n {isEdit ? (\n <Input\n defaultValue={defaultValue}\n onBlur={() => {\n setIsEdit(false)\n }}\n ref={inputRef}\n onKeyDown={handleEnterPress}\n onDoubleClick={handleDblClick}\n onChange={e => {\n setTitle(e.target.value)\n debouncedOnChange(e.target.value)\n }}\n />\n ) : (\n defaultValue\n )}\n </span>\n </span>\n\n <div className=\"menu-slot isNoCanDrag\">\n <Dropdown\n trigger={['click']}\n menu={{\n items: [\n module.type !== 'text'\n ? {\n label: t('configuration'),\n key: 'edit',\n }\n : null,\n {\n label: t('copy'),\n key: 'copy',\n },\n {\n key: 'delete',\n danger: true,\n label: t('delete'),\n },\n ],\n onClick: ({ key }) => {\n onDropdownItem?.(key)\n },\n }}\n >\n <button type=\"button\" className=\"dashboard-grid-menu-button\">\n <span className=\"universe-icon\">\n <IconMove />\n </span>\n </button>\n </Dropdown>\n </div>\n </div>\n <div className={`drag isCanDrag`}>\n <span className=\"universe-icon drag-icon\">\n <IconDrag />\n </span>\n </div>\n </div>\n )\n}\n\nexport default React.memo(ModuleHeader)\n"],"names":[],"mappings":";;;;;;;AAkBA,MAAM,eAAsC,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAkB,KAAK;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,EAAE;AACvC,QAAA,WAAW,OAAY,IAAI;AAC3B,QAAA,oBAAoB,YAAY,CAAO,QAAA;AAC3C,yCAAW;AAAA,KACV,GAAG;AACA,QAAA,EAAE,EAAE,IAAI,eAAe;AAE7B,YAAU,MAAM;AACd,aAAS,KAAK;AAAA,EAAA,GACb,CAAC,YAAY,CAAC;AAEjB,QAAM,iBAAiB,MAAM;;AAErB,UAAA,gBAAe,cAAS,YAAT,mBAAkB;AAEvC,iBAAa,OAAO;AAAA,EACtB;AAEM,QAAA,mBAAmB,CAAC,UAA2B;AAC/C,QAAA,MAAM,QAAQ,SAAS;AACzB,gBAAU,KAAK;AAAA,IAAA;AAAA,EAEnB;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,aAAa,MAAM;AACH;AAAA,MAChB;AAAA,MACA,WAAW,MAAM;AACH;AAAA,MACd;AAAA,MAEA,UAAA;AAAA,QAAC,qBAAA,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAC,oBAAA,QAAA,EAAK,WAAU,SACd,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,eAAe,CAAK,MAAA;AAClB,kBAAE,gBAAgB;AAClB,0BAAU,IAAI;AACd,2BAAW,MAAM;;AACf,iCAAS,YAAT,mBAAkB;AAAA,mBACjB,GAAG;AAAA,cACR;AAAA,cAEC,UACC,SAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,QAAQ,MAAM;AACZ,8BAAU,KAAK;AAAA,kBACjB;AAAA,kBACA,KAAK;AAAA,kBACL,WAAW;AAAA,kBACX,eAAe;AAAA,kBACf,UAAU,CAAK,MAAA;AACJ,6BAAA,EAAE,OAAO,KAAK;AACL,sCAAA,EAAE,OAAO,KAAK;AAAA,kBAAA;AAAA,gBAClC;AAAA,cAAA,IAGF;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAEA,oBAAC,OAAI,EAAA,WAAU,yBACb,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,CAAC,OAAO;AAAA,cACjB,MAAM;AAAA,gBACJ,OAAO;AAAA,kBACL,OAAO,SAAS,SACZ;AAAA,oBACE,OAAO,EAAE,eAAe;AAAA,oBACxB,KAAK;AAAA,kBAAA,IAEP;AAAA,kBACJ;AAAA,oBACE,OAAO,EAAE,MAAM;AAAA,oBACf,KAAK;AAAA,kBACP;AAAA,kBACA;AAAA,oBACE,KAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,OAAO,EAAE,QAAQ;AAAA,kBAAA;AAAA,gBAErB;AAAA,gBACA,SAAS,CAAC,EAAE,UAAU;AACpB,mEAAiB;AAAA,gBAAG;AAAA,cAExB;AAAA,cAEA,UAAC,oBAAA,UAAA,EAAO,MAAK,UAAS,WAAU,8BAC9B,UAAC,oBAAA,QAAA,EAAK,WAAU,iBACd,UAAC,oBAAA,UAAA,CAAA,CAAS,GACZ,EACF,CAAA;AAAA,YAAA;AAAA,UAAA,EAEJ,CAAA;AAAA,QAAA,GACF;AAAA,QACA,oBAAC,OAAI,EAAA,WAAW,kBACd,UAAA,oBAAC,QAAK,EAAA,WAAU,2BACd,UAAA,oBAAC,UAAS,CAAA,CAAA,EAAA,CACZ,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,MAAA,iBAAe,MAAM,KAAK,YAAY;"}
@@ -1,16 +1,28 @@
1
- import { default as React, ReactNode } from 'react';
2
- import { SourceDataTypes } from './types';
1
+ import { default as React } from 'react';
2
+ import { ConditionBlockWrapper } from './components/global-filter-condition/interface';
3
+ import { ModuleData } from './components/module-content';
4
+ import { EnumDataApi, ModuleDataApi, SourceDataItem } from './types';
3
5
  interface AppContextProps {
4
6
  globalData?: {
5
7
  fieldMap?: Record<string, string>;
6
- sourceData?: SourceDataTypes[];
8
+ sourceData?: SourceDataItem[];
7
9
  };
8
- setGlobalData: (items?: AppContextProps['globalData']) => void;
9
- }
10
- interface AppProviderProps {
11
- children: ReactNode;
12
- initialData?: AppContextProps['globalData'];
10
+ service?: {
11
+ moduleDataApi?: ModuleDataApi;
12
+ enumDataApi?: EnumDataApi;
13
+ onCreateModule?: (val: ModuleData) => Promise<{
14
+ data: ModuleData;
15
+ }>;
16
+ onUpdateModule?: (val: ModuleData) => Promise<{
17
+ data: ModuleData;
18
+ }>;
19
+ onDeleteModule?: (val: string) => Promise<{
20
+ data: ModuleData;
21
+ }>;
22
+ };
23
+ globalFilterCondition?: ConditionBlockWrapper[];
24
+ setGlobalFilterCondition: React.Dispatch<React.SetStateAction<ConditionBlockWrapper[]>>;
13
25
  }
14
- export declare const AppProvider: React.FC<AppProviderProps>;
26
+ export declare const AppContext: React.Context<AppContextProps | undefined>;
15
27
  export declare const useAppContext: () => AppContextProps;
16
28
  export {};
@@ -1,12 +1,5 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { createContext, useState, useContext } from "react";
1
+ import { createContext, useContext } from "react";
3
2
  const AppContext = createContext(void 0);
4
- const AppProvider = ({ children, initialData }) => {
5
- const [globalData, setGlobalData] = useState(
6
- initialData
7
- );
8
- return /* @__PURE__ */ jsx(AppContext.Provider, { value: { globalData, setGlobalData }, children });
9
- };
10
3
  const useAppContext = () => {
11
4
  const context = useContext(AppContext);
12
5
  if (!context) {
@@ -15,7 +8,7 @@ const useAppContext = () => {
15
8
  return context;
16
9
  };
17
10
  export {
18
- AppProvider,
11
+ AppContext,
19
12
  useAppContext
20
13
  };
21
14
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sources":["../../packages/dashboard-workbench/context.tsx"],"sourcesContent":["// Context.tsx\nimport React, { createContext, useContext, useState, ReactNode } from 'react'\nimport { SourceDataTypes } from './types'\n\ninterface AppContextProps {\n globalData?: {\n fieldMap?: Record<string, string>\n sourceData?: SourceDataTypes[]\n }\n setGlobalData: (items?: AppContextProps['globalData']) => void\n}\n\nconst AppContext = createContext<AppContextProps | undefined>(undefined)\n\ninterface AppProviderProps {\n children: ReactNode\n initialData?: AppContextProps['globalData'] // 接收外部传入的初始数组对象\n}\n\nexport const AppProvider: React.FC<AppProviderProps> = ({ children, initialData }) => {\n const [globalData, setGlobalData] = useState<AppContextProps['globalData'] | undefined>(\n initialData\n )\n\n return <AppContext.Provider value={{ globalData, setGlobalData }}>{children}</AppContext.Provider>\n}\n\nexport const useAppContext = () => {\n const context = useContext(AppContext)\n if (!context) {\n throw new Error('useAppContext must be used within an AppProvider')\n }\n return context\n}\n"],"names":[],"mappings":";;AAYA,MAAM,aAAa,cAA2C,MAAS;AAOhE,MAAM,cAA0C,CAAC,EAAE,UAAU,kBAAkB;AAC9E,QAAA,CAAC,YAAY,aAAa,IAAI;AAAA,IAClC;AAAA,EACF;AAEO,SAAA,oBAAC,WAAW,UAAX,EAAoB,OAAO,EAAE,YAAY,iBAAkB,UAAS;AAC9E;AAEO,MAAM,gBAAgB,MAAM;AAC3B,QAAA,UAAU,WAAW,UAAU;AACrC,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,kDAAkD;AAAA,EAAA;AAE7D,SAAA;AACT;"}
1
+ {"version":3,"file":"context.js","sources":["../../packages/dashboard-workbench/context.tsx"],"sourcesContent":["// Context.tsx\nimport React, { createContext, ReactNode, useContext, useState } from 'react'\nimport { ConditionBlockWrapper } from './components/global-filter-condition/interface'\nimport { ModuleData } from './components/module-content'\nimport { EnumDataApi, ModuleDataApi, SourceDataItem } from './types'\n\ninterface AppContextProps {\n globalData?: {\n fieldMap?: Record<string, string> // 目前看到枚举的翻译用到了这个\n sourceData?: SourceDataItem[]\n }\n service?: {\n moduleDataApi?: ModuleDataApi\n enumDataApi?: EnumDataApi\n onCreateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onUpdateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onDeleteModule?: (val: string) => Promise<{ data: ModuleData }>\n }\n\n globalFilterCondition?: ConditionBlockWrapper[]\n setGlobalFilterCondition: React.Dispatch<React.SetStateAction<ConditionBlockWrapper[]>>\n}\n\nexport const AppContext = createContext<AppContextProps | undefined>(undefined)\n\nexport const useAppContext = () => {\n const context = useContext(AppContext)\n if (!context) {\n throw new Error('useAppContext must be used within an AppProvider')\n }\n return context\n}\n"],"names":[],"mappings":";AAuBa,MAAA,aAAa,cAA2C,MAAS;AAEvE,MAAM,gBAAgB,MAAM;AAC3B,QAAA,UAAU,WAAW,UAAU;AACrC,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,kDAAkD;AAAA,EAAA;AAE7D,SAAA;AACT;"}
@@ -0,0 +1,3 @@
1
+ import { SVGProps } from 'react';
2
+ declare const SvgComponent: (props: SVGProps<SVGSVGElement>) => import("react/jsx-runtime").JSX.Element;
3
+ export default SvgComponent;
@@ -0,0 +1,36 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ const SvgComponent = (props) => /* @__PURE__ */ jsxs(
3
+ "svg",
4
+ {
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ xmlSpace: "preserve",
7
+ width: "72",
8
+ height: "48",
9
+ viewBox: "0 0 72 48",
10
+ ...props,
11
+ children: [
12
+ /* @__PURE__ */ jsx(
13
+ "path",
14
+ {
15
+ fill: "#5B65F5",
16
+ d: "M17.2 22.1h5c.3 0 .5.2.5.4v15.3c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V22.5c.1-.2.3-.4.5-.4zM28.2 26.6h5c.3 0 .5.2.5.4v10.8c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V27c.1-.2.3-.4.5-.4zM39.2 18.8h5c.3 0 .5.1.5.3v18.7c0 .2-.2.3-.5.3h-5c-.3 0-.5-.1-.5-.3V19.1c.1-.2.3-.3.5-.3zM50.2 20.2h5c.3 0 .5.2.5.4v17.1c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V20.6c.1-.2.3-.4.5-.4z"
17
+ }
18
+ ),
19
+ /* @__PURE__ */ jsx(
20
+ "path",
21
+ {
22
+ fill: "none",
23
+ stroke: "#959bee",
24
+ strokeLinecap: "round",
25
+ strokeLinejoin: "round",
26
+ strokeWidth: 1.5,
27
+ d: "m16 33.9 12.5-18.5 15.5 8 13-13"
28
+ }
29
+ )
30
+ ]
31
+ }
32
+ );
33
+ export {
34
+ SvgComponent as default
35
+ };
36
+ //# sourceMappingURL=icon-chart-combination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-chart-combination.js","sources":["../../../packages/dashboard-workbench/icon/icon-chart-combination.tsx"],"sourcesContent":["import * as React from 'react'\nimport { SVGProps } from 'react'\n\nconst SvgComponent = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlSpace=\"preserve\"\n width=\"72\"\n height=\"48\"\n viewBox=\"0 0 72 48\"\n {...props}\n >\n <path\n fill=\"#5B65F5\"\n d=\"M17.2 22.1h5c.3 0 .5.2.5.4v15.3c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V22.5c.1-.2.3-.4.5-.4zM28.2 26.6h5c.3 0 .5.2.5.4v10.8c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V27c.1-.2.3-.4.5-.4zM39.2 18.8h5c.3 0 .5.1.5.3v18.7c0 .2-.2.3-.5.3h-5c-.3 0-.5-.1-.5-.3V19.1c.1-.2.3-.3.5-.3zM50.2 20.2h5c.3 0 .5.2.5.4v17.1c0 .2-.2.4-.5.4h-5c-.3 0-.5-.2-.5-.4V20.6c.1-.2.3-.4.5-.4z\"\n />\n <path\n fill=\"none\"\n stroke=\"#959bee\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"m16 33.9 12.5-18.5 15.5 8 13-13\"\n />\n </svg>\n)\nexport default SvgComponent\n"],"names":[],"mappings":";AAGM,MAAA,eAAe,CAAC,UACpB;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,UAAS;AAAA,IACT,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACP,GAAG;AAAA,IAEJ,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,GAAE;AAAA,QAAA;AAAA,MACJ;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAO;AAAA,UACP,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AACF;"}
@@ -1,9 +1,9 @@
1
1
  import { default as React } from 'react';
2
2
  import { Layout } from 'react-grid-layout';
3
3
  import { ModuleData } from './components/module-content';
4
- import { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataTypes } from './types';
4
+ import { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataItem } from './types';
5
5
  interface DashboardWorkbenchProps {
6
- sourceData?: SourceDataTypes[];
6
+ sourceData?: SourceDataItem[];
7
7
  moduleConfigData?: ModuleConfigDataTypes;
8
8
  fieldMap?: Record<string, string>;
9
9
  lang?: 'zh-CN' | 'en-US';
@@ -1,45 +1,36 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import React, { useEffect, useState } from "react";
3
+ import { Modal, message } from "antd";
4
+ import { ExclamationCircleOutlined } from "@ant-design/icons";
3
5
  import { WidthProvider, Responsive } from "react-grid-layout";
4
- import ModuleContent from "./components/module-content/index.js";
6
+ import { useTranslation } from "react-i18next";
7
+ import { useLocalStorageState } from "ahooks";
8
+ import { pick, omit } from "lodash-es";
5
9
  import AddModuleBtn from "./components/add-module-btn/index.js";
6
- /* empty css */
7
- import { AppProvider, useAppContext } from "./context.js";
8
- import AddStatisticsModal from "./components/add-module-modal/add-statistics-modal/index.js";
9
10
  import AddStatisticsModal$1 from "./components/add-module-modal/add-calendar-modal/index.js";
10
11
  import AddStatisticsModal$2 from "./components/add-module-modal/add-chart-modal/index.js";
11
- import "./lang/index.js";
12
- import { useTranslation } from "react-i18next";
13
- /* empty css */
14
- import { Modal, message } from "antd";
15
- import { ExclamationCircleOutlined } from "@ant-design/icons";
12
+ import AddStatisticsModal from "./components/add-module-modal/add-statistics-modal/index.js";
13
+ import { GlobalFilterCondition } from "./components/global-filter-condition/index.js";
14
+ import ModuleContent from "./components/module-content/index.js";
16
15
  import ModuleHeader from "./components/module-header/index.js";
16
+ import { AppContext } from "./context.js";
17
17
  import { findChangedItems } from "./utils/index.js";
18
- import { omit } from "lodash-es";
18
+ import "./lang/index.js";
19
+ /* empty css */
20
+ /* empty css */
19
21
  const ResponsiveReactGridLayout = WidthProvider(Responsive);
20
22
  const DashboardWorkbench = ({
21
- sourceData,
22
23
  moduleConfigData,
23
- fieldMap,
24
24
  moduleDataApi,
25
25
  enumDataApi,
26
26
  onCreateModule,
27
27
  onUpdateModule,
28
28
  onDeleteModule,
29
- lang,
30
- // onLayoutChange,
31
29
  className = "layout",
32
30
  cols = { lg: 12, md: 12, sm: 12, xs: 12, xxs: 12 },
33
31
  rowHeight = 79
34
32
  }) => {
35
- const { setGlobalData } = useAppContext();
36
- useEffect(() => {
37
- setGlobalData({ fieldMap, sourceData });
38
- }, [fieldMap, setGlobalData, sourceData]);
39
- const { i18n, t } = useTranslation();
40
- useEffect(() => {
41
- i18n.changeLanguage(lang || "zh_CN");
42
- }, [i18n, lang]);
33
+ const { t } = useTranslation();
43
34
  const [modules, setModules] = useState([]);
44
35
  const [activeId, setActiveId] = useState();
45
36
  useEffect(() => {
@@ -201,14 +192,24 @@ const DashboardWorkbench = ({
201
192
  };
202
193
  return /* @__PURE__ */ jsxs("div", { className: "pivot-table", children: [
203
194
  /* @__PURE__ */ jsxs("div", { className: "bitable-block-dashboard", children: [
204
- /* @__PURE__ */ jsx("div", { className: "bitable-block-dashboard-toolbar bitable-toolbar", children: /* @__PURE__ */ jsx("div", { className: "bitable-block-dashboard-toolbar--left", children: /* @__PURE__ */ jsx(
205
- AddModuleBtn,
206
- {
207
- onOk: (val) => {
208
- handleOpenCreateModal(val);
195
+ /* @__PURE__ */ jsx("div", { className: "bitable-block-dashboard-toolbar bitable-toolbar", children: /* @__PURE__ */ jsxs("div", { className: "bitable-block-dashboard-toolbar--left", children: [
196
+ /* @__PURE__ */ jsx(
197
+ AddModuleBtn,
198
+ {
199
+ onOk: (val) => {
200
+ handleOpenCreateModal(val);
201
+ }
209
202
  }
210
- }
211
- ) }) }),
203
+ ),
204
+ /* @__PURE__ */ jsx(
205
+ GlobalFilterCondition,
206
+ {
207
+ style: {
208
+ marginLeft: 10
209
+ }
210
+ }
211
+ )
212
+ ] }) }),
212
213
  /* @__PURE__ */ jsx("div", { className: "bitable-block-dashboard__mount", children: /* @__PURE__ */ jsx("div", { className: "dashboard-container", children: /* @__PURE__ */ jsx(
213
214
  "div",
214
215
  {
@@ -406,7 +407,36 @@ const DashboardWorkbench = ({
406
407
  ] });
407
408
  };
408
409
  const index = React.memo((props) => {
409
- return /* @__PURE__ */ jsx(AppProvider, { children: /* @__PURE__ */ jsx(DashboardWorkbench, { ...props }) });
410
+ const { i18n } = useTranslation();
411
+ useEffect(() => {
412
+ i18n.changeLanguage((props == null ? void 0 : props.lang) || "zh_CN");
413
+ }, [i18n, props == null ? void 0 : props.lang]);
414
+ const globalData = {
415
+ fieldMap: props.fieldMap,
416
+ sourceData: props == null ? void 0 : props.sourceData
417
+ };
418
+ const service = pick(props, [
419
+ "moduleDataApi",
420
+ "enumDataApi",
421
+ "onCreateModule",
422
+ "onUpdateModule",
423
+ "onDeleteModule"
424
+ ]);
425
+ const [globalFilterCondition, setGlobalFilterCondition] = useLocalStorageState("test", {
426
+ defaultValue: []
427
+ });
428
+ return /* @__PURE__ */ jsx(
429
+ AppContext.Provider,
430
+ {
431
+ value: {
432
+ globalData,
433
+ service,
434
+ globalFilterCondition,
435
+ setGlobalFilterCondition
436
+ },
437
+ children: /* @__PURE__ */ jsx(DashboardWorkbench, { ...props })
438
+ }
439
+ );
410
440
  });
411
441
  export {
412
442
  index as default
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../packages/dashboard-workbench/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useState, useEffect, useMemo } from 'react'\nimport { WidthProvider, Responsive, Layout } from 'react-grid-layout'\nimport ModuleContent, { ModuleData } from './components/module-content'\nimport AddModuleBtn, { ModuleValueType } from './components/add-module-btn'\nimport './styles/index.less'\nimport { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataTypes } from './types'\nimport { AppProvider, useAppContext } from './context'\nimport AddStatisticsModal from './components/add-module-modal/add-statistics-modal'\nimport AddCalendarModal from './components/add-module-modal/add-calendar-modal'\nimport AddChartModal from './components/add-module-modal/add-chart-modal'\nimport './lang/index'\nimport { useTranslation } from 'react-i18next'\nimport '/node_modules/react-grid-layout/css/styles.css'\n\nimport { message, Modal } from 'antd'\nimport { ExclamationCircleOutlined } from '@ant-design/icons'\n\nimport ModuleHeader from './components/module-header'\nimport { findChangedItems } from './utils'\nimport { omit } from 'lodash-es'\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive)\n\ninterface DashboardWorkbenchProps {\n sourceData?: SourceDataTypes[]\n moduleConfigData?: ModuleConfigDataTypes\n fieldMap?: Record<string, string>\n lang?: 'zh-CN' | 'en-US'\n moduleDataApi?: ModuleDataApi\n enumDataApi?: EnumDataApi\n onCreateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onUpdateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onDeleteModule?: (val: string) => Promise<{ data: ModuleData }>\n onLayoutChange?: (layout: Layout[]) => void\n className?: string\n cols?: { lg: number; md: number; sm: number; xs: number; xxs: number }\n rowHeight?: number\n}\n\nconst DashboardWorkbench: React.FC<DashboardWorkbenchProps> = ({\n sourceData,\n moduleConfigData,\n fieldMap,\n moduleDataApi,\n enumDataApi,\n onCreateModule,\n onUpdateModule,\n onDeleteModule,\n lang,\n // onLayoutChange,\n className = 'layout',\n cols = { lg: 12, md: 12, sm: 12, xs: 12, xxs: 12 },\n rowHeight = 79,\n}) => {\n /* ============================== global =============================== */\n const { setGlobalData } = useAppContext()\n\n useEffect(() => {\n setGlobalData({ fieldMap, sourceData })\n }, [fieldMap, setGlobalData, sourceData])\n\n /* ============================== i18n =============================== */\n\n const { i18n, t } = useTranslation()\n useEffect(() => {\n i18n.changeLanguage(lang || 'zh_CN')\n }, [i18n, lang])\n\n /* ============================== modules =============================== */\n const [modules, setModules] = useState<ModuleData[] | undefined>([])\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n\n useEffect(() => {\n setModules(\n moduleConfigData?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n )\n }, [moduleConfigData])\n\n const addModule = async (data: ModuleValueType) => {\n const wMultiple = data.type === 'calendar' ? 5 : 4\n const hMultiple = data.type === 'calendar' ? 5 : 3\n\n if (Array.isArray(modules) && data.type) {\n const newModuleData = {\n x: 0,\n y: 0,\n w: wMultiple,\n h: hMultiple,\n title: data.type.includes('chart') ? t('chartText') : title[data.type],\n ...data,\n type: data.type,\n }\n await onCreateModule?.(newModuleData).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setModules([...modules, { ...newModuleData, i: res.data?.id, id: res.data?.id }])\n })\n }\n }\n\n // 单个\n const updateModule = async (id: ModuleData['id'], updatedProps: Partial<ModuleData>) => {\n if (modules?.length) {\n const oldData = modules.find(m => m.id === id)\n const updatedModule = {\n ...oldData!,\n ...updatedProps,\n }\n const modulesData = modules.map(m => (m.id === id ? updatedModule : m))\n setModules(modulesData)\n await onUpdateModule?.(updatedModule).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n })\n }\n }\n\n // 批量\n const updateModules = async (updatedItems: Partial<ModuleData>[]) => {\n if (!modules?.length || !updatedItems?.length) return\n const updatedModules = modules.map(module => {\n const update = updatedItems.find(item => item.id === module.id)\n return update ? { ...module, ...update } : module\n })\n setModules(updatedModules)\n try {\n for (const updatedItem of updatedItems) {\n const res: any = await onUpdateModule?.(updatedItem as ModuleData)\n if (!res?.success) {\n throw new Error(res?.message || `Failed to update module: ${updatedItem.id}`)\n }\n }\n } catch (error: any) {\n setModules(modules)\n message.error(error.message || 'Failed to update modules')\n }\n }\n\n const deleteModule = async (id: ModuleData['id']) => {\n if (modules?.length) {\n setModules(modules.filter(m => m.id !== id))\n await onDeleteModule?.(id || '')\n }\n }\n\n /* ============================== drag =============================== */\n\n const margins: [number, number] = [10, 10]\n const [rowWidth, setRowWidth] = useState(0)\n const [, setCurrentCols] = useState<number>(cols.lg)\n\n const [isDragOrResize, setIsDragOrResize] = useState(false)\n const [isDragOrResizeEnd, setIsDragOrResizeEnd] = useState(false)\n\n const onBreakpointChange = (_breakpoint: string, cols: number) => {\n setCurrentCols(cols)\n }\n\n const onDragResizeStop = (newLayout: Layout[]) => {\n const changedItems = findChangedItems(newLayout, modules as any)\n const newChangedItems = changedItems.map(item => {\n const module = modules?.find(module => module.i === item.i)\n return { ...module, ...item }\n })\n updateModules(newChangedItems)\n }\n\n const onDragStartOrEnd = (type: 'start' | 'end', newLayout?: Layout[]) => {\n if (type === 'start') {\n setIsDragOrResize(true)\n setIsDragOrResizeEnd(true)\n } else {\n setIsDragOrResize(false)\n setTimeout(() => {\n setIsDragOrResizeEnd(false)\n }, 500)\n onDragResizeStop(newLayout || [])\n }\n }\n\n /* ============================== split =============================== */\n\n const [selectModuleData, setSelectModuleData] = useState<ModuleData>()\n\n const [isShowAddStatisticsModal, setIsShowAddStatisticsModal] = useState<boolean>(false)\n const [isShowAddCalendarModal, setIsShowAddCalendarModal] = useState<boolean>(false)\n const [isShowAddChartModal, setIsShowAddChartModal] = useState<boolean>(false)\n\n const handleOpenCreateModal = (val: any) => {\n if (val === 'text') {\n const data = {\n type: val,\n customData: {\n title: t('text'),\n editor: [\n {\n type: 'paragraph',\n children: [\n {\n text: '',\n },\n ],\n },\n ],\n },\n }\n addModule(data)\n } else if (val === 'statistics') {\n setIsShowAddStatisticsModal(true)\n } else if (val === 'calendar') {\n setIsShowAddCalendarModal(true)\n } else if (val?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n\n setSelectModuleData({\n title: '',\n type: val,\n w: 0,\n h: 0,\n x: 0,\n y: 0,\n })\n }\n\n const commonModalProps = {\n moduleDataApi: moduleDataApi,\n enumDataApi: enumDataApi,\n selectModuleData: selectModuleData,\n }\n const handleModalSubmit = (data: Partial<ModuleData>) => {\n if (data.id) {\n updateModule(data.id, omit(data, 'id'))\n } else {\n addModule(data)\n }\n }\n\n /* ============================== split =============================== */\n\n const title: any = {\n text: t('pb.text'),\n calendar: t('calendarText'),\n statistics: t('chartText'),\n }\n\n return (\n <div className=\"pivot-table\">\n <div className=\"bitable-block-dashboard\">\n <div className=\"bitable-block-dashboard-toolbar bitable-toolbar\">\n <div className=\"bitable-block-dashboard-toolbar--left\">\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\">\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${\n isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n onBreakpointChange={onBreakpointChange}\n className={className}\n compactType=\"vertical\"\n preventCollision={false}\n cols={cols}\n margin={margins}\n rowHeight={rowHeight}\n measureBeforeMount={false}\n draggableHandle=\".isCanDrag\"\n // draggableCancel=\".isNoCanDrag\"\n onWidthChange={(containerWidth, _margin, cols) => {\n setRowWidth(containerWidth / cols - 1)\n }}\n onDragStart={() => {\n onDragStartOrEnd('start')\n }}\n onDragStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n onResizeStart={() => {\n onDragStartOrEnd('start')\n }}\n onResizeStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n style={{\n backgroundSize: `${rowWidth}px ${rowHeight + margins[0]}px`,\n backgroundPosition: `${margins[0]}px ${margins[0]}px`,\n minHeight: '100vh',\n }}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${activeId === module.id ? 'active' : ''}`}\n onClick={() => {\n setActiveId(module.id)\n }}\n key={module.id}\n data-grid={{\n i: module.id,\n x: module.x || 0,\n y: module.y || 0, // puts it at the bottom\n w: module.w || 2,\n h: module.h || 2,\n minW: 2,\n minH: 2,\n }}\n >\n <ModuleHeader\n module={module}\n defaultValue={module.title}\n onChange={val =>\n updateModule(module.id, {\n title: val,\n })\n }\n onDropdownItem={key => {\n if (key === 'edit') {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n } else if (key === 'delete') {\n Modal.confirm({\n title: t('promptTitle'),\n icon: <ExclamationCircleOutlined />,\n content: t('promptContentDeleteComponents'),\n onOk() {\n deleteModule(module.id)\n },\n })\n } else if (key === 'copy') {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }\n }}\n />\n\n <ModuleContent\n module={module}\n onUpdate={updateModule}\n moduleDataApi={moduleDataApi}\n activeId={activeId}\n onClick={() => {\n setActiveId(module.id)\n }}\n rowWidth={rowWidth}\n rowHeight={rowHeight}\n onEdit={() => {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n }}\n onDelete={() => {\n deleteModule(module.id)\n }}\n onCopy={() => {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }}\n onStartDragOrResize={() => {\n setIsDragOrResize(true)\n }}\n onStopDragOrResize={() => {\n setIsDragOrResize(false)\n }}\n />\n </div>\n ))}\n </ResponsiveReactGridLayout>\n </div>\n </div>\n </div>\n </div>\n\n <AddStatisticsModal\n {...commonModalProps}\n open={isShowAddStatisticsModal}\n onClose={() => {\n setIsShowAddStatisticsModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'statistics',\n })\n setIsShowAddStatisticsModal(false)\n }}\n />\n\n <AddCalendarModal\n {...commonModalProps}\n open={isShowAddCalendarModal}\n onClose={() => {\n setIsShowAddCalendarModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'calendar',\n })\n setIsShowAddCalendarModal(false)\n }}\n />\n\n <AddChartModal\n {...commonModalProps}\n open={isShowAddChartModal}\n onClose={() => {\n setIsShowAddChartModal(false)\n }}\n onOk={data => {\n handleModalSubmit(data)\n setIsShowAddChartModal(false)\n }}\n />\n </div>\n )\n}\n\nexport default React.memo((props: DashboardWorkbenchProps) => {\n return (\n <AppProvider>\n <DashboardWorkbench {...props} />\n </AppProvider>\n )\n})\n"],"names":["cols","module","AddCalendarModal","AddChartModal"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../packages/dashboard-workbench/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport { message, Modal } from 'antd'\nimport { ExclamationCircleOutlined } from '@ant-design/icons'\nimport { Layout, Responsive, WidthProvider } from 'react-grid-layout'\nimport { useTranslation } from 'react-i18next'\nimport { useLatest, useLocalStorageState, useMemoizedFn } from 'ahooks'\nimport { omit, pick } from 'lodash-es'\nimport AddModuleBtn, { ModuleValueType } from './components/add-module-btn'\nimport AddCalendarModal from './components/add-module-modal/add-calendar-modal'\nimport AddChartModal from './components/add-module-modal/add-chart-modal'\nimport AddStatisticsModal from './components/add-module-modal/add-statistics-modal'\nimport { GlobalFilterCondition } from './components/global-filter-condition'\nimport { ConditionBlockWrapper } from './components/global-filter-condition/interface'\nimport ModuleContent, { ModuleData } from './components/module-content'\nimport ModuleHeader from './components/module-header'\nimport { AppContext } from './context'\nimport { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataItem } from './types'\nimport { findChangedItems } from './utils'\nimport './lang/index'\nimport '/node_modules/react-grid-layout/css/styles.css'\nimport './styles/index.less'\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive)\n\ninterface DashboardWorkbenchProps {\n sourceData?: SourceDataItem[]\n moduleConfigData?: ModuleConfigDataTypes\n fieldMap?: Record<string, string>\n lang?: 'zh-CN' | 'en-US'\n moduleDataApi?: ModuleDataApi\n enumDataApi?: EnumDataApi\n onCreateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onUpdateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onDeleteModule?: (val: string) => Promise<{ data: ModuleData }>\n onLayoutChange?: (layout: Layout[]) => void\n className?: string\n cols?: { lg: number; md: number; sm: number; xs: number; xxs: number }\n rowHeight?: number\n}\n\nconst DashboardWorkbench: React.FC<DashboardWorkbenchProps> = ({\n moduleConfigData,\n moduleDataApi,\n enumDataApi,\n onCreateModule,\n onUpdateModule,\n onDeleteModule,\n className = 'layout',\n cols = { lg: 12, md: 12, sm: 12, xs: 12, xxs: 12 },\n rowHeight = 79,\n}) => {\n const { t } = useTranslation()\n\n /* ============================== modules =============================== */\n const [modules, setModules] = useState<ModuleData[] | undefined>([])\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n\n useEffect(() => {\n setModules(\n moduleConfigData?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n )\n }, [moduleConfigData])\n\n const addModule = async (data: ModuleValueType) => {\n const wMultiple = data.type === 'calendar' ? 5 : 4\n const hMultiple = data.type === 'calendar' ? 5 : 3\n\n if (Array.isArray(modules) && data.type) {\n const newModuleData = {\n x: 0,\n y: 0,\n w: wMultiple,\n h: hMultiple,\n title: data.type.includes('chart') ? t('chartText') : title[data.type],\n ...data,\n type: data.type,\n }\n await onCreateModule?.(newModuleData).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setModules([...modules, { ...newModuleData, i: res.data?.id, id: res.data?.id }])\n })\n }\n }\n\n // 单个\n const updateModule = async (id: ModuleData['id'], updatedProps: Partial<ModuleData>) => {\n if (modules?.length) {\n const oldData = modules.find(m => m.id === id)\n const updatedModule = {\n ...oldData!,\n ...updatedProps,\n }\n const modulesData = modules.map(m => (m.id === id ? updatedModule : m))\n setModules(modulesData)\n await onUpdateModule?.(updatedModule).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n })\n }\n }\n\n // 批量\n const updateModules = async (updatedItems: Partial<ModuleData>[]) => {\n if (!modules?.length || !updatedItems?.length) return\n const updatedModules = modules.map(module => {\n const update = updatedItems.find(item => item.id === module.id)\n return update ? { ...module, ...update } : module\n })\n setModules(updatedModules)\n try {\n for (const updatedItem of updatedItems) {\n const res: any = await onUpdateModule?.(updatedItem as ModuleData)\n if (!res?.success) {\n throw new Error(res?.message || `Failed to update module: ${updatedItem.id}`)\n }\n }\n } catch (error: any) {\n setModules(modules)\n message.error(error.message || 'Failed to update modules')\n }\n }\n\n const deleteModule = async (id: ModuleData['id']) => {\n if (modules?.length) {\n setModules(modules.filter(m => m.id !== id))\n await onDeleteModule?.(id || '')\n }\n }\n\n /* ============================== drag =============================== */\n\n const margins: [number, number] = [10, 10]\n const [rowWidth, setRowWidth] = useState(0)\n const [, setCurrentCols] = useState<number>(cols.lg)\n\n const [isDragOrResize, setIsDragOrResize] = useState(false)\n const [isDragOrResizeEnd, setIsDragOrResizeEnd] = useState(false)\n\n const onBreakpointChange = (_breakpoint: string, cols: number) => {\n setCurrentCols(cols)\n }\n\n const onDragResizeStop = (newLayout: Layout[]) => {\n const changedItems = findChangedItems(newLayout, modules as any)\n const newChangedItems = changedItems.map(item => {\n const module = modules?.find(module => module.i === item.i)\n return { ...module, ...item }\n })\n updateModules(newChangedItems)\n }\n\n const onDragStartOrEnd = (type: 'start' | 'end', newLayout?: Layout[]) => {\n if (type === 'start') {\n setIsDragOrResize(true)\n setIsDragOrResizeEnd(true)\n } else {\n setIsDragOrResize(false)\n setTimeout(() => {\n setIsDragOrResizeEnd(false)\n }, 500)\n onDragResizeStop(newLayout || [])\n }\n }\n\n /* ============================== split =============================== */\n const [selectModuleData, setSelectModuleData] = useState<ModuleData>()\n\n const [isShowAddStatisticsModal, setIsShowAddStatisticsModal] = useState<boolean>(false)\n const [isShowAddCalendarModal, setIsShowAddCalendarModal] = useState<boolean>(false)\n const [isShowAddChartModal, setIsShowAddChartModal] = useState<boolean>(false)\n\n const handleOpenCreateModal = (val: any) => {\n if (val === 'text') {\n const data = {\n type: val,\n customData: {\n title: t('text'),\n editor: [\n {\n type: 'paragraph',\n children: [\n {\n text: '',\n },\n ],\n },\n ],\n },\n }\n addModule(data)\n } else if (val === 'statistics') {\n setIsShowAddStatisticsModal(true)\n } else if (val === 'calendar') {\n setIsShowAddCalendarModal(true)\n } else if (val?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n\n setSelectModuleData({\n title: '',\n type: val,\n w: 0,\n h: 0,\n x: 0,\n y: 0,\n })\n }\n\n const commonModalProps = {\n moduleDataApi: moduleDataApi,\n enumDataApi: enumDataApi,\n selectModuleData: selectModuleData,\n }\n const handleModalSubmit = (data: Partial<ModuleData>) => {\n if (data.id) {\n updateModule(data.id, omit(data, 'id'))\n } else {\n addModule(data)\n }\n }\n /* ============================== split =============================== */\n const title: any = {\n text: t('pb.text'),\n calendar: t('calendarText'),\n statistics: t('chartText'),\n }\n\n return (\n <div className=\"pivot-table\">\n <div className=\"bitable-block-dashboard\">\n <div className=\"bitable-block-dashboard-toolbar bitable-toolbar\">\n <div className=\"bitable-block-dashboard-toolbar--left\">\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n <GlobalFilterCondition\n style={{\n marginLeft: 10,\n }}\n />\n </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\">\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${\n isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n onBreakpointChange={onBreakpointChange}\n className={className}\n compactType=\"vertical\"\n preventCollision={false}\n cols={cols}\n margin={margins}\n rowHeight={rowHeight}\n measureBeforeMount={false}\n draggableHandle=\".isCanDrag\"\n // draggableCancel=\".isNoCanDrag\"\n onWidthChange={(containerWidth, _margin, cols) => {\n setRowWidth(containerWidth / cols - 1)\n }}\n onDragStart={() => {\n onDragStartOrEnd('start')\n }}\n onDragStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n onResizeStart={() => {\n onDragStartOrEnd('start')\n }}\n onResizeStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n style={{\n backgroundSize: `${rowWidth}px ${rowHeight + margins[0]}px`,\n backgroundPosition: `${margins[0]}px ${margins[0]}px`,\n minHeight: '100vh',\n }}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${activeId === module.id ? 'active' : ''}`}\n onClick={() => {\n setActiveId(module.id)\n }}\n key={module.id}\n data-grid={{\n i: module.id,\n x: module.x || 0,\n y: module.y || 0, // puts it at the bottom\n w: module.w || 2,\n h: module.h || 2,\n minW: 2,\n minH: 2,\n }}\n >\n <ModuleHeader\n module={module}\n defaultValue={module.title}\n onChange={val =>\n updateModule(module.id, {\n title: val,\n })\n }\n onDropdownItem={key => {\n if (key === 'edit') {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n } else if (key === 'delete') {\n Modal.confirm({\n title: t('promptTitle'),\n icon: <ExclamationCircleOutlined />,\n content: t('promptContentDeleteComponents'),\n onOk() {\n deleteModule(module.id)\n },\n })\n } else if (key === 'copy') {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }\n }}\n />\n\n <ModuleContent\n module={module}\n onUpdate={updateModule}\n moduleDataApi={moduleDataApi}\n activeId={activeId}\n onClick={() => {\n setActiveId(module.id)\n }}\n rowWidth={rowWidth}\n rowHeight={rowHeight}\n onEdit={() => {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n }}\n onDelete={() => {\n deleteModule(module.id)\n }}\n onCopy={() => {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }}\n onStartDragOrResize={() => {\n setIsDragOrResize(true)\n }}\n onStopDragOrResize={() => {\n setIsDragOrResize(false)\n }}\n />\n </div>\n ))}\n </ResponsiveReactGridLayout>\n </div>\n </div>\n </div>\n </div>\n\n <AddStatisticsModal\n {...commonModalProps}\n open={isShowAddStatisticsModal}\n onClose={() => {\n setIsShowAddStatisticsModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'statistics',\n })\n setIsShowAddStatisticsModal(false)\n }}\n />\n\n <AddCalendarModal\n {...commonModalProps}\n open={isShowAddCalendarModal}\n onClose={() => {\n setIsShowAddCalendarModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'calendar',\n })\n setIsShowAddCalendarModal(false)\n }}\n />\n\n <AddChartModal\n {...commonModalProps}\n open={isShowAddChartModal}\n // open={true}\n onClose={() => {\n setIsShowAddChartModal(false)\n }}\n onOk={data => {\n handleModalSubmit(data)\n setIsShowAddChartModal(false)\n }}\n />\n </div>\n )\n}\n\nexport default React.memo((props: DashboardWorkbenchProps) => {\n /* ============================== i18n =============================== */\n const { i18n } = useTranslation()\n useEffect(() => {\n i18n.changeLanguage(props?.lang || 'zh_CN')\n }, [i18n, props?.lang])\n\n const globalData = {\n fieldMap: props.fieldMap,\n sourceData: props?.sourceData,\n }\n\n const service = pick(props, [\n 'moduleDataApi',\n 'enumDataApi',\n 'onCreateModule',\n 'onUpdateModule',\n 'onDeleteModule',\n ])\n\n /* ============================== 全局筛选条件 =============================== */\n const [globalFilterCondition, setGlobalFilterCondition] = useLocalStorageState<\n ConditionBlockWrapper[]\n >('test', {\n defaultValue: [],\n })\n\n return (\n <AppContext.Provider\n value={{\n globalData,\n service,\n globalFilterCondition,\n setGlobalFilterCondition: setGlobalFilterCondition as React.Dispatch<\n React.SetStateAction<ConditionBlockWrapper[]>\n >,\n }}\n >\n <DashboardWorkbench {...props} />\n </AppContext.Provider>\n )\n})\n"],"names":["cols","module","AddCalendarModal","AddChartModal"],"mappings":"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"}