@platox/pivot-table 0.0.69 → 0.0.72

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 (42) hide show
  1. package/es/dashboard-workbench/components/InputWrapper/index.d.ts +5 -1
  2. package/es/dashboard-workbench/components/InputWrapper/index.js +10 -4
  3. package/es/dashboard-workbench/components/InputWrapper/index.js.map +1 -1
  4. package/es/dashboard-workbench/components/SelectWrapper/index.js +15 -17
  5. package/es/dashboard-workbench/components/SelectWrapper/index.js.map +1 -1
  6. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/custome-data.js +5 -6
  7. package/es/dashboard-workbench/components/add-module-modal/add-calendar-modal/custome-data.js.map +1 -1
  8. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/components/GroupFieldConfigPicker.js.map +1 -1
  9. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-data.js +9 -10
  10. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-data.js.map +1 -1
  11. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-styles.js +4 -3
  12. package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/custome-styles.js.map +1 -1
  13. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js +7 -6
  14. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-data.js.map +1 -1
  15. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js +4 -4
  16. package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js.map +1 -1
  17. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/EnumSelect.js +5 -5
  18. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/EnumSelect.js.map +1 -1
  19. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js +197 -167
  20. package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js.map +1 -1
  21. package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js +25 -6
  22. package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js.map +1 -1
  23. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.d.ts +1 -0
  24. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.js +2 -3
  25. package/es/dashboard-workbench/components/global-filter-condition/FieldPicker.js.map +1 -1
  26. package/es/dashboard-workbench/components/global-filter-condition/index.js +5 -4
  27. package/es/dashboard-workbench/components/global-filter-condition/index.js.map +1 -1
  28. package/es/dashboard-workbench/components/module-content/calendar-module/index.js +1 -0
  29. package/es/dashboard-workbench/components/module-content/calendar-module/index.js.map +1 -1
  30. package/es/dashboard-workbench/components/module-content/chart-module/index.js +7 -0
  31. package/es/dashboard-workbench/components/module-content/chart-module/index.js.map +1 -1
  32. package/es/dashboard-workbench/components/module-content/utils.d.ts +1 -0
  33. package/es/dashboard-workbench/components/module-content/utils.js +1 -0
  34. package/es/dashboard-workbench/components/module-content/utils.js.map +1 -1
  35. package/es/dashboard-workbench/context.d.ts +2 -0
  36. package/es/dashboard-workbench/context.js.map +1 -1
  37. package/es/dashboard-workbench/index.js +8 -13
  38. package/es/dashboard-workbench/index.js.map +1 -1
  39. package/es/dashboard-workbench/types.d.ts +1 -0
  40. package/es/dashboard-workbench/utils/index.js.map +1 -1
  41. package/package.json +1 -1
  42. package/umd/pivot-table.umd.cjs +46 -46
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/calendar-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Descriptions, message, Modal, Spin } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { EventContentArg, EventSourceInput } from '@fullcalendar/core'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport FullCalendar from '@fullcalendar/react'\nimport { useMemoizedFn, useSize } from 'ahooks'\nimport dayjs from 'dayjs'\nimport isBetween from 'dayjs/plugin/isBetween'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { CalendarCustomeDataTypes } from '../../add-module-modal/add-calendar-modal/custome-data'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport en from './locales/en'\nimport zh from './locales/zh'\n\n// import zh from\n\ndayjs.extend(isBetween)\n\ninterface CalendarModuleProps {\n customData?: CalendarCustomeDataTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n rowWidth?: number\n rowHeight?: number\n}\n\nconst CalendarModule: React.FC<CalendarModuleProps> = ({ moduleDataApi, customData }) => {\n const { t, i18n } = useTranslation()\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n const [startMonthIntervals, setStartMonthIntervals] = useState<[string, string]>(['', ''])\n const handleDatesSet = (dateInfo: any) => {\n const currentDate = dayjs(dateInfo.view.currentStart)\n const firstDay = currentDate.startOf('month').format('YYYY-MM-DD')\n const lastDay = currentDate.endOf('month').format('YYYY-MM-DD')\n setStartMonthIntervals([firstDay, lastDay])\n }\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [isloading, setIsloading] = useState(false)\n const [chartData, setChartData] = useState<any>()\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n setIsloading(true)\n let queryString = ''\n const firstDayOfMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n const lastDayOfMonth = dayjs().endOf('month').format('YYYY-MM-DD')\n const conditionData = customData.conditionData\n const FMDay = startMonthIntervals.length > 0 ? startMonthIntervals[0] : firstDayOfMonth\n const LMDay = startMonthIntervals.length > 0 ? startMonthIntervals[1] : lastDayOfMonth\n\n let isConditionTimestampExist =\n (conditionData?.conditionList ?? []).some(item => item.type == 'timestamp') ||\n (matchGlobalFilterCondition?.conditionList ?? []).some(item => item.type == 'timestamp')\n\n if (!isConditionTimestampExist) {\n queryString = `&added_on=gt.${FMDay}&added_on=lt.${LMDay}`\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n //去掉第一个&符号\n if (queryString.startsWith('&')) {\n queryString = queryString.substring(1)\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setChartData(res.data)\n })\n .finally(() => {\n setIsloading(false)\n })\n }\n }\n })\n useEffect(() => {\n if (customData) {\n fetchChartData()\n }\n }, [\n customData?.dataSourceId,\n customData?.conditionData,\n startMonthIntervals,\n matchGlobalFilterCondition,\n ])\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData])\n\n const events = useMemo(() => {\n const calendarEvents = chartData?.map((item: any) => {\n const title = getTransformValue({\n fieldOptions,\n val: customData?.titleField ? item?.[customData.titleField] : '',\n field: customData?.titleField,\n fieldMap: globalData?.fieldMap,\n })\n return {\n title: title ?? t('unnamedRecord'),\n start:\n customData?.startDateField && item[customData?.startDateField]\n ? dayjs(item[customData?.startDateField])?.toISOString()\n : '',\n end:\n customData?.endDateField && item[customData?.endDateField]\n ? dayjs(item[customData?.endDateField])?.toISOString()\n : undefined,\n allDay: true,\n ...item,\n originalData: item,\n }\n })\n return calendarEvents\n }, [chartData, customData, fieldOptions])\n\n /* ============================== split =============================== */\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [currData, setCurrData] = useState()\n const currTitle = getTransformValue({\n fieldOptions,\n val: customData?.titleField ? currData?.[customData.titleField] : '',\n field: customData?.titleField,\n fieldMap: globalData?.fieldMap,\n })\n\n const handleEventClick = useMemoizedFn((info: any) => {\n const event = info.event\n setIsModalOpen(true)\n\n setCurrData(event.extendedProps?.originalData)\n })\n\n /* ============================== split =============================== */\n const boxRef = useRef<any>()\n const calendarRef = useRef<any>(null)\n const size = useSize(boxRef)\n useEffect(() => {\n setTimeout(() => {\n calendarRef.current?.getApi()?.updateSize()\n }, 16) //不是一个div 会有延迟\n }, [size])\n\n /* ============================== split =============================== */\n\n return (\n <div\n ref={boxRef}\n style={{\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n padding: '12px',\n }}\n >\n <div\n className=\"full-calendar-app\"\n style={{\n height: '100%',\n width: '100%',\n overflowY: 'auto',\n position: 'relative',\n }}\n >\n {isloading ? (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n background: 'rgba(255,255,255,0.6)',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1000,\n }}\n spinning={isloading}\n />\n ) : null}\n\n <FullCalendar\n locale={i18n.language === 'zh-CN' ? zh : en}\n // locale =\n ref={calendarRef} // 设置 FullCalendar 引用\n plugins={[dayGridPlugin]}\n headerToolbar={{\n left: 'title,today,prev,next',\n center: '',\n right: '',\n }}\n initialView=\"dayGridMonth\"\n height=\"auto\" // 自适应高度\n contentHeight=\"auto\" // 自动调整内容高度\n // dayMaxEvents={4} // 如果一天的事件太多则显示更多按钮\n editable={true}\n selectable={true}\n selectMirror={true}\n fixedWeekCount={false}\n datesSet={handleDatesSet}\n timeZone=\"UTC\"\n events={events} // 将筛选后的事件传递给 FullCalendar\n eventContent={(eventInfo: EventContentArg) => {\n return (\n <>\n <i>{eventInfo.event.title}</i>\n </>\n )\n }} // 自定义事件内容渲染\n eventClick={handleEventClick} // 事件点击时调用\n ></FullCalendar>\n <Modal\n title={currTitle ?? t('unnamedRecord')}\n open={isModalOpen}\n onOk={() => {\n setIsModalOpen(false)\n }}\n onCancel={() => {\n setIsModalOpen(false)\n }}\n destroyOnClose\n footer={(_, { OkBtn }) => (\n <>\n <OkBtn />\n </>\n )}\n >\n {(fieldOptions?.length ?? 0) > 0 ? (\n <Descriptions\n className=\"reset-descriptions\"\n layout=\"vertical\"\n column={2}\n items={fieldOptions?.map((field: any, fieldKey) => ({\n key: fieldKey,\n label: field.label,\n children: getTransformValue({\n fieldOptions,\n val: currData?.[field.value],\n field: field.value,\n fieldMap: globalData?.fieldMap,\n showNill: false,\n }),\n }))}\n />\n ) : null}\n </Modal>\n </div>\n </div>\n )\n}\n\nexport default React.memo(CalendarModule)\n"],"names":["matchGlobalFilterCondition","zh","en"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/calendar-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Descriptions, message, Modal, Spin } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { EventContentArg, EventSourceInput } from '@fullcalendar/core'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport FullCalendar from '@fullcalendar/react'\nimport { useMemoizedFn, useSize } from 'ahooks'\nimport dayjs from 'dayjs'\nimport isBetween from 'dayjs/plugin/isBetween'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { CalendarCustomeDataTypes } from '../../add-module-modal/add-calendar-modal/custome-data'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport en from './locales/en'\nimport zh from './locales/zh'\n\n// import zh from\n\ndayjs.extend(isBetween)\n\ninterface CalendarModuleProps {\n customData?: CalendarCustomeDataTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n rowWidth?: number\n rowHeight?: number\n}\n\nconst CalendarModule: React.FC<CalendarModuleProps> = ({ moduleDataApi, customData }) => {\n const { t, i18n } = useTranslation()\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n const [startMonthIntervals, setStartMonthIntervals] = useState<[string, string]>(['', ''])\n const handleDatesSet = (dateInfo: any) => {\n const currentDate = dayjs(dateInfo.view.currentStart)\n const firstDay = currentDate.startOf('month').format('YYYY-MM-DD')\n const lastDay = currentDate.endOf('month').format('YYYY-MM-DD')\n setStartMonthIntervals([firstDay, lastDay])\n }\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [isloading, setIsloading] = useState(false)\n const [chartData, setChartData] = useState<any>()\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n setIsloading(true)\n let queryString = ''\n const firstDayOfMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n const lastDayOfMonth = dayjs().endOf('month').format('YYYY-MM-DD')\n const conditionData = customData.conditionData\n const FMDay = startMonthIntervals.length > 0 ? startMonthIntervals[0] : firstDayOfMonth\n const LMDay = startMonthIntervals.length > 0 ? startMonthIntervals[1] : lastDayOfMonth\n\n let isConditionTimestampExist =\n (conditionData?.conditionList ?? []).some(item => item.type == 'timestamp') ||\n (matchGlobalFilterCondition?.conditionList ?? []).some(item => item.type == 'timestamp')\n\n if (!isConditionTimestampExist) {\n queryString = `&added_on=gt.${FMDay}&added_on=lt.${LMDay}`\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n console.log('conditionBlockList', conditionBlockList)\n // conditionBlockList.filter(v => {\n // return v.conditionList.length > 0\n // })\n\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n //去掉第一个&符号\n if (queryString.startsWith('&')) {\n queryString = queryString.substring(1)\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setChartData(res.data)\n })\n .finally(() => {\n setIsloading(false)\n })\n }\n }\n })\n useEffect(() => {\n if (customData) {\n fetchChartData()\n }\n }, [\n customData?.dataSourceId,\n customData?.conditionData,\n startMonthIntervals,\n matchGlobalFilterCondition,\n ])\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData])\n\n const events = useMemo(() => {\n const calendarEvents = chartData?.map((item: any) => {\n const title = getTransformValue({\n fieldOptions,\n val: customData?.titleField ? item?.[customData.titleField] : '',\n field: customData?.titleField,\n fieldMap: globalData?.fieldMap,\n })\n return {\n title: title ?? t('unnamedRecord'),\n start:\n customData?.startDateField && item[customData?.startDateField]\n ? dayjs(item[customData?.startDateField])?.toISOString()\n : '',\n end:\n customData?.endDateField && item[customData?.endDateField]\n ? dayjs(item[customData?.endDateField])?.toISOString()\n : undefined,\n allDay: true,\n ...item,\n originalData: item,\n }\n })\n return calendarEvents\n }, [chartData, customData, fieldOptions])\n\n /* ============================== split =============================== */\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [currData, setCurrData] = useState()\n const currTitle = getTransformValue({\n fieldOptions,\n val: customData?.titleField ? currData?.[customData.titleField] : '',\n field: customData?.titleField,\n fieldMap: globalData?.fieldMap,\n })\n\n const handleEventClick = useMemoizedFn((info: any) => {\n const event = info.event\n setIsModalOpen(true)\n\n setCurrData(event.extendedProps?.originalData)\n })\n\n /* ============================== split =============================== */\n const boxRef = useRef<any>()\n const calendarRef = useRef<any>(null)\n const size = useSize(boxRef)\n useEffect(() => {\n setTimeout(() => {\n calendarRef.current?.getApi()?.updateSize()\n }, 16) //不是一个div 会有延迟\n }, [size])\n\n /* ============================== split =============================== */\n\n return (\n <div\n ref={boxRef}\n style={{\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n padding: '12px',\n }}\n >\n <div\n className=\"full-calendar-app\"\n style={{\n height: '100%',\n width: '100%',\n overflowY: 'auto',\n position: 'relative',\n }}\n >\n {isloading ? (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n background: 'rgba(255,255,255,0.6)',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1000,\n }}\n spinning={isloading}\n />\n ) : null}\n\n <FullCalendar\n locale={i18n.language === 'zh-CN' ? zh : en}\n // locale =\n ref={calendarRef} // 设置 FullCalendar 引用\n plugins={[dayGridPlugin]}\n headerToolbar={{\n left: 'title,today,prev,next',\n center: '',\n right: '',\n }}\n initialView=\"dayGridMonth\"\n height=\"auto\" // 自适应高度\n contentHeight=\"auto\" // 自动调整内容高度\n // dayMaxEvents={4} // 如果一天的事件太多则显示更多按钮\n editable={true}\n selectable={true}\n selectMirror={true}\n fixedWeekCount={false}\n datesSet={handleDatesSet}\n timeZone=\"UTC\"\n events={events} // 将筛选后的事件传递给 FullCalendar\n eventContent={(eventInfo: EventContentArg) => {\n return (\n <>\n <i>{eventInfo.event.title}</i>\n </>\n )\n }} // 自定义事件内容渲染\n eventClick={handleEventClick} // 事件点击时调用\n ></FullCalendar>\n <Modal\n title={currTitle ?? t('unnamedRecord')}\n open={isModalOpen}\n onOk={() => {\n setIsModalOpen(false)\n }}\n onCancel={() => {\n setIsModalOpen(false)\n }}\n destroyOnClose\n footer={(_, { OkBtn }) => (\n <>\n <OkBtn />\n </>\n )}\n >\n {(fieldOptions?.length ?? 0) > 0 ? (\n <Descriptions\n className=\"reset-descriptions\"\n layout=\"vertical\"\n column={2}\n items={fieldOptions?.map((field: any, fieldKey) => ({\n key: fieldKey,\n label: field.label,\n children: getTransformValue({\n fieldOptions,\n val: currData?.[field.value],\n field: field.value,\n fieldMap: globalData?.fieldMap,\n showNill: false,\n }),\n }))}\n />\n ) : null}\n </Modal>\n </div>\n </div>\n )\n}\n\nexport default React.memo(CalendarModule)\n"],"names":["matchGlobalFilterCondition","zh","en"],"mappings":";;;;;;;;;;;;;;AAqBA,MAAM,OAAO,SAAS;AAYtB,MAAM,iBAAgD,CAAC,EAAE,eAAe,iBAAiB;AACvF,QAAM,EAAE,GAAG,KAAK,IAAI,eAAe;AACnC,QAAM,EAAE,YAAY,sBAAsB,IAAI,cAAc;AAGtD,QAAA,CAAC,qBAAqB,sBAAsB,IAAI,SAA2B,CAAC,IAAI,EAAE,CAAC;AACnF,QAAA,iBAAiB,CAAC,aAAkB;AACxC,UAAM,cAAc,MAAM,SAAS,KAAK,YAAY;AACpD,UAAM,WAAW,YAAY,QAAQ,OAAO,EAAE,OAAO,YAAY;AACjE,UAAM,UAAU,YAAY,MAAM,OAAO,EAAE,OAAO,YAAY;AACvC,2BAAA,CAAC,UAAU,OAAO,CAAC;AAAA,EAC5C;AAEI,MAAA,6BAA6B,QAAQ,MAAM;AAC7C,QAAIA,8BAA6B,+DAAuB;AAAA,MACtD,CAAA,UAAQ,6BAAM,mBAAiB,yCAAY;AAAA;AAEtCA,WAAAA;AAAAA,EACN,GAAA,CAAC,uBAAuB,yCAAY,YAAY,CAAC;AAEpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAc;AAC1C,QAAA,iBAAiB,cAAc,YAAY;;AAC/C,iBAAa,CAAA,CAAE;AACf,QAAI,YAAY;AACd,mBAAa,IAAI;AACjB,UAAI,cAAc;AAClB,YAAM,kBAAkB,QAAQ,QAAQ,OAAO,EAAE,OAAO,YAAY;AACpE,YAAM,iBAAiB,QAAQ,MAAM,OAAO,EAAE,OAAO,YAAY;AACjE,YAAM,gBAAgB,WAAW;AACjC,YAAM,QAAQ,oBAAoB,SAAS,IAAI,oBAAoB,CAAC,IAAI;AACxE,YAAM,QAAQ,oBAAoB,SAAS,IAAI,oBAAoB,CAAC,IAAI;AAExE,UAAI,8BACD,+CAAe,kBAAiB,CAAI,GAAA,KAAK,UAAQ,KAAK,QAAQ,WAAW,OACzE,yEAA4B,kBAAiB,IAAI,KAAK,CAAQ,SAAA,KAAK,QAAQ,WAAW;AAEzF,UAAI,CAAC,2BAA2B;AAChB,sBAAA,gBAAgB,KAAK,gBAAgB,KAAK;AAAA,MAAA;AAI1D,UAAI,qBAAqB,CAAC;AAC1B,aAAK,8EAA4B,kBAA5B,mBAA2C,WAAU,KAAK,GAAG;AAChE,2BAAmB,KAAK,0BAA0B;AAAA,MAAA;AAEpD,aAAK,oDAAY,kBAAZ,mBAA2B,kBAA3B,mBAA0C,WAAU,KAAK,GAAG;AAC5C,2BAAA,KAAK,yCAAY,aAAa;AAAA,MAAA;AAE3C,cAAA,IAAI,sBAAsB,kBAAkB;AAKhD,UAAA,mBAAmB,SAAS,GAAG;AAC7B,YAAA,SAAS,yBAAyB,kBAAsC;AAC5E,uBAAe,CAAC,CAAC,SAAS,IAAI,MAAM,KAAK;AAAA,MAAA;AAIvC,UAAA,YAAY,WAAW,GAAG,GAAG;AACjB,sBAAA,YAAY,UAAU,CAAC;AAAA,MAAA;AAGvC,UAAI,yCAAY,cAAc;AACZ,uDAAA;AAAA,UACd,IAAI,yCAAY;AAAA,UAChB,OAAO;AAAA,QAAA,GAEN,KAAK,CAAC,QAAa;AACd,cAAA,CAAC,IAAI,SAAS;AACR,oBAAA,MAAM,IAAI,OAAO;AACzB;AAAA,UAAA;AAEF,uBAAa,IAAI,IAAI;AAAA,QAAA,GAEtB,QAAQ,MAAM;AACb,uBAAa,KAAK;AAAA,QAAA;AAAA,MACnB;AAAA,IACL;AAAA,EACF,CACD;AACD,YAAU,MAAM;AACd,QAAI,YAAY;AACC,qBAAA;AAAA,IAAA;AAAA,EACjB,GACC;AAAA,IACD,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ;AAAA,IACA;AAAA,EAAA,CACD;AAGK,QAAA,eAAe,QAAQ,MAAM;;AAC7B,QAAA,OAAM,oDAAY,eAAZ,mBAAwB,KAAK,UAAQ,KAAK,WAAU,yCAAY,mBAAhE,mBAA+E;AAClF,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,UAAU,CAAC;AAErB,QAAA,SAAS,QAAQ,MAAM;AAC3B,UAAM,iBAAiB,uCAAW,IAAI,CAAC,SAAc;;AACnD,YAAM,QAAQ,kBAAkB;AAAA,QAC9B;AAAA,QACA,MAAK,yCAAY,cAAa,6BAAO,WAAW,cAAc;AAAA,QAC9D,OAAO,yCAAY;AAAA,QACnB,UAAU,yCAAY;AAAA,MAAA,CACvB;AACM,aAAA;AAAA,QACL,OAAO,SAAS,EAAE,eAAe;AAAA,QACjC,QACE,yCAAY,mBAAkB,KAAK,yCAAY,cAAc,KACzD,WAAM,KAAK,yCAAY,cAAc,CAAC,MAAtC,mBAAyC,gBACzC;AAAA,QACN,MACE,yCAAY,iBAAgB,KAAK,yCAAY,YAAY,KACrD,WAAM,KAAK,yCAAY,YAAY,CAAC,MAApC,mBAAuC,gBACvC;AAAA,QACN,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,cAAc;AAAA,MAChB;AAAA,IAAA;AAEK,WAAA;AAAA,EACN,GAAA,CAAC,WAAW,YAAY,YAAY,CAAC;AAGxC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS;AACzC,QAAM,YAAY,kBAAkB;AAAA,IAClC;AAAA,IACA,MAAK,yCAAY,cAAa,qCAAW,WAAW,cAAc;AAAA,IAClE,OAAO,yCAAY;AAAA,IACnB,UAAU,yCAAY;AAAA,EAAA,CACvB;AAEK,QAAA,mBAAmB,cAAc,CAAC,SAAc;;AACpD,UAAM,QAAQ,KAAK;AACnB,mBAAe,IAAI;AAEP,iBAAA,WAAM,kBAAN,mBAAqB,YAAY;AAAA,EAAA,CAC9C;AAGD,QAAM,SAAS,OAAY;AACrB,QAAA,cAAc,OAAY,IAAI;AAC9B,QAAA,OAAO,QAAQ,MAAM;AAC3B,YAAU,MAAM;AACd,eAAW,MAAM;;AACH,8BAAA,YAAA,mBAAS,aAAT,mBAAmB;AAAA,OAC9B,EAAE;AAAA,EAAA,GACJ,CAAC,IAAI,CAAC;AAKP,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MAEA,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,WAAW;AAAA,YACX,UAAU;AAAA,UACZ;AAAA,UAEC,UAAA;AAAA,YACC,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,QAAQ;AAAA,gBACV;AAAA,gBACA,UAAU;AAAA,cAAA;AAAA,YAAA,IAEV;AAAA,YAEJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,QAAQ,KAAK,aAAa,UAAUC,MAAKC;AAAAA,gBAEzC,KAAK;AAAA,gBACL,SAAS,CAAC,aAAa;AAAA,gBACvB,eAAe;AAAA,kBACb,MAAM;AAAA,kBACN,QAAQ;AAAA,kBACR,OAAO;AAAA,gBACT;AAAA,gBACA,aAAY;AAAA,gBACZ,QAAO;AAAA,gBACP,eAAc;AAAA,gBAEd,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,gBAAgB;AAAA,gBAChB,UAAU;AAAA,gBACV,UAAS;AAAA,gBACT;AAAA,gBACA,cAAc,CAAC,cAA+B;AAC5C,yDAEI,UAAC,oBAAA,KAAA,EAAG,UAAU,UAAA,MAAM,OAAM,EAC5B,CAAA;AAAA,gBAEJ;AAAA,gBACA,YAAY;AAAA,cAAA;AAAA,YACb;AAAA,YACD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,aAAa,EAAE,eAAe;AAAA,gBACrC,MAAM;AAAA,gBACN,MAAM,MAAM;AACV,iCAAe,KAAK;AAAA,gBACtB;AAAA,gBACA,UAAU,MAAM;AACd,iCAAe,KAAK;AAAA,gBACtB;AAAA,gBACA,gBAAc;AAAA,gBACd,QAAQ,CAAC,GAAG,EAAE,MACZ,MAAA,oBAAA,UAAA,EACE,UAAC,oBAAA,OAAA,CAAA,CAAM,EACT,CAAA;AAAA,gBAGA,YAAA,6CAAc,WAAU,KAAK,IAC7B;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,QAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,OAAO,6CAAc,IAAI,CAAC,OAAY,cAAc;AAAA,sBAClD,KAAK;AAAA,sBACL,OAAO,MAAM;AAAA,sBACb,UAAU,kBAAkB;AAAA,wBAC1B;AAAA,wBACA,KAAK,qCAAW,MAAM;AAAA,wBACtB,OAAO,MAAM;AAAA,wBACb,UAAU,yCAAY;AAAA,wBACtB,UAAU;AAAA,sBACX,CAAA;AAAA,oBAAA;AAAA,kBACD;AAAA,gBAAA,IAEF;AAAA,cAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,MAAA,mBAAe,MAAM,KAAK,cAAc;"}
@@ -458,6 +458,13 @@ const ChartModule = ({
458
458
  type: "shadow"
459
459
  // 阴影指示器,鼠标悬停时显示柱状图的阴影
460
460
  },
461
+ // className: 'tooltipcls',
462
+ // textStyle: {
463
+ // width: 100,
464
+ // overflow: 'hidden',
465
+ // // overflow: 'break',
466
+ // // ov: 'breakAll',
467
+ // },
461
468
  appendTo: "body"
462
469
  }
