@cityway/bo-ui 1.0.10-beta001 → 1.0.10-beta003

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.
Binary file
Binary file
Binary file
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Input, Component, EventEmitter, Output, HostListener, Directive } from '@angular/core';
2
+ import { Input, Component, EventEmitter, Output, HostListener, Directive, ContentChild } from '@angular/core';
3
3
  import * as i2 from '@ngx-translate/core';
4
4
  import { TranslateModule } from '@ngx-translate/core';
5
5
  import * as i1 from '@angular/common';
6
- import { CommonModule, JsonPipe } from '@angular/common';
6
+ import { CommonModule, NgTemplateOutlet } from '@angular/common';
7
7
  import * as i2$1 from '@angular/cdk/drag-drop';
8
8
  import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
9
9
  import { BadgeTypeEnum, LoaderComponent, BadgeComponent } from '@cityway/basic-ui';
@@ -156,12 +156,13 @@ class TableComponent {
156
156
  this.rowClick = new EventEmitter();
157
157
  this.sortChange = new EventEmitter();
158
158
  this.selectionChange = new EventEmitter();
159
- // @ContentChild('customActions') customActionsTemplate?: TemplateRef<any>;
160
- // public actionOnTableAction = ActionOnTableType;
161
159
  this.currentSortKey = null;
162
160
  this.currentSortDirection = 'asc';
163
161
  this.selectedRows = new Set();
164
162
  }
163
+ getRowClass(row) {
164
+ return this.rowClassFn ? this.rowClassFn(row) : '';
165
+ }
165
166
  ngOnInit() {
166
167
  // on cherche si une colonne a un defaultSort
167
168
  const defaultColumn = this.columns.find(c => c.defaultSort);
@@ -220,7 +221,7 @@ class TableComponent {
220
221
  return this.selectedRows.has(row);
221
222
  }
222
223
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: TableComponent, isStandalone: true, selector: "cw-table", inputs: { checkbox: "checkbox", title: "title", columns: "columns", data: "data", loading: "loading" }, outputs: { rowClick: "rowClick", sortChange: "sortChange", selectionChange: "selectionChange" }, ngImport: i0, template: "<!-- <app-actions-on-table [actionOnTable]=\"actionOnTable\" (actionClick)=\"onActionClick($event)\"\r\n [customContent]=\"customActionsTemplate\"></app-actions-on-table> -->\r\n\r\n<!-- <div *ngIf=\"checkbox\" class=\"actions-on-table on-selection\">\r\n <div class=\"on-selection-info\"> -->\r\n <!-- If one selected item on the current page -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If one selected item on all pages -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n\r\n <!-- If several selected items on the current page -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If several selected items on all pages -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n <!-- </div>\r\n\r\n <button class=\"btn btn-secondary btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.EXPORT_SELECTION' | translate }}\r\n </button>\r\n <button class=\"btn btn-danger btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.DELETE_SELECTION' | translate }}\r\n </button>\r\n</div> -->\r\n\r\n@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label }}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'S\u00E9lectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">S\u00E9lectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @default {\r\n {{ row[column.key] }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: DoubleScrollDirective, selector: "[appDoubleScroll]" }, { kind: "component", type: LoaderComponent, selector: "cw-loader" }, { kind: "component", type: BadgeComponent, selector: "cw-badge", inputs: ["type", "label", "withIcon", "iconPosition", "cssClass", "skeletonMode", "dataTest"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: TableComponent, isStandalone: true, selector: "cw-table", inputs: { checkbox: "checkbox", title: "title", columns: "columns", data: "data", loading: "loading", rowClassFn: "rowClassFn" }, outputs: { rowClick: "rowClick", sortChange: "sortChange", selectionChange: "selectionChange" }, queries: [{ propertyName: "actionsTemplate", first: true, predicate: ["actionsTemplate"], descendants: true }], ngImport: i0, template: "@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label | translate}}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label | translate }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\" [class]=\"getRowClass(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'S\u00E9lectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">S\u00E9lectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] | translate }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @case ('actions') {\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: row }\">\r\n </ng-container>\r\n }\r\n @default {\r\n {{ row[column.key] | translate }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: DoubleScrollDirective, selector: "[appDoubleScroll]" }, { kind: "component", type: LoaderComponent, selector: "cw-loader" }, { kind: "component", type: BadgeComponent, selector: "cw-badge", inputs: ["type", "label", "withIcon", "iconPosition", "cssClass", "skeletonMode", "dataTest"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
224
225
  }
225
226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: TableComponent, decorators: [{
226
227
  type: Component,
@@ -229,8 +230,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
229
230
  DoubleScrollDirective,
230
231
  LoaderComponent,
231
232
  BadgeComponent,
232
- JsonPipe
233
- ], template: "<!-- <app-actions-on-table [actionOnTable]=\"actionOnTable\" (actionClick)=\"onActionClick($event)\"\r\n [customContent]=\"customActionsTemplate\"></app-actions-on-table> -->\r\n\r\n<!-- <div *ngIf=\"checkbox\" class=\"actions-on-table on-selection\">\r\n <div class=\"on-selection-info\"> -->\r\n <!-- If one selected item on the current page -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If one selected item on all pages -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n\r\n <!-- If several selected items on the current page -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If several selected items on all pages -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n <!-- </div>\r\n\r\n <button class=\"btn btn-secondary btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.EXPORT_SELECTION' | translate }}\r\n </button>\r\n <button class=\"btn btn-danger btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.DELETE_SELECTION' | translate }}\r\n </button>\r\n</div> -->\r\n\r\n@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label }}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'S\u00E9lectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">S\u00E9lectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @default {\r\n {{ row[column.key] }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n" }]
233
+ NgTemplateOutlet
234
+ ], template: "@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label | translate}}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label | translate }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\" [class]=\"getRowClass(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'S\u00E9lectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">S\u00E9lectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] | translate }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @case ('actions') {\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: row }\">\r\n </ng-container>\r\n }\r\n @default {\r\n {{ row[column.key] | translate }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n" }]
234
235
  }], propDecorators: { checkbox: [{
235
236
  type: Input
236
237
  }], title: [{
@@ -241,23 +242,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
241
242
  type: Input
242
243
  }], loading: [{
243
244
  type: Input
245
+ }], rowClassFn: [{
246
+ type: Input
244
247
  }], rowClick: [{
245
248
  type: Output
246
249
  }], sortChange: [{
247
250
  type: Output
248
251
  }], selectionChange: [{
249
252
  type: Output
253
+ }], actionsTemplate: [{
254
+ type: ContentChild,
255
+ args: ['actionsTemplate']
250
256
  }] } });
