@lenne.tech/ng-base 14.0.5 → 14.1.0
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.
- package/base-components/base-components.module.d.ts +20 -17
- package/base-components/components/model-form/model-form.component.d.ts +3 -3
- package/base-components/components/model-table/model-table.component.d.ts +14 -5
- package/{shared → base-components}/directives/back-button.directive.d.ts +1 -1
- package/{src → base-components}/directives/context-menu.directive.d.ts +0 -0
- package/{shared → base-components}/directives/sort.directive.d.ts +2 -2
- package/base-components/public-api.d.ts +3 -0
- package/esm2020/base-components/base-components.module.mjs +16 -1
- package/esm2020/base-components/components/model-form/model-form.component.mjs +34 -49
- package/esm2020/base-components/components/model-table/model-table.component.mjs +29 -12
- package/esm2020/{shared → base-components}/directives/back-button.directive.mjs +2 -2
- package/esm2020/base-components/directives/context-menu.directive.mjs +108 -0
- package/esm2020/base-components/directives/sort.directive.mjs +54 -0
- package/esm2020/base-components/public-api.mjs +5 -1
- package/esm2020/public-api.mjs +1 -2
- package/esm2020/shared/classes/sort.class.mjs +1 -8
- package/esm2020/shared/public-api.mjs +2 -4
- package/esm2020/shared/services/cms.service.mjs +75 -0
- package/esm2020/src/base.module.mjs +1 -5
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +259 -64
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +122 -129
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base.mjs +2 -113
- package/fesm2015/lenne.tech-ng-base.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +249 -61
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +120 -127
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base.mjs +2 -112
- package/fesm2020/lenne.tech-ng-base.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/shared/classes/sort.class.d.ts +0 -7
- package/shared/public-api.d.ts +1 -2
- package/shared/services/cms.service.d.ts +23 -0
- package/src/base.module.d.ts +9 -10
- package/esm2020/shared/directives/sort.directive.mjs +0 -54
- package/esm2020/src/directives/context-menu.directive.mjs +0 -109
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, Input, Output, ViewChild, NgModule } from '@angular/core';
|
|
2
|
+
import { EventEmitter, Component, Input, Output, ViewChild, Directive, Inject, HostListener, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { UntypedFormControl, Validators, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
5
|
import * as i2 from '@angular/common';
|
|
6
|
-
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
7
7
|
import { trigger, transition, query, style, animate } from '@angular/animations';
|
|
8
8
|
import { Subscription } from 'rxjs';
|
|
9
9
|
import * as i1$1 from '@lenne.tech/ng-base/shared';
|
|
10
|
-
import { ToastType, GraphQLRequestType, BasicUser } from '@lenne.tech/ng-base/shared';
|
|
10
|
+
import { ToastType, Sort, GraphQLRequestType, BasicUser } from '@lenne.tech/ng-base/shared';
|
|
11
11
|
import * as i2$1 from '@angular/router';
|
|
12
12
|
import * as i1$2 from '@angular/common/http';
|
|
13
13
|
import { HttpHeaders } from '@angular/common/http';
|
|
@@ -443,6 +443,162 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
443
443
|
args: [{ selector: 'base-breadcrumb', template: "<ul class=\"pt-3\">\n <li *ngFor=\"let breadcrumb of breadcrumbs$ | async\">\n <a [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n </li>\n</ul>\n", styles: ["ul{list-style:none;margin:0;padding:0}ul li{display:inline}ul li:before{content:\">\";margin:0 6px}ul li:first-child:before{content:\"\";margin:0}\n"] }]
|
|
444
444
|
}], ctorParameters: function () { return [{ type: i1$1.BreadcrumbService }]; } });
|
|
445
445
|
|
|
446
|
+
class SortDirective {
|
|
447
|
+
constructor(renderer, targetElem, document) {
|
|
448
|
+
this.renderer = renderer;
|
|
449
|
+
this.targetElem = targetElem;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Sorts columns on click
|
|
453
|
+
*/
|
|
454
|
+
sortColumn() {
|
|
455
|
+
const items = document.getElementsByTagName('th');
|
|
456
|
+
for (let i = 0; i < items.length; i++) {
|
|
457
|
+
items[i].classList.remove('asc');
|
|
458
|
+
items[i].classList.remove('desc');
|
|
459
|
+
}
|
|
460
|
+
const sort = new Sort();
|
|
461
|
+
const elem = this.targetElem.nativeElement;
|
|
462
|
+
const order = elem.getAttribute('data-order');
|
|
463
|
+
const type = elem.getAttribute('data-type');
|
|
464
|
+
const property = elem.getAttribute('data-name');
|
|
465
|
+
if (order === 'desc') {
|
|
466
|
+
this.baseSort.sort(sort.startSort(property, order, type));
|
|
467
|
+
elem.setAttribute('data-order', 'asc');
|
|
468
|
+
elem.classList.remove('desc');
|
|
469
|
+
elem.classList.add('asc');
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
this.baseSort.sort(sort.startSort(property, order, type));
|
|
473
|
+
elem.setAttribute('data-order', 'desc');
|
|
474
|
+
elem.classList.remove('asc');
|
|
475
|
+
elem.classList.add('desc');
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
SortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SortDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
480
|
+
SortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: SortDirective, selector: "[baseSort]", inputs: { baseSort: "baseSort" }, host: { listeners: { "click": "sortColumn()" } }, ngImport: i0 });
|
|
481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SortDirective, decorators: [{
|
|
482
|
+
type: Directive,
|
|
483
|
+
args: [{
|
|
484
|
+
selector: '[baseSort]',
|
|
485
|
+
}]
|
|
486
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: Document, decorators: [{
|
|
487
|
+
type: Inject,
|
|
488
|
+
args: [DOCUMENT]
|
|
489
|
+
}] }]; }, propDecorators: { baseSort: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], sortColumn: [{
|
|
492
|
+
type: HostListener,
|
|
493
|
+
args: ['click']
|
|
494
|
+
}] } });
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Directive vor context menu
|
|
498
|
+
* See https://stackblitz.com/edit/angular-custom-context-menu
|
|
499
|
+
*/
|
|
500
|
+
class ContextMenuDirective {
|
|
501
|
+
constructor(el) {
|
|
502
|
+
this.el = el;
|
|
503
|
+
this.xGap = 0;
|
|
504
|
+
this.yGap = 0;
|
|
505
|
+
this.overflowSpace = 10;
|
|
506
|
+
this.selectors = '*';
|
|
507
|
+
this.clickedElement = null;
|
|
508
|
+
this.previousDisplayStatus = null;
|
|
509
|
+
}
|
|
510
|
+
ngOnInit() {
|
|
511
|
+
if (this.ltContextMenu) {
|
|
512
|
+
this.previousDisplayStatus = this.ltContextMenu.style.display;
|
|
513
|
+
}
|
|
514
|
+
// Add a click listener to the window,
|
|
515
|
+
// so that we can close the context menu on left click
|
|
516
|
+
window.addEventListener('click', () => {
|
|
517
|
+
this.showContextMenu(null, false);
|
|
518
|
+
});
|
|
519
|
+
// Close context menu when escape is pressed
|
|
520
|
+
window.addEventListener('keydown', (e) => {
|
|
521
|
+
if (e.code === 'Escape') {
|
|
522
|
+
this.showContextMenu(null, false);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
// Add an event listener to listen to the 'contextmenu' event
|
|
526
|
+
this.el.nativeElement.addEventListener('contextmenu', (e) => {
|
|
527
|
+
// Prevent the default context menu to popup
|
|
528
|
+
if (e.preventDefault) {
|
|
529
|
+
e.preventDefault();
|
|
530
|
+
}
|
|
531
|
+
// Shows our own context menu
|
|
532
|
+
this.showContextMenu(e, true);
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
// Shows or hides our custom context menu, which is specified as a input
|
|
536
|
+
showContextMenu(event, show) {
|
|
537
|
+
const cm = this.ltContextMenu;
|
|
538
|
+
if (cm) {
|
|
539
|
+
// Try to open context menu
|
|
540
|
+
if (show && event && event instanceof MouseEvent) {
|
|
541
|
+
// Get valid clicked structureElement
|
|
542
|
+
const clickedElement = event?.target?.closest(this.selectors);
|
|
543
|
+
if (clickedElement) {
|
|
544
|
+
this.clickedElement = clickedElement;
|
|
545
|
+
setTimeout(() => {
|
|
546
|
+
// Set display status
|
|
547
|
+
cm.style.display = 'block';
|
|
548
|
+
// Calculate top position
|
|
549
|
+
let top = event.y + this.yGap;
|
|
550
|
+
if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {
|
|
551
|
+
top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;
|
|
552
|
+
}
|
|
553
|
+
// Calculate left position
|
|
554
|
+
let left = event.x + this.xGap;
|
|
555
|
+
if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {
|
|
556
|
+
left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;
|
|
557
|
+
}
|
|
558
|
+
// Set position
|
|
559
|
+
cm.style.top = top + 'px';
|
|
560
|
+
cm.style.left = left + 'px';
|
|
561
|
+
// Show
|
|
562
|
+
cm.style.opacity = '1.0';
|
|
563
|
+
cm.style['pointer-events'] = 'auto';
|
|
564
|
+
}, 1);
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
// Close context menu
|
|
569
|
+
this.clickedElement = null;
|
|
570
|
+
if (this.previousDisplayStatus) {
|
|
571
|
+
cm.style.display = this.previousDisplayStatus;
|
|
572
|
+
}
|
|
573
|
+
cm.style.opacity = '0.01';
|
|
574
|
+
cm.style['pointer-events'] = 'none';
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
ContextMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ContextMenuDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
579
|
+
ContextMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ContextMenuDirective, selector: "[ltContextMenu]", inputs: { contextMenuData: "contextMenuData", ltContextMenu: "ltContextMenu", xGap: "xGap", yGap: "yGap", overflowSpace: "overflowSpace", selectors: "selectors" }, outputs: { clickedElement: "clickedElement" }, exportAs: ["contextMenuData"], ngImport: i0 });
|
|
580
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ContextMenuDirective, decorators: [{
|
|
581
|
+
type: Directive,
|
|
582
|
+
args: [{
|
|
583
|
+
selector: '[ltContextMenu]',
|
|
584
|
+
exportAs: 'contextMenuData',
|
|
585
|
+
}]
|
|
586
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { contextMenuData: [{
|
|
587
|
+
type: Input
|
|
588
|
+
}], ltContextMenu: [{
|
|
589
|
+
type: Input
|
|
590
|
+
}], xGap: [{
|
|
591
|
+
type: Input
|
|
592
|
+
}], yGap: [{
|
|
593
|
+
type: Input
|
|
594
|
+
}], overflowSpace: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}], selectors: [{
|
|
597
|
+
type: Input
|
|
598
|
+
}], clickedElement: [{
|
|
599
|
+
type: Output
|
|
600
|
+
}] } });
|
|
601
|
+
|
|
446
602
|
class UploadImageComponent {
|
|
447
603
|
constructor(httpClient, authService) {
|
|
448
604
|
this.httpClient = httpClient;
|
|
@@ -844,13 +1000,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
844
1000
|
}] } });
|
|
845
1001
|
|
|
846
1002
|
class ModelFormComponent {
|
|
847
|
-
constructor(graphQLMetaService, graphQLService, formsService, authService, router, route) {
|
|
1003
|
+
constructor(graphQLMetaService, graphQLService, formsService, authService, router, route, cmsService) {
|
|
848
1004
|
this.graphQLMetaService = graphQLMetaService;
|
|
849
1005
|
this.graphQLService = graphQLService;
|
|
850
1006
|
this.formsService = formsService;
|
|
851
1007
|
this.authService = authService;
|
|
852
1008
|
this.router = router;
|
|
853
1009
|
this.route = route;
|
|
1010
|
+
this.cmsService = cmsService;
|
|
854
1011
|
this.delete = true;
|
|
855
1012
|
this.duplicate = false;
|
|
856
1013
|
this.logging = false;
|
|
@@ -927,12 +1084,20 @@ class ModelFormComponent {
|
|
|
927
1084
|
// Process patchFields for reference input
|
|
928
1085
|
for (const [key, value] of Object.entries(this.config)) {
|
|
929
1086
|
// If it not an array
|
|
930
|
-
if (this.config[key]?.
|
|
931
|
-
this.form.get(key)
|
|
1087
|
+
if (this.config[key]?.type === 'Reference' && !this.fields[key]?.isList) {
|
|
1088
|
+
if (this.form.get(key)) {
|
|
1089
|
+
this.form
|
|
1090
|
+
.get(key)
|
|
1091
|
+
.patchValue(response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.id);
|
|
1092
|
+
}
|
|
932
1093
|
}
|
|
933
1094
|
// If value is an array
|
|
934
|
-
if (this.config[key]?.
|
|
935
|
-
this.form.get(key)
|
|
1095
|
+
if (this.config[key]?.type === 'Reference' && this.fields[key]?.isList) {
|
|
1096
|
+
if (this.form.get(key)) {
|
|
1097
|
+
this.form
|
|
1098
|
+
.get(key)
|
|
1099
|
+
.patchValue(response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.map((e) => e?.id));
|
|
1100
|
+
}
|
|
936
1101
|
}
|
|
937
1102
|
}
|
|
938
1103
|
if (this.logging) {
|
|
@@ -955,12 +1120,15 @@ class ModelFormComponent {
|
|
|
955
1120
|
createRequestObject(fields) {
|
|
956
1121
|
const requestFields = [];
|
|
957
1122
|
for (const [key, value] of Object.entries(fields)) {
|
|
1123
|
+
if (this.config[key]?.exclude !== undefined && this.config[key]?.exclude) {
|
|
1124
|
+
continue;
|
|
1125
|
+
}
|
|
958
1126
|
if (Object.keys(fields[key]?.fields)?.length === 0) {
|
|
959
|
-
if (
|
|
1127
|
+
if (this.config[key]?.type !== 'Reference') {
|
|
960
1128
|
requestFields.push(key);
|
|
961
1129
|
}
|
|
962
1130
|
else {
|
|
963
|
-
requestFields.push({ [this.config[key]?.patchField]: ['id'] });
|
|
1131
|
+
requestFields.push({ [this.config[key]?.patchField ? this.config[key]?.patchField : key]: ['id'] });
|
|
964
1132
|
}
|
|
965
1133
|
}
|
|
966
1134
|
else {
|
|
@@ -1001,49 +1169,22 @@ class ModelFormComponent {
|
|
|
1001
1169
|
* It calls the graphQLService to delete the object with the id of the object that is currently being edited
|
|
1002
1170
|
*/
|
|
1003
1171
|
deleteObject() {
|
|
1004
|
-
|
|
1005
|
-
this.
|
|
1006
|
-
|
|
1007
|
-
arguments: { id: this.id },
|
|
1008
|
-
fields: ['id'],
|
|
1009
|
-
type: GraphQLRequestType.MUTATION,
|
|
1010
|
-
})
|
|
1011
|
-
.subscribe({
|
|
1012
|
-
next: (value) => {
|
|
1013
|
-
this.finished.emit(null);
|
|
1014
|
-
},
|
|
1015
|
-
error: (err) => {
|
|
1016
|
-
console.error('Error on delete object', err);
|
|
1017
|
-
},
|
|
1018
|
-
});
|
|
1019
|
-
}
|
|
1172
|
+
this.cmsService.deleteObject(this.id, this.modelName).then(() => {
|
|
1173
|
+
this.finished.emit(null);
|
|
1174
|
+
});
|
|
1020
1175
|
}
|
|
1021
1176
|
/**
|
|
1022
1177
|
* It sends a GraphQL mutation to the server to duplicate the object
|
|
1023
1178
|
*/
|
|
1024
1179
|
async duplicateObject() {
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
.subscribe({
|
|
1034
|
-
next: (value) => {
|
|
1035
|
-
if (value?.id) {
|
|
1036
|
-
this.router.navigate(['../' + value.id], { relativeTo: this.route });
|
|
1037
|
-
}
|
|
1038
|
-
else {
|
|
1039
|
-
this.finished.emit(null);
|
|
1040
|
-
}
|
|
1041
|
-
},
|
|
1042
|
-
error: (err) => {
|
|
1043
|
-
console.error('Error on duplicate object', err);
|
|
1044
|
-
},
|
|
1045
|
-
});
|
|
1046
|
-
}
|
|
1180
|
+
this.cmsService.duplicateObject(this.id, this.modelName).then((value) => {
|
|
1181
|
+
if (value?.id) {
|
|
1182
|
+
this.router.navigate(['../' + value.id], { relativeTo: this.route });
|
|
1183
|
+
}
|
|
1184
|
+
else {
|
|
1185
|
+
this.finished.emit(null);
|
|
1186
|
+
}
|
|
1187
|
+
});
|
|
1047
1188
|
}
|
|
1048
1189
|
/**
|
|
1049
1190
|
* It takes a string, capitalizes the first letter, and returns the modified string
|
|
@@ -1052,7 +1193,7 @@ class ModelFormComponent {
|
|
|
1052
1193
|
* @returns The first letter of the string is being capitalized and the rest of the string is being returned.
|
|
1053
1194
|
*/
|
|
1054
1195
|
capitalizeFirstLetter(value) {
|
|
1055
|
-
return
|
|
1196
|
+
return this.cmsService.capitalizeFirstLetter(value);
|
|
1056
1197
|
}
|
|
1057
1198
|
/**
|
|
1058
1199
|
* It takes an AbstractControl and returns a FormControl
|
|
@@ -1171,12 +1312,12 @@ class ModelFormComponent {
|
|
|
1171
1312
|
});
|
|
1172
1313
|
}
|
|
1173
1314
|
}
|
|
1174
|
-
ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1$1.GraphQLMetaService }, { token: i1$1.GraphQLService }, { token: i1$1.FormsService }, { token: i1$1.AuthService }, { token: i2$1.Router }, { token: i2$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
1315
|
+
ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1$1.GraphQLMetaService }, { token: i1$1.GraphQLService }, { token: i1$1.FormsService }, { token: i1$1.AuthService }, { token: i2$1.Router }, { token: i2$1.ActivatedRoute }, { token: i1$1.CmsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1175
1316
|
ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", label: "label", id: "id", delete: "delete", duplicate: "duplicate", logging: "logging", config: "config" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["fields", "form", "config"], outputs: ["imageChanged"] }] });
|
|
1176
1317
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelFormComponent, decorators: [{
|
|
1177
1318
|
type: Component,
|
|
1178
1319
|
args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n" }]
|
|
1179
|
-
}], ctorParameters: function () { return [{ type: i1$1.GraphQLMetaService }, { type: i1$1.GraphQLService }, { type: i1$1.FormsService }, { type: i1$1.AuthService }, { type: i2$1.Router }, { type: i2$1.ActivatedRoute }]; }, propDecorators: { modelName: [{
|
|
1320
|
+
}], ctorParameters: function () { return [{ type: i1$1.GraphQLMetaService }, { type: i1$1.GraphQLService }, { type: i1$1.FormsService }, { type: i1$1.AuthService }, { type: i2$1.Router }, { type: i2$1.ActivatedRoute }, { type: i1$1.CmsService }]; }, propDecorators: { modelName: [{
|
|
1180
1321
|
type: Input
|
|
1181
1322
|
}], label: [{
|
|
1182
1323
|
type: Input
|
|
@@ -1195,9 +1336,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
1195
1336
|
}] } });
|
|
1196
1337
|
|
|
1197
1338
|
class ModelTableComponent {
|
|
1198
|
-
constructor(graphQLMetaService, graphQLService) {
|
|
1339
|
+
constructor(graphQLMetaService, graphQLService, cmsService) {
|
|
1199
1340
|
this.graphQLMetaService = graphQLMetaService;
|
|
1200
1341
|
this.graphQLService = graphQLService;
|
|
1342
|
+
this.cmsService = cmsService;
|
|
1201
1343
|
this.createMode = false;
|
|
1202
1344
|
this.logging = false;
|
|
1203
1345
|
this.create = true;
|
|
@@ -1206,6 +1348,7 @@ class ModelTableComponent {
|
|
|
1206
1348
|
this.duplicate = true;
|
|
1207
1349
|
this.config = {};
|
|
1208
1350
|
this.fieldConfig = {};
|
|
1351
|
+
this.uniqueField = 'id';
|
|
1209
1352
|
this.idSelected = new EventEmitter();
|
|
1210
1353
|
this.createModeChanged = new EventEmitter();
|
|
1211
1354
|
this.tableFields = {
|
|
@@ -1325,22 +1468,35 @@ class ModelTableComponent {
|
|
|
1325
1468
|
this.idSelected.emit(this.selectedId);
|
|
1326
1469
|
}
|
|
1327
1470
|
}
|
|
1471
|
+
/**
|
|
1472
|
+
* It calls the duplicateObject function in the cmsService, passing in the id of the object to be duplicated and the
|
|
1473
|
+
* modelName of the object
|
|
1474
|
+
*/
|
|
1475
|
+
async duplicateObject(id) {
|
|
1476
|
+
await this.cmsService.duplicateObject(id, this.modelName);
|
|
1477
|
+
this.loadObjects(this.availableFields);
|
|
1478
|
+
}
|
|
1479
|
+
/**
|
|
1480
|
+
* It calls the deleteObject function in the cmsService, passing in the id of the object to delete and the name of the
|
|
1481
|
+
* model
|
|
1482
|
+
*/
|
|
1483
|
+
async deleteObject(id) {
|
|
1484
|
+
await this.cmsService.deleteObject(id, this.modelName);
|
|
1485
|
+
this.loadObjects(this.availableFields);
|
|
1486
|
+
}
|
|
1328
1487
|
/**
|
|
1329
1488
|
* It takes a string, capitalizes the first letter, and returns the modified string
|
|
1330
|
-
*
|
|
1331
|
-
* @param value - The string to capitalize.
|
|
1332
|
-
* @returns The first letter of the string is being capitalized and the rest of the string is being returned.
|
|
1333
1489
|
*/
|
|
1334
1490
|
capitalizeFirstLetter(value) {
|
|
1335
|
-
return
|
|
1491
|
+
return this.cmsService.capitalizeFirstLetter(value);
|
|
1336
1492
|
}
|
|
1337
1493
|
}
|
|
1338
|
-
ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelTableComponent, deps: [{ token: i1$1.GraphQLMetaService }, { token: i1$1.GraphQLService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1339
|
-
ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", logging: "logging", create: "create", update: "update", delete: "delete", duplicate: "duplicate", config: "config", fieldConfig: "fieldConfig" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover
|
|
1494
|
+
ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelTableComponent, deps: [{ token: i1$1.GraphQLMetaService }, { token: i1$1.GraphQLService }, { token: i1$1.CmsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1495
|
+
ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", logging: "logging", create: "create", update: "update", delete: "delete", duplicate: "duplicate", config: "config", fieldConfig: "fieldConfig" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n L\u00F6schen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.asc:after,.desc:after{border-style:solid;border-width:.2em .2em 0 0;content:\"\";display:inline-block;height:.45em;left:5px;position:relative;transform:rotate(-45deg);vertical-align:middle;width:.45em}.asc:after{transform:rotate(135deg)}td{vertical-align:middle}.bi,th{cursor:pointer;-webkit-user-select:none;user-select:none}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}.context-menu{opacity:.01%;pointer-events:none;background-color:#fff;border:1px solid #ccc;box-shadow:1px 1px 10px #0000001a;padding:10px 0;position:fixed;top:0;left:0;width:200px}.context-menu-item{cursor:pointer;padding:8px 15px}.context-menu-item:hover{color:var(--bs-primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: SortDirective, selector: "[baseSort]", inputs: ["baseSort"] }, { kind: "directive", type: ContextMenuDirective, selector: "[ltContextMenu]", inputs: ["contextMenuData", "ltContextMenu", "xGap", "yGap", "overflowSpace", "selectors"], outputs: ["clickedElement"], exportAs: ["contextMenuData"] }, { kind: "component", type: ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "duplicate", "logging", "config"], outputs: ["finished"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
|
|
1340
1496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ModelTableComponent, decorators: [{
|
|
1341
1497
|
type: Component,
|
|
1342
|
-
args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover
|
|
1343
|
-
}], ctorParameters: function () { return [{ type: i1$1.GraphQLMetaService }, { type: i1$1.GraphQLService }]; }, propDecorators: { modelName: [{
|
|
1498
|
+
args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n L\u00F6schen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.asc:after,.desc:after{border-style:solid;border-width:.2em .2em 0 0;content:\"\";display:inline-block;height:.45em;left:5px;position:relative;transform:rotate(-45deg);vertical-align:middle;width:.45em}.asc:after{transform:rotate(135deg)}td{vertical-align:middle}.bi,th{cursor:pointer;-webkit-user-select:none;user-select:none}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}.context-menu{opacity:.01%;pointer-events:none;background-color:#fff;border:1px solid #ccc;box-shadow:1px 1px 10px #0000001a;padding:10px 0;position:fixed;top:0;left:0;width:200px}.context-menu-item{cursor:pointer;padding:8px 15px}.context-menu-item:hover{color:var(--bs-primary)}\n"] }]
|
|
1499
|
+
}], ctorParameters: function () { return [{ type: i1$1.GraphQLMetaService }, { type: i1$1.GraphQLService }, { type: i1$1.CmsService }]; }, propDecorators: { modelName: [{
|
|
1344
1500
|
type: Input
|
|
1345
1501
|
}], objectId: [{
|
|
1346
1502
|
type: Input
|
|
@@ -1366,10 +1522,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
1366
1522
|
type: Output
|
|
1367
1523
|
}] } });
|
|
1368
1524
|
|
|
1525
|
+
class BackButtonDirective {
|
|
1526
|
+
constructor(navigation) {
|
|
1527
|
+
this.navigation = navigation;
|
|
1528
|
+
}
|
|
1529
|
+
onClick() {
|
|
1530
|
+
this.navigation.back();
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
BackButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BackButtonDirective, deps: [{ token: i1$1.NavigationService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1534
|
+
BackButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: BackButtonDirective, selector: "[baseBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 });
|
|
1535
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BackButtonDirective, decorators: [{
|
|
1536
|
+
type: Directive,
|
|
1537
|
+
args: [{
|
|
1538
|
+
selector: '[baseBackButton]',
|
|
1539
|
+
}]
|
|
1540
|
+
}], ctorParameters: function () { return [{ type: i1$1.NavigationService }]; }, propDecorators: { onClick: [{
|
|
1541
|
+
type: HostListener,
|
|
1542
|
+
args: ['click']
|
|
1543
|
+
}] } });
|
|
1544
|
+
|
|
1369
1545
|
// Modules
|
|
1370
1546
|
const imports = [FormsModule, ReactiveFormsModule, CommonModule];
|
|
1371
1547
|
// Imported and exported elements
|
|
1372
1548
|
const elements = [
|
|
1549
|
+
// Directives
|
|
1550
|
+
SortDirective,
|
|
1551
|
+
BackButtonDirective,
|
|
1552
|
+
ContextMenuDirective,
|
|
1373
1553
|
// Components
|
|
1374
1554
|
InputComponent,
|
|
1375
1555
|
SelectComponent,
|
|
@@ -1390,6 +1570,10 @@ class BaseComponentsModule {
|
|
|
1390
1570
|
}
|
|
1391
1571
|
BaseComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1392
1572
|
BaseComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: BaseComponentsModule, declarations: [
|
|
1573
|
+
// Directives
|
|
1574
|
+
SortDirective,
|
|
1575
|
+
BackButtonDirective,
|
|
1576
|
+
ContextMenuDirective,
|
|
1393
1577
|
// Components
|
|
1394
1578
|
InputComponent,
|
|
1395
1579
|
SelectComponent,
|
|
@@ -1405,6 +1589,10 @@ BaseComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ve
|
|
|
1405
1589
|
ModelFormSubComponent,
|
|
1406
1590
|
UploadImageComponent,
|
|
1407
1591
|
RefenceInputComponent], imports: [FormsModule, ReactiveFormsModule, CommonModule], exports: [
|
|
1592
|
+
// Directives
|
|
1593
|
+
SortDirective,
|
|
1594
|
+
BackButtonDirective,
|
|
1595
|
+
ContextMenuDirective,
|
|
1408
1596
|
// Components
|
|
1409
1597
|
InputComponent,
|
|
1410
1598
|
SelectComponent,
|
|
@@ -1438,5 +1626,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
1438
1626
|
* Generated bundle index. Do not edit.
|
|
1439
1627
|
*/
|
|
1440
1628
|
|
|
1441
|
-
export { BaseComponentsModule, BreadcrumbComponent, CheckboxComponent, InputComponent, LoadingBarComponent, ModelFormComponent, ModelFormSubComponent, ModelTableComponent, RefenceInputComponent, SelectComponent, SkeletonLoaderComponent, TagsComponent, TextareaComponent, ToastComponent, UploadImageComponent };
|
|
1629
|
+
export { BackButtonDirective, BaseComponentsModule, BreadcrumbComponent, CheckboxComponent, ContextMenuDirective, InputComponent, LoadingBarComponent, ModelFormComponent, ModelFormSubComponent, ModelTableComponent, RefenceInputComponent, SelectComponent, SkeletonLoaderComponent, SortDirective, TagsComponent, TextareaComponent, ToastComponent, UploadImageComponent };
|
|
1442
1630
|
//# sourceMappingURL=lenne.tech-ng-base-base-components.mjs.map
|