Skip to content

Commit a59468f

Browse files
committed
[故障] 解决升级ng18之后,表单中的下拉框在多选时清空无法触发校验的问题
Change-Id: Id2e2ea9423344f346e264219be42d83e6d555e1e
1 parent 4b8e9a8 commit a59468f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+333
-71
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
4+
const importPathMap = [
5+
{from: "../../form-field", updatedFrom: "@rdkmaster/formly/form-field"},
6+
{from: "../../button-bar", updatedFrom: "@rdkmaster/formly/button-bar"},
7+
{from: "../../input", updatedFrom: "@rdkmaster/formly/input"},
8+
{from: "../../checkbox", updatedFrom: "@rdkmaster/formly/checkbox"},
9+
{from: "../../radio", updatedFrom: "@rdkmaster/formly/radio"},
10+
{from: "../../switch", updatedFrom: "@rdkmaster/formly/switch"},
11+
{from: "../../textarea", updatedFrom: "@rdkmaster/formly/textarea"},
12+
{from: "../../select", updatedFrom: "@rdkmaster/formly/select"},
13+
{from: "../../list-lite", updatedFrom: "@rdkmaster/formly/list-lite"},
14+
{from: "../../tile-lite", updatedFrom: "@rdkmaster/formly/tile-lite"},
15+
{from: "../../slider", updatedFrom: "@rdkmaster/formly/slider"},
16+
{from: "../../cascade", updatedFrom: "@rdkmaster/formly/cascade"},
17+
{from: "../../time", updatedFrom: "@rdkmaster/formly/time"},
18+
{from: "../../button", updatedFrom: "@rdkmaster/formly/button"},
19+
{from: "../../icon", updatedFrom: "@rdkmaster/formly/icon"},
20+
{from: "../../table", updatedFrom: "@rdkmaster/formly/table"},
21+
{from: "../../template", updatedFrom: "@rdkmaster/formly/template"},
22+
{from: "../../header", updatedFrom: "@rdkmaster/formly/header"},
23+
{from: "../../upload", updatedFrom: "@rdkmaster/formly/upload"},
24+
{from: "../../repeat", updatedFrom: "@rdkmaster/formly/repeat"},
25+
{from: "../../tree", updatedFrom: "@rdkmaster/formly/tree"}
26+
];
27+
28+
const directoryPath = 'src-tmp/ngx-formly';
29+
30+
module.exports = updateFormlyImport;
31+
32+
if (require.main === module) {
33+
updateFormlyImport();
34+
}
35+
36+
function updateFormlyImport() {
37+
console.log("----- update formly import start -----");
38+
const startTime = new Date().getTime();
39+
processDirectory(directoryPath);
40+
console.log("----- update formly import done ----- 耗时:", new Date().getTime() - startTime, "ms");
41+
}
42+
43+
function processDirectory(dirPath) {
44+
const files = fs.readdirSync(dirPath);
45+
46+
files.forEach(file => {
47+
const fullPath = path.join(dirPath, file);
48+
const stat = fs.statSync(fullPath);
49+
50+
if (stat.isDirectory()) {
51+
// 递归处理子目录
52+
processDirectory(fullPath);
53+
} else if (path.extname(file) === '.ts') {
54+
// 处理 .ts 文件
55+
const data = fs.readFileSync(fullPath, 'utf8');
56+
57+
let updatedData = data;
58+
importPathMap.forEach(({from, updatedFrom}) => {
59+
const regex = new RegExp(from, 'g');
60+
updatedData = updatedData.replace(regex, updatedFrom);
61+
});
62+
63+
fs.writeFileSync(fullPath, updatedData, 'utf8');
64+
}
65+
});
66+
}

