@platox/pivot-table 0.0.45 → 0.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.js +17 -13
- package/es/dashboard-workbench/components/add-module-modal/add-chart-modal/index.js.map +1 -1
- package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js +29 -23
- package/es/dashboard-workbench/components/add-module-modal/add-statistics-modal/custome-styles.js.map +1 -1
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/EnumSelect.d.ts +15 -0
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/EnumSelect.js +89 -0
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/EnumSelect.js.map +1 -0
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/config.js +9 -6
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/config.js.map +1 -1
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js +7 -5
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/index.js.map +1 -1
- package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js +7 -5
- package/es/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.js.map +1 -1
- package/es/dashboard-workbench/components/module-content/statistics-module/index.js +7 -12
- package/es/dashboard-workbench/components/module-content/statistics-module/index.js.map +1 -1
- package/es/dashboard-workbench/components/module-content/utils.js +51 -12
- package/es/dashboard-workbench/components/module-content/utils.js.map +1 -1
- package/es/dashboard-workbench/context.d.ts +1 -0
- package/es/dashboard-workbench/context.js.map +1 -1
- package/es/dashboard-workbench/index.d.ts +1 -0
- package/es/dashboard-workbench/index.js +1 -0
- package/es/dashboard-workbench/index.js.map +1 -1
- package/es/dashboard-workbench/lang/en-US.d.ts +4 -0
- package/es/dashboard-workbench/lang/en-US.js +4 -0
- package/es/dashboard-workbench/lang/en-US.js.map +1 -1
- package/es/dashboard-workbench/lang/zh-CN.d.ts +4 -0
- package/es/dashboard-workbench/lang/zh-CN.js +4 -0
- package/es/dashboard-workbench/lang/zh-CN.js.map +1 -1
- package/es/dashboard-workbench/utils/index.js +1 -0
- package/es/dashboard-workbench/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/umd/pivot-table.umd.cjs +45 -45
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/debounce-select.d.ts +0 -12
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/debounce-select.js +0 -44
- package/es/dashboard-workbench/components/add-module-modal/components/condition-modal/debounce-select.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionSymbolAndValuePicker.js","sources":["../../../../packages/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.tsx"],"sourcesContent":["import { ChangeEventHandler, useEffect, useMemo, useState, type CSSProperties } from 'react'\nimport { DatePicker, DatePickerProps, Input, InputNumber, Select, Switch } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useMemoizedFn } from 'ahooks'\nimport dayjs, { Dayjs } from 'dayjs'\nimport { useAppContext } from '../../context'\nimport { FieldItem } from '../../types'\nimport { useConditionSymbolOptions } from '../add-module-modal/components/condition-modal/config'\nimport DebounceSelect from '../add-module-modal/components/condition-modal/debounce-select'\nimport { ConditionListItemWrapper } from './interface'\n\nexport type ConditionSymbolAndValuePickerProps = {\n style?: CSSProperties\n className?: string\n\n field?: FieldItem\n\n value?: Omit<ConditionListItemWrapper, 'field'>\n onChange: (value: Omit<ConditionListItemWrapper, 'field'>) => void\n}\n\nexport const ConditionSymbolAndValuePicker = (props: ConditionSymbolAndValuePickerProps) => {\n const { style, className, field } = props\n const fieldType = field?.type\n\n const { t } = useTranslation()\n\n const { timeOptions, boolOptions, intOptions, stringOptions, rdateOptions, rdateOptions2 } =\n useConditionSymbolOptions()\n\n const conditionOptions = {\n int: intOptions,\n timestamp: timeOptions,\n string: stringOptions,\n bool: boolOptions,\n float: intOptions,\n enum: stringOptions,\n }\n\n const [value, setValue] = useControllableValue(props)\n\n /* ============================== symbol =============================== */\n let symbolOptions = conditionOptions[fieldType as keyof typeof conditionOptions] ?? []\n let symbolDisabled = !props?.field\n let symbolValue = value?.condition\n let symbolOnChange = (v: string) => {\n let newValue = { ...value, condition: v }\n if (fieldType === 'timestamp') {\n newValue['rdate'] = 'exactdate'\n }\n setValue({ ...value, condition: v })\n }\n console.log('symbolValue', symbolValue, value)\n\n /* ============================== condition value =============================== */\n const val = value?.val\n const val2 = value?.val2\n const rdate = value?.rdate\n\n const enumDataApi = useAppContext()?.service?.enumDataApi\n const fieldMap = useAppContext()?.globalData?.fieldMap\n const { options: enumOptions, enumUrl } = useMemo(() => {\n let options: {\n label: unknown\n value: unknown\n }[] = []\n let enumUrl: string | undefined = undefined\n\n if (field?.type === 'enum') {\n options =\n field?.enum?.map(item => ({\n label: fieldMap?.[item.label] ?? item.label,\n value: item.value,\n })) ?? []\n enumUrl = field?.dynamic_call_enum_api\n }\n return {\n options,\n enumUrl,\n }\n }, [field, fieldMap])\n\n const handleConditionValueChange = useMemoizedFn((key: 'val' | 'val2' | 'rdate', v: unknown) => {\n //@ts-ignore\n let _v = v?.target?.value ?? v\n setValue({ ...value, [key]: _v })\n })\n\n const getVaildValue = <T,>(\n v: unknown,\n type?: 'string' | 'number' | 'dayjs' | 'boolean',\n defaultValue?: T\n ) => {\n let ret = defaultValue\n\n switch (type) {\n case 'number':\n return (typeof v === 'number' ? v : ret) as T\n case 'dayjs': //组件内部处理\n return (typeof v === 'string' ? v : ret) as T\n case 'boolean':\n return (typeof v === 'boolean' ? v : ret) as T\n case 'string':\n return (typeof v === 'string' ? v : ret) as T\n default:\n return v as T\n }\n }\n\n return (\n <>\n <Select\n style={{ width: '100px' }}\n disabled={symbolDisabled}\n options={symbolOptions}\n value={symbolValue}\n onChange={symbolOnChange}\n />\n {!fieldType && (\n <>\n <Input style={{ width: '100px' }} disabled />\n </>\n )}\n\n {!!fieldType && (\n <>\n {['int', 'float'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n <InputNumber\n style={{ width: '100px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n {symbolValue === 'contain' ? (\n <InputNumber\n style={{ width: '100px', marginLeft: '5px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val2)}\n onChange={v => {\n handleConditionValueChange('val2', v)\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {fieldType === 'timestamp' && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n {symbolValue === '=' || symbolValue === '<' || symbolValue === '>' ? (\n <Select\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '150px' }}\n options={symbolValue === '=' ? rdateOptions : rdateOptions2}\n value={getVaildValue(rdate)}\n onChange={v => {\n handleConditionValueChange('rdate', v)\n }}\n />\n ) : null}\n\n {rdate == 'exactdate' && symbolValue !== 'contain' ? (\n <DatePickerWrapper\n style={{ width: '150px' }}\n value={getVaildValue(val, 'dayjs')}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n ) : null}\n\n {symbolValue === 'contain' ? (\n <RangePickerWrapper\n value={[getVaildValue(val, 'dayjs'), getVaildValue(val2, 'dayjs')]}\n onChange={v => {\n setValue({ ...value, val: v[0], val2: v[1] })\n // handleConditionValueChange('val', v?.[0])\n // handleConditionValueChange('val2', v?.[1])\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {['string'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n <Input\n style={{ width: '150px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n {symbolValue === 'contain' ? (\n <Input\n style={{ width: '150px', marginLeft: '5px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val2, 'dayjs')}\n onChange={v => {\n handleConditionValueChange('val2', v)\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {['bool'].includes(fieldType) ? (\n <Switch\n value={getVaildValue(val, 'boolean')}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n ) : null}\n\n {['enum'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n {enumOptions && enumOptions?.length > 0 ? (\n <Select\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '150px' }}\n options={enumOptions}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n ) : enumUrl ? (\n <DebounceSelect<{ label: string; value: string }>\n style={{ width: '150px' }}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n fetchOptions={async value => {\n let dfUrl = enumUrl\n if (value) {\n dfUrl = `${dfUrl}?q=${value}`\n }\n return (await enumDataApi?.(dfUrl)?.then(res => res.data?.list)) ?? []\n }}\n />\n ) : null}\n </>\n ) : null}\n </>\n )}\n </>\n )\n}\n\nConditionSymbolAndValuePicker.displayName = 'ConditionSymbolAndValuePicker'\n\nexport default ConditionSymbolAndValuePicker\n\n/* ============================== split =============================== */\nconst format = 'YYYY-MM-DD'\n\nexport const DatePickerWrapper = (\n props: { value?: string; onChange?: (v: string) => void } & DatePickerProps\n) => {\n const { value = '', onChange, ...others } = props\n\n const dayjsValue = useMemo(() => {\n return !!value ? dayjs(value, format) : undefined\n }, [value])\n\n return (\n <DatePicker\n {...(others as unknown as any)}\n value={dayjsValue}\n onChange={(v: Dayjs | null) => {\n return onChange?.(v?.format(format) ?? '')\n }}\n />\n )\n}\n\nexport const RangePickerWrapper = (\n props: {\n value?: [string, string]\n onChange?: (v: [string, string]) => void\n } & Omit<DatePickerProps, 'value' | 'onChange'>\n) => {\n const { value, onChange, ...others } = props\n\n const dayjsValue = useMemo(() => {\n let start = !!value?.[0] ? dayjs(value?.[0], format) : undefined\n let end = !!value?.[1] ? dayjs(value?.[1], format) : undefined\n return [start, end]\n }, [value?.[0] ?? '', value?.[1] ?? ''])\n\n return (\n <DatePicker.RangePicker\n {...(others as unknown as any)}\n value={dayjsValue}\n allowClear={false}\n onChange={(v: [Dayjs, Dayjs] | null) => {\n let start = v?.[0]?.format(format) ?? ''\n let end = v?.[1]?.format(format) ?? ''\n onChange?.([start, end])\n }}\n />\n )\n}\n"],"names":["enumUrl","_a","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConditionSymbolAndValuePicker.js","sources":["../../../../packages/dashboard-workbench/components/global-filter-condition/ConditionSymbolAndValuePicker.tsx"],"sourcesContent":["import { ChangeEventHandler, useEffect, useMemo, useState, type CSSProperties } from 'react'\nimport { DatePicker, DatePickerProps, Input, InputNumber, Select, SelectProps, Switch } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useMemoizedFn } from 'ahooks'\nimport dayjs, { Dayjs } from 'dayjs'\nimport { useAppContext } from '../../context'\nimport { FieldItem } from '../../types'\nimport { useConditionSymbolOptions } from '../add-module-modal/components/condition-modal/config'\nimport {\n DebounceEnumSelectWrapper,\n EnumSelectWrapper,\n} from '../add-module-modal/components/condition-modal/EnumSelect'\nimport { ConditionListItemWrapper } from './interface'\n\nexport type ConditionSymbolAndValuePickerProps = {\n style?: CSSProperties\n className?: string\n\n field?: FieldItem\n\n value?: Omit<ConditionListItemWrapper, 'field'>\n onChange: (value: Omit<ConditionListItemWrapper, 'field'>) => void\n}\n\nexport const ConditionSymbolAndValuePicker = (props: ConditionSymbolAndValuePickerProps) => {\n const { style, className, field } = props\n const fieldType = field?.type\n\n const { t } = useTranslation()\n\n const { timeOptions, boolOptions, intOptions, stringOptions, rdateOptions, rdateOptions2 } =\n useConditionSymbolOptions()\n\n const conditionOptions = {\n int: intOptions,\n timestamp: timeOptions,\n string: stringOptions,\n bool: boolOptions,\n float: intOptions,\n enum: stringOptions,\n }\n\n const [value, setValue] = useControllableValue(props)\n\n /* ============================== symbol =============================== */\n let symbolOptions = conditionOptions[fieldType as keyof typeof conditionOptions] ?? []\n let symbolDisabled = !props?.field\n let symbolValue = value?.condition\n let symbolOnChange = (v: string) => {\n let newValue = { ...value, condition: v }\n if (fieldType === 'timestamp') {\n newValue['rdate'] = 'exactdate'\n }\n setValue({ ...value, condition: v })\n }\n\n /* ============================== condition value =============================== */\n const val = value?.val\n const val2 = value?.val2\n const rdate = value?.rdate\n\n const enumDataApi = useAppContext()?.service?.enumDataApi\n const fieldMap = useAppContext()?.globalData?.fieldMap\n const { options: enumOptions, enumUrl } = useMemo(() => {\n let options: {\n label: unknown\n value: unknown\n }[] = []\n let enumUrl: string | undefined = undefined\n\n if (field?.type === 'enum') {\n options =\n field?.enum?.map(item => ({\n label: fieldMap?.[item.label] ?? item.label,\n value: item.value,\n })) ?? []\n enumUrl = field?.dynamic_call_enum_api\n }\n return {\n options,\n enumUrl,\n }\n }, [field, fieldMap])\n\n const handleConditionValueChange = useMemoizedFn((key: 'val' | 'val2' | 'rdate', v: unknown) => {\n //@ts-ignore\n let _v = v?.target?.value ?? v\n setValue({ ...value, [key]: _v })\n })\n\n const getVaildValue = <T,>(\n v: unknown,\n type?: 'string' | 'number' | 'dayjs' | 'boolean' | 'enum' | 'lazy_enum',\n defaultValue?: T\n ) => {\n let ret = defaultValue\n\n switch (type) {\n case 'number':\n return (typeof v === 'number' ? v : ret) as T\n case 'dayjs': //组件内部处理\n return (typeof v === 'string' ? v : ret) as T\n case 'boolean':\n return (typeof v === 'boolean' ? v : ret) as T\n case 'string':\n return (typeof v === 'string' ? v : ret) as T\n default:\n return v as T\n }\n }\n\n return (\n <>\n <Select\n style={{ width: '100px' }}\n popupMatchSelectWidth={200}\n disabled={symbolDisabled}\n options={symbolOptions}\n value={symbolValue}\n onChange={symbolOnChange}\n />\n {!fieldType && (\n <>\n <Input style={{ width: '100px' }} disabled />\n </>\n )}\n\n {!!fieldType && (\n <>\n {['int', 'float'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n <InputNumber\n style={{ width: '100px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n {symbolValue === 'contain' ? (\n <InputNumber\n style={{ width: '100px', marginLeft: '5px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val2)}\n onChange={v => {\n handleConditionValueChange('val2', v)\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {fieldType === 'timestamp' && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n {symbolValue === '=' || symbolValue === '<' || symbolValue === '>' ? (\n <Select\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '150px' }}\n options={symbolValue === '=' ? rdateOptions : rdateOptions2}\n value={getVaildValue(rdate)}\n onChange={v => {\n handleConditionValueChange('rdate', v)\n }}\n />\n ) : null}\n\n {rdate == 'exactdate' && symbolValue !== 'contain' ? (\n <DatePickerWrapper\n style={{ width: '150px' }}\n value={getVaildValue(val, 'dayjs')}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n ) : null}\n\n {symbolValue === 'contain' ? (\n <RangePickerWrapper\n value={[getVaildValue(val, 'dayjs'), getVaildValue(val2, 'dayjs')]}\n onChange={v => {\n setValue({ ...value, val: v[0], val2: v[1] })\n // handleConditionValueChange('val', v?.[0])\n // handleConditionValueChange('val2', v?.[1])\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {['string'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n <Input\n style={{ width: '150px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n {symbolValue === 'contain' ? (\n <Input\n style={{ width: '150px', marginLeft: '5px' }}\n placeholder={t('pleaseEnter')}\n value={getVaildValue(val2, 'dayjs')}\n onChange={v => {\n handleConditionValueChange('val2', v)\n }}\n />\n ) : null}\n </>\n ) : null}\n\n {['bool'].includes(fieldType) ? (\n <Switch\n value={getVaildValue(val, 'boolean')}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n />\n ) : null}\n\n {['enum'].includes(fieldType) && !['null', 'notnull'].includes(symbolValue) ? (\n <>\n {enumOptions && enumOptions?.length > 0 ? (\n <EnumSelectWrapper\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '150px' }}\n options={enumOptions as { label: string; value: string }[]}\n value={getVaildValue(val)}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n {...(['include', 'notinclude'].includes(symbolValue)\n ? { mode: 'multiple', maxTagCount: 'responsive' }\n : {})}\n />\n ) : enumUrl ? (\n <DebounceEnumSelectWrapper<{ label: string; value: string }>\n // mode=\"multiple\"\n style={{ width: '150px' }}\n value={getVaildValue(val)}\n {...(['include', 'notinclude'].includes(symbolValue)\n ? { mode: 'multiple', maxTagCount: 'responsive' }\n : {})}\n onChange={v => {\n handleConditionValueChange('val', v)\n }}\n fetchOptions={async value => {\n let dfUrl = enumUrl\n if (value) {\n dfUrl = `${dfUrl}?q=${value}`\n }\n return (await enumDataApi?.(dfUrl)?.then(res => res.data?.list)) ?? []\n }}\n />\n ) : null}\n </>\n ) : null}\n </>\n )}\n </>\n )\n}\n\nConditionSymbolAndValuePicker.displayName = 'ConditionSymbolAndValuePicker'\n\nexport default ConditionSymbolAndValuePicker\n\n/* ============================== split =============================== */\nconst format = 'YYYY-MM-DD'\n\nexport const DatePickerWrapper = (\n props: { value?: string; onChange?: (v: string) => void } & DatePickerProps\n) => {\n const { value = '', onChange, ...others } = props\n\n const dayjsValue = useMemo(() => {\n return !!value ? dayjs(value, format) : undefined\n }, [value])\n\n return (\n <DatePicker\n {...(others as unknown as any)}\n value={dayjsValue}\n onChange={(v: Dayjs | null) => {\n return onChange?.(v?.format(format) ?? '')\n }}\n />\n )\n}\n\nexport const RangePickerWrapper = (\n props: {\n value?: [string, string]\n onChange?: (v: [string, string]) => void\n } & Omit<DatePickerProps, 'value' | 'onChange'>\n) => {\n const { value, onChange, ...others } = props\n\n const dayjsValue = useMemo(() => {\n let start = !!value?.[0] ? dayjs(value?.[0], format) : undefined\n let end = !!value?.[1] ? dayjs(value?.[1], format) : undefined\n return [start, end]\n }, [value?.[0] ?? '', value?.[1] ?? ''])\n\n return (\n <DatePicker.RangePicker\n {...(others as unknown as any)}\n value={dayjsValue}\n allowClear={false}\n onChange={(v: [Dayjs, Dayjs] | null) => {\n let start = v?.[0]?.format(format) ?? ''\n let end = v?.[1]?.format(format) ?? ''\n onChange?.([start, end])\n }}\n />\n )\n}\n"],"names":["enumUrl","_a","value"],"mappings":"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"}
|
|
@@ -92,6 +92,8 @@ const StatisticsModule = ({
|
|
|
92
92
|
customData == null ? void 0 : customData.dataSourceId,
|
|
93
93
|
matchGlobalFilterCondition
|
|
94
94
|
]);
|
|
95
|
+
const { formatCurrency } = useAppContext();
|
|
96
|
+
const formatCurrencyMemoizedFn = useMemoizedFn(formatCurrency);
|
|
95
97
|
const statisticValue = useMemo(() => {
|
|
96
98
|
var _a, _b, _c, _d, _e;
|
|
97
99
|
if (!list) {
|
|
@@ -123,20 +125,13 @@ const StatisticsModule = ({
|
|
|
123
125
|
if (customeStyle == null ? void 0 : customeStyle.unit) {
|
|
124
126
|
const { unit, precision } = customeStyle;
|
|
125
127
|
switch (`${unit}`) {
|
|
126
|
-
case "8":
|
|
127
|
-
val = `฿${formatToThousands(val, precision)}`;
|
|
128
|
-
break;
|
|
129
|
-
case "7":
|
|
130
|
-
val = `£${formatToThousands(val, precision)}`;
|
|
131
|
-
break;
|
|
132
|
-
case "6":
|
|
133
|
-
val = `€${formatToThousands(val, precision)}`;
|
|
134
|
-
break;
|
|
135
128
|
case "4":
|
|
136
|
-
val = `¥${formatToThousands(val, precision)}`;
|
|
137
|
-
break;
|
|
138
129
|
case "5":
|
|
139
|
-
|
|
130
|
+
case "6":
|
|
131
|
+
case "7":
|
|
132
|
+
case "8":
|
|
133
|
+
case "9":
|
|
134
|
+
val = (formatCurrencyMemoizedFn == null ? void 0 : formatCurrencyMemoizedFn(val, precision)) ?? val;
|
|
140
135
|
break;
|
|
141
136
|
case "1":
|
|
142
137
|
val = formatToThousands(val, precision);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/statistics-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 { useMemoizedFn, useSize } from 'ahooks'\nimport { useAppContext } from '@platox/pivot-table/context'\nimport { ModuleDataApi } from '../../../types'\nimport { StatisticsCustomeDataTypes } from '../../add-module-modal/add-statistics-modal/custome-data'\nimport { StatisticsCustomeStylesTypes } from '../../add-module-modal/add-statistics-modal/custome-styles'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport { calculatePxMultiRange } from './utils'\n\ninterface StatisticsModuleProps {\n customData?: StatisticsCustomeDataTypes\n customeStyle?: StatisticsCustomeStylesTypes\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n rowWidth?: number\n rowHeight?: number\n}\n\nfunction formatToPercentage(value: number, decimalPlaces: number = 0): string {\n if (!Number.isFinite(value)) {\n throw new Error('Value must be a finite number.')\n }\n return new Intl.NumberFormat(undefined, {\n style: 'percent',\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces,\n }).format(value)\n}\n\nfunction formatToThousands(value: number, decimalPlaces: number = 0): string {\n if (!Number.isFinite(value)) {\n return ''\n }\n\n const formattedValue = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: decimalPlaces,\n }).format(value)\n\n const [integerPart, decimalPart] = formattedValue.split('.')\n const paddedDecimal = (decimalPart || '').padEnd(decimalPlaces, '0')\n\n return `${integerPart}${decimalPlaces > 0 ? '.' : ''}${paddedDecimal}`\n}\n\nconst StatisticsModule: React.FC<StatisticsModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n}) => {\n /* ============================== split =============================== */\n const [list, setList] = useState<any>()\n const [loading, setLoading] = useState<boolean>(false)\n\n const { globalFilterCondition } = useAppContext()\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 getData = useMemoizedFn(async () => {\n if (customData) {\n // 调用方法\n let queryString = ''\n setLoading(true)\n if (customData.statisticalMethod === 'fieldValue' && customData.field) {\n queryString += `select=${customData.field}.${customData?.statisticalType}()`\n } else if (customData.statisticalMethod === 'recordTotal') {\n queryString += `select=id.count()`\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 setList(res.data)\n })\n .finally(() => {\n setLoading(false)\n })\n }\n } else {\n setList([])\n }\n })\n useEffect(() => {\n if (customData) {\n getData()\n }\n }, [\n customData?.conditionData,\n customData?.statisticalMethod,\n customData?.statisticalType,\n customData?.field,\n customData?.dataSourceId,\n matchGlobalFilterCondition,\n ])\n\n /* ============================== split =============================== */\n\n const statisticValue = useMemo(() => {\n if (!list) {\n return ''\n }\n\n const newList: any[] = list\n const { statisticalMethod, statisticalType, field } = customData || {}\n\n let val: any = 0\n if (newList.length && statisticalMethod === 'fieldValue' && field) {\n switch (statisticalType) {\n case 'sum':\n val = newList?.[0]?.sum || 0\n break\n case 'max':\n val = newList?.[0]?.max || 0\n break\n case 'min':\n val = newList?.[0]?.min || 0\n break\n case 'avg':\n val = newList?.[0]?.avg || 0\n break\n default:\n val = 0\n }\n } else if (statisticalMethod === 'recordTotal') {\n val = newList?.[0]?.count || 0\n }\n\n // 格式化\n if (customeStyle?.unit) {\n const { unit, precision } = customeStyle\n switch (`${unit}`) {\n case '8':\n val = `฿${formatToThousands(val, precision)}`\n break\n case '7':\n val = `£${formatToThousands(val, precision)}`\n break\n case '6':\n val = `€${formatToThousands(val, precision)}`\n break\n case '4':\n val = `¥${formatToThousands(val, precision)}`\n break\n case '5':\n val = `$${formatToThousands(val, precision)}`\n break\n case '1':\n val = formatToThousands(val, precision)\n break\n case '3':\n val = formatToPercentage(val, precision)\n break\n default:\n val = formatToThousands(val, precision)\n }\n } else {\n val = formatToThousands(val, customeStyle?.precision)\n }\n\n return val\n }, [list, customData, customeStyle])\n\n /* ============================== split =============================== */\n\n const boxRef = useRef<any>()\n const size = useSize(boxRef)\n\n const caclSize = useMemo(() => {\n if (!size) {\n return null\n }\n let PX: number = 0\n let PY: number = 32 // 固定\n let fontSize: number = 0\n let subFontSize: number = 0\n // 计算padding x 的值\n {\n const boxWidth1 = 116\n const px1 = 16\n\n const boxWidth2 = 760\n const px2 = 56\n\n PX = calculatePxMultiRange(size.width, {\n ranges: [\n [boxWidth1, px1],\n [boxWidth2, px2],\n ],\n step: 4,\n })\n const min = 16\n const max = 72\n PX = Math.max(min, Math.min(max, PX))\n }\n\n // 计算字体大小\n let innerBoxW = size.width - PX * 2\n let innerBoxH = size.height - PY * 2\n {\n fontSize = calculatePxMultiRange(innerBoxW, {\n ranges: [\n [400, 60],\n [500, 64],\n ],\n step: 0.1,\n })\n const min = 16\n const max = Math.min(72, innerBoxH / 2)\n fontSize = Math.max(min, Math.min(max, fontSize))\n }\n {\n subFontSize = calculatePxMultiRange(innerBoxH, {\n ranges: [\n [140, 12],\n [500, 24],\n [860, 36],\n ],\n step: 0.1,\n })\n const min = 12\n const max = Math.min(36, innerBoxH / 2)\n subFontSize = Math.max(min, Math.min(max, subFontSize))\n }\n\n return {\n PX,\n PY,\n fontSize,\n subFontSize,\n }\n }, [size])\n\n return (\n <div\n ref={boxRef}\n style={{\n display: 'flex',\n height: '100%',\n width: '100%',\n }}\n >\n {loading ? (\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={loading}\n />\n ) : null}\n <div\n style={{\n overflow: 'hidden',\n position: 'relative',\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n padding: `${caclSize?.PY}px ${caclSize?.PX}px`,\n }}\n >\n {statisticValue !== '' && (\n <div\n style={{\n width: '100%',\n position: 'relative',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n }}\n >\n <span\n style={{\n fontWeight: 'bold',\n lineHeight: `${caclSize?.fontSize}px`,\n fontSize: `${caclSize?.fontSize}px`,\n color: customeStyle?.color,\n }}\n >\n {statisticValue}\n </span>\n </div>\n )}\n\n {customeStyle?.desc !== '' && (\n <div\n style={{\n width: '100%',\n position: 'relative',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n }}\n >\n <span\n style={{\n fontSize: `${caclSize?.subFontSize}px`,\n lineHeight: `${caclSize?.subFontSize}px`,\n color: customeStyle?.color,\n textAlign: 'center',\n }}\n >\n {customeStyle?.desc}\n </span>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport default React.memo(StatisticsModule)\n"],"names":["matchGlobalFilterCondition"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../packages/dashboard-workbench/components/module-content/statistics-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 { useMemoizedFn, useSize } from 'ahooks'\nimport { useAppContext } from '@platox/pivot-table/context'\nimport { ModuleDataApi } from '../../../types'\nimport { StatisticsCustomeDataTypes } from '../../add-module-modal/add-statistics-modal/custome-data'\nimport { StatisticsCustomeStylesTypes } from '../../add-module-modal/add-statistics-modal/custome-styles'\nimport { ConditionBlock } from '../../add-module-modal/components/condition-modal/interface'\nimport { mapConditionsToPostgrest } from '../utils'\nimport { calculatePxMultiRange } from './utils'\n\ninterface StatisticsModuleProps {\n customData?: StatisticsCustomeDataTypes\n customeStyle?: StatisticsCustomeStylesTypes\n moduleDataApi?: ModuleDataApi\n width?: number\n height?: number\n rowWidth?: number\n rowHeight?: number\n}\n\nfunction formatToPercentage(value: number, decimalPlaces: number = 0): string {\n if (!Number.isFinite(value)) {\n throw new Error('Value must be a finite number.')\n }\n return new Intl.NumberFormat(undefined, {\n style: 'percent',\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces,\n }).format(value)\n}\n\nfunction formatToThousands(value: number, decimalPlaces: number = 0): string {\n if (!Number.isFinite(value)) {\n return ''\n }\n\n const formattedValue = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: decimalPlaces,\n }).format(value)\n\n const [integerPart, decimalPart] = formattedValue.split('.')\n const paddedDecimal = (decimalPart || '').padEnd(decimalPlaces, '0')\n\n return `${integerPart}${decimalPlaces > 0 ? '.' : ''}${paddedDecimal}`\n}\n\nconst StatisticsModule: React.FC<StatisticsModuleProps> = ({\n moduleDataApi,\n customData,\n customeStyle,\n}) => {\n /* ============================== split =============================== */\n const [list, setList] = useState<any>()\n const [loading, setLoading] = useState<boolean>(false)\n\n const { globalFilterCondition } = useAppContext()\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 getData = useMemoizedFn(async () => {\n if (customData) {\n // 调用方法\n let queryString = ''\n setLoading(true)\n if (customData.statisticalMethod === 'fieldValue' && customData.field) {\n queryString += `select=${customData.field}.${customData?.statisticalType}()`\n } else if (customData.statisticalMethod === 'recordTotal') {\n queryString += `select=id.count()`\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 setList(res.data)\n })\n .finally(() => {\n setLoading(false)\n })\n }\n } else {\n setList([])\n }\n })\n useEffect(() => {\n if (customData) {\n getData()\n }\n }, [\n customData?.conditionData,\n customData?.statisticalMethod,\n customData?.statisticalType,\n customData?.field,\n customData?.dataSourceId,\n matchGlobalFilterCondition,\n ])\n\n /* ============================== split =============================== */\n const { formatCurrency } = useAppContext()\n const formatCurrencyMemoizedFn = useMemoizedFn(formatCurrency)\n\n const statisticValue = useMemo(() => {\n if (!list) {\n return ''\n }\n\n const newList: any[] = list\n const { statisticalMethod, statisticalType, field } = customData || {}\n\n let val: any = 0\n if (newList.length && statisticalMethod === 'fieldValue' && field) {\n switch (statisticalType) {\n case 'sum':\n val = newList?.[0]?.sum || 0\n break\n case 'max':\n val = newList?.[0]?.max || 0\n break\n case 'min':\n val = newList?.[0]?.min || 0\n break\n case 'avg':\n val = newList?.[0]?.avg || 0\n break\n default:\n val = 0\n }\n } else if (statisticalMethod === 'recordTotal') {\n val = newList?.[0]?.count || 0\n }\n\n // 格式化\n if (customeStyle?.unit) {\n const { unit, precision } = customeStyle\n switch (`${unit}`) {\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n val = formatCurrencyMemoizedFn?.(val, precision) ?? val\n // val = `${unit}${formatToThousands(val, precision)}`\n break\n // case '8':\n // val = `฿${formatToThousands(val, precision)}`\n // break\n // case '7':\n // val = `£${formatToThousands(val, precision)}`\n // break\n // case '6':\n // val = `€${formatToThousands(val, precision)}`\n // break\n // case '5':\n // val = `$${formatToThousands(val, precision)}`\n // break\n // case '4':\n // val = `¥${formatToThousands(val, precision)}`\n // break\n case '1':\n val = formatToThousands(val, precision)\n break\n case '3':\n val = formatToPercentage(val, precision)\n break\n default:\n val = formatToThousands(val, precision)\n }\n } else {\n val = formatToThousands(val, customeStyle?.precision)\n }\n\n return val\n }, [list, customData, customeStyle])\n\n /* ============================== split =============================== */\n\n const boxRef = useRef<any>()\n const size = useSize(boxRef)\n\n const caclSize = useMemo(() => {\n if (!size) {\n return null\n }\n let PX: number = 0\n let PY: number = 32 // 固定\n let fontSize: number = 0\n let subFontSize: number = 0\n // 计算padding x 的值\n {\n const boxWidth1 = 116\n const px1 = 16\n\n const boxWidth2 = 760\n const px2 = 56\n\n PX = calculatePxMultiRange(size.width, {\n ranges: [\n [boxWidth1, px1],\n [boxWidth2, px2],\n ],\n step: 4,\n })\n const min = 16\n const max = 72\n PX = Math.max(min, Math.min(max, PX))\n }\n\n // 计算字体大小\n let innerBoxW = size.width - PX * 2\n let innerBoxH = size.height - PY * 2\n {\n fontSize = calculatePxMultiRange(innerBoxW, {\n ranges: [\n [400, 60],\n [500, 64],\n ],\n step: 0.1,\n })\n const min = 16\n const max = Math.min(72, innerBoxH / 2)\n fontSize = Math.max(min, Math.min(max, fontSize))\n }\n {\n subFontSize = calculatePxMultiRange(innerBoxH, {\n ranges: [\n [140, 12],\n [500, 24],\n [860, 36],\n ],\n step: 0.1,\n })\n const min = 12\n const max = Math.min(36, innerBoxH / 2)\n subFontSize = Math.max(min, Math.min(max, subFontSize))\n }\n\n return {\n PX,\n PY,\n fontSize,\n subFontSize,\n }\n }, [size])\n\n return (\n <div\n ref={boxRef}\n style={{\n display: 'flex',\n height: '100%',\n width: '100%',\n }}\n >\n {loading ? (\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={loading}\n />\n ) : null}\n <div\n style={{\n overflow: 'hidden',\n position: 'relative',\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n padding: `${caclSize?.PY}px ${caclSize?.PX}px`,\n }}\n >\n {statisticValue !== '' && (\n <div\n style={{\n width: '100%',\n position: 'relative',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n }}\n >\n <span\n style={{\n fontWeight: 'bold',\n lineHeight: `${caclSize?.fontSize}px`,\n fontSize: `${caclSize?.fontSize}px`,\n color: customeStyle?.color,\n }}\n >\n {statisticValue}\n </span>\n </div>\n )}\n\n {customeStyle?.desc !== '' && (\n <div\n style={{\n width: '100%',\n position: 'relative',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n }}\n >\n <span\n style={{\n fontSize: `${caclSize?.subFontSize}px`,\n lineHeight: `${caclSize?.subFontSize}px`,\n color: customeStyle?.color,\n textAlign: 'center',\n }}\n >\n {customeStyle?.desc}\n </span>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport default React.memo(StatisticsModule)\n"],"names":["matchGlobalFilterCondition"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import dayjs from "dayjs";
|
|
2
|
-
import { isNil } from "lodash-es";
|
|
2
|
+
import { isArray, isNil } from "lodash-es";
|
|
3
3
|
const mapConditionsToPostgrest = (filterData) => {
|
|
4
4
|
let DSLTree = {
|
|
5
5
|
join: "and",
|
|
@@ -40,7 +40,6 @@ const mapConditionsToPostgrest = (filterData) => {
|
|
|
40
40
|
return ret;
|
|
41
41
|
}
|
|
42
42
|
let str = loop(DSLTree, 1, "and");
|
|
43
|
-
console.log("mapConditionsToPostgrest1", str, DSLTree);
|
|
44
43
|
return str;
|
|
45
44
|
};
|
|
46
45
|
let mapping = {
|
|
@@ -50,8 +49,8 @@ let mapping = {
|
|
|
50
49
|
">=": "gte",
|
|
51
50
|
"<": "lt",
|
|
52
51
|
"=<": "lte",
|
|
53
|
-
["include"]: "
|
|
54
|
-
["notinclude"]: "not.
|
|
52
|
+
["include"]: "in",
|
|
53
|
+
["notinclude"]: "not.in",
|
|
55
54
|
// ['contain']: 'gte,lte', //这个是group的
|
|
56
55
|
["before"]: "lt",
|
|
57
56
|
["after"]: "gt",
|
|
@@ -62,9 +61,24 @@ let mapping = {
|
|
|
62
61
|
["notnull"]: "not.is"
|
|
63
62
|
//这个特殊处理
|
|
64
63
|
};
|
|
64
|
+
const getEnumValue = (val) => {
|
|
65
|
+
return (val == null ? void 0 : val.value) ? val == null ? void 0 : val.value : val;
|
|
66
|
+
};
|
|
65
67
|
const conditionListItem2DSL = (condition) => {
|
|
66
68
|
const { field, condition: cond, val, val2, rdate, type } = condition;
|
|
67
|
-
let value
|
|
69
|
+
let value;
|
|
70
|
+
if (type === "enum") {
|
|
71
|
+
let isMultiple = ["include", "notinclude"].includes(cond);
|
|
72
|
+
if (isMultiple) {
|
|
73
|
+
value = (isArray(val) ? val : []).map((val3) => {
|
|
74
|
+
return getEnumValue(val3);
|
|
75
|
+
}).filter((v) => !!v);
|
|
76
|
+
} else {
|
|
77
|
+
value = !isArray(val) ? getEnumValue(val) : "";
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
value = (val == null ? void 0 : val.value) ? val == null ? void 0 : val.value : val;
|
|
81
|
+
}
|
|
68
82
|
let ret = null;
|
|
69
83
|
switch (cond) {
|
|
70
84
|
case "=":
|
|
@@ -139,14 +153,39 @@ const conditionListItem2DSL = (condition) => {
|
|
|
139
153
|
case "include":
|
|
140
154
|
case "notinclude":
|
|
141
155
|
{
|
|
142
|
-
if (
|
|
143
|
-
|
|
156
|
+
if (condition.type === "enum") {
|
|
157
|
+
if (isInVaildValue(value == null ? void 0 : value[0]) || value.length === 0) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
if (value.length === 1) {
|
|
161
|
+
ret = {
|
|
162
|
+
field,
|
|
163
|
+
value: `(${value})`,
|
|
164
|
+
operator: mapping[cond]
|
|
165
|
+
};
|
|
166
|
+
} else {
|
|
167
|
+
ret = {
|
|
168
|
+
join: "or",
|
|
169
|
+
children: value.map((value2) => {
|
|
170
|
+
return {
|
|
171
|
+
field,
|
|
172
|
+
value: `(${value2})`,
|
|
173
|
+
operator: mapping[cond]
|
|
174
|
+
};
|
|
175
|
+
})
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return ret;
|
|
179
|
+
} else {
|
|
180
|
+
if (isInVaildValue(value)) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
ret = {
|
|
184
|
+
field,
|
|
185
|
+
value: `(${value})`,
|
|
186
|
+
operator: mapping[cond]
|
|
187
|
+
};
|
|
144
188
|
}
|
|
145
|
-
ret = {
|
|
146
|
-
field,
|
|
147
|
-
value: `{${value}}`,
|
|
148
|
-
operator: mapping[cond]
|
|
149
|
-
};
|
|
150
189
|
}
|
|
151
190
|
break;
|
|
152
191
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../packages/dashboard-workbench/components/module-content/utils.ts"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs'\nimport { 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 return `${(child as DSLItem).field}${filedUnit}${(child as DSLItem).operator}.${(child as DSLItem).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 console.log('mapConditionsToPostgrest1', str, DSLTree)\n return str\n}\n\nlet mapping = {\n '=': 'eq',\n '!=': 'neq',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '=<': 'lte',\n ['include']: 'cs',\n ['notinclude']: 'not.cs',\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 conditionListItem2DSL = (condition: ConditionListItem) => {\n const { field, condition: cond, val, val2, rdate, type } = condition\n let value = (val as any)?.value ? (val as any)?.value : val // 为啥需要?.valuef\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 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 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 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 let startOfThisMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n let 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 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 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 default:\n return null // 对于未支持的 rdate 值返回空字符串\n }\n}\n\nconst isInVaildValue = (date: string | number | Dayjs | undefined) => {\n return isNil(date) || date === ''\n}\n"],"names":["startOfLastWeek","endOfLastWeek"],"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 {\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 return `${(child as DSLItem).field}${filedUnit}${(child as DSLItem).operator}.${(child as DSLItem).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: 'or',\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 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 let startOfThisMonth = dayjs().startOf('month').format('YYYY-MM-DD')\n let 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 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 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 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","startOfLastWeek","endOfLastWeek"],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ interface AppContextProps {
|
|
|
22
22
|
};
|
|
23
23
|
globalFilterCondition?: ConditionBlockWrapper[];
|
|
24
24
|
setGlobalFilterCondition: React.Dispatch<React.SetStateAction<ConditionBlockWrapper[]>>;
|
|
25
|
+
formatCurrency: (val: number, decimalPlaces?: number) => string;
|
|
25
26
|
}
|
|
26
27
|
export declare const AppContext: React.Context<AppContextProps | undefined>;
|
|
27
28
|
export declare const useAppContext: () => AppContextProps;
|
|
@@ -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\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":";
|
|
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;"}
|
|
@@ -34,6 +34,7 @@ export type { ConditionBlockWrapper };
|
|
|
34
34
|
export type GlobalProps = {
|
|
35
35
|
globalFilterCondition: ConditionBlockWrapper[];
|
|
36
36
|
onGlobalFilterConditionChange: (condition: ConditionBlockWrapper[]) => void;
|
|
37
|
+
formatCurrency: (val: number, decimalPlaces?: number) => string;
|
|
37
38
|
};
|
|
38
39
|
declare const _default: React.MemoExoticComponent<(props: DashboardWorkbenchProps & GlobalProps) => import("react/jsx-runtime").JSX.Element>;
|
|
39
40
|
export default _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, useMemo, useRef, useState } from 'react'\nimport { message, Modal } from 'antd'\nimport { ExclamationCircleOutlined } from '@ant-design/icons'\nimport { Layout, Responsive, WidthProvider } from 'react-grid-layout'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useLatest, useLocalStorageState, useMemoizedFn } from 'ahooks'\nimport { omit, pick } from 'lodash-es'\nimport AddModuleBtn, { ModuleValueType } from './components/add-module-btn'\nimport AddCalendarModal from './components/add-module-modal/add-calendar-modal'\nimport AddChartModal from './components/add-module-modal/add-chart-modal'\nimport AddStatisticsModal from './components/add-module-modal/add-statistics-modal'\nimport { GlobalFilterCondition } from './components/global-filter-condition'\nimport { ConditionBlockWrapper } from './components/global-filter-condition/interface'\nimport ModuleContent, { ModuleData } from './components/module-content'\nimport ModuleHeader from './components/module-header'\nimport { AppContext } from './context'\nimport { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataItem } from './types'\nimport { findChangedItems } from './utils'\nimport './lang/index'\nimport '/node_modules/react-grid-layout/css/styles.css'\nimport './styles/index.less'\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive)\n\ninterface DashboardWorkbenchProps {\n sourceData?: SourceDataItem[]\n moduleConfigData?: ModuleConfigDataTypes\n fieldMap?: Record<string, string>\n lang?: 'zh-CN' | 'en-US'\n moduleDataApi?: ModuleDataApi\n enumDataApi?: EnumDataApi\n onCreateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onUpdateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onDeleteModule?: (val: string) => Promise<{ data: ModuleData }>\n onLayoutChange?: (layout: Layout[]) => void\n className?: string\n cols?: { lg: number; md: number; sm: number; xs: number; xxs: number }\n rowHeight?: number\n}\n\nconst DashboardWorkbench: React.FC<DashboardWorkbenchProps> = ({\n moduleConfigData,\n moduleDataApi,\n enumDataApi,\n onCreateModule,\n onUpdateModule,\n onDeleteModule,\n className = 'layout',\n cols = { lg: 12, md: 12, sm: 12, xs: 12, xxs: 12 },\n rowHeight = 79,\n}) => {\n const { t } = useTranslation()\n\n /* ============================== modules =============================== */\n const [modules, setModules] = useState<ModuleData[] | undefined>([])\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n\n useEffect(() => {\n setModules(\n moduleConfigData?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n )\n }, [moduleConfigData])\n\n const addModule = async (data: ModuleValueType) => {\n const wMultiple = data.type === 'calendar' ? 5 : 4\n const hMultiple = data.type === 'calendar' ? 5 : 3\n\n if (Array.isArray(modules) && data.type) {\n const newModuleData = {\n x: 0,\n y: 0,\n w: wMultiple,\n h: hMultiple,\n title: data.type.includes('chart') ? t('chartText') : title[data.type],\n ...data,\n type: data.type,\n }\n await onCreateModule?.(newModuleData).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setModules([...modules, { ...newModuleData, i: res.data?.id, id: res.data?.id }])\n })\n }\n }\n\n // 单个\n const updateModule = async (id: ModuleData['id'], updatedProps: Partial<ModuleData>) => {\n if (modules?.length) {\n const oldData = modules.find(m => m.id === id)\n const updatedModule = {\n ...oldData!,\n ...updatedProps,\n }\n const modulesData = modules.map(m => (m.id === id ? updatedModule : m))\n setModules(modulesData)\n await onUpdateModule?.(updatedModule).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n })\n }\n }\n\n // 批量\n const updateModules = async (updatedItems: Partial<ModuleData>[]) => {\n if (!modules?.length || !updatedItems?.length) return\n const updatedModules = modules.map(module => {\n const update = updatedItems.find(item => item.id === module.id)\n return update ? { ...module, ...update } : module\n })\n setModules(updatedModules)\n try {\n for (const updatedItem of updatedItems) {\n const res: any = await onUpdateModule?.(updatedItem as ModuleData)\n if (!res?.success) {\n throw new Error(res?.message || `Failed to update module: ${updatedItem.id}`)\n }\n }\n } catch (error: any) {\n setModules(modules)\n message.error(error.message || 'Failed to update modules')\n }\n }\n\n const deleteModule = async (id: ModuleData['id']) => {\n if (modules?.length) {\n setModules(modules.filter(m => m.id !== id))\n await onDeleteModule?.(id || '')\n }\n }\n\n /* ============================== drag =============================== */\n\n const margins: [number, number] = [10, 10]\n const [rowWidth, setRowWidth] = useState(0)\n const [, setCurrentCols] = useState<number>(cols.lg)\n\n const [isDragOrResize, setIsDragOrResize] = useState(false)\n const [isDragOrResizeEnd, setIsDragOrResizeEnd] = useState(false)\n\n const onBreakpointChange = (_breakpoint: string, cols: number) => {\n setCurrentCols(cols)\n }\n\n const onDragResizeStop = (newLayout: Layout[]) => {\n const changedItems = findChangedItems(newLayout, modules as any)\n const newChangedItems = changedItems.map(item => {\n const module = modules?.find(module => module.i === item.i)\n return { ...module, ...item }\n })\n updateModules(newChangedItems)\n }\n\n const onDragStartOrEnd = (type: 'start' | 'end', newLayout?: Layout[]) => {\n if (type === 'start') {\n setIsDragOrResize(true)\n setIsDragOrResizeEnd(true)\n } else {\n setIsDragOrResize(false)\n setTimeout(() => {\n setIsDragOrResizeEnd(false)\n }, 500)\n onDragResizeStop(newLayout || [])\n }\n }\n\n /* ============================== split =============================== */\n const [selectModuleData, setSelectModuleData] = useState<ModuleData>()\n\n const [isShowAddStatisticsModal, setIsShowAddStatisticsModal] = useState<boolean>(false)\n const [isShowAddCalendarModal, setIsShowAddCalendarModal] = useState<boolean>(false)\n const [isShowAddChartModal, setIsShowAddChartModal] = useState<boolean>(false)\n\n const handleOpenCreateModal = (val: any) => {\n if (val === 'text') {\n const data = {\n type: val,\n customData: {\n title: t('text'),\n editor: [\n {\n type: 'paragraph',\n children: [\n {\n text: '',\n },\n ],\n },\n ],\n },\n }\n addModule(data)\n } else if (val === 'statistics') {\n setIsShowAddStatisticsModal(true)\n } else if (val === 'calendar') {\n setIsShowAddCalendarModal(true)\n } else if (val?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n\n setSelectModuleData({\n title: '',\n type: val,\n w: 0,\n h: 0,\n x: 0,\n y: 0,\n })\n }\n\n const commonModalProps = {\n moduleDataApi: moduleDataApi,\n enumDataApi: enumDataApi,\n selectModuleData: selectModuleData,\n }\n const handleModalSubmit = (data: Partial<ModuleData>) => {\n if (data.id) {\n updateModule(data.id, omit(data, 'id'))\n } else {\n addModule(data)\n }\n }\n /* ============================== split =============================== */\n const title: any = {\n text: t('pb.text'),\n calendar: t('calendarText'),\n statistics: t('chartText'),\n }\n\n return (\n <div className=\"pivot-table\">\n <div className=\"bitable-block-dashboard\">\n <div className=\"bitable-block-dashboard-toolbar bitable-toolbar\">\n <div className=\"bitable-block-dashboard-toolbar--left\">\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n <GlobalFilterCondition\n style={{\n marginLeft: 10,\n }}\n />\n </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\">\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${\n isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n onBreakpointChange={onBreakpointChange}\n className={className}\n compactType=\"vertical\"\n preventCollision={false}\n cols={cols}\n margin={margins}\n rowHeight={rowHeight}\n measureBeforeMount={false}\n draggableHandle=\".isCanDrag\"\n // draggableCancel=\".isNoCanDrag\"\n onWidthChange={(containerWidth, _margin, cols) => {\n setRowWidth(containerWidth / cols - 1)\n }}\n onDragStart={() => {\n onDragStartOrEnd('start')\n }}\n onDragStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n onResizeStart={() => {\n onDragStartOrEnd('start')\n }}\n onResizeStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n style={{\n backgroundSize: `${rowWidth}px ${rowHeight + margins[0]}px`,\n backgroundPosition: `${margins[0]}px ${margins[0]}px`,\n minHeight: '100vh',\n }}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${activeId === module.id ? 'active' : ''}`}\n onClick={() => {\n setActiveId(module.id)\n }}\n key={module.id}\n data-grid={{\n i: module.id,\n x: module.x || 0,\n y: module.y || 0, // puts it at the bottom\n w: module.w || 2,\n h: module.h || 2,\n minW: 2,\n minH: 2,\n }}\n >\n <ModuleHeader\n module={module}\n defaultValue={module.title}\n onChange={val =>\n updateModule(module.id, {\n title: val,\n })\n }\n onDropdownItem={key => {\n if (key === 'edit') {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n } else if (key === 'delete') {\n Modal.confirm({\n title: t('promptTitle'),\n icon: <ExclamationCircleOutlined />,\n content: t('promptContentDeleteComponents'),\n onOk() {\n deleteModule(module.id)\n },\n })\n } else if (key === 'copy') {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }\n }}\n />\n\n <ModuleContent\n module={module}\n onUpdate={updateModule}\n moduleDataApi={moduleDataApi}\n activeId={activeId}\n onClick={() => {\n setActiveId(module.id)\n }}\n rowWidth={rowWidth}\n rowHeight={rowHeight}\n onEdit={() => {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n }}\n onDelete={() => {\n deleteModule(module.id)\n }}\n onCopy={() => {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }}\n onStartDragOrResize={() => {\n setIsDragOrResize(true)\n }}\n onStopDragOrResize={() => {\n setIsDragOrResize(false)\n }}\n />\n </div>\n ))}\n </ResponsiveReactGridLayout>\n </div>\n </div>\n </div>\n </div>\n\n <AddStatisticsModal\n {...commonModalProps}\n open={isShowAddStatisticsModal}\n onClose={() => {\n setIsShowAddStatisticsModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'statistics',\n })\n setIsShowAddStatisticsModal(false)\n }}\n />\n\n <AddCalendarModal\n {...commonModalProps}\n open={isShowAddCalendarModal}\n onClose={() => {\n setIsShowAddCalendarModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'calendar',\n })\n setIsShowAddCalendarModal(false)\n }}\n />\n\n <AddChartModal\n {...commonModalProps}\n open={isShowAddChartModal}\n // open={true}\n onClose={() => {\n setIsShowAddChartModal(false)\n }}\n onOk={data => {\n handleModalSubmit(data)\n setIsShowAddChartModal(false)\n }}\n />\n </div>\n )\n}\n\n/* ============================== split =============================== */\n\nexport type { ConditionBlockWrapper }\nexport type GlobalProps = {\n globalFilterCondition: ConditionBlockWrapper[]\n onGlobalFilterConditionChange: (condition: ConditionBlockWrapper[]) => void\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 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, useMemo, useRef, useState } from 'react'\nimport { message, Modal } from 'antd'\nimport { ExclamationCircleOutlined } from '@ant-design/icons'\nimport { Layout, Responsive, WidthProvider } from 'react-grid-layout'\nimport { useTranslation } from 'react-i18next'\nimport { useControllableValue, useLatest, useLocalStorageState, useMemoizedFn } from 'ahooks'\nimport { omit, pick } from 'lodash-es'\nimport AddModuleBtn, { ModuleValueType } from './components/add-module-btn'\nimport AddCalendarModal from './components/add-module-modal/add-calendar-modal'\nimport AddChartModal from './components/add-module-modal/add-chart-modal'\nimport AddStatisticsModal from './components/add-module-modal/add-statistics-modal'\nimport { GlobalFilterCondition } from './components/global-filter-condition'\nimport { ConditionBlockWrapper } from './components/global-filter-condition/interface'\nimport ModuleContent, { ModuleData } from './components/module-content'\nimport ModuleHeader from './components/module-header'\nimport { AppContext } from './context'\nimport { EnumDataApi, ModuleConfigDataTypes, ModuleDataApi, SourceDataItem } from './types'\nimport { findChangedItems } from './utils'\nimport './lang/index'\nimport '/node_modules/react-grid-layout/css/styles.css'\nimport './styles/index.less'\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive)\n\ninterface DashboardWorkbenchProps {\n sourceData?: SourceDataItem[]\n moduleConfigData?: ModuleConfigDataTypes\n fieldMap?: Record<string, string>\n lang?: 'zh-CN' | 'en-US'\n moduleDataApi?: ModuleDataApi\n enumDataApi?: EnumDataApi\n onCreateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onUpdateModule?: (val: ModuleData) => Promise<{ data: ModuleData }>\n onDeleteModule?: (val: string) => Promise<{ data: ModuleData }>\n onLayoutChange?: (layout: Layout[]) => void\n className?: string\n cols?: { lg: number; md: number; sm: number; xs: number; xxs: number }\n rowHeight?: number\n}\n\nconst DashboardWorkbench: React.FC<DashboardWorkbenchProps> = ({\n moduleConfigData,\n moduleDataApi,\n enumDataApi,\n onCreateModule,\n onUpdateModule,\n onDeleteModule,\n className = 'layout',\n cols = { lg: 12, md: 12, sm: 12, xs: 12, xxs: 12 },\n rowHeight = 79,\n}) => {\n const { t } = useTranslation()\n\n /* ============================== modules =============================== */\n const [modules, setModules] = useState<ModuleData[] | undefined>([])\n const [activeId, setActiveId] = useState<ModuleData['id']>()\n\n useEffect(() => {\n setModules(\n moduleConfigData?.map(item => ({\n ...item,\n i: item.i ? item.i : item.id,\n })) || []\n )\n }, [moduleConfigData])\n\n const addModule = async (data: ModuleValueType) => {\n const wMultiple = data.type === 'calendar' ? 5 : 4\n const hMultiple = data.type === 'calendar' ? 5 : 3\n\n if (Array.isArray(modules) && data.type) {\n const newModuleData = {\n x: 0,\n y: 0,\n w: wMultiple,\n h: hMultiple,\n title: data.type.includes('chart') ? t('chartText') : title[data.type],\n ...data,\n type: data.type,\n }\n await onCreateModule?.(newModuleData).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n setModules([...modules, { ...newModuleData, i: res.data?.id, id: res.data?.id }])\n })\n }\n }\n\n // 单个\n const updateModule = async (id: ModuleData['id'], updatedProps: Partial<ModuleData>) => {\n if (modules?.length) {\n const oldData = modules.find(m => m.id === id)\n const updatedModule = {\n ...oldData!,\n ...updatedProps,\n }\n const modulesData = modules.map(m => (m.id === id ? updatedModule : m))\n setModules(modulesData)\n await onUpdateModule?.(updatedModule).then((res: any) => {\n if (!res.success) {\n message.error(res.message)\n return\n }\n })\n }\n }\n\n // 批量\n const updateModules = async (updatedItems: Partial<ModuleData>[]) => {\n if (!modules?.length || !updatedItems?.length) return\n const updatedModules = modules.map(module => {\n const update = updatedItems.find(item => item.id === module.id)\n return update ? { ...module, ...update } : module\n })\n setModules(updatedModules)\n try {\n for (const updatedItem of updatedItems) {\n const res: any = await onUpdateModule?.(updatedItem as ModuleData)\n if (!res?.success) {\n throw new Error(res?.message || `Failed to update module: ${updatedItem.id}`)\n }\n }\n } catch (error: any) {\n setModules(modules)\n message.error(error.message || 'Failed to update modules')\n }\n }\n\n const deleteModule = async (id: ModuleData['id']) => {\n if (modules?.length) {\n setModules(modules.filter(m => m.id !== id))\n await onDeleteModule?.(id || '')\n }\n }\n\n /* ============================== drag =============================== */\n\n const margins: [number, number] = [10, 10]\n const [rowWidth, setRowWidth] = useState(0)\n const [, setCurrentCols] = useState<number>(cols.lg)\n\n const [isDragOrResize, setIsDragOrResize] = useState(false)\n const [isDragOrResizeEnd, setIsDragOrResizeEnd] = useState(false)\n\n const onBreakpointChange = (_breakpoint: string, cols: number) => {\n setCurrentCols(cols)\n }\n\n const onDragResizeStop = (newLayout: Layout[]) => {\n const changedItems = findChangedItems(newLayout, modules as any)\n const newChangedItems = changedItems.map(item => {\n const module = modules?.find(module => module.i === item.i)\n return { ...module, ...item }\n })\n updateModules(newChangedItems)\n }\n\n const onDragStartOrEnd = (type: 'start' | 'end', newLayout?: Layout[]) => {\n if (type === 'start') {\n setIsDragOrResize(true)\n setIsDragOrResizeEnd(true)\n } else {\n setIsDragOrResize(false)\n setTimeout(() => {\n setIsDragOrResizeEnd(false)\n }, 500)\n onDragResizeStop(newLayout || [])\n }\n }\n\n /* ============================== split =============================== */\n const [selectModuleData, setSelectModuleData] = useState<ModuleData>()\n\n const [isShowAddStatisticsModal, setIsShowAddStatisticsModal] = useState<boolean>(false)\n const [isShowAddCalendarModal, setIsShowAddCalendarModal] = useState<boolean>(false)\n const [isShowAddChartModal, setIsShowAddChartModal] = useState<boolean>(false)\n\n const handleOpenCreateModal = (val: any) => {\n if (val === 'text') {\n const data = {\n type: val,\n customData: {\n title: t('text'),\n editor: [\n {\n type: 'paragraph',\n children: [\n {\n text: '',\n },\n ],\n },\n ],\n },\n }\n addModule(data)\n } else if (val === 'statistics') {\n setIsShowAddStatisticsModal(true)\n } else if (val === 'calendar') {\n setIsShowAddCalendarModal(true)\n } else if (val?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n\n setSelectModuleData({\n title: '',\n type: val,\n w: 0,\n h: 0,\n x: 0,\n y: 0,\n })\n }\n\n const commonModalProps = {\n moduleDataApi: moduleDataApi,\n enumDataApi: enumDataApi,\n selectModuleData: selectModuleData,\n }\n const handleModalSubmit = (data: Partial<ModuleData>) => {\n if (data.id) {\n updateModule(data.id, omit(data, 'id'))\n } else {\n addModule(data)\n }\n }\n /* ============================== split =============================== */\n const title: any = {\n text: t('pb.text'),\n calendar: t('calendarText'),\n statistics: t('chartText'),\n }\n\n return (\n <div className=\"pivot-table\">\n <div className=\"bitable-block-dashboard\">\n <div className=\"bitable-block-dashboard-toolbar bitable-toolbar\">\n <div className=\"bitable-block-dashboard-toolbar--left\">\n <AddModuleBtn\n onOk={val => {\n handleOpenCreateModal(val)\n }}\n />\n <GlobalFilterCondition\n style={{\n marginLeft: 10,\n }}\n />\n </div>\n </div>\n <div className=\"bitable-block-dashboard__mount\">\n <div className=\"dashboard-container\">\n <div\n className={`dashboard-content-container ${isDragOrResize ? 'isDragOrResize' : ''} ${\n isDragOrResizeEnd ? 'isDragOrResizeEnd' : ''\n }`}\n >\n <ResponsiveReactGridLayout\n onBreakpointChange={onBreakpointChange}\n className={className}\n compactType=\"vertical\"\n preventCollision={false}\n cols={cols}\n margin={margins}\n rowHeight={rowHeight}\n measureBeforeMount={false}\n draggableHandle=\".isCanDrag\"\n // draggableCancel=\".isNoCanDrag\"\n onWidthChange={(containerWidth, _margin, cols) => {\n setRowWidth(containerWidth / cols - 1)\n }}\n onDragStart={() => {\n onDragStartOrEnd('start')\n }}\n onDragStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n onResizeStart={() => {\n onDragStartOrEnd('start')\n }}\n onResizeStop={newLayout => {\n onDragStartOrEnd('end', newLayout)\n }}\n style={{\n backgroundSize: `${rowWidth}px ${rowHeight + margins[0]}px`,\n backgroundPosition: `${margins[0]}px ${margins[0]}px`,\n minHeight: '100vh',\n }}\n >\n {modules?.map(module => (\n <div\n className={`box-dashboard ${activeId === module.id ? 'active' : ''}`}\n onClick={() => {\n setActiveId(module.id)\n }}\n key={module.id}\n data-grid={{\n i: module.id,\n x: module.x || 0,\n y: module.y || 0, // puts it at the bottom\n w: module.w || 2,\n h: module.h || 2,\n minW: 2,\n minH: 2,\n }}\n >\n <ModuleHeader\n module={module}\n defaultValue={module.title}\n onChange={val =>\n updateModule(module.id, {\n title: val,\n })\n }\n onDropdownItem={key => {\n if (key === 'edit') {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n } else if (key === 'delete') {\n Modal.confirm({\n title: t('promptTitle'),\n icon: <ExclamationCircleOutlined />,\n content: t('promptContentDeleteComponents'),\n onOk() {\n deleteModule(module.id)\n },\n })\n } else if (key === 'copy') {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }\n }}\n />\n\n <ModuleContent\n module={module}\n onUpdate={updateModule}\n moduleDataApi={moduleDataApi}\n activeId={activeId}\n onClick={() => {\n setActiveId(module.id)\n }}\n rowWidth={rowWidth}\n rowHeight={rowHeight}\n onEdit={() => {\n setActiveId(module.id)\n setSelectModuleData(module)\n if (module.type === 'statistics') {\n setIsShowAddStatisticsModal(true)\n }\n if (module.type?.includes('chart')) {\n setIsShowAddChartModal(true)\n }\n if (module.type === 'calendar') {\n setIsShowAddCalendarModal(true)\n }\n }}\n onDelete={() => {\n deleteModule(module.id)\n }}\n onCopy={() => {\n const data = JSON.parse(JSON.stringify(module))\n delete data.id\n delete data.i\n addModule(data)\n }}\n onStartDragOrResize={() => {\n setIsDragOrResize(true)\n }}\n onStopDragOrResize={() => {\n setIsDragOrResize(false)\n }}\n />\n </div>\n ))}\n </ResponsiveReactGridLayout>\n </div>\n </div>\n </div>\n </div>\n\n <AddStatisticsModal\n {...commonModalProps}\n open={isShowAddStatisticsModal}\n onClose={() => {\n setIsShowAddStatisticsModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'statistics',\n })\n setIsShowAddStatisticsModal(false)\n }}\n />\n\n <AddCalendarModal\n {...commonModalProps}\n open={isShowAddCalendarModal}\n onClose={() => {\n setIsShowAddCalendarModal(false)\n }}\n onOk={data => {\n handleModalSubmit({\n ...data,\n type: 'calendar',\n })\n setIsShowAddCalendarModal(false)\n }}\n />\n\n <AddChartModal\n {...commonModalProps}\n open={isShowAddChartModal}\n // open={true}\n onClose={() => {\n setIsShowAddChartModal(false)\n }}\n onOk={data => {\n handleModalSubmit(data)\n setIsShowAddChartModal(false)\n }}\n />\n </div>\n )\n}\n\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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"}
|
|
@@ -36,6 +36,7 @@ declare const _default: {
|
|
|
36
36
|
t5: string;
|
|
37
37
|
t6: string;
|
|
38
38
|
t7: string;
|
|
39
|
+
currency: string;
|
|
39
40
|
t8: string;
|
|
40
41
|
t9: string;
|
|
41
42
|
t10: string;
|
|
@@ -116,6 +117,9 @@ declare const _default: {
|
|
|
116
117
|
add14: string;
|
|
117
118
|
add15: string;
|
|
118
119
|
add16: string;
|
|
120
|
+
timeBefore: string;
|
|
121
|
+
timeAfter: string;
|
|
122
|
+
timeRange: string;
|
|
119
123
|
add17: string;
|
|
120
124
|
add18: string;
|
|
121
125
|
add19: string;
|
|
@@ -59,6 +59,7 @@ const statistics = {
|
|
|
59
59
|
t5: "Number (Thousand Separator)",
|
|
60
60
|
t6: "Number",
|
|
61
61
|
t7: "Percentage",
|
|
62
|
+
currency: "Currency",
|
|
62
63
|
t8: "Renminbi",
|
|
63
64
|
t9: "Dollar",
|
|
64
65
|
t10: "Statistical Value Description",
|
|
@@ -139,6 +140,9 @@ const add = {
|
|
|
139
140
|
add14: "Before(<)",
|
|
140
141
|
add15: "After(>)",
|
|
141
142
|
add16: "Within Range",
|
|
143
|
+
timeBefore: "Before (excluding the day)",
|
|
144
|
+
timeAfter: "After (excluding the day)",
|
|
145
|
+
timeRange: "Date Range (including the day)",
|
|
142
146
|
add17: "Is Empty",
|
|
143
147
|
add18: "Is Not Empty",
|
|
144
148
|
add19: "Not Equal to",
|