251
257
 
252
- var ActionOnTableType;
253
- (function (ActionOnTableType) {
254
- ActionOnTableType["add"] = "add";
255
- ActionOnTableType["exportPage"] = "exportPage";
256
- ActionOnTableType["exportAll"] = "exportAll";
257
- ActionOnTableType["custom1"] = "custom1";
258
- ActionOnTableType["custom2"] = "custom2";
259
- })(ActionOnTableType || (ActionOnTableType = {}));
260
-
261
258
  /*
262
259
  * Public API Surface of bo-ui
263
260
  */
@@ -269,5 +266,5 @@ var ActionOnTableType;
269
266
  * Generated bundle index. Do not edit.
270
267
  */
271
268
 
272
- export { ActionOnTableType, CustomListComponent, DragNDropListComponent, TableComponent };
269
+ export { CustomListComponent, DragNDropListComponent, TableComponent };
273
270
  //# sourceMappingURL=cityway-bo-ui.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cityway-bo-ui.mjs","sources":["../../../projects/bo-ui/src/lib/components/custom-list/custom-list.component.ts","../../../projects/bo-ui/src/lib/components/custom-list/custom-list.component.html","../../../projects/bo-ui/src/lib/components/drag-n-drop-list/drag-n-drop-list.component.ts","../../../projects/bo-ui/src/lib/components/drag-n-drop-list/drag-n-drop-list.component.html","../../../projects/bo-ui/src/lib/directives/double-scroll.ts","../../../projects/bo-ui/src/lib/components/table/table.component.ts","../../../projects/bo-ui/src/lib/components/table/table.component.html","../../../projects/bo-ui/src/lib/models/ui/table.model.ts","../../../projects/bo-ui/src/public-api.ts","../../../projects/bo-ui/src/cityway-bo-ui.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\r\nimport { DataCustomListGroup } from '../../models/ui/custom-list.model';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-custom-list',\r\n templateUrl: './custom-list.component.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslateModule\r\n ]\r\n})\r\n\r\nexport class CustomListComponent implements OnInit {\r\n\r\n @Input() customListData: DataCustomListGroup[] = [];\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n hasValue(value: any): boolean {\r\n if (value === null || value === undefined) {\r\n return false;\r\n };\r\n if (typeof value === 'string' && value.trim() === '') {\r\n return false;\r\n };\r\n if (Array.isArray(value) && value.length === 0) {\r\n return false;\r\n };\r\n if (typeof value === 'object' && Object.keys(value).length === 0) {\r\n return false;\r\n };\r\n\r\n return true;\r\n }\r\n\r\n}\r\n","<div class=\"custom-card-light\">\r\n @for (group of customListData; track group.title) {\r\n @if (group.title) {\r\n <h3>{{ group.title | translate }}</h3>\r\n }\r\n\r\n <dl class=\"custom-description-list\">\r\n @for (field of group.fields; track field.label) {\r\n @if (!field.hideIfEmpty || hasValue(field.value)) {\r\n <dt [innerHTML]=\"'_LABEL.COLON' | translate: { label: (field.label | translate) }\"></dt>\r\n <dd>\r\n @switch (field.type) {\r\n @case ('date') {\r\n {{ field.value | date: 'short' }}\r\n }\r\n @case ('boolean') {\r\n {{ (field.value ? '_COMMON._PRO_SENTENCE.YES' : '_COMMON._PRO_SENTENCE.NO') | translate }}\r\n }\r\n @case ('html') {\r\n <span [innerHTML]=\"field.value\"></span>\r\n }\r\n @default {\r\n {{ field.translateValue ? (field.value | translate) : field.value }}\r\n }\r\n }\r\n </dd>\r\n }\r\n }\r\n </dl>\r\n }\r\n</div>\r\n","import { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { DragItem } from '../../enum/drag-item.enum';\r\n\r\n@Component({\r\n selector: 'app-drag-n-drop-list',\r\n templateUrl: './drag-n-drop-list.component.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslateModule,\r\n DragDropModule\r\n ]\r\n})\r\nexport class DragNDropListComponent {\r\n\r\n @Input() availableItems: DragItem[] = [];\r\n @Input() activeItems: DragItem[] = [];\r\n @Input() itemTemplate?: TemplateRef<any>;\r\n\r\n @Output() availableItemsChange = new EventEmitter<DragItem[]>();\r\n @Output() activeItemsChange = new EventEmitter<DragItem[]>();\r\n\r\n drop(event: CdkDragDrop<any[]>) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n } else {\r\n transferArrayItem(\r\n event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n this.availableItemsChange.emit(this.availableItems);\r\n this.activeItemsChange.emit(this.activeItems);\r\n }\r\n}\r\n","<div class=\"drag-drop-list\">\r\n <div class=\"list-column\" cdkDropList #availableList=\"cdkDropList\" [cdkDropListData]=\"availableItems\"\r\n [cdkDropListConnectedTo]=\"[activeList]\" (cdkDropListDropped)=\"drop($event)\">\r\n <h3>Modes disponibles</h3>\r\n @for (item of availableItems; track item) {\r\n <div cdkDrag>\r\n <ng-container *ngTemplateOutlet=\"itemTemplate || defaultTemplate; context: { $implicit: item }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"list-column\" cdkDropList #activeList=\"cdkDropList\" [cdkDropListData]=\"activeItems\"\r\n [cdkDropListConnectedTo]=\"[availableList]\" (cdkDropListDropped)=\"drop($event)\">\r\n <h3>Modes activés</h3>\r\n @for (item of activeItems; track item) {\r\n <div cdkDrag>\r\n <ng-container *ngTemplateOutlet=\"itemTemplate || defaultTemplate; context: { $implicit: item }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n\r\n <ng-template #defaultTemplate let-item>\r\n <div class=\"default-item\">\r\n Mode : {{ item.label }} ({{ item.code }} )\r\n </div>\r\n </ng-template>\r\n</div>\r\n","import { AfterViewChecked, Directive, ElementRef, HostListener, OnDestroy, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appDoubleScroll]'\r\n})\r\n\r\nexport class DoubleScrollDirective implements OnInit, AfterViewChecked, OnDestroy {\r\n\r\n scroll: any;\r\n div: any;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.adaptScrollWidth();\r\n }\r\n\r\n // Si scroll le tableau on scroll aussi div.table-responsive-double-scroll\r\n @HostListener('scroll', ['$event'])\r\n onScroll() {\r\n this.div.scrollLeft = this.el.nativeElement.scrollLeft;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // On applique un margin-top à 0 à la table.\r\n this.el.nativeElement.style.marginTop = '0';\r\n\r\n // On crée le div.table-responsive-double-scroll et on l'insère avant le tableau\r\n this.div = this.renderer.createElement('div');\r\n this.renderer.addClass(this.div, 'table-responsive-double-scroll');\r\n this.renderer.insertBefore(this.el.nativeElement.parentNode, this.div, this.el.nativeElement);\r\n\r\n // On crée le div.scroll et on l'insère dans le div.table-responsive-double-scroll\r\n this.scroll = this.renderer.createElement('div');\r\n this.renderer.addClass(this.scroll, 'scroll');\r\n this.renderer.appendChild(this.div, this.scroll);\r\n\r\n // Si on scroll div.table-responsive-double-scroll on scroll aussi le tableau\r\n this.div.addEventListener('scroll', function() {\r\n //this.nextSibling.scrollLeft = this.scrollLeft;\r\n this.nextSibling.style.transform = \"translateX(-\" + this.scrollLeft + \"px)\";\r\n });\r\n }\r\n\r\n adaptScrollWidth() {\r\n // On donne à div.scroll la taille du tableau\r\n if (this.el.nativeElement.firstChild.offsetWidth > this.el.nativeElement.offsetWidth) {\r\n this.scroll.style.width = (this.el.nativeElement.firstChild.offsetWidth + 17) + 'px';\r\n } else {\r\n this.scroll.style.widdth = 'auto';\r\n }\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.adaptScrollWidth();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.div.removeEventListener('scroll', null);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BadgeComponent, BadgeTypeEnum, LoaderComponent } from '@cityway/basic-ui';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { DoubleScrollDirective } from '../../directives/double-scroll';\r\nimport { ActionOnTableType, BadgeConfig, SortDirection, SortEvent, TableColumn } from '../../models/ui/table.model';\r\nimport { JsonpInterceptor } from '@angular/common/http';\r\nimport { JsonPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cw-table',\r\n templateUrl: './table.component.html',\r\n standalone: true,\r\n imports: [\r\n TranslateModule,\r\n DoubleScrollDirective,\r\n LoaderComponent,\r\n BadgeComponent,\r\n JsonPipe\r\n ]\r\n})\r\nexport class TableComponent {\r\n\r\n @Input() checkbox = false;\r\n @Input() title: string;\r\n @Input() columns: TableColumn[] = [];\r\n @Input() data: any[] = [];\r\n @Input() loading = false;\r\n\r\n // @Input() actionOnTable?: ActionOnTable[] = [];\r\n\r\n // @Output() actionClick = new EventEmitter<ActionOnTableType>();\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() sortChange = new EventEmitter<SortEvent>();\r\n @Output() selectionChange = new EventEmitter<any[]>();\r\n\r\n\r\n // @ContentChild('customActions') customActionsTemplate?: TemplateRef<any>;\r\n\r\n // public actionOnTableAction = ActionOnTableType;\r\n\r\n public currentSortKey: string | null = null;\r\n public currentSortDirection: SortDirection = 'asc';\r\n public selectedRows = new Set<any>();\r\n\r\n\r\n ngOnInit(): void {\r\n // on cherche si une colonne a un defaultSort\r\n const defaultColumn = this.columns.find(c => c.defaultSort);\r\n if (defaultColumn) {\r\n this.currentSortKey = defaultColumn.key;\r\n this.currentSortDirection = defaultColumn.defaultSort!;\r\n }\r\n }\r\n\r\n get allSelected(): boolean {\r\n return this.data.length > 0 && this.selectedRows.size === this.data.length;\r\n }\r\n\r\n get someSelected(): boolean {\r\n return this.selectedRows.size > 0 && !this.allSelected;\r\n }\r\n\r\n public setSortProperty(key: string): void {\r\n if (this.currentSortKey === key) {\r\n this.currentSortDirection = this.currentSortDirection === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this.currentSortKey = key;\r\n this.currentSortDirection = 'asc';\r\n }\r\n this.sortChange.emit({ key: this.currentSortKey, direction: this.currentSortDirection });\r\n }\r\n\r\n public getSortClass(key: string): string {\r\n if (this.currentSortKey !== key) return 'sorting-btn';\r\n return this.currentSortDirection === 'asc' ? 'sorting-btn sorting-asc' : 'sorting-btn sorting-desc';\r\n }\r\n\r\n public getBadge(column: TableColumn, value: string): BadgeConfig {\r\n return column.badges?.find(b => b.value === value)\r\n ?? { value, type: BadgeTypeEnum.lightLight };\r\n }\r\n\r\n public onCellClick(row: any): void {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n public toggleAll(): void {\r\n if (this.allSelected) {\r\n this.selectedRows.clear();\r\n } else {\r\n this.data.forEach(row => this.selectedRows.add(row));\r\n }\r\n this.selectionChange.emit([...this.selectedRows]);\r\n }\r\n\r\n public toggleRow(row: any): void {\r\n if (this.selectedRows.has(row)) {\r\n this.selectedRows.delete(row);\r\n } else {\r\n this.selectedRows.add(row);\r\n }\r\n this.selectionChange.emit([...this.selectedRows]);\r\n }\r\n\r\n public isSelected(row: any): boolean {\r\n return this.selectedRows.has(row);\r\n }\r\n\r\n // public onActionClick(action: ActionOnTableType): void {\r\n // this.actionClick.emit(action);\r\n // }\r\n\r\n}\r\n","<!-- <app-actions-on-table [actionOnTable]=\"actionOnTable\" (actionClick)=\"onActionClick($event)\"\r\n [customContent]=\"customActionsTemplate\"></app-actions-on-table> -->\r\n\r\n<!-- <div *ngIf=\"checkbox\" class=\"actions-on-table on-selection\">\r\n <div class=\"on-selection-info\"> -->\r\n <!-- If one selected item on the current page -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If one selected item on all pages -->\r\n <!-- <span class=\"fw-bold\">1</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEM_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n\r\n <!-- If several selected items on the current page -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }} -->\r\n\r\n <!-- If several selected items on all pages -->\r\n <!-- <span class=\"fw-bold\">{{number}}</span>\r\n {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_ALL_PAGES' | translate }}\r\n <span class=\"fw-bold\">{{total}}</span> -->\r\n <!-- </div>\r\n\r\n <button class=\"btn btn-secondary btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.EXPORT_SELECTION' | translate }}\r\n </button>\r\n <button class=\"btn btn-danger btn-min-width\" type=\"button\">\r\n {{ '_COMMON._TABLE._BULK_ACTION.DELETE_SELECTION' | translate }}\r\n </button>\r\n</div> -->\r\n\r\n@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label }}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'Sélectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">Sélectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @default {\r\n {{ row[column.key] }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import { BadgePositionEnum, BadgeTypeEnum, BoButtonTypeEnum, SpriteIconEnum } from \"@cityway/basic-ui\";\r\n\r\nexport type ColumnType = 'text' | 'badge' | 'link';\r\n\r\nexport interface BadgeConfig {\r\n value: string;\r\n label?: string;\r\n type: BadgeTypeEnum; // remplace 'class'\r\n withIcon?: SpriteIconEnum;\r\n iconPosition?: BadgePositionEnum;\r\n}\r\n\r\nexport type SortDirection = 'asc' | 'desc';\r\n\r\nexport interface SortEvent {\r\n key: string;\r\n direction: SortDirection;\r\n}\r\n\r\nexport interface TableColumn {\r\n key: string;\r\n label: string;\r\n type?: ColumnType;\r\n align?: 'left' | 'right' | 'center';\r\n badges?: BadgeConfig[];\r\n sort?: boolean;\r\n defaultSort?: SortDirection;\r\n hidden?: boolean;\r\n}\r\n\r\nexport enum ActionOnTableType {\r\n add = 'add',\r\n exportPage = 'exportPage',\r\n exportAll = 'exportAll',\r\n custom1 = 'custom1',\r\n custom2 = 'custom2',\r\n}\r\n\r\nexport interface ActionOnTable {\r\n action: ActionOnTableType;\r\n type?: BoButtonTypeEnum;\r\n label?: string;\r\n}\r\n\r\n","/*\r\n * Public API Surface of bo-ui\r\n */\r\n\r\n// LIB UI\r\n//---------------------------------------------------------\r\n// Lib ui components\r\nexport * from './lib/components/custom-list/custom-list.component';\r\nexport * from './lib/components/drag-n-drop-list/drag-n-drop-list.component';\r\nexport * from './lib/components/table/table.component';\r\n// export * from './lib/components/wizard-stepper/wizard-stepper.component';\r\n// export * from './lib/components/wizard-stepper/components/wizard-step.component';\r\n\r\n// Lib UI Enum\r\nexport * from './lib/enum/drag-item.enum';\r\n\r\n// Lib Models\r\nexport * from './lib/models/ui/custom-list.model';\r\nexport * from './lib/models/ui/table.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
