From 9c1594bf82556d9a1bcb94f9b724df967f3094b4 Mon Sep 17 00:00:00 2001 From: Demerson Carvalho Date: Tue, 10 Feb 2026 16:44:14 -0300 Subject: [PATCH] DECAF-26 update --- .../card-title/card-title.component.ts | 4 +- src/app/pages/leaflet/leaflet.page.ts | 39 +++++++++---------- src/lib/engine/NgxFormDirective.ts | 1 + src/lib/engine/NgxModelPageDirective.ts | 22 +++++++---- src/lib/engine/interfaces.ts | 2 + 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/app/components/card-title/card-title.component.ts b/src/app/components/card-title/card-title.component.ts index bd369ed7..236672ac 100644 --- a/src/app/components/card-title/card-title.component.ts +++ b/src/app/components/card-title/card-title.component.ts @@ -1,6 +1,4 @@ import { Component, Input, OnInit } from '@angular/core'; -import { RouterLink } from '@angular/router'; -import { IonRouterLink } from '@ionic/angular/standalone'; import { TranslatePipe } from '@ngx-translate/core'; import { AppSwitcherComponent } from '../switcher/switcher.component'; import { ITabItem } from 'src/app/ew/utils/interfaces'; @@ -12,7 +10,7 @@ import { OperationKeys } from '@decaf-ts/db-decorators'; templateUrl: './card-title.component.html', styleUrls: ['./card-title.component.scss'], standalone: true, - imports: [AppCardTitleComponent, TranslatePipe, AppSwitcherComponent, IonRouterLink, RouterLink], + imports: [TranslatePipe, AppSwitcherComponent], }) export class AppCardTitleComponent extends NgxComponentDirective implements OnInit { @Input({ required: true }) diff --git a/src/app/pages/leaflet/leaflet.page.ts b/src/app/pages/leaflet/leaflet.page.ts index 96393063..c267c303 100644 --- a/src/app/pages/leaflet/leaflet.page.ts +++ b/src/app/pages/leaflet/leaflet.page.ts @@ -1,28 +1,25 @@ -import { Component, OnInit } from "@angular/core"; -import { IonContent } from "@ionic/angular/standalone"; -import { TranslatePipe } from "@ngx-translate/core"; -import { HeaderComponent } from "src/app/components/header/header.component"; -import { ContainerComponent } from "src/app/components/container/container.component"; -import { NgxModelPageDirective } from "src/lib/engine"; -import { CardComponent } from "src/lib/components/card/card.component"; -import { ModelRendererComponent } from "src/lib/components/model-renderer/model-renderer.component"; -import { EmptyStateComponent } from "src/lib/components/empty-state/empty-state.component"; -import { Leaflet } from "src/app/ew/fabric/Leaflet"; -import { TableComponent } from "src/lib/components"; -import { OperationKeys } from "@decaf-ts/db-decorators"; -import { AppCardTitleComponent } from "src/app/components/card-title/card-title.component"; +import { Component, OnInit } from '@angular/core'; +import { IonContent } from '@ionic/angular/standalone'; +import { TranslatePipe } from '@ngx-translate/core'; +import { HeaderComponent } from 'src/app/components/header/header.component'; +import { ContainerComponent } from 'src/app/components/container/container.component'; +import { NgxModelPageDirective } from 'src/lib/engine'; +import { ModelRendererComponent } from 'src/lib/components/model-renderer/model-renderer.component'; +import { EmptyStateComponent } from 'src/lib/components/empty-state/empty-state.component'; +import { Leaflet } from 'src/app/ew/fabric/Leaflet'; +import { TableComponent } from 'src/lib/components'; +import { OperationKeys } from '@decaf-ts/db-decorators'; +import { AppCardTitleComponent } from 'src/app/components/card-title/card-title.component'; @Component({ - selector: "app-leaflet", - templateUrl: "./leaflet.page.html", - styleUrls: ["./leaflet.page.scss"], + selector: 'app-leaflet', + templateUrl: './leaflet.page.html', + styleUrls: ['./leaflet.page.scss'], standalone: true, imports: [ IonContent, - CardComponent, AppCardTitleComponent, ModelRendererComponent, - CardComponent, TranslatePipe, TableComponent, HeaderComponent, @@ -32,12 +29,12 @@ import { AppCardTitleComponent } from "src/app/components/card-title/card-title. }) export class LeafletPage extends NgxModelPageDirective implements OnInit { constructor() { - super("leaflet"); + super('leaflet'); } async ngOnInit(): Promise { - this.title = "leaflet.title"; - this.route = "leaflets"; + this.title = 'leaflet.title'; + this.route = 'leaflets'; this.model = new Leaflet(); this.enableCrudOperations([OperationKeys.UPDATE]); await super.initialize(); diff --git a/src/lib/engine/NgxFormDirective.ts b/src/lib/engine/NgxFormDirective.ts index 7c93ca10..23a6589e 100644 --- a/src/lib/engine/NgxFormDirective.ts +++ b/src/lib/engine/NgxFormDirective.ts @@ -379,6 +379,7 @@ export abstract class NgxFormDirective role: role || this.operation, handler: handler, handlers: this.handlers || {}, + ...(this.operation !== OperationKeys.CREATE ? { modelId: this.modelId } : {}), }); } diff --git a/src/lib/engine/NgxModelPageDirective.ts b/src/lib/engine/NgxModelPageDirective.ts index 49351fce..43c7627c 100644 --- a/src/lib/engine/NgxModelPageDirective.ts +++ b/src/lib/engine/NgxModelPageDirective.ts @@ -7,7 +7,7 @@ import { OperationKeys, PrimaryKeyType, } from '@decaf-ts/db-decorators'; -import { EventIds, Repository } from '@decaf-ts/core'; +import { Repository } from '@decaf-ts/core'; import { Model, Primitives } from '@decaf-ts/decorator-validation'; import { ComponentEventNames } from '@decaf-ts/ui-decorators'; import { NgxPageDirective } from './NgxPageDirective'; @@ -117,7 +117,7 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements * * @param {string} [uid] - The unique identifier of the model to load; defaults to modelId */ - override async refresh(uid?: EventIds): Promise { + override async refresh(uid?: PrimaryKeyType): Promise { this.refreshing = true; if (!uid) { uid = this.modelId; @@ -177,7 +177,10 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements event: IBaseCustomEvent & ICrudFormEvent & CustomEvent, repository?: DecafRepository, ): Promise { - const { name, role, handler, data, handlers } = event; + const { name, role, handler, data, modelId, handlers } = event; + if (!this.modelId && modelId) { + this.modelId = modelId; + } if (handler && role) { this.handlers = handlers || {}; return await handler.bind(this)(event, data || {}, role); @@ -252,11 +255,10 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements if (!repo) { repo = this._repository as DecafRepository; } - if (!repo || repo?.class?.name !== this.model?.constructor?.name) { const { context } = (await this.process( event, - this.model as Model, + this.model as M, false, )) as ILayoutModelContext; if (context) { @@ -296,7 +298,7 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements * @return {Promise} Promise resolving to the model instance or undefined */ async handleRead( - uid?: EventIds, + uid?: PrimaryKeyType, repository?: IRepository, modelName?: string, ): Promise { @@ -315,7 +317,9 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements acc: KeyValue = {}, parent: string = '', ): Promise | void> => { - if (this._repository) return this._repository as DecafRepository; + if (this._repository) { + return this._repository as DecafRepository; + } const constructor = Model.get(modelName); if (constructor) { const properties = this.getModelProperties(constructor); @@ -465,7 +469,9 @@ export abstract class NgxModelPageDirective extends NgxPageDirective implements const operation = (role || this.operation) as CrudOperations; if (data) { if (!pk) pk = Model.pk(repository.class) as string; - if (!this.modelId) this.modelId = (data as M)[pk as keyof M] as PrimaryKeyType; + if (!this.modelId) { + this.modelId = (data as M)[pk as keyof M] as PrimaryKeyType; + } const model = await this.transactionBegin(data as M, repository, operation); if (!model) { return { diff --git a/src/lib/engine/interfaces.ts b/src/lib/engine/interfaces.ts index 06c4f083..6fa461a8 100644 --- a/src/lib/engine/interfaces.ts +++ b/src/lib/engine/interfaces.ts @@ -23,6 +23,7 @@ import { import { FormParent } from './types'; import { Model } from '@decaf-ts/decorator-validation'; import { ActionRoles } from './constants'; +import { PrimaryKeyType } from '@decaf-ts/db-decorators'; /** * @description Interface for models that can be rendered @@ -369,6 +370,7 @@ export interface I18nToken { export interface ICrudFormEvent extends IBaseCustomEvent { handler?: UIFunctionLike; handlers?: Record; + modelId?: PrimaryKeyType; role: (typeof ActionRoles)[keyof typeof ActionRoles] & CrudOperationKeys; }