463
470
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/chart-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { message, Spin } from 'antd'\nimport { useDebounceEffect, useMemoizedFn, useSize } from 'ahooks'\nimport { EChartsOption, LabelFormatterCallback } from 'echarts'\nimport { t } from 'i18next'\nimport { groupBy, isNumber } from 'lodash-es'\nimport {\n ChartCustomDataType,\n ChartCustomeStylesTypes,\n TimeGroupInterval,\n} from '@platox/pivot-table/components/add-module-modal/add-chart-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { ChartType } from '../../add-module-modal/add-chart-modal/interface'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport BaseChart from './base-chart'\nimport Empty from './Empty'\nimport { getChartConfig, getGrid, getSerie } from './utils'\n\ninterface ChartModuleProps {\n customData?: ChartCustomDataType\n customeStyle?: ChartCustomeStylesTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n}\n\nconst ChartModule: React.FC<ChartModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n width = 2,\n height = 2,\n}) => {\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [chartData, setChartData] = useState<any>()\n const [loading, setloading] = useState<any>()\n\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n // 调用方法\n setloading(true)\n let queryString = ''\n const newXAxisField = customData?.xAxis === 'tags' ? 'tag' : customData?.xAxis\n const newGroupField = customData?.groupField === 'tags' ? 'tag' : customData?.groupField\n\n if (!customData.isGroup) {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},id.count()`\n }\n\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n } else {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},${newGroupField},id.count()`\n }\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${newGroupField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n\n setChartData(res.data)\n })\n .finally(() => {\n setloading(false)\n })\n }\n } else {\n setChartData([])\n }\n })\n\n useDebounceEffect(\n () => {\n if (customData) {\n fetchChartData()\n }\n },\n [\n customData?.dataSourceId,\n customData?.conditionData,\n customData?.sortField,\n customData?.sortOrder,\n customData?.xAxis,\n customData?.yAxis,\n customData?.yAxisField,\n customData?.yAxisFieldType,\n customData?.isGroup,\n customData?.groupField,\n matchGlobalFilterCondition,\n ],\n { wait: 60 }\n )\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData?.dataSourceId])\n\n const chartOptions = useMemo(() => {\n if (customData && chartData && customData.type && chartData.length > 0) {\n const getChartOptions = (_chartData: any) => {\n const getFieldVal = ({\n item,\n field,\n timeGroupInterval,\n }: {\n item: any\n field: any\n timeGroupInterval?: TimeGroupInterval\n }) => {\n return getTransformValue({\n fieldOptions,\n val: item[field],\n field: field,\n fieldMap: globalData?.fieldMap,\n timeGroupInterval,\n })\n }\n const getFieldLabel = (field: string) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n return fieldData?.label\n }\n\n const isTimeField = (fieldName: string) => {\n return fieldOptions?.find(item => item.value === fieldName)?.type === 'timestamp'\n }\n\n const mapping = {\n tags: 'tag', //后端数据名不一致\n }\n const newXAxisField =\n mapping[customData?.xAxis as keyof typeof mapping] ?? customData?.xAxis\n const newGroupField =\n mapping[customData?.groupField as keyof typeof mapping] ?? customData?.groupField\n\n //规避bug: 前端操作合并了id不同 name相同的数据 这边吧所有数据都按照name 合并下 让看上去是对比\n let groupData = groupBy(_chartData, item => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n return category\n })\n let chartData = Object.keys(groupData).map(key => {\n let groupList = groupData[key]\n let mergeObj = groupList.reduce((acc, item) => {\n Object.keys(item).forEach(k => {\n let value = item[k]\n if (isNumber(value)) {\n acc[k] = acc?.[k] ? acc[k] + value : value\n } else {\n acc[k] = value\n }\n })\n return acc\n }, {})\n return mergeObj\n })\n\n const categories = new Set<string>() //x轴数据\n const stackCategories = new Set<string>() //分组类别\n const valueGroups: Record<string, Record<string, number>> = {} // 分组下的y轴数据\n const valueCounts: Record<string, number> = {} //没有分组下的y轴数据\n\n chartData.forEach((item: any) => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n const val =\n customData.yAxis === 'recordTotal' ? item?.count : item[customData?.yAxisFieldType] || 0\n\n const key = category ?? t('unknown')\n valueCounts[key] = val\n\n if (customData?.isGroup && customData?.groupField) {\n const stackCategory = getFieldVal({\n item: item,\n field: newGroupField,\n })\n\n const key = category ?? t('unknown')\n\n stackCategories.add(stackCategory)\n\n if (!valueGroups[stackCategory]) {\n valueGroups[stackCategory] = {}\n }\n valueGroups[stackCategory][key] = val\n }\n })\n\n // 计算百分比\n const valuePercentages: Record<string, number> = {} //没有分组下的y轴数据百分比\n const valueGroupPercentages: Record<string, Record<string, number>> = {} //分组下的y轴数据百分比\n if (customData?.isGroup && customData?.groupField) {\n const totalPerCategory: Record<string, number> = {}\n\n Object.keys(valueGroups).forEach(stackCategory => {\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n totalPerCategory[key] = (totalPerCategory[key] || 0) + val\n })\n })\n\n Object.keys(valueGroups).forEach(stackCategory => {\n valueGroupPercentages[stackCategory] = {}\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n const total = totalPerCategory[key] || 1 // 防止除以 0\n valueGroupPercentages[stackCategory][key] = (val / total) * 100\n })\n })\n } else {\n Object.entries(valueCounts).forEach(([key, val]) => {\n const total = val || 1 // 防止除以 0\n valuePercentages[key] = (val / total) * 100\n })\n }\n\n // 排序\n let sortField = customData?.sortField ?? 'xAxis'\n let sortOrder = customData?.sortOrder ?? 'asc'\n\n const sortedChartData = [...chartData].sort((a, b) => {\n let valA, valB\n\n switch (sortField) {\n case 'xAxis':\n valA = getFieldVal({\n item: a,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n valB = getFieldVal({\n item: b,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n break\n\n case 'yAxisField':\n valA =\n customData.yAxis === 'recordTotal' ? a?.count : a[customData?.yAxisFieldType] || 0\n valB =\n customData.yAxis === 'recordTotal' ? b?.count : b[customData?.yAxisFieldType] || 0\n break\n case 'recordValue':\n default:\n break\n }\n\n const orderMultiplier = sortOrder === 'asc' ? 1 : -1\n if (valA > valB) return 1 * orderMultiplier\n if (valA < valB) return -1 * orderMultiplier\n return 0\n })\n\n const sortedCategories = sortedChartData.map(item =>\n getFieldVal({\n item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n )\n categories.clear()\n sortedCategories.forEach(cat => categories.add(cat))\n\n // display range 实现\n if (\n !isTimeField(customData?.xAxis) &&\n customData.displayRange !== 'ALL' &&\n !!customData.displayRange //兼容旧版本 没有displayRange\n ) {\n // 按照个数排序 1>0\n let sortedByCountCategories = Array.from(categories).sort((a, b) => {\n return valueCounts[b] - valueCounts[a]\n })\n\n // 提取符合条件的categories\n let ableCategories: string[] = []\n let [pos, count] = customData.displayRange.split('_')\n if (pos === 'TOP') {\n ableCategories = sortedByCountCategories.slice(0, Number(count))\n } else {\n ableCategories = sortedByCountCategories.slice(-Number(count))\n }\n\n // 从 categories 过滤掉不符合条件的数据 保留categories的排序\n Array.from(categories).forEach(item => {\n if (!ableCategories.includes(item)) {\n categories.delete(item)\n }\n return item\n })\n }\n\n // 标签\n const formatter: LabelFormatterCallback = data => {\n if (customData?.isGroup && customData?.groupField) {\n return data?.value == 0 ? '' : `${data?.value}`\n } else {\n return `${data?.value}`\n }\n }\n const label = {\n show: customData?.chartOptions?.includes('label'),\n position: 'top',\n formatter,\n }\n const labels = Array.from(categories) //x轴label\n const stackLabels = Array.from(stackCategories) //分组数据\n\n // series\n const series = []\n const chartConfig = getChartConfig({\n type: customData?.type as ChartType,\n categories: labels,\n }) as any\n\n const formatValue = v => {\n if (isNumber(v)) {\n return Math.floor(v * 100) / 100\n } else {\n return v\n }\n }\n\n if (customData?.isGroup && customData?.groupField) {\n stackLabels.forEach(stackCategory => {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valueGroupPercentages[stackCategory][label] || 0))\n : labels.map(label => formatValue(valueGroups[stackCategory][label] || 0))\n // 组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n let matchCombinationChartConfig = (customData?.groupFieldConfig ?? []).find(\n item =>\n getFieldVal({\n item: {\n [newGroupField]: item?.value,\n },\n field: newGroupField,\n }) == stackCategory\n )\n type = matchCombinationChartConfig?.config?.chartType ?? ChartType['ChartBar']\n yAxisPos = matchCombinationChartConfig?.config?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: type,\n data,\n label,\n name: stackCategory,\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n })\n } else {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valuePercentages[label]?.toFixed(2) || 0)) // 使用百分比数据\n : labels.map(label => formatValue(valueCounts[label] || 0))\n\n //组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n type = customData?.yAxisFieldConfig?.chartType ?? ChartType['ChartBar']\n } else {\n yAxisPos = customData?.yAxisFieldConfig?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: customData.type,\n data,\n label,\n name:\n customData.yAxis === 'recordTotal'\n ? t('pb.statisticsText')\n : getFieldLabel(customData?.yAxisField),\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n }\n\n // misc\n const grids = getGrid({ series, chartConfig, width, customeStyle })\n const isShowLegend = customData?.chartOptions?.includes('legend')\n\n let isLeftYAxisShow = series.some(item => item?.yAxisIndex == 0)\n let isRightYAxisShow = series.some(item => item?.yAxisIndex == 1)\n let yAxisConfig = {\n ...chartConfig.yAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n hideOverlap: true,\n ...chartConfig.yAxis?.axisLabel,\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n }\n\n const options: EChartsOption = {\n legend: {\n type: 'scroll',\n left: 'center',\n right: 'center',\n top: '0',\n show: isShowLegend,\n itemWidth: 12,\n itemHeight: 12,\n data: series?.map((item: any) => item?.name || '') || [],\n },\n grid: {\n top: grids.top,\n left: grids.left,\n right: grids.right,\n bottom: grids.bottom,\n },\n graphic: {\n elements: [\n {\n type: 'text',\n left: 'center',\n bottom: '10px',\n style: {\n text: customeStyle?.xtitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n },\n {\n type: 'text',\n left: '10px',\n top: 'center',\n style: {\n text: customeStyle?.ytitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n rotation: Math.PI / 2,\n },\n ],\n },\n xAxis: {\n ...chartConfig.xAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n rotate: grids.axisLabelRotate, // 使标签倾斜,调整为合适的角度\n interval: 'auto', // 自动隐藏\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n ...(chartConfig.xAxis?.axisLabel ?? {}),\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n },\n yAxis: [\n {\n show: isLeftYAxisShow,\n ...yAxisConfig,\n },\n {\n show: isRightYAxisShow,\n ...yAxisConfig,\n },\n ],\n series: series,\n tooltip: {\n trigger: 'item', // 触发方式:鼠标悬浮在坐标轴上\n axisPointer: {\n type: 'shadow', // 阴影指示器,鼠标悬停时显示柱状图的阴影\n },\n appendTo: 'body',\n },\n }\n\n return options\n }\n\n return getChartOptions(chartData)\n } else {\n return null\n }\n }, [\n customData?.sortField,\n customData?.sortOrder,\n customData?.type,\n customData?.chartOptions,\n customData?.timeGroupInterval,\n customData?.groupFieldConfig,\n customData?.yAxisFieldConfig,\n customData?.displayRange,\n // customData,\n customeStyle,\n chartData,\n width,\n height,\n fieldOptions,\n ])\n\n /* ============================== split =============================== */\n const echartRef = useRef<any>()\n const containerRef = useRef<HTMLDivElement>(null)\n const size = useSize(containerRef)\n\n useEffect(() => {\n if (!!size) {\n echartRef?.current?.resize()\n }\n }, [size])\n\n const isLoading = loading\n const isEmpyt = !loading && !chartOptions\n const isOk = !isLoading && !!chartOptions\n return (\n <div style={{ width: '100%', height: '100%' }} ref={containerRef}>\n {isLoading && (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n spinning={loading}\n />\n )}\n {isEmpyt && <Empty />}\n {isOk && <BaseChart echartRef={echartRef} options={chartOptions ?? {}} />}\n </div>\n )\n}\n\nexport default React.memo(ChartModule)\n"],"names":["matchGlobalFilterCondition","_a","chartData","key","label","_b","BaseChart"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/chart-module/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { message, Spin } from 'antd'\nimport { useDebounceEffect, useMemoizedFn, useSize } from 'ahooks'\nimport { EChartsOption, LabelFormatterCallback } from 'echarts'\nimport { t } from 'i18next'\nimport { groupBy, isNumber } from 'lodash-es'\nimport {\n ChartCustomDataType,\n ChartCustomeStylesTypes,\n TimeGroupInterval,\n} from '@platox/pivot-table/components/add-module-modal/add-chart-modal/interface'\nimport { useAppContext } from '../../../context'\nimport { FieldItem, ModuleDataApi } from '../../../types'\nimport { getTransformValue } from '../../../utils'\nimport { ChartType } from '../../add-module-modal/add-chart-modal/interface'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport BaseChart from './base-chart'\nimport Empty from './Empty'\nimport { getChartConfig, getGrid, getSerie } from './utils'\n\ninterface ChartModuleProps {\n customData?: ChartCustomDataType\n customeStyle?: ChartCustomeStylesTypes\n onChange?: (val: unknown) => void\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n}\n\nconst ChartModule: React.FC<ChartModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n width = 2,\n height = 2,\n}) => {\n const { globalData, globalFilterCondition } = useAppContext()\n\n /* ============================== split =============================== */\n let matchGlobalFilterCondition = useMemo(() => {\n let matchGlobalFilterCondition = globalFilterCondition?.find(\n item => item?.dataSourceId === customData?.dataSourceId\n )\n return matchGlobalFilterCondition\n }, [globalFilterCondition, customData?.dataSourceId])\n\n const [chartData, setChartData] = useState<any>()\n const [loading, setloading] = useState<any>()\n\n const fetchChartData = useMemoizedFn(async () => {\n setChartData([])\n if (customData) {\n // 调用方法\n setloading(true)\n let queryString = ''\n const newXAxisField = customData?.xAxis === 'tags' ? 'tag' : customData?.xAxis\n const newGroupField = customData?.groupField === 'tags' ? 'tag' : customData?.groupField\n\n if (!customData.isGroup) {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},id.count()`\n }\n\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n } else {\n if (customData.yAxis === 'recordTotal') {\n queryString += `select=${newXAxisField},${newGroupField},id.count()`\n }\n if (customData.yAxis === 'fieldValue' && customData?.yAxisField) {\n queryString += `select=${newXAxisField},${newGroupField},${customData?.yAxisField}.${customData?.yAxisFieldType}()`\n }\n }\n\n // 筛选\n let conditionBlockList = []\n if ((matchGlobalFilterCondition?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(matchGlobalFilterCondition)\n }\n if ((customData?.conditionData?.conditionList?.length ?? 0) > 0) {\n conditionBlockList.push(customData?.conditionData)\n }\n if (conditionBlockList.length > 0) {\n let DSLStr = mapConditionsToPostgrest(conditionBlockList as ConditionBlock[])\n queryString += !!DSLStr ? `&${DSLStr}` : ''\n }\n\n if (customData?.dataSourceId) {\n moduleDataApi?.({\n id: customData?.dataSourceId,\n query: queryString,\n })\n .then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n\n setChartData(res.data)\n })\n .finally(() => {\n setloading(false)\n })\n }\n } else {\n setChartData([])\n }\n })\n\n useDebounceEffect(\n () => {\n if (customData) {\n fetchChartData()\n }\n },\n [\n customData?.dataSourceId,\n customData?.conditionData,\n customData?.sortField,\n customData?.sortOrder,\n customData?.xAxis,\n customData?.yAxis,\n customData?.yAxisField,\n customData?.yAxisFieldType,\n customData?.isGroup,\n customData?.groupField,\n matchGlobalFilterCondition,\n ],\n { wait: 60 }\n )\n\n /* ============================== split =============================== */\n const fieldOptions = useMemo(() => {\n let ret = globalData?.sourceData?.find(item => item.value === customData?.dataSourceId)?.fields\n return ret\n }, [globalData, customData?.dataSourceId])\n\n const chartOptions = useMemo(() => {\n if (customData && chartData && customData.type && chartData.length > 0) {\n const getChartOptions = (_chartData: any) => {\n const getFieldVal = ({\n item,\n field,\n timeGroupInterval,\n }: {\n item: any\n field: any\n timeGroupInterval?: TimeGroupInterval\n }) => {\n return getTransformValue({\n fieldOptions,\n val: item[field],\n field: field,\n fieldMap: globalData?.fieldMap,\n timeGroupInterval,\n })\n }\n const getFieldLabel = (field: string) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n return fieldData?.label\n }\n\n const isTimeField = (fieldName: string) => {\n return fieldOptions?.find(item => item.value === fieldName)?.type === 'timestamp'\n }\n\n const mapping = {\n tags: 'tag', //后端数据名不一致\n }\n const newXAxisField =\n mapping[customData?.xAxis as keyof typeof mapping] ?? customData?.xAxis\n const newGroupField =\n mapping[customData?.groupField as keyof typeof mapping] ?? customData?.groupField\n\n //规避bug: 前端操作合并了id不同 name相同的数据 这边吧所有数据都按照name 合并下 让看上去是对比\n let groupData = groupBy(_chartData, item => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n return category\n })\n let chartData = Object.keys(groupData).map(key => {\n let groupList = groupData[key]\n let mergeObj = groupList.reduce((acc, item) => {\n Object.keys(item).forEach(k => {\n let value = item[k]\n if (isNumber(value)) {\n acc[k] = acc?.[k] ? acc[k] + value : value\n } else {\n acc[k] = value\n }\n })\n return acc\n }, {})\n return mergeObj\n })\n\n const categories = new Set<string>() //x轴数据\n const stackCategories = new Set<string>() //分组类别\n const valueGroups: Record<string, Record<string, number>> = {} // 分组下的y轴数据\n const valueCounts: Record<string, number> = {} //没有分组下的y轴数据\n\n chartData.forEach((item: any) => {\n const category = getFieldVal({\n item: item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n const val =\n customData.yAxis === 'recordTotal' ? item?.count : item[customData?.yAxisFieldType] || 0\n\n const key = category ?? t('unknown')\n valueCounts[key] = val\n\n if (customData?.isGroup && customData?.groupField) {\n const stackCategory = getFieldVal({\n item: item,\n field: newGroupField,\n })\n\n const key = category ?? t('unknown')\n\n stackCategories.add(stackCategory)\n\n if (!valueGroups[stackCategory]) {\n valueGroups[stackCategory] = {}\n }\n valueGroups[stackCategory][key] = val\n }\n })\n\n // 计算百分比\n const valuePercentages: Record<string, number> = {} //没有分组下的y轴数据百分比\n const valueGroupPercentages: Record<string, Record<string, number>> = {} //分组下的y轴数据百分比\n if (customData?.isGroup && customData?.groupField) {\n const totalPerCategory: Record<string, number> = {}\n\n Object.keys(valueGroups).forEach(stackCategory => {\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n totalPerCategory[key] = (totalPerCategory[key] || 0) + val\n })\n })\n\n Object.keys(valueGroups).forEach(stackCategory => {\n valueGroupPercentages[stackCategory] = {}\n Object.entries(valueGroups[stackCategory]).forEach(([key, val]) => {\n const total = totalPerCategory[key] || 1 // 防止除以 0\n valueGroupPercentages[stackCategory][key] = (val / total) * 100\n })\n })\n } else {\n Object.entries(valueCounts).forEach(([key, val]) => {\n const total = val || 1 // 防止除以 0\n valuePercentages[key] = (val / total) * 100\n })\n }\n\n // 排序\n let sortField = customData?.sortField ?? 'xAxis'\n let sortOrder = customData?.sortOrder ?? 'asc'\n\n const sortedChartData = [...chartData].sort((a, b) => {\n let valA, valB\n\n switch (sortField) {\n case 'xAxis':\n valA = getFieldVal({\n item: a,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n valB = getFieldVal({\n item: b,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n break\n\n case 'yAxisField':\n valA =\n customData.yAxis === 'recordTotal' ? a?.count : a[customData?.yAxisFieldType] || 0\n valB =\n customData.yAxis === 'recordTotal' ? b?.count : b[customData?.yAxisFieldType] || 0\n break\n case 'recordValue':\n default:\n break\n }\n\n const orderMultiplier = sortOrder === 'asc' ? 1 : -1\n if (valA > valB) return 1 * orderMultiplier\n if (valA < valB) return -1 * orderMultiplier\n return 0\n })\n\n const sortedCategories = sortedChartData.map(item =>\n getFieldVal({\n item,\n field: newXAxisField,\n timeGroupInterval: customData?.timeGroupInterval,\n })\n )\n categories.clear()\n sortedCategories.forEach(cat => categories.add(cat))\n\n // display range 实现\n if (\n !isTimeField(customData?.xAxis) &&\n customData.displayRange !== 'ALL' &&\n !!customData.displayRange //兼容旧版本 没有displayRange\n ) {\n // 按照个数排序 1>0\n let sortedByCountCategories = Array.from(categories).sort((a, b) => {\n return valueCounts[b] - valueCounts[a]\n })\n\n // 提取符合条件的categories\n let ableCategories: string[] = []\n let [pos, count] = customData.displayRange.split('_')\n if (pos === 'TOP') {\n ableCategories = sortedByCountCategories.slice(0, Number(count))\n } else {\n ableCategories = sortedByCountCategories.slice(-Number(count))\n }\n\n // 从 categories 过滤掉不符合条件的数据 保留categories的排序\n Array.from(categories).forEach(item => {\n if (!ableCategories.includes(item)) {\n categories.delete(item)\n }\n return item\n })\n }\n\n // 标签\n const formatter: LabelFormatterCallback = data => {\n if (customData?.isGroup && customData?.groupField) {\n return data?.value == 0 ? '' : `${data?.value}`\n } else {\n return `${data?.value}`\n }\n }\n const label = {\n show: customData?.chartOptions?.includes('label'),\n position: 'top',\n formatter,\n }\n const labels = Array.from(categories) //x轴label\n const stackLabels = Array.from(stackCategories) //分组数据\n\n // series\n const series = []\n const chartConfig = getChartConfig({\n type: customData?.type as ChartType,\n categories: labels,\n }) as any\n\n const formatValue = v => {\n if (isNumber(v)) {\n return Math.floor(v * 100) / 100\n } else {\n return v\n }\n }\n\n if (customData?.isGroup && customData?.groupField) {\n stackLabels.forEach(stackCategory => {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valueGroupPercentages[stackCategory][label] || 0))\n : labels.map(label => formatValue(valueGroups[stackCategory][label] || 0))\n // 组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n let matchCombinationChartConfig = (customData?.groupFieldConfig ?? []).find(\n item =>\n getFieldVal({\n item: {\n [newGroupField]: item?.value,\n },\n field: newGroupField,\n }) == stackCategory\n )\n type = matchCombinationChartConfig?.config?.chartType ?? ChartType['ChartBar']\n yAxisPos = matchCombinationChartConfig?.config?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: type,\n data,\n label,\n name: stackCategory,\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n })\n } else {\n const data = ['chart-bar-percentage', 'chart-strip-bar-percentage'].includes(\n customData.type\n )\n ? labels.map(label => formatValue(valuePercentages[label]?.toFixed(2) || 0)) // 使用百分比数据\n : labels.map(label => formatValue(valueCounts[label] || 0))\n\n //组合图\n let type = customData.type\n let yAxisPos = 'left'\n if (type == ChartType['chartCombination']) {\n type = customData?.yAxisFieldConfig?.chartType ?? ChartType['ChartBar']\n } else {\n yAxisPos = customData?.yAxisFieldConfig?.yAxisPos ?? 'left'\n }\n\n let seriesItem = getSerie({\n type: customData.type,\n data,\n label,\n name:\n customData.yAxis === 'recordTotal'\n ? t('pb.statisticsText')\n : getFieldLabel(customData?.yAxisField),\n isGroup: customData?.isGroup,\n groupField: customData?.groupField,\n labels,\n })\n\n seriesItem.yAxisIndex = yAxisPos == 'left' ? 0 : 1\n series.push(seriesItem)\n }\n\n // misc\n const grids = getGrid({ series, chartConfig, width, customeStyle })\n const isShowLegend = customData?.chartOptions?.includes('legend')\n\n let isLeftYAxisShow = series.some(item => item?.yAxisIndex == 0)\n let isRightYAxisShow = series.some(item => item?.yAxisIndex == 1)\n let yAxisConfig = {\n ...chartConfig.yAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n hideOverlap: true,\n ...chartConfig.yAxis?.axisLabel,\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n }\n\n const options: EChartsOption = {\n legend: {\n type: 'scroll',\n left: 'center',\n right: 'center',\n top: '0',\n show: isShowLegend,\n itemWidth: 12,\n itemHeight: 12,\n data: series?.map((item: any) => item?.name || '') || [],\n },\n grid: {\n top: grids.top,\n left: grids.left,\n right: grids.right,\n bottom: grids.bottom,\n },\n graphic: {\n elements: [\n {\n type: 'text',\n left: 'center',\n bottom: '10px',\n style: {\n text: customeStyle?.xtitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n },\n {\n type: 'text',\n left: '10px',\n top: 'center',\n style: {\n text: customeStyle?.ytitle || '',\n fill: '#333', // 文本颜色\n fontSize: 12,\n fontWeight: 'bold',\n },\n rotation: Math.PI / 2,\n },\n ],\n },\n xAxis: {\n ...chartConfig.xAxis,\n axisTick: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLine: {\n show: customData?.chartOptions?.includes('axis'),\n },\n axisLabel: {\n show: customData?.chartOptions?.includes('label'),\n rotate: grids.axisLabelRotate, // 使标签倾斜,调整为合适的角度\n interval: 'auto', // 自动隐藏\n formatter: (value: string) => {\n return value.length > 15 ? `${value.slice(0, 15)}...` : value // 截断并添加 \"...\"\n },\n ...(chartConfig.xAxis?.axisLabel ?? {}),\n },\n splitLine: {\n show: customData?.chartOptions?.includes('splitLine'), // 不显示x轴网格线\n },\n },\n yAxis: [\n {\n show: isLeftYAxisShow,\n ...yAxisConfig,\n },\n {\n show: isRightYAxisShow,\n ...yAxisConfig,\n },\n ],\n series: series,\n tooltip: {\n trigger: 'item', // 触发方式:鼠标悬浮在坐标轴上\n axisPointer: {\n type: 'shadow', // 阴影指示器,鼠标悬停时显示柱状图的阴影\n },\n // className: 'tooltipcls',\n // textStyle: {\n // width: 100,\n // overflow: 'hidden',\n // // overflow: 'break',\n // // ov: 'breakAll',\n // },\n appendTo: 'body',\n },\n }\n\n return options\n }\n\n return getChartOptions(chartData)\n } else {\n return null\n }\n }, [\n customData?.sortField,\n customData?.sortOrder,\n customData?.type,\n customData?.chartOptions,\n customData?.timeGroupInterval,\n customData?.groupFieldConfig,\n customData?.yAxisFieldConfig,\n customData?.displayRange,\n // customData,\n customeStyle,\n chartData,\n width,\n height,\n fieldOptions,\n ])\n\n /* ============================== split =============================== */\n const echartRef = useRef<any>()\n const containerRef = useRef<HTMLDivElement>(null)\n const size = useSize(containerRef)\n\n useEffect(() => {\n if (!!size) {\n echartRef?.current?.resize()\n }\n }, [size])\n\n const isLoading = loading\n const isEmpyt = !loading && !chartOptions\n const isOk = !isLoading && !!chartOptions\n return (\n <div style={{ width: '100%', height: '100%' }} ref={containerRef}>\n {isLoading && (\n <Spin\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n spinning={loading}\n />\n )}\n {isEmpyt && <Empty />}\n {isOk && <BaseChart echartRef={echartRef} options={chartOptions ?? {}} />}\n </div>\n )\n}\n\nexport default React.memo(ChartModule)\n"],"names":["matchGlobalFilterCondition","_a","chartData","key","label","_b","BaseChart"],"mappings":";;;;;;;;;;;;;AA+BA,MAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,SAAS;AACX,MAAM;AACJ,QAAM,EAAE,YAAY,sBAAsB,IAAI,cAAc;AAGxD,MAAA,6BAA6B,QAAQ,MAAM;AAC7C,QAAIA,8BAA6B,+DAAuB;AAAA,MACtD,CAAA,UAAQ,6BAAM,mBAAiB,yCAAY;AAAA;AAEtCA,WAAAA;AAAAA,EACN,GAAA,CAAC,uBAAuB,yCAAY,YAAY,CAAC;AAEpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAc;AAChD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAc;AAEtC,QAAA,iBAAiB,cAAc,YAAY;;AAC/C,iBAAa,CAAA,CAAE;AACf,QAAI,YAAY;AAEd,iBAAW,IAAI;AACf,UAAI,cAAc;AAClB,YAAM,iBAAgB,yCAAY,WAAU,SAAS,QAAQ,yCAAY;AACzE,YAAM,iBAAgB,yCAAY,gBAAe,SAAS,QAAQ,yCAAY;AAE1E,UAAA,CAAC,WAAW,SAAS;AACnB,YAAA,WAAW,UAAU,eAAe;AACtC,yBAAe,UAAU,aAAa;AAAA,QAAA;AAGxC,YAAI,WAAW,UAAU,iBAAgB,yCAAY,aAAY;AAC/D,yBAAe,UAAU,aAAa,IAAI,yCAAY,UAAU,IAAI,yCAAY,cAAc;AAAA,QAAA;AAAA,MAChG,OACK;AACD,YAAA,WAAW,UAAU,eAAe;AACvB,yBAAA,UAAU,aAAa,IAAI,aAAa;AAAA,QAAA;AAEzD,YAAI,WAAW,UAAU,iBAAgB,yCAAY,aAAY;AAChD,yBAAA,UAAU,aAAa,IAAI,aAAa,IAAI,yCAAY,UAAU,IAAI,yCAAY,cAAc;AAAA,QAAA;AAAA,MACjH;AAIF,UAAI,qBAAqB,CAAC;AAC1B,aAAK,8EAA4B,kBAA5B,mBAA2C,WAAU,KAAK,GAAG;AAChE,2BAAmB,KAAK,0BAA0B;AAAA,MAAA;AAEpD,aAAK,oDAAY,kBAAZ,mBAA2B,kBAA3B,mBAA0C,WAAU,KAAK,GAAG;AAC5C,2BAAA,KAAK,yCAAY,aAAa;AAAA,MAAA;AAE/C,UAAA,mBAAmB,SAAS,GAAG;AAC7B,YAAA,SAAS,yBAAyB,kBAAsC;AAC5E,uBAAe,CAAC,CAAC,SAAS,IAAI,MAAM,KAAK;AAAA,MAAA;AAG3C,UAAI,yCAAY,cAAc;AACZ,uDAAA;AAAA,UACd,IAAI,yCAAY;AAAA,UAChB,OAAO;AAAA,QAAA,GAEN,KAAK,CAAC,QAAa;AACd,cAAA,CAAC,IAAI,SAAS;AACR,oBAAA,MAAM,IAAI,OAAO;AACzB;AAAA,UAAA;AAGF,uBAAa,IAAI,IAAI;AAAA,QAAA,GAEtB,QAAQ,MAAM;AACb,qBAAW,KAAK;AAAA,QAAA;AAAA,MACjB;AAAA,IACL,OACK;AACL,mBAAa,CAAA,CAAE;AAAA,IAAA;AAAA,EACjB,CACD;AAED;AAAA,IACE,MAAM;AACJ,UAAI,YAAY;AACC,uBAAA;AAAA,MAAA;AAAA,IAEnB;AAAA,IACA;AAAA,MACE,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ,yCAAY;AAAA,MACZ;AAAA,IACF;AAAA,IACA,EAAE,MAAM,GAAG;AAAA,EACb;AAGM,QAAA,eAAe,QAAQ,MAAM;;AAC7B,QAAA,OAAM,oDAAY,eAAZ,mBAAwB,KAAK,UAAQ,KAAK,WAAU,yCAAY,mBAAhE,mBAA+E;AAClF,WAAA;AAAA,EACN,GAAA,CAAC,YAAY,yCAAY,YAAY,CAAC;AAEnC,QAAA,eAAe,QAAQ,MAAM;AACjC,QAAI,cAAc,aAAa,WAAW,QAAQ,UAAU,SAAS,GAAG;AAChE,YAAA,kBAAkB,CAAC,eAAoB;;AAC3C,cAAM,cAAc,CAAC;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,QAAA,MAKI;AACJ,iBAAO,kBAAkB;AAAA,YACvB;AAAA,YACA,KAAK,KAAK,KAAK;AAAA,YACf;AAAA,YACA,UAAU,yCAAY;AAAA,YACtB;AAAA,UAAA,CACD;AAAA,QACH;AACM,cAAA,gBAAgB,CAAC,UAAkB;AACvC,gBAAM,YAAY,6CAAc,KAAK,CAAQ,SAAA,KAAK,UAAU;AAC5D,iBAAO,uCAAW;AAAA,QACpB;AAEM,cAAA,cAAc,CAAC,cAAsB;;AACzC,mBAAOC,MAAA,6CAAc,KAAK,CAAA,SAAQ,KAAK,UAAU,eAA1C,gBAAAA,IAAsD,UAAS;AAAA,QACxE;AAEA,cAAM,UAAU;AAAA,UACd,MAAM;AAAA;AAAA,QACR;AACA,cAAM,gBACJ,QAAQ,yCAAY,KAA6B,MAAK,yCAAY;AACpE,cAAM,gBACJ,QAAQ,yCAAY,UAAkC,MAAK,yCAAY;AAGrE,YAAA,YAAY,QAAQ,YAAY,CAAQ,SAAA;AAC1C,gBAAM,WAAW,YAAY;AAAA,YAC3B;AAAA,YACA,OAAO;AAAA,YACP,mBAAmB,yCAAY;AAAA,UAAA,CAChC;AACM,iBAAA;AAAA,QAAA,CACR;AACD,YAAIC,aAAY,OAAO,KAAK,SAAS,EAAE,IAAI,CAAO,QAAA;AAC5C,cAAA,YAAY,UAAU,GAAG;AAC7B,cAAI,WAAW,UAAU,OAAO,CAAC,KAAK,SAAS;AAC7C,mBAAO,KAAK,IAAI,EAAE,QAAQ,CAAK,MAAA;AACzB,kBAAA,QAAQ,KAAK,CAAC;AACd,kBAAA,SAAS,KAAK,GAAG;AACf,oBAAA,CAAC,KAAI,2BAAM,MAAK,IAAI,CAAC,IAAI,QAAQ;AAAA,cAAA,OAChC;AACL,oBAAI,CAAC,IAAI;AAAA,cAAA;AAAA,YACX,CACD;AACM,mBAAA;AAAA,UACT,GAAG,EAAE;AACE,iBAAA;AAAA,QAAA,CACR;AAEK,cAAA,iCAAiB,IAAY;AAC7B,cAAA,sCAAsB,IAAY;AACxC,cAAM,cAAsD,CAAC;AAC7D,cAAM,cAAsC,CAAC;AAE7CA,mBAAU,QAAQ,CAAC,SAAc;AAC/B,gBAAM,WAAW,YAAY;AAAA,YAC3B;AAAA,YACA,OAAO;AAAA,YACP,mBAAmB,yCAAY;AAAA,UAAA,CAChC;AACK,gBAAA,MACJ,WAAW,UAAU,gBAAgB,6BAAM,QAAQ,KAAK,yCAAY,cAAc,KAAK;AAEnF,gBAAA,MAAM,YAAY,EAAE,SAAS;AACnC,sBAAY,GAAG,IAAI;AAEf,eAAA,yCAAY,aAAW,yCAAY,aAAY;AACjD,kBAAM,gBAAgB,YAAY;AAAA,cAChC;AAAA,cACA,OAAO;AAAA,YAAA,CACR;AAEKC,kBAAAA,OAAM,YAAY,EAAE,SAAS;AAEnC,4BAAgB,IAAI,aAAa;AAE7B,gBAAA,CAAC,YAAY,aAAa,GAAG;AACnB,0BAAA,aAAa,IAAI,CAAC;AAAA,YAAA;AAEpB,wBAAA,aAAa,EAAEA,IAAG,IAAI;AAAA,UAAA;AAAA,QACpC,CACD;AAGD,cAAM,mBAA2C,CAAC;AAClD,cAAM,wBAAgE,CAAC;AACnE,aAAA,yCAAY,aAAW,yCAAY,aAAY;AACjD,gBAAM,mBAA2C,CAAC;AAElD,iBAAO,KAAK,WAAW,EAAE,QAAQ,CAAiB,kBAAA;AACzC,mBAAA,QAAQ,YAAY,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AACjE,+BAAiB,GAAG,KAAK,iBAAiB,GAAG,KAAK,KAAK;AAAA,YAAA,CACxD;AAAA,UAAA,CACF;AAED,iBAAO,KAAK,WAAW,EAAE,QAAQ,CAAiB,kBAAA;AAC1B,kCAAA,aAAa,IAAI,CAAC;AACjC,mBAAA,QAAQ,YAAY,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AAC3D,oBAAA,QAAQ,iBAAiB,GAAG,KAAK;AACvC,oCAAsB,aAAa,EAAE,GAAG,IAAK,MAAM,QAAS;AAAA,YAAA,CAC7D;AAAA,UAAA,CACF;AAAA,QAAA,OACI;AACE,iBAAA,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AAClD,kBAAM,QAAQ,OAAO;AACJ,6BAAA,GAAG,IAAK,MAAM,QAAS;AAAA,UAAA,CACzC;AAAA,QAAA;AAIC,YAAA,aAAY,yCAAY,cAAa;AACrC,YAAA,aAAY,yCAAY,cAAa;AAEnC,cAAA,kBAAkB,CAAC,GAAGD,UAAS,EAAE,KAAK,CAAC,GAAG,MAAM;AACpD,cAAI,MAAM;AAEV,kBAAQ,WAAW;AAAA,YACjB,KAAK;AACH,qBAAO,YAAY;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,mBAAmB,yCAAY;AAAA,cAAA,CAChC;AACD,qBAAO,YAAY;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,mBAAmB,yCAAY;AAAA,cAAA,CAChC;AACD;AAAA,YAEF,KAAK;AAED,qBAAA,WAAW,UAAU,gBAAgB,uBAAG,QAAQ,EAAE,yCAAY,cAAc,KAAK;AAEjF,qBAAA,WAAW,UAAU,gBAAgB,uBAAG,QAAQ,EAAE,yCAAY,cAAc,KAAK;AACnF;AAAA,UAGA;AAGE,gBAAA,kBAAkB,cAAc,QAAQ,IAAI;AAC9C,cAAA,OAAO,KAAM,QAAO,IAAI;AACxB,cAAA,OAAO,KAAM,QAAO,KAAK;AACtB,iBAAA;AAAA,QAAA,CACR;AAED,cAAM,mBAAmB,gBAAgB;AAAA,UAAI,UAC3C,YAAY;AAAA,YACV;AAAA,YACA,OAAO;AAAA,YACP,mBAAmB,yCAAY;AAAA,UAChC,CAAA;AAAA,QACH;AACA,mBAAW,MAAM;AACjB,yBAAiB,QAAQ,CAAA,QAAO,WAAW,IAAI,GAAG,CAAC;AAIjD,YAAA,CAAC,YAAY,yCAAY,KAAK,KAC9B,WAAW,iBAAiB,SAC5B,CAAC,CAAC,WAAW,cACb;AAEI,cAAA,0BAA0B,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM;AAClE,mBAAO,YAAY,CAAC,IAAI,YAAY,CAAC;AAAA,UAAA,CACtC;AAGD,cAAI,iBAA2B,CAAC;AAChC,cAAI,CAAC,KAAK,KAAK,IAAI,WAAW,aAAa,MAAM,GAAG;AACpD,cAAI,QAAQ,OAAO;AACjB,6BAAiB,wBAAwB,MAAM,GAAG,OAAO,KAAK,CAAC;AAAA,UAAA,OAC1D;AACL,6BAAiB,wBAAwB,MAAM,CAAC,OAAO,KAAK,CAAC;AAAA,UAAA;AAI/D,gBAAM,KAAK,UAAU,EAAE,QAAQ,CAAQ,SAAA;AACrC,gBAAI,CAAC,eAAe,SAAS,IAAI,GAAG;AAClC,yBAAW,OAAO,IAAI;AAAA,YAAA;AAEjB,mBAAA;AAAA,UAAA,CACR;AAAA,QAAA;AAIH,cAAM,YAAoC,CAAQ,SAAA;AAC5C,eAAA,yCAAY,aAAW,yCAAY,aAAY;AACjD,oBAAO,6BAAM,UAAS,IAAI,KAAK,GAAG,6BAAM,KAAK;AAAA,UAAA,OACxC;AACE,mBAAA,GAAG,6BAAM,KAAK;AAAA,UAAA;AAAA,QAEzB;AACA,cAAM,QAAQ;AAAA,UACZ,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,UACzC,UAAU;AAAA,UACV;AAAA,QACF;AACM,cAAA,SAAS,MAAM,KAAK,UAAU;AAC9B,cAAA,cAAc,MAAM,KAAK,eAAe;AAG9C,cAAM,SAAS,CAAC;AAChB,cAAM,cAAc,eAAe;AAAA,UACjC,MAAM,yCAAY;AAAA,UAClB,YAAY;AAAA,QAAA,CACb;AAED,cAAM,cAAc,CAAK,MAAA;AACnB,cAAA,SAAS,CAAC,GAAG;AACf,mBAAO,KAAK,MAAM,IAAI,GAAG,IAAI;AAAA,UAAA,OACxB;AACE,mBAAA;AAAA,UAAA;AAAA,QAEX;AAEI,aAAA,yCAAY,aAAW,yCAAY,aAAY;AACjD,sBAAY,QAAQ,CAAiB,kBAAA;;AACnC,kBAAM,OAAO,CAAC,wBAAwB,4BAA4B,EAAE;AAAA,cAClE,WAAW;AAAA,YAAA,IAET,OAAO,IAAI,CAAAE,WAAS,YAAY,sBAAsB,aAAa,EAAEA,MAAK,KAAK,CAAC,CAAC,IACjF,OAAO,IAAI,CAAAA,WAAS,YAAY,YAAY,aAAa,EAAEA,MAAK,KAAK,CAAC,CAAC;AAE3E,gBAAI,OAAO,WAAW;AACtB,gBAAI,WAAW;AACX,gBAAA,QAAQ,UAAU,kBAAkB,GAAG;AACzC,kBAAI,gCAA+B,yCAAY,qBAAoB,CAAI,GAAA;AAAA,gBACrE,UACE,YAAY;AAAA,kBACV,MAAM;AAAA,oBACJ,CAAC,aAAa,GAAG,6BAAM;AAAA,kBACzB;AAAA,kBACA,OAAO;AAAA,gBAAA,CACR,KAAK;AAAA,cACV;AACA,uBAAOH,MAAA,2EAA6B,WAA7B,gBAAAA,IAAqC,cAAa,UAAU,UAAU;AAClE,2BAAAI,MAAA,2EAA6B,WAA7B,gBAAAA,IAAqC,aAAY;AAAA,YAAA;AAG9D,gBAAI,aAAa,SAAS;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN,SAAS,yCAAY;AAAA,cACrB,YAAY,yCAAY;AAAA,cACxB;AAAA,YAAA,CACD;AAEU,uBAAA,aAAa,YAAY,SAAS,IAAI;AACjD,mBAAO,KAAK,UAAU;AAAA,UAAA,CACvB;AAAA,QAAA,OACI;AACL,gBAAM,OAAO,CAAC,wBAAwB,4BAA4B,EAAE;AAAA,YAClE,WAAW;AAAA,UAAA,IAET,OAAO,IAAI,CAAAD,WAAS;;AAAA,iCAAYH,MAAA,iBAAiBG,MAAK,MAAtB,gBAAAH,IAAyB,QAAQ,OAAM,CAAC;AAAA,WAAC,IACzE,OAAO,IAAI,CAAAG,WAAS,YAAY,YAAYA,MAAK,KAAK,CAAC,CAAC;AAG5D,cAAI,OAAO,WAAW;AACtB,cAAI,WAAW;AACX,cAAA,QAAQ,UAAU,kBAAkB,GAAG;AACzC,qBAAO,8CAAY,qBAAZ,mBAA8B,cAAa,UAAU,UAAU;AAAA,UAAA,OACjE;AACM,yBAAA,8CAAY,qBAAZ,mBAA8B,aAAY;AAAA,UAAA;AAGvD,cAAI,aAAa,SAAS;AAAA,YACxB,MAAM,WAAW;AAAA,YACjB;AAAA,YACA;AAAA,YACA,MACE,WAAW,UAAU,gBACjB,EAAE,mBAAmB,IACrB,cAAc,yCAAY,UAAU;AAAA,YAC1C,SAAS,yCAAY;AAAA,YACrB,YAAY,yCAAY;AAAA,YACxB;AAAA,UAAA,CACD;AAEU,qBAAA,aAAa,YAAY,SAAS,IAAI;AACjD,iBAAO,KAAK,UAAU;AAAA,QAAA;AAIxB,cAAM,QAAQ,QAAQ,EAAE,QAAQ,aAAa,OAAO,cAAc;AAClE,cAAM,gBAAe,8CAAY,iBAAZ,mBAA0B,SAAS;AAExD,YAAI,kBAAkB,OAAO,KAAK,CAAQ,UAAA,6BAAM,eAAc,CAAC;AAC/D,YAAI,mBAAmB,OAAO,KAAK,CAAQ,UAAA,6BAAM,eAAc,CAAC;AAChE,YAAI,cAAc;AAAA,UAChB,GAAG,YAAY;AAAA,UACf,UAAU;AAAA,YACR,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,UAC3C;AAAA,UACA,UAAU;AAAA,YACR,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,UAC3C;AAAA,UACA,WAAW;AAAA,YACT,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,YACzC,WAAW,CAAC,UAAkB;AACrB,qBAAA,MAAM,SAAS,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ;AAAA,YAC1D;AAAA,YACA,aAAa;AAAA,YACb,IAAG,iBAAY,UAAZ,mBAAmB;AAAA,UACxB;AAAA,UACA,WAAW;AAAA,YACT,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA;AAAA,UAAW;AAAA,QAExD;AAEA,cAAM,UAAyB;AAAA,UAC7B,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,YACP,KAAK;AAAA,YACL,MAAM;AAAA,YACN,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,OAAM,iCAAQ,IAAI,CAAC,UAAc,6BAAM,SAAQ,QAAO,CAAA;AAAA,UACxD;AAAA,UACA,MAAM;AAAA,YACJ,KAAK,MAAM;AAAA,YACX,MAAM,MAAM;AAAA,YACZ,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM;AAAA,UAChB;AAAA,UACA,SAAS;AAAA,YACP,UAAU;AAAA,cACR;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,OAAO;AAAA,kBACL,OAAM,6CAAc,WAAU;AAAA,kBAC9B,MAAM;AAAA;AAAA,kBACN,UAAU;AAAA,kBACV,YAAY;AAAA,gBAAA;AAAA,cAEhB;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,KAAK;AAAA,gBACL,OAAO;AAAA,kBACL,OAAM,6CAAc,WAAU;AAAA,kBAC9B,MAAM;AAAA;AAAA,kBACN,UAAU;AAAA,kBACV,YAAY;AAAA,gBACd;AAAA,gBACA,UAAU,KAAK,KAAK;AAAA,cAAA;AAAA,YACtB;AAAA,UAEJ;AAAA,UACA,OAAO;AAAA,YACL,GAAG,YAAY;AAAA,YACf,UAAU;AAAA,cACR,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,YAC3C;AAAA,YACA,UAAU;AAAA,cACR,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,YAC3C;AAAA,YACA,WAAW;AAAA,cACT,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA,cACzC,QAAQ,MAAM;AAAA;AAAA,cACd,UAAU;AAAA;AAAA,cACV,WAAW,CAAC,UAAkB;AACrB,uBAAA,MAAM,SAAS,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ;AAAA,cAC1D;AAAA,cACA,KAAI,iBAAY,UAAZ,mBAAmB,cAAa,CAAA;AAAA,YACtC;AAAA,YACA,WAAW;AAAA,cACT,OAAM,8CAAY,iBAAZ,mBAA0B,SAAS;AAAA;AAAA,YAAW;AAAA,UAExD;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,GAAG;AAAA,YACL;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,GAAG;AAAA,YAAA;AAAA,UAEP;AAAA,UACA;AAAA,UACA,SAAS;AAAA,YACP,SAAS;AAAA;AAAA,YACT,aAAa;AAAA,cACX,MAAM;AAAA;AAAA,YACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQA,UAAU;AAAA,UAAA;AAAA,QAEd;AAEO,eAAA;AAAA,MACT;AAEA,aAAO,gBAAgB,SAAS;AAAA,IAAA,OAC3B;AACE,aAAA;AAAA,IAAA;AAAA,EACT,GACC;AAAA,IACD,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA,IACZ,yCAAY;AAAA;AAAA,IAEZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAGD,QAAM,YAAY,OAAY;AACxB,QAAA,eAAe,OAAuB,IAAI;AAC1C,QAAA,OAAO,QAAQ,YAAY;AAEjC,YAAU,MAAM;;AACV,QAAA,CAAC,CAAC,MAAM;AACV,mDAAW,YAAX,mBAAoB;AAAA,IAAO;AAAA,EAC7B,GACC,CAAC,IAAI,CAAC;AAET,QAAM,YAAY;AACZ,QAAA,UAAU,CAAC,WAAW,CAAC;AAC7B,QAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3B,SAAA,qBAAC,OAAI,EAAA,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAU,GAAA,KAAK,cACjD,UAAA;AAAA,IACC,aAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,YAAY;AAAA,QACd;AAAA,QACA,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAED,+BAAY,OAAM,EAAA;AAAA,IAClB,QAAS,oBAAAE,OAAA,EAAU,WAAsB,SAAS,gBAAgB,GAAI,CAAA;AAAA,EAAA,GACzE;AAEJ;AAEA,MAAA,gBAAe,MAAM,KAAK,WAAW;"}
@@ -1,2 +1,3 @@
1
1
  import { ConditionBlock } from '../add-module-modal/components/condition-modal/interface';