1
+ {"version":3,"file":"cityway-bo-ui.mjs","sources":["../../../projects/bo-ui/src/lib/components/custom-list/custom-list.component.ts","../../../projects/bo-ui/src/lib/components/custom-list/custom-list.component.html","../../../projects/bo-ui/src/lib/components/drag-n-drop-list/drag-n-drop-list.component.ts","../../../projects/bo-ui/src/lib/components/drag-n-drop-list/drag-n-drop-list.component.html","../../../projects/bo-ui/src/lib/directives/double-scroll.ts","../../../projects/bo-ui/src/lib/components/table/table.component.ts","../../../projects/bo-ui/src/lib/components/table/table.component.html","../../../projects/bo-ui/src/public-api.ts","../../../projects/bo-ui/src/cityway-bo-ui.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\r\nimport { DataCustomListGroup } from '../../models/ui/custom-list.model';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-custom-list',\r\n templateUrl: './custom-list.component.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslateModule\r\n ]\r\n})\r\n\r\nexport class CustomListComponent implements OnInit {\r\n\r\n @Input() customListData: DataCustomListGroup[] = [];\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n hasValue(value: any): boolean {\r\n if (value === null || value === undefined) {\r\n return false;\r\n };\r\n if (typeof value === 'string' && value.trim() === '') {\r\n return false;\r\n };\r\n if (Array.isArray(value) && value.length === 0) {\r\n return false;\r\n };\r\n if (typeof value === 'object' && Object.keys(value).length === 0) {\r\n return false;\r\n };\r\n\r\n return true;\r\n }\r\n\r\n}\r\n","<div class=\"custom-card-light\">\r\n @for (group of customListData; track group.title) {\r\n @if (group.title) {\r\n <h3>{{ group.title | translate }}</h3>\r\n }\r\n\r\n <dl class=\"custom-description-list\">\r\n @for (field of group.fields; track field.label) {\r\n @if (!field.hideIfEmpty || hasValue(field.value)) {\r\n <dt [innerHTML]=\"'_LABEL.COLON' | translate: { label: (field.label | translate) }\"></dt>\r\n <dd>\r\n @switch (field.type) {\r\n @case ('date') {\r\n {{ field.value | date: 'short' }}\r\n }\r\n @case ('boolean') {\r\n {{ (field.value ? '_COMMON._PRO_SENTENCE.YES' : '_COMMON._PRO_SENTENCE.NO') | translate }}\r\n }\r\n @case ('html') {\r\n <span [innerHTML]=\"field.value\"></span>\r\n }\r\n @default {\r\n {{ field.translateValue ? (field.value | translate) : field.value }}\r\n }\r\n }\r\n </dd>\r\n }\r\n }\r\n </dl>\r\n }\r\n</div>\r\n","import { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { DragItem } from '../../enum/drag-item.enum';\r\n\r\n@Component({\r\n selector: 'app-drag-n-drop-list',\r\n templateUrl: './drag-n-drop-list.component.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslateModule,\r\n DragDropModule\r\n ]\r\n})\r\nexport class DragNDropListComponent {\r\n\r\n @Input() availableItems: DragItem[] = [];\r\n @Input() activeItems: DragItem[] = [];\r\n @Input() itemTemplate?: TemplateRef<any>;\r\n\r\n @Output() availableItemsChange = new EventEmitter<DragItem[]>();\r\n @Output() activeItemsChange = new EventEmitter<DragItem[]>();\r\n\r\n drop(event: CdkDragDrop<any[]>) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n } else {\r\n transferArrayItem(\r\n event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n this.availableItemsChange.emit(this.availableItems);\r\n this.activeItemsChange.emit(this.activeItems);\r\n }\r\n}\r\n","<div class=\"drag-drop-list\">\r\n <div class=\"list-column\" cdkDropList #availableList=\"cdkDropList\" [cdkDropListData]=\"availableItems\"\r\n [cdkDropListConnectedTo]=\"[activeList]\" (cdkDropListDropped)=\"drop($event)\">\r\n <h3>Modes disponibles</h3>\r\n @for (item of availableItems; track item) {\r\n <div cdkDrag>\r\n <ng-container *ngTemplateOutlet=\"itemTemplate || defaultTemplate; context: { $implicit: item }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"list-column\" cdkDropList #activeList=\"cdkDropList\" [cdkDropListData]=\"activeItems\"\r\n [cdkDropListConnectedTo]=\"[availableList]\" (cdkDropListDropped)=\"drop($event)\">\r\n <h3>Modes activés</h3>\r\n @for (item of activeItems; track item) {\r\n <div cdkDrag>\r\n <ng-container *ngTemplateOutlet=\"itemTemplate || defaultTemplate; context: { $implicit: item }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n\r\n <ng-template #defaultTemplate let-item>\r\n <div class=\"default-item\">\r\n Mode : {{ item.label }} ({{ item.code }} )\r\n </div>\r\n </ng-template>\r\n</div>\r\n","import { AfterViewChecked, Directive, ElementRef, HostListener, OnDestroy, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appDoubleScroll]'\r\n})\r\n\r\nexport class DoubleScrollDirective implements OnInit, AfterViewChecked, OnDestroy {\r\n\r\n scroll: any;\r\n div: any;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.adaptScrollWidth();\r\n }\r\n\r\n // Si scroll le tableau on scroll aussi div.table-responsive-double-scroll\r\n @HostListener('scroll', ['$event'])\r\n onScroll() {\r\n this.div.scrollLeft = this.el.nativeElement.scrollLeft;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // On applique un margin-top à 0 à la table.\r\n this.el.nativeElement.style.marginTop = '0';\r\n\r\n // On crée le div.table-responsive-double-scroll et on l'insère avant le tableau\r\n this.div = this.renderer.createElement('div');\r\n this.renderer.addClass(this.div, 'table-responsive-double-scroll');\r\n this.renderer.insertBefore(this.el.nativeElement.parentNode, this.div, this.el.nativeElement);\r\n\r\n // On crée le div.scroll et on l'insère dans le div.table-responsive-double-scroll\r\n this.scroll = this.renderer.createElement('div');\r\n this.renderer.addClass(this.scroll, 'scroll');\r\n this.renderer.appendChild(this.div, this.scroll);\r\n\r\n // Si on scroll div.table-responsive-double-scroll on scroll aussi le tableau\r\n this.div.addEventListener('scroll', function() {\r\n //this.nextSibling.scrollLeft = this.scrollLeft;\r\n this.nextSibling.style.transform = \"translateX(-\" + this.scrollLeft + \"px)\";\r\n });\r\n }\r\n\r\n adaptScrollWidth() {\r\n // On donne à div.scroll la taille du tableau\r\n if (this.el.nativeElement.firstChild.offsetWidth > this.el.nativeElement.offsetWidth) {\r\n this.scroll.style.width = (this.el.nativeElement.firstChild.offsetWidth + 17) + 'px';\r\n } else {\r\n this.scroll.style.widdth = 'auto';\r\n }\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.adaptScrollWidth();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.div.removeEventListener('scroll', null);\r\n }\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { BadgeComponent, BadgeTypeEnum, LoaderComponent } from '@cityway/basic-ui';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { DoubleScrollDirective } from '../../directives/double-scroll';\r\nimport { BadgeConfig, SortDirection, SortEvent, TableColumn } from '../../models/ui/table.model';\r\n\r\n@Component({\r\n selector: 'cw-table',\r\n templateUrl: './table.component.html',\r\n standalone: true,\r\n imports: [\r\n TranslateModule,\r\n DoubleScrollDirective,\r\n LoaderComponent,\r\n BadgeComponent,\r\n NgTemplateOutlet\r\n ]\r\n})\r\nexport class TableComponent {\r\n\r\n @Input() checkbox = false;\r\n @Input() title: string;\r\n @Input() columns: TableColumn[] = [];\r\n @Input() data: any[] = [];\r\n @Input() loading = false;\r\n @Input() rowClassFn?: (row: any) => string;\r\n\r\n // @Input() actionOnTable?: ActionOnTable[] = [];\r\n\r\n // @Output() actionClick = new EventEmitter<ActionOnTableType>();\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() sortChange = new EventEmitter<SortEvent>();\r\n @Output() selectionChange = new EventEmitter<any[]>();\r\n\r\n @ContentChild('actionsTemplate') actionsTemplate?: TemplateRef<{ $implicit: any }>;\r\n\r\n public currentSortKey: string | null = null;\r\n public currentSortDirection: SortDirection = 'asc';\r\n public selectedRows = new Set<any>();\r\n\r\n public getRowClass(row: any): string {\r\n return this.rowClassFn ? this.rowClassFn(row) : '';\r\n }\r\n\r\n ngOnInit(): void {\r\n // on cherche si une colonne a un defaultSort\r\n const defaultColumn = this.columns.find(c => c.defaultSort);\r\n if (defaultColumn) {\r\n this.currentSortKey = defaultColumn.key;\r\n this.currentSortDirection = defaultColumn.defaultSort!;\r\n }\r\n }\r\n\r\n get allSelected(): boolean {\r\n return this.data.length > 0 && this.selectedRows.size === this.data.length;\r\n }\r\n\r\n get someSelected(): boolean {\r\n return this.selectedRows.size > 0 && !this.allSelected;\r\n }\r\n\r\n public setSortProperty(key: string): void {\r\n if (this.currentSortKey === key) {\r\n this.currentSortDirection = this.currentSortDirection === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this.currentSortKey = key;\r\n this.currentSortDirection = 'asc';\r\n }\r\n this.sortChange.emit({ key: this.currentSortKey, direction: this.currentSortDirection });\r\n }\r\n\r\n public getSortClass(key: string): string {\r\n if (this.currentSortKey !== key) return 'sorting-btn';\r\n return this.currentSortDirection === 'asc' ? 'sorting-btn sorting-asc' : 'sorting-btn sorting-desc';\r\n }\r\n\r\n public getBadge(column: TableColumn, value: string): BadgeConfig {\r\n return column.badges?.find(b => b.value === value)\r\n ?? { value, type: BadgeTypeEnum.lightLight };\r\n }\r\n\r\n public onCellClick(row: any): void {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n public toggleAll(): void {\r\n if (this.allSelected) {\r\n this.selectedRows.clear();\r\n } else {\r\n this.data.forEach(row => this.selectedRows.add(row));\r\n }\r\n this.selectionChange.emit([...this.selectedRows]);\r\n }\r\n\r\n public toggleRow(row: any): void {\r\n if (this.selectedRows.has(row)) {\r\n this.selectedRows.delete(row);\r\n } else {\r\n this.selectedRows.add(row);\r\n }\r\n this.selectionChange.emit([...this.selectedRows]);\r\n }\r\n\r\n public isSelected(row: any): boolean {\r\n return this.selectedRows.has(row);\r\n }\r\n}\r\n","@if (checkbox && selectedRows.size > 0) {\r\n <div class=\"table-selection-info mb-2\">\r\n {{ selectedRows.size }} {{ '_COMMON._TABLE._BULK_ACTION.SELECTED_ITEMS_CURRENT_PAGE' | translate }}\r\n </div>\r\n}\r\n\r\n<div class=\"table-responsive\" appDoubleScroll>\r\n <table class=\"table\">\r\n <caption class=\"visually-hidden\" [innerHTML]=\"'_COMMON._TABLE.CAPTION' | translate: { label: title } \"></caption>\r\n <thead>\r\n <tr>\r\n @if(checkbox) {\r\n <th scope=\"col\" width=\"10\">\r\n <div class=\"field-check\">\r\n <input class=\"field-check-input\" type=\"checkbox\" id=\"checkme\" [checked]=\"allSelected\"\r\n [indeterminate]=\"someSelected\" (change)=\"toggleAll()\">\r\n <label class=\"field-check-label\" for=\"checkme\">\r\n <span class=\"visually-hidden\">{{ '_COMMON._TABLE._THEAD.CHECK_LINE' | translate }}</span>\r\n </label>\r\n </div>\r\n </th>\r\n }\r\n\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <th scope=\"col\" [class.p-0]=\"column.sort\">\r\n @if (column.sort) {\r\n <button [class]=\"getSortClass(column.key)\" (click)=\"setSortProperty(column.key)\">\r\n {{ column.label | translate}}\r\n <span class=\"sorting-icons\"></span>\r\n </button>\r\n }\r\n @else {\r\n {{ column.label | translate }}\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading) {\r\n <tr>\r\n <td colspan=\"100\">\r\n <cw-loader></cw-loader>\r\n </td>\r\n </tr>\r\n }\r\n @else if (!data || data.length === 0) {\r\n <tr>\r\n <td class=\"table-info no-result\" colspan=\"100\">\r\n {{ '_COMMON._TABLE.NO_RESULT' | translate }}\r\n </td>\r\n </tr>\r\n }\r\n @else {\r\n @for (row of data; track row) {\r\n <tr [class.tr-selected]=\"isSelected(row)\" [class]=\"getRowClass(row)\">\r\n @if (checkbox) {\r\n <td>\r\n <input class=\"field-check-input\" type=\"checkbox\" [checked]=\"isSelected(row)\" (change)=\"toggleRow(row)\" [id]=\"'check-' + row.id\"\r\n [attr.aria-label]=\"'Sélectionner la ligne ' + row.id\">\r\n <label class=\"visually-hidden\" [for]=\"'check-' + row.id\">Sélectionner la ligne {{row.id}}</label>\r\n </td>\r\n }\r\n @for (column of columns; track column.key) {\r\n @if (!column.hidden) {\r\n <td [class.text-end]=\"column.align === 'right'\" [class.text-center]=\"column.align === 'center'\">\r\n @switch (column.type) {\r\n @case ('link') {\r\n <a href=\"javascript:void(0)\" (click)=\"onCellClick(row)\">\r\n {{ row[column.key] | translate }}\r\n </a>\r\n }\r\n @case ('badge') {\r\n <cw-badge\r\n [type]=\"getBadge(column, row[column.key]).type\"\r\n [label]=\"getBadge(column, row[column.key]).label ?? row[column.key]\"\r\n [withIcon]=\"getBadge(column, row[column.key]).withIcon\"\r\n [iconPosition]=\"getBadge(column, row[column.key]).iconPosition\"></cw-badge>\r\n }\r\n @case ('actions') {\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: row }\">\r\n </ng-container>\r\n }\r\n @default {\r\n {{ row[column.key] | translate }}\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","/*\r\n * Public API Surface of bo-ui\r\n */\r\n\r\n// LIB UI\r\n//---------------------------------------------------------\r\n// Lib ui components\r\nexport * from './lib/components/custom-list/custom-list.component';\r\nexport * from './lib/components/drag-n-drop-list/drag-n-drop-list.component';\r\nexport * from './lib/components/table/table.component';\r\n// export * from './lib/components/wizard-stepper/wizard-stepper.component';\r\n// export * from './lib/components/wizard-stepper/components/wizard-step.component';\r\n\r\n// Lib UI Enum\r\nexport * from './lib/enum/drag-item.enum';\r\n\r\n// Lib Models\r\nexport * from './lib/models/ui/custom-list.model';\r\nexport * from './lib/models/ui/table.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { OnInit, TemplateRef, EventEmitter } from '@angular/core';
3
3
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
4
- import { BoButtonTypeEnum, BadgeTypeEnum, SpriteIconEnum, BadgePositionEnum } from '@cityway/basic-ui';
4
+ import { BadgeTypeEnum, SpriteIconEnum, BadgePositionEnum } from '@cityway/basic-ui';
5
5
 
6
6
  interface DataCustomList {
7
7
  label: string;
@@ -42,7 +42,7 @@ declare class DragNDropListComponent {
42
42
  static ɵcmp: i0.ɵɵComponentDeclaration<DragNDropListComponent, "app-drag-n-drop-list", never, { "availableItems": { "alias": "availableItems"; "required": false; }; "activeItems": { "alias": "activeItems"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; }, { "availableItemsChange": "availableItemsChange"; "activeItemsChange": "activeItemsChange"; }, never, never, true, never>;
43
43
  }
44
44
 
45
- type ColumnType = 'text' | 'badge' | 'link';
45
+ type ColumnType = 'text' | 'badge' | 'link' | 'actions';
46
46
  interface BadgeConfig {
47
47
  value: string;
48
48
  label?: string;
@@ -65,17 +65,8 @@ interface TableColumn {
65
65
  defaultSort?: SortDirection;
66
66
  hidden?: boolean;
67
67
  }
68
- declare enum ActionOnTableType {
69
- add = "add",
70
- exportPage = "exportPage",
71
- exportAll = "exportAll",
72
- custom1 = "custom1",
73
- custom2 = "custom2"
74
- }
75
- interface ActionOnTable {
76
- action: ActionOnTableType;
77
- type?: BoButtonTypeEnum;
78
- label?: string;
68
+ interface TableConfig {
69
+ rowClassFn?: (row: any) => string;
79
70
  }
80
71
 
81
72
  declare class TableComponent {
@@ -84,12 +75,17 @@ declare class TableComponent {
84
75
  columns: TableColumn[];
85
76
  data: any[];
86
77
  loading: boolean;
78
+ rowClassFn?: (row: any) => string;
87
79
  rowClick: EventEmitter<any>;
88
80
  sortChange: EventEmitter<SortEvent>;
89
81
  selectionChange: EventEmitter<any[]>;
82
+ actionsTemplate?: TemplateRef<{
83
+ $implicit: any;
84
+ }>;
90
85
  currentSortKey: string | null;
91
86
  currentSortDirection: SortDirection;
92
87
  selectedRows: Set<any>;
88
+ getRowClass(row: any): string;
93
89
  ngOnInit(): void;
94
90
  get allSelected(): boolean;
95
91
  get someSelected(): boolean;
@@ -101,8 +97,8 @@ declare class TableComponent {
101
97
  toggleRow(row: any): void;
102
98
  isSelected(row: any): boolean;
103
99
  static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent, never>;
104
- static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "cw-table", never, { "checkbox": { "alias": "checkbox"; "required": false; }; "title": { "alias": "title"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "rowClick": "rowClick"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "cw-table", never, { "checkbox": { "alias": "checkbox"; "required": false; }; "title": { "alias": "title"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "rowClassFn": { "alias": "rowClassFn"; "required": false; }; }, { "rowClick": "rowClick"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, ["actionsTemplate"], never, true, never>;
105
101
  }
106
102
 
107
- export { ActionOnTableType, CustomListComponent, DragNDropListComponent, TableComponent };
108
- export type { ActionOnTable, BadgeConfig, ColumnType, DataCustomList, DataCustomListGroup, DragItem, SortDirection, SortEvent, TableColumn };
103
+ export { CustomListComponent, DragNDropListComponent, TableComponent };
104
+ export type { BadgeConfig, ColumnType, DataCustomList, DataCustomListGroup, DragItem, SortDirection, SortEvent, TableColumn, TableConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityway/bo-ui",
3
- "version": "1.0.10-beta001",
3
+ "version": "1.0.10-beta003",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0",
6
6
  "@angular/core": "^20.3.0",