@masterteam/components 0.0.168 → 0.0.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,7 @@ class PageHeader {
27
27
  }, ...(ngDevMode ? [{ debugName: "backIcon" }] : /* istanbul ignore next */ []));
28
28
  hasTabs = computed(() => this.tabs().length > 0, ...(ngDevMode ? [{ debugName: "hasTabs" }] : /* istanbul ignore next */ []));
29
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PageHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PageHeader, isStandalone: true, selector: "mt-page-header", inputs: { backButton: { classPropertyName: "backButton", publicName: "backButton", isSignal: true, isRequired: false, transformFunction: null }, backButtonIcon: { classPropertyName: "backButtonIcon", publicName: "backButtonIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarShape: { classPropertyName: "avatarShape", publicName: "avatarShape", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backButtonClick: "backButtonClick", tabChange: "tabChange" }, queries: [{ propertyName: "titleEnd", first: true, predicate: ["titleEnd"], descendants: true, isSignal: true }, { propertyName: "headerEnd", first: true, predicate: ["headerEnd"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PageHeader, isStandalone: true, selector: "mt-page-header", inputs: { backButton: { classPropertyName: "backButton", publicName: "backButton", isSignal: true, isRequired: false, transformFunction: null }, backButtonIcon: { classPropertyName: "backButtonIcon", publicName: "backButtonIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarShape: { classPropertyName: "avatarShape", publicName: "avatarShape", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backButtonClick: "backButtonClick", tabChange: "tabChange" }, queries: [{ propertyName: "titleEnd", first: true, predicate: ["titleEnd"], descendants: true, isSignal: true }, { propertyName: "headerEnd", first: true, predicate: ["headerEnd"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "defaultIcon", "size", "fluid", "disabled", "searchThreshold"], outputs: ["activeChange", "onChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PageHeader, decorators: [{
33
33
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-page-header.mjs","sources":["../../../../packages/masterteam/components/page-header/page-header.ts","../../../../packages/masterteam/components/page-header/page-header.html","../../../../packages/masterteam/components/page-header/masterteam-components-page-header.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n computed,\r\n contentChild,\r\n TemplateRef,\r\n signal,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface PageHeaderTab {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-page-header',\r\n standalone: true,\r\n imports: [Avatar, Button, Tabs, NgTemplateOutlet],\r\n templateUrl: './page-header.html',\r\n})\r\nexport class PageHeader {\r\n backButton = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n backButtonIcon = input<'arrow' | 'close'>('arrow');\r\n avatarIcon = input<MTIcon>();\r\n avatarStyle = input<Record<string, string>>({});\r\n avatarShape = input<'circle' | 'square'>('square');\r\n title = input.required<string>();\r\n tabs = input<PageHeaderTab[]>([]);\r\n activeTab = input<string | number>();\r\n\r\n titleEnd = contentChild<TemplateRef<any>>('titleEnd');\r\n headerEnd = contentChild<TemplateRef<any>>('headerEnd');\r\n\r\n backButtonClick = output<void>();\r\n tabChange = output<string | number>();\r\n\r\n rtl = signal<boolean>(document.documentElement.dir === 'rtl');\r\n\r\n backIcon = computed(() => {\r\n if (this.backButtonIcon() === 'close') {\r\n return 'general.x-close';\r\n }\r\n return this.rtl() ? 'arrow.arrow-narrow-right' : 'arrow.arrow-narrow-left';\r\n });\r\n\r\n hasTabs = computed(() => this.tabs().length > 0);\r\n}\r\n","<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-page-header.mjs","sources":["../../../../packages/masterteam/components/page-header/page-header.ts","../../../../packages/masterteam/components/page-header/page-header.html","../../../../packages/masterteam/components/page-header/masterteam-components-page-header.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n computed,\r\n contentChild,\r\n TemplateRef,\r\n signal,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface PageHeaderTab {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-page-header',\r\n standalone: true,\r\n imports: [Avatar, Button, Tabs, NgTemplateOutlet],\r\n templateUrl: './page-header.html',\r\n})\r\nexport class PageHeader {\r\n backButton = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n backButtonIcon = input<'arrow' | 'close'>('arrow');\r\n avatarIcon = input<MTIcon>();\r\n avatarStyle = input<Record<string, string>>({});\r\n avatarShape = input<'circle' | 'square'>('square');\r\n title = input.required<string>();\r\n tabs = input<PageHeaderTab[]>([]);\r\n activeTab = input<string | number>();\r\n\r\n titleEnd = contentChild<TemplateRef<any>>('titleEnd');\r\n headerEnd = contentChild<TemplateRef<any>>('headerEnd');\r\n\r\n backButtonClick = output<void>();\r\n tabChange = output<string | number>();\r\n\r\n rtl = signal<boolean>(document.documentElement.dir === 'rtl');\r\n\r\n backIcon = computed(() => {\r\n if (this.backButtonIcon() === 'close') {\r\n return 'general.x-close';\r\n }\r\n return this.rtl() ? 'arrow.arrow-narrow-right' : 'arrow.arrow-narrow-left';\r\n });\r\n\r\n hasTabs = computed(() => this.tabs().length > 0);\r\n}\r\n","<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MA2Ba,UAAU,CAAA;IACrB,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC5E,IAAA,cAAc,GAAG,KAAK,CAAoB,OAAO,qFAAC;IAClD,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAC5B,IAAA,WAAW,GAAG,KAAK,CAAyB,EAAE,kFAAC;AAC/C,IAAA,WAAW,GAAG,KAAK,CAAsB,QAAQ,kFAAC;AAClD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,IAAI,GAAG,KAAK,CAAkB,EAAE,2EAAC;IACjC,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAmB;AAEpC,IAAA,QAAQ,GAAG,YAAY,CAAmB,UAAU,+EAAC;AACrD,IAAA,SAAS,GAAG,YAAY,CAAmB,WAAW,gFAAC;IAEvD,eAAe,GAAG,MAAM,EAAQ;IAChC,SAAS,GAAG,MAAM,EAAmB;IAErC,GAAG,GAAG,MAAM,CAAU,QAAQ,CAAC,eAAe,CAAC,GAAG,KAAK,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE7D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,OAAO,EAAE;AACrC,YAAA,OAAO,iBAAiB;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,GAAG,yBAAyB;AAC5E,IAAA,CAAC,+EAAC;AAEF,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,8EAAC;uGAzBrC,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BvB,iqDAuDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/BY,MAAM,2LAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGrC,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,iqDAAA,EAAA;AAaP,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,UAAU,sEACT,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtCxD;;AAEG;;;;"}
@@ -213,52 +213,87 @@ class RuntimeActionRunner {
213
213
  if (!method || !url || action.isAvailable === false) {
214
214
  return cancelledOrError(action, 'error', new Error(this.notExecutableMessage(action)));
215
215
  }
216
- let formValue;
216
+ const performRun = (formValue) => {
217
+ let payload = buildActionPayload(action, formValue, options.externalPayloadResolvers ?? {});
218
+ if (options.transformPayload) {
219
+ payload = options.transformPayload(payload, action);
220
+ }
221
+ const missing = getMissingRequiredPayloadKeys(action, payload);
222
+ if (missing.length) {
223
+ const message = this.transloco.translate('components.runtimeAction.missingArgs', { action: resolveActionLabel(action), missing: missing.join(', ') });
224
+ if (!options.silent) {
225
+ this.toast.error(message);
226
+ }
227
+ return Promise.resolve({
228
+ status: 'error',
229
+ actionKey: action.actionKey,
230
+ afterSuccess: null,
231
+ error: new Error(message),
232
+ });
233
+ }
234
+ return this.run(action, method, url, payload, options);
235
+ };
217
236
  if (action.needConfirmation) {
218
- const dialogResult = await this.confirm(action);
219
- if (dialogResult === 'cancelled') {
237
+ if (hasActionFormFields(action) && this.confirmDialogClass) {
238
+ return this.runWithFormDialog(action, performRun);
239
+ }
240
+ const confirmed = await this.confirmPlain(action);
241
+ if (!confirmed) {
220
242
  return {
221
243
  status: 'cancelled',
222
244
  actionKey: action.actionKey,
223
245
  afterSuccess: null,
224
246
  };
225
247
  }
226
- formValue = dialogResult ?? undefined;
227
- }
228
- let payload = buildActionPayload(action, formValue, options.externalPayloadResolvers ?? {});
229
- if (options.transformPayload) {
230
- payload = options.transformPayload(payload, action);
231
248
  }
232
- const missing = getMissingRequiredPayloadKeys(action, payload);
233
- if (missing.length) {
234
- const message = this.transloco.translate('components.runtimeAction.missingArgs', { action: resolveActionLabel(action), missing: missing.join(', ') });
235
- if (!options.silent) {
236
- this.toast.error(message);
237
- }
238
- return {
239
- status: 'error',
240
- actionKey: action.actionKey,
241
- afterSuccess: null,
242
- error: new Error(message),
243
- };
244
- }
245
- return this.run(action, method, url, payload, options);
249
+ return performRun();
246
250
  }
247
- async confirm(action) {
248
- if (hasActionFormFields(action) && this.confirmDialogClass) {
251
+ runWithFormDialog(action, performRun) {
252
+ return new Promise((resolve) => {
253
+ let pendingRun = null;
254
+ let finalResult = null;
249
255
  const ref = this.modal.openModal(this.confirmDialogClass, 'dialog', {
250
256
  header: resolveActionLabel(action),
251
257
  width: '40rem',
252
258
  dismissableMask: true,
253
- inputValues: { action },
259
+ inputValues: {
260
+ action,
261
+ onSubmit: async (value) => {
262
+ pendingRun = performRun(value);
263
+ const result = await pendingRun;
264
+ finalResult = result;
265
+ return result.status === 'success';
266
+ },
267
+ },
254
268
  });
255
- const value = await firstValueFrom(ref.onClose);
256
- const formValue = value;
257
- if (formValue == null) {
258
- return 'cancelled';
259
- }
260
- return formValue;
261
- }
269
+ ref.onClose.subscribe(async () => {
270
+ if (finalResult) {
271
+ resolve(finalResult);
272
+ return;
273
+ }
274
+ if (pendingRun) {
275
+ try {
276
+ resolve(await pendingRun);
277
+ }
278
+ catch (error) {
279
+ resolve({
280
+ status: 'error',
281
+ actionKey: action.actionKey,
282
+ afterSuccess: null,
283
+ error,
284
+ });
285
+ }
286
+ return;
287
+ }
288
+ resolve({
289
+ status: 'cancelled',
290
+ actionKey: action.actionKey,
291
+ afterSuccess: null,
292
+ });
293
+ });
294
+ });
295
+ }
296
+ confirmPlain(action) {
262
297
  return new Promise((resolve) => {
263
298
  const label = resolveActionLabel(action);
264
299
  this.confirmation.confirm({
@@ -267,8 +302,8 @@ class RuntimeActionRunner {
267
302
  message: this.transloco.translate('components.runtimeAction.confirmDefault', { action: label }),
268
303
  acceptLabel: label,
269
304
  icon: 'alert.alert-triangle',
270
- accept: () => resolve(null),
271
- reject: () => resolve('cancelled'),
305
+ accept: () => resolve(true),
306
+ reject: () => resolve(false),
272
307
  });
273
308
  });
274
309
  }
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-runtime-action.mjs","sources":["../../../../packages/masterteam/components/runtime-action/runtime-action.types.ts","../../../../packages/masterteam/components/runtime-action/payload-builder.ts","../../../../packages/masterteam/components/runtime-action/runtime-action-context.store.ts","../../../../packages/masterteam/components/runtime-action/runtime-action.runner.ts","../../../../packages/masterteam/components/runtime-action/masterteam-components-runtime-action.ts"],"sourcesContent":["export interface RuntimeActionTranslatable {\n display?: string;\n en?: string;\n ar?: string;\n}\n\nexport type RuntimeActionAfterSuccess = 'refresh' | 'close';\n\nexport interface RuntimeActionReason {\n source?: string;\n code?: string;\n message?: string;\n blocking?: boolean;\n details?: string | null;\n ruleKey?: string | null;\n requestId?: number | null;\n requestStatus?: string | null;\n requestSchemaId?: number | null;\n relatedRequestIds?: number[];\n}\n\nexport interface RuntimeAction {\n actionKey: string;\n actionName?: RuntimeActionTranslatable | string | null;\n httpMethod?: string | null;\n url?: string | null;\n isAvailable?: boolean;\n afterSuccess?: RuntimeActionAfterSuccess | null;\n stepIds?: Array<number | string>;\n needConfirmation?: boolean;\n payloadKeys?: string[];\n requiredPayloadKeys?: string[];\n payloadTemplate?: Record<string, unknown> | null;\n formId?: string | number | null;\n\n targetType?: string;\n targetId?: number;\n moduleKey?: string;\n operationKey?: string;\n primaryReasonCode?: string | null;\n reasons?: RuntimeActionReason[];\n}\n\nexport type RuntimeActionStatus = 'success' | 'error' | 'cancelled';\n\nexport interface RuntimeActionResult {\n status: RuntimeActionStatus;\n actionKey: string;\n afterSuccess: RuntimeActionAfterSuccess | null;\n response?: unknown;\n error?: unknown;\n}\n\nexport interface RuntimeActionExecuteOptions {\n externalPayloadResolvers?: Record<string, () => unknown>;\n defaultAfterSuccess?: RuntimeActionAfterSuccess;\n successMessage?: (response: unknown, action: RuntimeAction) => string;\n errorMessage?: (error: unknown, action: RuntimeAction) => string;\n transformPayload?: (\n payload: Record<string, unknown> | undefined,\n action: RuntimeAction,\n ) => Record<string, unknown> | undefined;\n silent?: boolean;\n}\n\nexport interface RuntimeActionFormValue {\n requestPropertyId?: number;\n propertyKey: string;\n value: unknown;\n}\n\nexport interface RuntimeActionFormSource {\n getSubmitValues(): RuntimeActionFormValue[] | undefined;\n}\n\nexport function resolveActionLabel(action: RuntimeAction): string {\n const name = action.actionName;\n if (typeof name === 'string') {\n return name || action.actionKey;\n }\n return name?.display || action.actionKey;\n}\n","import { RuntimeAction } from './runtime-action.types';\n\nexport function buildActionPayload(\n action: RuntimeAction,\n formValue: Record<string, unknown> | undefined,\n externalResolvers: Record<string, () => unknown> = {},\n): Record<string, unknown> | undefined {\n const templatePayload = buildTemplatePayload(\n action,\n formValue,\n externalResolvers,\n );\n if (templatePayload) {\n return templatePayload;\n }\n\n const payloadKeys = action.payloadKeys ?? [];\n if (!payloadKeys.length) {\n return undefined;\n }\n\n const payload: Record<string, unknown> = {};\n\n for (const key of payloadKeys) {\n const formFieldValue = formValue?.[key];\n if (formFieldValue !== undefined) {\n payload[key] = normalizePayloadValue(key, formFieldValue);\n continue;\n }\n\n const externalValue = resolveExternalPayloadValue(\n key,\n action,\n externalResolvers,\n );\n if (externalValue !== undefined) {\n payload[key] = externalValue;\n continue;\n }\n\n const defaultValue = resolveDefaultPayloadValue(key);\n if (defaultValue !== undefined) {\n payload[key] = defaultValue;\n }\n }\n\n return Object.keys(payload).length ? payload : undefined;\n}\n\nfunction buildTemplatePayload(\n action: RuntimeAction,\n formValue: Record<string, unknown> | undefined,\n externalResolvers: Record<string, () => unknown>,\n): Record<string, unknown> | null {\n const template = action.payloadTemplate as Record<string, unknown> | null;\n if (!template || typeof template !== 'object') {\n return null;\n }\n\n const payload: Record<string, unknown> = {};\n const payloadKeys = action.payloadKeys ?? Object.keys(template);\n\n for (const key of payloadKeys) {\n if (key === 'fields') {\n payload[key] = resolveTemplateFieldsValue(action, template, formValue);\n continue;\n }\n\n const formFieldValue = formValue?.[key];\n if (formFieldValue !== undefined) {\n payload[key] = normalizePayloadValue(key, formFieldValue);\n continue;\n }\n\n const externalValue = resolveExternalPayloadValue(\n key,\n action,\n externalResolvers,\n );\n if (externalValue !== undefined) {\n payload[key] = externalValue;\n continue;\n }\n\n if (template[key] !== undefined) {\n payload[key] = template[key];\n continue;\n }\n\n const defaultValue = resolveDefaultPayloadValue(key);\n if (defaultValue !== undefined) {\n payload[key] = defaultValue;\n }\n }\n\n return Object.keys(payload).length ? payload : null;\n}\n\nfunction resolveExternalPayloadValue(\n key: string,\n action: RuntimeAction,\n externalResolvers: Record<string, () => unknown>,\n): unknown {\n const resolver = externalResolvers[key];\n if (resolver) {\n return resolver();\n }\n\n if (key === 'stepId') {\n return action.stepIds?.[0];\n }\n\n return undefined;\n}\n\nexport function normalizePayloadValue(key: string, value: unknown): unknown {\n if (key === 'attachments') {\n if (value == null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n }\n\n return value;\n}\n\nexport function resolveDefaultPayloadValue(key: string): unknown {\n switch (key) {\n case 'attachments':\n return [];\n case 'delegatedUser':\n case 'note':\n case 'reason':\n return null;\n case 'values':\n return [];\n default:\n return undefined;\n }\n}\n\nexport function getMissingRequiredPayloadKeys(\n action: RuntimeAction,\n payload: Record<string, unknown> | undefined,\n): string[] {\n return (action.requiredPayloadKeys ?? []).filter((key) =>\n isMissingPayloadValue(payload?.[key]),\n );\n}\n\nexport function isMissingPayloadValue(value: unknown): boolean {\n if (value == null) {\n return true;\n }\n\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return false;\n}\n\nexport function normalizeHttpMethod(\n value: string | null | undefined,\n): string | null {\n if (!value || typeof value !== 'string') {\n return null;\n }\n\n const method = value.trim().toUpperCase();\n return method.length ? method : null;\n}\n\nexport function methodSupportsBody(method: string): boolean {\n return ['POST', 'PUT', 'PATCH', 'DELETE'].includes(method);\n}\n\nexport function buildRequestOptions(\n method: string,\n payload: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!payload || !methodSupportsBody(method)) {\n return { observe: 'body' };\n }\n\n return {\n body: payload,\n observe: 'body',\n };\n}\n\nexport function hasActionFormFields(action: RuntimeAction): boolean {\n return (\n (action.payloadKeys ?? []).some((key) =>\n ['delegatedUser', 'reason', 'note', 'attachments'].includes(key),\n ) || hasProgressTemplateField(action)\n );\n}\n\nexport function hasProgressTemplateField(action: RuntimeAction): boolean {\n const fields = (action.payloadTemplate as { fields?: unknown } | null)\n ?.fields;\n return (\n Array.isArray(fields) &&\n fields.some(\n (field) =>\n !!field &&\n typeof field === 'object' &&\n (field as { propertyKey?: string }).propertyKey === 'Progress',\n )\n );\n}\n\nfunction resolveTemplateFieldsValue(\n action: RuntimeAction,\n template: Record<string, unknown>,\n formValue: Record<string, unknown> | undefined,\n): unknown {\n const templateFields = template['fields'];\n if (!Array.isArray(templateFields)) {\n return formValue?.['fields'] ?? templateFields;\n }\n\n if (!hasProgressTemplateField(action)) {\n return formValue?.['fields'] ?? templateFields;\n }\n\n return templateFields.map((field) => {\n if (\n !field ||\n typeof field !== 'object' ||\n (field as { propertyKey?: string }).propertyKey !== 'Progress'\n ) {\n return field;\n }\n\n return {\n ...(field as Record<string, unknown>),\n value: formValue?.['progress'] ?? (field as { value?: unknown }).value,\n };\n });\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport {\n RuntimeActionFormSource,\n RuntimeActionFormValue,\n} from './runtime-action.types';\n\n@Injectable()\nexport class RuntimeActionContextStore {\n private readonly formSource = signal<RuntimeActionFormSource | null>(null);\n\n setFormSource(source: RuntimeActionFormSource | null): void {\n this.formSource.set(source);\n }\n\n resolveFormValues(): RuntimeActionFormValue[] {\n const values = this.formSource()?.getSubmitValues();\n return Array.isArray(values)\n ? values.map((value) => ({\n requestPropertyId: value.requestPropertyId,\n propertyKey: value.propertyKey,\n value: value.value,\n }))\n : [];\n }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, InjectionToken, Type, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { firstValueFrom, map } from 'rxjs';\r\n\r\nimport {\r\n buildActionPayload,\r\n buildRequestOptions,\r\n getMissingRequiredPayloadKeys,\r\n hasActionFormFields,\r\n normalizeHttpMethod,\r\n} from './payload-builder';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionAfterSuccess,\r\n RuntimeActionExecuteOptions,\r\n RuntimeActionResult,\r\n resolveActionLabel,\r\n} from './runtime-action.types';\r\n\r\nexport const RUNTIME_ACTION_CONFIRM_DIALOG = new InjectionToken<Type<unknown>>(\r\n 'RUNTIME_ACTION_CONFIRM_DIALOG',\r\n);\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RuntimeActionRunner {\r\n private readonly http = inject(HttpClient);\r\n private readonly confirmation = inject(ConfirmationService);\r\n private readonly modal = inject(ModalService);\r\n private readonly toast = inject(ToastService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmDialogClass = inject(RUNTIME_ACTION_CONFIRM_DIALOG, {\r\n optional: true,\r\n });\r\n\r\n async execute(\r\n action: RuntimeAction,\r\n options: RuntimeActionExecuteOptions = {},\r\n ): Promise<RuntimeActionResult> {\r\n const method = normalizeHttpMethod(action.httpMethod);\r\n const url = action.url?.trim();\r\n\r\n if (!method || !url || action.isAvailable === false) {\r\n return cancelledOrError(\r\n action,\r\n 'error',\r\n new Error(this.notExecutableMessage(action)),\r\n );\r\n }\r\n\r\n let formValue: Record<string, unknown> | undefined;\r\n\r\n if (action.needConfirmation) {\r\n const dialogResult = await this.confirm(action);\r\n if (dialogResult === 'cancelled') {\r\n return {\r\n status: 'cancelled',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n };\r\n }\r\n formValue = dialogResult ?? undefined;\r\n }\r\n\r\n let payload = buildActionPayload(\r\n action,\r\n formValue,\r\n options.externalPayloadResolvers ?? {},\r\n );\r\n\r\n if (options.transformPayload) {\r\n payload = options.transformPayload(payload, action);\r\n }\r\n\r\n const missing = getMissingRequiredPayloadKeys(action, payload);\r\n if (missing.length) {\r\n const message = this.transloco.translate(\r\n 'components.runtimeAction.missingArgs',\r\n { action: resolveActionLabel(action), missing: missing.join(', ') },\r\n );\r\n if (!options.silent) {\r\n this.toast.error(message);\r\n }\r\n return {\r\n status: 'error',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error: new Error(message),\r\n };\r\n }\r\n\r\n return this.run(action, method, url, payload, options);\r\n }\r\n\r\n private async confirm(\r\n action: RuntimeAction,\r\n ): Promise<'cancelled' | Record<string, unknown> | null> {\r\n if (hasActionFormFields(action) && this.confirmDialogClass) {\r\n const ref = this.modal.openModal(this.confirmDialogClass, 'dialog', {\r\n header: resolveActionLabel(action),\r\n width: '40rem',\r\n dismissableMask: true,\r\n inputValues: { action },\r\n });\r\n\r\n const value = await firstValueFrom(ref.onClose);\r\n const formValue = value as Record<string, unknown> | null | undefined;\r\n if (formValue == null) {\r\n return 'cancelled';\r\n }\r\n return formValue;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n const label = resolveActionLabel(action);\r\n this.confirmation.confirm({\r\n type: 'dialog',\r\n header: label,\r\n message: this.transloco.translate(\r\n 'components.runtimeAction.confirmDefault',\r\n { action: label },\r\n ),\r\n acceptLabel: label,\r\n icon: 'alert.alert-triangle',\r\n accept: () => resolve(null),\r\n reject: () => resolve('cancelled'),\r\n });\r\n });\r\n }\r\n\r\n private async run(\r\n action: RuntimeAction,\r\n method: string,\r\n url: string,\r\n payload: Record<string, unknown> | undefined,\r\n options: RuntimeActionExecuteOptions,\r\n ): Promise<RuntimeActionResult> {\r\n const fallbackErrorMessage = this.transloco.translate(\r\n 'components.runtimeAction.executeFailed',\r\n { action: resolveActionLabel(action) },\r\n );\r\n\r\n try {\r\n const response = await firstValueFrom(\r\n this.http\r\n .request<unknown>(method, url, buildRequestOptions(method, payload))\r\n .pipe(\r\n map((res) => ensureSuccessfulEnvelope(res, fallbackErrorMessage)),\r\n ),\r\n );\r\n\r\n if (options.successMessage && !options.silent) {\r\n this.toast.success(options.successMessage(response, action));\r\n }\r\n\r\n return {\r\n status: 'success',\r\n actionKey: action.actionKey,\r\n afterSuccess: resolveAfterSuccess(action, options.defaultAfterSuccess),\r\n response,\r\n };\r\n } catch (error) {\r\n const message =\r\n options.errorMessage?.(error, action) ??\r\n resolveHttpErrorMessage(error, fallbackErrorMessage);\r\n\r\n if (!options.silent) {\r\n this.toast.error(message);\r\n }\r\n\r\n return {\r\n status: 'error',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error,\r\n };\r\n }\r\n }\r\n\r\n private notExecutableMessage(action: RuntimeAction): string {\r\n if (action.isAvailable === false) {\r\n return this.transloco.translate('components.runtimeAction.notAvailable', {\r\n action: action.actionKey,\r\n });\r\n }\r\n if (!action.url) {\r\n return this.transloco.translate('components.runtimeAction.noUrl', {\r\n action: action.actionKey,\r\n });\r\n }\r\n return this.transloco.translate('components.runtimeAction.noHttpMethod', {\r\n action: action.actionKey,\r\n });\r\n }\r\n}\r\n\r\nfunction cancelledOrError(\r\n action: RuntimeAction,\r\n status: 'error' | 'cancelled',\r\n error?: unknown,\r\n): RuntimeActionResult {\r\n return {\r\n status,\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error,\r\n };\r\n}\r\n\r\nfunction resolveAfterSuccess(\r\n action: RuntimeAction,\r\n fallback: RuntimeActionAfterSuccess | undefined,\r\n): RuntimeActionAfterSuccess {\r\n if (action.afterSuccess === 'close' || action.afterSuccess === 'refresh') {\r\n return action.afterSuccess;\r\n }\r\n return fallback ?? 'refresh';\r\n}\r\n\r\nfunction ensureSuccessfulEnvelope(\r\n response: unknown,\r\n fallback: string,\r\n): unknown {\r\n if (!response || typeof response !== 'object') {\r\n return response;\r\n }\r\n\r\n const envelope = response as { code?: number };\r\n if (typeof envelope.code === 'number' && envelope.code !== 1) {\r\n throw new Error(resolveEnvelopeErrorMessage(response, fallback));\r\n }\r\n return response;\r\n}\r\n\r\nfunction resolveEnvelopeErrorMessage(\r\n response: unknown,\r\n fallback: string,\r\n): string {\r\n if (!response || typeof response !== 'object') {\r\n return fallback;\r\n }\r\n const envelope = response as {\r\n message?: string | null;\r\n errors?: { message?: string } | null;\r\n };\r\n return envelope.errors?.message ?? envelope.message ?? fallback;\r\n}\r\n\r\nfunction resolveHttpErrorMessage(error: unknown, fallback: string): string {\r\n if (!error || typeof error !== 'object') {\r\n return fallback;\r\n }\r\n const httpError = error as {\r\n message?: string;\r\n error?: { message?: string | null } | null;\r\n };\r\n return httpError.error?.message ?? httpError.message ?? fallback;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-runtime-action.mjs","sources":["../../../../packages/masterteam/components/runtime-action/runtime-action.types.ts","../../../../packages/masterteam/components/runtime-action/payload-builder.ts","../../../../packages/masterteam/components/runtime-action/runtime-action-context.store.ts","../../../../packages/masterteam/components/runtime-action/runtime-action.runner.ts","../../../../packages/masterteam/components/runtime-action/masterteam-components-runtime-action.ts"],"sourcesContent":["export interface RuntimeActionTranslatable {\n display?: string;\n en?: string;\n ar?: string;\n}\n\nexport type RuntimeActionAfterSuccess = 'refresh' | 'close';\n\nexport interface RuntimeActionReason {\n source?: string;\n code?: string;\n message?: string;\n blocking?: boolean;\n details?: string | null;\n ruleKey?: string | null;\n requestId?: number | null;\n requestStatus?: string | null;\n requestSchemaId?: number | null;\n relatedRequestIds?: number[];\n}\n\nexport interface RuntimeAction {\n actionKey: string;\n actionName?: RuntimeActionTranslatable | string | null;\n httpMethod?: string | null;\n url?: string | null;\n isAvailable?: boolean;\n afterSuccess?: RuntimeActionAfterSuccess | null;\n stepIds?: Array<number | string>;\n needConfirmation?: boolean;\n payloadKeys?: string[];\n requiredPayloadKeys?: string[];\n payloadTemplate?: Record<string, unknown> | null;\n formId?: string | number | null;\n\n targetType?: string;\n targetId?: number;\n moduleKey?: string;\n operationKey?: string;\n primaryReasonCode?: string | null;\n reasons?: RuntimeActionReason[];\n}\n\nexport type RuntimeActionStatus = 'success' | 'error' | 'cancelled';\n\nexport interface RuntimeActionResult {\n status: RuntimeActionStatus;\n actionKey: string;\n afterSuccess: RuntimeActionAfterSuccess | null;\n response?: unknown;\n error?: unknown;\n}\n\nexport interface RuntimeActionExecuteOptions {\n externalPayloadResolvers?: Record<string, () => unknown>;\n defaultAfterSuccess?: RuntimeActionAfterSuccess;\n successMessage?: (response: unknown, action: RuntimeAction) => string;\n errorMessage?: (error: unknown, action: RuntimeAction) => string;\n transformPayload?: (\n payload: Record<string, unknown> | undefined,\n action: RuntimeAction,\n ) => Record<string, unknown> | undefined;\n silent?: boolean;\n}\n\nexport interface RuntimeActionFormValue {\n requestPropertyId?: number;\n propertyKey: string;\n value: unknown;\n}\n\nexport interface RuntimeActionFormSource {\n getSubmitValues(): RuntimeActionFormValue[] | undefined;\n}\n\nexport function resolveActionLabel(action: RuntimeAction): string {\n const name = action.actionName;\n if (typeof name === 'string') {\n return name || action.actionKey;\n }\n return name?.display || action.actionKey;\n}\n","import { RuntimeAction } from './runtime-action.types';\n\nexport function buildActionPayload(\n action: RuntimeAction,\n formValue: Record<string, unknown> | undefined,\n externalResolvers: Record<string, () => unknown> = {},\n): Record<string, unknown> | undefined {\n const templatePayload = buildTemplatePayload(\n action,\n formValue,\n externalResolvers,\n );\n if (templatePayload) {\n return templatePayload;\n }\n\n const payloadKeys = action.payloadKeys ?? [];\n if (!payloadKeys.length) {\n return undefined;\n }\n\n const payload: Record<string, unknown> = {};\n\n for (const key of payloadKeys) {\n const formFieldValue = formValue?.[key];\n if (formFieldValue !== undefined) {\n payload[key] = normalizePayloadValue(key, formFieldValue);\n continue;\n }\n\n const externalValue = resolveExternalPayloadValue(\n key,\n action,\n externalResolvers,\n );\n if (externalValue !== undefined) {\n payload[key] = externalValue;\n continue;\n }\n\n const defaultValue = resolveDefaultPayloadValue(key);\n if (defaultValue !== undefined) {\n payload[key] = defaultValue;\n }\n }\n\n return Object.keys(payload).length ? payload : undefined;\n}\n\nfunction buildTemplatePayload(\n action: RuntimeAction,\n formValue: Record<string, unknown> | undefined,\n externalResolvers: Record<string, () => unknown>,\n): Record<string, unknown> | null {\n const template = action.payloadTemplate as Record<string, unknown> | null;\n if (!template || typeof template !== 'object') {\n return null;\n }\n\n const payload: Record<string, unknown> = {};\n const payloadKeys = action.payloadKeys ?? Object.keys(template);\n\n for (const key of payloadKeys) {\n if (key === 'fields') {\n payload[key] = resolveTemplateFieldsValue(action, template, formValue);\n continue;\n }\n\n const formFieldValue = formValue?.[key];\n if (formFieldValue !== undefined) {\n payload[key] = normalizePayloadValue(key, formFieldValue);\n continue;\n }\n\n const externalValue = resolveExternalPayloadValue(\n key,\n action,\n externalResolvers,\n );\n if (externalValue !== undefined) {\n payload[key] = externalValue;\n continue;\n }\n\n if (template[key] !== undefined) {\n payload[key] = template[key];\n continue;\n }\n\n const defaultValue = resolveDefaultPayloadValue(key);\n if (defaultValue !== undefined) {\n payload[key] = defaultValue;\n }\n }\n\n return Object.keys(payload).length ? payload : null;\n}\n\nfunction resolveExternalPayloadValue(\n key: string,\n action: RuntimeAction,\n externalResolvers: Record<string, () => unknown>,\n): unknown {\n const resolver = externalResolvers[key];\n if (resolver) {\n return resolver();\n }\n\n if (key === 'stepId') {\n return action.stepIds?.[0];\n }\n\n return undefined;\n}\n\nexport function normalizePayloadValue(key: string, value: unknown): unknown {\n if (key === 'attachments') {\n if (value == null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n }\n\n return value;\n}\n\nexport function resolveDefaultPayloadValue(key: string): unknown {\n switch (key) {\n case 'attachments':\n return [];\n case 'delegatedUser':\n case 'note':\n case 'reason':\n return null;\n case 'values':\n return [];\n default:\n return undefined;\n }\n}\n\nexport function getMissingRequiredPayloadKeys(\n action: RuntimeAction,\n payload: Record<string, unknown> | undefined,\n): string[] {\n return (action.requiredPayloadKeys ?? []).filter((key) =>\n isMissingPayloadValue(payload?.[key]),\n );\n}\n\nexport function isMissingPayloadValue(value: unknown): boolean {\n if (value == null) {\n return true;\n }\n\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return false;\n}\n\nexport function normalizeHttpMethod(\n value: string | null | undefined,\n): string | null {\n if (!value || typeof value !== 'string') {\n return null;\n }\n\n const method = value.trim().toUpperCase();\n return method.length ? method : null;\n}\n\nexport function methodSupportsBody(method: string): boolean {\n return ['POST', 'PUT', 'PATCH', 'DELETE'].includes(method);\n}\n\nexport function buildRequestOptions(\n method: string,\n payload: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!payload || !methodSupportsBody(method)) {\n return { observe: 'body' };\n }\n\n return {\n body: payload,\n observe: 'body',\n };\n}\n\nexport function hasActionFormFields(action: RuntimeAction): boolean {\n return (\n (action.payloadKeys ?? []).some((key) =>\n ['delegatedUser', 'reason', 'note', 'attachments'].includes(key),\n ) || hasProgressTemplateField(action)\n );\n}\n\nexport function hasProgressTemplateField(action: RuntimeAction): boolean {\n const fields = (action.payloadTemplate as { fields?: unknown } | null)\n ?.fields;\n return (\n Array.isArray(fields) &&\n fields.some(\n (field) =>\n !!field &&\n typeof field === 'object' &&\n (field as { propertyKey?: string }).propertyKey === 'Progress',\n )\n );\n}\n\nfunction resolveTemplateFieldsValue(\n action: RuntimeAction,\n template: Record<string, unknown>,\n formValue: Record<string, unknown> | undefined,\n): unknown {\n const templateFields = template['fields'];\n if (!Array.isArray(templateFields)) {\n return formValue?.['fields'] ?? templateFields;\n }\n\n if (!hasProgressTemplateField(action)) {\n return formValue?.['fields'] ?? templateFields;\n }\n\n return templateFields.map((field) => {\n if (\n !field ||\n typeof field !== 'object' ||\n (field as { propertyKey?: string }).propertyKey !== 'Progress'\n ) {\n return field;\n }\n\n return {\n ...(field as Record<string, unknown>),\n value: formValue?.['progress'] ?? (field as { value?: unknown }).value,\n };\n });\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport {\n RuntimeActionFormSource,\n RuntimeActionFormValue,\n} from './runtime-action.types';\n\n@Injectable()\nexport class RuntimeActionContextStore {\n private readonly formSource = signal<RuntimeActionFormSource | null>(null);\n\n setFormSource(source: RuntimeActionFormSource | null): void {\n this.formSource.set(source);\n }\n\n resolveFormValues(): RuntimeActionFormValue[] {\n const values = this.formSource()?.getSubmitValues();\n return Array.isArray(values)\n ? values.map((value) => ({\n requestPropertyId: value.requestPropertyId,\n propertyKey: value.propertyKey,\n value: value.value,\n }))\n : [];\n }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, InjectionToken, Type, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { firstValueFrom, map } from 'rxjs';\r\n\r\nimport {\r\n buildActionPayload,\r\n buildRequestOptions,\r\n getMissingRequiredPayloadKeys,\r\n hasActionFormFields,\r\n normalizeHttpMethod,\r\n} from './payload-builder';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionAfterSuccess,\r\n RuntimeActionExecuteOptions,\r\n RuntimeActionResult,\r\n resolveActionLabel,\r\n} from './runtime-action.types';\r\n\r\nexport const RUNTIME_ACTION_CONFIRM_DIALOG = new InjectionToken<Type<unknown>>(\r\n 'RUNTIME_ACTION_CONFIRM_DIALOG',\r\n);\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RuntimeActionRunner {\r\n private readonly http = inject(HttpClient);\r\n private readonly confirmation = inject(ConfirmationService);\r\n private readonly modal = inject(ModalService);\r\n private readonly toast = inject(ToastService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmDialogClass = inject(RUNTIME_ACTION_CONFIRM_DIALOG, {\r\n optional: true,\r\n });\r\n\r\n async execute(\r\n action: RuntimeAction,\r\n options: RuntimeActionExecuteOptions = {},\r\n ): Promise<RuntimeActionResult> {\r\n const method = normalizeHttpMethod(action.httpMethod);\r\n const url = action.url?.trim();\r\n\r\n if (!method || !url || action.isAvailable === false) {\r\n return cancelledOrError(\r\n action,\r\n 'error',\r\n new Error(this.notExecutableMessage(action)),\r\n );\r\n }\r\n\r\n const performRun = (\r\n formValue?: Record<string, unknown>,\r\n ): Promise<RuntimeActionResult> => {\r\n let payload = buildActionPayload(\r\n action,\r\n formValue,\r\n options.externalPayloadResolvers ?? {},\r\n );\r\n\r\n if (options.transformPayload) {\r\n payload = options.transformPayload(payload, action);\r\n }\r\n\r\n const missing = getMissingRequiredPayloadKeys(action, payload);\r\n if (missing.length) {\r\n const message = this.transloco.translate(\r\n 'components.runtimeAction.missingArgs',\r\n { action: resolveActionLabel(action), missing: missing.join(', ') },\r\n );\r\n if (!options.silent) {\r\n this.toast.error(message);\r\n }\r\n return Promise.resolve({\r\n status: 'error',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error: new Error(message),\r\n });\r\n }\r\n\r\n return this.run(action, method, url, payload, options);\r\n };\r\n\r\n if (action.needConfirmation) {\r\n if (hasActionFormFields(action) && this.confirmDialogClass) {\r\n return this.runWithFormDialog(action, performRun);\r\n }\r\n\r\n const confirmed = await this.confirmPlain(action);\r\n if (!confirmed) {\r\n return {\r\n status: 'cancelled',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n };\r\n }\r\n }\r\n\r\n return performRun();\r\n }\r\n\r\n private runWithFormDialog(\r\n action: RuntimeAction,\r\n performRun: (\r\n value: Record<string, unknown>,\r\n ) => Promise<RuntimeActionResult>,\r\n ): Promise<RuntimeActionResult> {\r\n return new Promise((resolve) => {\r\n let pendingRun: Promise<RuntimeActionResult> | null = null;\r\n let finalResult: RuntimeActionResult | null = null;\r\n\r\n const ref = this.modal.openModal(this.confirmDialogClass!, 'dialog', {\r\n header: resolveActionLabel(action),\r\n width: '40rem',\r\n dismissableMask: true,\r\n inputValues: {\r\n action,\r\n onSubmit: async (value: Record<string, unknown>) => {\r\n pendingRun = performRun(value);\r\n const result = await pendingRun;\r\n finalResult = result;\r\n return result.status === 'success';\r\n },\r\n },\r\n });\r\n\r\n ref.onClose.subscribe(async () => {\r\n if (finalResult) {\r\n resolve(finalResult);\r\n return;\r\n }\r\n if (pendingRun) {\r\n try {\r\n resolve(await pendingRun);\r\n } catch (error) {\r\n resolve({\r\n status: 'error',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error,\r\n });\r\n }\r\n return;\r\n }\r\n resolve({\r\n status: 'cancelled',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n });\r\n });\r\n });\r\n }\r\n\r\n private confirmPlain(action: RuntimeAction): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const label = resolveActionLabel(action);\r\n this.confirmation.confirm({\r\n type: 'dialog',\r\n header: label,\r\n message: this.transloco.translate(\r\n 'components.runtimeAction.confirmDefault',\r\n { action: label },\r\n ),\r\n acceptLabel: label,\r\n icon: 'alert.alert-triangle',\r\n accept: () => resolve(true),\r\n reject: () => resolve(false),\r\n });\r\n });\r\n }\r\n\r\n private async run(\r\n action: RuntimeAction,\r\n method: string,\r\n url: string,\r\n payload: Record<string, unknown> | undefined,\r\n options: RuntimeActionExecuteOptions,\r\n ): Promise<RuntimeActionResult> {\r\n const fallbackErrorMessage = this.transloco.translate(\r\n 'components.runtimeAction.executeFailed',\r\n { action: resolveActionLabel(action) },\r\n );\r\n\r\n try {\r\n const response = await firstValueFrom(\r\n this.http\r\n .request<unknown>(method, url, buildRequestOptions(method, payload))\r\n .pipe(\r\n map((res) => ensureSuccessfulEnvelope(res, fallbackErrorMessage)),\r\n ),\r\n );\r\n\r\n if (options.successMessage && !options.silent) {\r\n this.toast.success(options.successMessage(response, action));\r\n }\r\n\r\n return {\r\n status: 'success',\r\n actionKey: action.actionKey,\r\n afterSuccess: resolveAfterSuccess(action, options.defaultAfterSuccess),\r\n response,\r\n };\r\n } catch (error) {\r\n const message =\r\n options.errorMessage?.(error, action) ??\r\n resolveHttpErrorMessage(error, fallbackErrorMessage);\r\n\r\n if (!options.silent) {\r\n this.toast.error(message);\r\n }\r\n\r\n return {\r\n status: 'error',\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error,\r\n };\r\n }\r\n }\r\n\r\n private notExecutableMessage(action: RuntimeAction): string {\r\n if (action.isAvailable === false) {\r\n return this.transloco.translate('components.runtimeAction.notAvailable', {\r\n action: action.actionKey,\r\n });\r\n }\r\n if (!action.url) {\r\n return this.transloco.translate('components.runtimeAction.noUrl', {\r\n action: action.actionKey,\r\n });\r\n }\r\n return this.transloco.translate('components.runtimeAction.noHttpMethod', {\r\n action: action.actionKey,\r\n });\r\n }\r\n}\r\n\r\nfunction cancelledOrError(\r\n action: RuntimeAction,\r\n status: 'error' | 'cancelled',\r\n error?: unknown,\r\n): RuntimeActionResult {\r\n return {\r\n status,\r\n actionKey: action.actionKey,\r\n afterSuccess: null,\r\n error,\r\n };\r\n}\r\n\r\nfunction resolveAfterSuccess(\r\n action: RuntimeAction,\r\n fallback: RuntimeActionAfterSuccess | undefined,\r\n): RuntimeActionAfterSuccess {\r\n if (action.afterSuccess === 'close' || action.afterSuccess === 'refresh') {\r\n return action.afterSuccess;\r\n }\r\n return fallback ?? 'refresh';\r\n}\r\n\r\nfunction ensureSuccessfulEnvelope(\r\n response: unknown,\r\n fallback: string,\r\n): unknown {\r\n if (!response || typeof response !== 'object') {\r\n return response;\r\n }\r\n\r\n const envelope = response as { code?: number };\r\n if (typeof envelope.code === 'number' && envelope.code !== 1) {\r\n throw new Error(resolveEnvelopeErrorMessage(response, fallback));\r\n }\r\n return response;\r\n}\r\n\r\nfunction resolveEnvelopeErrorMessage(\r\n response: unknown,\r\n fallback: string,\r\n): string {\r\n if (!response || typeof response !== 'object') {\r\n return fallback;\r\n }\r\n const envelope = response as {\r\n message?: string | null;\r\n errors?: { message?: string } | null;\r\n };\r\n return envelope.errors?.message ?? envelope.message ?? fallback;\r\n}\r\n\r\nfunction resolveHttpErrorMessage(error: unknown, fallback: string): string {\r\n if (!error || typeof error !== 'object') {\r\n return fallback;\r\n }\r\n const httpError = error as {\r\n message?: string;\r\n error?: { message?: string | null } | null;\r\n };\r\n return httpError.error?.message ?? httpError.message ?? fallback;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -904,7 +904,7 @@ class TableCaption {
904
904
  this.onTabChange.emit(tab);
905
905
  }
906
906
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TableCaption, deps: [], target: i0.ɵɵFactoryTarget.Component });
907
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: TableCaption, isStandalone: true, selector: "mt-table-caption", inputs: { generalSearch: { classPropertyName: "generalSearch", publicName: "generalSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, filterMode: { classPropertyName: "filterMode", publicName: "filterMode", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, printable: { classPropertyName: "printable", publicName: "printable", isSignal: true, isRequired: false, transformFunction: null }, groupable: { classPropertyName: "groupable", publicName: "groupable", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, groupColumns: { classPropertyName: "groupColumns", publicName: "groupColumns", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionLabel: { classPropertyName: "tabsOptionLabel", publicName: "tabsOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionValue: { classPropertyName: "tabsOptionValue", publicName: "tabsOptionValue", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, captionStart: { classPropertyName: "captionStart", publicName: "captionStart", isSignal: true, isRequired: false, transformFunction: null }, captionEnd: { classPropertyName: "captionEnd", publicName: "captionEnd", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, filterTerm: { classPropertyName: "filterTerm", publicName: "filterTerm", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange", filters: "filtersChange", filterTerm: "filterTermChange", groupBy: "groupByChange", exportRequested: "exportRequested", printRequested: "printRequested", onTabChange: "onTabChange", searchChange: "searchChange", filterApplied: "filterApplied", filterReset: "filterReset" }, ngImport: i0, template: "@if (showsAnything()) {\r\n <div class=\"mt-table-caption\">\r\n <div\r\n class=\"flex relative items-center gap-2 pb-4\"\r\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n @if (captionStart(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\r\n }\r\n @if (tabs()) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabs()\"\r\n [optionLabel]=\"tabsOptionLabel()\"\r\n [optionValue]=\"tabsOptionValue()\"\r\n (onChange)=\"tabChanged($event)\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n }\r\n @if (generalSearch()) {\r\n <mt-text-field\r\n [ngModel]=\"filterTerm()\"\r\n (ngModelChange)=\"onSearch($event)\"\r\n icon=\"general.search-lg\"\r\n [placeholder]=\"'components.table.search' | transloco\"\r\n ></mt-text-field>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n @if (showFilters() && filterMode() === \"popover\") {\r\n <mt-table-filter\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [ngModel]=\"filters()\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n }\r\n @if (exportable() || printable() || groupable()) {\r\n <mt-table-actions-menu\r\n [exportable]=\"exportable()\"\r\n [printable]=\"printable()\"\r\n [groupable]=\"groupable()\"\r\n [groupColumns]=\"groupColumns()\"\r\n [activeGroup]=\"groupBy()\"\r\n (exportRequested)=\"exportRequested.emit()\"\r\n (printRequested)=\"printRequested.emit()\"\r\n (groupChange)=\"onGroupChange($event)\"\r\n />\r\n }\r\n @if (actions().length > 0) {\r\n <div class=\"flex items-center space-x-2\">\r\n @for (action of actions(); track action.label) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"$any(action).size || 'small'\"\r\n (click)=\"action.action(null)\"\r\n [label]=\"action.label\"\r\n [tooltip]=\"action.tooltip\"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n @if (captionEnd(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "component", type: TableFilter, selector: "mt-table-filter", inputs: ["columns", "data"], outputs: ["filterApplied", "filterReset"] }, { kind: "component", type: TableActionsMenu, selector: "mt-table-actions-menu", inputs: ["exportable", "printable", "groupable", "groupColumns", "activeGroup"], outputs: ["exportRequested", "printRequested", "groupChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
907
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: TableCaption, isStandalone: true, selector: "mt-table-caption", inputs: { generalSearch: { classPropertyName: "generalSearch", publicName: "generalSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, filterMode: { classPropertyName: "filterMode", publicName: "filterMode", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, printable: { classPropertyName: "printable", publicName: "printable", isSignal: true, isRequired: false, transformFunction: null }, groupable: { classPropertyName: "groupable", publicName: "groupable", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, groupColumns: { classPropertyName: "groupColumns", publicName: "groupColumns", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionLabel: { classPropertyName: "tabsOptionLabel", publicName: "tabsOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionValue: { classPropertyName: "tabsOptionValue", publicName: "tabsOptionValue", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, captionStart: { classPropertyName: "captionStart", publicName: "captionStart", isSignal: true, isRequired: false, transformFunction: null }, captionEnd: { classPropertyName: "captionEnd", publicName: "captionEnd", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, filterTerm: { classPropertyName: "filterTerm", publicName: "filterTerm", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange", filters: "filtersChange", filterTerm: "filterTermChange", groupBy: "groupByChange", exportRequested: "exportRequested", printRequested: "printRequested", onTabChange: "onTabChange", searchChange: "searchChange", filterApplied: "filterApplied", filterReset: "filterReset" }, ngImport: i0, template: "@if (showsAnything()) {\r\n <div class=\"mt-table-caption\">\r\n <div\r\n class=\"flex relative items-center gap-2 pb-4\"\r\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n @if (captionStart(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\r\n }\r\n @if (tabs()) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabs()\"\r\n [optionLabel]=\"tabsOptionLabel()\"\r\n [optionValue]=\"tabsOptionValue()\"\r\n (onChange)=\"tabChanged($event)\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n }\r\n @if (generalSearch()) {\r\n <mt-text-field\r\n [ngModel]=\"filterTerm()\"\r\n (ngModelChange)=\"onSearch($event)\"\r\n icon=\"general.search-lg\"\r\n [placeholder]=\"'components.table.search' | transloco\"\r\n ></mt-text-field>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n @if (showFilters() && filterMode() === \"popover\") {\r\n <mt-table-filter\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [ngModel]=\"filters()\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n }\r\n @if (exportable() || printable() || groupable()) {\r\n <mt-table-actions-menu\r\n [exportable]=\"exportable()\"\r\n [printable]=\"printable()\"\r\n [groupable]=\"groupable()\"\r\n [groupColumns]=\"groupColumns()\"\r\n [activeGroup]=\"groupBy()\"\r\n (exportRequested)=\"exportRequested.emit()\"\r\n (printRequested)=\"printRequested.emit()\"\r\n (groupChange)=\"onGroupChange($event)\"\r\n />\r\n }\r\n @if (actions().length > 0) {\r\n <div class=\"flex items-center space-x-2\">\r\n @for (action of actions(); track action.label) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"$any(action).size || 'small'\"\r\n (click)=\"action.action(null)\"\r\n [label]=\"action.label\"\r\n [tooltip]=\"action.tooltip\"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n @if (captionEnd(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "mode", "moreLabel", "defaultIcon", "size", "fluid", "disabled", "searchThreshold"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "component", type: TableFilter, selector: "mt-table-filter", inputs: ["columns", "data"], outputs: ["filterApplied", "filterReset"] }, { kind: "component", type: TableActionsMenu, selector: "mt-table-actions-menu", inputs: ["exportable", "printable", "groupable", "groupColumns", "activeGroup"], outputs: ["exportRequested", "printRequested", "groupChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
908
908
  }
909
909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TableCaption, decorators: [{
910
910
  type: Component,
@@ -1373,7 +1373,9 @@ class Table {
1373
1373
  const data = this.data();
1374
1374
  const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();
1375
1375
  const applyLocalSort = !this.lazy() || this.lazyLocalSort();
1376
- const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';
1376
+ const searchTerm = applyLocalSearch
1377
+ ? this.filterTerm().trim().toLowerCase()
1378
+ : '';
1377
1379
  const filters = this.filters();
1378
1380
  const filterKeys = this.lazy() ? [] : Object.keys(filters);
1379
1381
  let result = data;
@@ -1642,7 +1644,11 @@ class Table {
1642
1644
  this.first.set(0);
1643
1645
  this.currentPage.set(0);
1644
1646
  if (this.lazy() && !this.lazyLocalSearch()) {
1645
- this.filters.set({ ...this.filters(), generalSearch: searchTerm });
1647
+ const trimmedSearchTerm = searchTerm.trim();
1648
+ this.filters.set({
1649
+ ...this.filters(),
1650
+ generalSearch: trimmedSearchTerm,
1651
+ });
1646
1652
  this.emitLazyLoad({});
1647
1653
  }
1648
1654
  }