2
+ export declare const filterConditionBlockByDisabledField: (filterData: ConditionBlock[], dataSourceId: string) => ConditionBlock[];
2
3
  export declare const mapConditionsToPostgrest: (filterData: ConditionBlock[]) => string;
@@ -1,5 +1,6 @@
1
1
  import dayjs from "dayjs";
2
2
  import { isArray, isNil } from "lodash-es";
3
+ import "../../context.js";
3
4
  const mapConditionsToPostgrest = (filterData) => {
4
5
  let DSLTree = {
5
6
  join: "and",
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../packages/dashboard-workbench/components/module-content/utils.ts"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs'\nimport { isArray, isNil } from 'lodash-es'\nimport {\n ConditionBlock,\n ConditionListItem,\n} from '../add-module-modal/components/condition-modal/interface'\n\ntype DSLItem = {\n field: string\n value: string\n operator: string\n}\ntype DSLGroup = {\n join: 'and' | 'or'\n children: (DSLGroup | DSLItem)[]\n}\n\nexport const mapConditionsToPostgrest = (filterData: ConditionBlock[]): string => {\n let DSLTree: DSLGroup = {\n join: 'and',\n children: [],\n }\n\n for (const conditionBlock of filterData) {\n let children = (conditionBlock.conditionList ?? [])\n .map(condition => {\n let ret: DSLItem | DSLGroup | null = null\n ret = conditionListItem2DSL(condition)\n return ret\n })\n .filter(v => !!v) as unknown as (DSLItem | DSLGroup)[]\n if (children.length > 0) {\n DSLTree.children.push({\n join: conditionBlock.conditionType === 'all' ? 'and' : 'or',\n children: children,\n })\n }\n }\n\n // 转成字符串\n function loop(node: DSLGroup, deep = 1, parentJoin: 'and' | 'or') {\n //跳过group里面只嵌套单个group的case 减少层级\n let shoudIgnore = (node.children ?? []).length === 1 && (node.children?.[0] as DSLGroup)?.join\n if (shoudIgnore) {\n return loop(node.children[0] as DSLGroup, deep, parentJoin)\n }\n\n let group = node as DSLGroup\n let shouldMerge = group.join === parentJoin\n let isTop = deep === 1\n let filedUnit = isTop && shouldMerge ? '=' : '.'\n let joinUnit = isTop && shouldMerge ? '&' : ','\n\n let strList = group.children.map(child => {\n if ((child as DSLGroup).join) {\n return loop(child as DSLGroup, !shouldMerge ? deep + 1 : deep, group.join)\n } else {\n let value = `${encodeURIComponent((child as DSLItem).value)}`\n return `${(child as DSLItem).field}${filedUnit}${(child as DSLItem).operator}.${value}`\n }\n })\n let ret = (\n !shouldMerge\n ? `${group?.join}${deep > 1 ? '' : '='}(${strList.join(joinUnit)})`\n : strList.join(joinUnit)\n ) as string\n return ret\n }\n\n let str = loop(DSLTree, 1, 'and')\n return str\n}\n\nlet mapping = {\n '=': 'eq',\n '!=': 'neq',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '=<': 'lte',\n ['include']: 'in',\n ['notinclude']: 'not.in',\n // ['contain']: 'gte,lte', //这个是group的\n ['before']: 'lt',\n ['after']: 'gt',\n // ['null']: 'is.null',\n // ['notnull']: 'not.is.null',\n ['null']: 'is', //这个特殊处理\n ['notnull']: 'not.is', //这个特殊处理\n}\n\nconst getEnumValue = (val: any) => {\n // 懒加载的时候 item :{label: \"xxx\", value: \"xxx\"}\n // 非懒加载的时候 item: \"xxx\"\n return (val as any)?.value ? (val as any)?.value : val\n}\n\nconst conditionListItem2DSL = (condition: ConditionListItem) => {\n const { field, condition: cond, val, val2, rdate, type } = condition\n\n //value 是懒加载时候的数据结构\n let value: any\n if (type === 'enum') {\n let isMultiple = ['include', 'notinclude'].includes(cond)\n if (isMultiple) {\n value = (isArray(val) ? val : [])\n .map(val => {\n return getEnumValue(val)\n })\n .filter(v => !!v)\n } else {\n value = !isArray(val) ? getEnumValue(val) : ''\n }\n } else {\n value = (val as any)?.value ? (val as any)?.value : val // 为啥需要?.value\n }\n\n let ret: DSLItem | DSLGroup | null = null\n switch (cond) {\n case '=':\n {\n if (type !== 'timestamp') {\n if (isInVaildValue(value)) {\n return null\n }\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n } else {\n if (isInVaildValue(rdate)) {\n return null\n }\n ret = getEqualTimeDSL({ rdate: rdate!, field, value })\n }\n }\n break\n case '>':\n case '<':\n {\n if (type === 'timestamp' && rdate === 'today') {\n value = dayjs().format('YYYY-MM-DD')\n } else if (type === 'timestamp' && rdate === 'yesterday') {\n value = dayjs().subtract(1, 'day').format('YYYY-MM-DD')\n }\n if (isInVaildValue(value)) {\n return null\n }\n\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n break\n case 'contain':\n {\n if (isInVaildValue(value) || isInVaildValue(val2)) {\n return null\n }\n ret = {\n join: 'and',\n children: [\n {\n field,\n value: `${value}`,\n operator: 'gte',\n },\n {\n field,\n value: `${val2}`,\n operator: 'lte',\n },\n ],\n } as DSLGroup\n }\n break\n case 'null':\n case 'notnull':\n {\n ret = {\n field,\n value: 'null',\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n break\n case 'include':\n case 'notinclude':\n {\n // 枚举特殊处理\n if (condition.type === 'enum') {\n if (isInVaildValue(value?.[0]) || value.length === 0) {\n return null\n }\n\n if (value.length === 1) {\n ret = {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n } else {\n ret = {\n join: cond === 'include' ? 'or' : 'and',\n children: value.map((value: string) => {\n return {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n }\n }),\n } as DSLGroup\n }\n\n return ret\n } else {\n if (isInVaildValue(value)) {\n return null\n }\n\n ret = {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n }\n break\n default: {\n if (isInVaildValue(value)) {\n return null\n }\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n }\n\n return ret\n}\n\nconst getEqualTimeDSL = (props: { rdate: string; field: string; value: string }) => {\n const { rdate, field, value } = props\n switch (rdate) {\n case 'exactdate':\n if (isInVaildValue(value)) {\n return null\n }\n return {\n field,\n value,\n operator: mapping['='],\n } as DSLItem\n case 'today':\n return {\n field,\n value: dayjs().format('YYYY-MM-DD'),\n operator: mapping['='],\n } as DSLItem\n case 'yesterday':\n return {\n field,\n value: dayjs().subtract(1, 'day').format('YYYY-MM-DD'),\n operator: mapping['='],\n } as DSLItem\n case 'thisweek': {\n const startOfLastWeek = dayjs().startOf('week').add(1, 'day').format('YYYY-MM-DD')\n const endOfLastWeek = dayjs().endOf('week').add(1, 'day').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastWeek,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastWeek,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'lastweek': {\n const startOfLastWeek = dayjs()\n .subtract(1, 'week')\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')\n const endOfLastWeek = dayjs()\n .subtract(1, 'week')\n .endOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastWeek,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastWeek,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'thismonth': {\n const startOfThisMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n const endOfThisMonth = dayjs().endOf('month').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfThisMonth,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfThisMonth,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n case 'lastmonth': {\n const startOfLastMonth = dayjs().subtract(1, 'month').startOf('month').format('YYYY-MM-DD')\n const endOfLastMonth = dayjs().subtract(1, 'month').endOf('month').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastMonth,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastMonth,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'last7days': {\n const startOfLast7Days = dayjs().subtract(7, 'days').format('YYYY-MM-DD')\n const endOfLast7Days = dayjs().format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLast7Days,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLast7Days,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n case 'last30days': {\n const startOfLast30Days = dayjs().subtract(30, 'days').format('YYYY-MM-DD')\n const endOfLast30Days = dayjs().format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLast30Days,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLast30Days,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'thisyear': {\n const start = dayjs().startOf('year').format('YYYY-MM-DD')\n const end = dayjs().endOf('year').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: start,\n operator: mapping['>='],\n },\n {\n field,\n value: end,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'lastyear': {\n const start = dayjs().subtract(1, 'year').startOf('year').format('YYYY-MM-DD')\n const end = dayjs().subtract(1, 'year').endOf('year').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: start,\n operator: mapping['>='],\n },\n {\n field,\n value: end,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n default:\n return null // 对于未支持的 rdate 值返回空字符串\n }\n}\n\nconst isInVaildValue = (date: string | number | Dayjs | undefined) => {\n return isNil(date) || date === ''\n}\n"],"names":["val","value"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../packages/dashboard-workbench/components/module-content/utils.ts"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs'\nimport { isArray, isNil } from 'lodash-es'\nimport { getContextRef } from '@platox/pivot-table/context'\nimport {\n ConditionBlock,\n ConditionListItem,\n} from '../add-module-modal/components/condition-modal/interface'\n\ntype DSLItem = {\n field: string\n value: string\n operator: string\n}\ntype DSLGroup = {\n join: 'and' | 'or'\n children: (DSLGroup | DSLItem)[]\n}\n\nexport const filterConditionBlockByDisabledField = (\n filterData: ConditionBlock[],\n dataSourceId: string\n) => {\n let contextSnapshot = getContextRef()\n console.log('contextSnapshot', contextSnapshot, filterData)\n let fieldList =\n (contextSnapshot?.globalData?.sourceData ?? []).find(v => v.value == dataSourceId)?.fields ?? []\n\n let newFilterData: ConditionBlock[] = [...filterData]\n .map(v => {\n let conditionList = v.conditionList.filter(v => {\n let match = fieldList.find(_v => _v.value === v.field)\n return match?.disabled ?? false\n })\n return {\n ...v,\n conditionList,\n }\n })\n .filter(v => {\n return v.conditionList.length > 0\n })\n\n return newFilterData\n}\n\nexport const mapConditionsToPostgrest = (filterData: ConditionBlock[]): string => {\n let DSLTree: DSLGroup = {\n join: 'and',\n children: [],\n }\n\n for (const conditionBlock of filterData) {\n let children = (conditionBlock.conditionList ?? [])\n .map(condition => {\n let ret: DSLItem | DSLGroup | null = null\n ret = conditionListItem2DSL(condition)\n return ret\n })\n .filter(v => !!v) as unknown as (DSLItem | DSLGroup)[]\n if (children.length > 0) {\n DSLTree.children.push({\n join: conditionBlock.conditionType === 'all' ? 'and' : 'or',\n children: children,\n })\n }\n }\n\n // 转成字符串\n function loop(node: DSLGroup, deep = 1, parentJoin: 'and' | 'or') {\n //跳过group里面只嵌套单个group的case 减少层级\n let shoudIgnore = (node.children ?? []).length === 1 && (node.children?.[0] as DSLGroup)?.join\n if (shoudIgnore) {\n return loop(node.children[0] as DSLGroup, deep, parentJoin)\n }\n\n let group = node as DSLGroup\n let shouldMerge = group.join === parentJoin\n let isTop = deep === 1\n let filedUnit = isTop && shouldMerge ? '=' : '.'\n let joinUnit = isTop && shouldMerge ? '&' : ','\n\n let strList = group.children.map(child => {\n if ((child as DSLGroup).join) {\n return loop(child as DSLGroup, !shouldMerge ? deep + 1 : deep, group.join)\n } else {\n let value = `${encodeURIComponent((child as DSLItem).value)}`\n return `${(child as DSLItem).field}${filedUnit}${(child as DSLItem).operator}.${value}`\n }\n })\n let ret = (\n !shouldMerge\n ? `${group?.join}${deep > 1 ? '' : '='}(${strList.join(joinUnit)})`\n : strList.join(joinUnit)\n ) as string\n return ret\n }\n\n let str = loop(DSLTree, 1, 'and')\n return str\n}\n\nlet mapping = {\n '=': 'eq',\n '!=': 'neq',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '=<': 'lte',\n ['include']: 'in',\n ['notinclude']: 'not.in',\n // ['contain']: 'gte,lte', //这个是group的\n ['before']: 'lt',\n ['after']: 'gt',\n // ['null']: 'is.null',\n // ['notnull']: 'not.is.null',\n ['null']: 'is', //这个特殊处理\n ['notnull']: 'not.is', //这个特殊处理\n}\n\nconst getEnumValue = (val: any) => {\n // 懒加载的时候 item :{label: \"xxx\", value: \"xxx\"}\n // 非懒加载的时候 item: \"xxx\"\n return (val as any)?.value ? (val as any)?.value : val\n}\n\nconst conditionListItem2DSL = (condition: ConditionListItem) => {\n const { field, condition: cond, val, val2, rdate, type } = condition\n\n //value 是懒加载时候的数据结构\n let value: any\n if (type === 'enum') {\n let isMultiple = ['include', 'notinclude'].includes(cond)\n if (isMultiple) {\n value = (isArray(val) ? val : [])\n .map(val => {\n return getEnumValue(val)\n })\n .filter(v => !!v)\n } else {\n value = !isArray(val) ? getEnumValue(val) : ''\n }\n } else {\n value = (val as any)?.value ? (val as any)?.value : val // 为啥需要?.value\n }\n\n let ret: DSLItem | DSLGroup | null = null\n switch (cond) {\n case '=':\n {\n if (type !== 'timestamp') {\n if (isInVaildValue(value)) {\n return null\n }\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n } else {\n if (isInVaildValue(rdate)) {\n return null\n }\n ret = getEqualTimeDSL({ rdate: rdate!, field, value })\n }\n }\n break\n case '>':\n case '<':\n {\n if (type === 'timestamp' && rdate === 'today') {\n value = dayjs().format('YYYY-MM-DD')\n } else if (type === 'timestamp' && rdate === 'yesterday') {\n value = dayjs().subtract(1, 'day').format('YYYY-MM-DD')\n }\n if (isInVaildValue(value)) {\n return null\n }\n\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n break\n case 'contain':\n {\n if (isInVaildValue(value) || isInVaildValue(val2)) {\n return null\n }\n ret = {\n join: 'and',\n children: [\n {\n field,\n value: `${value}`,\n operator: 'gte',\n },\n {\n field,\n value: `${val2}`,\n operator: 'lte',\n },\n ],\n } as DSLGroup\n }\n break\n case 'null':\n case 'notnull':\n {\n ret = {\n field,\n value: 'null',\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n break\n case 'include':\n case 'notinclude':\n {\n // 枚举特殊处理\n if (condition.type === 'enum') {\n if (isInVaildValue(value?.[0]) || value.length === 0) {\n return null\n }\n\n if (value.length === 1) {\n ret = {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n } else {\n ret = {\n join: cond === 'include' ? 'or' : 'and',\n children: value.map((value: string) => {\n return {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n }\n }),\n } as DSLGroup\n }\n\n return ret\n } else {\n if (isInVaildValue(value)) {\n return null\n }\n\n ret = {\n field,\n value: `(${value})`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n }\n break\n default: {\n if (isInVaildValue(value)) {\n return null\n }\n ret = {\n field,\n value: `${value}`,\n operator: mapping[cond as keyof typeof mapping],\n } as DSLItem\n }\n }\n\n return ret\n}\n\nconst getEqualTimeDSL = (props: { rdate: string; field: string; value: string }) => {\n const { rdate, field, value } = props\n switch (rdate) {\n case 'exactdate':\n if (isInVaildValue(value)) {\n return null\n }\n return {\n field,\n value,\n operator: mapping['='],\n } as DSLItem\n case 'today':\n return {\n field,\n value: dayjs().format('YYYY-MM-DD'),\n operator: mapping['='],\n } as DSLItem\n case 'yesterday':\n return {\n field,\n value: dayjs().subtract(1, 'day').format('YYYY-MM-DD'),\n operator: mapping['='],\n } as DSLItem\n case 'thisweek': {\n const startOfLastWeek = dayjs().startOf('week').add(1, 'day').format('YYYY-MM-DD')\n const endOfLastWeek = dayjs().endOf('week').add(1, 'day').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastWeek,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastWeek,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'lastweek': {\n const startOfLastWeek = dayjs()\n .subtract(1, 'week')\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')\n const endOfLastWeek = dayjs()\n .subtract(1, 'week')\n .endOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastWeek,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastWeek,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'thismonth': {\n const startOfThisMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n const endOfThisMonth = dayjs().endOf('month').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfThisMonth,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfThisMonth,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n case 'lastmonth': {\n const startOfLastMonth = dayjs().subtract(1, 'month').startOf('month').format('YYYY-MM-DD')\n const endOfLastMonth = dayjs().subtract(1, 'month').endOf('month').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLastMonth,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLastMonth,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'last7days': {\n const startOfLast7Days = dayjs().subtract(7, 'days').format('YYYY-MM-DD')\n const endOfLast7Days = dayjs().format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLast7Days,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLast7Days,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n case 'last30days': {\n const startOfLast30Days = dayjs().subtract(30, 'days').format('YYYY-MM-DD')\n const endOfLast30Days = dayjs().format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: startOfLast30Days,\n operator: mapping['>='],\n },\n {\n field,\n value: endOfLast30Days,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'thisyear': {\n const start = dayjs().startOf('year').format('YYYY-MM-DD')\n const end = dayjs().endOf('year').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: start,\n operator: mapping['>='],\n },\n {\n field,\n value: end,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n case 'lastyear': {\n const start = dayjs().subtract(1, 'year').startOf('year').format('YYYY-MM-DD')\n const end = dayjs().subtract(1, 'year').endOf('year').format('YYYY-MM-DD')\n return {\n join: 'and',\n children: [\n {\n field,\n value: start,\n operator: mapping['>='],\n },\n {\n field,\n value: end,\n operator: mapping['=<'],\n },\n ],\n } as DSLGroup\n }\n\n default:\n return null // 对于未支持的 rdate 值返回空字符串\n }\n}\n\nconst isInVaildValue = (date: string | number | Dayjs | undefined) => {\n return isNil(date) || date === ''\n}\n"],"names":["val","value"],"mappings":"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"}
@@ -26,4 +26,6 @@ interface AppContextProps {
26
26
  }
