@rosoftlab/rdict 1.0.1-alpha-5 → 1.0.1-alpha-7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,11 @@
1
- import * as i5$1 from '@angular/common';
1
+ import * as i5$2 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, Inject, Component, forwardRef, ViewChild, Input, EventEmitter, ElementRef, ViewEncapsulation, Output, InjectionToken } from '@angular/core';
4
+ import { Injectable, Inject, Component, NgModule, forwardRef, ViewChild, Input, EventEmitter, ElementRef, ViewEncapsulation, Output, InjectionToken } from '@angular/core';
5
5
  import * as i1$1 from '@angular/router';
6
6
  import { RouterModule, UrlSegment, NavigationStart } from '@angular/router';
7
7
  import * as i2 from '@ngx-translate/core';
8
- import { TranslateModule } from '@ngx-translate/core';
8
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
9
9
  import * as i4 from '@progress/kendo-angular-buttons';
10
10
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
11
11
  import { KENDO_SVGICON } from '@progress/kendo-angular-icons';
@@ -21,10 +21,10 @@ import * as msgpackParser from 'socket.io-msgpack-parser';
21
21
  import * as i1 from '@rosoftlab/core';
22
22
  import { BaseModel, Attribute, BaseModelConfig, BaseService } from '@rosoftlab/core';
23
23
  import { __decorate, __metadata } from 'tslib';
24
- import * as i2$1 from '@angular/forms';
24
+ import * as i5$1 from '@angular/forms';
25
25
  import { FormGroup, ReactiveFormsModule } from '@angular/forms';
26
- import * as i1$2 from '@ngx-formly/core';
27
- import { FormlyModule } from '@ngx-formly/core';
26
+ import * as i4$1 from '@ngx-formly/core';
27
+ import { FORMLY_CONFIG, FormlyModule } from '@ngx-formly/core';
28
28
  import { FormlyKendoModule } from '@ngx-formly/kendo';
29
29
  import * as i6 from '@progress/kendo-angular-grid';
30
30
  import { KENDO_GRID } from '@progress/kendo-angular-grid';
@@ -556,7 +556,7 @@ class FullComponent {
556
556
  return drawerItems;
557
557
  }
558
558
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: FullComponent, deps: [{ token: UserService }, { token: i1$1.Router }, { token: SocketService }, { token: i2.TranslateService }, { token: WsAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
559
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: FullComponent, isStandalone: true, selector: "rdict-full", ngImport: i0, template: "<div class=\"custom-toolbar\">\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\n <span class=\"app-title\">{{apptitle}}</span>\n</div>\n<kendo-drawer-container>\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\n <!-- <ng-template kendoDrawerItemTemplate let-item>\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n </ng-template> -->\n </kendo-drawer>\n\n <kendo-drawer-content>\n <router-outlet></router-outlet>\n <!-- <div>{{selected}}</div> -->\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\n </kendo-drawer-content>\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;padding:3px 8px;color:#656565}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: ToolBarModule }, { kind: "ngmodule", type: LayoutModule }, { kind: "component", type: i5.DrawerComponent, selector: "kendo-drawer", inputs: ["mode", "position", "mini", "expanded", "width", "miniWidth", "autoCollapse", "items", "isItemExpanded", "animation"], outputs: ["expand", "collapse", "select", "expandedChange"], exportAs: ["kendoDrawer"] }, { kind: "component", type: i5.DrawerContainerComponent, selector: "kendo-drawer-container" }, { kind: "component", type: i5.DrawerContentComponent, selector: "kendo-drawer-content" }] }); }
559
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: FullComponent, isStandalone: true, selector: "rdict-full", ngImport: i0, template: "<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n <!-- <ng-template kendoDrawerItemTemplate let-item>\r\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n </ng-template> -->\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n <!-- <div>{{selected}}</div> -->\r\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;color:#656565}.custom-toolbar button{margin:3px 0 3px 8px}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: ToolBarModule }, { kind: "ngmodule", type: LayoutModule }, { kind: "component", type: i5.DrawerComponent, selector: "kendo-drawer", inputs: ["mode", "position", "mini", "expanded", "width", "miniWidth", "autoCollapse", "items", "isItemExpanded", "animation"], outputs: ["expand", "collapse", "select", "expandedChange"], exportAs: ["kendoDrawer"] }, { kind: "component", type: i5.DrawerContainerComponent, selector: "kendo-drawer-container" }, { kind: "component", type: i5.DrawerContentComponent, selector: "kendo-drawer-content" }] }); }
560
560
  }
561
561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: FullComponent, decorators: [{
562
562
  type: Component,
@@ -569,33 +569,127 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
569
569
  ToolBarModule,
570
570
  LayoutModule,
571
571
  KENDO_SVGICON
572
- ], template: "<div class=\"custom-toolbar\">\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\n <span class=\"app-title\">{{apptitle}}</span>\n</div>\n<kendo-drawer-container>\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\n <!-- <ng-template kendoDrawerItemTemplate let-item>\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n </ng-template> -->\n </kendo-drawer>\n\n <kendo-drawer-content>\n <router-outlet></router-outlet>\n <!-- <div>{{selected}}</div> -->\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\n </kendo-drawer-content>\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;padding:3px 8px;color:#656565}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"] }]
572
+ ], template: "<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n <!-- <ng-template kendoDrawerItemTemplate let-item>\r\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n </ng-template> -->\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n <!-- <div>{{selected}}</div> -->\r\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;color:#656565}.custom-toolbar button{margin:3px 0 3px 8px}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"] }]
573
573
  }], ctorParameters: () => [{ type: UserService }, { type: i1$1.Router }, { type: SocketService }, { type: i2.TranslateService }, { type: WsAuthService }] });
574
574
 
575
+ class TranslateExtension {
576
+ constructor(translate) {
577
+ this.translate = translate;
578
+ }
579
+ prePopulate(field) {
580
+ const props = field.props || {};
581
+ if (!props['translate'] || props['_translated']) {
582
+ return;
583
+ }
584
+ props['_translated'] = true;
585
+ field.expressions = {
586
+ ...(field.expressions || {}),
587
+ 'props.label': this.translate.stream(props.label),
588
+ };
589
+ if (props.placeholder) {
590
+ field.expressions = {
591
+ ...(field.expressions || {}),
592
+ 'props.placeholder': this.translate.stream(props.placeholder)
593
+ };
594
+ }
595
+ if (props.description) {
596
+ field.expressions = {
597
+ ...(field.expressions || {}),
598
+ 'props.description': this.translate.stream(props.description)
599
+ };
600
+ }
601
+ }
602
+ }
603
+ function registerTranslateExtension(translate) {
604
+ return {
605
+ validationMessages: [
606
+ {
607
+ name: 'required',
608
+ message(error, field) {
609
+ // console.log(field);
610
+ return translate.stream('General.Field.Required', { field: field.props.label });
611
+ },
612
+ },
613
+ ],
614
+ extensions: [
615
+ {
616
+ name: 'translate',
617
+ extension: new TranslateExtension(translate),
618
+ }
619
+ ],
620
+ };
621
+ }
622
+
623
+ class CrudFormlyTransaltionModule {
624
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CrudFormlyTransaltionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
625
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: CrudFormlyTransaltionModule, imports: [CommonModule] }); }
626
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CrudFormlyTransaltionModule, providers: [
627
+ { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
628
+ ], imports: [CommonModule] }); }
629
+ }
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CrudFormlyTransaltionModule, decorators: [{
631
+ type: NgModule,
632
+ args: [{
633
+ imports: [
634
+ CommonModule,
635
+ ],
636
+ providers: [
637
+ { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
638
+ ],
639
+ }]
640
+ }] });
641
+
575
642
  ;
576
643
  class RdictCrudComponent {
577
- constructor() {
644
+ // = [
645
+ // {
646
+ // key: 'name',
647
+ // type: 'input',
648
+ // props: {
649
+ // label: 'General.Name',
650
+ // translate: true,
651
+ // required: true,
652
+ // }
653
+ // },
654
+ // ];
655
+ constructor(router, route, translate, socketService, wsAuthService) {
656
+ this.router = router;
657
+ this.route = route;
658
+ this.translate = translate;
659
+ this.socketService = socketService;
660
+ this.wsAuthService = wsAuthService;
578
661
  this.baseForm = new FormGroup({});
579
662
  this.model = {};
580
663
  this.options = {};
581
- this.fields = [
582
- {
583
- key: 'name',
584
- type: 'input',
585
- props: {
586
- label: 'General.Name',
587
- translate: true,
588
- required: true,
589
- },
590
- },
591
- ];
664
+ this.fields = [];
592
665
  }
593
- ngOnInit() {
666
+ async ngOnInit() {
667
+ const currentUrlSegments = this.router.url.split('/').map(segment => new UrlSegment(segment, {}));
668
+ this.basePath = currentUrlSegments.map(segment => segment.path).join('/');
669
+ const filteredSegments = currentUrlSegments.filter(segment => segment.path !== '');
670
+ this.dictPath = filteredSegments.map(segment => segment.path).join('.');
671
+ this.rdictModel = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 2].path : ''; // Default to empty string if no valid segments
672
+ this.rdict = ReactiveDictionary.getInstance(this.socketService, this.wsAuthService.Token);
673
+ if (this.rdict.size == 0)
674
+ await this.rdict.asyncInit();
675
+ await this.getModelFields();
594
676
  }
595
677
  onSubmit(model) {
596
678
  }
597
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: RdictCrudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
598
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: RdictCrudComponent, isStandalone: true, selector: "app-rdict-crud", ngImport: i0, template: "<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\n</form>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1$2.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyKendoModule }, { kind: "ngmodule", type: TranslateModule }] }); }
679
+ async getModelFields() {
680
+ if (this.rdictModel) {
681
+ const formLayout = await this.rdict.asyncGet("config.models." + this.rdictModel + ".formLayout");
682
+ // const tableLayout = await this.rdict.asyncGet("config.models." + this.rdictModel + ".tableLayout");
683
+ console.log(formLayout);
684
+ // console.log(tableLayout);
685
+ if (formLayout) {
686
+ this.title = this.translate.instant(formLayout["title"]);
687
+ this.fields = formLayout["fields"];
688
+ }
689
+ }
690
+ }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: RdictCrudComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2.TranslateService }, { token: SocketService }, { token: WsAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
692
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: RdictCrudComponent, isStandalone: true, selector: "app-rdict-crud", ngImport: i0, template: "<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\r\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\r\n</form>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyKendoModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: CrudFormlyTransaltionModule }] }); }
599
693
  }
600
694
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: RdictCrudComponent, decorators: [{
601
695
  type: Component,
@@ -603,9 +697,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
603
697
  FormlyModule,
604
698
  ReactiveFormsModule,
605
699
  FormlyKendoModule,
606
- TranslateModule
607
- ], template: "<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\n</form>" }]
608
- }], ctorParameters: () => [] });
700
+ TranslateModule,
701
+ CrudFormlyTransaltionModule
702
+ ], template: "<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\r\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\r\n</form>" }]
703
+ }], ctorParameters: () => [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2.TranslateService }, { type: SocketService }, { type: WsAuthService }] });
609
704
 
