Skip to content

Commit 5d7adf6

Browse files
yinrouni霓君
authored andcommitted
repo-sync-2024-05-17T10:21:39+0800
1 parent 231b7d0 commit 5d7adf6

File tree

35 files changed

+1879
-37
lines changed

35 files changed

+1879
-37
lines changed

apps/platform/src/modules/component-config/component-config-registry.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class ComponentConfigRegistry extends Model {
2525

2626
registerConfigNode(component: Component, mode: ComputeMode) {
2727
if (this.hasConfigNode(component, mode)) return;
28-
const { name, domain, version, attrs, inputs } = component;
28+
const { name, domain, version, attrs = [], inputs } = component;
2929
const parent: StructConfigNode = {
3030
name: `${domain}/${name}`,
3131
domain,
@@ -43,8 +43,9 @@ export class ComponentConfigRegistry extends Model {
4343
const { prefixes } = param;
4444
if (prefixes) {
4545
this.getNodeByPath(prefixes, parent, param);
46+
} else {
47+
parent.children.push(this.createNode(param));
4648
}
47-
parent.children.push(this.createNode(param));
4849
}
4950
}
5051

@@ -61,7 +62,7 @@ export class ComponentConfigRegistry extends Model {
6162
param: ParameterNode,
6263
): ConfigItem | undefined {
6364
if (prefixes.length === 0) return;
64-
const prefix = prefixes.shift();
65+
const prefix = prefixes[0];
6566
const child = root.children.find(({ name }) => name === prefix) as StructConfigNode;
6667
if (!child) {
6768
root.children.push(this.createNode(param));
@@ -112,21 +113,26 @@ export class ComponentConfigRegistry extends Model {
112113
createNode(param: ParameterNode): ConfigItem {
113114
let isRequired = true;
114115
const { type, name, desc: docString, prefixes, custom_protobuf_cls } = param;
116+
115117
switch (type) {
116118
case 'AT_UNION_GROUP':
117119
return {
118120
name,
119121
prefixes,
120122
children: [],
121123
docString,
122-
selectedName: (param as UnionParameterNode).union.default_selection,
124+
// isRequired: false,
125+
selectedName: (param as UnionParameterNode)?.union?.default_selection,
126+
type: 'AT_UNION_GROUP',
123127
};
124128
case 'AT_STRUCT_GROUP':
125129
return {
126130
name,
127131
prefixes,
128132
children: [],
129133
docString,
134+
isRequired: false,
135+
type: 'AT_STRUCT_GROUP',
130136
};
131137
case 'AT_CUSTOM_PROTOBUF':
132138
return {

apps/platform/src/modules/component-config/component-config-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export class DefaultComponentConfigService extends Model {
6464
// leaves.push(root);
6565
// }
6666

67+
if (root.type === 'AT_UNION_GROUP') leaves.push(root as AtomicConfigNode);
6768
selectedChildren.map((c) => this.getLeavesInTree(c, leaves));
6869
return;
6970
}

apps/platform/src/modules/component-config/config-form-view.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ export const ConfigFormComponent: React.FC<IConfigFormComponent> = (prop) => {
129129
setIsEditable(true);
130130
}
131131
}, [pathname, projectEditService.canEdit.configFormDisabled]);
132+
132133
useEffect(() => {
133134
/** 1. fetch 组件信息的时候,unserializer 反序列化,转换成表单需要的格式 */
134135
const fetchGraphNode = async () => {
@@ -301,6 +302,7 @@ export const ConfigFormComponent: React.FC<IConfigFormComponent> = (prop) => {
301302
};
302303

303304
const onFormFinished = (val: Record<string, ValueOf<Attribute> | undefined>) => {
305+
console.log(val, 'valvalvalval');
304306
onSaveConfig(val);
305307
// close config drawer
306308
onClose();
@@ -394,6 +396,7 @@ export const ConfigurationNodeRender = ({
394396
}) => {
395397
const configRenderRegistry = useModel(ConfigRenderRegistry);
396398
const Render = configRenderRegistry.getRender(config, exif);
399+
397400
const defaultVal = getDefaultValue(config);
398401
const { upstreamTables } = exif;
399402

apps/platform/src/modules/component-config/config-item-render/config-render-contribution.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { BinModificationsRender } from './custom-render/binning-modification';
55
import { CalculateOpRender } from './custom-render/calculate-op-render';
66
import { CaseWhenRender } from './custom-render/case-when-render';
77
import { GroupByRender } from './custom-render/groupby-render';
8+
import { LinearModelParametersModificationRender } from './custom-render/linear-model-parameters-modification';
9+
import { UnionRender } from './custom-render/union-render';
810
import { DefaultColSelection } from './defalt-col-selection-template';
911
import { DefaultMultiTableFeatureSelection } from './default-feature-selection/default-feature-selection';
1012
import { DefaultNodeSelect } from './default-node-selection-template';
@@ -13,20 +15,33 @@ import {
1315
DefaultSwitch,
1416
DefaultInput,
1517
DefaultSelect,
18+
DefaultUnion,
1619
} from './default-render-template';
1720
import { DefaultSQLEditor } from './default-sql-editor';
1821
import { DefaultTableSelect } from './default-table-selection-temple';
1922

2023
export class DefaultConfigRender implements ConfigRenderProtocol {
2124
registerConfigRenders() {
2225
return [
26+
{
27+
canHandle: (node: CustomConfigNode) =>
28+
node.type === 'AT_CUSTOM_PROTOBUF' && node.custom_protobuf_cls === 'union'
29+
? 1
30+
: false,
31+
component: UnionRender,
32+
},
33+
{
34+
canHandle: (node: AtomicConfigNode) =>
35+
node.type === 'AT_UNION_GROUP' ? 1 : false,
36+
component: DefaultUnion,
37+
},
2338
{
2439
canHandle: (node: CustomConfigNode) =>
2540
node.type === 'AT_CUSTOM_PROTOBUF' &&
2641
node.custom_protobuf_cls === 'Binning_modifications'
2742
? 1
2843
: false,
29-
component: BinModificationsRender,
44+
component: LinearModelParametersModificationRender,
3045
},
3146
{
3247
canHandle: (node: CustomConfigNode) =>
@@ -44,6 +59,7 @@ export class DefaultConfigRender implements ConfigRenderProtocol {
4459
: false,
4560
component: CalculateOpRender,
4661
},
62+
4763
{
4864
canHandle: (node: CustomConfigNode) =>
4965
node.type === 'AT_CUSTOM_PROTOBUF' &&
@@ -53,7 +69,6 @@ export class DefaultConfigRender implements ConfigRenderProtocol {
5369
: false,
5470
component: GroupByRender,
5571
},
56-
5772
{
5873
canHandle: (node: AtomicConfigNode, renderKey?: string) => {
5974
return renderKey === 'UNION_KEY_SELECT' && node.type === 'AT_SF_TABLE_COL'

apps/platform/src/modules/component-config/config-item-render/config-render-registry.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,26 @@ export class ConfigRenderRegistry extends Model {
2525
}
2626

2727
getRender(config: ConfigItem, exif?: any) {
28-
if (
29-
(config as StructConfigNode).children &&
30-
(config as StructConfigNode).children.length > 0 &&
31-
(config as StructConfigNode).selectedName
32-
) {
33-
// TODO: render union node
34-
return;
35-
} else {
36-
const { renderKey } = exif;
37-
const selectedRenders = this.renders
38-
.map((render) => ({
39-
...render,
40-
priority: render.canHandle(config as AtomicConfigNode, renderKey),
41-
}))
42-
.filter((render) => render.priority !== false);
43-
44-
if (selectedRenders.length === 0) return;
45-
46-
// TODO: sort priority
47-
return selectedRenders[0].component;
48-
}
28+
// if (
29+
// (config as StructConfigNode).children &&
30+
// (config as StructConfigNode).children.length > 0 &&
31+
// (config as StructConfigNode).selectedName
32+
// ) {
33+
// // TODO: render union node
34+
// return;
35+
// } else {
36+
const { renderKey } = exif;
37+
const selectedRenders = this.renders
38+
.map((render) => ({
39+
...render,
40+
priority: render.canHandle(config as AtomicConfigNode, renderKey),
41+
}))
42+
.filter((render) => render.priority !== false);
43+
44+
if (selectedRenders.length === 0) return;
45+
46+
// TODO: sort priority
47+
return selectedRenders[0].component;
4948
}
49+
// }
5050
}

apps/platform/src/modules/component-config/config-item-render/custom-render/case-when-render/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const opOptions = [
3737
];
3838

3939
export const caseWhenSerializer = (val, clsName) => {
40+
console.log(val, 'caseWhenSerializer');
4041
const name = 'custom_value';
4142
const cw = val;
4243
const { whens, else_value, output_column, as_label, float_epsilon } = cw || {};
@@ -109,7 +110,6 @@ export const caseWhenUnserializer = (val?) => {
109110

110111
export const CaseWhenRender = (prop: { node: AtomicConfigNode }) => {
111112
const { node, upstreamTables = [] } = prop;
112-
113113
const [tables, setTables] = useState<IDataTable[]>([]);
114114
const [outputTables, setOutputTables] = useState<IOutputDataTable[]>([]);
115115
const [columns, setColumns] = useState<{ label: string; value: string }[]>([]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { Drawer, Spin } from 'antd';
2+
3+
import { Model, useModel } from '@/util/valtio-helper';
4+
5+
import { BinModificationsRenderView } from '..';
6+
import { LinearModelParametersTable } from '../linear-model-parameters-table';
7+
import { ToolBar } from '../toolbar';
8+
import SaveBtn from '../toolbar/save-btn';
9+
10+
const ModificationResultDrawer = () => {
11+
const { isVisible, setVisible } = useModel(BinningResultDrawerView);
12+
const { loading, setCurrOperation } = useModel(BinModificationsRenderView);
13+
14+
return (
15+
<Drawer
16+
title={'编辑线性模型参数'}
17+
width={1200}
18+
closable
19+
destroyOnClose
20+
open={isVisible}
21+
bodyStyle={{ padding: '16px 16px 0 16px' }}
22+
onClose={() => {
23+
setCurrOperation(undefined);
24+
setVisible(false);
25+
}}
26+
>
27+
<Spin spinning={loading} tip={'...'}>
28+
<ToolBar />
29+
<LinearModelParametersTable />
30+
{/* 保存按钮 */}
31+
<SaveBtn />
32+
</Spin>
33+
</Drawer>
34+
);
35+
};
36+
37+
export class BinningResultDrawerView extends Model {
38+
isVisible = false;
39+
40+
setVisible = (visible: boolean) => {
41+
this.isVisible = visible;
42+
};
43+
}
44+
45+
export default ModificationResultDrawer;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// 渲染 结果表的 标签
2+
export const getLabel = (leftBound: number | string, rightBound: number | string) => {
3+
if (leftBound === 0 && rightBound === 0) {
4+
return 'ELSE';
5+
} else {
6+
let rightBoundBracket = ']';
7+
if (typeof rightBound === 'string' && rightBound.includes('Infinity')) {
8+
rightBoundBracket = ')';
9+
}
10+
return `(${leftBound}, ${rightBound}${rightBoundBracket}`;
11+
}
12+
};
13+
14+
// 返回 引擎所需要的 区间值
15+
export const getBoundValue = (label: string) => {
16+
if (label === 'ELSE') return [0, 0];
17+
18+
const left = label.split(',')[0].replace('(', '');
19+
const right = label.split(',')[1].replace(']', '').replace(')', '');
20+
21+
return [
22+
left.includes('Infinity') ? left : Number(left),
23+
right.includes('Infinity') ? right : Number(right),
24+
];
25+
};
26+
27+
// 检查相邻的两个数字是否连续
28+
export function checkIsConsecutive(arr: number[]) {
29+
arr.sort((a, b) => a - b);
30+
for (let i = 0; i < arr.length - 1; i++) {
31+
if (arr[i] + 1 !== arr[i + 1]) {
32+
return false;
33+
}
34+
}
35+
return true;
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
.binningTable {
2+
margin: 0 16px;
3+
}
4+
5+
.expandedTableContent {
6+
:global(.ant-table-pagination) {
7+
margin-top: 32px;
8+
margin-bottom: 0;
9+
}
10+
}
11+
12+
.saveBtnArea {
13+
position: sticky;
14+
bottom: 0;
15+
left: 0;
16+
height: 52px;
17+
padding: 16px 16px 0;
18+
background-color: white;
19+
}

0 commit comments

Comments
 (0)