Skip to content

Commit 0c854c2

Browse files
committed
feat: add getOptionsFromConfig function
1 parent d021399 commit 0c854c2

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/utils.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { isString, isObject, merge } from 'lodash-es';
1+
import { GuiFields } from '@acrodata/gui';
2+
import { isObject, isString, merge } from 'lodash-es';
23
import { VisualDataSource } from './interfaces';
34

45
/**
@@ -41,3 +42,28 @@ export function mergeDataSource(dataSource?: VisualDataSource, config?: VisualDa
4142
}
4243
}
4344
}
45+
46+
47+
/**
48+
* 从 GUI 配置中获取默认配置项
49+
* @param config GUI 配置
50+
* @param options 默认配置项
51+
* @returns
52+
*/
53+
export function getOptionsFromConfig(config: GuiFields, options: Record<string, any>) {
54+
for (const key of Object.keys(config)) {
55+
const fieldCfg = config[key];
56+
if (fieldCfg.default != null) {
57+
options[key] = fieldCfg.default;
58+
} else {
59+
if (fieldCfg.type === 'group' || fieldCfg.type === 'menu' || fieldCfg.type === 'menuItem') {
60+
options[key] = getOptionsFromConfig(fieldCfg.children as GuiFields, {});
61+
} else if (fieldCfg.type === 'tabs') {
62+
options[key] = [];
63+
} else {
64+
options[key] = null;
65+
}
66+
}
67+
}
68+
return options;
69+
}

src/visual-component.ts

Lines changed: 3 additions & 3 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 { isEmpty, merge } from 'lodash-es';
3+
import { defaults, isEmpty, merge } from 'lodash-es';
44
import {
55
VisualActions,
66
VisualApis,
@@ -10,14 +10,14 @@ import {
1010
VisualEvents,
1111
VisualInteractions,
1212
} from './interfaces';
13-
import { mergeDataSource } from './utils';
13+
import { getOptionsFromConfig, mergeDataSource } from './utils';
1414

1515
export class VisualComponent {
1616
constructor(configs?: Record<string, any>) {
1717
if (configs) {
1818
this.attr = { ...configs['attr'] };
1919
this.config = { ...configs['config'] };
20-
this.options = { ...configs['options'] };
20+
this.options = defaults(configs['options'], getOptionsFromConfig(this.config, {}));
2121
this.apis = { ...configs['apis'] };
2222
this.data = { ...configs['data'] };
2323
this.resources = { ...configs['resources'] };

0 commit comments

Comments
 (0)