27
27
  export declare const AppContext: React.Context<AppContextProps | undefined>;
28
28
  export declare const useAppContext: () => AppContextProps;
29
+ export declare const getContextRef: () => AppContextProps | undefined;
30
+ export declare const setContextRef: (contextData: AppContextProps | undefined) => void;
29
31
  export {};
@@ -1 +1 @@
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 formatCurrency: (val: number, decimalPlaces?: number) => string\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":";AAyBa,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;"}
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 formatCurrency: (val: number, decimalPlaces?: number) => string\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\n/// 存一份数据ref\nlet contextRef: AppContextProps | undefined = undefined\n\nexport const getContextRef = () => {\n return contextRef\n}\n\nexport const setContextRef = (contextData: AppContextProps | undefined) => {\n contextRef = contextData\n}\n"],"names":[],"mappings":";AAyBa,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;"}
@@ -445,19 +445,14 @@ const index = React.memo((props) => {
445
445
  valuePropName: "globalFilterCondition",
446
446
  trigger: "onGlobalFilterConditionChange"
447
447
  });
448
- return /* @__PURE__ */ jsx(
449
- AppContext.Provider,
450
- {
451
- value: {
452
- globalData,
453
- service,
454
- formatCurrency: props == null ? void 0 : props.formatCurrency,
455
- globalFilterCondition,
456
- setGlobalFilterCondition
457
- },
458
- children: /* @__PURE__ */ jsx(DashboardWorkbench, { ...props })
459
- }
460
- );
448
+ let contextData = {
449
+ globalData,
450
+ service,
451
+ formatCurrency: props == null ? void 0 : props.formatCurrency,
452
+ globalFilterCondition,
453
+ setGlobalFilterCondition
454
+ };
455
+ return /* @__PURE__ */ jsx(AppContext.Provider, { value: contextData, children: /* @__PURE__ */ jsx(DashboardWorkbench, { ...props }) });
461
456
  });
