Update to angular 21, switch to signal forms for column editor
All checks were successful
build / build (push) Successful in 1m28s

This commit is contained in:
2025-12-15 22:49:47 +10:30
parent 845aa1ee04
commit b8bcb7f506
3 changed files with 536 additions and 292 deletions

742
bun.lock

File diff suppressed because it is too large Load Diff

View File

@@ -10,31 +10,31 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^20.3.6", "@angular/animations": "^21.0.5",
"@angular/common": "^20.3.6", "@angular/common": "^21.0.5",
"@angular/compiler": "^20.3.6", "@angular/compiler": "^21.0.5",
"@angular/core": "^20.3.6", "@angular/core": "^21.0.5",
"@angular/forms": "^20.3.6", "@angular/forms": "^21.0.5",
"@angular/platform-browser": "^20.3.6", "@angular/platform-browser": "^21.0.5",
"@angular/platform-browser-dynamic": "^20.3.6", "@angular/platform-browser-dynamic": "^21.0.5",
"@angular/router": "^20.3.6", "@angular/router": "^21.0.5",
"@duckdb/duckdb-wasm": "^1.30.0", "@duckdb/duckdb-wasm": "^1.30.0",
"@primeng/themes": "20.2.0", "@primeng/themes": "^21.0.0",
"@tailwindcss/postcss": "^4.1.15", "@tailwindcss/postcss": "^4.1.15",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"prettier": "^3.6.2", "prettier": "^3.6.2",
"primeicons": "^7.0.0", "primeicons": "^7.0.0",
"primeng": "20.2.0", "primeng": "^21.0.0",
"rxjs": "~7.8.2", "rxjs": "~7.8.2",
"tailwindcss": "^4.1.15", "tailwindcss": "^4.1.15",
"tailwindcss-primeui": "0.6.1", "tailwindcss-primeui": "^0.6.1",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"zod": "4.1.12" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@angular/build": "^20.3.6", "@angular/build": "^21.0.3",
"@angular/cli": "^20.3.6", "@angular/cli": "^21.0.3",
"@angular/compiler-cli": "^20.3.6", "@angular/compiler-cli": "^21.0.5",
"@tauri-apps/cli": "^2.9.0", "@tauri-apps/cli": "^2.9.0",
"@types/jasmine": "~5.1.12", "@types/jasmine": "~5.1.12",
"jasmine-core": "~5.12.0", "jasmine-core": "~5.12.0",
@@ -43,6 +43,7 @@
"karma-coverage": "~2.2.1", "karma-coverage": "~2.2.1",
"karma-jasmine": "~5.1.0", "karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0", "karma-jasmine-html-reporter": "~2.1.0",
"postcss": "^8.5.3",
"typescript": "~5.9.3" "typescript": "~5.9.3"
} }
} }

View File

@@ -14,6 +14,7 @@ import { Dialog } from 'primeng/dialog';
import { FloatLabel } from 'primeng/floatlabel'; import { FloatLabel } from 'primeng/floatlabel';
import { InputText } from 'primeng/inputtext'; import { InputText } from 'primeng/inputtext';
import { Select } from 'primeng/select'; import { Select } from 'primeng/select';
import { Field, form } from '@angular/forms/signals';
@Component({ @Component({
selector: 'app-column-editor', selector: 'app-column-editor',
@@ -28,6 +29,7 @@ import { Select } from 'primeng/select';
FloatLabel, FloatLabel,
InputText, InputText,
Select, Select,
Field,
], ],
template: ` template: `
<p-accordion [value]="0"> <p-accordion [value]="0">
@@ -65,29 +67,25 @@ import { Select } from 'primeng/select';
</p-accordion-panel> </p-accordion-panel>
</p-accordion> </p-accordion>
<p-dialog [(visible)]="editDialogVisible" header="Edit Column"> <p-dialog [(visible)]="editDialogVisible" header="Edit Column">
@let editingColumn = this.editingColumn(); <p-float-label variant="in">
@if (editingColumn) { <input pInputText id="column-edit-name" [field]="editingColumn.name" />
<p-float-label> <label for="column-edit-name">Name</label>
<input </p-float-label>
pInputText <p-float-label variant="in">
id="column-edit-name" <p-select
[(ngModel)]="editingColumn.name" inputId="column-edit-type"
/> [field]="editingColumn.type"
<label for="column-edit-name">Name</label> ></p-select>
</p-float-label> <label for="column-edit-type">Type</label>
<p-float-label> </p-float-label>
<p-select inputId="column-edit-type"></p-select> <div class="flex items-center gap-2">
<label for="column-edit-type">Type</label> <p-check-box
</p-float-label> [field]="editingColumn.enabled"
<div class="flex items-center gap-2"> [binary]="true"
<p-check-box inputId="column-edit-enabled"
[(ngModel)]="editingColumn.enabled" ></p-check-box>
[binary]="true" <label for="column-edit-enabled">Enabled</label>
inputId="column-edit-enabled" </div>
></p-check-box>
<label for="column-edit-enabled">Enabled</label>
</div>
}
</p-dialog> </p-dialog>
`, `,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@@ -96,7 +94,14 @@ export class ColumnEditorComponent {
columns = model<Column[]>(); columns = model<Column[]>();
protected editDialogVisible = signal(false); protected editDialogVisible = signal(false);
protected editingColumn = signal<Column | null>(null);
protected currentColumn = signal<Column>({
name: '',
enabled: true,
type: 'string',
});
protected editingColumn = form(this.currentColumn);
protected checkboxChanged(index: number) { protected checkboxChanged(index: number) {
this.columns.update((columns) => { this.columns.update((columns) => {
@@ -115,7 +120,7 @@ export class ColumnEditorComponent {
protected editColumn(index: number) { protected editColumn(index: number) {
const columns = this.columns(); const columns = this.columns();
if (columns) { if (columns) {
this.editingColumn.set(columns[index]); this.currentColumn.set(columns[index]);
this.editDialogVisible.set(true); this.editDialogVisible.set(true);
} }
} }