Upgrading to Angular 20:
Replaced checked in package-lock.json by regenerated one. Ran ng update @angular/core@20 @angular/cli@20 Ran npm install @angular-builders/jest@^20.0.0 @fortawesome/angular-fontawesome@^3.0.0 @swimlane/ngx-graph@^11 Ran npm install ngx-mat-select-search@^8.0.2. Ran ng update @angular/material@20. Updated all eslint and typescript to the latest versions. Removed @angular-devkit/schematics. Updated fontawesome. Updated rxjs and tslib. Moved required node version from 16 to 20. Updated jest-preset-angular. Set preserveWhitespaces to false. Corrected two type declarations in two typescript files to make ng serve run without errors. Removed unused angular-devkit/schematics from view-user.component.ts . Updated list of supported browsers. Upgraded prettier. Ran prettier . --write the first time. Ran prettier . --write the second time. Ran ng generate @angular/core:inject with defaults, excepted a handful of files. Fixed remaining eslint problems. Added dist directory to ignores in eslint.config.js. Let prettier fix formatting, almost everything is just line breaks. Made htmlhint ignore @if and @for Angular constructs. Updated node version in Github workflow to 22.12.0 (build.yml). Updated .env.ts. Updated Angular datetime format strings from YYYY-MM-DD to yyyy-MM-dd. Merged changes from dev into angular20 branch.
This commit is contained in:
@@ -8,9 +8,11 @@
|
||||
'responsive-column'
|
||||
]"
|
||||
>
|
||||
<div *ngFor="let formfield of formfields" [ngClass]="'flex-' + layout.flex + ' responsive-flex-full'">
|
||||
<mifosx-formfield [formfield]="formfield" [form]="form" class="flex-fill"></mifosx-formfield>
|
||||
</div>
|
||||
@for (formfield of formfields; track formfield) {
|
||||
<div [ngClass]="'flex-' + layout.flex + ' responsive-flex-full'">
|
||||
<mifosx-formfield [formfield]="formfield" [form]="form" class="flex-fill"></mifosx-formfield>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<mat-dialog-actions class="layout-row layout-xs-column layout-align-center gap-2percent" align="end">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Component, OnInit, Inject } from '@angular/core';
|
||||
import { Component, OnInit, inject } from '@angular/core';
|
||||
import {
|
||||
MatDialogRef,
|
||||
MAT_DIALOG_DATA,
|
||||
@@ -13,7 +13,7 @@ import { FormfieldBase } from './formfield/model/formfield-base';
|
||||
|
||||
import { FormGroupService } from './form-group.service';
|
||||
import { CdkScrollable } from '@angular/cdk/scrolling';
|
||||
import { NgClass, NgFor } from '@angular/common';
|
||||
import { NgClass } from '@angular/common';
|
||||
import { FormfieldComponent } from './formfield/formfield.component';
|
||||
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
|
||||
|
||||
@@ -35,6 +35,10 @@ const layoutGap = 2;
|
||||
]
|
||||
})
|
||||
export class FormDialogComponent implements OnInit {
|
||||
dialogRef = inject<MatDialogRef<FormDialogComponent>>(MatDialogRef);
|
||||
data = inject(MAT_DIALOG_DATA);
|
||||
private formGroupService = inject(FormGroupService);
|
||||
|
||||
layout: {
|
||||
columns: number;
|
||||
columnWidth?: number;
|
||||
@@ -54,11 +58,9 @@ export class FormDialogComponent implements OnInit {
|
||||
formfields: FormfieldBase[];
|
||||
pristine: boolean;
|
||||
|
||||
constructor(
|
||||
public dialogRef: MatDialogRef<FormDialogComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: any,
|
||||
private formGroupService: FormGroupService
|
||||
) {
|
||||
constructor() {
|
||||
const data = this.data;
|
||||
|
||||
this.dialogRef.disableClose = data.disableClose !== undefined ? data.disableClose : true;
|
||||
this.formfields = data.formfields.sort(
|
||||
(formfieldA: FormfieldBase, formfieldB: FormfieldBase) => formfieldA.order - formfieldB.order
|
||||
|
||||
@@ -1,80 +1,95 @@
|
||||
<div [formGroup]="form" class="flex-fill">
|
||||
<div *ngIf="formfield.controlType === 'input' || formfield.controlType === 'select'" class="flex-fill">
|
||||
<mat-form-field class="flex-fill">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
@if (formfield.controlType === 'input' || formfield.controlType === 'select') {
|
||||
<div class="flex-fill">
|
||||
<mat-form-field class="flex-fill">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
@if (formfield.controlType === 'input') {
|
||||
<input
|
||||
[type]="formfield.type"
|
||||
matInput
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
/>
|
||||
}
|
||||
@if (form.controls[formfield.controlName].hasError('max')) {
|
||||
<mat-error>
|
||||
<strong>{{ 'labels.commons.Maximum Value must be' | translate }} {{ formfield.max }}</strong>
|
||||
</mat-error>
|
||||
}
|
||||
@if (form.controls[formfield.controlName].hasError('min')) {
|
||||
<mat-error>
|
||||
<strong>{{ 'labels.commons.Minimum Value must be' | translate }} {{ formfield.min }}</strong>
|
||||
</mat-error>
|
||||
}
|
||||
@if (formfield.controlType === 'select') {
|
||||
<mat-select [formControlName]="formfield.controlName" [required]="formfield.required">
|
||||
@for (option of formfield.options.data; track option) {
|
||||
<mat-option [value]="option[formfield.options.value]">
|
||||
{{ option[formfield.options.label] }}
|
||||
</mat-option>
|
||||
}
|
||||
</mat-select>
|
||||
}
|
||||
@if (form.controls[formfield.controlName].hasError('required')) {
|
||||
<mat-error>
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
}
|
||||
</mat-form-field>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (formfield.controlType === 'datepicker') {
|
||||
<mat-form-field class="flex-fill" Fill (click)="datePicker.open()">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
<input
|
||||
*ngIf="formfield.controlType === 'input'"
|
||||
[type]="formfield.type"
|
||||
matInput
|
||||
[matDatepicker]="datePicker"
|
||||
[min]="formfield.minDate"
|
||||
[max]="formfield.maxDate"
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
/>
|
||||
<mat-error *ngIf="form.controls[formfield.controlName].hasError('max')">
|
||||
<strong>{{ 'labels.commons.Maximum Value must be' | translate }} {{ formfield.max }}</strong>
|
||||
</mat-error>
|
||||
<mat-error *ngIf="form.controls[formfield.controlName].hasError('min')">
|
||||
<strong>{{ 'labels.commons.Minimum Value must be' | translate }} {{ formfield.min }}</strong>
|
||||
</mat-error>
|
||||
<mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #datePicker></mat-datepicker>
|
||||
@if (form.controls[formfield.controlName].hasError('required')) {
|
||||
<mat-error>
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
}
|
||||
</mat-form-field>
|
||||
}
|
||||
|
||||
<mat-select
|
||||
*ngIf="formfield.controlType === 'select'"
|
||||
@if (formfield.controlType === 'datetimepicker') {
|
||||
<mat-form-field class="flex-fill" Fill (click)="datePicker.open()">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
<input
|
||||
matInput
|
||||
type="datetime-local"
|
||||
[min]="formfield.minDate"
|
||||
[max]="formfield.maxDate"
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
>
|
||||
<mat-option *ngFor="let option of formfield.options.data" [value]="option[formfield.options.value]">
|
||||
{{ option[formfield.options.label] }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
|
||||
<mat-error *ngIf="form.controls[formfield.controlName].hasError('required')">
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
/>
|
||||
@if (form.controls[formfield.controlName].hasError('required')) {
|
||||
<mat-error>
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
}
|
||||
</mat-form-field>
|
||||
</div>
|
||||
}
|
||||
|
||||
<mat-form-field class="flex-fill" Fill *ngIf="formfield.controlType === 'datepicker'" (click)="datePicker.open()">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
<input
|
||||
matInput
|
||||
[matDatepicker]="datePicker"
|
||||
[min]="formfield.minDate"
|
||||
[max]="formfield.maxDate"
|
||||
@if (formfield.controlType === 'checkbox') {
|
||||
<mat-checkbox
|
||||
labelPosition="before"
|
||||
[checked]="formfield.value"
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
/>
|
||||
<mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #datePicker></mat-datepicker>
|
||||
<mat-error *ngIf="form.controls[formfield.controlName].hasError('required')">
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field class="flex-fill" Fill *ngIf="formfield.controlType === 'datetimepicker'" (click)="datePicker.open()">
|
||||
<mat-label>{{ formfield.label }}</mat-label>
|
||||
<input
|
||||
matInput
|
||||
type="datetime-local"
|
||||
[min]="formfield.minDate"
|
||||
[max]="formfield.maxDate"
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
/>
|
||||
<mat-error *ngIf="form.controls[formfield.controlName].hasError('required')">
|
||||
{{ formfield.label }} {{ 'labels.commons.is' | translate }}
|
||||
<strong>{{ 'labels.commons.required' | translate }}</strong>
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-checkbox
|
||||
*ngIf="formfield.controlType === 'checkbox'"
|
||||
labelPosition="before"
|
||||
[checked]="formfield.value"
|
||||
[formControlName]="formfield.controlName"
|
||||
[required]="formfield.required"
|
||||
>
|
||||
{{ formfield.label }}
|
||||
</mat-checkbox>
|
||||
>
|
||||
{{ formfield.label }}
|
||||
</mat-checkbox>
|
||||
}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user