Skip to content

Commit 2e217bd

Browse files
committed
feat: add mergeObject and improve updateOptions
1 parent 7668c7e commit 2e217bd

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/utils.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { GuiFields } from '@acrodata/gui';
2-
import { isObject, isString, merge } from 'lodash-es';
2+
import { isArray, isObject, isString, merge, mergeWith } from 'lodash-es';
33
import { VisualDataSource } from './interfaces';
44

55
/**
@@ -43,7 +43,6 @@ export function mergeDataSource(dataSource?: VisualDataSource, config?: VisualDa
4343
}
4444
}
4545

46-
4746
/**
4847
* 从 GUI 配置中获取默认配置项
4948
* @param config GUI 配置
@@ -67,3 +66,13 @@ export function getOptionsFromConfig(config: GuiFields, options: Record<string,
6766
}
6867
return options;
6968
}
69+
70+
/**
71+
* 合并对象,数组值直接替换
72+
* @param object
73+
* @param source
74+
* @returns
75+
*/
76+
export function mergeObject(object: Record<string, any>, source: Record<string, any>) {
77+
return mergeWith(object, source, (obj, src) => (isArray(src) ? src : undefined));
78+
}

src/visual-component.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { GuiFields } from '@acrodata/gui';
22
import { ChangeDetectorRef, EventEmitter, inject } from '@angular/core';
3-
import { defaults, isEmpty, merge } from 'lodash-es';
3+
import { defaults, isEmpty } from 'lodash-es';
44
import {
55
VisualActions,
66
VisualApis,
@@ -10,7 +10,7 @@ import {
1010
VisualEvents,
1111
VisualInteractions,
1212
} from './interfaces';
13-
import { getOptionsFromConfig, mergeDataSource } from './utils';
13+
import { getOptionsFromConfig, mergeDataSource, mergeObject } from './utils';
1414

1515
export class VisualComponent {
1616
constructor(configs?: Record<string, any>) {
@@ -157,6 +157,12 @@ export class VisualComponent {
157157
* @param newOptions
158158
*/
159159
updateOptions(newOptions: Record<string, any>) {
160+
if (!isEmpty(newOptions) && this.options != newOptions) {
161+
mergeObject(this.options, newOptions);
162+
}
163+
if (!isEmpty(this.apis)) {
164+
this.render(this.responseData.source, this.options);
165+
}
160166
this.detectChanges();
161167
}
162168

@@ -165,7 +171,7 @@ export class VisualComponent {
165171
* @param newAttr
166172
*/
167173
updateAttr(newAttr: VisualAttr) {
168-
merge(this.attr, newAttr);
174+
mergeObject(this.attr, newAttr);
169175
this.detectChanges();
170176
}
171177

@@ -197,8 +203,9 @@ export class VisualComponent {
197203
* @description options 组件配置项
198204
*/
199205
requestData(data: { config?: any; options?: any }) {
206+
// TODO: data 重新设计,object 表示传一个参数,array 表示传多个参数
200207
mergeDataSource(this.dataConfig?.['source']?.dataSource, data.config || {});
201-
merge(this.options, data.options || {});
208+
mergeObject(this.options, data.options || {});
202209
this.request(this.dataConfig['source'].dataSource)
203210
.then(res => this.requestSucceeded.emit(res))
204211
.catch(err => this.requestFailed.emit(err));

0 commit comments

Comments
 (0)