@platox/pivot-table 0.0.95 → 0.0.96
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.
|
@@ -211,30 +211,15 @@ const DashboardWorkbench = ({
|
|
|
211
211
|
if (type === "calendar") return 4;
|
|
212
212
|
return 99;
|
|
213
213
|
};
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
const sortedKeys = [...groups.keys()].sort((a, b) => a - b);
|
|
221
|
-
const allPositions = /* @__PURE__ */ new Map();
|
|
222
|
-
let currentY = 0;
|
|
223
|
-
for (const key of sortedKeys) {
|
|
224
|
-
const group = groups.get(key);
|
|
225
|
-
const items = group.map((m) => {
|
|
226
|
-
const { w, h } = getDefaultSize(m.type || "");
|
|
227
|
-
return { id: m.id, w, h };
|
|
228
|
-
});
|
|
229
|
-
const { positions, height } = binPack(items, currentY);
|
|
230
|
-
for (const [id, pos] of positions) {
|
|
231
|
-
allPositions.set(id, pos);
|
|
232
|
-
}
|
|
233
|
-
currentY += height;
|
|
234
|
-
}
|
|
214
|
+
const sorted = [...modules].sort((a, b) => getOrder(a.type) - getOrder(b.type));
|
|
215
|
+
const items = sorted.map((m) => {
|
|
216
|
+
const { w, h } = getDefaultSize(m.type || "");
|
|
217
|
+
return { id: m.id, w, h };
|
|
218
|
+
});
|
|
219
|
+
const { positions } = binPack(items, 0, true);
|
|
235
220
|
const arranged = modules.map((m) => {
|
|
236
221
|
const { w, h } = getDefaultSize(m.type || "");
|
|
237
|
-
const pos =
|
|
222
|
+
const pos = positions.get(m.id);
|
|
238
223
|
return { ...m, x: (pos == null ? void 0 : pos.x) ?? 0, y: (pos == null ? void 0 : pos.y) ?? 0, w, h };
|
|
239
224
|
});
|
|
240
225
|
await updateModules(arranged);
|
|
@@ -343,7 +328,9 @@ const DashboardWorkbench = ({
|
|
|
343
328
|
const ref = useRef(null);
|
|
344
329
|
const scroll = useScroll(ref);
|
|
345
330
|
const isShadowShow = ((scroll == null ? void 0 : scroll.top) ?? 0) > 0;
|
|
331
|
+
const isInitialMount = useRef(true);
|
|
346
332
|
useEffect(() => {
|
|
333
|
+
isInitialMount.current = true;
|
|
347
334
|
if (ref.current) {
|
|
348
335
|
ref.current.scrollTop = 0;
|
|
349
336
|
}
|
|
@@ -400,7 +387,7 @@ const DashboardWorkbench = ({
|
|
|
400
387
|
alignItems: "center",
|
|
401
388
|
"height": "100%"
|
|
402
389
|
}, children: /* @__PURE__ */ jsx(Empty$1, { image: Empty$1.PRESENTED_IMAGE_SIMPLE }) }),
|
|
403
|
-
/* @__PURE__ */ jsx(
|
|
390
|
+
/* @__PURE__ */ jsx("div", { className: "bitable-block-dashboard__mount", ref, children: /* @__PURE__ */ jsx(Spin, { spinning: isArranging, children: /* @__PURE__ */ jsx("div", { className: "dashboard-container", children: /* @__PURE__ */ jsx(
|
|
404
391
|
"div",
|
|
405
392
|
{
|
|
406
393
|
className: `dashboard-content-container ${isDragOrResize ? "isDragOrResize" : ""} ${isDragOrResizeEnd ? "isDragOrResizeEnd" : ""}`,
|
|
@@ -420,6 +407,14 @@ const DashboardWorkbench = ({
|
|
|
420
407
|
draggableHandle: ".isCanDrag",
|
|
421
408
|
onLayoutChange: (layout) => {
|
|
422
409
|
layoutRef.current = layout;
|
|
410
|
+
if (isInitialMount.current) {
|
|
411
|
+
isInitialMount.current = false;
|
|
412
|
+
requestAnimationFrame(() => {
|
|
413
|
+
if (ref.current) {
|
|
414
|
+
ref.current.scrollTop = 0;
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
423
418
|
},
|
|
424
419
|
onWidthChange: (containerWidth, _margin, cols2) => {
|
|
425
420
|
setRowWidth(containerWidth / cols2 - 1);
|
|
@@ -1 +1 @@
|
|
|
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, Empty as AntdEmpty, Button, Dropdown, Spin, Tooltip } from 'antd'\nimport { ExclamationCircleOutlined, AppstoreOutlined } from '@ant-design/icons'\nimport { Layout, Responsive, WidthProvider } from 'react-grid-layout'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useScroll } 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, setContextRef, useAppContext } 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'\nimport clsx from 'clsx'\nimport { read } from 'fs'\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 renderToolbarLeft?: () => React.ReactNode\n\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 renderToolbarLeft,\n}) => {\n const { t } = useTranslation()\n const { readOnly } = useAppContext()\n\n /* ============================== modules =============================== */\n const normalizeModules = (data?: ModuleConfigDataTypes) =>\n data?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n\n const [modules, setModules] = useState<ModuleData[] | undefined>(() => normalizeModules(moduleConfigData))\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n const [isArranging, setIsArranging] = useState(false)\n const [gridKey, setGridKey] = useState(0)\n const layoutRef = useRef<Layout[]>([])\n\n useEffect(() => {\n setModules(normalizeModules(moduleConfigData))\n }, [moduleConfigData])\n\n const findNextPosition = (newW: number, newH: number) => {\n const layout = layoutRef.current\n if (!layout?.length) return { x: 0, y: 0 }\n const totalCols = cols.lg || 12\n const maxY = layout.reduce((max, m) => Math.max(max, (m.y || 0) + (m.h || 2)), 0)\n const gridH = maxY + newH\n const grid: boolean[][] = Array.from({ length: gridH }, () => new Array(totalCols).fill(false))\n for (const m of layout) {\n for (let y = m.y || 0; y < (m.y || 0) + (m.h || 2); y++) {\n for (let x = m.x || 0; x < (m.x || 0) + (m.w || 2); x++) {\n if (y < gridH && x < totalCols) grid[y][x] = true\n }\n }\n }\n for (let y = 0; y <= gridH; y++) {\n for (let x = 0; x <= totalCols - newW; x++) {\n let fits = true\n for (let dy = 0; dy < newH && fits; dy++) {\n for (let dx = 0; dx < newW && fits; dx++) {\n if (y + dy < gridH && grid[y + dy][x + dx]) fits = false\n }\n }\n if (fits) return { x, y }\n }\n }\n return { x: 0, y: maxY }\n }\n\n const getDefaultSize = (type: string) => {\n const isPie = type === 'chart-pie' || type === 'chart-pie-circular'\n const isChart = type?.includes('chart') && !isPie\n const isStatistics = type === 'statistics'\n const isText = type === 'text'\n const isCalendar = type === 'calendar'\n const w = isStatistics ? 3 : isText ? 6 : isPie ? 6 : isCalendar ? 12 : 12\n const h = isCalendar ? 6 : isChart ? 6 : 4\n return { w, h }\n }\n\n const addModule = async (data: ModuleValueType) => {\n const { w: wMultiple, h: hMultiple } = getDefaultSize(data.type || '')\n\n if (Array.isArray(modules) && data.type) {\n const { x, y } = findNextPosition(wMultiple, hMultiple)\n const newModuleData = {\n x,\n y,\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 binPack = (items: { id?: string; w: number; h: number }[], startY = 0, preserveOrder = false) => {\n const totalCols = cols.lg || 12\n const sorted = preserveOrder ? items : [...items].sort((a, b) => b.h - a.h || b.w - a.w)\n const grid: boolean[][] = []\n\n const ensureRows = (maxY: number) => {\n while (grid.length < maxY) grid.push(new Array(totalCols).fill(false))\n }\n\n const positions = new Map<string, { x: number; y: number }>()\n\n for (const item of sorted) {\n const w = item.w, h = item.h\n let placed = false\n ensureRows(1)\n for (let y = 0; !placed; y++) {\n ensureRows(y + h)\n for (let x = 0; x <= totalCols - w && !placed; x++) {\n let fits = true\n for (let dy = 0; dy < h && fits; dy++) {\n for (let dx = 0; dx < w && fits; dx++) {\n if (grid[y + dy][x + dx]) fits = false\n }\n }\n if (fits) {\n for (let dy = 0; dy < h; dy++) {\n for (let dx = 0; dx < w; dx++) {\n grid[y + dy][x + dx] = true\n }\n }\n positions.set(item.id!, { x, y: y + startY })\n placed = true\n }\n }\n }\n }\n\n return { positions, height: grid.length }\n }\n\n const compactArrange = async () => {\n if (!modules?.length) return\n setIsArranging(true)\n try {\n // 按当前位置排序(上→下,左→右),保留视觉顺序\n const sorted = [...modules].sort((a, b) => (a.y || 0) - (b.y || 0) || (a.x || 0) - (b.x || 0))\n const items = sorted.map(m => ({ id: m.id, w: m.w || 2, h: m.h || 2 }))\n const { positions } = binPack(items, 0, true)\n const arranged = modules.map(m => {\n const pos = positions.get(m.id!)\n return { ...m, x: pos?.x ?? 0, y: pos?.y ?? 0 }\n })\n await updateModules(arranged)\n setGridKey(k => k + 1)\n } finally {\n setIsArranging(false)\n }\n }\n\n const resetArrange = async () => {\n if (!modules?.length) return\n setIsArranging(true)\n try {\n const typeOrder: Record<string, number> = {\n statistics: 0,\n 'chart-pie': 1,\n 'chart-pie-circular': 1,\n }\n const getOrder = (type?: string) => {\n if (!type) return 99\n if (typeOrder[type] !== undefined) return typeOrder[type]\n if (type.includes('chart')) return 2\n if (type === 'text') return 3\n if (type === 'calendar') return 4\n return 99\n }\n\n // 按类型分组\n const groups = new Map<number, ModuleData[]>()\n for (const m of modules) {\n const order = getOrder(m.type)\n if (!groups.has(order)) groups.set(order, [])\n groups.get(order)!.push(m)\n }\n\n // 按优先级排序 key,逐组 binPack,垂直叠放\n const sortedKeys = [...groups.keys()].sort((a, b) => a - b)\n const allPositions = new Map<string, { x: number; y: number }>()\n let currentY = 0\n\n for (const key of sortedKeys) {\n const group = groups.get(key)!\n const items = group.map(m => {\n const { w, h } = getDefaultSize(m.type || '')\n return { id: m.id, w, h }\n })\n const { positions, height } = binPack(items, currentY)\n for (const [id, pos] of positions) {\n allPositions.set(id, pos)\n }\n currentY += height\n }\n\n const arranged = modules.map(m => {\n const { w, h } = getDefaultSize(m.type || '')\n const pos = allPositions.get(m.id!)\n return { ...m, x: pos?.x ?? 0, y: pos?.y ?? 0, w, h }\n })\n await updateModules(arranged)\n setGridKey(k => k + 1)\n } finally {\n setIsArranging(false)\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 lastRowModuleIds = useMemo(() => {\n const layout = layoutRef.current?.length ? layoutRef.current : modules?.map(m => ({ i: m.id, x: m.x || 0, y: m.y || 0, w: m.w || 2, h: m.h || 2 })) || []\n if (!layout.length) return new Set<string>()\n const maxBottom = layout.reduce((max, m) => Math.max(max, (m.y || 0) + (m.h || 2)), 0)\n return new Set(layout.filter(m => (m.y || 0) + (m.h || 2) >= maxBottom).map(m => m.i))\n }, [modules])\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 /* ============================== 滚动出阴影 =============================== */\n const ref = useRef<HTMLDivElement>(null)\n const scroll = useScroll(ref)\n const isShadowShow = (scroll?.top ?? 0) > 0\n\n // 筛选条件变化导致组件 remount 时,重置滚动位置到顶部\n useEffect(() => {\n if (ref.current) {\n ref.current.scrollTop = 0\n }\n }, [])\n\n return (\n <div className=\"pivot-table\">\n <div\n className={clsx(\n 'bitable-block-dashboard-toolbar bitable-toolbar',\n isShadowShow && 'bitable-toolbar--shadow'\n // isShadowShow &&\n )}\n >\n <div className=\"bitable-block-dashboard-toolbar--left\">\n {renderToolbarLeft?.()}\n {\n !readOnly && <>\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n <div\n style={{\n width: '1px',\n height: '1rem',\n backgroundColor: 'rgba(217, 217, 217, 1)',\n marginLeft: '12px',\n marginRight: '4px',\n }}\n />\n <GlobalFilterCondition />\n </>\n }\n </div>\n {!readOnly && (\n <div style={{ display: 'flex', alignItems: 'center', marginLeft: 'auto' }}>\n <Dropdown menu={{\n items: [\n { key: 'compact', label: <Tooltip title={t('compactLayoutTip')} placement=\"left\">{t('compactLayout')}</Tooltip> },\n { key: 'reset', label: <Tooltip title={t('resetLayoutTip')} placement=\"left\">{t('resetLayout')}</Tooltip> },\n ],\n onClick: ({ key }) => key === 'compact' ? compactArrange() : resetArrange(),\n }}>\n <Button type=\"text\" icon={<AppstoreOutlined />} />\n </Dropdown>\n </div>\n )}\n </div>\n {\n modules?.length === 0 && <div style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n \"height\": \"100%\"\n }}><AntdEmpty image={AntdEmpty.PRESENTED_IMAGE_SIMPLE} /></div>\n }\n\n <Spin spinning={isArranging}>\n <div className=\"bitable-block-dashboard__mount\" ref={ref}>\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n key={gridKey}\n isDraggable={!readOnly}\n isResizable={!readOnly}\n\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 onLayoutChange={(layout) => {\n layoutRef.current = layout\n }}\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 containerPadding={[10, 0]}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${readOnly ? \"readonly\" : \"\"} ${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 ...(lastRowModuleIds.has(module.id) ? { resizeHandles: ['ne'] } : {}),\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 </Spin>\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\n/* ============================== split =============================== */\n\nexport type { ConditionBlockWrapper }\nexport type GlobalProps = {\n globalFilterCondition: ConditionBlockWrapper[]\n onGlobalFilterConditionChange: (condition: ConditionBlockWrapper[]) => void\n\n formatCurrency: (val: number, decimalPlaces?: number) => string\n\n /**\n * @default false\n */\n readOnly?: boolean\n}\n\nconst Empty: unknown = []\n\nexport default React.memo((props: DashboardWorkbenchProps & GlobalProps) => {\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 = Empty as ConditionBlockWrapper[], setGlobalFilterCondition] =\n useControllableValue<ConditionBlockWrapper[]>(props, {\n valuePropName: 'globalFilterCondition',\n trigger: 'onGlobalFilterConditionChange',\n })\n\n let contextData = {\n readOnly: props?.readOnly || false,\n globalData,\n service,\n formatCurrency: props?.formatCurrency,\n globalFilterCondition,\n setGlobalFilterCondition: setGlobalFilterCondition as React.Dispatch<\n React.SetStateAction<ConditionBlockWrapper[]>\n >,\n }\n setContextRef(contextData)\n\n return (\n <AppContext.Provider value={contextData}>\n <DashboardWorkbench {...props} />\n </AppContext.Provider>\n )\n})\n"],"names":["cols","module","AntdEmpty","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, Empty as AntdEmpty, Button, Dropdown, Spin, Tooltip } from 'antd'\nimport { ExclamationCircleOutlined, AppstoreOutlined } from '@ant-design/icons'\nimport { Layout, Responsive, WidthProvider } from 'react-grid-layout'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useScroll } 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, setContextRef, useAppContext } 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'\nimport clsx from 'clsx'\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 renderToolbarLeft?: () => React.ReactNode\n\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 renderToolbarLeft,\n}) => {\n const { t } = useTranslation()\n const { readOnly } = useAppContext()\n\n /* ============================== modules =============================== */\n const normalizeModules = (data?: ModuleConfigDataTypes) =>\n data?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n\n const [modules, setModules] = useState<ModuleData[] | undefined>(() => normalizeModules(moduleConfigData))\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n const [isArranging, setIsArranging] = useState(false)\n const [gridKey, setGridKey] = useState(0)\n const layoutRef = useRef<Layout[]>([])\n\n useEffect(() => {\n setModules(normalizeModules(moduleConfigData))\n }, [moduleConfigData])\n\n const findNextPosition = (newW: number, newH: number) => {\n const layout = layoutRef.current\n if (!layout?.length) return { x: 0, y: 0 }\n const totalCols = cols.lg || 12\n const maxY = layout.reduce((max, m) => Math.max(max, (m.y || 0) + (m.h || 2)), 0)\n const gridH = maxY + newH\n const grid: boolean[][] = Array.from({ length: gridH }, () => new Array(totalCols).fill(false))\n for (const m of layout) {\n for (let y = m.y || 0; y < (m.y || 0) + (m.h || 2); y++) {\n for (let x = m.x || 0; x < (m.x || 0) + (m.w || 2); x++) {\n if (y < gridH && x < totalCols) grid[y][x] = true\n }\n }\n }\n for (let y = 0; y <= gridH; y++) {\n for (let x = 0; x <= totalCols - newW; x++) {\n let fits = true\n for (let dy = 0; dy < newH && fits; dy++) {\n for (let dx = 0; dx < newW && fits; dx++) {\n if (y + dy < gridH && grid[y + dy][x + dx]) fits = false\n }\n }\n if (fits) return { x, y }\n }\n }\n return { x: 0, y: maxY }\n }\n\n const getDefaultSize = (type: string) => {\n const isPie = type === 'chart-pie' || type === 'chart-pie-circular'\n const isChart = type?.includes('chart') && !isPie\n const isStatistics = type === 'statistics'\n const isText = type === 'text'\n const isCalendar = type === 'calendar'\n const w = isStatistics ? 3 : isText ? 6 : isPie ? 6 : isCalendar ? 12 : 12\n const h = isCalendar ? 6 : isChart ? 6 : 4\n return { w, h }\n }\n\n const addModule = async (data: ModuleValueType) => {\n const { w: wMultiple, h: hMultiple } = getDefaultSize(data.type || '')\n\n if (Array.isArray(modules) && data.type) {\n const { x, y } = findNextPosition(wMultiple, hMultiple)\n const newModuleData = {\n x,\n y,\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 binPack = (items: { id?: string; w: number; h: number }[], startY = 0, preserveOrder = false) => {\n const totalCols = cols.lg || 12\n const sorted = preserveOrder ? items : [...items].sort((a, b) => b.h - a.h || b.w - a.w)\n const grid: boolean[][] = []\n\n const ensureRows = (maxY: number) => {\n while (grid.length < maxY) grid.push(new Array(totalCols).fill(false))\n }\n\n const positions = new Map<string, { x: number; y: number }>()\n\n for (const item of sorted) {\n const w = item.w, h = item.h\n let placed = false\n ensureRows(1)\n for (let y = 0; !placed; y++) {\n ensureRows(y + h)\n for (let x = 0; x <= totalCols - w && !placed; x++) {\n let fits = true\n for (let dy = 0; dy < h && fits; dy++) {\n for (let dx = 0; dx < w && fits; dx++) {\n if (grid[y + dy][x + dx]) fits = false\n }\n }\n if (fits) {\n for (let dy = 0; dy < h; dy++) {\n for (let dx = 0; dx < w; dx++) {\n grid[y + dy][x + dx] = true\n }\n }\n positions.set(item.id!, { x, y: y + startY })\n placed = true\n }\n }\n }\n }\n\n return { positions, height: grid.length }\n }\n\n const compactArrange = async () => {\n if (!modules?.length) return\n setIsArranging(true)\n try {\n // 按当前位置排序(上→下,左→右),保留视觉顺序\n const sorted = [...modules].sort((a, b) => (a.y || 0) - (b.y || 0) || (a.x || 0) - (b.x || 0))\n const items = sorted.map(m => ({ id: m.id, w: m.w || 2, h: m.h || 2 }))\n const { positions } = binPack(items, 0, true)\n const arranged = modules.map(m => {\n const pos = positions.get(m.id!)\n return { ...m, x: pos?.x ?? 0, y: pos?.y ?? 0 }\n })\n await updateModules(arranged)\n setGridKey(k => k + 1)\n } finally {\n setIsArranging(false)\n }\n }\n\n const resetArrange = async () => {\n if (!modules?.length) return\n setIsArranging(true)\n try {\n const typeOrder: Record<string, number> = {\n statistics: 0,\n 'chart-pie': 1,\n 'chart-pie-circular': 1,\n }\n const getOrder = (type?: string) => {\n if (!type) return 99\n if (typeOrder[type] !== undefined) return typeOrder[type]\n if (type.includes('chart')) return 2\n if (type === 'text') return 3\n if (type === 'calendar') return 4\n return 99\n }\n\n // 按类型排序后单次 binPack,让不同类型自然填充同行空隙\n const sorted = [...modules].sort((a, b) => getOrder(a.type) - getOrder(b.type))\n const items = sorted.map(m => {\n const { w, h } = getDefaultSize(m.type || '')\n return { id: m.id, w, h }\n })\n const { positions } = binPack(items, 0, true)\n\n const arranged = modules.map(m => {\n const { w, h } = getDefaultSize(m.type || '')\n const pos = positions.get(m.id!)\n return { ...m, x: pos?.x ?? 0, y: pos?.y ?? 0, w, h }\n })\n await updateModules(arranged)\n setGridKey(k => k + 1)\n } finally {\n setIsArranging(false)\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 lastRowModuleIds = useMemo(() => {\n const layout = layoutRef.current?.length ? layoutRef.current : modules?.map(m => ({ i: m.id, x: m.x || 0, y: m.y || 0, w: m.w || 2, h: m.h || 2 })) || []\n if (!layout.length) return new Set<string>()\n const maxBottom = layout.reduce((max, m) => Math.max(max, (m.y || 0) + (m.h || 2)), 0)\n return new Set(layout.filter(m => (m.y || 0) + (m.h || 2) >= maxBottom).map(m => m.i))\n }, [modules])\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 /* ============================== 滚动出阴影 =============================== */\n const ref = useRef<HTMLDivElement>(null)\n const scroll = useScroll(ref)\n const isShadowShow = (scroll?.top ?? 0) > 0\n\n // 筛选条件变化导致组件 remount 时,重置滚动位置到顶部\n const isInitialMount = useRef(true)\n useEffect(() => {\n isInitialMount.current = true\n if (ref.current) {\n ref.current.scrollTop = 0\n }\n }, [])\n\n return (\n <div className=\"pivot-table\">\n <div\n className={clsx(\n 'bitable-block-dashboard-toolbar bitable-toolbar',\n isShadowShow && 'bitable-toolbar--shadow'\n // isShadowShow &&\n )}\n >\n <div className=\"bitable-block-dashboard-toolbar--left\">\n {renderToolbarLeft?.()}\n {\n !readOnly && <>\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n <div\n style={{\n width: '1px',\n height: '1rem',\n backgroundColor: 'rgba(217, 217, 217, 1)',\n marginLeft: '12px',\n marginRight: '4px',\n }}\n />\n <GlobalFilterCondition />\n </>\n }\n </div>\n {!readOnly && (\n <div style={{ display: 'flex', alignItems: 'center', marginLeft: 'auto' }}>\n <Dropdown menu={{\n items: [\n { key: 'compact', label: <Tooltip title={t('compactLayoutTip')} placement=\"left\">{t('compactLayout')}</Tooltip> },\n { key: 'reset', label: <Tooltip title={t('resetLayoutTip')} placement=\"left\">{t('resetLayout')}</Tooltip> },\n ],\n onClick: ({ key }) => key === 'compact' ? compactArrange() : resetArrange(),\n }}>\n <Button type=\"text\" icon={<AppstoreOutlined />} />\n </Dropdown>\n </div>\n )}\n </div>\n {\n modules?.length === 0 && <div style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n \"height\": \"100%\"\n }}><AntdEmpty image={AntdEmpty.PRESENTED_IMAGE_SIMPLE} /></div>\n }\n\n <div className=\"bitable-block-dashboard__mount\" ref={ref}>\n <Spin spinning={isArranging}>\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n key={gridKey}\n isDraggable={!readOnly}\n isResizable={!readOnly}\n\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 onLayoutChange={(layout) => {\n layoutRef.current = layout\n // react-grid-layout 首次布局计算后重置滚动位置\n if (isInitialMount.current) {\n isInitialMount.current = false\n requestAnimationFrame(() => {\n if (ref.current) {\n ref.current.scrollTop = 0\n }\n })\n }\n }}\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 containerPadding={[10, 0]}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${readOnly ? \"readonly\" : \"\"} ${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 ...(lastRowModuleIds.has(module.id) ? { resizeHandles: ['ne'] } : {}),\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 </Spin>\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\n/* ============================== split =============================== */\n\nexport type { ConditionBlockWrapper }\nexport type GlobalProps = {\n globalFilterCondition: ConditionBlockWrapper[]\n onGlobalFilterConditionChange: (condition: ConditionBlockWrapper[]) => void\n\n formatCurrency: (val: number, decimalPlaces?: number) => string\n\n /**\n * @default false\n */\n readOnly?: boolean\n}\n\nconst Empty: unknown = []\n\nexport default React.memo((props: DashboardWorkbenchProps & GlobalProps) => {\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 = Empty as ConditionBlockWrapper[], setGlobalFilterCondition] =\n useControllableValue<ConditionBlockWrapper[]>(props, {\n valuePropName: 'globalFilterCondition',\n trigger: 'onGlobalFilterConditionChange',\n })\n\n let contextData = {\n readOnly: props?.readOnly || false,\n globalData,\n service,\n formatCurrency: props?.formatCurrency,\n globalFilterCondition,\n setGlobalFilterCondition: setGlobalFilterCondition as React.Dispatch<\n React.SetStateAction<ConditionBlockWrapper[]>\n >,\n }\n setContextRef(contextData)\n\n return (\n <AppContext.Provider value={contextData}>\n <DashboardWorkbench {...props} />\n </AppContext.Provider>\n )\n})\n"],"names":["cols","module","AntdEmpty","AddCalendarModal","AddChartModal"],"mappings":"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"}
|
package/package.json
CHANGED