mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-07-02 11:12:20 +08:00
refactor: extract to SetTheCountOfColumnsDisplayedInARow (#4211)
* refactor: extract * chore: revert
This commit is contained in:
parent
35825ac77b
commit
e5152af4c2
@ -0,0 +1,72 @@
|
|||||||
|
import { ISchema, useField, useFieldSchema } from '@formily/react';
|
||||||
|
import _ from 'lodash';
|
||||||
|
import React, { useMemo } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { columnCountMarks } from '../../../../schema-component/antd/grid-card/GridCard.Designer';
|
||||||
|
import {
|
||||||
|
defaultColumnCount,
|
||||||
|
gridSizes,
|
||||||
|
screenSizeMaps,
|
||||||
|
screenSizeTitleMaps,
|
||||||
|
} from '../../../../schema-component/antd/grid-card/options';
|
||||||
|
import { useDesignable } from '../../../../schema-component/hooks';
|
||||||
|
import { SchemaSettingsModalItem } from '../../../../schema-settings';
|
||||||
|
|
||||||
|
export function SetTheCountOfColumnsDisplayedInARow() {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const fieldSchema = useFieldSchema();
|
||||||
|
const field = useField();
|
||||||
|
const { dn } = useDesignable();
|
||||||
|
const columnCount = field.decoratorProps.columnCount || defaultColumnCount;
|
||||||
|
|
||||||
|
const columnCountSchema = useMemo(() => {
|
||||||
|
return {
|
||||||
|
'x-component': 'Slider',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-component-props': {
|
||||||
|
min: 1,
|
||||||
|
max: 24,
|
||||||
|
marks: columnCountMarks,
|
||||||
|
tooltip: {
|
||||||
|
formatter: (value) => `${value}${t('Column')}`,
|
||||||
|
},
|
||||||
|
step: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}, [t]);
|
||||||
|
|
||||||
|
const columnCountProperties = useMemo(() => {
|
||||||
|
return gridSizes.reduce((o, k) => {
|
||||||
|
o[k] = {
|
||||||
|
...columnCountSchema,
|
||||||
|
title: t(screenSizeTitleMaps[k]),
|
||||||
|
description: `${t('Screen size')} ${screenSizeMaps[k]} ${t('pixels')}`,
|
||||||
|
};
|
||||||
|
return o;
|
||||||
|
}, {});
|
||||||
|
}, [columnCountSchema, t]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SchemaSettingsModalItem
|
||||||
|
title={t('Set the count of columns displayed in a row')}
|
||||||
|
initialValues={columnCount}
|
||||||
|
schema={
|
||||||
|
{
|
||||||
|
type: 'object',
|
||||||
|
title: t('Set the count of columns displayed in a row'),
|
||||||
|
properties: columnCountProperties,
|
||||||
|
} as ISchema
|
||||||
|
}
|
||||||
|
onSubmit={(columnCount) => {
|
||||||
|
_.set(fieldSchema, 'x-decorator-props.columnCount', columnCount);
|
||||||
|
field.decoratorProps.columnCount = columnCount;
|
||||||
|
dn.emit('patch', {
|
||||||
|
schema: {
|
||||||
|
['x-uid']: fieldSchema['x-uid'],
|
||||||
|
'x-decorator-props': fieldSchema['x-decorator-props'],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
@ -2,85 +2,23 @@ import { ArrayItems } from '@formily/antd-v5';
|
|||||||
import { ISchema } from '@formily/json-schema';
|
import { ISchema } from '@formily/json-schema';
|
||||||
import { useField, useFieldSchema } from '@formily/react';
|
import { useField, useFieldSchema } from '@formily/react';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { useMemo } from 'react';
|
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
||||||
import { useFormBlockContext } from '../../../../block-provider';
|
import { useFormBlockContext } from '../../../../block-provider';
|
||||||
import { useCollection_deprecated, useSortFields } from '../../../../collection-manager';
|
import { useCollection_deprecated, useSortFields } from '../../../../collection-manager';
|
||||||
import { removeNullCondition, useDesignable } from '../../../../schema-component';
|
import { removeNullCondition, useDesignable } from '../../../../schema-component';
|
||||||
import {
|
import { pageSizeOptions } from '../../../../schema-component/antd/grid-card/options';
|
||||||
defaultColumnCount,
|
|
||||||
gridSizes,
|
|
||||||
pageSizeOptions,
|
|
||||||
screenSizeMaps,
|
|
||||||
screenSizeTitleMaps,
|
|
||||||
} from '../../../../schema-component/antd/grid-card/options';
|
|
||||||
import { SchemaSettingsTemplate } from '../../../../schema-settings';
|
import { SchemaSettingsTemplate } from '../../../../schema-settings';
|
||||||
import { SchemaSettingsDataScope } from '../../../../schema-settings/SchemaSettingsDataScope';
|
import { SchemaSettingsDataScope } from '../../../../schema-settings/SchemaSettingsDataScope';
|
||||||
import { setDataLoadingModeSettingsItem } from '../details-multi/setDataLoadingModeSettingsItem';
|
import { setDataLoadingModeSettingsItem } from '../details-multi/setDataLoadingModeSettingsItem';
|
||||||
import { columnCountMarks } from './utils';
|
import { SetTheCountOfColumnsDisplayedInARow } from './SetTheCountOfColumnsDisplayedInARow';
|
||||||
|
|
||||||
export const gridCardBlockSettings = new SchemaSettings({
|
export const gridCardBlockSettings = new SchemaSettings({
|
||||||
name: 'blockSettings:gridCard',
|
name: 'blockSettings:gridCard',
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
name: 'SetTheCountOfColumnsDisplayedInARow',
|
name: 'SetTheCountOfColumnsDisplayedInARow',
|
||||||
type: 'modal',
|
Component: SetTheCountOfColumnsDisplayedInARow,
|
||||||
useComponentProps() {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
const fieldSchema = useFieldSchema();
|
|
||||||
const field = useField();
|
|
||||||
const { dn } = useDesignable();
|
|
||||||
const columnCount = field.decoratorProps.columnCount || defaultColumnCount;
|
|
||||||
|
|
||||||
const columnCountSchema = useMemo(() => {
|
|
||||||
return {
|
|
||||||
'x-component': 'Slider',
|
|
||||||
'x-decorator': 'FormItem',
|
|
||||||
'x-component-props': {
|
|
||||||
min: 1,
|
|
||||||
max: 24,
|
|
||||||
marks: columnCountMarks,
|
|
||||||
tooltip: {
|
|
||||||
formatter: (value) => `${value}${t('Column')}`,
|
|
||||||
},
|
|
||||||
step: null,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}, [t]);
|
|
||||||
|
|
||||||
const columnCountProperties = useMemo(() => {
|
|
||||||
return gridSizes.reduce((o, k) => {
|
|
||||||
o[k] = {
|
|
||||||
...columnCountSchema,
|
|
||||||
title: t(screenSizeTitleMaps[k]),
|
|
||||||
description: `${t('Screen size')} ${screenSizeMaps[k]} ${t('pixels')}`,
|
|
||||||
};
|
|
||||||
return o;
|
|
||||||
}, {});
|
|
||||||
}, [columnCountSchema, t]);
|
|
||||||
|
|
||||||
return {
|
|
||||||
title: t('Set the count of columns displayed in a row'),
|
|
||||||
initialValues: columnCount,
|
|
||||||
schema: {
|
|
||||||
type: 'object',
|
|
||||||
title: t('Set the count of columns displayed in a row'),
|
|
||||||
properties: columnCountProperties,
|
|
||||||
} as ISchema,
|
|
||||||
|
|
||||||
onSubmit: (columnCount) => {
|
|
||||||
_.set(fieldSchema, 'x-decorator-props.columnCount', columnCount);
|
|
||||||
field.decoratorProps.columnCount = columnCount;
|
|
||||||
dn.emit('patch', {
|
|
||||||
schema: {
|
|
||||||
['x-uid']: fieldSchema['x-uid'],
|
|
||||||
'x-decorator-props': fieldSchema['x-decorator-props'],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'SetTheDataScope',
|
name: 'SetTheDataScope',
|
||||||
|
@ -6,6 +6,8 @@ import React, { useMemo } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useFormBlockContext } from '../../../block-provider';
|
import { useFormBlockContext } from '../../../block-provider';
|
||||||
import { useCollection_deprecated, useSortFields } from '../../../collection-manager';
|
import { useCollection_deprecated, useSortFields } from '../../../collection-manager';
|
||||||
|
import { SetDataLoadingMode } from '../../../modules/blocks/data-blocks/details-multi/setDataLoadingModeSettingsItem';
|
||||||
|
import { SetTheCountOfColumnsDisplayedInARow } from '../../../modules/blocks/data-blocks/grid-card/SetTheCountOfColumnsDisplayedInARow';
|
||||||
import { useRecord } from '../../../record-provider';
|
import { useRecord } from '../../../record-provider';
|
||||||
import {
|
import {
|
||||||
GeneralSchemaDesigner,
|
GeneralSchemaDesigner,
|
||||||
@ -15,15 +17,14 @@ import {
|
|||||||
SchemaSettingsSelectItem,
|
SchemaSettingsSelectItem,
|
||||||
SchemaSettingsTemplate,
|
SchemaSettingsTemplate,
|
||||||
} from '../../../schema-settings';
|
} from '../../../schema-settings';
|
||||||
|
import { SchemaSettingsDataScope } from '../../../schema-settings/SchemaSettingsDataScope';
|
||||||
import { useSchemaTemplate } from '../../../schema-templates';
|
import { useSchemaTemplate } from '../../../schema-templates';
|
||||||
import { SchemaComponentOptions } from '../../core';
|
import { SchemaComponentOptions } from '../../core';
|
||||||
import { useDesignable } from '../../hooks';
|
import { useDesignable } from '../../hooks';
|
||||||
import { removeNullCondition } from '../filter';
|
import { removeNullCondition } from '../filter';
|
||||||
import { defaultColumnCount, gridSizes, pageSizeOptions, screenSizeMaps, screenSizeTitleMaps } from './options';
|
import { defaultColumnCount, gridSizes, pageSizeOptions, screenSizeMaps, screenSizeTitleMaps } from './options';
|
||||||
import { SchemaSettingsDataScope } from '../../../schema-settings/SchemaSettingsDataScope';
|
|
||||||
import { SetDataLoadingMode } from '../../../modules/blocks/data-blocks/details-multi/setDataLoadingModeSettingsItem';
|
|
||||||
|
|
||||||
const columnCountMarks = [1, 2, 3, 4, 6, 8, 12, 24].reduce((obj, cur) => {
|
export const columnCountMarks = [1, 2, 3, 4, 6, 8, 12, 24].reduce((obj, cur) => {
|
||||||
obj[cur] = cur;
|
obj[cur] = cur;
|
||||||
return obj;
|
return obj;
|
||||||
}, {});
|
}, {});
|
||||||
@ -84,27 +85,7 @@ export const GridCardDesigner = () => {
|
|||||||
return (
|
return (
|
||||||
<GeneralSchemaDesigner template={template} title={title || name}>
|
<GeneralSchemaDesigner template={template} title={title || name}>
|
||||||
<SchemaComponentOptions components={{ Slider }}>
|
<SchemaComponentOptions components={{ Slider }}>
|
||||||
<SchemaSettingsModalItem
|
<SetTheCountOfColumnsDisplayedInARow />
|
||||||
title={t('Set the count of columns displayed in a row')}
|
|
||||||
initialValues={columnCount}
|
|
||||||
schema={
|
|
||||||
{
|
|
||||||
type: 'object',
|
|
||||||
title: t('Set the count of columns displayed in a row'),
|
|
||||||
properties: columnCountProperties,
|
|
||||||
} as ISchema
|
|
||||||
}
|
|
||||||
onSubmit={(columnCount) => {
|
|
||||||
_.set(fieldSchema, 'x-decorator-props.columnCount', columnCount);
|
|
||||||
field.decoratorProps.columnCount = columnCount;
|
|
||||||
dn.emit('patch', {
|
|
||||||
schema: {
|
|
||||||
['x-uid']: fieldSchema['x-uid'],
|
|
||||||
'x-decorator-props': fieldSchema['x-decorator-props'],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<SchemaSettingsDataScope
|
<SchemaSettingsDataScope
|
||||||
collectionName={name}
|
collectionName={name}
|
||||||
defaultFilter={fieldSchema?.['x-decorator-props']?.params?.filter || {}}
|
defaultFilter={fieldSchema?.['x-decorator-props']?.params?.filter || {}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user