build/tools/build-lib/tasks/build.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {publishPackage, whoami} from './publish';
1414
import {cleanAll} from "./clean";
1515
import {buildFormly} from "./build-formly";
1616
const flattenCodes = require("../../../scripts/flatten-codes.js");
17+
const updateFormlyImport = require("../../../scripts/update-formly-import.js");
1718
const generateGetterSetter = require("../../../scripts/generate-getter-setter.js");
1819
const processSource = require("../../../scripts/create-tmp-src.js");
1920
const CleanCSS = require('clean-css');
@@ -133,6 +134,7 @@ async function build(packageName: string) {
133134
const ngVersion = (global as any).ngVersion;
134135
console.log(`----- Run Task: copy src to src-tmp and generate getter setter in src-tmp -----`);
135136
processSource();
137+
updateFormlyImport();
136138
if (ngVersion != 'ng9') {
137139
generateGetterSetter(['src-tmp']);
138140
flattenCodes();

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
"build-mobile": "node build/tools/build-lib/build-lib.js build:jigsaw-mobile",
1616
"build-mobile-ng9": "node build/tools/build-lib/build-lib.js build:jigsaw-mobile ng9",
1717
"build-omni": "node build/tools/build-lib/build-lib.js build:jigsaw-omni",
18+
"build-governance-jigsaw": "node build/tools/build-lib/build-lib.js build:governance-jigsaw",
1819
"build-omni-ng9": "node build/tools/build-lib/build-lib.js build:jigsaw-omni ng9",
1920
"build-formly": "node build/tools/build-lib/build-lib.js build:formly",
21+
"build-governance-formly": "node build/tools/build-lib/build-lib.js build:governance-formly",
2022
"build-formly-ng9": "node build/tools/build-lib/build-lib.js build:formly ng9",
2123
"publish-all": "node build/tools/build-lib/build-lib.js publish:all ng18",
2224
"publish-normal": "node build/tools/build-lib/build-lib.js publish:normal ng18",

src/app/for-internal/app.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {PCDemoListComponent} from "./pc-demo-list.component";
2424
import {MobileDemoListComponent} from "./mobile-demo-list.component";
2525
import {SwitchDemoComponent} from "./switch-demo.component";
2626
import {DemoCodeComponent} from "./demo-code.component";
27+
import {FormlyModule} from '@ngx-formly/core';
2728

2829
@NgModule({
2930
declarations: [
@@ -43,7 +44,8 @@ import {DemoCodeComponent} from "./demo-code.component";
4344
], { useHash: true }),
4445
JigsawRootModule, JigsawFloatModule, JigsawListLiteModule, JigsawTreeExtModule, JigsawButtonBarModule,
4546
JigsawCheckBoxModule, JigsawNumericInputModule, JigsawSelectModule,
46-
TranslateModule.forRoot()
47+
TranslateModule.forRoot(),
48+
FormlyModule.forRoot({extras: {lazyRender: true, resetFieldOnHide: false}})
4749
],
4850
providers: [
4951
{

src/app/for-internal/demo/pc/form/demo-set.module.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
import {NgModule} from "@angular/core";
22
import {RouterModule} from "@angular/router";
33
import {TemplateDrivenDemoModule} from "./template-driven/demo.module";
4+
import {NgxFormlyDemoModule} from "./ngx-formly/demo.module";
45

56
import {TemplateDrivenDemoComponent} from "./template-driven/demo.component";
7+
import {NgxFormlyDemoComponent} from "./ngx-formly/demo.component";
68

79
export const routerConfig = [
810
{
911
path: 'template-driven', component: TemplateDrivenDemoComponent
12+
},
13+
{
14+
path: 'ngx-formly', component: NgxFormlyDemoComponent
1015
}
1116
];
1217

1318
@NgModule({
1419
imports: [
1520
RouterModule.forChild(routerConfig),
1621
TemplateDrivenDemoModule,
22+
NgxFormlyDemoModule
1723
]
1824
})
1925
export class FormDemoModule {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.form-container {
2+
padding: 16px;
3+
width: 400px;
4+
}
5+
6+
.awade-form-group {
7+
height: 100%;
8+
display: flex;
9+
justify-content: flex-start;
10+
}
11+
12+
.awade-form-group-field {
13+
flex: 1;
14+
min-width: 0;
15+
}
16+
17+
[class*='awade-form-group-'] {
18+
margin-left: 0;
19+
}
20+
21+
[class*='awade-form-group-'] ~ [class*='awade-form-group-'] {
22+
margin-left: 16px;
23+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!-- ignore the following lines, they are not important to this demo -->
2+
<jigsaw-demo-description [summary]="summary" [content]="description">
3+
</jigsaw-demo-description>
4+
5+
6+
<!-- start to learn the demo from here -->
7+
<div class="form-container">
8+
9+
<form #elementForm="ngForm" [style.width]="'100%'" [style.height]="'100%'" [formGroup]="ngForm">
10+
<formly-form style="height: 100%; display: flex; flex-direction: column;" [form]="ngForm"
11+
[fields]="fields" [(model)]="model"></formly-form>
12+
</form>
13+
14+
</div>
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import {Component, ElementRef, ViewChild} from "@angular/core";
2+
import {FormGroup, UntypedFormGroup} from '@angular/forms';
3+
import {FormlyFieldConfig} from "@ngx-formly/core";
4+
import {
5+
ArrayCollection, TimeGr, TimeService, TableData,
6+
ColumnDefine
7+
} from "jigsaw/public_api";
8+
9+
@Component({
10+
templateUrl: 'demo.component.html',
11+
styleUrls: ['demo.component.css']
12+
})
13+
export class NgxFormlyDemoComponent {
14+
@ViewChild('elementForm', {read: ElementRef})
15+
elementForm: ElementRef;
16+
17+
public ngForm: UntypedFormGroup = new UntypedFormGroup({});
18+
public fields: FormlyFieldConfig[];
19+
public model = {
20+
input: "Jigsaw Formly",
21+
single: "抖音直播",
22+
multiple: ["抖音直播", "支付宝支付"],
23+
multipleGroup: [{ groupName: "城市1", data: [{ label: "南京" }] }]
24+
};
25+
26+
ngOnInit() {
27+
this.fields = [
28+
{
29+
"type": "input",
30+
"key": "input",
31+
"templateOptions": {
32+
"label": "输入框",
33+
"required": true
34+
},
35+
"wrappers": ["form-field"]
36+
},
37+
{
38+
"type": "select",
39+
"key": "single",
40+
"templateOptions": {
41+
"label": "单选下拉",
42+
"data": [
43+
"抖音直播",
44+
"支付宝支付",
45+
"学习强国",
46+
"微信支付",
47+
"淘宝购物"
48+
],
49+
"required": true,
50+
"clearable": true
51+
},
52+
"wrappers": ["form-field"]
53+
},
54+
{
55+
"type": "select",
56+
"key": "multiple",
57+
"templateOptions": {
58+
"label": "多选下拉",
59+
"data": [
60+
"抖音直播",
61+
"支付宝支付",
62+
"学习强国",
63+
"微信支付",
64+
"淘宝购物"
65+
],
66+
"optionCount": 10,
67+
"multipleSelect": true,
68+
"searchable": true,
69+
"useStatistics": false,
70+
"required": true,
71+
"clearable": true
72+
},
73+
"wrappers": ["form-field"]
74+
},,
75+
{
76+
"type": "select-group",
77+
"key": "multipleGroup",
78+
"templateOptions": {
79+
"label": "多选分组下拉",
80+
"data": [
81+
{ groupName: "城市1", data: [{ label: "北京" }, { label: "上海" }, { label: "南京" }] },
82+
{ groupName: "城市2", data: [{ label: "深圳" }, { label: "长沙" }, { label: "西安" }] }
83+
],
84+
"multipleSelect": true,
85+
"searchable": true,
86+
"useStatistics": false,
87+
"required": true,
88+
"clearable": true
89+
},
90+
"wrappers": ["form-field"]
91+
},
92+
{
93+
"fieldGroupClassName": "awade-form-group",
94+
"fieldGroup": [
95+
{
96+
"type": "button",
97+
"key": "button",
98+
"templateOptions": {
99+
"hideLabel": true,
100+
"width": "100px",
101+
"content": "表单数据",
102+
"click": this.onClick.bind(this)
103+
},
104+
"className": "awade-form-group-button",
105+
"wrappers": ["form-field"]
106+
}
107+
]
108+
}
109+
]
110+
}
111+
112+
public onClick() {
113+
console.log(">>>>>>>>> ", this.model);
114+
}
115+
116+
// ====================================================================
117+
// ignore the following lines, they are not important to this demo
118+
// ====================================================================
119+
summary: string = '';
120+
description: string = '';
121+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {NgModule} from "@angular/core";
2+
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
3+
import {CommonModule} from "@angular/common";
4+
import {JigsawButtonModule} from "jigsaw/public_api";
5+
import {JigsawDemoDescriptionModule} from "app/for-internal/description/demo-description";
6+
import {NgxFormlyDemoComponent} from "./demo.component";
7+
8+
import {FormlyModule} from '@ngx-formly/core';
9+
import {FormlyJigsawModule} from "@rdkmaster/formly";
10+
11+
@NgModule({
12+
imports: [
13+
FormsModule, ReactiveFormsModule, CommonModule, FormlyJigsawModule, FormlyModule.forChild(), JigsawButtonModule, JigsawDemoDescriptionModule
14+
],
15+
declarations: [NgxFormlyDemoComponent],
16+
exports: [NgxFormlyDemoComponent]
17+
})
18+
export class NgxFormlyDemoModule {
19+
20+
}

src/app/for-internal/tsconfig.app.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
"outDir": "../../../out-tsc/app",
55
"baseUrl": "../../",
66
"types": ["node"],
7-
"target": "ES2015"
7+
"target": "ES2015",
8+
"paths": {
9+
"@rdkmaster/jigsaw": ["jigsaw/public_api"],
10+
"@rdkmaster/formly": ["ngx-formly/jigsaw/src/public_api"]
11+
}
812
},
913
"files": [
1014
"main.ts",

0 commit comments

Comments
 (0)