462
457
  export {
463
458
  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, { useEffect, 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 { 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 } 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\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 /* ============================== 滚动出阴影 =============================== */\n const ref = useRef(null)\n const scroll = useScroll(ref)\n const isShadowShow = (scroll?.top ?? 0) > 0\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 <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 </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\" ref={ref}>\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 containerPadding={[10, 0]}\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\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\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 return (\n <AppContext.Provider\n value={{\n globalData,\n service,\n formatCurrency: props?.formatCurrency,\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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"}
1
+ {"version":3,"file":"index.js","sources":["../../packages/dashboard-workbench/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, 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 { 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 } 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\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 /* ============================== 滚动出阴影 =============================== */\n const ref = useRef(null)\n const scroll = useScroll(ref)\n const isShadowShow = (scroll?.top ?? 0) > 0\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 <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 </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\" ref={ref}>\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 containerPadding={[10, 0]}\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\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\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 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","AddCalendarModal","AddChartModal"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { ModuleData } from './components/module-content';
2
2
  export interface FieldItem {
3
3
  label: string;
4
+ disabled?: boolean;
4
5
  enum?: {
5
6
  label: any;
6
7
  value: any;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../packages/dashboard-workbench/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Layout } from 'react-grid-layout'\nimport dayjs from 'dayjs'\nimport { isNil } from 'lodash-es'\nimport { TimeGroupInterval } from '../components/add-module-modal/add-chart-modal/interface'\nimport { FieldItem } from '../types'\n\nexport const getTransformValue = ({\n val,\n field,\n fieldOptions,\n fieldMap,\n timeGroupInterval,\n showNill = true,\n}: {\n val: any\n field: any\n fieldOptions?: FieldItem[]\n fieldMap?: Record<string, string> //枚举的翻译\n timeGroupInterval?: TimeGroupInterval // 时间汇总 xAxis 是time的时候有效\n showNill?: boolean\n}) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n let newVal = val\n if (fieldData?.type === 'enum' && fieldData?.enum && fieldData?.enum?.length > 0) {\n const label = fieldData?.enum?.find(enumItem => enumItem.value === val)?.label\n newVal = label ? fieldMap?.[label] || label : val\n }\n if (fieldData?.type === 'timestamp') {\n let format = 'YYYY-MM-DD'\n switch (timeGroupInterval) {\n case 'day':\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'week':\n const startDate = val ? dayjs(val).startOf('week').format('YYYY-MM-DD') : ''\n const endDate = val ? dayjs(val).endOf('week').format('YYYY-MM-DD') : ''\n newVal = val ? `${startDate}~${endDate}` : ''\n break\n case 'month':\n format = 'YYYY-MM'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'year':\n format = 'YYYY'\n newVal = val ? dayjs(val).format(format) : ''\n break\n default:\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n }\n }\n\n //这玩意好像还会是数组\n newVal = Array.isArray(newVal) ? newVal.join(',') : newVal\n\n // https://applink.larksuite.com/client/todo/detail?guid=b5c44575-b66c-4c77-85eb-514a42a18330&suite_entity_num=t106725\n if (showNill && isNil(newVal)) {\n newVal = `Null`\n }\n\n return newVal\n}\n\nexport const findChangedItems = (newLayout: Layout[], oldLayout: Layout[]) => {\n return newLayout.filter(newItem => {\n const oldItem = oldLayout.find(item => item.i === newItem.i)\n return (\n oldItem &&\n (oldItem.x !== newItem.x ||\n oldItem.y !== newItem.y ||\n oldItem.w !== newItem.w ||\n oldItem.h !== newItem.h)\n )\n })\n}\n"],"names":[],"mappings":";;AAOO,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,MAOM;;AACJ,QAAM,YAAY,6CAAc,KAAK,CAAQ,SAAA,KAAK,UAAU;AAC5D,MAAI,SAAS;AACT,OAAA,uCAAW,UAAS,WAAU,uCAAW,WAAQ,4CAAW,SAAX,mBAAiB,UAAS,GAAG;AAC1E,UAAA,SAAQ,kDAAW,SAAX,mBAAiB,KAAK,cAAY,SAAS,UAAU,SAArD,mBAA2D;AACzE,aAAS,SAAQ,qCAAW,WAAU,QAAQ;AAAA,EAAA;AAE5C,OAAA,uCAAW,UAAS,aAAa;AACnC,QAAI,SAAS;AACb,YAAQ,mBAAmB;AAAA,MACzB,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACG,cAAA,YAAY,MAAM,MAAM,GAAG,EAAE,QAAQ,MAAM,EAAE,OAAO,YAAY,IAAI;AACpE,cAAA,UAAU,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,OAAO,YAAY,IAAI;AACtE,iBAAS,MAAM,GAAG,SAAS,IAAI,OAAO,KAAK;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF;AACW,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,IAAA;AAAA,EACJ;AAIF,WAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAGhD,MAAA,YAAY,MAAM,MAAM,GAAG;AACpB,aAAA;AAAA,EAAA;AAGJ,SAAA;AACT;AAEa,MAAA,mBAAmB,CAAC,WAAqB,cAAwB;AACrE,SAAA,UAAU,OAAO,CAAW,YAAA;AACjC,UAAM,UAAU,UAAU,KAAK,UAAQ,KAAK,MAAM,QAAQ,CAAC;AAC3D,WACE,YACC,QAAQ,MAAM,QAAQ,KACrB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ;AAAA,EAAA,CAE3B;AACH;"}
1
+ {"version":3,"file":"index.js","sources":["../../../packages/dashboard-workbench/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Layout } from 'react-grid-layout'\nimport dayjs from 'dayjs'\nimport { isNil } from 'lodash-es'\nimport { TimeGroupInterval } from '../components/add-module-modal/add-chart-modal/interface'\nimport { FieldItem } from '../types'\n\nexport const getTransformValue = ({\n val,\n field,\n fieldOptions,\n fieldMap,\n timeGroupInterval,\n showNill = true,\n}: {\n val: any\n field: any\n fieldOptions?: FieldItem[]\n fieldMap?: Record<string, string> //枚举的翻译\n timeGroupInterval?: TimeGroupInterval // 时间汇总 xAxis 是time的时候有效\n showNill?: boolean\n}) => {\n const fieldData = fieldOptions?.find(item => item.value === field)\n let newVal = val\n if (fieldData?.type === 'enum' && fieldData?.enum && fieldData?.enum?.length > 0) {\n const label = fieldData?.enum?.find(enumItem => enumItem.value === val)?.label\n newVal = label ? fieldMap?.[label] || label : val\n }\n if (fieldData?.type === 'timestamp') {\n let format = 'YYYY-MM-DD'\n switch (timeGroupInterval) {\n case 'day':\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'week':\n const startDate = val ? dayjs(val).startOf('week').format('YYYY-MM-DD') : ''\n const endDate = val ? dayjs(val).endOf('week').format('YYYY-MM-DD') : ''\n newVal = val ? `${startDate}~${endDate}` : ''\n break\n case 'month':\n format = 'YYYY-MM'\n newVal = val ? dayjs(val).format(format) : ''\n break\n case 'year':\n format = 'YYYY'\n newVal = val ? dayjs(val).format(format) : ''\n break\n default:\n format = 'YYYY-MM-DD'\n newVal = val ? dayjs(val).format(format) : ''\n break\n }\n }\n\n //这玩意好像还会是数组\n newVal = Array.isArray(newVal) ? newVal.join(',') : newVal\n\n // https://applink.larksuite.com/client/todo/detail?guid=b5c44575-b66c-4c77-85eb-514a42a18330&suite_entity_num=t106725\n if (showNill && isNil(newVal)) {\n newVal = `Null`\n }\n\n return newVal\n // return `aaaa aaaaaaaaaaaaa aaaaa `\n}\n\nexport const findChangedItems = (newLayout: Layout[], oldLayout: Layout[]) => {\n return newLayout.filter(newItem => {\n const oldItem = oldLayout.find(item => item.i === newItem.i)\n return (\n oldItem &&\n (oldItem.x !== newItem.x ||\n oldItem.y !== newItem.y ||\n oldItem.w !== newItem.w ||\n oldItem.h !== newItem.h)\n )\n })\n}\n"],"names":[],"mappings":";;AAOO,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,MAOM;;AACJ,QAAM,YAAY,6CAAc,KAAK,CAAQ,SAAA,KAAK,UAAU;AAC5D,MAAI,SAAS;AACT,OAAA,uCAAW,UAAS,WAAU,uCAAW,WAAQ,4CAAW,SAAX,mBAAiB,UAAS,GAAG;AAC1E,UAAA,SAAQ,kDAAW,SAAX,mBAAiB,KAAK,cAAY,SAAS,UAAU,SAArD,mBAA2D;AACzE,aAAS,SAAQ,qCAAW,WAAU,QAAQ;AAAA,EAAA;AAE5C,OAAA,uCAAW,UAAS,aAAa;AACnC,QAAI,SAAS;AACb,YAAQ,mBAAmB;AAAA,MACzB,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACG,cAAA,YAAY,MAAM,MAAM,GAAG,EAAE,QAAQ,MAAM,EAAE,OAAO,YAAY,IAAI;AACpE,cAAA,UAAU,MAAM,MAAM,GAAG,EAAE,MAAM,MAAM,EAAE,OAAO,YAAY,IAAI;AACtE,iBAAS,MAAM,GAAG,SAAS,IAAI,OAAO,KAAK;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF,KAAK;AACM,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,MACF;AACW,iBAAA;AACT,iBAAS,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,IAAI;AAC3C;AAAA,IAAA;AAAA,EACJ;AAIF,WAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAGhD,MAAA,YAAY,MAAM,MAAM,GAAG;AACpB,aAAA;AAAA,EAAA;AAGJ,SAAA;AAET;AAEa,MAAA,mBAAmB,CAAC,WAAqB,cAAwB;AACrE,SAAA,UAAU,OAAO,CAAW,YAAA;AACjC,UAAM,UAAU,UAAU,KAAK,UAAQ,KAAK,MAAM,QAAQ,CAAC;AAC3D,WACE,YACC,QAAQ,MAAM,QAAQ,KACrB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ,KACtB,QAAQ,MAAM,QAAQ;AAAA,EAAA,CAE3B;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platox/pivot-table",
3
- "version": "0.0.69",
3
+ "version": "0.0.72",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {