@lenne.tech/ng-base 13.14.0 → 13.15.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.
Files changed (30) hide show
  1. package/base-cms/base-cms-routing.module.d.ts +7 -0
  2. package/base-cms/base-cms.module.d.ts +23 -0
  3. package/base-cms/interfaces/base-cms-module-config.interface.d.ts +12 -0
  4. package/base-cms/lenne.tech-ng-base-base-cms.d.ts +5 -0
  5. package/base-cms/package.json +10 -0
  6. package/base-cms/pages/base-cms/base-cms.component.d.ts +70 -0
  7. package/base-cms/public-api.d.ts +6 -0
  8. package/esm2020/base-cms/base-cms-routing.module.mjs +32 -0
  9. package/esm2020/base-cms/base-cms.module.mjs +60 -0
  10. package/esm2020/base-cms/interfaces/base-cms-module-config.interface.mjs +3 -0
  11. package/esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs +5 -0
  12. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +162 -0
  13. package/esm2020/base-cms/public-api.mjs +10 -0
  14. package/esm2020/base-components/components/model-form/model-form.component.mjs +4 -5
  15. package/esm2020/base-components/components/model-table/model-table.component.mjs +1 -1
  16. package/esm2020/base-components/components/tags/tags.component.mjs +2 -2
  17. package/esm2020/shared/classes/graphql-meta.class.mjs +3 -2
  18. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +259 -0
  19. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -0
  20. package/fesm2015/lenne.tech-ng-base-base-components.mjs +4 -5
  21. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  22. package/fesm2015/lenne.tech-ng-base-shared.mjs +2 -1
  23. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
  24. package/fesm2020/lenne.tech-ng-base-base-cms.mjs +257 -0
  25. package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -0
  26. package/fesm2020/lenne.tech-ng-base-base-components.mjs +4 -5
  27. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  28. package/fesm2020/lenne.tech-ng-base-shared.mjs +2 -1
  29. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
  30. package/package.json +9 -1
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/router";
3
+ export declare class BaseCMSRoutingModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseCMSRoutingModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BaseCMSRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<BaseCMSRoutingModule>;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseCMSModuleConfig } from './interfaces/base-cms-module-config.interface';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./pages/base-cms/base-cms.component";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/forms";
6
+ import * as i4 from "./base-cms-routing.module";
7
+ import * as i5 from "@lenne.tech/ng-base/base-components";
8
+ export declare function CMSConfigFactory(): {
9
+ tableFields: string[];
10
+ excludedModels: string[];
11
+ restrictedModels: any[] | [{
12
+ model: string;
13
+ roles: string[];
14
+ }];
15
+ logging: boolean;
16
+ branding: boolean;
17
+ };
18
+ export declare class BaseCMSModule {
19
+ static config: BaseCMSModuleConfig;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseCMSModule, never>;
21
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BaseCMSModule, [typeof i1.BaseCmsComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.BaseCMSRoutingModule, typeof i5.BaseComponentsModule], never>;
22
+ static ɵinj: i0.ɵɵInjectorDeclaration<BaseCMSModule>;
23
+ }
@@ -0,0 +1,12 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export interface BaseCMSModuleConfig {
3
+ tableFields?: string[];
4
+ excludedModels?: string[];
5
+ restrictedModels?: [{
6
+ model: string;
7
+ roles: string[];
8
+ }];
9
+ logging?: boolean;
10
+ branding?: boolean;
11
+ }
12
+ export declare const BASE_CMS_MODULE_CONFIG: InjectionToken<unknown>;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@lenne.tech/ng-base/base-cms" />
5
+ export * from './public-api';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../fesm2015/lenne.tech-ng-base-base-cms.mjs",
3
+ "es2020": "../fesm2020/lenne.tech-ng-base-base-cms.mjs",
4
+ "esm2020": "../esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs",
5
+ "fesm2020": "../fesm2020/lenne.tech-ng-base-base-cms.mjs",
6
+ "fesm2015": "../fesm2015/lenne.tech-ng-base-base-cms.mjs",
7
+ "typings": "lenne.tech-ng-base-base-cms.d.ts",
8
+ "sideEffects": false,
9
+ "name": "@lenne.tech/ng-base/base-cms"
10
+ }
@@ -0,0 +1,70 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { AuthService, GraphqlCrudType, GraphQLMeta, GraphQLMetaService } from '@lenne.tech/ng-base/shared';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { BaseCMSModuleConfig } from '../../interfaces/base-cms-module-config.interface';
5
+ import * as i0 from "@angular/core";
6
+ export declare class BaseCmsComponent implements OnInit {
7
+ moduleConfig: BaseCMSModuleConfig;
8
+ private graphQLMetaService;
9
+ private route;
10
+ private router;
11
+ private authService;
12
+ meta: GraphQLMeta;
13
+ modelName: string;
14
+ id: string;
15
+ types: GraphqlCrudType[];
16
+ constructor(moduleConfig: BaseCMSModuleConfig, graphQLMetaService: GraphQLMetaService, route: ActivatedRoute, router: Router, authService: AuthService);
17
+ ngOnInit(): Promise<void>;
18
+ /**
19
+ * It returns a promise that resolves to an array of GraphqlCrudType objects
20
+ *
21
+ * @returns The types that are available to the user.
22
+ */
23
+ init(): Promise<GraphqlCrudType[]>;
24
+ /**
25
+ * It checks if the model is excluded or restricted
26
+ *
27
+ * @param model - The name of the model you want to check.
28
+ * @returns A boolean value.
29
+ */
30
+ checkModelIsExcludedOrRestrcited(model: string): boolean;
31
+ /**
32
+ * If the model name is set and the types are set, then return the type that matches the model name
33
+ *
34
+ * @returns The type object that matches the model name.
35
+ */
36
+ getTypeByModelName(): GraphqlCrudType;
37
+ /**
38
+ * When the createModeChanged event is emitted, if the createMode is true, navigate to the new route
39
+ *
40
+ * @param createMode - boolean - This is a boolean value that indicates whether the user is in create mode or
41
+ * not.
42
+ */
43
+ onCreateModeChanged(createMode: boolean): void;
44
+ /**
45
+ * If the type exists, return the create property of the type, otherwise return false.
46
+ *
47
+ * @returns A boolean value.
48
+ */
49
+ isCreatePossible(): boolean;
50
+ /**
51
+ * If the model name is found in the type map, return the update property of the type object
52
+ *
53
+ * @returns A boolean value.
54
+ */
55
+ isUpdatePossible(): boolean;
56
+ /**
57
+ * If the type is defined, return the delete property of the type, otherwise return false
58
+ *
59
+ * @returns A boolean value.
60
+ */
61
+ isDeletePossible(): boolean;
62
+ /**
63
+ * If the id is truthy, navigate to the id, otherwise navigate to the parent route
64
+ *
65
+ * @param id - The id of the selected item.
66
+ */
67
+ idSelected(id: string): void;
68
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseCmsComponent, never>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseCmsComponent, "app-base-cms", never, {}, {}, never, never>;
70
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Exports for public API
3
+ */
4
+ export * from './base-cms.module';
5
+ export * from './pages/base-cms/base-cms.component';
6
+ export * from './interfaces/base-cms-module-config.interface';
@@ -0,0 +1,32 @@
1
+ import { RouterModule } from '@angular/router';
2
+ import { NgModule } from '@angular/core';
3
+ import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ const routes = [
7
+ {
8
+ path: '',
9
+ component: BaseCmsComponent,
10
+ },
11
+ {
12
+ path: ':modelName',
13
+ component: BaseCmsComponent,
14
+ },
15
+ {
16
+ path: ':modelName/:id',
17
+ component: BaseCmsComponent,
18
+ },
19
+ ];
20
+ export class BaseCMSRoutingModule {
21
+ }
22
+ BaseCMSRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
+ BaseCMSRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
24
+ BaseCMSRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, imports: [[RouterModule.forChild(routes)], RouterModule] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSRoutingModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ imports: [RouterModule.forChild(routes)],
29
+ exports: [RouterModule],
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtcm91dGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2Jhc2UtY21zLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFFdkUsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLGdCQUFnQjtLQUM1QjtDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0Isd0NBRnJCLFlBQVk7a0hBRVgsb0JBQW9CLFlBSHRCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUM5QixZQUFZOzJGQUVYLG9CQUFvQjtrQkFKaEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VDbXNDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY29tcG9uZW50OiBCYXNlQ21zQ29tcG9uZW50LFxuICB9LFxuICB7XG4gICAgcGF0aDogJzptb2RlbE5hbWUnLFxuICAgIGNvbXBvbmVudDogQmFzZUNtc0NvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICc6bW9kZWxOYW1lLzppZCcsXG4gICAgY29tcG9uZW50OiBCYXNlQ21zQ29tcG9uZW50LFxuICB9LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VDTVNSb3V0aW5nTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { BaseCmsComponent } from './pages/base-cms/base-cms.component';
5
+ import { BaseCMSRoutingModule } from './base-cms-routing.module';
6
+ import { BaseComponentsModule } from '@lenne.tech/ng-base/base-components';
7
+ import { BASE_CMS_MODULE_CONFIG } from './interfaces/base-cms-module-config.interface';
8
+ import * as i0 from "@angular/core";
9
+ export function CMSConfigFactory() {
10
+ return {
11
+ tableFields: ['id', 'name', 'title', 'description', 'email', 'createdAt', 'updatedAt'],
12
+ excludedModels: [],
13
+ restrictedModels: [],
14
+ branding: true,
15
+ logging: false,
16
+ ...BaseCMSModule.config,
17
+ };
18
+ }
19
+ export class BaseCMSModule {
20
+ }
21
+ BaseCMSModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
22
+ BaseCMSModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, declarations: [BaseCmsComponent], imports: [
23
+ // Modules
24
+ CommonModule,
25
+ ReactiveFormsModule,
26
+ BaseCMSRoutingModule,
27
+ BaseComponentsModule] });
28
+ BaseCMSModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, providers: [
29
+ {
30
+ provide: BASE_CMS_MODULE_CONFIG,
31
+ useFactory: CMSConfigFactory,
32
+ },
33
+ ], imports: [[
34
+ // Modules
35
+ CommonModule,
36
+ ReactiveFormsModule,
37
+ BaseCMSRoutingModule,
38
+ BaseComponentsModule,
39
+ ]] });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCMSModule, decorators: [{
41
+ type: NgModule,
42
+ args: [{
43
+ imports: [
44
+ // Modules
45
+ CommonModule,
46
+ ReactiveFormsModule,
47
+ BaseCMSRoutingModule,
48
+ BaseComponentsModule,
49
+ ],
50
+ declarations: [BaseCmsComponent],
51
+ exports: [],
52
+ providers: [
53
+ {
54
+ provide: BASE_CMS_MODULE_CONFIG,
55
+ useFactory: CMSConfigFactory,
56
+ },
57
+ ],
58
+ }]
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9iYXNlLWNtcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLCtDQUErQyxDQUFDOztBQUU1RyxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDdEYsY0FBYyxFQUFFLEVBQUU7UUFDbEIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixRQUFRLEVBQUUsSUFBSTtRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsR0FBRyxhQUFhLENBQUMsTUFBTTtLQUN4QixDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLGlCQVRULGdCQUFnQjtRQU43QixVQUFVO1FBQ1YsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsb0JBQW9COzJHQVdYLGFBQWEsYUFQYjtRQUNUO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixVQUFVLEVBQUUsZ0JBQWdCO1NBQzdCO0tBQ0YsWUFkUTtZQUNQLFVBQVU7WUFDVixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixvQkFBb0I7U0FDckI7MkZBVVUsYUFBYTtrQkFqQnpCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3FCQUNyQjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFVBQVUsRUFBRSxnQkFBZ0I7eUJBQzdCO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUNtc0NvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvYmFzZS1jbXMvYmFzZS1jbXMuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VDTVNSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9iYXNlLWNtcy1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2UvYmFzZS1jb21wb25lbnRzJztcbmltcG9ydCB7IEJBU0VfQ01TX01PRFVMRV9DT05GSUcsIEJhc2VDTVNNb2R1bGVDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ01TQ29uZmlnRmFjdG9yeSgpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWJsZUZpZWxkczogWydpZCcsICduYW1lJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ2VtYWlsJywgJ2NyZWF0ZWRBdCcsICd1cGRhdGVkQXQnXSxcbiAgICBleGNsdWRlZE1vZGVsczogW10sXG4gICAgcmVzdHJpY3RlZE1vZGVsczogW10sXG4gICAgYnJhbmRpbmc6IHRydWUsXG4gICAgbG9nZ2luZzogZmFsc2UsXG4gICAgLi4uQmFzZUNNU01vZHVsZS5jb25maWcsXG4gIH07XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICAvLyBNb2R1bGVzXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQmFzZUNNU1JvdXRpbmdNb2R1bGUsXG4gICAgQmFzZUNvbXBvbmVudHNNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW0Jhc2VDbXNDb21wb25lbnRdLFxuICBleHBvcnRzOiBbXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQkFTRV9DTVNfTU9EVUxFX0NPTkZJRyxcbiAgICAgIHVzZUZhY3Rvcnk6IENNU0NvbmZpZ0ZhY3RvcnksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNNU01vZHVsZSB7XG4gIHN0YXRpYyBjb25maWc6IEJhc2VDTVNNb2R1bGVDb25maWc7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const BASE_CMS_MODULE_CONFIG = new InjectionToken('BASE_CMS_MODULE_CONFIG');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVUvQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ01TTW9kdWxlQ29uZmlnIHtcbiAgdGFibGVGaWVsZHM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRNb2RlbHM/OiBzdHJpbmdbXTtcbiAgcmVzdHJpY3RlZE1vZGVscz86IFt7IG1vZGVsOiBzdHJpbmc7IHJvbGVzOiBzdHJpbmdbXSB9XTtcbiAgbG9nZ2luZz86IGJvb2xlYW47XG4gIGJyYW5kaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEJBU0VfQ01TX01PRFVMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0JBU0VfQ01TX01PRFVMRV9DT05GSUcnKTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVubmUudGVjaC1uZy1iYXNlLWJhc2UtY21zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9sZW5uZS50ZWNoLW5nLWJhc2UtYmFzZS1jbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,162 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { BASE_CMS_MODULE_CONFIG } from '../../interfaces/base-cms-module-config.interface';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@lenne.tech/ng-base/shared";
5
+ import * as i2 from "@angular/router";
6
+ import * as i3 from "@lenne.tech/ng-base/base-components";
7
+ import * as i4 from "@angular/common";
8
+ export class BaseCmsComponent {
9
+ constructor(moduleConfig, graphQLMetaService, route, router, authService) {
10
+ this.moduleConfig = moduleConfig;
11
+ this.graphQLMetaService = graphQLMetaService;
12
+ this.route = route;
13
+ this.router = router;
14
+ this.authService = authService;
15
+ this.types = [];
16
+ this.route.params.subscribe((value) => {
17
+ if (value['modelName']) {
18
+ if (!this.checkModelIsExcludedOrRestrcited(value['modelName'])) {
19
+ this.modelName = value['modelName'];
20
+ }
21
+ else {
22
+ this.init().then((types) => {
23
+ this.router.navigate(['../' + types[0].name.toLowerCase()], { relativeTo: this.route });
24
+ });
25
+ }
26
+ }
27
+ if (value['id']) {
28
+ this.id = value['id'];
29
+ }
30
+ });
31
+ }
32
+ async ngOnInit() {
33
+ await this.init();
34
+ }
35
+ /**
36
+ * It returns a promise that resolves to an array of GraphqlCrudType objects
37
+ *
38
+ * @returns The types that are available to the user.
39
+ */
40
+ init() {
41
+ return new Promise((resolve, reject) => {
42
+ this.graphQLMetaService.getMeta().subscribe((meta) => {
43
+ this.meta = meta;
44
+ if (this.route.snapshot?.params?.['modelName']) {
45
+ this.modelName = this.route.snapshot?.params?.['modelName'];
46
+ }
47
+ if (this.route.snapshot?.params?.['id']) {
48
+ this.id = this.route.snapshot?.params?.['id'];
49
+ }
50
+ const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
51
+ const types = meta.getTypes();
52
+ // Check for excluded types
53
+ const filteredTypes = types.filter((e) => !excludedModels?.includes(e.name.toLowerCase()));
54
+ // Check for restricted types
55
+ this.types = filteredTypes.filter((e) => {
56
+ const foundRestrict = this.moduleConfig.restrictedModels?.find((v) => v.model.toLowerCase() === e.name.toLowerCase());
57
+ if (foundRestrict) {
58
+ if (!this.authService.currentUser) {
59
+ return false;
60
+ }
61
+ return this.authService.currentUser.hasAllRoles(foundRestrict.roles);
62
+ }
63
+ else {
64
+ return true;
65
+ }
66
+ });
67
+ resolve(this.types);
68
+ if (!this.modelName && this.types) {
69
+ this.router.navigate(['./' + this.types[0].name.toLowerCase()], { relativeTo: this.route });
70
+ }
71
+ });
72
+ });
73
+ }
74
+ /**
75
+ * It checks if the model is excluded or restricted
76
+ *
77
+ * @param model - The name of the model you want to check.
78
+ * @returns A boolean value.
79
+ */
80
+ checkModelIsExcludedOrRestrcited(model) {
81
+ if (!model) {
82
+ return false;
83
+ }
84
+ const excludedModels = this.moduleConfig.excludedModels?.map((e) => e.toLowerCase());
85
+ return !!(excludedModels?.includes(model?.toLowerCase()) ||
86
+ this.moduleConfig.restrictedModels?.find((e) => e.model.toLowerCase() === model.toLowerCase()));
87
+ }
88
+ /**
89
+ * If the model name is set and the types are set, then return the type that matches the model name
90
+ *
91
+ * @returns The type object that matches the model name.
92
+ */
93
+ getTypeByModelName() {
94
+ if (this.modelName && this.types) {
95
+ return this.types.find((e) => e.name.toLowerCase() === this.modelName.toLowerCase());
96
+ }
97
+ else {
98
+ return null;
99
+ }
100
+ }
101
+ /**
102
+ * When the createModeChanged event is emitted, if the createMode is true, navigate to the new route
103
+ *
104
+ * @param createMode - boolean - This is a boolean value that indicates whether the user is in create mode or
105
+ * not.
106
+ */
107
+ onCreateModeChanged(createMode) {
108
+ if (createMode) {
109
+ this.router.navigate(['./' + 'new'], { relativeTo: this.route });
110
+ }
111
+ }
112
+ /**
113
+ * If the type exists, return the create property of the type, otherwise return false.
114
+ *
115
+ * @returns A boolean value.
116
+ */
117
+ isCreatePossible() {
118
+ const type = this.getTypeByModelName();
119
+ return type ? type.create : false;
120
+ }
121
+ /**
122
+ * If the model name is found in the type map, return the update property of the type object
123
+ *
124
+ * @returns A boolean value.
125
+ */
126
+ isUpdatePossible() {
127
+ const type = this.getTypeByModelName();
128
+ return type ? type.update : false;
129
+ }
130
+ /**
131
+ * If the type is defined, return the delete property of the type, otherwise return false
132
+ *
133
+ * @returns A boolean value.
134
+ */
135
+ isDeletePossible() {
136
+ const type = this.getTypeByModelName();
137
+ return type ? type.delete : false;
138
+ }
139
+ /**
140
+ * If the id is truthy, navigate to the id, otherwise navigate to the parent route
141
+ *
142
+ * @param id - The id of the selected item.
143
+ */
144
+ idSelected(id) {
145
+ if (id) {
146
+ this.router.navigate(['./' + id], { relativeTo: this.route });
147
+ }
148
+ else {
149
+ this.router.navigate(['..'], { relativeTo: this.route });
150
+ }
151
+ }
152
+ }
153
+ BaseCmsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCmsComponent, deps: [{ token: BASE_CMS_MODULE_CONFIG }, { token: i1.GraphQLMetaService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
154
+ BaseCmsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: BaseCmsComponent, selector: "app-base-cms", ngImport: i0, template: "<div class=\"main\">\n <div class=\"sidebar\">\n <div class=\"d-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a href=\"/\" class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\">\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + type?.name?.toLowerCase()\"\n [ngClass]=\"{ active: type?.name?.toLowerCase() === this.modelName?.toLowerCase() }\"\n >\n {{ type.name + 's' }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\">\n <div class=\"p-5\">\n <base-model-table\n [tableFields]=\"moduleConfig?.tableFields ?? ['name']\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'new' ? id : ''\"\n [createMode]=\"id === 'new'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex:1 0 22%;max-width:300px}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe}.nav-flush .nav-link{border-radius:0}\n"], components: [{ type: i3.ModelTableComponent, selector: "base-model-table", inputs: ["modelName", "objectId", "createMode", "create", "update", "delete", "tableFields"], outputs: ["idSelected", "createModeChanged"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: BaseCmsComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'app-base-cms', template: "<div class=\"main\">\n <div class=\"sidebar\">\n <div class=\"d-flex flex-column flex-shrink-0 p-3 h-100\">\n <ng-container *ngIf=\"moduleConfig.branding\">\n <a href=\"/\" class=\"d-flex flex-column align-items-start mb-3 mt-3 me-md-auto link-dark text-decoration-none\">\n <span class=\"d-block fs-4\"><b class=\"text-primary\">Base</b>CMS</span>\n <small class=\"fw-lighter\">The auto generated GraphQL CMS</small>\n </a>\n <hr />\n </ng-container>\n <ul class=\"nav nav-pills flex-column mb-auto\" *ngIf=\"types\">\n <li class=\"nav-item\" *ngFor=\"let type of types\">\n <a\n class=\"nav-link\"\n aria-current=\"page\"\n [routerLink]=\"(id ? '../../' : '../') + type?.name?.toLowerCase()\"\n [ngClass]=\"{ active: type?.name?.toLowerCase() === this.modelName?.toLowerCase() }\"\n >\n {{ type.name + 's' }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"sidebar-content\">\n <div class=\"p-5\">\n <base-model-table\n [tableFields]=\"moduleConfig?.tableFields ?? ['name']\"\n [modelName]=\"modelName\"\n [objectId]=\"id !== 'new' ? id : ''\"\n [createMode]=\"id === 'new'\"\n (createModeChanged)=\"onCreateModeChanged($event)\"\n (idSelected)=\"idSelected($event)\"\n [create]=\"isCreatePossible()\"\n [update]=\"isUpdatePossible()\"\n [delete]=\"isDeletePossible()\"\n ></base-model-table>\n </div>\n </div>\n</div>\n", styles: [".active{color:var(--bs-primary)!important;background-color:rgba(var(--bs-primary-rgb),.2)!important;font-weight:700}.nav-link{color:var(--bs-body-color)}.sidebar{box-shadow:#7090b014 14px 17px 40px 4px;transition:all .2s linear 0s;z-index:99}.main{display:flex;flex-direction:row;overflow:hidden;height:100%}.main .sidebar{flex:1 0 22%;max-width:300px}.main .sidebar-content{flex-grow:999;overflow-y:auto;background-color:#f5f7fe}.nav-flush .nav-link{border-radius:0}\n"] }]
158
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
159
+ type: Inject,
160
+ args: [BASE_CMS_MODULE_CONFIG]
161
+ }] }, { type: i1.GraphQLMetaService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i1.AuthService }]; } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNtcy9wYWdlcy9iYXNlLWNtcy9iYXNlLWNtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY21zL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBdUIsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7O0FBT2hILE1BQU0sT0FBTyxnQkFBZ0I7SUFNM0IsWUFDeUMsWUFBaUMsRUFDaEUsa0JBQXNDLEVBQ3RDLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxXQUF3QjtRQUpPLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNoRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVBsQyxVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQVM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxL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QUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7OzZHQXZLVSxnQkFBZ0Isa0JBT2pCLHNCQUFzQjtpR0FQckIsZ0JBQWdCLG9EQ1Y3QiwwaURBeUNBOzJGRC9CYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsY0FBYzs7MEJBV3JCLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEdyYXBocWxDcnVkVHlwZSwgR3JhcGhRTE1ldGEsIEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQkFTRV9DTVNfTU9EVUxFX0NPTkZJRywgQmFzZUNNU01vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYmFzZS1jbXMtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS1jbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS1jbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYXNlLWNtcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlQ21zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlczogR3JhcGhxbENydWRUeXBlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEJBU0VfQ01TX01PRFVMRV9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IEJhc2VDTVNNb2R1bGVDb25maWcsXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZVsnbW9kZWxOYW1lJ10pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrTW9kZWxJc0V4Y2x1ZGVkT3JSZXN0cmNpdGVkKHZhbHVlWydtb2RlbE5hbWUnXSkpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsTmFtZSA9IHZhbHVlWydtb2RlbE5hbWUnXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluaXQoKS50aGVuKCh0eXBlczogR3JhcGhxbENydWRUeXBlW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJyArIHR5cGVzWzBdLm5hbWUudG9Mb3dlckNhc2UoKV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5pZCA9IHZhbHVlWydpZCddO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBHcmFwaHFsQ3J1ZFR5cGUgb2JqZWN0c1xuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHlwZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdCgpOiBQcm9taXNlPEdyYXBocWxDcnVkVHlwZVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcblxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ21vZGVsTmFtZSddKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXM/LlsnbW9kZWxOYW1lJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ2lkJ10pIHtcbiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zPy5bJ2lkJ107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGNsdWRlZE1vZGVscyA9IHRoaXMubW9kdWxlQ29uZmlnLmV4Y2x1ZGVkTW9kZWxzPy5tYXAoKGUpID0+IGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gbWV0YS5nZXRUeXBlcygpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBleGNsdWRlZCB0eXBlc1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFR5cGVzID0gdHlwZXMuZmlsdGVyKChlKSA9PiAhZXhjbHVkZWRNb2RlbHM/LmluY2x1ZGVzKGUubmFtZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJlc3RyaWN0ZWQgdHlwZXNcbiAgICAgICAgdGhpcy50eXBlcyA9IGZpbHRlcmVkVHlwZXMuZmlsdGVyKChlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmRSZXN0cmljdCA9IHRoaXMubW9kdWxlQ29uZmlnLnJlc3RyaWN0ZWRNb2RlbHM/LmZpbmQoXG4gICAgICAgICAgICAodikgPT4gdi5tb2RlbC50b0xvd2VyQ2FzZSgpID09PSBlLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZm91bmRSZXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIuaGFzQWxsUm9sZXMoZm91bmRSZXN0cmljdC5yb2xlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzb2x2ZSh0aGlzLnR5cGVzKTtcblxuICAgICAgICBpZiAoIXRoaXMubW9kZWxOYW1lICYmIHRoaXMudHlwZXMpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJyArIHRoaXMudHlwZXNbMF0ubmFtZS50b0xvd2VyQ2FzZSgpXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG1vZGVsIGlzIGV4Y2x1ZGVkIG9yIHJlc3RyaWN0ZWRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIC0gVGhlIG5hbWUgb2YgdGhlIG1vZGVsIHlvdSB3YW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBjaGVja01vZGVsSXNFeGNsdWRlZE9yUmVzdHJjaXRlZChtb2RlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlZE1vZGVscyA9IHRoaXMubW9kdWxlQ29uZmlnLmV4Y2x1ZGVkTW9kZWxzPy5tYXAoKGUpID0+IGUudG9Mb3dlckNhc2UoKSk7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZXhjbHVkZWRNb2RlbHM/LmluY2x1ZGVzKG1vZGVsPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5tb2R1bGVDb25maWcucmVzdHJpY3RlZE1vZGVscz8uZmluZCgoZSkgPT4gZS5tb2RlbC50b0xvd2VyQ2FzZSgpID09PSBtb2RlbC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc2V0IGFuZCB0aGUgdHlwZXMgYXJlIHNldCwgdGhlbiByZXR1cm4gdGhlIHR5cGUgdGhhdCBtYXRjaGVzIHRoZSBtb2RlbCBuYW1lXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0eXBlIG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIG1vZGVsIG5hbWUuXG4gICAqL1xuICBnZXRUeXBlQnlNb2RlbE5hbWUoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMudHlwZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGVzLmZpbmQoKGUpID0+IGUubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIGNyZWF0ZU1vZGVDaGFuZ2VkIGV2ZW50IGlzIGVtaXR0ZWQsIGlmIHRoZSBjcmVhdGVNb2RlIGlzIHRydWUsIG5hdmlnYXRlIHRvIHRoZSBuZXcgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGNyZWF0ZU1vZGUgLSBib29sZWFuIC0gVGhpcyBpcyBhIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBpbiBjcmVhdGUgbW9kZSBvclxuICAgKiBub3QuXG4gICAqL1xuICBvbkNyZWF0ZU1vZGVDaGFuZ2VkKGNyZWF0ZU1vZGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoY3JlYXRlTW9kZSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycgKyAnbmV3J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgZXhpc3RzLCByZXR1cm4gdGhlIGNyZWF0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNDcmVhdGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUuY3JlYXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIG1vZGVsIG5hbWUgaXMgZm91bmQgaW4gdGhlIHR5cGUgbWFwLCByZXR1cm4gdGhlIHVwZGF0ZSBwcm9wZXJ0eSBvZiB0aGUgdHlwZSBvYmplY3RcbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNVcGRhdGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUudXBkYXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgaXMgZGVmaW5lZCwgcmV0dXJuIHRoZSBkZWxldGUgcHJvcGVydHkgb2YgdGhlIHR5cGUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2VcbiAgICpcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNEZWxldGVQb3NzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlQnlNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUuZGVsZXRlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGlkIGlzIHRydXRoeSwgbmF2aWdhdGUgdG8gdGhlIGlkLCBvdGhlcndpc2UgbmF2aWdhdGUgdG8gdGhlIHBhcmVudCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gICAqL1xuICBpZFNlbGVjdGVkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nICsgaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1haW5cIj5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtc2hyaW5rLTAgcC0zIGgtMTAwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kdWxlQ29uZmlnLmJyYW5kaW5nXCI+XG4gICAgICAgIDxhIGhyZWY9XCIvXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnQgbWItMyBtdC0zIG1lLW1kLWF1dG8gbGluay1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIGZzLTRcIj48YiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPkJhc2U8L2I+Q01TPC9zcGFuPlxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZ3LWxpZ2h0ZXJcIj5UaGUgYXV0byBnZW5lcmF0ZWQgR3JhcGhRTCBDTVM8L3NtYWxsPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxociAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uIG1iLWF1dG9cIiAqbmdJZj1cInR5cGVzXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgdHlwZXNcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIihpZCA/ICcuLi8uLi8nIDogJy4uLycpICsgdHlwZT8ubmFtZT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdHlwZT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5tb2RlbE5hbWU/LnRvTG93ZXJDYXNlKCkgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHlwZS5uYW1lICsgJ3MnIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXItY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cbiAgICAgIDxiYXNlLW1vZGVsLXRhYmxlXG4gICAgICAgIFt0YWJsZUZpZWxkc109XCJtb2R1bGVDb25maWc/LnRhYmxlRmllbGRzID8/IFsnbmFtZSddXCJcbiAgICAgICAgW21vZGVsTmFtZV09XCJtb2RlbE5hbWVcIlxuICAgICAgICBbb2JqZWN0SWRdPVwiaWQgIT09ICduZXcnID8gaWQgOiAnJ1wiXG4gICAgICAgIFtjcmVhdGVNb2RlXT1cImlkID09PSAnbmV3J1wiXG4gICAgICAgIChjcmVhdGVNb2RlQ2hhbmdlZCk9XCJvbkNyZWF0ZU1vZGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoaWRTZWxlY3RlZCk9XCJpZFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICBbY3JlYXRlXT1cImlzQ3JlYXRlUG9zc2libGUoKVwiXG4gICAgICAgIFt1cGRhdGVdPVwiaXNVcGRhdGVQb3NzaWJsZSgpXCJcbiAgICAgICAgW2RlbGV0ZV09XCJpc0RlbGV0ZVBvc3NpYmxlKClcIlxuICAgICAgPjwvYmFzZS1tb2RlbC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Exports for public API
3
+ */
4
+ // Module
5
+ export * from './base-cms.module';
6
+ // Pages
7
+ export * from './pages/base-cms/base-cms.component';
8
+ // Interface
9
+ export * from './interfaces/base-cms-module-config.interface';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2UvYmFzZS1jbXMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILFNBQVM7QUFDVCxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLFFBQVE7QUFDUixjQUFjLHFDQUFxQyxDQUFDO0FBRXBELFlBQVk7QUFDWixjQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHBvcnRzIGZvciBwdWJsaWMgQVBJXG4gKi9cblxuLy8gTW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UtY21zLm1vZHVsZSc7XG5cbi8vIFBhZ2VzXG5leHBvcnQgKiBmcm9tICcuL3BhZ2VzL2Jhc2UtY21zL2Jhc2UtY21zLmNvbXBvbmVudCc7XG5cbi8vIEludGVyZmFjZVxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2Jhc2UtY21zLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbiJdfQ==