Skip to content

Commit

Permalink
fix: 初始化图层类型未触发更新情况
Browse files Browse the repository at this point in the history
  • Loading branch information
lvisei committed Nov 28, 2023
1 parent fed3b6b commit bb93dbe
Show file tree
Hide file tree
Showing 24 changed files with 86 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ const toValues = (config: LayerRegisterFormResultType<ChinaAdminLayerStyleAttrib
*/
const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<ChinaAdminLayerStyleAttributeValue> => {
const sourceConfig = {
parser: { type: 'json' },
countryAdConfig: {
countryGranularity: values.countryGranularity,
countryAdType: values.countryAdType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ const toValues = (config: LayerRegisterFormResultType<FlowLayerStyleAttributeVal
const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<FlowLayerStyleAttributeValue> => {
const sourceConfig = {
parser: {
type: 'json',
x: values.longitude,
y: values.latitude,
x1: values.targetLongitude,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const getPropertiesFieldsFormSchemas = (props: WidgetRegisterFormProps) => {
const { layers } = props;
const layerSchemaList = layers.map((item) => {
return {
[`items.${item.id}.${item.sourceConfig?.datasetId}`]: {
[`items.${item.id}.${item.sourceConfig.datasetId}`]: {
title: item.metadata.name,
type: 'boolean',
'x-decorator': 'FormItem',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ const toValues = (config: LayerRegisterFormResultType<LineLayerStyleAttributeVal
const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<LineLayerStyleAttributeValue> => {
const sourceConfig = {
parser: {
type: 'json',
x: values.longitude,
y: values.latitude,
x1: values.targetLongitude,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<Bu
const pointCoordinate = values.geometry ? { geometry: values.geometry } : { x: values.longitude, y: values.latitude };
const sourceConfig = {
parser: {
type: 'json',
...pointCoordinate,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ const toValues = (config: LayerRegisterFormResultType<ChoroplethLayerStyleAttrib
const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<ChoroplethLayerStyleAttributeValue> => {
const sourceConfig = {
parser: {
type: 'json',
geometry: values.geometry,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<Gr

const sourceConfig = {
parser: {
type: 'json',
...pointCoordinate,
},
transforms: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ const toValues = (config: LayerRegisterFormResultType<ChoroplethLayerStyleAttrib
const fromValues = (style: Record<string, any>): LayerRegisterFormResultType<ChoroplethLayerStyleAttributeValue> => {
const sourceConfig = {
parser: {
type: 'json',
hexagonId: style.hexagonId,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<He
const pointCoordinate = values.geometry ? { geometry: values.geometry } : { x: values.longitude, y: values.latitude };
const sourceConfig = {
parser: {
type: 'json',
...pointCoordinate,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<He

const sourceConfig = {
parser: {
type: 'json',
...pointCoordinate,
},
transforms: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<Ic
const pointCoordinate = values.geometry ? { geometry: values.geometry } : { x: values.longitude, y: values.latitude };
const sourceConfig = {
parser: {
type: 'json',
...pointCoordinate,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ const fromValues = (values: Record<string, any>): LayerRegisterFormResultType<Li

const sourceConfig = {
parser: {
type: 'json',
...coordinate,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const getLayerFieldsFormSchemas = (props: WidgetRegisterFormProps) => {
const layerSchemaList = layers
.filter((item) => !['GridLayer', 'HexbinLayer', 'HeatmapLayer'].includes(item.type))
.map((item) => {
const dataset = datasets.find((items) => items.id === item.sourceConfig?.datasetId);
const dataset = datasets.find((items) => items.id === item.sourceConfig.datasetId);
if (dataset === undefined || !isLocalOrRemoteDataset(dataset)) return undefined;

const columns = dataset?.columns || [];
Expand Down
24 changes: 12 additions & 12 deletions packages/li-editor/src/utils/spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ const getFieldsToLayerPopupShow = (dataset: EditorDataset, maxDefaultTooltips: n
*/
export const getAutoFindLayerPopup = (layers: LayerSchema[], datasets: EditorDataset[], maxDefaultTooltips = 6) => {
const items = layers.map((layer) => {
const dataset = datasets.find((d) => d.id === layer.sourceConfig?.datasetId);
const dataset = datasets.find((d) => d.id === layer.sourceConfig.datasetId);
return {
layerId: layer.id,
fields: dataset ? getFieldsToLayerPopupShow(dataset, maxDefaultTooltips) : [],
Expand Down Expand Up @@ -308,8 +308,8 @@ export const getAutoFindLayerPopup = (layers: LayerSchema[], datasets: EditorDat
};

const getPointLayerBounds = (dataset: EditorDataset, layer: LayerSchema) => {
if (layer.sourceConfig === undefined) return null;
const { x, y, geometry } = layer.sourceConfig?.parser;
if (layer.sourceConfig?.parser === undefined) return null;
const { x, y, geometry } = layer.sourceConfig.parser;
const sampleData = dataset.getSampleData();

// 经纬度情况
Expand Down Expand Up @@ -337,8 +337,8 @@ const LayersBoundsMap = new Map<string, (dataset: EditorDataset, layer: LayerSch
[
'LineLayer',
(dataset: EditorDataset, layer: LayerSchema) => {
if (layer.sourceConfig === undefined) return null;
const { x, y, x1, y1, geometry } = layer.sourceConfig?.parser;
if (layer.sourceConfig?.parser === undefined) return null;
const { x, y, x1, y1, geometry } = layer.sourceConfig.parser;
const sampleData = dataset.getSampleData();

// 起点终点情况
Expand Down Expand Up @@ -366,8 +366,8 @@ const LayersBoundsMap = new Map<string, (dataset: EditorDataset, layer: LayerSch
[
'ArcLayer',
(dataset: EditorDataset, layer: LayerSchema) => {
if (layer.sourceConfig === undefined) return null;
const { x, y, x1, y1 } = layer.sourceConfig?.parser;
if (layer.sourceConfig?.parser === undefined) return null;
const { x, y, x1, y1 } = layer.sourceConfig.parser;
const sampleData = dataset.getSampleData();

// 起点终点情况
Expand All @@ -391,8 +391,8 @@ const LayersBoundsMap = new Map<string, (dataset: EditorDataset, layer: LayerSch
[
'ChoroplethLayer',
(dataset: EditorDataset, layer: LayerSchema) => {
if (layer.sourceConfig === undefined) return null;
const { geometry } = layer.sourceConfig?.parser;
if (layer.sourceConfig?.parser === undefined) return null;
const { geometry } = layer.sourceConfig.parser;
const sampleData = dataset.getSampleData(10000);

// geometry 情况
Expand All @@ -408,8 +408,8 @@ const LayersBoundsMap = new Map<string, (dataset: EditorDataset, layer: LayerSch
[
'H3HexagonLayer',
(dataset: EditorDataset, layer: LayerSchema) => {
if (layer.sourceConfig === undefined) return null;
const { hexagonId } = layer.sourceConfig?.parser;
if (layer.sourceConfig?.parser === undefined) return null;
const { hexagonId } = layer.sourceConfig.parser;
const sampleData = dataset.getSampleData(10000);

if (hexagonId) {
Expand Down Expand Up @@ -437,7 +437,7 @@ const LayersBoundsMap = new Map<string, (dataset: EditorDataset, layer: LayerSch
*/
export const getLayersBounds = (layers: LayerSchema[], datasets: EditorDataset[]): LayerBounds | null => {
const boundsList = layers.map((layer) => {
const dataset = datasets.find((d) => d.id === layer.sourceConfig?.datasetId);
const dataset = datasets.find((d) => d.id === layer.sourceConfig.datasetId);
const getLayerBounds = LayersBoundsMap.get(layer.type);
if (!dataset || !getLayerBounds) return null;

Expand Down
5 changes: 0 additions & 5 deletions packages/li-editor/src/utils/validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,6 @@ export const isValidLayer = (layer: LayerSchema) => {
return false;
}

const resetSourceConfig = omit(layer.sourceConfig, 'datasetId');
if (isEmpty(resetSourceConfig)) {
return false;
}

return true;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ const DatasetItem = (props: DatasetItemProps) => {
};

const getDelLayersCount = (dataSourceID: string) => {
return state.layers.filter((layer) => layer.sourceConfig?.datasetId === dataSourceID).length;
return state.layers.filter((layer) => layer.sourceConfig.datasetId === dataSourceID).length;
};

const onDeleteDataset = () => {
updateState((draft) => {
const delDataIndex = draft.datasets.findIndex((source) => source.id === datasetSchema.id);
draft.layers = draft.layers.filter((layer) => layer.sourceConfig?.datasetId !== datasetSchema.id);
draft.layers = draft.layers.filter((layer) => layer.sourceConfig.datasetId !== datasetSchema.id);
draft.datasets.splice(delDataIndex, 1);
});
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@ import {
ColorRangeSelector,
FieldSelect,
FormCollapse,
IconSelector,
IconScaleSelector,
IconSelector,
Offset,
ScaleSelector,
ResterScaleSelector,
ScaleSelector,
Slider,
SliderRange,
} from '@antv/li-p2';
import type { DatasetFieldWithMeta, ImplementLayer, LayerRegisterFormResultType, LayerSchema } from '@antv/li-sdk';
import { Form, FormItem, Input, NumberPicker, Radio, Select, Switch } from '@formily/antd-v5';
import type { Form as FormInstance } from '@formily/core';
import { createForm, onFormValuesChange } from '@formily/core';
import { createForm, onFormMount, onFormValuesChange } from '@formily/core';
import { createSchemaField } from '@formily/react';
import { useMemoizedFn } from 'ahooks';
import { debounce } from 'lodash-es';
Expand Down Expand Up @@ -67,18 +67,20 @@ const StyleForm: React.FC<StyleFormProps> = (props) => {
[registerForm.components],
);

const handleFormValuesChange = useMemoizedFn((formInstance: FormInstance<Record<string, any>>) => {
formInstance
.submit<Record<string, any>>()
.then((values) => {
const formatValues = (registerForm.fromValues ? registerForm.fromValues(values) : values) as LayerConfig;
const handleFormValuesChange = useMemoizedFn(
debounce((formInstance: FormInstance<Record<string, any>>) => {
formInstance
.submit<Record<string, any>>()
.then((values) => {
const formatValues = (registerForm.fromValues ? registerForm.fromValues(values) : values) as LayerConfig;

onChange(formatValues);
})
.catch((values) => {
// console.log('submit rejected', values);
});
});
onChange(formatValues);
})
.catch((values) => {
// console.log('submit rejected', values);
});
}),
);

// 坐标配置和样式配置表单
// 更新可视化类型时重新生成新的表单,避免 values 重复
Expand All @@ -91,7 +93,9 @@ const StyleForm: React.FC<StyleFormProps> = (props) => {
initialValues: _initialValues,
effects() {
// 数据实时变化
onFormValuesChange(debounce(handleFormValuesChange, 150));
onFormValuesChange(handleFormValuesChange);
// 表单初始化时,触发一次提交,检查一下必填项
onFormMount(handleFormValuesChange);
},
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,23 @@ import BaseFormSchemaField from '../BaseFormSchemaField';
import './index.less';
import StyleForm from './StyleForm';

export type LayerFormValue = Pick<LayerSchema, 'type' | 'sourceConfig' | 'visConfig'>;
type LayerStyleFormValue = Pick<LayerSchema, 'sourceConfig' | 'visConfig'>;

type LayerFormProps = {
className?: string;
config: LayerSchema;
onChange: (config: Pick<LayerSchema, 'type' | 'sourceConfig' | 'visConfig'>) => void;
onChange: (config: LayerFormValue) => void;
};

const LayerForm: React.FC<LayerFormProps> = ({ className, config, onChange }) => {
const { state } = useEditorState();
const [visType, setVisType] = useState(config.type);
const [datasetId, setDatasetId] = useState(config?.sourceConfig?.datasetId);
const editorDataset = useEditorDataset(datasetId!);
const [datasetId, setDatasetId] = useState(config.sourceConfig.datasetId);
const editorDataset = useEditorDataset(datasetId);
const columns = useMemo(() => (editorDataset ? editorDataset.columns : []), [editorDataset]);

const [initialValues, setInitialValues] = useState<Pick<LayerSchema, 'sourceConfig' | 'visConfig'>>(
const [initialStyleValue, setInitialStyleValue] = useState<LayerStyleFormValue>(
pick(config, ['sourceConfig', 'visConfig']),
);

Expand All @@ -51,17 +54,34 @@ const LayerForm: React.FC<LayerFormProps> = ({ className, config, onChange }) =>
});
}, [datasetFields, editorDataset?.data]);

const handleFormValuesChange = useMemoizedFn((styleConfig: Pick<LayerSchema, 'sourceConfig' | 'visConfig'>) => {
if (styleConfig.sourceConfig && datasetId) {
styleConfig.sourceConfig.datasetId = datasetId;
const onFormValuesChange = (visType_: string, datasetId_: string, styleConfig: LayerStyleFormValue) => {
if (styleConfig.sourceConfig && datasetId_) {
styleConfig.sourceConfig.datasetId = datasetId_;
}

const layerConfig: Pick<LayerSchema, 'type' | 'sourceConfig' | 'visConfig'> = {
type: visType,
const layerConfig: LayerFormValue = {
type: visType_,
...styleConfig,
};

onChange(layerConfig);
};

const handleVisTypeChange = useMemoizedFn((type: string) => {
const defaultVisConfig = appService.getImplementLayerDefaultVis(type);
const _initialStyleValue: LayerStyleFormValue = {
sourceConfig: { datasetId },
visConfig: defaultVisConfig,
};

// 更新可视化类型
setVisType(type);
// 设置表单默认值
setInitialStyleValue(_initialStyleValue);
});

const handleStyleFormValuesChange = useMemoizedFn((styleConfig: LayerStyleFormValue) => {
onFormValuesChange(visType, datasetId, styleConfig);
});

// 基础配置表单
Expand All @@ -71,20 +91,13 @@ const LayerForm: React.FC<LayerFormProps> = ({ className, config, onChange }) =>
effects() {
// 数据集更新时,同步更新表数据字段
onFieldValueChange('datasetId', (field) => {
setDatasetId(field?.value);
const id = field?.value;
setDatasetId(id);
});
// 可视化类型更新时,同步更新可视化图层表单
onFieldValueChange('visType', (field) => {
const type = field.value;
const defaultVisConfig = appService.getImplementLayerDefaultVis(type);
const values = {
sourceConfig: {} as LayerSchema['sourceConfig'],
visConfig: defaultVisConfig,
};
// 更新可视化类型
setVisType(type);
// 设置表单默认值
setInitialValues(values);
handleVisTypeChange(type);
});
},
});
Expand All @@ -110,10 +123,10 @@ const LayerForm: React.FC<LayerFormProps> = ({ className, config, onChange }) =>
{/* 坐标配置和样式配置 */}
{implementLayer && (
<StyleForm
initialValues={initialValues}
initialValues={initialStyleValue}
implementLayer={implementLayer}
datasetFields={datasetFieldList}
onChange={handleFormValuesChange}
onChange={handleStyleFormValuesChange}
/>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import React, { useCallback, useRef, useState } from 'react';
import LayerName from '../../../components/EditName';
import { useEditorService, useEditorState } from '../../../hooks';
import './index.less';
import type { LayerFormValue } from './LayerForm';
import LayerForm from './LayerForm';

type LayerAttributeProps = {
Expand Down Expand Up @@ -49,7 +50,7 @@ const LayerAttribute: React.FC<LayerAttributeProps> = (props) => {
onBack();
};

const handleValuesChange = useCallback((layerConfig: Pick<LayerSchema, 'type' | 'sourceConfig' | 'visConfig'>) => {
const handleValuesChange = useCallback((layerConfig: LayerFormValue) => {
updateState((draft) => {
const index = draft.layers.findIndex((item) => item.id === layerIdRef.current);
if (index !== -1) {
Expand Down
Loading

0 comments on commit bb93dbe

Please sign in to comment.