@masterteam/client-components 0.0.53 → 0.0.54

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.
@@ -1,2 +1,2 @@
1
- /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
2
2
  @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-950:oklch(25.8% .092 26.042);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.top-2{top:calc(var(--spacing) * 2)}.z-10{z-index:10}.col-span-1{grid-column:span 1/span 1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.min-h-\[20rem\]{min-height:20rem}.min-h-\[22rem\]{min-height:22rem}.min-h-\[420px\]{min-height:420px}.w-1{width:var(--spacing)}.w-28{width:calc(var(--spacing) * 28)}.w-40{width:calc(var(--spacing) * 40)}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-red-200{border-color:var(--color-red-200)}.border-surface-200{border-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.border-surface-200{border-color:color-mix(in srgb, var(--p-surface-200) calc(100% * 1), transparent)}}.border-surface-300{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.border-surface-300{border-color:color-mix(in srgb, var(--p-surface-300) calc(100% * 1), transparent)}}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb, var(--p-primary-50) calc(100% * 1), transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-surface-50{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.bg-surface-50{background-color:color-mix(in srgb, var(--p-surface-50) calc(100% * 1), transparent)}}.bg-surface-200{background-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.bg-surface-200{background-color:color-mix(in srgb, var(--p-surface-200) calc(100% * 1), transparent)}}.p-1{padding:var(--spacing)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-start{text-align:start}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-primary-700{color:var(--p-primary-700)}@supports (color:color-mix(in lab, red, red)){.text-primary-700{color:color-mix(in srgb, var(--p-primary-700) calc(100% * 1), transparent)}}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-surface-500{color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.text-surface-500{color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.uppercase{text-transform:uppercase}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:border-surface-700:where(.dark,.dark *){border-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-700:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:bg-primary-950:where(.dark,.dark *){background-color:var(--p-primary-950)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-950:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-950) calc(100% * 1), transparent)}}.dark\:bg-surface-900:where(.dark,.dark *){background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.dark\:text-primary-300:where(.dark,.dark *){color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}@media (hover:hover){.dark\:hover\:bg-red-950:where(.dark,.dark *):hover{background-color:var(--color-red-950)}.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0), var(--p-enter-translate-y,0), 0) scale3d(var(--p-enter-scale,1), var(--p-enter-scale,1), var(--p-enter-scale,1)) rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0), var(--p-leave-translate-y,0), 0) scale3d(var(--p-leave-scale,1), var(--p-leave-scale,1), var(--p-leave-scale,1)) rotate(var(--p-leave-rotate,0))}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
@@ -755,11 +755,11 @@ class ClientListTableView {
755
755
  };
756
756
  }
757
757
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ClientListTableView, deps: [], target: i0.ɵɵFactoryTarget.Component });
758
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ClientListTableView, isStandalone: true, selector: "mt-client-list-table-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, actionShape: { classPropertyName: "actionShape", publicName: "actionShape", isSignal: true, isRequired: false, transformFunction: null }, rowActionsLoadingFn: { classPropertyName: "rowActionsLoadingFn", publicName: "rowActionsLoadingFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { lazyLoad: "lazyLoad", rowClick: "rowClick", rowActionsRequested: "rowActionsRequested" }, ngImport: i0, template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"!table().config.isPaginated\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "groupCountMap", "cellClickFilter", "freezeActions", "virtualScroll", "virtualScrollItemSize", "scrollHeight", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
758
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ClientListTableView, isStandalone: true, selector: "mt-client-list-table-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, actionShape: { classPropertyName: "actionShape", publicName: "actionShape", isSignal: true, isRequired: false, transformFunction: null }, rowActionsLoadingFn: { classPropertyName: "rowActionsLoadingFn", publicName: "rowActionsLoadingFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { lazyLoad: "lazyLoad", rowClick: "rowClick", rowActionsRequested: "rowActionsRequested" }, ngImport: i0, template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "clickableRows", "generalSearch", "lazyLocalSearch", "showFilters", "filterMode", "loading", "updating", "lazy", "lazyLocalSort", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "storageKey", "storageMode", "exportable", "printable", "groupable", "groupCountMap", "cellClickFilter", "freezeActions", "virtualScroll", "virtualScrollItemSize", "scrollHeight", "printTitle", "exportFilename", "actionShape", "rowActionsLoadingFn", "tableLayout", "noCard", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "alwaysShowPaginator", "rowsPerPageOptions", "pageSize", "currentPage", "first", "filterTerm", "groupBy"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "rowActionsRequested", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange", "groupByChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
759
759
  }
760
760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ClientListTableView, decorators: [{
761
761
  type: Component,
762
- args: [{ selector: 'mt-client-list-table-view', standalone: true, imports: [CommonModule, Table, SkeletonModule], template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"!table().config.isPaginated\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n" }]
762
+ args: [{ selector: 'mt-client-list-table-view', standalone: true, imports: [CommonModule, Table, SkeletonModule], template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n" }]
763
763
  }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], actionShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionShape", required: false }] }], rowActionsLoadingFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActionsLoadingFn", required: false }] }], lazyLoad: [{ type: i0.Output, args: ["lazyLoad"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowActionsRequested: [{ type: i0.Output, args: ["rowActionsRequested"] }] } });
764
764
 
765
765
  const EMPTY_KEY_SET = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-runtime-actions.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-toolbar.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly informativeBaseUrl = 'LevelData';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.mergeFilters(\r\n this.buildInstanceFilters(instanceId),\r\n filters,\r\n ),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId?: number | null,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<ClientListCardsPayload>> {\r\n return this.queryRuntime<ClientListCardsPayload>({\r\n contextKey,\r\n projection: 'Card',\r\n filters: this.mergeFilters(\r\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\r\n filters,\r\n ),\r\n display: { areas: ['card'] },\r\n });\r\n }\r\n\r\n getInformativeDashboard(\r\n levelId: number,\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/levels/${levelId}/modules/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`LevelData/levels/${context.levelId}/modules/${context.moduleId}/table-display-settings/catalog?surfaceKey=table`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private mergeFilters(\r\n baseFilters?: ClientListFetchRequestFilter[],\r\n extraFilters: ClientListFetchRequestFilter[] = [],\r\n ): ClientListFetchRequestFilter[] | undefined {\r\n const merged = [...(baseFilters ?? []), ...extraFilters];\r\n return merged.length ? merged : undefined;\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\r\n contextKey: string,\r\n ): { levelId: string; moduleId: string } | null {\r\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\r\n return { levelId, moduleId };\r\n }\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport {\r\n DashboardBuilderData,\r\n DashboardChartItem,\r\n} from '@masterteam/dashboard-builder';\r\nimport { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsPayload,\r\n ClientListFetchPropertyMeta,\r\n ClientListFetchRecord,\r\n ClientListFetchSchema,\r\n ClientListFetchTableColumn,\r\n ClientListInformativeDashboardPayload,\r\n ClientListState,\r\n NormalizedClientListConfiguration,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\ninterface ClientListPropertyMaps {\r\n byKey: Map<string, ClientListFetchPropertyMeta>;\r\n byNormalizedKey: Map<string, ClientListFetchPropertyMeta>;\r\n}\r\n\r\ninterface ClientListCardDescriptor {\r\n projectionKey: string;\r\n recordValueKey: string;\r\n property?: ClientListFetchPropertyMeta;\r\n label?: string;\r\n viewType?: string;\r\n order?: number;\r\n configuration?: EntityData['configuration'] | null;\r\n propertyConfiguration?: EntityData['propertyConfiguration'];\r\n}\r\n\r\nconst UNSORTABLE_ENTITY_VIEW_TYPES = new Set<EntityViewType>([\r\n 'Attachment',\r\n 'Checkbox',\r\n]);\r\n\r\n@Injectable()\r\nexport class ClientListStateService {\r\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\r\n\r\n readonly items = computed<ClientListState[]>(() =>\r\n Object.values(this.itemsByKey()).sort((a, b) =>\r\n a.config.moduleId === b.config.moduleId\r\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\r\n : a.config.moduleId - b.config.moduleId,\r\n ),\r\n );\r\n\r\n setConfigs(configs: ClientListState[]): void {\r\n const currentItems = this.itemsByKey();\r\n const next: Record<string, ClientListState> = {};\r\n\r\n configs.forEach((item) => {\r\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\r\n });\r\n\r\n this.itemsByKey.set(next);\r\n }\r\n\r\n setLoading(key: string, loading: boolean): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n loading,\r\n },\r\n });\r\n }\r\n\r\n setError(key: string, message: string | null): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n error: message,\r\n },\r\n });\r\n }\r\n\r\n setRowsResult(\r\n key: string,\r\n response: RuntimeTableRowsResponse,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'table'\r\n ) {\r\n return;\r\n }\r\n\r\n const columns: RuntimeEntityColumnDef[] = (\r\n response.projectionMeta?.columns ?? []\r\n )\r\n .filter((column) => column.visible)\r\n .sort((a, b) => a.order - b.order)\r\n .map((column, index) => ({\r\n key: column.key,\r\n label: column.label,\r\n type: 'entity' as const,\r\n sortable: !UNSORTABLE_ENTITY_VIEW_TYPES.has(\r\n column.viewType as EntityViewType,\r\n ),\r\n width: index === 0 ? '200px' : undefined,\r\n viewType: column.viewType,\r\n order: column.order,\r\n visible: column.visible,\r\n configuration: column.configuration ?? null,\r\n }));\r\n\r\n const propertyMaps = this.createPropertyMaps(\r\n response.catalog?.properties ?? [],\r\n );\r\n\r\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\r\n (record) => {\r\n const row: RuntimeTableDisplayRow = { Id: record.id };\r\n\r\n columns.forEach((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n row[column.key] = this.toEntityData(\r\n column.key,\r\n record.values?.[property?.key ?? column.key],\r\n property,\r\n column.viewType,\r\n column.label,\r\n column.configuration,\r\n property?.configuration,\r\n record.id,\r\n column.order ?? property?.order,\r\n );\r\n });\r\n\r\n return row;\r\n },\r\n );\r\n\r\n // Host hook: let the consumer reshape columns/rows (e.g. merge two\r\n // type-specific columns into one conditional column) before render.\r\n const shaped = config.transformResult\r\n ? config.transformResult({ columns, rows }, response)\r\n : { columns, rows };\r\n\r\n const schema = this.resolvePrimarySchema(response);\r\n const title =\r\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\r\n const totalCount =\r\n config.isPaginated === false\r\n ? shaped.rows.length\r\n : (response.pagination?.totalCount ?? shaped.rows.length);\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey: schema?.key ?? '',\r\n columns: shaped.columns,\r\n rows: shaped.rows,\r\n cards: [],\r\n skip,\r\n take,\r\n totalCount,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setCardsResult(\r\n key: string,\r\n response: ClientListCardsPayload,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'cards'\r\n ) {\r\n return;\r\n }\r\n\r\n const cards = this.toCards(response);\r\n const schema = this.resolvePrimarySchema(response);\r\n const firstCardModule = cards[0]?.module;\r\n const moduleKey = schema?.key ?? firstCardModule?.key ?? target.moduleKey;\r\n const title =\r\n (config.title ?? '').trim() ||\r\n schema?.name ||\r\n firstCardModule?.name ||\r\n moduleKey ||\r\n target.title;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards,\r\n skip: 0,\r\n take: 0,\r\n totalCount: cards.length,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setInformativeResult(\r\n key: string,\r\n response: ClientListInformativeDashboardPayload | null,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target || target.type !== 'informative') return;\r\n\r\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\r\n const title =\r\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\r\n const dashboardData = response\r\n ? this.toDashboardData(response, title)\r\n : null;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n totalCount: dashboardData?.charts?.length ?? 0,\r\n dashboardData,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n expanded: !target.expanded,\r\n },\r\n });\r\n }\r\n\r\n private mergeItemState(\r\n item: ClientListState,\r\n existing?: ClientListState,\r\n ): ClientListState {\r\n if (\r\n !existing ||\r\n existing.type !== item.type ||\r\n existing.areaType !== item.areaType\r\n ) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n loading: existing.loading,\r\n error: existing.error,\r\n title: item.title || existing.title,\r\n moduleKey: existing.moduleKey || item.moduleKey,\r\n totalCount: existing.totalCount,\r\n columns: existing.columns,\r\n rows: existing.rows,\r\n cards: existing.cards,\r\n skip: existing.skip,\r\n take: existing.take,\r\n expanded: existing.expanded,\r\n dashboardData: existing.dashboardData,\r\n rawData: existing.rawData,\r\n };\r\n }\r\n\r\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\r\n const records = this.orderRecords(\r\n data?.records ?? [],\r\n data?.projectionMeta?.groups ?? [],\r\n );\r\n const catalogProperties = data?.catalog?.properties ?? [];\r\n const propertyMaps = this.createPropertyMaps(catalogProperties);\r\n const descriptors = this.buildCardDescriptors(\r\n data?.projectionMeta?.displayOrder ?? [],\r\n data?.projectionMeta?.columns ?? [],\r\n propertyMaps,\r\n );\r\n\r\n return records.map((record) => {\r\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\r\n const propertyDescriptors = descriptors.length\r\n ? descriptors\r\n : this.buildFallbackCardDescriptors(record, catalogProperties);\r\n const entities = propertyDescriptors.map((propertyDescriptor) =>\r\n this.toEntityData(\r\n propertyDescriptor.projectionKey,\r\n record.values?.[propertyDescriptor.recordValueKey],\r\n propertyDescriptor.property,\r\n propertyDescriptor.viewType,\r\n propertyDescriptor.label,\r\n propertyDescriptor.configuration,\r\n propertyDescriptor.propertyConfiguration,\r\n record.id,\r\n propertyDescriptor.order,\r\n ),\r\n );\r\n const statusColor = this.resolveCardStatusColor(entities);\r\n const normalizedEntities = statusColor\r\n ? this.applyCardProgressColor(entities, statusColor)\r\n : entities;\r\n\r\n return {\r\n id: record.id,\r\n name: record.name ?? `Record ${record.id}`,\r\n module: schema\r\n ? {\r\n id: schema.id,\r\n key: schema.key,\r\n name: schema.name,\r\n order: schema.order,\r\n typeGroup: schema.typeGroup,\r\n }\r\n : undefined,\r\n instanceId: record.id,\r\n properties: normalizedEntities,\r\n entities: normalizedEntities,\r\n };\r\n });\r\n }\r\n\r\n private orderRecords(\r\n records: ClientListFetchRecord[],\r\n groups: Array<{ recordIds: number[] }>,\r\n ): ClientListFetchRecord[] {\r\n if (!groups.length) {\r\n return records;\r\n }\r\n\r\n const recordsById = new Map(records.map((record) => [record.id, record]));\r\n const ordered: ClientListFetchRecord[] = [];\r\n const seen = new Set<number>();\r\n\r\n groups.forEach((group) => {\r\n group.recordIds.forEach((recordId) => {\r\n const record = recordsById.get(recordId);\r\n if (!record || seen.has(recordId)) {\r\n return;\r\n }\r\n\r\n ordered.push(record);\r\n seen.add(recordId);\r\n });\r\n });\r\n\r\n records.forEach((record) => {\r\n if (!seen.has(record.id)) {\r\n ordered.push(record);\r\n }\r\n });\r\n\r\n return ordered;\r\n }\r\n\r\n private resolvePrimarySchema(\r\n response: RuntimeTableRowsResponse | ClientListCardsPayload,\r\n ): ClientListFetchSchema | undefined {\r\n const recordSchemaId = response.records?.[0]?.schemaId;\r\n\r\n return (\r\n response.schemas?.find((item) => item.id === recordSchemaId) ??\r\n response.schemas?.[0]\r\n );\r\n }\r\n\r\n private toEntityData(\r\n projectionKey: string,\r\n cell: ClientListFetchRecord['values'][string] | undefined,\r\n property: ClientListFetchPropertyMeta | undefined,\r\n viewType: string | undefined,\r\n label: string | undefined,\r\n configuration: EntityData['configuration'] | null | undefined,\r\n propertyConfiguration: EntityData['propertyConfiguration'],\r\n recordId: number,\r\n order?: number,\r\n ): EntityData {\r\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\r\n\r\n return {\r\n id: recordId,\r\n propertyId: property?.id,\r\n key: property?.key ?? projectionKey,\r\n normalizedKey: property?.normalizedKey ?? projectionKey,\r\n name: label ?? property?.label ?? projectionKey,\r\n rawValue:\r\n cell?.raw === null || cell?.raw === undefined\r\n ? undefined\r\n : String(cell.raw),\r\n value: (cell?.value ?? '') as EntityData['value'],\r\n viewType: resolvedViewType,\r\n type: property?.source,\r\n order: order ?? property?.order,\r\n configuration: configuration as EntityData['configuration'] | undefined,\r\n propertyConfiguration: propertyConfiguration ?? undefined,\r\n comparison: cell?.comparison,\r\n };\r\n }\r\n\r\n private createPropertyMaps(\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListPropertyMaps {\r\n return {\r\n byKey: new Map(properties.map((property) => [property.key, property])),\r\n byNormalizedKey: new Map(\r\n properties.map((property) => [property.normalizedKey, property]),\r\n ),\r\n };\r\n }\r\n\r\n private resolvePropertyMeta(\r\n projectionKey: string,\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListFetchPropertyMeta | undefined {\r\n return (\r\n propertyMaps.byKey.get(projectionKey) ??\r\n propertyMaps.byNormalizedKey.get(projectionKey)\r\n );\r\n }\r\n\r\n private buildCardDescriptors(\r\n displayOrder: NonNullable<\r\n ClientListCardsPayload['projectionMeta']\r\n >['displayOrder'],\r\n columns: ClientListFetchTableColumn[],\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListCardDescriptor[] {\r\n if (displayOrder?.length) {\r\n return displayOrder.map((item) => {\r\n const property = this.resolvePropertyMeta(\r\n item.propertyKey,\r\n propertyMaps,\r\n );\r\n\r\n return {\r\n projectionKey: item.propertyKey,\r\n recordValueKey: property?.key ?? item.propertyKey,\r\n property,\r\n label: property?.label,\r\n viewType: property?.viewType,\r\n order: item.order ?? property?.order,\r\n configuration: item.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n if (columns?.length) {\r\n return columns\r\n .filter((column) => column.visible)\r\n .map((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n return {\r\n projectionKey: column.key,\r\n recordValueKey: property?.key ?? column.key,\r\n property,\r\n label: column.label ?? property?.label,\r\n viewType: column.viewType ?? property?.viewType,\r\n order: column.order ?? property?.order,\r\n configuration: column.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private buildFallbackCardDescriptors(\r\n record: ClientListFetchRecord,\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListCardDescriptor[] {\r\n return properties\r\n .filter((property) => record.values?.[property.key] !== undefined)\r\n .map((property) => ({\r\n projectionKey: property.normalizedKey || property.key,\r\n recordValueKey: property.key,\r\n property,\r\n label: property.label,\r\n viewType: property.viewType,\r\n order: property.order,\r\n configuration: null,\r\n propertyConfiguration: property.configuration ?? null,\r\n }));\r\n }\r\n\r\n private resolveCardStatusColor(entities: EntityData[]): string | null {\r\n const statusEntity = entities.find(\r\n (entity) => entity.normalizedKey === 'Status',\r\n );\r\n const value = statusEntity?.value;\r\n const color =\r\n value && typeof value === 'object' && 'color' in value\r\n ? value.color\r\n : null;\r\n\r\n return typeof color === 'string' && color.trim().length\r\n ? color.trim()\r\n : null;\r\n }\r\n\r\n private applyCardProgressColor(\r\n entities: EntityData[],\r\n color: string,\r\n ): EntityData[] {\r\n return entities.map((entity) => {\r\n if (entity.normalizedKey !== 'Actual_Progress') {\r\n return entity;\r\n }\r\n\r\n return {\r\n ...entity,\r\n configuration: {\r\n ...(entity.configuration ?? {}),\r\n color,\r\n },\r\n };\r\n });\r\n }\r\n\r\n private toDashboardData(\r\n data: ClientListInformativeDashboardPayload,\r\n title: string,\r\n ): DashboardBuilderData {\r\n const filters = data.filters;\r\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\r\n const configuration = link.configuration ?? {};\r\n\r\n return {\r\n ...configuration,\r\n id: link.id,\r\n chartComponentId: link.chartComponentId,\r\n } as DashboardChartItem;\r\n });\r\n\r\n return {\r\n page: {\r\n id: data.moduleId,\r\n name: { en: title, ar: title },\r\n type: 'Dashboard',\r\n dashboardConfig: {\r\n ignoreQueryFilter: data.ignoreQueryFilter,\r\n filters: data.filters,\r\n versionNumber: data.versionNumber,\r\n extraInfo: data.extraInfo,\r\n },\r\n },\r\n charts,\r\n dialogs: [],\r\n filters: Array.isArray(filters) ? [...filters] : filters ? [filters] : [],\r\n };\r\n }\r\n}\r\n","import { Injectable, computed, inject, signal } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, share, take } from 'rxjs';\r\nimport { RuntimeAction } from '@masterteam/components/runtime-action';\r\nimport {\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n RuntimeTableDisplayRow,\r\n} from '../models/client-list.model';\r\n\r\ninterface CachedActions {\r\n actions: RuntimeAction[];\r\n fetchedAt: number;\r\n}\r\n\r\ninterface RuntimeActionsResponse {\r\n code: number;\r\n data?: { actions?: RuntimeAction[] };\r\n}\r\n\r\nconst DEFAULT_ENDPOINT = 'LevelData/{instanceId}/workspace-record-actions';\r\nconst DEFAULT_CACHE_TTL_MS = 60_000;\r\nconst DEFAULT_TARGET_TYPE = 'ModuleData';\r\n\r\n/**\r\n * Lazy per-row runtime actions. Fetches `workspace-record-actions` only when\r\n * the row's 3-dots menu is opened (or for every visible row when the list\r\n * opts in to `eager`), with per-row caching, in-flight dedupe, and a single\r\n * cache-invalidation hook tied to action execution.\r\n */\r\n@Injectable()\r\nexport class ClientListRuntimeActionsService {\r\n private readonly http = inject(HttpClient);\r\n\r\n private readonly cache = signal<ReadonlyMap<string, CachedActions>>(\r\n new Map(),\r\n );\r\n private readonly inFlightKeys = signal<ReadonlySet<string>>(new Set());\r\n private readonly inFlight = new Map<string, Observable<RuntimeAction[]>>();\r\n\r\n /** Actions keyed by `${listKey}:${recordId}`. */\r\n readonly actionsByRowKey = computed<ReadonlyMap<string, RuntimeAction[]>>(\r\n () => {\r\n const out = new Map<string, RuntimeAction[]>();\r\n for (const [key, value] of this.cache()) {\r\n out.set(key, value.actions);\r\n }\r\n return out;\r\n },\r\n );\r\n\r\n /** Row keys currently being fetched. Drives the popover skeleton state. */\r\n readonly loadingRowKeys = this.inFlightKeys.asReadonly();\r\n\r\n rowKey(listKey: string, recordId: number): string {\r\n return `${listKey}:${recordId}`;\r\n }\r\n\r\n has(\r\n listKey: string,\r\n recordId: number,\r\n ttlMs: number | null | undefined,\r\n ): boolean {\r\n const key = this.rowKey(listKey, recordId);\r\n const entry = this.cache().get(key);\r\n if (!entry) return false;\r\n if (ttlMs == null) return true;\r\n return Date.now() - entry.fetchedAt < ttlMs;\r\n }\r\n\r\n /**\r\n * Fetch (or reuse cached/in-flight) per-row runtime actions for a row.\r\n * Returns an Observable so callers can chain off the result; the cache and\r\n * loading signals are also kept in sync so the table popover skeleton and\r\n * the merged-actions computation react automatically.\r\n */\r\n request(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): Observable<RuntimeAction[]> {\r\n const key = this.rowKey(ctx.listKey, ctx.recordId);\r\n const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\r\n const cached = this.cache().get(key);\r\n if (cached && (ttl == null || Date.now() - cached.fetchedAt < ttl)) {\r\n const actions = cached.actions;\r\n return new Observable<RuntimeAction[]>((subscriber) => {\r\n subscriber.next(actions);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n const inFlight = this.inFlight.get(key);\r\n if (inFlight) {\r\n return inFlight;\r\n }\r\n\r\n const url = this.resolveEndpoint(config.endpoint ?? DEFAULT_ENDPOINT, ctx);\r\n const params = this.buildParams(config, ctx);\r\n\r\n this.markLoading(key, true);\r\n\r\n const obs = this.http.get<RuntimeActionsResponse>(url, { params }).pipe(\r\n map((response) =>\r\n response?.code === 1 ? (response.data?.actions ?? []) : [],\r\n ),\r\n share(),\r\n );\r\n\r\n this.inFlight.set(key, obs);\r\n\r\n obs.pipe(take(1)).subscribe({\r\n next: (actions) => {\r\n this.writeCache(key, actions);\r\n this.markLoading(key, false);\r\n this.inFlight.delete(key);\r\n },\r\n error: () => {\r\n this.writeCache(key, []);\r\n this.markLoading(key, false);\r\n this.inFlight.delete(key);\r\n },\r\n });\r\n\r\n return obs;\r\n }\r\n\r\n invalidateRow(listKey: string, recordId: number): void {\r\n const key = this.rowKey(listKey, recordId);\r\n this.cache.update((current) => {\r\n if (!current.has(key)) return current;\r\n const next = new Map(current);\r\n next.delete(key);\r\n return next;\r\n });\r\n }\r\n\r\n invalidateList(listKey: string): void {\r\n const prefix = `${listKey}:`;\r\n this.cache.update((current) => {\r\n let changed = false;\r\n const next = new Map(current);\r\n for (const key of next.keys()) {\r\n if (key.startsWith(prefix)) {\r\n next.delete(key);\r\n changed = true;\r\n }\r\n }\r\n return changed ? next : current;\r\n });\r\n }\r\n\r\n clearAll(): void {\r\n this.cache.set(new Map());\r\n }\r\n\r\n private writeCache(key: string, actions: RuntimeAction[]): void {\r\n this.cache.update((current) => {\r\n const next = new Map(current);\r\n next.set(key, { actions, fetchedAt: Date.now() });\r\n return next;\r\n });\r\n }\r\n\r\n private markLoading(key: string, loading: boolean): void {\r\n this.inFlightKeys.update((current) => {\r\n const next = new Set(current);\r\n if (loading) next.add(key);\r\n else next.delete(key);\r\n return next;\r\n });\r\n }\r\n\r\n private resolveEndpoint(\r\n template: string,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): string {\r\n const instanceId = ctx.instanceId ?? '';\r\n return template\r\n .replace('{instanceId}', String(instanceId))\r\n .replace('{listKey}', ctx.listKey)\r\n .replace('{moduleId}', String(ctx.moduleId))\r\n .replace('{recordId}', String(ctx.recordId));\r\n }\r\n\r\n private buildParams(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): Record<string, string | number> {\r\n if (config.buildParams) {\r\n return config.buildParams(ctx);\r\n }\r\n\r\n const moduleKey = config.resolveModuleKey?.(ctx.row, {\r\n listKey: ctx.listKey,\r\n moduleId: ctx.moduleId,\r\n });\r\n\r\n const params: Record<string, string | number> = {\r\n targetType: DEFAULT_TARGET_TYPE,\r\n targetId: ctx.recordId,\r\n };\r\n\r\n if (moduleKey) {\r\n params['moduleKey'] = moduleKey;\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n\r\nexport function defaultResolveRecordId(\r\n row: RuntimeTableDisplayRow,\r\n): number | null {\r\n const candidates = ['Id', 'id', 'ModuleDataId'] as const;\r\n for (const key of candidates) {\r\n const value = row[key];\r\n if (typeof value === 'number' && Number.isFinite(value)) return value;\r\n if (typeof value === 'string') {\r\n const parsed = Number(value);\r\n if (Number.isFinite(parsed)) return parsed;\r\n }\r\n }\r\n return null;\r\n}\r\n","import { Injectable, signal, WritableSignal } from '@angular/core';\r\nimport { TableFilters } from '@masterteam/components/table';\r\n\r\n/**\r\n * Toolbar state for a single client-list instance: search term, column filters,\r\n * group column, and active tab. Kept as mutable signals so both the table view\r\n * and the cards view can two-way bind to the same source of truth and stay in\r\n * sync when the user toggles between them.\r\n */\r\nexport interface ClientListToolbarBucket {\r\n filters: WritableSignal<TableFilters>;\r\n filterTerm: WritableSignal<string>;\r\n groupBy: WritableSignal<string | null>;\r\n activeTab: WritableSignal<any>;\r\n}\r\n\r\n/**\r\n * Per-list toolbar state holder. Buckets are keyed by list `key` (see\r\n * `ClientListBaseState.key`) so switching between table and cards for the same\r\n * list carries search/filter/group/tab forward. In-memory only — per-component\r\n * `storageKey` persistence on the underlying mt-table continues to handle\r\n * refresh-resilient hydration.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListToolbarService {\r\n private readonly buckets = new Map<string, ClientListToolbarBucket>();\r\n\r\n forList(key: string): ClientListToolbarBucket {\r\n let bucket = this.buckets.get(key);\r\n if (!bucket) {\r\n bucket = {\r\n filters: signal<TableFilters>({}),\r\n filterTerm: signal<string>(''),\r\n groupBy: signal<string | null>(null),\r\n activeTab: signal<any>(null),\r\n };\r\n this.buckets.set(key, bucket);\r\n }\r\n return bucket;\r\n }\r\n\r\n clear(key: string): void {\r\n this.buckets.delete(key);\r\n }\r\n}\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Table,\r\n TableAction,\r\n TableActionShape,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n readonly actionShape = input<TableActionShape | undefined>(undefined);\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly rowClick = output<RuntimeTableDisplayRow>();\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n\r\n /**\r\n * Shared toolbar bucket (search / filters / groupBy / activeTab) keyed by\r\n * list identity. The cards view for the same list resolves the same bucket\r\n * so switching area types preserves the toolbar state.\r\n */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Stable, per-instance storage key. Excludes `areaType` so table and cards\r\n * views for the same logical list share persistence (matches the toolbar\r\n * bucket sharing behaviour).\r\n */\r\n protected readonly tableStorageKey = computed<string | null>(() => {\r\n const s = this.state();\r\n const cfg = s.config;\r\n const parts = [\r\n 'client-list',\r\n s.key,\r\n cfg.type,\r\n cfg.contextKey ?? '',\r\n cfg.moduleId ?? '',\r\n cfg.instanceId ?? '',\r\n ];\r\n const key = parts\r\n .map((p) => String(p ?? ''))\r\n .filter((p) => p.length > 0)\r\n .join(':');\r\n return key.length > 'client-list'.length ? key : null;\r\n });\r\n\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"!table().config.isPaginated\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { MTDateFormatPipe } from '@masterteam/components';\r\nimport {\r\n EntitiesPreview,\r\n EntityClickEvent,\r\n} from '@masterteam/components/entities';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableCaption,\r\n TableExportService,\r\n TableGroupingController,\r\n TableValueResolver,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsState,\r\n ClientListLazyLoadEvent,\r\n ClientListState,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst EMPTY_KEY_SET: ReadonlySet<string> = new Set();\r\n\r\ninterface CardGroup {\r\n key: string;\r\n columnLabel: string;\r\n label: string;\r\n accent: string | null;\r\n count: number;\r\n cards: ClientListCard[];\r\n}\r\n\r\n@Component({\r\n selector: 'mt-client-list-cards-view',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoModule,\r\n Card,\r\n Button,\r\n Icon,\r\n EntitiesPreview,\r\n SkeletonModule,\r\n PopoverModule,\r\n TableCaption,\r\n ],\r\n providers: [MTDateFormatPipe],\r\n templateUrl: './client-list-cards-view.html',\r\n})\r\nexport class ClientListCardsView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n private readonly exportService = inject(TableExportService);\r\n private readonly dateFormat = inject(MTDateFormatPipe);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n /** Per-card loading predicate — drives the popover skeleton while runtime\r\n * actions are being fetched. Mirrors the table view's `rowActionsLoadingFn`;\r\n * the predicate operates on the card's row representation (`{ Id, ... }`). */\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly cardClick = output<ClientListCard>();\r\n /** Emitted when a card's 3-dots menu opens, so the parent can lazily fetch\r\n * that record's runtime actions (same contract as the table view). */\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly cardsState = computed(\r\n () => this.state() as ClientListCardsState,\r\n );\r\n\r\n /** Shared toolbar bucket — same instance the table view uses. */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Columns for filter/group/export. `state.columns` is empty for cards area\r\n * (the state service doesn't populate it — see `setCardsResult`), so we\r\n * reconstruct `ColumnDef[]` from the first card's entity metadata. Each\r\n * entity carries its `key`, `name` (label), and `viewType`, which is\r\n * everything `TableValueResolver.getColumnFilterType` needs to classify\r\n * filter behaviour (select / boolean / date / user / text).\r\n */\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n const fromState = this.state().columns;\r\n if (fromState && fromState.length > 0) return fromState;\r\n\r\n const sampleCard = this.cardsState().cards[0];\r\n if (!sampleCard?.entities?.length) return [];\r\n\r\n return sampleCard.entities.map((entity): RuntimeEntityColumnDef => {\r\n const raw = entity as unknown as Record<string, unknown>;\r\n const key =\r\n (typeof raw['key'] === 'string' && raw['key']) ||\r\n (typeof raw['normalizedKey'] === 'string' && raw['normalizedKey']) ||\r\n entity.name;\r\n return {\r\n key: String(key),\r\n label: entity.name ?? String(key),\r\n type: 'entity',\r\n viewType: (entity.viewType ?? 'Text') as string,\r\n };\r\n });\r\n });\r\n\r\n /**\r\n * Row view of each card. Cards carry their data as `entities: EntityData[]`,\r\n * not as a pre-built record, so we rebuild the row shape mt-table expects:\r\n * `{ [entityKey]: EntityData | scalar }`. Falls back to `displayProperties`\r\n * if a newer backend populates it. Row index matches card index so we can\r\n * look up by position elsewhere.\r\n */\r\n protected readonly rowRepresentations = computed<Record<string, unknown>[]>(\r\n () => this.cardsState().cards.map((card) => this.cardToRow(card)),\r\n );\r\n\r\n private cardToRow(card: ClientListCard): Record<string, unknown> {\r\n const fromDisplay = card.displayProperties as\r\n | Record<string, unknown>\r\n | undefined;\r\n const record: Record<string, unknown> =\r\n fromDisplay && Object.keys(fromDisplay).length > 0\r\n ? { Id: card.id, ...fromDisplay }\r\n : { Id: card.id };\r\n\r\n for (const entity of card.entities ?? []) {\r\n const e = entity as unknown as Record<string, unknown>;\r\n const key =\r\n (typeof e['key'] === 'string' && e['key']) ||\r\n (typeof e['normalizedKey'] === 'string' && e['normalizedKey']) ||\r\n entity.name;\r\n const normalizedKey =\r\n typeof e['normalizedKey'] === 'string' ? e['normalizedKey'] : null;\r\n const keys = new Set(\r\n [key, normalizedKey].filter(\r\n (entry): entry is string =>\r\n typeof entry === 'string' && entry.length > 0,\r\n ),\r\n );\r\n\r\n for (const entityKey of keys) {\r\n record[entityKey] = entity;\r\n }\r\n }\r\n return record;\r\n }\r\n\r\n /**\r\n * Stable card → row lookup. Row actions (and their `hidden` / `action`\r\n * callbacks plus the loading predicate) are authored against the table's\r\n * row shape — `{ Id, ...entities }` — so every action interaction routes the\r\n * card through `cardToRow` first. Memoized per card so repeated `hidden`\r\n * evaluations in the template don't rebuild the record each call.\r\n */\r\n private readonly rowByCard = computed<\r\n ReadonlyMap<ClientListCard, RuntimeTableDisplayRow>\r\n >(() => {\r\n const map = new Map<ClientListCard, RuntimeTableDisplayRow>();\r\n for (const card of this.cardsState().cards) {\r\n map.set(card, this.cardToRow(card));\r\n }\r\n return map;\r\n });\r\n\r\n protected rowForCard(card: ClientListCard): RuntimeTableDisplayRow {\r\n return this.rowByCard().get(card) ?? this.cardToRow(card);\r\n }\r\n\r\n /** Visible (non-hidden) actions for a card — mirrors the table's filter. */\r\n protected visibleActionsForCard(card: ClientListCard): TableAction[] {\r\n const row = this.rowForCard(card);\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n protected isCardActionsLoading(card: ClientListCard): boolean {\r\n return this.rowActionsLoadingFn()?.(this.rowForCard(card)) ?? false;\r\n }\r\n\r\n /**\r\n * Open handler for a card's 3-dots menu. Emits `rowActionsRequested` so the\r\n * parent lazily fetches runtime actions for this record, then toggles the\r\n * popover — identical to the table view's `onRowActionsToggle`.\r\n */\r\n protected onCardActionsToggle(\r\n event: Event,\r\n popover: { toggle: (e: Event) => void },\r\n card: ClientListCard,\r\n ): void {\r\n this.rowActionsRequested.emit(this.rowForCard(card));\r\n popover.toggle(event);\r\n }\r\n\r\n /** Run a card action, honouring optional confirmation — same flow as the\r\n * table view's `rowAction`. */\r\n protected runCardAction(\r\n event: Event,\r\n action: TableAction,\r\n card: ClientListCard,\r\n ): void {\r\n const row = this.rowForCard(card);\r\n if (!action.confirmation) {\r\n action.action(row);\r\n return;\r\n }\r\n\r\n if (action.confirmation.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n ...action.confirmation,\r\n accept: () => action.action(row),\r\n reject: () => {},\r\n });\r\n return;\r\n }\r\n\r\n this.confirmationService.confirm({\r\n event,\r\n ...action.confirmation,\r\n accept: () => action.action(row),\r\n reject: () => {},\r\n });\r\n }\r\n\r\n // Local throwaway signals for the grouping controller's sort arguments —\r\n // cards don't sort via column click so the controller's sort-pinning\r\n // side-effect is a no-op here.\r\n private readonly noopSortField = signal<string | null>(null);\r\n private readonly noopSortDir = signal<'asc' | 'desc' | null>(null);\r\n\r\n /**\r\n * Writable proxy around `bucket().groupBy` — the grouping controller wants a\r\n * `WritableSignal<string | null>`. Reads delegate to the current bucket's\r\n * signal; writes mutate it via `.set()`. This keeps the controller's\r\n * `setGroup()` side-effect safe even though cards view callers never invoke\r\n * it today.\r\n */\r\n private readonly groupBySignal: WritableSignal<string | null> = (() => {\r\n const read = computed(() => this.bucket().groupBy());\r\n const proxy = ((...args: [] | [string | null]) =>\r\n args.length === 0 ? read() : this.bucket().groupBy.set(args[0]!)) as any;\r\n proxy.set = (value: string | null) => this.bucket().groupBy.set(value);\r\n proxy.update = (fn: (value: string | null) => string | null) =>\r\n this.bucket().groupBy.set(fn(this.bucket().groupBy()));\r\n proxy.asReadonly = () => read;\r\n return proxy as WritableSignal<string | null>;\r\n })();\r\n\r\n /**\r\n * Grouping controller bound to the shared toolbar bucket, so picking a group\r\n * in the cards menu surfaces in the table view's group header (and vice\r\n * versa) when the user toggles area types.\r\n */\r\n protected readonly grouping = new TableGroupingController(\r\n this.columns,\r\n this.rowRepresentations,\r\n this.groupBySignal,\r\n this.noopSortField,\r\n this.noopSortDir,\r\n );\r\n\r\n /**\r\n * Visible (after search + filters) cards. Backend-paginated lists re-query\r\n * on filter change so `cards` already reflects the server response and this\r\n * just passes through; local lists filter in-place.\r\n */\r\n protected readonly visibleCards = computed<ClientListCard[]>(() => {\r\n const state = this.cardsState();\r\n const isLazy = state.config.isPaginated;\r\n const cards = state.cards;\r\n\r\n if (isLazy) return cards;\r\n\r\n const term = this.bucket().filterTerm().trim().toLowerCase();\r\n const filters = this.bucket().filters();\r\n const columns = this.columns();\r\n const filterKeys = Object.keys(filters);\r\n\r\n return cards.filter((card, index) => {\r\n const row = this.rowRepresentations()[index] ?? {};\r\n\r\n // Row values are EntityData envelopes (`{ name, value, viewType, ... }`),\r\n // identical to the shape mt-table builds. Reuse its recursive matcher so\r\n // the cards view searches every nested property value exactly like the\r\n // table view. The old shallow `resolveDisplayValue(value)` returned the\r\n // entity's `name` (field label) instead of its `value`, so every\r\n // value-based search missed and the grid was always \"not found\".\r\n if (term && !TableValueResolver.matchesSearchTerm(row, term)) {\r\n return false;\r\n }\r\n\r\n if (filterKeys.length === 0) return true;\r\n return filterKeys.every((key) => {\r\n if (key === 'generalSearch') return true;\r\n const column = columns.find((c) => c.key === key);\r\n return TableValueResolver.matchesFilter(row, key, filters[key], column);\r\n });\r\n });\r\n });\r\n\r\n /**\r\n * Grouped cards. Reuses TableGroupingController helpers so the accent color,\r\n * label, and count rendering match the table's subheader exactly.\r\n */\r\n protected readonly groupedCards = computed<CardGroup[]>(() => {\r\n const column = this.grouping.activeGroupColumn();\r\n if (!column) return [];\r\n\r\n const groups = new Map<string, CardGroup>();\r\n this.visibleCards().forEach((card) => {\r\n const row = this.cardToRow(card);\r\n const label = this.grouping.getGroupLabel(row);\r\n const accent = this.grouping.getGroupAccentColor(row);\r\n const key = `${label}__${accent ?? ''}`;\r\n\r\n const existing = groups.get(key);\r\n if (existing) {\r\n existing.cards.push(card);\r\n existing.count += 1;\r\n } else {\r\n groups.set(key, {\r\n key,\r\n columnLabel: column.label,\r\n label,\r\n accent,\r\n count: 1,\r\n cards: [card],\r\n });\r\n }\r\n });\r\n\r\n return Array.from(groups.values());\r\n });\r\n\r\n /**\r\n * Export the visible (after search + filter) cards as XLSX. Uses the cards'\r\n * derived row shape + the state's columns, so the file mirrors what the\r\n * user sees. Custom columns are excluded upstream by `TableExportService`.\r\n */\r\n /**\r\n * Set of column keys that are click-to-filter eligible — same predicate\r\n * mt-table's `isCellClickFilterable` uses (select / boolean / user). One\r\n * set computed once per columns / first-card change; all visible cards\r\n * read from it. Reactive via signal — when columns load, the entities\r\n * inside cards automatically become clickable.\r\n */\r\n protected readonly clickableEntityKeys = computed<ReadonlySet<string>>(() => {\r\n const sample = this.cardsState().cards[0]\r\n ? this.cardToRow(this.cardsState().cards[0])\r\n : undefined;\r\n const result = new Set<string>();\r\n for (const column of this.columns()) {\r\n const filterType = TableValueResolver.getColumnFilterType(column, sample);\r\n if (\r\n filterType === 'select' ||\r\n filterType === 'user' ||\r\n filterType === 'boolean'\r\n ) {\r\n result.add(column.key);\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n /**\r\n * Per-card set of entity keys that match the active filter — passed into\r\n * `<mt-entities-preview [activeKeys]>`. Computed lazily per card via the\r\n * helper below; bucket changes (filter add / remove) automatically\r\n * invalidate any place that reads from this in a template.\r\n */\r\n protected activeKeysForCard(card: ClientListCard): ReadonlySet<string> {\r\n const filters = this.bucket().filters();\r\n const filterKeys = Object.keys(filters);\r\n if (filterKeys.length === 0) return EMPTY_KEY_SET;\r\n\r\n const row = this.cardToRow(card);\r\n const result = new Set<string>();\r\n for (const key of filterKeys) {\r\n if (key === 'generalSearch') continue;\r\n const column = this.columns().find((c) => c.key === key);\r\n if (!column) continue;\r\n const cellTarget = TableValueResolver.buildClickFilterValue(row, column);\r\n if (cellTarget === null || cellTarget === undefined) continue;\r\n if (TableValueResolver.isFilterValueEqual(filters[key], cellTarget)) {\r\n result.add(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Click-to-filter handler invoked from `<mt-entities-preview (entityClick)>`.\r\n * Mirrors mt-table's `onCellFilterClick`: builds the filter value via the\r\n * shared `TableValueResolver`, toggles it on the shared toolbar bucket so\r\n * the funnel chip in the filter popover lights up, and clears on a second\r\n * click against the same value.\r\n */\r\n protected onEntityFilterClick(\r\n card: ClientListCard,\r\n event: EntityClickEvent,\r\n ): void {\r\n const column = this.columns().find((c) => c.key === event.key);\r\n if (!column) return;\r\n\r\n const row = this.cardToRow(card);\r\n const next = TableValueResolver.buildClickFilterValue(row, column);\r\n if (next === null || next === undefined) return;\r\n\r\n const current = this.bucket().filters();\r\n const patched = { ...current };\r\n if (TableValueResolver.isFilterValueEqual(current[column.key], next)) {\r\n delete patched[column.key];\r\n } else {\r\n patched[column.key] = next;\r\n }\r\n this.bucket().filters.set(patched);\r\n }\r\n\r\n protected exportExcel(): void {\r\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\r\n this.exportService.exportToExcel({\r\n rows,\r\n columns: this.columns(),\r\n filename: this.resolveExportFilename(),\r\n resolveValue: (row, column) => this.resolveCellValue(row, column),\r\n });\r\n }\r\n\r\n protected printPdf(): void {\r\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\r\n this.exportService.printPdf({\r\n rows,\r\n columns: this.columns(),\r\n filename: this.resolveExportFilename(),\r\n title: this.cardsState().title || undefined,\r\n resolveValue: (row, column) => this.resolveCellValue(row, column),\r\n });\r\n }\r\n\r\n private resolveExportFilename(): string {\r\n const title = this.cardsState().title?.trim();\r\n return title || this.cardsState().moduleKey || 'cards';\r\n }\r\n\r\n /**\r\n * Value resolver compatible with `TableExportConfig.resolveValue`. Reuses\r\n * `TableValueResolver` so currency, dates, entities, booleans export the\r\n * same way they would from the table view. Date columns (native or entity\r\n * with viewType `Date`/`DateTime`) are passed through `mtDateFormat` so\r\n * Excel and PDF show locale-formatted dates instead of raw ISO strings.\r\n */\r\n private resolveCellValue(\r\n row: unknown,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n if (cellValue === null || cellValue === undefined) return null;\r\n\r\n const dateType = this.resolveDateColumnType(column, cellValue);\r\n if (dateType) {\r\n const source =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(cellValue, 'sort')\r\n : cellValue;\r\n const dateValue = TableValueResolver.resolveDateValue(source);\r\n if (dateValue === null) return null;\r\n const formatted = this.dateFormat.transform(dateValue, dateType);\r\n return formatted || null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'export');\r\n }\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n private resolveDateColumnType(\r\n column: ColumnDef,\r\n cellValue: unknown,\r\n ): 'date' | 'dateTime' | null {\r\n if (column.type === 'date') return 'date';\r\n if (column.type === 'dateTime') return 'dateTime';\r\n if (column.type !== 'entity') return null;\r\n\r\n const viewType = (column as { viewType?: unknown }).viewType;\r\n const fromColumn =\r\n typeof viewType === 'string' ? viewType.toLowerCase() : '';\r\n if (fromColumn === 'datetime') return 'dateTime';\r\n if (fromColumn === 'date') return 'date';\r\n\r\n if (cellValue && typeof cellValue === 'object') {\r\n const inner = (cellValue as { viewType?: string }).viewType;\r\n if (inner === 'DateTime') return 'dateTime';\r\n if (inner === 'Date') return 'date';\r\n }\r\n return null;\r\n }\r\n\r\n constructor() {\r\n // Emit lazyLoad only on filter / search changes for paginated lists,\r\n // matching mt-table's behaviour (group-by is a pure FE concern, not a\r\n // re-fetch trigger). Skip the initial firing while the bucket is still at\r\n // its default empty state so we don't double-fetch on mount.\r\n let primed = false;\r\n effect(() => {\r\n const state = this.cardsState();\r\n const filters = this.bucket().filters();\r\n const filterTerm = this.bucket().filterTerm();\r\n\r\n if (!state.config.isPaginated) return;\r\n if (!primed) {\r\n primed = true;\r\n if (Object.keys(filters).length === 0 && !filterTerm) return;\r\n }\r\n\r\n queueMicrotask(() =>\r\n this.lazyLoad.emit({\r\n filters: {\r\n ...filters,\r\n ...(filterTerm ? { generalSearch: filterTerm } : {}),\r\n },\r\n pageSize: state.take,\r\n first: state.skip,\r\n currentPage: state.skip / Math.max(state.take, 1) + 1,\r\n } as ClientListLazyLoadEvent),\r\n );\r\n });\r\n }\r\n}\r\n","<mt-table-caption\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"popover\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [exportable]=\"true\"\r\n [columns]=\"columns()\"\r\n [data]=\"rowRepresentations()\"\r\n [groupColumns]=\"grouping.groupableColumns()\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (exportRequested)=\"exportExcel()\"\r\n (printRequested)=\"printPdf()\"\r\n/>\r\n\r\n@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (visibleCards().length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{ \"components.clientComponents.list.noCardsFound\" | transloco }}\r\n </div>\r\n} @else if (grouping.groupingActive()) {\r\n <div class=\"flex flex-col gap-6\">\r\n @for (group of groupedCards(); track group.key) {\r\n <section class=\"flex flex-col gap-3\">\r\n <header\r\n class=\"flex items-center gap-3 px-2 py-2 bg-surface-50 dark:bg-surface-900 border-y border-surface-200 dark:border-surface-700 rounded\"\r\n [style.--mt-group-accent]=\"group.accent ?? 'var(--p-primary-color)'\"\r\n >\r\n <span\r\n class=\"inline-block w-1 h-5 rounded-full\"\r\n [style.background]=\"'var(--mt-group-accent)'\"\r\n ></span>\r\n <span\r\n class=\"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ group.columnLabel }}\r\n </span>\r\n <span class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ group.label }}\r\n </span>\r\n <span\r\n class=\"ml-auto inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300\"\r\n >\r\n {{ group.count }}\r\n </span>\r\n </header>\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of group.cards; track card.id) {\r\n <mt-card\r\n class=\"relative cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <ng-container\r\n [ngTemplateOutlet]=\"cardActionsMenu\"\r\n [ngTemplateOutletContext]=\"{ $implicit: card }\"\r\n />\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [stackOnNarrow]=\"false\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"\r\n 'components.table.filterByThis' | transloco\r\n \"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n </section>\r\n }\r\n </div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of visibleCards(); track card.id) {\r\n @defer (on viewport) {\r\n <mt-card\r\n class=\"relative cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <ng-container\r\n [ngTemplateOutlet]=\"cardActionsMenu\"\r\n [ngTemplateOutletContext]=\"{ $implicit: card }\"\r\n />\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [stackOnNarrow]=\"false\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"'components.table.filterByThis' | transloco\"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n } @placeholder {\r\n <div class=\"min-h-[20rem]\">\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<!--\r\n Per-card 3-dots actions menu — same contract as the table view's popover\r\n row-actions. Rendered into each card's top-end corner; clicks stop at the\r\n wrapper so the card's own click (cardClick) doesn't fire.\r\n-->\r\n<ng-template #cardActionsMenu let-card>\r\n @if (rowActions().length > 0) {\r\n <div class=\"absolute end-2 top-2 z-10\" (click)=\"$event.stopPropagation()\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [tooltip]=\"'components.table.actions' | transloco\"\r\n (onClick)=\"onCardActionsToggle($event, cardPopover, card)\"\r\n />\r\n <p-popover #cardPopover appendTo=\"body\">\r\n <div class=\"flex min-w-44 flex-col gap-1 p-1\">\r\n @if (isCardActionsLoading(card)) {\r\n <div class=\"flex flex-col gap-2 p-1\">\r\n <p-skeleton height=\"1.75rem\" />\r\n <p-skeleton height=\"1.75rem\" />\r\n <p-skeleton height=\"1.75rem\" />\r\n </div>\r\n } @else {\r\n @for (action of visibleActionsForCard(card); track $index) {\r\n <button\r\n type=\"button\"\r\n class=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-start text-sm transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n runCardAction($event, action, card); cardPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon [icon]=\"action.icon\" class=\"text-base\" />\r\n }\r\n <span>{{ action.label || action.tooltip }}</span>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n }\r\n</ng-template>\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule, TranslocoPipe],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly dashboardExtraFilters = computed(() => {\r\n const config = this.informativeState().config;\r\n const extraFilters: Record<string, unknown> = {};\r\n\r\n if (config.instanceId != null) {\r\n extraFilters['currentId'] = config.instanceId;\r\n }\r\n\r\n for (const filter of config.filters ?? []) {\r\n if (!filter.key) {\r\n continue;\r\n }\r\n\r\n extraFilters[filter.key] = filter.value;\r\n }\r\n\r\n return extraFilters;\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{\r\n \"components.clientComponents.list.noInformativeDashboard\"\r\n | transloco\r\n }}\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n [extraFilters]=\"dashboardExtraFilters()\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TableAction } from '@masterteam/components/table';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListRuntimeActionsService,\r\n defaultResolveRecordId,\r\n} from './services/client-list-runtime-actions.service';\r\nimport { ClientListToolbarService } from './services/client-list-toolbar';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 100;\r\nconst DEFAULT_TABLE_PAGE_SIZE = 100;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 3000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [\r\n ClientListStateService,\r\n ClientListRuntimeActionsService,\r\n ClientListToolbarService,\r\n ],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n private readonly runtimeActions = inject(ClientListRuntimeActionsService);\r\n private readonly runtimeRunner = inject(RuntimeActionRunner);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n /**\r\n * Called by the table view when a row's 3-dots menu is opened. Triggers a\r\n * lazy fetch of that row's runtime actions when `runtimeRecordActions` is\r\n * enabled with the default `onMenuOpen` strategy. Skips when the cache is\r\n * still warm — the service handles in-flight dedupe and TTL.\r\n */\r\n onRowActionsRequested(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return;\r\n if ((config.loadStrategy ?? 'onMenuOpen') !== 'onMenuOpen') return;\r\n\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n\r\n /**\r\n * Per-row predicate used by the popover skeleton state.\r\n */\r\n isRowActionsLoading(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): boolean {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return false;\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return false;\r\n return this.runtimeActions\r\n .loadingRowKeys()\r\n .has(this.runtimeActions.rowKey(item.key, recordId));\r\n }\r\n\r\n /**\r\n * Per-list merged row-actions, keyed by item.key. Static `rowActions` are\r\n * augmented with one entry per distinct runtime `actionKey` discovered for\r\n * any row in the list, and re-evaluated when the runtime cache changes.\r\n */\r\n protected readonly mergedRowActionsByKey = computed<\r\n ReadonlyMap<string, TableAction[]>\r\n >(() => {\r\n const cache = this.runtimeActions.actionsByRowKey();\r\n const result = new Map<string, TableAction[]>();\r\n for (const item of this.state.items()) {\r\n result.set(item.key, this.computeMergedRowActions(item, cache));\r\n }\r\n return result;\r\n });\r\n\r\n /** Fallback used by the template when no entry exists for an item.key. */\r\n private readonly emptyActions: TableAction[] = [];\r\n private readonly rowActionsLoadingFnCache = new Map<\r\n string,\r\n (row: RuntimeTableDisplayRow) => boolean\r\n >();\r\n\r\n rowActionsFor(item: ClientListState): TableAction[] {\r\n return (\r\n this.mergedRowActionsByKey().get(item.key) ??\r\n item.config.rowActions ??\r\n this.emptyActions\r\n );\r\n }\r\n\r\n rowActionsLoadingFnFor(\r\n item: ClientListState,\r\n ): (row: RuntimeTableDisplayRow) => boolean {\r\n let fn = this.rowActionsLoadingFnCache.get(item.key);\r\n if (!fn) {\r\n const itemKey = item.key;\r\n fn = (row: RuntimeTableDisplayRow) => {\r\n const current = this.state.itemsByKey()[itemKey];\r\n return current ? this.isRowActionsLoading(current, row) : false;\r\n };\r\n this.rowActionsLoadingFnCache.set(itemKey, fn);\r\n }\r\n return fn;\r\n }\r\n\r\n private computeMergedRowActions(\r\n item: ClientListState,\r\n cache: ReadonlyMap<string, RuntimeAction[]>,\r\n ): TableAction[] {\r\n const baseActions = item.config.rowActions ?? [];\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return baseActions;\r\n\r\n const prefix = `${item.key}:`;\r\n const prototypes = new Map<string, RuntimeAction>();\r\n for (const [key, actions] of cache) {\r\n if (!key.startsWith(prefix)) continue;\r\n for (const action of actions) {\r\n if (!prototypes.has(action.actionKey)) {\r\n prototypes.set(action.actionKey, action);\r\n }\r\n }\r\n }\r\n\r\n if (prototypes.size === 0) {\r\n return baseActions;\r\n }\r\n\r\n const icon = config.actionIcon ?? 'media.play-circle';\r\n const runtimeActionEntries: TableAction[] = [];\r\n for (const [actionKey, prototype] of prototypes) {\r\n const label = resolveActionLabel(prototype);\r\n const presentation = config.resolveActionPresentation?.(prototype) ?? {};\r\n runtimeActionEntries.push({\r\n icon: (presentation.icon ?? icon) as TableAction['icon'],\r\n color: presentation.color ?? 'secondary',\r\n variant: presentation.variant ?? 'outlined',\r\n label: presentation.label ?? label,\r\n tooltip: presentation.tooltip ?? label,\r\n loading: presentation.loading,\r\n hidden: (row) => {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return true;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, recordId),\r\n );\r\n return !rowActions?.some(\r\n (a) => a.actionKey === actionKey && a.isAvailable !== false,\r\n );\r\n },\r\n action: (row) => {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, ctx.recordId),\r\n );\r\n const action = rowActions?.find((a) => a.actionKey === actionKey);\r\n if (action) {\r\n void this.executeRuntimeAction(item, ctx, config, action);\r\n }\r\n },\r\n });\r\n }\r\n\r\n return [...baseActions, ...runtimeActionEntries];\r\n }\r\n\r\n private async executeRuntimeAction(\r\n item: ClientListState,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n action: RuntimeAction,\r\n ): Promise<void> {\r\n const handled = await Promise.resolve(\r\n config.onActionTriggered?.(action, ctx),\r\n );\r\n if (handled === true) return;\r\n\r\n const result = await this.runtimeRunner.execute(action, {\r\n defaultAfterSuccess: 'refresh',\r\n });\r\n\r\n if (result.status !== 'success') return;\r\n\r\n if (result.afterSuccess === 'refresh' || result.afterSuccess == null) {\r\n this.runtimeActions.invalidateList(item.key);\r\n this.reloadByKey(item.key);\r\n config.onActionExecuted?.(action, ctx);\r\n }\r\n }\r\n\r\n private toRuntimeActionsContext(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ): ClientListRuntimeRecordActionsContext | null {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return null;\r\n\r\n return {\r\n listKey: item.key,\r\n contextKey: item.config.contextKey ?? null,\r\n instanceId: item.config.instanceId ?? null,\r\n moduleId: item.config.moduleId ?? 0,\r\n row,\r\n recordId,\r\n };\r\n }\r\n\r\n private resolveRecordId(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n row: RuntimeTableDisplayRow,\r\n ): number | null {\r\n return (config.resolveRecordId ?? defaultResolveRecordId)(row);\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.informativeDashboard',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n item.areaType === 'cards'\r\n ? 'components.clientComponents.list.cards'\r\n : 'components.clientComponents.list.table',\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n this.rowActionsLoadingFnCache.clear();\r\n this.runtimeActions.clearAll();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const configuredTablePageSize = this.resolvePositiveInteger(\r\n formConfig?.table?.pageSize,\r\n );\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (this.resolvePositiveInteger(formConfig?.take) ??\r\n configuredTablePageSize ??\r\n this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.tableRowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.rowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getInformativeDashboard(config.levelId!, config.moduleId)\r\n .subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.informativeLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId:\r\n formConfig?.instanceId ?? informativeConfig?.instanceId ?? null,\r\n filters: formConfig?.filters ?? informativeConfig?.filters ?? [],\r\n levelId: informativeConfig?.levelId ?? null,\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n table: this.resolveTableDisplayConfig(formConfig, take, isPaginated),\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\r\n contentEnd: config.contentEnd,\r\n templateContent: config.templateContent,\r\n rowActions: config.rowActions ?? [],\r\n actionShape: config.actionShape,\r\n dataLoaded: config.dataLoaded,\r\n runtimeRecordActions: config.runtimeRecordActions,\r\n transformResult: formConfig?.transformResult,\r\n collapse: {\r\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return [\r\n 'informative',\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n index,\r\n ].join('-');\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private resolveTableDisplayConfig(\r\n config: ClientListFormConfiguration | null,\r\n take: number,\r\n isPaginated: boolean,\r\n ) {\r\n const configuredPageSize = this.resolvePositiveInteger(\r\n config?.table?.pageSize,\r\n );\r\n\r\n return {\r\n pageSize: isPaginated\r\n ? take\r\n : (configuredPageSize ?? DEFAULT_TABLE_PAGE_SIZE),\r\n searchable: config?.table?.searchable ?? false,\r\n exportable: config?.table?.exportable ?? false,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private resolvePositiveInteger(value: number | undefined): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n\r\n for (const key of this.rowActionsLoadingFnCache.keys()) {\r\n if (!activeKeys.has(key)) {\r\n this.rowActionsLoadingFnCache.delete(key);\r\n this.runtimeActions.invalidateList(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.maybeEagerLoadRuntimeActions(item);\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private maybeEagerLoadRuntimeActions(item: ClientListState): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled || config.loadStrategy !== 'eager') return;\r\n if (item.type !== 'form' || item.areaType !== 'table') return;\r\n\r\n for (const row of item.rows) {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) continue;\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.levelId ?? 'x',\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'dashboard',\r\n ].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return (\r\n config.levelId != null &&\r\n Number.isFinite(config.levelId) &&\r\n config.levelId > 0 &&\r\n Number.isFinite(config.moduleId) &&\r\n config.moduleId > 0\r\n );\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.errors.missingModuleId',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n config.areaType === 'cards'\r\n ? 'components.clientComponents.list.errors.missingContextKey'\r\n : 'components.clientComponents.list.errors.missingContextAndInstance',\r\n );\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n\r\n private serializeFilters(\r\n filters: NormalizedClientListConfiguration['filters'] | undefined,\r\n ): string {\r\n return JSON.stringify(filters ?? []);\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [actionShape]=\"item.config.actionShape\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-runtime-actions.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-toolbar.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly informativeBaseUrl = 'LevelData';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.mergeFilters(\r\n this.buildInstanceFilters(instanceId),\r\n filters,\r\n ),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId?: number | null,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<ClientListCardsPayload>> {\r\n return this.queryRuntime<ClientListCardsPayload>({\r\n contextKey,\r\n projection: 'Card',\r\n filters: this.mergeFilters(\r\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\r\n filters,\r\n ),\r\n display: { areas: ['card'] },\r\n });\r\n }\r\n\r\n getInformativeDashboard(\r\n levelId: number,\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/levels/${levelId}/modules/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`LevelData/levels/${context.levelId}/modules/${context.moduleId}/table-display-settings/catalog?surfaceKey=table`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private mergeFilters(\r\n baseFilters?: ClientListFetchRequestFilter[],\r\n extraFilters: ClientListFetchRequestFilter[] = [],\r\n ): ClientListFetchRequestFilter[] | undefined {\r\n const merged = [...(baseFilters ?? []), ...extraFilters];\r\n return merged.length ? merged : undefined;\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\r\n contextKey: string,\r\n ): { levelId: string; moduleId: string } | null {\r\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\r\n return { levelId, moduleId };\r\n }\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport {\r\n DashboardBuilderData,\r\n DashboardChartItem,\r\n} from '@masterteam/dashboard-builder';\r\nimport { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsPayload,\r\n ClientListFetchPropertyMeta,\r\n ClientListFetchRecord,\r\n ClientListFetchSchema,\r\n ClientListFetchTableColumn,\r\n ClientListInformativeDashboardPayload,\r\n ClientListState,\r\n NormalizedClientListConfiguration,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\ninterface ClientListPropertyMaps {\r\n byKey: Map<string, ClientListFetchPropertyMeta>;\r\n byNormalizedKey: Map<string, ClientListFetchPropertyMeta>;\r\n}\r\n\r\ninterface ClientListCardDescriptor {\r\n projectionKey: string;\r\n recordValueKey: string;\r\n property?: ClientListFetchPropertyMeta;\r\n label?: string;\r\n viewType?: string;\r\n order?: number;\r\n configuration?: EntityData['configuration'] | null;\r\n propertyConfiguration?: EntityData['propertyConfiguration'];\r\n}\r\n\r\nconst UNSORTABLE_ENTITY_VIEW_TYPES = new Set<EntityViewType>([\r\n 'Attachment',\r\n 'Checkbox',\r\n]);\r\n\r\n@Injectable()\r\nexport class ClientListStateService {\r\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\r\n\r\n readonly items = computed<ClientListState[]>(() =>\r\n Object.values(this.itemsByKey()).sort((a, b) =>\r\n a.config.moduleId === b.config.moduleId\r\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\r\n : a.config.moduleId - b.config.moduleId,\r\n ),\r\n );\r\n\r\n setConfigs(configs: ClientListState[]): void {\r\n const currentItems = this.itemsByKey();\r\n const next: Record<string, ClientListState> = {};\r\n\r\n configs.forEach((item) => {\r\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\r\n });\r\n\r\n this.itemsByKey.set(next);\r\n }\r\n\r\n setLoading(key: string, loading: boolean): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n loading,\r\n },\r\n });\r\n }\r\n\r\n setError(key: string, message: string | null): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n error: message,\r\n },\r\n });\r\n }\r\n\r\n setRowsResult(\r\n key: string,\r\n response: RuntimeTableRowsResponse,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'table'\r\n ) {\r\n return;\r\n }\r\n\r\n const columns: RuntimeEntityColumnDef[] = (\r\n response.projectionMeta?.columns ?? []\r\n )\r\n .filter((column) => column.visible)\r\n .sort((a, b) => a.order - b.order)\r\n .map((column, index) => ({\r\n key: column.key,\r\n label: column.label,\r\n type: 'entity' as const,\r\n sortable: !UNSORTABLE_ENTITY_VIEW_TYPES.has(\r\n column.viewType as EntityViewType,\r\n ),\r\n width: index === 0 ? '200px' : undefined,\r\n viewType: column.viewType,\r\n order: column.order,\r\n visible: column.visible,\r\n configuration: column.configuration ?? null,\r\n }));\r\n\r\n const propertyMaps = this.createPropertyMaps(\r\n response.catalog?.properties ?? [],\r\n );\r\n\r\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\r\n (record) => {\r\n const row: RuntimeTableDisplayRow = { Id: record.id };\r\n\r\n columns.forEach((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n row[column.key] = this.toEntityData(\r\n column.key,\r\n record.values?.[property?.key ?? column.key],\r\n property,\r\n column.viewType,\r\n column.label,\r\n column.configuration,\r\n property?.configuration,\r\n record.id,\r\n column.order ?? property?.order,\r\n );\r\n });\r\n\r\n return row;\r\n },\r\n );\r\n\r\n // Host hook: let the consumer reshape columns/rows (e.g. merge two\r\n // type-specific columns into one conditional column) before render.\r\n const shaped = config.transformResult\r\n ? config.transformResult({ columns, rows }, response)\r\n : { columns, rows };\r\n\r\n const schema = this.resolvePrimarySchema(response);\r\n const title =\r\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\r\n const totalCount =\r\n config.isPaginated === false\r\n ? shaped.rows.length\r\n : (response.pagination?.totalCount ?? shaped.rows.length);\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey: schema?.key ?? '',\r\n columns: shaped.columns,\r\n rows: shaped.rows,\r\n cards: [],\r\n skip,\r\n take,\r\n totalCount,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setCardsResult(\r\n key: string,\r\n response: ClientListCardsPayload,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'cards'\r\n ) {\r\n return;\r\n }\r\n\r\n const cards = this.toCards(response);\r\n const schema = this.resolvePrimarySchema(response);\r\n const firstCardModule = cards[0]?.module;\r\n const moduleKey = schema?.key ?? firstCardModule?.key ?? target.moduleKey;\r\n const title =\r\n (config.title ?? '').trim() ||\r\n schema?.name ||\r\n firstCardModule?.name ||\r\n moduleKey ||\r\n target.title;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards,\r\n skip: 0,\r\n take: 0,\r\n totalCount: cards.length,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setInformativeResult(\r\n key: string,\r\n response: ClientListInformativeDashboardPayload | null,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target || target.type !== 'informative') return;\r\n\r\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\r\n const title =\r\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\r\n const dashboardData = response\r\n ? this.toDashboardData(response, title)\r\n : null;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n totalCount: dashboardData?.charts?.length ?? 0,\r\n dashboardData,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n expanded: !target.expanded,\r\n },\r\n });\r\n }\r\n\r\n private mergeItemState(\r\n item: ClientListState,\r\n existing?: ClientListState,\r\n ): ClientListState {\r\n if (\r\n !existing ||\r\n existing.type !== item.type ||\r\n existing.areaType !== item.areaType\r\n ) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n loading: existing.loading,\r\n error: existing.error,\r\n title: item.title || existing.title,\r\n moduleKey: existing.moduleKey || item.moduleKey,\r\n totalCount: existing.totalCount,\r\n columns: existing.columns,\r\n rows: existing.rows,\r\n cards: existing.cards,\r\n skip: existing.skip,\r\n take: existing.take,\r\n expanded: existing.expanded,\r\n dashboardData: existing.dashboardData,\r\n rawData: existing.rawData,\r\n };\r\n }\r\n\r\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\r\n const records = this.orderRecords(\r\n data?.records ?? [],\r\n data?.projectionMeta?.groups ?? [],\r\n );\r\n const catalogProperties = data?.catalog?.properties ?? [];\r\n const propertyMaps = this.createPropertyMaps(catalogProperties);\r\n const descriptors = this.buildCardDescriptors(\r\n data?.projectionMeta?.displayOrder ?? [],\r\n data?.projectionMeta?.columns ?? [],\r\n propertyMaps,\r\n );\r\n\r\n return records.map((record) => {\r\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\r\n const propertyDescriptors = descriptors.length\r\n ? descriptors\r\n : this.buildFallbackCardDescriptors(record, catalogProperties);\r\n const entities = propertyDescriptors.map((propertyDescriptor) =>\r\n this.toEntityData(\r\n propertyDescriptor.projectionKey,\r\n record.values?.[propertyDescriptor.recordValueKey],\r\n propertyDescriptor.property,\r\n propertyDescriptor.viewType,\r\n propertyDescriptor.label,\r\n propertyDescriptor.configuration,\r\n propertyDescriptor.propertyConfiguration,\r\n record.id,\r\n propertyDescriptor.order,\r\n ),\r\n );\r\n const statusColor = this.resolveCardStatusColor(entities);\r\n const normalizedEntities = statusColor\r\n ? this.applyCardProgressColor(entities, statusColor)\r\n : entities;\r\n\r\n return {\r\n id: record.id,\r\n name: record.name ?? `Record ${record.id}`,\r\n module: schema\r\n ? {\r\n id: schema.id,\r\n key: schema.key,\r\n name: schema.name,\r\n order: schema.order,\r\n typeGroup: schema.typeGroup,\r\n }\r\n : undefined,\r\n instanceId: record.id,\r\n properties: normalizedEntities,\r\n entities: normalizedEntities,\r\n };\r\n });\r\n }\r\n\r\n private orderRecords(\r\n records: ClientListFetchRecord[],\r\n groups: Array<{ recordIds: number[] }>,\r\n ): ClientListFetchRecord[] {\r\n if (!groups.length) {\r\n return records;\r\n }\r\n\r\n const recordsById = new Map(records.map((record) => [record.id, record]));\r\n const ordered: ClientListFetchRecord[] = [];\r\n const seen = new Set<number>();\r\n\r\n groups.forEach((group) => {\r\n group.recordIds.forEach((recordId) => {\r\n const record = recordsById.get(recordId);\r\n if (!record || seen.has(recordId)) {\r\n return;\r\n }\r\n\r\n ordered.push(record);\r\n seen.add(recordId);\r\n });\r\n });\r\n\r\n records.forEach((record) => {\r\n if (!seen.has(record.id)) {\r\n ordered.push(record);\r\n }\r\n });\r\n\r\n return ordered;\r\n }\r\n\r\n private resolvePrimarySchema(\r\n response: RuntimeTableRowsResponse | ClientListCardsPayload,\r\n ): ClientListFetchSchema | undefined {\r\n const recordSchemaId = response.records?.[0]?.schemaId;\r\n\r\n return (\r\n response.schemas?.find((item) => item.id === recordSchemaId) ??\r\n response.schemas?.[0]\r\n );\r\n }\r\n\r\n private toEntityData(\r\n projectionKey: string,\r\n cell: ClientListFetchRecord['values'][string] | undefined,\r\n property: ClientListFetchPropertyMeta | undefined,\r\n viewType: string | undefined,\r\n label: string | undefined,\r\n configuration: EntityData['configuration'] | null | undefined,\r\n propertyConfiguration: EntityData['propertyConfiguration'],\r\n recordId: number,\r\n order?: number,\r\n ): EntityData {\r\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\r\n\r\n return {\r\n id: recordId,\r\n propertyId: property?.id,\r\n key: property?.key ?? projectionKey,\r\n normalizedKey: property?.normalizedKey ?? projectionKey,\r\n name: label ?? property?.label ?? projectionKey,\r\n rawValue:\r\n cell?.raw === null || cell?.raw === undefined\r\n ? undefined\r\n : String(cell.raw),\r\n value: (cell?.value ?? '') as EntityData['value'],\r\n viewType: resolvedViewType,\r\n type: property?.source,\r\n order: order ?? property?.order,\r\n configuration: configuration as EntityData['configuration'] | undefined,\r\n propertyConfiguration: propertyConfiguration ?? undefined,\r\n comparison: cell?.comparison,\r\n };\r\n }\r\n\r\n private createPropertyMaps(\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListPropertyMaps {\r\n return {\r\n byKey: new Map(properties.map((property) => [property.key, property])),\r\n byNormalizedKey: new Map(\r\n properties.map((property) => [property.normalizedKey, property]),\r\n ),\r\n };\r\n }\r\n\r\n private resolvePropertyMeta(\r\n projectionKey: string,\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListFetchPropertyMeta | undefined {\r\n return (\r\n propertyMaps.byKey.get(projectionKey) ??\r\n propertyMaps.byNormalizedKey.get(projectionKey)\r\n );\r\n }\r\n\r\n private buildCardDescriptors(\r\n displayOrder: NonNullable<\r\n ClientListCardsPayload['projectionMeta']\r\n >['displayOrder'],\r\n columns: ClientListFetchTableColumn[],\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListCardDescriptor[] {\r\n if (displayOrder?.length) {\r\n return displayOrder.map((item) => {\r\n const property = this.resolvePropertyMeta(\r\n item.propertyKey,\r\n propertyMaps,\r\n );\r\n\r\n return {\r\n projectionKey: item.propertyKey,\r\n recordValueKey: property?.key ?? item.propertyKey,\r\n property,\r\n label: property?.label,\r\n viewType: property?.viewType,\r\n order: item.order ?? property?.order,\r\n configuration: item.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n if (columns?.length) {\r\n return columns\r\n .filter((column) => column.visible)\r\n .map((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n return {\r\n projectionKey: column.key,\r\n recordValueKey: property?.key ?? column.key,\r\n property,\r\n label: column.label ?? property?.label,\r\n viewType: column.viewType ?? property?.viewType,\r\n order: column.order ?? property?.order,\r\n configuration: column.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private buildFallbackCardDescriptors(\r\n record: ClientListFetchRecord,\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListCardDescriptor[] {\r\n return properties\r\n .filter((property) => record.values?.[property.key] !== undefined)\r\n .map((property) => ({\r\n projectionKey: property.normalizedKey || property.key,\r\n recordValueKey: property.key,\r\n property,\r\n label: property.label,\r\n viewType: property.viewType,\r\n order: property.order,\r\n configuration: null,\r\n propertyConfiguration: property.configuration ?? null,\r\n }));\r\n }\r\n\r\n private resolveCardStatusColor(entities: EntityData[]): string | null {\r\n const statusEntity = entities.find(\r\n (entity) => entity.normalizedKey === 'Status',\r\n );\r\n const value = statusEntity?.value;\r\n const color =\r\n value && typeof value === 'object' && 'color' in value\r\n ? value.color\r\n : null;\r\n\r\n return typeof color === 'string' && color.trim().length\r\n ? color.trim()\r\n : null;\r\n }\r\n\r\n private applyCardProgressColor(\r\n entities: EntityData[],\r\n color: string,\r\n ): EntityData[] {\r\n return entities.map((entity) => {\r\n if (entity.normalizedKey !== 'Actual_Progress') {\r\n return entity;\r\n }\r\n\r\n return {\r\n ...entity,\r\n configuration: {\r\n ...(entity.configuration ?? {}),\r\n color,\r\n },\r\n };\r\n });\r\n }\r\n\r\n private toDashboardData(\r\n data: ClientListInformativeDashboardPayload,\r\n title: string,\r\n ): DashboardBuilderData {\r\n const filters = data.filters;\r\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\r\n const configuration = link.configuration ?? {};\r\n\r\n return {\r\n ...configuration,\r\n id: link.id,\r\n chartComponentId: link.chartComponentId,\r\n } as DashboardChartItem;\r\n });\r\n\r\n return {\r\n page: {\r\n id: data.moduleId,\r\n name: { en: title, ar: title },\r\n type: 'Dashboard',\r\n dashboardConfig: {\r\n ignoreQueryFilter: data.ignoreQueryFilter,\r\n filters: data.filters,\r\n versionNumber: data.versionNumber,\r\n extraInfo: data.extraInfo,\r\n },\r\n },\r\n charts,\r\n dialogs: [],\r\n filters: Array.isArray(filters) ? [...filters] : filters ? [filters] : [],\r\n };\r\n }\r\n}\r\n","import { Injectable, computed, inject, signal } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, share, take } from 'rxjs';\r\nimport { RuntimeAction } from '@masterteam/components/runtime-action';\r\nimport {\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n RuntimeTableDisplayRow,\r\n} from '../models/client-list.model';\r\n\r\ninterface CachedActions {\r\n actions: RuntimeAction[];\r\n fetchedAt: number;\r\n}\r\n\r\ninterface RuntimeActionsResponse {\r\n code: number;\r\n data?: { actions?: RuntimeAction[] };\r\n}\r\n\r\nconst DEFAULT_ENDPOINT = 'LevelData/{instanceId}/workspace-record-actions';\r\nconst DEFAULT_CACHE_TTL_MS = 60_000;\r\nconst DEFAULT_TARGET_TYPE = 'ModuleData';\r\n\r\n/**\r\n * Lazy per-row runtime actions. Fetches `workspace-record-actions` only when\r\n * the row's 3-dots menu is opened (or for every visible row when the list\r\n * opts in to `eager`), with per-row caching, in-flight dedupe, and a single\r\n * cache-invalidation hook tied to action execution.\r\n */\r\n@Injectable()\r\nexport class ClientListRuntimeActionsService {\r\n private readonly http = inject(HttpClient);\r\n\r\n private readonly cache = signal<ReadonlyMap<string, CachedActions>>(\r\n new Map(),\r\n );\r\n private readonly inFlightKeys = signal<ReadonlySet<string>>(new Set());\r\n private readonly inFlight = new Map<string, Observable<RuntimeAction[]>>();\r\n\r\n /** Actions keyed by `${listKey}:${recordId}`. */\r\n readonly actionsByRowKey = computed<ReadonlyMap<string, RuntimeAction[]>>(\r\n () => {\r\n const out = new Map<string, RuntimeAction[]>();\r\n for (const [key, value] of this.cache()) {\r\n out.set(key, value.actions);\r\n }\r\n return out;\r\n },\r\n );\r\n\r\n /** Row keys currently being fetched. Drives the popover skeleton state. */\r\n readonly loadingRowKeys = this.inFlightKeys.asReadonly();\r\n\r\n rowKey(listKey: string, recordId: number): string {\r\n return `${listKey}:${recordId}`;\r\n }\r\n\r\n has(\r\n listKey: string,\r\n recordId: number,\r\n ttlMs: number | null | undefined,\r\n ): boolean {\r\n const key = this.rowKey(listKey, recordId);\r\n const entry = this.cache().get(key);\r\n if (!entry) return false;\r\n if (ttlMs == null) return true;\r\n return Date.now() - entry.fetchedAt < ttlMs;\r\n }\r\n\r\n /**\r\n * Fetch (or reuse cached/in-flight) per-row runtime actions for a row.\r\n * Returns an Observable so callers can chain off the result; the cache and\r\n * loading signals are also kept in sync so the table popover skeleton and\r\n * the merged-actions computation react automatically.\r\n */\r\n request(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): Observable<RuntimeAction[]> {\r\n const key = this.rowKey(ctx.listKey, ctx.recordId);\r\n const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\r\n const cached = this.cache().get(key);\r\n if (cached && (ttl == null || Date.now() - cached.fetchedAt < ttl)) {\r\n const actions = cached.actions;\r\n return new Observable<RuntimeAction[]>((subscriber) => {\r\n subscriber.next(actions);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n const inFlight = this.inFlight.get(key);\r\n if (inFlight) {\r\n return inFlight;\r\n }\r\n\r\n const url = this.resolveEndpoint(config.endpoint ?? DEFAULT_ENDPOINT, ctx);\r\n const params = this.buildParams(config, ctx);\r\n\r\n this.markLoading(key, true);\r\n\r\n const obs = this.http.get<RuntimeActionsResponse>(url, { params }).pipe(\r\n map((response) =>\r\n response?.code === 1 ? (response.data?.actions ?? []) : [],\r\n ),\r\n share(),\r\n );\r\n\r\n this.inFlight.set(key, obs);\r\n\r\n obs.pipe(take(1)).subscribe({\r\n next: (actions) => {\r\n this.writeCache(key, actions);\r\n this.markLoading(key, false);\r\n this.inFlight.delete(key);\r\n },\r\n error: () => {\r\n this.writeCache(key, []);\r\n this.markLoading(key, false);\r\n this.inFlight.delete(key);\r\n },\r\n });\r\n\r\n return obs;\r\n }\r\n\r\n invalidateRow(listKey: string, recordId: number): void {\r\n const key = this.rowKey(listKey, recordId);\r\n this.cache.update((current) => {\r\n if (!current.has(key)) return current;\r\n const next = new Map(current);\r\n next.delete(key);\r\n return next;\r\n });\r\n }\r\n\r\n invalidateList(listKey: string): void {\r\n const prefix = `${listKey}:`;\r\n this.cache.update((current) => {\r\n let changed = false;\r\n const next = new Map(current);\r\n for (const key of next.keys()) {\r\n if (key.startsWith(prefix)) {\r\n next.delete(key);\r\n changed = true;\r\n }\r\n }\r\n return changed ? next : current;\r\n });\r\n }\r\n\r\n clearAll(): void {\r\n this.cache.set(new Map());\r\n }\r\n\r\n private writeCache(key: string, actions: RuntimeAction[]): void {\r\n this.cache.update((current) => {\r\n const next = new Map(current);\r\n next.set(key, { actions, fetchedAt: Date.now() });\r\n return next;\r\n });\r\n }\r\n\r\n private markLoading(key: string, loading: boolean): void {\r\n this.inFlightKeys.update((current) => {\r\n const next = new Set(current);\r\n if (loading) next.add(key);\r\n else next.delete(key);\r\n return next;\r\n });\r\n }\r\n\r\n private resolveEndpoint(\r\n template: string,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): string {\r\n const instanceId = ctx.instanceId ?? '';\r\n return template\r\n .replace('{instanceId}', String(instanceId))\r\n .replace('{listKey}', ctx.listKey)\r\n .replace('{moduleId}', String(ctx.moduleId))\r\n .replace('{recordId}', String(ctx.recordId));\r\n }\r\n\r\n private buildParams(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n ): Record<string, string | number> {\r\n if (config.buildParams) {\r\n return config.buildParams(ctx);\r\n }\r\n\r\n const moduleKey = config.resolveModuleKey?.(ctx.row, {\r\n listKey: ctx.listKey,\r\n moduleId: ctx.moduleId,\r\n });\r\n\r\n const params: Record<string, string | number> = {\r\n targetType: DEFAULT_TARGET_TYPE,\r\n targetId: ctx.recordId,\r\n };\r\n\r\n if (moduleKey) {\r\n params['moduleKey'] = moduleKey;\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n\r\nexport function defaultResolveRecordId(\r\n row: RuntimeTableDisplayRow,\r\n): number | null {\r\n const candidates = ['Id', 'id', 'ModuleDataId'] as const;\r\n for (const key of candidates) {\r\n const value = row[key];\r\n if (typeof value === 'number' && Number.isFinite(value)) return value;\r\n if (typeof value === 'string') {\r\n const parsed = Number(value);\r\n if (Number.isFinite(parsed)) return parsed;\r\n }\r\n }\r\n return null;\r\n}\r\n","import { Injectable, signal, WritableSignal } from '@angular/core';\r\nimport { TableFilters } from '@masterteam/components/table';\r\n\r\n/**\r\n * Toolbar state for a single client-list instance: search term, column filters,\r\n * group column, and active tab. Kept as mutable signals so both the table view\r\n * and the cards view can two-way bind to the same source of truth and stay in\r\n * sync when the user toggles between them.\r\n */\r\nexport interface ClientListToolbarBucket {\r\n filters: WritableSignal<TableFilters>;\r\n filterTerm: WritableSignal<string>;\r\n groupBy: WritableSignal<string | null>;\r\n activeTab: WritableSignal<any>;\r\n}\r\n\r\n/**\r\n * Per-list toolbar state holder. Buckets are keyed by list `key` (see\r\n * `ClientListBaseState.key`) so switching between table and cards for the same\r\n * list carries search/filter/group/tab forward. In-memory only — per-component\r\n * `storageKey` persistence on the underlying mt-table continues to handle\r\n * refresh-resilient hydration.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListToolbarService {\r\n private readonly buckets = new Map<string, ClientListToolbarBucket>();\r\n\r\n forList(key: string): ClientListToolbarBucket {\r\n let bucket = this.buckets.get(key);\r\n if (!bucket) {\r\n bucket = {\r\n filters: signal<TableFilters>({}),\r\n filterTerm: signal<string>(''),\r\n groupBy: signal<string | null>(null),\r\n activeTab: signal<any>(null),\r\n };\r\n this.buckets.set(key, bucket);\r\n }\r\n return bucket;\r\n }\r\n\r\n clear(key: string): void {\r\n this.buckets.delete(key);\r\n }\r\n}\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Table,\r\n TableAction,\r\n TableActionShape,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n readonly actionShape = input<TableActionShape | undefined>(undefined);\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly rowClick = output<RuntimeTableDisplayRow>();\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n\r\n /**\r\n * Shared toolbar bucket (search / filters / groupBy / activeTab) keyed by\r\n * list identity. The cards view for the same list resolves the same bucket\r\n * so switching area types preserves the toolbar state.\r\n */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Stable, per-instance storage key. Excludes `areaType` so table and cards\r\n * views for the same logical list share persistence (matches the toolbar\r\n * bucket sharing behaviour).\r\n */\r\n protected readonly tableStorageKey = computed<string | null>(() => {\r\n const s = this.state();\r\n const cfg = s.config;\r\n const parts = [\r\n 'client-list',\r\n s.key,\r\n cfg.type,\r\n cfg.contextKey ?? '',\r\n cfg.moduleId ?? '',\r\n cfg.instanceId ?? '',\r\n ];\r\n const key = parts\r\n .map((p) => String(p ?? ''))\r\n .filter((p) => p.length > 0)\r\n .join(':');\r\n return key.length > 'client-list'.length ? key : null;\r\n });\r\n\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"56\"\r\n scrollHeight=\"520px\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { MTDateFormatPipe } from '@masterteam/components';\r\nimport {\r\n EntitiesPreview,\r\n EntityClickEvent,\r\n} from '@masterteam/components/entities';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableCaption,\r\n TableExportService,\r\n TableGroupingController,\r\n TableValueResolver,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsState,\r\n ClientListLazyLoadEvent,\r\n ClientListState,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst EMPTY_KEY_SET: ReadonlySet<string> = new Set();\r\n\r\ninterface CardGroup {\r\n key: string;\r\n columnLabel: string;\r\n label: string;\r\n accent: string | null;\r\n count: number;\r\n cards: ClientListCard[];\r\n}\r\n\r\n@Component({\r\n selector: 'mt-client-list-cards-view',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoModule,\r\n Card,\r\n Button,\r\n Icon,\r\n EntitiesPreview,\r\n SkeletonModule,\r\n PopoverModule,\r\n TableCaption,\r\n ],\r\n providers: [MTDateFormatPipe],\r\n templateUrl: './client-list-cards-view.html',\r\n})\r\nexport class ClientListCardsView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n private readonly exportService = inject(TableExportService);\r\n private readonly dateFormat = inject(MTDateFormatPipe);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n /** Per-card loading predicate — drives the popover skeleton while runtime\r\n * actions are being fetched. Mirrors the table view's `rowActionsLoadingFn`;\r\n * the predicate operates on the card's row representation (`{ Id, ... }`). */\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly cardClick = output<ClientListCard>();\r\n /** Emitted when a card's 3-dots menu opens, so the parent can lazily fetch\r\n * that record's runtime actions (same contract as the table view). */\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly cardsState = computed(\r\n () => this.state() as ClientListCardsState,\r\n );\r\n\r\n /** Shared toolbar bucket — same instance the table view uses. */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Columns for filter/group/export. `state.columns` is empty for cards area\r\n * (the state service doesn't populate it — see `setCardsResult`), so we\r\n * reconstruct `ColumnDef[]` from the first card's entity metadata. Each\r\n * entity carries its `key`, `name` (label), and `viewType`, which is\r\n * everything `TableValueResolver.getColumnFilterType` needs to classify\r\n * filter behaviour (select / boolean / date / user / text).\r\n */\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n const fromState = this.state().columns;\r\n if (fromState && fromState.length > 0) return fromState;\r\n\r\n const sampleCard = this.cardsState().cards[0];\r\n if (!sampleCard?.entities?.length) return [];\r\n\r\n return sampleCard.entities.map((entity): RuntimeEntityColumnDef => {\r\n const raw = entity as unknown as Record<string, unknown>;\r\n const key =\r\n (typeof raw['key'] === 'string' && raw['key']) ||\r\n (typeof raw['normalizedKey'] === 'string' && raw['normalizedKey']) ||\r\n entity.name;\r\n return {\r\n key: String(key),\r\n label: entity.name ?? String(key),\r\n type: 'entity',\r\n viewType: (entity.viewType ?? 'Text') as string,\r\n };\r\n });\r\n });\r\n\r\n /**\r\n * Row view of each card. Cards carry their data as `entities: EntityData[]`,\r\n * not as a pre-built record, so we rebuild the row shape mt-table expects:\r\n * `{ [entityKey]: EntityData | scalar }`. Falls back to `displayProperties`\r\n * if a newer backend populates it. Row index matches card index so we can\r\n * look up by position elsewhere.\r\n */\r\n protected readonly rowRepresentations = computed<Record<string, unknown>[]>(\r\n () => this.cardsState().cards.map((card) => this.cardToRow(card)),\r\n );\r\n\r\n private cardToRow(card: ClientListCard): Record<string, unknown> {\r\n const fromDisplay = card.displayProperties as\r\n | Record<string, unknown>\r\n | undefined;\r\n const record: Record<string, unknown> =\r\n fromDisplay && Object.keys(fromDisplay).length > 0\r\n ? { Id: card.id, ...fromDisplay }\r\n : { Id: card.id };\r\n\r\n for (const entity of card.entities ?? []) {\r\n const e = entity as unknown as Record<string, unknown>;\r\n const key =\r\n (typeof e['key'] === 'string' && e['key']) ||\r\n (typeof e['normalizedKey'] === 'string' && e['normalizedKey']) ||\r\n entity.name;\r\n const normalizedKey =\r\n typeof e['normalizedKey'] === 'string' ? e['normalizedKey'] : null;\r\n const keys = new Set(\r\n [key, normalizedKey].filter(\r\n (entry): entry is string =>\r\n typeof entry === 'string' && entry.length > 0,\r\n ),\r\n );\r\n\r\n for (const entityKey of keys) {\r\n record[entityKey] = entity;\r\n }\r\n }\r\n return record;\r\n }\r\n\r\n /**\r\n * Stable card → row lookup. Row actions (and their `hidden` / `action`\r\n * callbacks plus the loading predicate) are authored against the table's\r\n * row shape — `{ Id, ...entities }` — so every action interaction routes the\r\n * card through `cardToRow` first. Memoized per card so repeated `hidden`\r\n * evaluations in the template don't rebuild the record each call.\r\n */\r\n private readonly rowByCard = computed<\r\n ReadonlyMap<ClientListCard, RuntimeTableDisplayRow>\r\n >(() => {\r\n const map = new Map<ClientListCard, RuntimeTableDisplayRow>();\r\n for (const card of this.cardsState().cards) {\r\n map.set(card, this.cardToRow(card));\r\n }\r\n return map;\r\n });\r\n\r\n protected rowForCard(card: ClientListCard): RuntimeTableDisplayRow {\r\n return this.rowByCard().get(card) ?? this.cardToRow(card);\r\n }\r\n\r\n /** Visible (non-hidden) actions for a card — mirrors the table's filter. */\r\n protected visibleActionsForCard(card: ClientListCard): TableAction[] {\r\n const row = this.rowForCard(card);\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n protected isCardActionsLoading(card: ClientListCard): boolean {\r\n return this.rowActionsLoadingFn()?.(this.rowForCard(card)) ?? false;\r\n }\r\n\r\n /**\r\n * Open handler for a card's 3-dots menu. Emits `rowActionsRequested` so the\r\n * parent lazily fetches runtime actions for this record, then toggles the\r\n * popover — identical to the table view's `onRowActionsToggle`.\r\n */\r\n protected onCardActionsToggle(\r\n event: Event,\r\n popover: { toggle: (e: Event) => void },\r\n card: ClientListCard,\r\n ): void {\r\n this.rowActionsRequested.emit(this.rowForCard(card));\r\n popover.toggle(event);\r\n }\r\n\r\n /** Run a card action, honouring optional confirmation — same flow as the\r\n * table view's `rowAction`. */\r\n protected runCardAction(\r\n event: Event,\r\n action: TableAction,\r\n card: ClientListCard,\r\n ): void {\r\n const row = this.rowForCard(card);\r\n if (!action.confirmation) {\r\n action.action(row);\r\n return;\r\n }\r\n\r\n if (action.confirmation.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n ...action.confirmation,\r\n accept: () => action.action(row),\r\n reject: () => {},\r\n });\r\n return;\r\n }\r\n\r\n this.confirmationService.confirm({\r\n event,\r\n ...action.confirmation,\r\n accept: () => action.action(row),\r\n reject: () => {},\r\n });\r\n }\r\n\r\n // Local throwaway signals for the grouping controller's sort arguments —\r\n // cards don't sort via column click so the controller's sort-pinning\r\n // side-effect is a no-op here.\r\n private readonly noopSortField = signal<string | null>(null);\r\n private readonly noopSortDir = signal<'asc' | 'desc' | null>(null);\r\n\r\n /**\r\n * Writable proxy around `bucket().groupBy` — the grouping controller wants a\r\n * `WritableSignal<string | null>`. Reads delegate to the current bucket's\r\n * signal; writes mutate it via `.set()`. This keeps the controller's\r\n * `setGroup()` side-effect safe even though cards view callers never invoke\r\n * it today.\r\n */\r\n private readonly groupBySignal: WritableSignal<string | null> = (() => {\r\n const read = computed(() => this.bucket().groupBy());\r\n const proxy = ((...args: [] | [string | null]) =>\r\n args.length === 0 ? read() : this.bucket().groupBy.set(args[0]!)) as any;\r\n proxy.set = (value: string | null) => this.bucket().groupBy.set(value);\r\n proxy.update = (fn: (value: string | null) => string | null) =>\r\n this.bucket().groupBy.set(fn(this.bucket().groupBy()));\r\n proxy.asReadonly = () => read;\r\n return proxy as WritableSignal<string | null>;\r\n })();\r\n\r\n /**\r\n * Grouping controller bound to the shared toolbar bucket, so picking a group\r\n * in the cards menu surfaces in the table view's group header (and vice\r\n * versa) when the user toggles area types.\r\n */\r\n protected readonly grouping = new TableGroupingController(\r\n this.columns,\r\n this.rowRepresentations,\r\n this.groupBySignal,\r\n this.noopSortField,\r\n this.noopSortDir,\r\n );\r\n\r\n /**\r\n * Visible (after search + filters) cards. Backend-paginated lists re-query\r\n * on filter change so `cards` already reflects the server response and this\r\n * just passes through; local lists filter in-place.\r\n */\r\n protected readonly visibleCards = computed<ClientListCard[]>(() => {\r\n const state = this.cardsState();\r\n const isLazy = state.config.isPaginated;\r\n const cards = state.cards;\r\n\r\n if (isLazy) return cards;\r\n\r\n const term = this.bucket().filterTerm().trim().toLowerCase();\r\n const filters = this.bucket().filters();\r\n const columns = this.columns();\r\n const filterKeys = Object.keys(filters);\r\n\r\n return cards.filter((card, index) => {\r\n const row = this.rowRepresentations()[index] ?? {};\r\n\r\n // Row values are EntityData envelopes (`{ name, value, viewType, ... }`),\r\n // identical to the shape mt-table builds. Reuse its recursive matcher so\r\n // the cards view searches every nested property value exactly like the\r\n // table view. The old shallow `resolveDisplayValue(value)` returned the\r\n // entity's `name` (field label) instead of its `value`, so every\r\n // value-based search missed and the grid was always \"not found\".\r\n if (term && !TableValueResolver.matchesSearchTerm(row, term)) {\r\n return false;\r\n }\r\n\r\n if (filterKeys.length === 0) return true;\r\n return filterKeys.every((key) => {\r\n if (key === 'generalSearch') return true;\r\n const column = columns.find((c) => c.key === key);\r\n return TableValueResolver.matchesFilter(row, key, filters[key], column);\r\n });\r\n });\r\n });\r\n\r\n /**\r\n * Grouped cards. Reuses TableGroupingController helpers so the accent color,\r\n * label, and count rendering match the table's subheader exactly.\r\n */\r\n protected readonly groupedCards = computed<CardGroup[]>(() => {\r\n const column = this.grouping.activeGroupColumn();\r\n if (!column) return [];\r\n\r\n const groups = new Map<string, CardGroup>();\r\n this.visibleCards().forEach((card) => {\r\n const row = this.cardToRow(card);\r\n const label = this.grouping.getGroupLabel(row);\r\n const accent = this.grouping.getGroupAccentColor(row);\r\n const key = `${label}__${accent ?? ''}`;\r\n\r\n const existing = groups.get(key);\r\n if (existing) {\r\n existing.cards.push(card);\r\n existing.count += 1;\r\n } else {\r\n groups.set(key, {\r\n key,\r\n columnLabel: column.label,\r\n label,\r\n accent,\r\n count: 1,\r\n cards: [card],\r\n });\r\n }\r\n });\r\n\r\n return Array.from(groups.values());\r\n });\r\n\r\n /**\r\n * Export the visible (after search + filter) cards as XLSX. Uses the cards'\r\n * derived row shape + the state's columns, so the file mirrors what the\r\n * user sees. Custom columns are excluded upstream by `TableExportService`.\r\n */\r\n /**\r\n * Set of column keys that are click-to-filter eligible — same predicate\r\n * mt-table's `isCellClickFilterable` uses (select / boolean / user). One\r\n * set computed once per columns / first-card change; all visible cards\r\n * read from it. Reactive via signal — when columns load, the entities\r\n * inside cards automatically become clickable.\r\n */\r\n protected readonly clickableEntityKeys = computed<ReadonlySet<string>>(() => {\r\n const sample = this.cardsState().cards[0]\r\n ? this.cardToRow(this.cardsState().cards[0])\r\n : undefined;\r\n const result = new Set<string>();\r\n for (const column of this.columns()) {\r\n const filterType = TableValueResolver.getColumnFilterType(column, sample);\r\n if (\r\n filterType === 'select' ||\r\n filterType === 'user' ||\r\n filterType === 'boolean'\r\n ) {\r\n result.add(column.key);\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n /**\r\n * Per-card set of entity keys that match the active filter — passed into\r\n * `<mt-entities-preview [activeKeys]>`. Computed lazily per card via the\r\n * helper below; bucket changes (filter add / remove) automatically\r\n * invalidate any place that reads from this in a template.\r\n */\r\n protected activeKeysForCard(card: ClientListCard): ReadonlySet<string> {\r\n const filters = this.bucket().filters();\r\n const filterKeys = Object.keys(filters);\r\n if (filterKeys.length === 0) return EMPTY_KEY_SET;\r\n\r\n const row = this.cardToRow(card);\r\n const result = new Set<string>();\r\n for (const key of filterKeys) {\r\n if (key === 'generalSearch') continue;\r\n const column = this.columns().find((c) => c.key === key);\r\n if (!column) continue;\r\n const cellTarget = TableValueResolver.buildClickFilterValue(row, column);\r\n if (cellTarget === null || cellTarget === undefined) continue;\r\n if (TableValueResolver.isFilterValueEqual(filters[key], cellTarget)) {\r\n result.add(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Click-to-filter handler invoked from `<mt-entities-preview (entityClick)>`.\r\n * Mirrors mt-table's `onCellFilterClick`: builds the filter value via the\r\n * shared `TableValueResolver`, toggles it on the shared toolbar bucket so\r\n * the funnel chip in the filter popover lights up, and clears on a second\r\n * click against the same value.\r\n */\r\n protected onEntityFilterClick(\r\n card: ClientListCard,\r\n event: EntityClickEvent,\r\n ): void {\r\n const column = this.columns().find((c) => c.key === event.key);\r\n if (!column) return;\r\n\r\n const row = this.cardToRow(card);\r\n const next = TableValueResolver.buildClickFilterValue(row, column);\r\n if (next === null || next === undefined) return;\r\n\r\n const current = this.bucket().filters();\r\n const patched = { ...current };\r\n if (TableValueResolver.isFilterValueEqual(current[column.key], next)) {\r\n delete patched[column.key];\r\n } else {\r\n patched[column.key] = next;\r\n }\r\n this.bucket().filters.set(patched);\r\n }\r\n\r\n protected exportExcel(): void {\r\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\r\n this.exportService.exportToExcel({\r\n rows,\r\n columns: this.columns(),\r\n filename: this.resolveExportFilename(),\r\n resolveValue: (row, column) => this.resolveCellValue(row, column),\r\n });\r\n }\r\n\r\n protected printPdf(): void {\r\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\r\n this.exportService.printPdf({\r\n rows,\r\n columns: this.columns(),\r\n filename: this.resolveExportFilename(),\r\n title: this.cardsState().title || undefined,\r\n resolveValue: (row, column) => this.resolveCellValue(row, column),\r\n });\r\n }\r\n\r\n private resolveExportFilename(): string {\r\n const title = this.cardsState().title?.trim();\r\n return title || this.cardsState().moduleKey || 'cards';\r\n }\r\n\r\n /**\r\n * Value resolver compatible with `TableExportConfig.resolveValue`. Reuses\r\n * `TableValueResolver` so currency, dates, entities, booleans export the\r\n * same way they would from the table view. Date columns (native or entity\r\n * with viewType `Date`/`DateTime`) are passed through `mtDateFormat` so\r\n * Excel and PDF show locale-formatted dates instead of raw ISO strings.\r\n */\r\n private resolveCellValue(\r\n row: unknown,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n if (cellValue === null || cellValue === undefined) return null;\r\n\r\n const dateType = this.resolveDateColumnType(column, cellValue);\r\n if (dateType) {\r\n const source =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(cellValue, 'sort')\r\n : cellValue;\r\n const dateValue = TableValueResolver.resolveDateValue(source);\r\n if (dateValue === null) return null;\r\n const formatted = this.dateFormat.transform(dateValue, dateType);\r\n return formatted || null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'export');\r\n }\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n private resolveDateColumnType(\r\n column: ColumnDef,\r\n cellValue: unknown,\r\n ): 'date' | 'dateTime' | null {\r\n if (column.type === 'date') return 'date';\r\n if (column.type === 'dateTime') return 'dateTime';\r\n if (column.type !== 'entity') return null;\r\n\r\n const viewType = (column as { viewType?: unknown }).viewType;\r\n const fromColumn =\r\n typeof viewType === 'string' ? viewType.toLowerCase() : '';\r\n if (fromColumn === 'datetime') return 'dateTime';\r\n if (fromColumn === 'date') return 'date';\r\n\r\n if (cellValue && typeof cellValue === 'object') {\r\n const inner = (cellValue as { viewType?: string }).viewType;\r\n if (inner === 'DateTime') return 'dateTime';\r\n if (inner === 'Date') return 'date';\r\n }\r\n return null;\r\n }\r\n\r\n constructor() {\r\n // Emit lazyLoad only on filter / search changes for paginated lists,\r\n // matching mt-table's behaviour (group-by is a pure FE concern, not a\r\n // re-fetch trigger). Skip the initial firing while the bucket is still at\r\n // its default empty state so we don't double-fetch on mount.\r\n let primed = false;\r\n effect(() => {\r\n const state = this.cardsState();\r\n const filters = this.bucket().filters();\r\n const filterTerm = this.bucket().filterTerm();\r\n\r\n if (!state.config.isPaginated) return;\r\n if (!primed) {\r\n primed = true;\r\n if (Object.keys(filters).length === 0 && !filterTerm) return;\r\n }\r\n\r\n queueMicrotask(() =>\r\n this.lazyLoad.emit({\r\n filters: {\r\n ...filters,\r\n ...(filterTerm ? { generalSearch: filterTerm } : {}),\r\n },\r\n pageSize: state.take,\r\n first: state.skip,\r\n currentPage: state.skip / Math.max(state.take, 1) + 1,\r\n } as ClientListLazyLoadEvent),\r\n );\r\n });\r\n }\r\n}\r\n","<mt-table-caption\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"popover\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [exportable]=\"true\"\r\n [columns]=\"columns()\"\r\n [data]=\"rowRepresentations()\"\r\n [groupColumns]=\"grouping.groupableColumns()\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (exportRequested)=\"exportExcel()\"\r\n (printRequested)=\"printPdf()\"\r\n/>\r\n\r\n@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (visibleCards().length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{ \"components.clientComponents.list.noCardsFound\" | transloco }}\r\n </div>\r\n} @else if (grouping.groupingActive()) {\r\n <div class=\"flex flex-col gap-6\">\r\n @for (group of groupedCards(); track group.key) {\r\n <section class=\"flex flex-col gap-3\">\r\n <header\r\n class=\"flex items-center gap-3 px-2 py-2 bg-surface-50 dark:bg-surface-900 border-y border-surface-200 dark:border-surface-700 rounded\"\r\n [style.--mt-group-accent]=\"group.accent ?? 'var(--p-primary-color)'\"\r\n >\r\n <span\r\n class=\"inline-block w-1 h-5 rounded-full\"\r\n [style.background]=\"'var(--mt-group-accent)'\"\r\n ></span>\r\n <span\r\n class=\"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ group.columnLabel }}\r\n </span>\r\n <span class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ group.label }}\r\n </span>\r\n <span\r\n class=\"ml-auto inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300\"\r\n >\r\n {{ group.count }}\r\n </span>\r\n </header>\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of group.cards; track card.id) {\r\n <mt-card\r\n class=\"relative cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <ng-container\r\n [ngTemplateOutlet]=\"cardActionsMenu\"\r\n [ngTemplateOutletContext]=\"{ $implicit: card }\"\r\n />\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [stackOnNarrow]=\"false\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"\r\n 'components.table.filterByThis' | transloco\r\n \"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n </section>\r\n }\r\n </div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of visibleCards(); track card.id) {\r\n @defer (on viewport) {\r\n <mt-card\r\n class=\"relative cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <ng-container\r\n [ngTemplateOutlet]=\"cardActionsMenu\"\r\n [ngTemplateOutletContext]=\"{ $implicit: card }\"\r\n />\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [stackOnNarrow]=\"false\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"'components.table.filterByThis' | transloco\"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n } @placeholder {\r\n <div class=\"min-h-[20rem]\">\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<!--\r\n Per-card 3-dots actions menu — same contract as the table view's popover\r\n row-actions. Rendered into each card's top-end corner; clicks stop at the\r\n wrapper so the card's own click (cardClick) doesn't fire.\r\n-->\r\n<ng-template #cardActionsMenu let-card>\r\n @if (rowActions().length > 0) {\r\n <div class=\"absolute end-2 top-2 z-10\" (click)=\"$event.stopPropagation()\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [tooltip]=\"'components.table.actions' | transloco\"\r\n (onClick)=\"onCardActionsToggle($event, cardPopover, card)\"\r\n />\r\n <p-popover #cardPopover appendTo=\"body\">\r\n <div class=\"flex min-w-44 flex-col gap-1 p-1\">\r\n @if (isCardActionsLoading(card)) {\r\n <div class=\"flex flex-col gap-2 p-1\">\r\n <p-skeleton height=\"1.75rem\" />\r\n <p-skeleton height=\"1.75rem\" />\r\n <p-skeleton height=\"1.75rem\" />\r\n </div>\r\n } @else {\r\n @for (action of visibleActionsForCard(card); track $index) {\r\n <button\r\n type=\"button\"\r\n class=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 text-start text-sm transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n runCardAction($event, action, card); cardPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon [icon]=\"action.icon\" class=\"text-base\" />\r\n }\r\n <span>{{ action.label || action.tooltip }}</span>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n }\r\n</ng-template>\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule, TranslocoPipe],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly dashboardExtraFilters = computed(() => {\r\n const config = this.informativeState().config;\r\n const extraFilters: Record<string, unknown> = {};\r\n\r\n if (config.instanceId != null) {\r\n extraFilters['currentId'] = config.instanceId;\r\n }\r\n\r\n for (const filter of config.filters ?? []) {\r\n if (!filter.key) {\r\n continue;\r\n }\r\n\r\n extraFilters[filter.key] = filter.value;\r\n }\r\n\r\n return extraFilters;\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{\r\n \"components.clientComponents.list.noInformativeDashboard\"\r\n | transloco\r\n }}\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n [extraFilters]=\"dashboardExtraFilters()\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TableAction } from '@masterteam/components/table';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListRuntimeActionsService,\r\n defaultResolveRecordId,\r\n} from './services/client-list-runtime-actions.service';\r\nimport { ClientListToolbarService } from './services/client-list-toolbar';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 100;\r\nconst DEFAULT_TABLE_PAGE_SIZE = 100;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 3000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [\r\n ClientListStateService,\r\n ClientListRuntimeActionsService,\r\n ClientListToolbarService,\r\n ],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n private readonly runtimeActions = inject(ClientListRuntimeActionsService);\r\n private readonly runtimeRunner = inject(RuntimeActionRunner);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n /**\r\n * Called by the table view when a row's 3-dots menu is opened. Triggers a\r\n * lazy fetch of that row's runtime actions when `runtimeRecordActions` is\r\n * enabled with the default `onMenuOpen` strategy. Skips when the cache is\r\n * still warm — the service handles in-flight dedupe and TTL.\r\n */\r\n onRowActionsRequested(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return;\r\n if ((config.loadStrategy ?? 'onMenuOpen') !== 'onMenuOpen') return;\r\n\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n\r\n /**\r\n * Per-row predicate used by the popover skeleton state.\r\n */\r\n isRowActionsLoading(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): boolean {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return false;\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return false;\r\n return this.runtimeActions\r\n .loadingRowKeys()\r\n .has(this.runtimeActions.rowKey(item.key, recordId));\r\n }\r\n\r\n /**\r\n * Per-list merged row-actions, keyed by item.key. Static `rowActions` are\r\n * augmented with one entry per distinct runtime `actionKey` discovered for\r\n * any row in the list, and re-evaluated when the runtime cache changes.\r\n */\r\n protected readonly mergedRowActionsByKey = computed<\r\n ReadonlyMap<string, TableAction[]>\r\n >(() => {\r\n const cache = this.runtimeActions.actionsByRowKey();\r\n const result = new Map<string, TableAction[]>();\r\n for (const item of this.state.items()) {\r\n result.set(item.key, this.computeMergedRowActions(item, cache));\r\n }\r\n return result;\r\n });\r\n\r\n /** Fallback used by the template when no entry exists for an item.key. */\r\n private readonly emptyActions: TableAction[] = [];\r\n private readonly rowActionsLoadingFnCache = new Map<\r\n string,\r\n (row: RuntimeTableDisplayRow) => boolean\r\n >();\r\n\r\n rowActionsFor(item: ClientListState): TableAction[] {\r\n return (\r\n this.mergedRowActionsByKey().get(item.key) ??\r\n item.config.rowActions ??\r\n this.emptyActions\r\n );\r\n }\r\n\r\n rowActionsLoadingFnFor(\r\n item: ClientListState,\r\n ): (row: RuntimeTableDisplayRow) => boolean {\r\n let fn = this.rowActionsLoadingFnCache.get(item.key);\r\n if (!fn) {\r\n const itemKey = item.key;\r\n fn = (row: RuntimeTableDisplayRow) => {\r\n const current = this.state.itemsByKey()[itemKey];\r\n return current ? this.isRowActionsLoading(current, row) : false;\r\n };\r\n this.rowActionsLoadingFnCache.set(itemKey, fn);\r\n }\r\n return fn;\r\n }\r\n\r\n private computeMergedRowActions(\r\n item: ClientListState,\r\n cache: ReadonlyMap<string, RuntimeAction[]>,\r\n ): TableAction[] {\r\n const baseActions = item.config.rowActions ?? [];\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return baseActions;\r\n\r\n const prefix = `${item.key}:`;\r\n const prototypes = new Map<string, RuntimeAction>();\r\n for (const [key, actions] of cache) {\r\n if (!key.startsWith(prefix)) continue;\r\n for (const action of actions) {\r\n if (!prototypes.has(action.actionKey)) {\r\n prototypes.set(action.actionKey, action);\r\n }\r\n }\r\n }\r\n\r\n if (prototypes.size === 0) {\r\n return baseActions;\r\n }\r\n\r\n const icon = config.actionIcon ?? 'media.play-circle';\r\n const runtimeActionEntries: TableAction[] = [];\r\n for (const [actionKey, prototype] of prototypes) {\r\n const label = resolveActionLabel(prototype);\r\n const presentation = config.resolveActionPresentation?.(prototype) ?? {};\r\n runtimeActionEntries.push({\r\n icon: (presentation.icon ?? icon) as TableAction['icon'],\r\n color: presentation.color ?? 'secondary',\r\n variant: presentation.variant ?? 'outlined',\r\n label: presentation.label ?? label,\r\n tooltip: presentation.tooltip ?? label,\r\n loading: presentation.loading,\r\n hidden: (row) => {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return true;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, recordId),\r\n );\r\n return !rowActions?.some(\r\n (a) => a.actionKey === actionKey && a.isAvailable !== false,\r\n );\r\n },\r\n action: (row) => {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, ctx.recordId),\r\n );\r\n const action = rowActions?.find((a) => a.actionKey === actionKey);\r\n if (action) {\r\n void this.executeRuntimeAction(item, ctx, config, action);\r\n }\r\n },\r\n });\r\n }\r\n\r\n return [...baseActions, ...runtimeActionEntries];\r\n }\r\n\r\n private async executeRuntimeAction(\r\n item: ClientListState,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n action: RuntimeAction,\r\n ): Promise<void> {\r\n const handled = await Promise.resolve(\r\n config.onActionTriggered?.(action, ctx),\r\n );\r\n if (handled === true) return;\r\n\r\n const result = await this.runtimeRunner.execute(action, {\r\n defaultAfterSuccess: 'refresh',\r\n });\r\n\r\n if (result.status !== 'success') return;\r\n\r\n if (result.afterSuccess === 'refresh' || result.afterSuccess == null) {\r\n this.runtimeActions.invalidateList(item.key);\r\n this.reloadByKey(item.key);\r\n config.onActionExecuted?.(action, ctx);\r\n }\r\n }\r\n\r\n private toRuntimeActionsContext(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ): ClientListRuntimeRecordActionsContext | null {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return null;\r\n\r\n return {\r\n listKey: item.key,\r\n contextKey: item.config.contextKey ?? null,\r\n instanceId: item.config.instanceId ?? null,\r\n moduleId: item.config.moduleId ?? 0,\r\n row,\r\n recordId,\r\n };\r\n }\r\n\r\n private resolveRecordId(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n row: RuntimeTableDisplayRow,\r\n ): number | null {\r\n return (config.resolveRecordId ?? defaultResolveRecordId)(row);\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.informativeDashboard',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n item.areaType === 'cards'\r\n ? 'components.clientComponents.list.cards'\r\n : 'components.clientComponents.list.table',\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n this.rowActionsLoadingFnCache.clear();\r\n this.runtimeActions.clearAll();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const configuredTablePageSize = this.resolvePositiveInteger(\r\n formConfig?.table?.pageSize,\r\n );\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (this.resolvePositiveInteger(formConfig?.take) ??\r\n configuredTablePageSize ??\r\n this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.tableRowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.rowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getInformativeDashboard(config.levelId!, config.moduleId)\r\n .subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.informativeLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId:\r\n formConfig?.instanceId ?? informativeConfig?.instanceId ?? null,\r\n filters: formConfig?.filters ?? informativeConfig?.filters ?? [],\r\n levelId: informativeConfig?.levelId ?? null,\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n table: this.resolveTableDisplayConfig(formConfig, take, isPaginated),\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\r\n contentEnd: config.contentEnd,\r\n templateContent: config.templateContent,\r\n rowActions: config.rowActions ?? [],\r\n actionShape: config.actionShape,\r\n dataLoaded: config.dataLoaded,\r\n runtimeRecordActions: config.runtimeRecordActions,\r\n transformResult: formConfig?.transformResult,\r\n collapse: {\r\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return [\r\n 'informative',\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n index,\r\n ].join('-');\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private resolveTableDisplayConfig(\r\n config: ClientListFormConfiguration | null,\r\n take: number,\r\n isPaginated: boolean,\r\n ) {\r\n const configuredPageSize = this.resolvePositiveInteger(\r\n config?.table?.pageSize,\r\n );\r\n\r\n return {\r\n pageSize: isPaginated\r\n ? take\r\n : (configuredPageSize ?? DEFAULT_TABLE_PAGE_SIZE),\r\n searchable: config?.table?.searchable ?? false,\r\n exportable: config?.table?.exportable ?? false,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private resolvePositiveInteger(value: number | undefined): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n\r\n for (const key of this.rowActionsLoadingFnCache.keys()) {\r\n if (!activeKeys.has(key)) {\r\n this.rowActionsLoadingFnCache.delete(key);\r\n this.runtimeActions.invalidateList(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.maybeEagerLoadRuntimeActions(item);\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private maybeEagerLoadRuntimeActions(item: ClientListState): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled || config.loadStrategy !== 'eager') return;\r\n if (item.type !== 'form' || item.areaType !== 'table') return;\r\n\r\n for (const row of item.rows) {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) continue;\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.levelId ?? 'x',\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'dashboard',\r\n ].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return (\r\n config.levelId != null &&\r\n Number.isFinite(config.levelId) &&\r\n config.levelId > 0 &&\r\n Number.isFinite(config.moduleId) &&\r\n config.moduleId > 0\r\n );\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.errors.missingModuleId',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n config.areaType === 'cards'\r\n ? 'components.clientComponents.list.errors.missingContextKey'\r\n : 'components.clientComponents.list.errors.missingContextAndInstance',\r\n );\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n\r\n private serializeFilters(\r\n filters: NormalizedClientListConfiguration['filters'] | undefined,\r\n ): string {\r\n return JSON.stringify(filters ?? []);\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [actionShape]=\"item.config.actionShape\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/client-components",
3
- "version": "0.0.53",
3
+ "version": "0.0.54",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/client-components",
6
6
  "linkDirectory": true,
@@ -16,9 +16,9 @@
16
16
  "rxjs": "^7.8.2",
17
17
  "tailwindcss": "^4.2.2",
18
18
  "tailwindcss-primeui": "^0.6.1",
19
+ "@masterteam/components": "^0.0.215",
20
+ "@masterteam/dashboard-builder": "^0.0.49",
19
21
  "@masterteam/forms": "^0.0.108",
20
- "@masterteam/components": "^0.0.213",
21
- "@masterteam/dashboard-builder": "^0.0.40",
22
22
  "@masterteam/icons": "^0.0.17"
23
23
  },
24
24
  "dependencies": {