@solcre-org/core-ui 2.20.7 → 2.20.9

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.
@@ -1377,6 +1377,9 @@ class SelectFieldComponent extends BaseFieldComponent {
1377
1377
  const hasValidValue = !Array.isArray(signalValue) || signalValue.length > 0;
1378
1378
  this.hasValue.set(hasValidValue);
1379
1379
  }
1380
+ else {
1381
+ this.hasValue.set(false);
1382
+ }
1380
1383
  });
1381
1384
  effect(() => {
1382
1385
  const shouldDisable = this.mode() === ModalMode.VIEW || this.evaluateReadonly() || this.evaluateDisabled();
@@ -10300,8 +10303,17 @@ class TableDataService {
10300
10303
  this.setEndpoint(endpoint, modelFactory, loaderId, this.isPaginationEnabled, customArrayKey, params);
10301
10304
  return;
10302
10305
  }
10303
- this.currentCustomParams = { ...params };
10304
- this.loadData(this.currentFilterParams, this.currentPaginationParams, loaderId);
10306
+ if (this.isLoading) {
10307
+ return;
10308
+ }
10309
+ this.isLoading = true;
10310
+ if (loaderId) {
10311
+ this.loaderService.showLoader(loaderId);
10312
+ }
10313
+ this.modelApiService.loadData(endpoint, modelFactory, params, customArrayKey);
10314
+ setTimeout(() => {
10315
+ this.isLoading = false;
10316
+ }, 100);
10305
10317
  }
10306
10318
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10307
10319
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableDataService, providedIn: 'root' });
@@ -13650,7 +13662,7 @@ class GenericTableComponent {
13650
13662
  this.paginationService.initialize(this.tableId, this.endpoint() ? 0 : this.filterService.getFilteredData().length, this.pageSizeOptions());
13651
13663
  this.subscriptions.push(this.paginationService.paginationChange$.subscribe(event => {
13652
13664
  if (event.tableId === this.tableId && this.endpoint()) {
13653
- this.tableDataService.updatePagination(event.page, event.size, this.MAIN_DATA_LOADER_ID);
13665
+ this.reloadDataWithCurrentParams();
13654
13666
  }
13655
13667
  else if (!this.endpoint()) {
13656
13668
  this.updateDisplayedDataFromServer(this.filterService.getFilteredData());
@@ -16688,6 +16700,7 @@ class HeaderComponent {
16688
16700
  filterRequested = output();
16689
16701
  createRequested = output();
16690
16702
  globalActionTriggered = output();
16703
+ clearTrigger = signal(0);
16691
16704
  constructor() {
16692
16705
  this.user = this.authService.getLoggedUser();
16693
16706
  }
@@ -16927,12 +16940,13 @@ class HeaderComponent {
16927
16940
  return allFilters.filter(filter => filter.showOutsideFilterModal === true);
16928
16941
  }
16929
16942
  getFilterValue(key) {
16943
+ const trigger = this.clearTrigger();
16930
16944
  const pendingFilters = this.headerService.getPendingHeaderFilters()();
16931
16945
  const appliedFilters = this.headerService.getHeaderFilterValues()();
16932
16946
  if (pendingFilters.has(key)) {
16933
- return pendingFilters.get(key) ?? '';
16947
+ return pendingFilters.get(key) ?? null;
16934
16948
  }
16935
- return appliedFilters.get(key) ?? '';
16949
+ return appliedFilters.get(key) ?? null;
16936
16950
  }
16937
16951
  onFilterValueChange(key, value) {
16938
16952
  const callback = this.headerService.getHeaderFilterChangeCallback()();
@@ -16989,6 +17003,12 @@ class HeaderComponent {
16989
17003
  if (clearCallback) {
16990
17004
  clearCallback();
16991
17005
  }
17006
+ const emptyFilters = new Map();
17007
+ this.getHeaderFilters().forEach(filter => {
17008
+ emptyFilters.set(filter.key.toString(), null);
17009
+ });
17010
+ this.headerService.setPendingHeaderFilters(emptyFilters);
17011
+ this.clearTrigger.update(v => v + 1);
16992
17012
  }
16993
17013
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16994
17014
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: HeaderComponent, isStandalone: true, selector: "core-header", outputs: { filterRequested: "filterRequested", createRequested: "createRequested", globalActionTriggered: "globalActionTriggered" }, hostDirectives: [{ directive: CoreHostDirective }], ngImport: i0, template: "@if (headerService.getIsVisible()()) {\n @if (!headerService.getHeaderOutside()()) {\n <div class=\"c-header\">\n <div class=\"c-header__row\">\n <div class=\"c-header__group\">\n <h2 class=\"c-header__heading u-heading\">{{ getHeaderTitle() }}</h2>\n </div>\n\n <div class=\"c-header__group u-flex\">\n @for (\n element of headerService.getOrderedElements();\n track element.type + \"-\" + (element.actionId || $index)\n ) {\n @if (headerService.isElementVisible(element.type, element)) {\n @switch (element.type) {\n @case (HeaderElementType.GLOBAL_ACTIONS) {\n @for (\n globalAction of headerService.getGlobalActions()();\n track globalAction.label || $index\n ) {\n @if (hasPermission(globalAction)) {\n @if (\n globalAction.isSwitch && globalAction.switchOptions\n ) {\n <core-generic-switch\n [options]=\"globalAction.switchOptions\"\n [selectedValue]=\"globalAction.switchSelectedValue\"\n [ariaLabel]=\"\n globalAction.switchAriaLabel ||\n globalAction.label ||\n 'Switch options'\n \"\n (valueChange)=\"\n onGlobalSwitchChange($event, globalAction)\n \"\n >\n </core-generic-switch>\n } @else {\n <core-generic-button\n [config]=\"getGlobalActionButtonConfig(globalAction)\"\n (buttonClick)=\"\n onGlobalButtonClick($event, globalAction)\n \"\n >\n </core-generic-button>\n }\n }\n }\n }\n\n @case (HeaderElementType.CUSTOM_ACTIONS) {\n @for (\n customAction of headerService.getCustomActions()();\n track customAction.id\n ) {\n @if (isCustomActionVisible(customAction)) {\n <core-generic-button\n [config]=\"getCustomActionButtonConfig(customAction)\"\n (buttonClick)=\"\n onCustomButtonClick($event, customAction)\n \"\n >\n </core-generic-button>\n }\n }\n }\n\n @case (HeaderElementType.FILTER) {\n <core-generic-button\n [config]=\"getFilterButtonConfig()\"\n (buttonClick)=\"onFilterButtonClick()\"\n >\n </core-generic-button>\n }\n\n @case (HeaderElementType.CREATE) {\n <core-generic-button\n [config]=\"getCreateButtonConfig()\"\n (buttonClick)=\"onCreateButtonClick()\"\n >\n </core-generic-button>\n }\n\n @case (HeaderElementType.INDIVIDUAL_ACTION) {\n @if (getIndividualAction(element); as action) {\n @if (hasIndividualActionPermission(action)) {\n @if (isIndividualActionSwitch(action)) {\n <core-generic-switch\n [options]=\"action.switchOptions\"\n [selectedValue]=\"action.switchSelectedValue\"\n [ariaLabel]=\"\n action.switchAriaLabel ||\n action.label ||\n 'Switch options'\n \"\n (valueChange)=\"onGlobalSwitchChange($event, action)\"\n >\n </core-generic-switch>\n } @else if (element.actionType === \"global\") {\n <core-generic-button\n [config]=\"getGlobalActionButtonConfig(action)\"\n (buttonClick)=\"onGlobalButtonClick($event, action)\"\n >\n </core-generic-button>\n } @else if (element.actionType === \"custom\") {\n <core-generic-button\n [config]=\"getCustomActionButtonConfig(action)\"\n (buttonClick)=\"onCustomButtonClick($event, action)\"\n >\n </core-generic-button>\n }\n }\n }\n }\n }\n }\n }\n </div>\n </div>\n\n <p class=\"c-header__text u-text\" *ngIf=\"getHeaderText()\">\n {{ getHeaderText() }}\n </p>\n\n @if (\n headerService.isElementVisible(HeaderElementType.CUSTOM_TEMPLATE) &&\n headerService.getCustomTemplate()()\n ) {\n <ng-container\n [ngTemplateOutlet]=\"headerService.getCustomTemplate()()\"\n ></ng-container>\n }\n\n <!-- Custom filters outside modal -->\n @if (getHeaderFilters().length > 0) {\n <div class=\"c-header__bottom\">\n <div class=\"c-header__filters\">\n <!-- Filter fields row -->\n <div>\n @for (filter of getHeaderFilters(); track filter.key) {\n <div class=\"c-header__filter-item\">\n <div\n coreDynamicField\n [field]=\"filter\"\n [value]=\"getFilterValue(filter.key.toString())\"\n [mode]=\"ModalMode.FILTER\"\n [errors]=\"getFilterErrors(filter.key.toString())\"\n (valueChange)=\"\n onFilterValueChange(filter.key.toString(), $event)\n \"\n ></div>\n </div>\n }\n </div>\n\n <!-- Action buttons row -->\n <div class=\"c-header__filter-actions\">\n <core-generic-button\n [config]=\"getApplyFiltersButtonConfig()\"\n (buttonClick)=\"onApplyHeaderFilters()\"\n >\n </core-generic-button>\n <core-generic-button\n [config]=\"getClearFiltersButtonConfig()\"\n (buttonClick)=\"onClearHeaderFilters()\"\n >\n </core-generic-button>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n @if (\n headerService.isElementVisible(HeaderElementType.CUSTOM_TEMPLATE) &&\n headerService.getCustomTemplate()()\n ) {\n <ng-container\n [ngTemplateOutlet]=\"headerService.getCustomTemplate()()\"\n ></ng-container>\n }\n }\n}\n", styles: [":root{--header-bg: #ffffff;--header-text: #333;--header-shadow: rgba(0, 0, 0, .1);--logout-btn-color: #e74c3c;--logout-btn-hover: #c0392b;--theme-btn-color: #666;--theme-btn-hover: #007bff}.dark-mode{--header-bg: #1a1a1a;--header-text: #e0e0e0;--header-shadow: rgba(255, 255, 255, .1);--logout-btn-color: #ff6b6b;--logout-btn-hover: #ff8787;--theme-btn-color: #bbb;--theme-btn-hover: #4da8ff}.header{background-color:var(--header-bg);box-shadow:0 2px 4px var(--header-shadow);padding:15px 20px;display:flex;justify-content:space-between;align-items:center}.header .user-info{font-weight:500;color:var(--header-text)}.header .header-actions{display:flex;align-items:center;gap:15px}.header .theme-toggle-btn{background:none;border:none;color:var(--theme-btn-color);font-size:16px;cursor:pointer;display:flex;align-items:center}.header .theme-toggle-btn:hover{color:var(--theme-btn-hover)}.header .logout-btn{background:none;border:none;color:var(--logout-btn-color);font-size:16px;cursor:pointer;display:flex;align-items:center}.header .logout-btn i{margin-right:5px}.header .logout-btn:hover{color:var(--logout-btn-hover)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: GenericButtonComponent, selector: "core-generic-button", inputs: ["config", "data"], outputs: ["buttonClick"] }, { kind: "component", type: GenericSwitchComponent, selector: "core-generic-switch", inputs: ["options", "selectedValue", "ariaLabel"], outputs: ["valueChange"] }, { kind: "directive", type: DynamicFieldDirective, selector: "[coreDynamicField]", inputs: ["field", "value", "mode", "errors", "rowData", "formValue"], outputs: ["valueChange", "onBlurEvent", "onEnterEvent", "selectionChange"] }] });
@@ -17161,12 +17181,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
17161
17181
  // Este archivo es generado automáticamente por scripts/update-version.js
17162
17182
  // No edites manualmente este archivo
17163
17183
  const VERSION = {
17164
- full: '2.20.7',
17184
+ full: '2.20.9',
17165
17185
  major: 2,
17166
17186
  minor: 20,
17167
- patch: 7,
17168
- timestamp: '2026-02-02T15:53:33.334Z',
17169
- buildDate: '2/2/2026'
17187
+ patch: 9,
17188
+ timestamp: '2026-02-03T15:24:39.625Z',
17189
+ buildDate: '3/2/2026'
17170
17190
  };
17171
17191
 
17172
17192
  class MainNavComponent {