610
705
  class RdictTableTitle extends ToolBarToolComponent {
611
706
  constructor() {
@@ -792,6 +887,8 @@ class GenericRdictTableComponent {
792
887
  async getListLayout() {
793
888
  if (this.model) {
794
889
  this.tableLayout = await this.rdict.asyncGet("config.models." + this.model + ".tableLayout");
890
+ const formLayout = await this.rdict.asyncGet("config.models." + this.model + ".formLayout");
891
+ console.log(formLayout);
795
892
  if (this.tableLayout) {
796
893
  this.title = this.translate.instant(this.tableLayout["title"]);
797
894
  this.allColumns = this.tableLayout["columns"].map(item => {
@@ -832,7 +929,7 @@ class GenericRdictTableComponent {
832
929
  // this.isNew = true;
833
930
  }
834
931
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: GenericRdictTableComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2.TranslateService }, { token: i0.Injector }, { token: SocketService }, { token: WsAuthService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
835
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: GenericRdictTableComponent, isStandalone: true, selector: "rsl-rdict-generic-table", inputs: { showSerach: "showSerach", searchFields: "searchFields", customInclude: "customInclude", defaultSort: "defaultSort", deletePropertyName: "deletePropertyName", defaultFilter: "defaultFilter", showHeader: "showHeader", hasAdd: "hasAdd", canDelete: "canDelete", canEdit: "canEdit", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, providers: [], viewQueries: [{ propertyName: "filter", first: true, predicate: ElementRef, descendants: true }], ngImport: i0, template: "<kendo-grid [data]=\"dataSource\" \n [sortable]=\"true\" \n [filterable]=\"showSerach\"\n (add)=\"addHandler()\">\n <kendo-toolbar>\n <table-title text=\"{{title}}\"></table-title>\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\n </kendo-toolbar>\n <!-- <kendo-toolbar>\n \n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <button kendoGridAddCommand type=\"button\">Add new</button>\n </kendo-toolbar> -->\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\n title=\" {{column.translateKey | translate}}\">\n </kendo-grid-column>\n</kendo-grid>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
932
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.3", type: GenericRdictTableComponent, isStandalone: true, selector: "rsl-rdict-generic-table", inputs: { showSerach: "showSerach", searchFields: "searchFields", customInclude: "customInclude", defaultSort: "defaultSort", deletePropertyName: "deletePropertyName", defaultFilter: "defaultFilter", showHeader: "showHeader", hasAdd: "hasAdd", canDelete: "canDelete", canEdit: "canEdit", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, providers: [], viewQueries: [{ propertyName: "filter", first: true, predicate: ElementRef, descendants: true }], ngImport: i0, template: "<kendo-grid [data]=\"dataSource\" \r\n [sortable]=\"true\" \r\n [filterable]=\"showSerach\"\r\n (add)=\"addHandler()\">\r\n <kendo-toolbar>\r\n <table-title text=\"{{title}}\"></table-title>\r\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\r\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <!-- <kendo-toolbar>\r\n \r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <button kendoGridAddCommand type=\"button\">Add new</button>\r\n </kendo-toolbar> -->\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\r\n title=\" {{column.translateKey | translate}}\">\r\n </kendo-grid-column>\r\n</kendo-grid>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
836
933
  // MatPaginatorModule,
837
934
  // MatTableModule,
838
935
  TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: i6.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "component", type: i6.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i6.AddCommandToolbarDirective, selector: "[kendoGridAddTool]" }, { kind: "component", type: i7.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: i7.ToolbarCustomMessagesComponent, selector: "kendo-toolbar-messages" }, { kind: "component", type: i7.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "component", type: i7.ToolBarSpacerComponent, selector: "kendo-toolbar-spacer", exportAs: ["kendoToolBarSpacer"] }, { kind: "component", type: RdictTableTitle, selector: "table-title", inputs: ["text"] }], encapsulation: i0.ViewEncapsulation.None }); }
@@ -849,7 +946,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
849
946
  KENDO_TOOLBAR,
850
947
  KENDO_LABEL,
851
948
  RdictTableTitle
852
- ], providers: [], template: "<kendo-grid [data]=\"dataSource\" \n [sortable]=\"true\" \n [filterable]=\"showSerach\"\n (add)=\"addHandler()\">\n <kendo-toolbar>\n <table-title text=\"{{title}}\"></table-title>\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\n </kendo-toolbar>\n <!-- <kendo-toolbar>\n \n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <button kendoGridAddCommand type=\"button\">Add new</button>\n </kendo-toolbar> -->\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\n title=\" {{column.translateKey | translate}}\">\n </kendo-grid-column>\n</kendo-grid>" }]
949
+ ], providers: [], template: "<kendo-grid [data]=\"dataSource\" \r\n [sortable]=\"true\" \r\n [filterable]=\"showSerach\"\r\n (add)=\"addHandler()\">\r\n <kendo-toolbar>\r\n <table-title text=\"{{title}}\"></table-title>\r\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\r\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <!-- <kendo-toolbar>\r\n \r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <button kendoGridAddCommand type=\"button\">Add new</button>\r\n </kendo-toolbar> -->\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\r\n title=\" {{column.translateKey | translate}}\">\r\n </kendo-grid-column>\r\n</kendo-grid>" }]
853
950
  }], ctorParameters: () => [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2.TranslateService }, { type: i0.Injector }, { type: SocketService }, { type: WsAuthService }, { type: i0.ElementRef }], propDecorators: { showSerach: [{
854
951
  type: Input
855
952
  }], searchFields: [{
@@ -1 +1 @@
1
- {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/models/menu.ts","../../../../projects/rosoftlab/rdict/src/lib/models/right.ts","../../../../projects/rosoftlab/rdict/src/lib/models/user.ts","../../../../projects/rosoftlab/rdict/src/lib/services/user.service.ts","../../../../projects/rosoftlab/rdict/src/lib/services/ws-auth.service.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.html","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.html","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-table-title.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.html","../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["import { BehaviorSubject, Observable } from \"rxjs\";\nimport { SocketService } from \"./services/socket.service\";\n\nexport class ReactiveDictionary extends Map<string, any> {\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>;\n private _socketService: SocketService;\n private changes$: BehaviorSubject<any> = new BehaviorSubject(null);\n private isInitialized: boolean = false;\n private _authToken: string = null;\n private constructor(socketService: SocketService,\n authToken: string) {\n super();\n this._authToken = authToken;\n this._socketService = socketService;\n this._socketService.initSocket(authToken)\n this._socketService.getSetEvent(this)\n }\n\n // Method to get the singleton instance\n public static getInstance(socketService: SocketService, authToken: string, instance_key?: string): ReactiveDictionary {\n if (!instance_key)\n instance_key = 'root'\n if (!ReactiveDictionary.instance.has(instance_key)) {\n ReactiveDictionary.instance.set(instance_key, new ReactiveDictionary(socketService, authToken));\n }\n const instance = ReactiveDictionary.instance.get(instance_key);\n if (!instance) {\n throw new Error(`No instance found for key: ${instance_key}`); // Handle undefined case\n }\n\n return instance; // Now TypeScript knows 'instance' is not undefined\n }\n // str_keys(): string[] {\n override keys(): IterableIterator<string> {\n const excludedKeys = ['__guid', '__type']; // Key to exclude\n const iterator = super.keys();\n\n const filteredIterator = {\n [Symbol.iterator]: () => ({\n next: () => {\n let result;\n\n // Loop until we find a valid key or run out of keys\n do {\n result = iterator.next(); // Get the next entry ([key, value])\n if (result.done) return { done: true }; // Stop if done\n\n const key = result.value; // Destructure the entry\n const value = super.get(key)\n // Check if the key is in excludedKeys or if the value is an object\n if (\n !excludedKeys.includes(key) &&\n !(typeof value === 'object' && value !== null)\n ) {\n return { value: key, done: false }; // Return the valid key\n }\n } while (true); // Continue until a valid key is found\n }\n })\n };\n\n return filteredIterator as IterableIterator<string>;\n }\n // Asynchronous method to get a value by key\n async asyncGet(key: string): Promise<any> {\n // console.log('Get key: ', key);\n const keys = key.split('.')\n if (keys.length === 1) {\n if (this.has(key)) {\n const value = this.get(key)\n if (value instanceof ReactiveDictionary) {\n return value\n }\n if (typeof value === 'object' && value !== null) {\n const dict_type = value['__type']\n // console.log('value type : ', dict_type);\n if (dict_type === 'dict' || dict_type === 'lazy') {\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\n // console.log(lazyLoadData)\n if (lazyLoadData) {\n const dict = new ReactiveDictionary(this._socketService, this._authToken);\n await dict.asyncInit(lazyLoadData.data)\n this.set(key, dict)\n return dict\n }\n }\n }\n return value\n }\n } else {\n const obj = await this.asyncGet(keys[0]) as ReactiveDictionary\n if (obj)\n return await obj.asyncGet(keys.slice(1).join('.'))\n else\n return null;\n }\n }\n\n // Asynchronous method to set a value by key\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\n if (emmit_event) {\n try {\n await this._socketService.emitSet(this.get('__guid'), key, value);\n } catch (error) {\n console.error('Error emitting set event:', error);\n }\n }\n this.set(key, value)\n this.changes$.next({ key, value });\n }\n\n // Asynchronous method to initialize with a set of key-value pairs\n async asyncInit(initialData?: Record<string, any>) {\n if (!this.isInitialized) {\n try {\n // If initial data is not provided, fetch it\n const data = initialData || await this._socketService.getInitialData();\n // this.known_dicts.set(data.__guid,data);\n // Set the initial properties on the proxy\n for (const [key, value] of Object.entries(data)) {\n this.set(key, value);\n }\n this.isInitialized = true\n } catch (error) {\n console.error('Error during initialization:', error);\n }\n }\n }\n\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\n try {\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\n return data;\n } catch (error) {\n console.error('Error fetching data:', error);\n throw error;\n }\n }\n public getPlainObject(): Record<string, any> {\n const plainObject: Record<string, any> = {};\n this.forEach((value, key) => {\n if (value instanceof ReactiveDictionary)\n plainObject[key] = value.getPlainObject()\n else\n plainObject[key] = value; // Add key-value pairs to the plain object\n });\n return plainObject; // Return the plain object\n }\n async getTable(key: string): Promise<any[]> {\n const data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\n if (!data) {\n return []; // Return an empty array if data is undefined\n }\n\n // Filter and get only entries that are instances of ReactiveDictionary\n const result = await Promise.all(Array.from(data.entries()).map(async (key: any) => await data.asyncGet(key[0])) // Get data from asyncGet\n ) || []; // Return an empty array if the above yields undefined\n\n\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\n }\n async getTableWithoutGuid(key: string): Promise<any[]> {\n const data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\n if (!data) {\n return []; // Return an empty array if data is undefined\n }\n\n // Filter and get only entries that are instances of ReactiveDictionary\n const result = await Promise.all(Array.from(data.entries()).map(async (key: any) => await data.asyncGet(key[0])) // Get data from asyncGet\n ) || []; // Return an empty array if the above yields undefined\n\n\n var filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\n\n return filteredResults.map(dictionary => {\n // Convert Map to object and filter out __guid\n const filteredObject = {};\n for (const [key, value] of dictionary.entries()) {\n if (key !== '__guid') {\n filteredObject[key] = value;\n }\n }\n return filteredObject;\n });\n }\n onChanges(): Observable<any> {\n return this.changes$.asObservable();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { io, Socket } from 'socket.io-client';\nimport * as msgpackParser from 'socket.io-msgpack-parser';\nimport { SOCKET_URL } from '../core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SocketService {\n private socket: Socket;\n private socketUrl: string\n constructor(\n @Inject(SOCKET_URL) socketUrl: string,) {\n this.socketUrl = socketUrl\n // Replace with your actual server URL\n // this.socket.on(\"connect\", () => {\n // const engine = this.socket.io.engine;\n // (engine.transport.name); // in most cases, prints \"polling\"\n\n // engine.once(\"upgrade\", () => {\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\n // (engine.transport.name); // in most cases, prints \"websocket\"\n // });\n\n // });\n }\n initSocket(authToken: string) {\n if (this.socket == null && authToken !== null) {\n this.socket = io(this.socketUrl, {\n withCredentials: true,\n parser: msgpackParser,\n auth: {\n token: authToken, // Include the authentication token\n }\n ,\n query: {\n \"access_token\": authToken\n }\n });\n }\n }\n getInitialData(): Promise<Record<string, any>> {\n return new Promise((resolve, reject) => {\n this.socket.on('init', (data: any) => {\n if (data) {\n resolve(data[\"dict_data\"]);\n } else {\n reject('No data received from init event');\n }\n });\n });\n }\n getSetEvent(rdict: any) {\n this.socket.on('set', (data: any) => {\n // (rdict.get('__guid'), data, this.socket.id)\n if (rdict.get('__guid') === data.did) {\n // ('Set the data')\n rdict.asyncSet(data.key, data.value, false)\n }\n });\n }\n // Emit the 'lazy_load' event with callback to get the response\n requestLazyLoad(did: string, key: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\n if (response && response.error) {\n reject(response.error); // Handle error if present\n } else {\n resolve(response); // Resolve with the response data\n }\n });\n });\n }\n\n // Emit the 'set' event to update the data on the server\n emitSet(did: string, key: string, value: any): Promise<void> {\n return new Promise((resolve, reject) => {\n this.socket.emit('set', { did, key, value }, (response: any) => {\n if (response && response.error) {\n reject(response.error);\n } else {\n resolve();\n }\n });\n });\n }\n}\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\nimport { Observable } from 'rxjs';\nimport { Menu } from '../models/menu';\nimport { Right } from '../models/right';\nimport { User } from '../models/user';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService extends BaseService<User> {\n userRights!: Right[]; \n constructor(datastore: DatastoreCore) {\n super(datastore);\n this.setModelType(User);\n }\n getRights(): Observable<BaseQueryData<Right>> {\n const response = this.datastore.findAll(Right);\n return response;\n }\n hasRightForLink(link: string): boolean {\n\n if (this.userRights && link) {\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\n return true;\n }\n return false;\n }\n getMenus(): Observable<BaseQueryData<Menu>> {\n const response = this.datastore.findAll(Menu);\n return response;\n } \n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WsAuthService {\n private token: string = null\n constructor() { }\n get Token(): string {\n return this.token\n }\n set Token(token: string) {\n this.token = token\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\nimport { DrawerItemExpandedFn, DrawerSelectEvent, LayoutModule } from '@progress/kendo-angular-layout';\nimport { ToolBarModule } from '@progress/kendo-angular-toolbar';\nimport * as allIcons from \"@progress/kendo-svg-icons\";\nimport { menuIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\nimport { map, Observable } from 'rxjs';\nimport { Menu } from '../../../models';\nimport { ReactiveDictionary } from '../../../reactive-dictionary';\nimport { SocketService, UserService, WsAuthService } from '../../../services';\n@Component({\n selector: 'rdict-full',\n templateUrl: './full.component.html',\n styleUrls: ['./full.component.scss'],\n imports: [\n CommonModule,\n RouterModule,\n TranslateModule,\n CommonModule,\n ButtonsModule,\n ToolBarModule,\n LayoutModule,\n KENDO_SVGICON\n ]\n})\nexport class FullComponent implements OnInit {\n public selected = \"Inbox\";\n public menuSvg: SVGIcon = menuIcon;\n public expandedIndices = [2];\n menu$!: Observable<Menu[]>;\n hasItems: boolean = false;\n public items: Array<{ [Key: string]: unknown }> = [];\n public icons = allIcons;\n private rdict: ReactiveDictionary | undefined;\n apptitle: string = \"Test\"\n constructor(\n private userService: UserService,\n private router: Router,\n private socketService: SocketService,\n public translate: TranslateService,\n private wsAuthService: WsAuthService\n ) {\n this.getMenu();\n }\n\n async ngOnInit() {\n this.rdict = ReactiveDictionary.getInstance(this.socketService,this.wsAuthService.Token);\n if (this.rdict.size == 0)\n await this.rdict.asyncInit();\n this.apptitle = await this.rdict.asyncGet(\"appname\")\n\n }\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\n return this.expandedIndices.indexOf(item.id) >= 0;\n };\n getMenu() {\n this.userService.getMenus().subscribe(\n {\n next: value => {\n this.items = this.transformToDrawerItems(value.getModels())\n },\n error: err => console.error('Observable emitted an error: ' + err),\n complete: () => console.log('Observable emitted the complete notification')\n }\n )\n this.menu$ = this.userService.getMenus().pipe(map(f => {\n const data = f.getModels()\n this.hasItems = data.length > 0;\n return data;\n }));\n }\n // public items: Array<DrawerItem> //= items;\n\n public onSelect(ev: DrawerSelectEvent): void {\n this.selected = ev.item.text;\n const current = ev.item.id;\n\n if (this.expandedIndices.indexOf(current) >= 0) {\n this.expandedIndices = this.expandedIndices.filter(\n (id) => id !== current\n );\n } else {\n this.expandedIndices.push(current);\n }\n if (ev.item.path && ev.item.path !== '') {\n this.router.navigate([ev.item.path]);\n // this.router.navigateByUrl(ev.item.path);\n // this.router.navigate(['/import_layout']); \n }\n }\n private transformToDrawerItems(data: Menu[], parentId?: string): any {\n let drawerItems: Array<{ [Key: string]: unknown }> = [];\n\n data.forEach(item => {\n const drawerItem = {\n id: item.id,\n text: this.translate.instant(item.translationKey),\n // icon: item.icon,\n svgIcon: this.icons[item.icon],\n selected: false, // Set this based on your application's state or logic\n parentId: parentId,\n path: (item.sublinks && item.sublinks.length > 0) ? '' : item.link\n };\n\n drawerItems.push(drawerItem);\n\n // Recursively process children and flatten them\n if (item.sublinks && item.sublinks.length > 0) {\n const childItems = this.transformToDrawerItems(item.sublinks, item.id);\n drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array\n }\n });\n\n return drawerItems;\n }\n}\n","<div class=\"custom-toolbar\">\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\n <span class=\"app-title\">{{apptitle}}</span>\n</div>\n<kendo-drawer-container>\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\n <!-- <ng-template kendoDrawerItemTemplate let-item>\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\n <span>{{ item.text }}</span>\n </div>\n </ng-template> -->\n </kendo-drawer>\n\n <kendo-drawer-content>\n <router-outlet></router-outlet>\n <!-- <div>{{selected}}</div> -->\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\n </kendo-drawer-content>\n</kendo-drawer-container>","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { FormlyKendoModule } from '@ngx-formly/kendo';\nimport { TranslateModule } from '@ngx-translate/core';\n;\n@Component({\n selector: 'app-rdict-crud',\n templateUrl: './rdict-crud.component.html',\n styleUrls: ['./rdict-crud.component.scss'],\n imports: [\n FormlyModule,\n ReactiveFormsModule,\n FormlyKendoModule,\n TranslateModule\n ]\n})\nexport class RdictCrudComponent implements OnInit {\n baseForm = new FormGroup({});\n model: any = {};\n options: FormlyFormOptions = {};\n fields: FormlyFieldConfig[] = [\n {\n key: 'name',\n type: 'input',\n props: {\n label: 'General.Name',\n translate: true,\n required: true,\n },\n },\n ];\n\n\n constructor() { }\n\n ngOnInit() {\n }\n onSubmit(model) {\n }\n}\n","<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\n</form>","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';\r\n\r\n@Component({\r\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }],\r\n selector: 'table-title',\r\n standalone: true,\r\n template: `\r\n <ng-template #toolbarTemplate>\r\n <kendo-label>{{text}}</kendo-label>\r\n </ng-template>\r\n `\r\n})\r\nexport class RdictTableTitle extends ToolBarToolComponent {\r\n public tabindex = -1;\r\n @ViewChild('toolbarTemplate', { static: true }) public declare toolbarTemplate: TemplateRef<any>;\r\n @Input() public text: string;\r\n constructor() {\r\n super();\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationStart, Router, RouterModule, UrlSegment } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n// import { Rule } from '@rosoftlab/core';\nimport { CommonModule } from '@angular/common';\nimport { KENDO_GRID } from '@progress/kendo-angular-grid';\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\nimport { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';\n// import { ColumnMode, SelectionType, SortDirection } from '@swimlane/ngx-datatable';\nimport { ReactiveDictionary } from '../../reactive-dictionary';\nimport { WsAuthService } from '../../services';\nimport { SocketService } from '../../services/socket.service';\nimport { RdictTableTitle } from './rdict-table-title';\ndeclare var $: any;\n\n@Component({\n selector: 'rsl-rdict-generic-table',\n templateUrl: './rdict-generic-table.component.html',\n styleUrls: ['./rdict-generic-table.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n RouterModule,\n // MatPaginatorModule,\n // MatTableModule,\n TranslateModule,\n KENDO_GRID,\n KENDO_TOOLBAR,\n KENDO_LABEL,\n RdictTableTitle\n ],\n providers: []\n})\nexport class GenericRdictTableComponent implements OnInit {\n dataSource: unknown[] //MatTableDataSource<any> = new MatTableDataSource();\n public title: string;\n model: string;\n @Input() showSerach: boolean;\n @Input() searchFields: string;\n @Input() customInclude: string;\n @Input() defaultSort: string;\n // @Input() defaultSortDirection: SortDirection;\n @Input() deletePropertyName: string;\n @Input() defaultFilter: string;\n @Input() showHeader: boolean;\n // @Input() deleteDisableRule: Rule[];\n @Input() hasAdd: boolean;\n @Input() canDelete: boolean;\n @Input() canEdit: boolean;\n @Input() editOnClick: boolean = false;\n @Input() editOnDblClick: boolean = false;\n data: any[] = [];\n pageIndex: number = 1;\n pageSize: number = 30\n\n basePath: string;\n dictPath: string;\n isLoadingResults = true;\n isRateLimitReached = false;\n\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\n // @ViewChild('table') table: MatTable<any>;\n // @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\n\n\n @Output() selectedObject: EventEmitter<any> = new EventEmitter<any>();\n @Output() click: EventEmitter<{ propertyName: string, model: any }> = new EventEmitter<{ propertyName: string, model: any }>();\n @Output() editModel: EventEmitter<any> = new EventEmitter<any>();\n\n columns = [];\n tableLayout = {};\n allColumns = [];\n displayedColumns: string[];\n // ColumnMode = ColumnMode;\n // SelectionType = SelectionType;\n\n readonly headerHeight = 50;\n readonly rowHeight = 50;\n isLoading: boolean;\n filterValue: string;\n oldOffsetY: number;\n hasSearch: false\n rdict: ReactiveDictionary | undefined;\n selectedItem: any;\n\n constructor(\n public router: Router,\n public route: ActivatedRoute,\n public translate: TranslateService,\n private injector: Injector,\n private socketService: SocketService,\n private wsAuthService: WsAuthService,\n private el: ElementRef) {\n }\n async ngOnInit() {\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', \"\");\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\n\n const currentUrlSegments: UrlSegment[] = this.router.url.split('/').map(segment => new UrlSegment(segment, {}));\n this.basePath = currentUrlSegments.map(segment => segment.path).join('/');\n const filteredSegments = currentUrlSegments.filter(segment => segment.path !== '');\n this.dictPath = filteredSegments.map(segment => segment.path).join('.');\n this.model = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 1].path : ''; // Default to empty string if no valid segments\n this.router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n // Navigation to another page is about to occur\n this.data = [];\n this.pageIndex = 1\n // Perform actions or update component as needed\n }\n });\n this.rdict = ReactiveDictionary.getInstance(this.socketService,this.wsAuthService.Token);\n if (this.rdict.size == 0)\n await this.rdict.asyncInit();\n await this.getListLayout()\n await this.loadData()\n // this.isLoading = true;\n // this.onScroll(0);\n }\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\n if (component[key] === undefined) {\n let dataFromSnapshot = snapshot.data[key];\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\n dataFromSnapshot = snapshot.params[key];\n }\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\n }\n }\n async loadData() {\n var x = await this.rdict.getTable(this.dictPath)\n const result = x.map(dictionary => {\n // Convert Map to object and filter out __guid\n const filteredObject = {};\n for (const [key, value] of dictionary.entries()) {\n if (key !== '__guid') {\n filteredObject[key] = value;\n }\n }\n return filteredObject;\n });\n this.dataSource = result//new MatTableDataSource(result);\n }\n // async handleChange(event) {\n // this.filterValue = event.target.value.toLowerCase();\n // this.data = [];\n // this.pageIndex = 1\n // this.loadData();\n // }\n // loadData(event = null) {\n // const filters = [];\n // let sorts = '';\n // this.isLoading = true;\n // if (this.defaultSort) {\n // if (this.defaultSortDirection === 'desc') {\n // sorts = '-' + this.defaultSort;\n // } else {\n // sorts = this.defaultSort;\n // }\n // }\n // if (this.showSerach) {\n // if (this.filterValue) {\n // const y = '(' + this.searchFields.replace(',', '|') + ')';\n // filters.push(y + '@=*' + this.filterValue);\n // }\n // }\n // if (this.defaultFilter) {\n // filters.push(this.defaultFilter)\n // }\n // setTimeout(() => {\n // const filtersValue = filters.join(', ');\n // this.modelService.getAll(this.pageIndex, this.pageSize, sorts, filtersValue, this.customInclude).subscribe(\n // (response: BaseQueryData<T>) => {\n // if (this.pageIndex !== response.getMeta().meta.count) {\n // this.pageIndex++\n // } else {\n // if (event) event.target.disabled = true;\n // }\n // // if (this.filterValue)\n // // this.data = response.getModels();\n // // else\n // const rows = [...this.data, ...response.getModels()];\n // this.data = rows;\n // // this.data = this.data.concat();\n\n // if (event) event.target.complete();\n // this.isLoading = false;\n // })\n // }, 700);\n // }\n // async handleRefresh(event) {\n // this.pageIndex = 1\n // this.data = [];\n // this.loadData();\n // event.target.complete();\n // }\n // onAdd() {\n // console.log(this.basePath)\n // this.router.navigate([this.basePath + '/add'])\n // // this.navCtrl.navigateForward(this.basePath + '/add');\n // }\n // editModel(model: BaseModelFormly) {\n // if (this.canEdit)\n // this.router.navigate([this.basePath + '/edit/', model.id]);\n // // this.navCtrl.navigateForward(this.basePath + '/edit/' + model.id);\n // }\n async getListLayout() {\n if (this.model) {\n this.tableLayout = await this.rdict.asyncGet(\"config.models.\" + this.model + \".tableLayout\")\n if (this.tableLayout) {\n this.title = this.translate.instant(this.tableLayout[\"title\"]);\n this.allColumns = this.tableLayout[\"columns\"].map(item => {\n if (!item.isTranslated) {\n item.name = this.translate.instant(item.translateKey);\n item.isTranslated = true\n }\n return item;\n });\n this.columns = [];\n\n this.allColumns.sort((a, b) => a.order - b.order);\n\n // if (this.canDelete || this.canEdit) {\n // this.allColumns.push({\n // // cellTemplate: null,\n // name: '',\n // // cellClass: 'actions-cell',\n // draggable: false,\n // sortable: false,\n // visible: true\n // // width: 100,\n // // maxWidth: 100,\n // // minWidth: 100\n // })\n // }\n // this.columns = this.allColumns.filter((item: IonicDataTableLayoutConfig) => item.visible);\n\n this.displayedColumns = [];\n // if (this.allowReorderItems) {\n // this.displayedColumns.push('position')\n // }\n this.displayedColumns.push.apply(this.displayedColumns, this.allColumns.map(x => x.propertyName));\n\n }\n }\n\n }\n public addHandler(): void {\n console.log(\"add\")\n this.router.navigate([this.basePath + '/add'])\n // this.editDataItem = new Product();\n // this.isNew = true;\n }\n\n}\n","<kendo-grid [data]=\"dataSource\" \n [sortable]=\"true\" \n [filterable]=\"showSerach\"\n (add)=\"addHandler()\">\n <kendo-toolbar>\n <table-title text=\"{{title}}\"></table-title>\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\n </kendo-toolbar>\n <!-- <kendo-toolbar>\n \n <kendo-toolbar-spacer></kendo-toolbar-spacer>\n <button kendoGridAddCommand type=\"button\">Add new</button>\n </kendo-toolbar> -->\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\n title=\" {{column.translateKey | translate}}\">\n </kendo-grid-column>\n</kendo-grid>","// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/core';\r\nexport * from './lib/reactive-dictionary';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserService","i2","i1.SocketService","i3","i1.WsAuthService","i1","i3.SocketService","i4.WsAuthService","i5"],"mappings":"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"}
1
+ {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/models/menu.ts","../../../../projects/rosoftlab/rdict/src/lib/models/right.ts","../../../../projects/rosoftlab/rdict/src/lib/models/user.ts","../../../../projects/rosoftlab/rdict/src/lib/services/user.service.ts","../../../../projects/rosoftlab/rdict/src/lib/services/ws-auth.service.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.html","../../../../projects/rosoftlab/rdict/src/lib/translate.extension.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rsl-reactive-dictionary.module.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.html","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-table-title.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.html","../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["import { BehaviorSubject, Observable } from \"rxjs\";\r\nimport { SocketService } from \"./services/socket.service\";\r\n\r\nexport class ReactiveDictionary extends Map<string, any> {\r\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>;\r\n private _socketService: SocketService;\r\n private changes$: BehaviorSubject<any> = new BehaviorSubject(null);\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n private constructor(socketService: SocketService,\r\n authToken: string) {\r\n super();\r\n this._authToken = authToken;\r\n this._socketService = socketService;\r\n this._socketService.initSocket(authToken)\r\n this._socketService.getSetEvent(this)\r\n }\r\n\r\n // Method to get the singleton instance\r\n public static getInstance(socketService: SocketService, authToken: string, instance_key?: string): ReactiveDictionary {\r\n if (!instance_key)\r\n instance_key = 'root'\r\n if (!ReactiveDictionary.instance.has(instance_key)) {\r\n ReactiveDictionary.instance.set(instance_key, new ReactiveDictionary(socketService, authToken));\r\n }\r\n const instance = ReactiveDictionary.instance.get(instance_key);\r\n if (!instance) {\r\n throw new Error(`No instance found for key: ${instance_key}`); // Handle undefined case\r\n }\r\n\r\n return instance; // Now TypeScript knows 'instance' is not undefined\r\n }\r\n // str_keys(): string[] {\r\n override keys(): IterableIterator<string> {\r\n const excludedKeys = ['__guid', '__type']; // Key to exclude\r\n const iterator = super.keys();\r\n\r\n const filteredIterator = {\r\n [Symbol.iterator]: () => ({\r\n next: () => {\r\n let result;\r\n\r\n // Loop until we find a valid key or run out of keys\r\n do {\r\n result = iterator.next(); // Get the next entry ([key, value])\r\n if (result.done) return { done: true }; // Stop if done\r\n\r\n const key = result.value; // Destructure the entry\r\n const value = super.get(key)\r\n // Check if the key is in excludedKeys or if the value is an object\r\n if (\r\n !excludedKeys.includes(key) &&\r\n !(typeof value === 'object' && value !== null)\r\n ) {\r\n return { value: key, done: false }; // Return the valid key\r\n }\r\n } while (true); // Continue until a valid key is found\r\n }\r\n })\r\n };\r\n\r\n return filteredIterator as IterableIterator<string>;\r\n }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.')\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key)\r\n if (value instanceof ReactiveDictionary) {\r\n return value\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type']\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService, this._authToken);\r\n await dict.asyncInit(lazyLoadData.data)\r\n this.set(key, dict)\r\n return dict\r\n }\r\n }\r\n }\r\n return value\r\n }\r\n } else {\r\n const obj = await this.asyncGet(keys[0]) as ReactiveDictionary\r\n if (obj)\r\n return await obj.asyncGet(keys.slice(1).join('.'))\r\n else\r\n return null;\r\n }\r\n }\r\n\r\n // Asynchronous method to set a value by key\r\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitSet(this.get('__guid'), key, value);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.set(key, value)\r\n this.changes$.next({ key, value });\r\n }\r\n\r\n // Asynchronous method to initialize with a set of key-value pairs\r\n async asyncInit(initialData?: Record<string, any>) {\r\n if (!this.isInitialized) {\r\n try {\r\n // If initial data is not provided, fetch it\r\n const data = initialData || await this._socketService.getInitialData();\r\n // this.known_dicts.set(data.__guid,data);\r\n // Set the initial properties on the proxy\r\n for (const [key, value] of Object.entries(data)) {\r\n this.set(key, value);\r\n }\r\n this.isInitialized = true\r\n } catch (error) {\r\n console.error('Error during initialization:', error);\r\n }\r\n }\r\n }\r\n\r\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\r\n try {\r\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n throw error;\r\n }\r\n }\r\n public getPlainObject(): Record<string, any> {\r\n const plainObject: Record<string, any> = {};\r\n this.forEach((value, key) => {\r\n if (value instanceof ReactiveDictionary)\r\n plainObject[key] = value.getPlainObject()\r\n else\r\n plainObject[key] = value; // Add key-value pairs to the plain object\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n async getTable(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) {\r\n return []; // Return an empty array if data is undefined\r\n }\r\n\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result = await Promise.all(Array.from(data.entries()).map(async (key: any) => await data.asyncGet(key[0])) // Get data from asyncGet\r\n ) || []; // Return an empty array if the above yields undefined\r\n\r\n\r\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n }\r\n async getTableWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) {\r\n return []; // Return an empty array if data is undefined\r\n }\r\n\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result = await Promise.all(Array.from(data.entries()).map(async (key: any) => await data.asyncGet(key[0])) // Get data from asyncGet\r\n ) || []; // Return an empty array if the above yields undefined\r\n\r\n\r\n var filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n\r\n return filteredResults.map(dictionary => {\r\n // Convert Map to object and filter out __guid\r\n const filteredObject = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n }\r\n onChanges(): Observable<any> {\r\n return this.changes$.asObservable();\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport * as msgpackParser from 'socket.io-msgpack-parser';\r\nimport { SOCKET_URL } from '../core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n private socket: Socket;\r\n private socketUrl: string\r\n constructor(\r\n @Inject(SOCKET_URL) socketUrl: string,) {\r\n this.socketUrl = socketUrl\r\n // Replace with your actual server URL\r\n // this.socket.on(\"connect\", () => {\r\n // const engine = this.socket.io.engine;\r\n // (engine.transport.name); // in most cases, prints \"polling\"\r\n\r\n // engine.once(\"upgrade\", () => {\r\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\r\n // (engine.transport.name); // in most cases, prints \"websocket\"\r\n // });\r\n\r\n // });\r\n }\r\n initSocket(authToken: string) {\r\n if (this.socket == null && authToken !== null) {\r\n this.socket = io(this.socketUrl, {\r\n withCredentials: true,\r\n parser: msgpackParser,\r\n auth: {\r\n token: authToken, // Include the authentication token\r\n }\r\n ,\r\n query: {\r\n \"access_token\": authToken\r\n }\r\n });\r\n }\r\n }\r\n getInitialData(): Promise<Record<string, any>> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.on('init', (data: any) => {\r\n if (data) {\r\n resolve(data[\"dict_data\"]);\r\n } else {\r\n reject('No data received from init event');\r\n }\r\n });\r\n });\r\n }\r\n getSetEvent(rdict: any) {\r\n this.socket.on('set', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncSet(data.key, data.value, false)\r\n }\r\n });\r\n }\r\n // Emit the 'lazy_load' event with callback to get the response\r\n requestLazyLoad(did: string, key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitSet(did: string, key: string, value: any): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('set', { did, key, value }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { Right } from '../models/right';\r\nimport { User } from '../models/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService extends BaseService<User> {\r\n userRights!: Right[]; \r\n constructor(datastore: DatastoreCore) {\r\n super(datastore);\r\n this.setModelType(User);\r\n }\r\n getRights(): Observable<BaseQueryData<Right>> {\r\n const response = this.datastore.findAll(Right);\r\n return response;\r\n }\r\n hasRightForLink(link: string): boolean {\r\n\r\n if (this.userRights && link) {\r\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\r\n return true;\r\n }\r\n return false;\r\n }\r\n getMenus(): Observable<BaseQueryData<Menu>> {\r\n const response = this.datastore.findAll(Menu);\r\n return response;\r\n } \r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WsAuthService {\r\n private token: string = null\r\n constructor() { }\r\n get Token(): string {\r\n return this.token\r\n }\r\n set Token(token: string) {\r\n this.token = token\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\r\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\r\nimport { DrawerItemExpandedFn, DrawerSelectEvent, LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { ToolBarModule } from '@progress/kendo-angular-toolbar';\r\nimport * as allIcons from \"@progress/kendo-svg-icons\";\r\nimport { menuIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\r\nimport { map, Observable } from 'rxjs';\r\nimport { Menu } from '../../../models';\r\nimport { ReactiveDictionary } from '../../../reactive-dictionary';\r\nimport { SocketService, UserService, WsAuthService } from '../../../services';\r\n@Component({\r\n selector: 'rdict-full',\r\n templateUrl: './full.component.html',\r\n styleUrls: ['./full.component.scss'],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n TranslateModule,\r\n CommonModule,\r\n ButtonsModule,\r\n ToolBarModule,\r\n LayoutModule,\r\n KENDO_SVGICON\r\n ]\r\n})\r\nexport class FullComponent implements OnInit {\r\n public selected = \"Inbox\";\r\n public menuSvg: SVGIcon = menuIcon;\r\n public expandedIndices = [2];\r\n menu$!: Observable<Menu[]>;\r\n hasItems: boolean = false;\r\n public items: Array<{ [Key: string]: unknown }> = [];\r\n public icons = allIcons;\r\n private rdict: ReactiveDictionary | undefined;\r\n apptitle: string = \"Test\"\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n private socketService: SocketService,\r\n public translate: TranslateService,\r\n private wsAuthService: WsAuthService\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\r\n this.rdict = ReactiveDictionary.getInstance(this.socketService,this.wsAuthService.Token);\r\n if (this.rdict.size == 0)\r\n await this.rdict.asyncInit();\r\n this.apptitle = await this.rdict.asyncGet(\"appname\")\r\n\r\n }\r\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\r\n return this.expandedIndices.indexOf(item.id) >= 0;\r\n };\r\n getMenu() {\r\n this.userService.getMenus().subscribe(\r\n {\r\n next: value => {\r\n this.items = this.transformToDrawerItems(value.getModels())\r\n },\r\n error: err => console.error('Observable emitted an error: ' + err),\r\n complete: () => console.log('Observable emitted the complete notification')\r\n }\r\n )\r\n this.menu$ = this.userService.getMenus().pipe(map(f => {\r\n const data = f.getModels()\r\n this.hasItems = data.length > 0;\r\n return data;\r\n }));\r\n }\r\n // public items: Array<DrawerItem> //= items;\r\n\r\n public onSelect(ev: DrawerSelectEvent): void {\r\n this.selected = ev.item.text;\r\n const current = ev.item.id;\r\n\r\n if (this.expandedIndices.indexOf(current) >= 0) {\r\n this.expandedIndices = this.expandedIndices.filter(\r\n (id) => id !== current\r\n );\r\n } else {\r\n this.expandedIndices.push(current);\r\n }\r\n if (ev.item.path && ev.item.path !== '') {\r\n this.router.navigate([ev.item.path]);\r\n // this.router.navigateByUrl(ev.item.path);\r\n // this.router.navigate(['/import_layout']); \r\n }\r\n }\r\n private transformToDrawerItems(data: Menu[], parentId?: string): any {\r\n let drawerItems: Array<{ [Key: string]: unknown }> = [];\r\n\r\n data.forEach(item => {\r\n const drawerItem = {\r\n id: item.id,\r\n text: this.translate.instant(item.translationKey),\r\n // icon: item.icon,\r\n svgIcon: this.icons[item.icon],\r\n selected: false, // Set this based on your application's state or logic\r\n parentId: parentId,\r\n path: (item.sublinks && item.sublinks.length > 0) ? '' : item.link\r\n };\r\n\r\n drawerItems.push(drawerItem);\r\n\r\n // Recursively process children and flatten them\r\n if (item.sublinks && item.sublinks.length > 0) {\r\n const childItems = this.transformToDrawerItems(item.sublinks, item.id);\r\n drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array\r\n }\r\n });\r\n\r\n return drawerItems;\r\n }\r\n}\r\n","<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n <!-- <ng-template kendoDrawerItemTemplate let-item>\r\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n </ng-template> -->\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n <!-- <div>{{selected}}</div> -->\r\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>","import { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\nexport class TranslateExtension implements FormlyExtension {\r\n constructor(private translate: TranslateService) { }\r\n prePopulate(field: FormlyFieldConfig) {\r\n const props = field.props || {};\r\n if (!props['translate'] || props['_translated']) {\r\n return;\r\n }\r\n\r\n props['_translated'] = true;\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.label': this.translate.stream(props.label),\r\n };\r\n if (props.placeholder) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.placeholder': this.translate.stream(props.placeholder)\r\n };\r\n }\r\n if (props.description) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.description': this.translate.stream(props.description)\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport function registerTranslateExtension(translate: TranslateService) {\r\n return {\r\n validationMessages: [\r\n {\r\n name: 'required',\r\n message(error: any, field: FormlyFieldConfig) {\r\n // console.log(field);\r\n return translate.stream('General.Field.Required', { field: field.props.label });\r\n },\r\n },\r\n ],\r\n extensions: [\r\n {\r\n name: 'translate',\r\n extension: new TranslateExtension(translate),\r\n }\r\n ],\r\n };\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FORMLY_CONFIG } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { registerTranslateExtension } from '../../translate.extension';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n\r\n ],\r\n providers: [\r\n { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },\r\n ],\r\n})\r\nexport class CrudFormlyTransaltionModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router, UrlSegment } from '@angular/router';\r\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\r\nimport { FormlyKendoModule } from '@ngx-formly/kendo';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { SocketService, WsAuthService } from '../../services';\r\nimport { CrudFormlyTransaltionModule } from './rsl-reactive-dictionary.module';\r\n;\r\n@Component({\r\n selector: 'app-rdict-crud',\r\n templateUrl: './rdict-crud.component.html',\r\n styleUrls: ['./rdict-crud.component.scss'],\r\n imports: [\r\n FormlyModule,\r\n ReactiveFormsModule,\r\n FormlyKendoModule,\r\n TranslateModule,\r\n CrudFormlyTransaltionModule\r\n ]\r\n})\r\nexport class RdictCrudComponent implements OnInit {\r\n title: string;\r\n\r\n rdict: ReactiveDictionary | undefined;\r\n basePath: string;\r\n dictPath: string;\r\n rdictModel: string;\r\n\r\n\r\n baseForm = new FormGroup({});\r\n model: any = {};\r\n options: FormlyFormOptions = {};\r\n fields: FormlyFieldConfig[] = [];\r\n // = [\r\n // {\r\n // key: 'name',\r\n // type: 'input',\r\n // props: {\r\n // label: 'General.Name',\r\n // translate: true,\r\n // required: true,\r\n // }\r\n // },\r\n // ];\r\n\r\n\r\n constructor(\r\n public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private socketService: SocketService,\r\n private wsAuthService: WsAuthService,\r\n ) {\r\n\r\n }\r\n\r\n async ngOnInit() {\r\n const currentUrlSegments: UrlSegment[] = this.router.url.split('/').map(segment => new UrlSegment(segment, {}));\r\n this.basePath = currentUrlSegments.map(segment => segment.path).join('/');\r\n const filteredSegments = currentUrlSegments.filter(segment => segment.path !== '');\r\n this.dictPath = filteredSegments.map(segment => segment.path).join('.');\r\n this.rdictModel = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 2].path : ''; // Default to empty string if no valid segments\r\n this.rdict = ReactiveDictionary.getInstance(this.socketService, this.wsAuthService.Token);\r\n if (this.rdict.size == 0)\r\n await this.rdict.asyncInit();\r\n await this.getModelFields();\r\n }\r\n onSubmit(model) {\r\n }\r\n async getModelFields() {\r\n if (this.rdictModel) {\r\n const formLayout = await this.rdict.asyncGet(\"config.models.\" + this.rdictModel + \".formLayout\");\r\n // const tableLayout = await this.rdict.asyncGet(\"config.models.\" + this.rdictModel + \".tableLayout\");\r\n console.log(formLayout);\r\n // console.log(tableLayout);\r\n if (formLayout) {\r\n this.title = this.translate.instant(formLayout[\"title\"]);\r\n this.fields = formLayout[\"fields\"]\r\n }\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\r\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\r\n</form>","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';\r\n\r\n@Component({\r\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }],\r\n selector: 'table-title',\r\n standalone: true,\r\n template: `\r\n <ng-template #toolbarTemplate>\r\n <kendo-label>{{text}}</kendo-label>\r\n </ng-template>\r\n `\r\n})\r\nexport class RdictTableTitle extends ToolBarToolComponent {\r\n public tabindex = -1;\r\n @ViewChild('toolbarTemplate', { static: true }) public declare toolbarTemplate: TemplateRef<any>;\r\n @Input() public text: string;\r\n constructor() {\r\n super();\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationStart, Router, RouterModule, UrlSegment } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\n// import { Rule } from '@rosoftlab/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { KENDO_GRID } from '@progress/kendo-angular-grid';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\r\nimport { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';\r\n// import { ColumnMode, SelectionType, SortDirection } from '@swimlane/ngx-datatable';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { WsAuthService } from '../../services';\r\nimport { SocketService } from '../../services/socket.service';\r\nimport { RdictTableTitle } from './rdict-table-title';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n selector: 'rsl-rdict-generic-table',\r\n templateUrl: './rdict-generic-table.component.html',\r\n styleUrls: ['./rdict-generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n // MatPaginatorModule,\r\n // MatTableModule,\r\n TranslateModule,\r\n KENDO_GRID,\r\n KENDO_TOOLBAR,\r\n KENDO_LABEL,\r\n RdictTableTitle\r\n ],\r\n providers: []\r\n})\r\nexport class GenericRdictTableComponent implements OnInit {\r\n dataSource: unknown[] //MatTableDataSource<any> = new MatTableDataSource();\r\n public title: string;\r\n model: string;\r\n @Input() showSerach: boolean;\r\n @Input() searchFields: string;\r\n @Input() customInclude: string;\r\n @Input() defaultSort: string;\r\n // @Input() defaultSortDirection: SortDirection;\r\n @Input() deletePropertyName: string;\r\n @Input() defaultFilter: string;\r\n @Input() showHeader: boolean;\r\n // @Input() deleteDisableRule: Rule[];\r\n @Input() hasAdd: boolean;\r\n @Input() canDelete: boolean;\r\n @Input() canEdit: boolean;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n data: any[] = [];\r\n pageIndex: number = 1;\r\n pageSize: number = 30\r\n\r\n basePath: string;\r\n dictPath: string;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n // @ViewChild('table') table: MatTable<any>;\r\n // @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n\r\n\r\n @Output() selectedObject: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() click: EventEmitter<{ propertyName: string, model: any }> = new EventEmitter<{ propertyName: string, model: any }>();\r\n @Output() editModel: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n columns = [];\r\n tableLayout = {};\r\n allColumns = [];\r\n displayedColumns: string[];\r\n // ColumnMode = ColumnMode;\r\n // SelectionType = SelectionType;\r\n\r\n readonly headerHeight = 50;\r\n readonly rowHeight = 50;\r\n isLoading: boolean;\r\n filterValue: string;\r\n oldOffsetY: number;\r\n hasSearch: false\r\n rdict: ReactiveDictionary | undefined;\r\n selectedItem: any;\r\n\r\n constructor(\r\n public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private injector: Injector,\r\n private socketService: SocketService,\r\n private wsAuthService: WsAuthService,\r\n private el: ElementRef) {\r\n }\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', \"\");\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\r\n\r\n const currentUrlSegments: UrlSegment[] = this.router.url.split('/').map(segment => new UrlSegment(segment, {}));\r\n this.basePath = currentUrlSegments.map(segment => segment.path).join('/');\r\n const filteredSegments = currentUrlSegments.filter(segment => segment.path !== '');\r\n this.dictPath = filteredSegments.map(segment => segment.path).join('.');\r\n this.model = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 1].path : ''; // Default to empty string if no valid segments\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationStart) {\r\n // Navigation to another page is about to occur\r\n this.data = [];\r\n this.pageIndex = 1\r\n // Perform actions or update component as needed\r\n }\r\n });\r\n this.rdict = ReactiveDictionary.getInstance(this.socketService,this.wsAuthService.Token);\r\n if (this.rdict.size == 0)\r\n await this.rdict.asyncInit();\r\n await this.getListLayout()\r\n await this.loadData()\r\n // this.isLoading = true;\r\n // this.onScroll(0);\r\n }\r\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\r\n if (component[key] === undefined) {\r\n let dataFromSnapshot = snapshot.data[key];\r\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\r\n dataFromSnapshot = snapshot.params[key];\r\n }\r\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\r\n }\r\n }\r\n async loadData() {\r\n var x = await this.rdict.getTable(this.dictPath)\r\n const result = x.map(dictionary => {\r\n // Convert Map to object and filter out __guid\r\n const filteredObject = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n this.dataSource = result//new MatTableDataSource(result);\r\n }\r\n // async handleChange(event) {\r\n // this.filterValue = event.target.value.toLowerCase();\r\n // this.data = [];\r\n // this.pageIndex = 1\r\n // this.loadData();\r\n // }\r\n // loadData(event = null) {\r\n // const filters = [];\r\n // let sorts = '';\r\n // this.isLoading = true;\r\n // if (this.defaultSort) {\r\n // if (this.defaultSortDirection === 'desc') {\r\n // sorts = '-' + this.defaultSort;\r\n // } else {\r\n // sorts = this.defaultSort;\r\n // }\r\n // }\r\n // if (this.showSerach) {\r\n // if (this.filterValue) {\r\n // const y = '(' + this.searchFields.replace(',', '|') + ')';\r\n // filters.push(y + '@=*' + this.filterValue);\r\n // }\r\n // }\r\n // if (this.defaultFilter) {\r\n // filters.push(this.defaultFilter)\r\n // }\r\n // setTimeout(() => {\r\n // const filtersValue = filters.join(', ');\r\n // this.modelService.getAll(this.pageIndex, this.pageSize, sorts, filtersValue, this.customInclude).subscribe(\r\n // (response: BaseQueryData<T>) => {\r\n // if (this.pageIndex !== response.getMeta().meta.count) {\r\n // this.pageIndex++\r\n // } else {\r\n // if (event) event.target.disabled = true;\r\n // }\r\n // // if (this.filterValue)\r\n // // this.data = response.getModels();\r\n // // else\r\n // const rows = [...this.data, ...response.getModels()];\r\n // this.data = rows;\r\n // // this.data = this.data.concat();\r\n\r\n // if (event) event.target.complete();\r\n // this.isLoading = false;\r\n // })\r\n // }, 700);\r\n // }\r\n // async handleRefresh(event) {\r\n // this.pageIndex = 1\r\n // this.data = [];\r\n // this.loadData();\r\n // event.target.complete();\r\n // }\r\n // onAdd() {\r\n // console.log(this.basePath)\r\n // this.router.navigate([this.basePath + '/add'])\r\n // // this.navCtrl.navigateForward(this.basePath + '/add');\r\n // }\r\n // editModel(model: BaseModelFormly) {\r\n // if (this.canEdit)\r\n // this.router.navigate([this.basePath + '/edit/', model.id]);\r\n // // this.navCtrl.navigateForward(this.basePath + '/edit/' + model.id);\r\n // }\r\n async getListLayout() {\r\n if (this.model) {\r\n this.tableLayout = await this.rdict.asyncGet(\"config.models.\" + this.model + \".tableLayout\")\r\n const formLayout=await this.rdict.asyncGet(\"config.models.\" + this.model + \".formLayout\");\r\n console.log(formLayout);\r\n if (this.tableLayout) {\r\n this.title = this.translate.instant(this.tableLayout[\"title\"]);\r\n this.allColumns = this.tableLayout[\"columns\"].map(item => {\r\n if (!item.isTranslated) {\r\n item.name = this.translate.instant(item.translateKey);\r\n item.isTranslated = true\r\n }\r\n return item;\r\n });\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n\r\n // if (this.canDelete || this.canEdit) {\r\n // this.allColumns.push({\r\n // // cellTemplate: null,\r\n // name: '',\r\n // // cellClass: 'actions-cell',\r\n // draggable: false,\r\n // sortable: false,\r\n // visible: true\r\n // // width: 100,\r\n // // maxWidth: 100,\r\n // // minWidth: 100\r\n // })\r\n // }\r\n // this.columns = this.allColumns.filter((item: IonicDataTableLayoutConfig) => item.visible);\r\n\r\n this.displayedColumns = [];\r\n // if (this.allowReorderItems) {\r\n // this.displayedColumns.push('position')\r\n // }\r\n this.displayedColumns.push.apply(this.displayedColumns, this.allColumns.map(x => x.propertyName));\r\n\r\n }\r\n }\r\n\r\n }\r\n public addHandler(): void {\r\n console.log(\"add\")\r\n this.router.navigate([this.basePath + '/add'])\r\n // this.editDataItem = new Product();\r\n // this.isNew = true;\r\n }\r\n\r\n}\r\n","<kendo-grid [data]=\"dataSource\" \r\n [sortable]=\"true\" \r\n [filterable]=\"showSerach\"\r\n (add)=\"addHandler()\">\r\n <kendo-toolbar>\r\n <table-title text=\"{{title}}\"></table-title>\r\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\r\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n <!-- <kendo-toolbar>\r\n \r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <button kendoGridAddCommand type=\"button\">Add new</button>\r\n </kendo-toolbar> -->\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\r\n title=\" {{column.translateKey | translate}}\">\r\n </kendo-grid-column>\r\n</kendo-grid>","// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/core';\r\nexport * from './lib/reactive-dictionary';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserService","i2","i1.SocketService","i3","i1.WsAuthService","i1","i3.SocketService","i3.WsAuthService","i4","i5","i4.WsAuthService"],"mappings":"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"}
@@ -1,15 +1,30 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
+ import { ActivatedRoute, Router } from '@angular/router';
3
4
  import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
5
+ import { TranslateService } from '@ngx-translate/core';
6
+ import { ReactiveDictionary } from '../../reactive-dictionary';
7
+ import { SocketService, WsAuthService } from '../../services';
4
8
  import * as i0 from "@angular/core";
5
9
  export declare class RdictCrudComponent implements OnInit {
10
+ router: Router;
11
+ route: ActivatedRoute;
12
+ translate: TranslateService;
13
+ private socketService;
14
+ private wsAuthService;
15
+ title: string;
16
+ rdict: ReactiveDictionary | undefined;
17
+ basePath: string;
18
+ dictPath: string;
19
+ rdictModel: string;
6
20
  baseForm: FormGroup<{}>;
7
21
  model: any;
8
22
  options: FormlyFormOptions;
9
23
  fields: FormlyFieldConfig[];
10
- constructor();
11
- ngOnInit(): void;
24
+ constructor(router: Router, route: ActivatedRoute, translate: TranslateService, socketService: SocketService, wsAuthService: WsAuthService);
25
+ ngOnInit(): Promise<void>;
12
26
  onSubmit(model: any): void;
27
+ getModelFields(): Promise<void>;
13
28
  static ɵfac: i0.ɵɵFactoryDeclaration<RdictCrudComponent, never>;
14
29
  static ɵcmp: i0.ɵɵComponentDeclaration<RdictCrudComponent, "app-rdict-crud", never, {}, {}, never, never, true, never>;
15
30
  }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/common";
3
+ export declare class CrudFormlyTransaltionModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<CrudFormlyTransaltionModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CrudFormlyTransaltionModule, never, [typeof i1.CommonModule], never>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<CrudFormlyTransaltionModule>;
7
+ }
@@ -0,0 +1,17 @@
1
+ import { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ export declare class TranslateExtension implements FormlyExtension {
4
+ private translate;
5
+ constructor(translate: TranslateService);
6
+ prePopulate(field: FormlyFieldConfig): void;
7
+ }
8
+ export declare function registerTranslateExtension(translate: TranslateService): {
9
+ validationMessages: {
10
+ name: string;
11
+ message(error: any, field: FormlyFieldConfig): import("rxjs").Observable<any>;
12
+ }[];
13
+ extensions: {
14
+ name: string;
15
+ extension: TranslateExtension;
16
+ }[];
17
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rosoftlab/rdict",
3
- "version": "1.0.1-alpha-5",
3
+ "version": "1.0.1-alpha-7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.1.3",
6
6
  "@angular/core": "^19.1.3",
@@ -37,7 +37,7 @@
37
37
  "socket.io-client": "^4.8.1",
38
38
  "socket.io-msgpack-parser": "^3.0.2",
39
39
  "socket.io-parser": "^3.3.4",
40
- "@rosoftlab/core": "1.0.1-alpha-5"
40
+ "@rosoftlab/core": "1.0.1-alpha-7"
41
41
  },
42
42
  "sideEffects": false,
43
43
  "author": "rosoftlab",