@rosoftlab/rdict 1.0.2-alpha-17 → 1.0.2-alpha-18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@ import * as i6$2 from '@angular/common';
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Inject, Injectable, Component, NgModule, forwardRef, Input, ViewChild, EventEmitter, ElementRef, Output, ViewEncapsulation, InjectionToken } from '@angular/core';
|
|
5
|
-
import * as i1
|
|
5
|
+
import * as i1 from '@angular/router';
|
|
6
6
|
import { RouterModule, UrlSegment, NavigationStart } from '@angular/router';
|
|
7
7
|
import * as i2 from '@ngx-translate/core';
|
|
8
8
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
@@ -14,14 +14,14 @@ import { LayoutModule } from '@progress/kendo-angular-layout';
|
|
|
14
14
|
import * as i8 from '@progress/kendo-angular-toolbar';
|
|
15
15
|
import { ToolBarModule, KENDO_TOOLBAR, ToolBarToolComponent } from '@progress/kendo-angular-toolbar';
|
|
16
16
|
import * as allIcons from '@progress/kendo-svg-icons';
|
|
17
|
-
import { menuIcon, saveIcon, pencilIcon, trashIcon, plusIcon } from '@progress/kendo-svg-icons';
|
|
17
|
+
import { menuIcon, saveIcon, arrowLeftIcon, pencilIcon, trashIcon, plusIcon } from '@progress/kendo-svg-icons';
|
|
18
18
|
import { Subject, from, mergeMap, Observable, map } from 'rxjs';
|
|
19
19
|
import { v4 } from 'uuid';
|
|
20
20
|
import { io } from 'socket.io-client';
|
|
21
21
|
import * as i2$1 from '@progress/kendo-angular-dialog';
|
|
22
22
|
import { DialogCloseResult, KENDO_DIALOG } from '@progress/kendo-angular-dialog';
|
|
23
23
|
import * as i3 from '@progress/kendo-angular-notification';
|
|
24
|
-
import * as
|
|
24
|
+
import * as i4 from '@rosoftlab/core';
|
|
25
25
|
import { BaseModel, Attribute, BaseModelConfig, BaseService } from '@rosoftlab/core';
|
|
26
26
|
import { __decorate, __metadata } from 'tslib';
|
|
27
27
|
import * as i7 from '@angular/forms';
|
|
@@ -31,7 +31,7 @@ import { FORMLY_CONFIG, FormlyModule } from '@ngx-formly/core';
|
|
|
31
31
|
import { FormlyKendoModule } from '@ngx-formly/kendo';
|
|
32
32
|
import * as i7$1 from '@progress/kendo-angular-grid';
|
|
33
33
|
import { KENDO_GRID } from '@progress/kendo-angular-grid';
|
|
34
|
-
import * as i1$
|
|
34
|
+
import * as i1$1 from '@progress/kendo-angular-label';
|
|
35
35
|
import { KENDO_LABEL } from '@progress/kendo-angular-label';
|
|
36
36
|
|
|
37
37
|
class SocketService {
|
|
@@ -681,7 +681,7 @@ class UserService extends BaseService {
|
|
|
681
681
|
const response = this.datastore.findAll(Menu);
|
|
682
682
|
return response;
|
|
683
683
|
}
|
|
684
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, deps: [{ token:
|
|
684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, deps: [{ token: i4.DatastoreCore }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
685
685
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, providedIn: 'root' }); }
|
|
686
686
|
}
|
|
687
687
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, decorators: [{
|
|
@@ -689,7 +689,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
689
689
|
args: [{
|
|
690
690
|
providedIn: 'root'
|
|
691
691
|
}]
|
|
692
|
-
}], ctorParameters: () => [{ type:
|
|
692
|
+
}], ctorParameters: () => [{ type: i4.DatastoreCore }] });
|
|
693
693
|
|
|
694
694
|
class FullComponent {
|
|
695
695
|
constructor(userService, router, translate, rdict) {
|
|
@@ -764,8 +764,8 @@ class FullComponent {
|
|
|
764
764
|
});
|
|
765
765
|
return drawerItems;
|
|
766
766
|
}
|
|
767
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, deps: [{ token: UserService }, { token: i1
|
|
768
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", 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 <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 </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\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
|
|
767
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, deps: [{ token: UserService }, { token: i1.Router }, { token: i2.TranslateService }, { token: ReactiveDictionary }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
768
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", 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 <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 </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\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.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: i5.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: i6.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: i6.DrawerContainerComponent, selector: "kendo-drawer-container" }, { kind: "component", type: i6.DrawerContentComponent, selector: "kendo-drawer-content" }] }); }
|
|
769
769
|
}
|
|
770
770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, decorators: [{
|
|
771
771
|
type: Component,
|
|
@@ -779,7 +779,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
779
779
|
LayoutModule,
|
|
780
780
|
KENDO_SVGICON
|
|
781
781
|
], template: "<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></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 </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\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"] }]
|
|
782
|
-
}], ctorParameters: () => [{ type: UserService }, { type: i1
|
|
782
|
+
}], ctorParameters: () => [{ type: UserService }, { type: i1.Router }, { type: i2.TranslateService }, { type: ReactiveDictionary }] });
|
|
783
783
|
|
|
784
784
|
class TranslateExtension {
|
|
785
785
|
constructor(translate) {
|
|
@@ -849,22 +849,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
849
849
|
}] });
|
|
850
850
|
|
|
851
851
|
class RdictCrudComponent {
|
|
852
|
-
constructor(router, route, translate, rdict, localFileService, dialogService) {
|
|
852
|
+
constructor(router, route, translate, rdict, localFileService, dialogService, routeHistory) {
|
|
853
853
|
this.router = router;
|
|
854
854
|
this.route = route;
|
|
855
855
|
this.translate = translate;
|
|
856
856
|
this.rdict = rdict;
|
|
857
857
|
this.localFileService = localFileService;
|
|
858
858
|
this.dialogService = dialogService;
|
|
859
|
+
this.routeHistory = routeHistory;
|
|
859
860
|
this.baseForm = new FormGroup({});
|
|
860
861
|
this.model = {};
|
|
861
862
|
this.options = {};
|
|
862
863
|
this.fields = [];
|
|
863
864
|
this.saveIcon = saveIcon;
|
|
865
|
+
this.backIcon = arrowLeftIcon;
|
|
864
866
|
}
|
|
865
867
|
async ngOnInit() {
|
|
866
868
|
this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');
|
|
867
|
-
const currentUrlSegments = this.router.url.split('/').filter(segment => segment !== '' && isNaN(Number(segment)));
|
|
869
|
+
const currentUrlSegments = this.router.url.split('/').filter((segment) => segment !== '' && isNaN(Number(segment)));
|
|
868
870
|
if (['add', 'edit'].includes(currentUrlSegments[currentUrlSegments.length - 1])) {
|
|
869
871
|
currentUrlSegments.pop();
|
|
870
872
|
}
|
|
@@ -890,14 +892,14 @@ class RdictCrudComponent {
|
|
|
890
892
|
getModel() {
|
|
891
893
|
if (this.modelKey) {
|
|
892
894
|
this.rdict.get$(this.dictPath).subscribe({
|
|
893
|
-
next: value => {
|
|
895
|
+
next: (value) => {
|
|
894
896
|
value.get$(this.modelKey).subscribe({
|
|
895
|
-
next: modelValue => {
|
|
897
|
+
next: (modelValue) => {
|
|
896
898
|
this.modelRdict = modelValue;
|
|
897
899
|
this.model = this.modelRdict.getPlainObject();
|
|
898
|
-
this.modelRdict.onChange$().subscribe(changes => {
|
|
900
|
+
this.modelRdict.onChange$().subscribe((changes) => {
|
|
899
901
|
if (changes) {
|
|
900
|
-
console.log(
|
|
902
|
+
console.log('Changes detected:', changes);
|
|
901
903
|
this.baseForm.get(changes.key).patchValue(changes.value);
|
|
902
904
|
// this.model[changes.key] = changes.value;
|
|
903
905
|
}
|
|
@@ -905,7 +907,7 @@ class RdictCrudComponent {
|
|
|
905
907
|
}
|
|
906
908
|
});
|
|
907
909
|
},
|
|
908
|
-
error: err => console.error('Error:', err.message)
|
|
910
|
+
error: (err) => console.error('Error:', err.message)
|
|
909
911
|
});
|
|
910
912
|
}
|
|
911
913
|
}
|
|
@@ -914,30 +916,30 @@ class RdictCrudComponent {
|
|
|
914
916
|
if (this.fileLayout) {
|
|
915
917
|
//load from file
|
|
916
918
|
this.localFileService.getJsonData(this.fileLayout).subscribe({
|
|
917
|
-
next: value => {
|
|
919
|
+
next: (value) => {
|
|
918
920
|
if (value) {
|
|
919
|
-
const layout = value.find(item => item.model === this.rdictModel);
|
|
921
|
+
const layout = value.find((item) => item.model === this.rdictModel);
|
|
920
922
|
this.setLayout(layout?.formLayout);
|
|
921
923
|
}
|
|
922
924
|
},
|
|
923
|
-
error: err => console.error('Error:', err.message)
|
|
925
|
+
error: (err) => console.error('Error:', err.message)
|
|
924
926
|
});
|
|
925
927
|
}
|
|
926
928
|
else
|
|
927
|
-
this.rdict.get$(
|
|
928
|
-
next: formLayout => {
|
|
929
|
+
this.rdict.get$('config.models.' + this.rdictModel + '.formLayout').subscribe({
|
|
930
|
+
next: (formLayout) => {
|
|
929
931
|
if (formLayout) {
|
|
930
932
|
this.setLayout(formLayout);
|
|
931
933
|
}
|
|
932
934
|
},
|
|
933
|
-
error: err => console.error('Error:', err.message)
|
|
935
|
+
error: (err) => console.error('Error:', err.message)
|
|
934
936
|
});
|
|
935
937
|
}
|
|
936
938
|
}
|
|
937
939
|
setLayout(formLayout) {
|
|
938
|
-
this.title = this.translate.instant(formLayout[
|
|
940
|
+
this.title = this.translate.instant(formLayout['title']);
|
|
939
941
|
// console.log(formLayout["fields"]);
|
|
940
|
-
let fieldsTmp = formLayout[
|
|
942
|
+
let fieldsTmp = formLayout['fields'];
|
|
941
943
|
this.fields = this.transformFields(fieldsTmp);
|
|
942
944
|
// this.transformJsonToFormlyFields()
|
|
943
945
|
}
|
|
@@ -955,7 +957,7 @@ class RdictCrudComponent {
|
|
|
955
957
|
// // });
|
|
956
958
|
// }
|
|
957
959
|
transformFields(fields) {
|
|
958
|
-
return fields.map(field => this.transformField(field));
|
|
960
|
+
return fields.map((field) => this.transformField(field));
|
|
959
961
|
}
|
|
960
962
|
transformField(field) {
|
|
961
963
|
// Handle the current field
|
|
@@ -996,7 +998,7 @@ class RdictCrudComponent {
|
|
|
996
998
|
}
|
|
997
999
|
}
|
|
998
1000
|
validateAllFormFields(fg) {
|
|
999
|
-
Object.keys(fg.controls).forEach(field => {
|
|
1001
|
+
Object.keys(fg.controls).forEach((field) => {
|
|
1000
1002
|
// console.log(field);
|
|
1001
1003
|
const control = fg.get(field);
|
|
1002
1004
|
if (control instanceof FormControl) {
|
|
@@ -1010,8 +1012,27 @@ class RdictCrudComponent {
|
|
|
1010
1012
|
getSelectData(key) {
|
|
1011
1013
|
return this.rdict.getArray$(key);
|
|
1012
1014
|
}
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
+
onBack() {
|
|
1016
|
+
if (this.baseForm.dirty) {
|
|
1017
|
+
this.dialogService.confirm("Do you want to cancel the changes ?").subscribe({
|
|
1018
|
+
next: (result) => {
|
|
1019
|
+
if (result) {
|
|
1020
|
+
this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
});
|
|
1024
|
+
// .subscribe((result) => {
|
|
1025
|
+
// if (result) {
|
|
1026
|
+
// this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);
|
|
1027
|
+
// }
|
|
1028
|
+
// });
|
|
1029
|
+
}
|
|
1030
|
+
else {
|
|
1031
|
+
this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictCrudComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: ReactiveDictionary }, { token: i4.LocalFileService }, { token: MaterialDialogService }, { token: i4.RouteHistoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1035
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: RdictCrudComponent, isStandalone: true, selector: "app-rdict-crud", ngImport: i0, template: "<kendo-toolbar>\r\n <kendo-toolbar-button text=\"Back\" showText=\"both\" [svgIcon]=\"backIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onBack()\">\r\n </kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"success\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\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>\r\n<div kendoDialogContainer></div>", styles: ["::ng-deep formly-field{padding:.3rem;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i6$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyKendoModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: CrudFormlyTransaltionModule }, { kind: "component", type: i8.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: i8.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: i8.ToolBarSpacerComponent, selector: "kendo-toolbar-spacer", exportAs: ["kendoToolBarSpacer"] }, { kind: "directive", type: i2$1.DialogContainerDirective, selector: "[kendoDialogContainer]" }] }); }
|
|
1015
1036
|
}
|
|
1016
1037
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictCrudComponent, decorators: [{
|
|
1017
1038
|
type: Component,
|
|
@@ -1021,9 +1042,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
1021
1042
|
FormlyKendoModule,
|
|
1022
1043
|
TranslateModule,
|
|
1023
1044
|
CrudFormlyTransaltionModule,
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1045
|
+
KENDO_GRID,
|
|
1046
|
+
KENDO_TOOLBAR,
|
|
1047
|
+
KENDO_LABEL,
|
|
1048
|
+
KENDO_BUTTONS,
|
|
1049
|
+
KENDO_DIALOG
|
|
1050
|
+
], template: "<kendo-toolbar>\r\n <kendo-toolbar-button text=\"Back\" showText=\"both\" [svgIcon]=\"backIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onBack()\">\r\n </kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"success\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\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>\r\n<div kendoDialogContainer></div>", styles: ["::ng-deep formly-field{padding:.3rem;display:block}\n"] }]
|
|
1051
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: ReactiveDictionary }, { type: i4.LocalFileService }, { type: MaterialDialogService }, { type: i4.RouteHistoryService }] });
|
|
1027
1052
|
|
|
1028
1053
|
class RdictTableTitle extends ToolBarToolComponent {
|
|
1029
1054
|
constructor() {
|
|
@@ -1035,7 +1060,7 @@ class RdictTableTitle extends ToolBarToolComponent {
|
|
|
1035
1060
|
<ng-template #toolbarTemplate>
|
|
1036
1061
|
<kendo-label>{{text}}</kendo-label>
|
|
1037
1062
|
</ng-template>
|
|
1038
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i1$
|
|
1063
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i1$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }] }); }
|
|
1039
1064
|
}
|
|
1040
1065
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictTableTitle, decorators: [{
|
|
1041
1066
|
type: Component,
|
|
@@ -1245,7 +1270,7 @@ class GenericRdictTableComponent {
|
|
|
1245
1270
|
this.rdict.getArray$(item.reference).subscribe({
|
|
1246
1271
|
next: (value) => {
|
|
1247
1272
|
if (value) {
|
|
1248
|
-
console.log('Reference data:', value);
|
|
1273
|
+
// console.log('Reference data:', value);
|
|
1249
1274
|
this.referenceData.set(item.reference, this.arrayToMap(value, item.referenceKey));
|
|
1250
1275
|
}
|
|
1251
1276
|
},
|
|
@@ -1304,7 +1329,7 @@ class GenericRdictTableComponent {
|
|
|
1304
1329
|
return item[column.propertyName];
|
|
1305
1330
|
}
|
|
1306
1331
|
}
|
|
1307
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: GenericRdictTableComponent, deps: [{ token: i1
|
|
1332
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: GenericRdictTableComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: i0.Injector }, { token: i4.LocalFileService }, { token: ReactiveDictionary }, { token: MaterialDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1308
1333
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", 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\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\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 *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\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\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>", styles: [".edit-link{color:#00f!important;text-decoration:underline!important;cursor:pointer!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
1309
1334
|
// MatPaginatorModule,
|
|
1310
1335
|
// MatTableModule,
|
|
@@ -1325,7 +1350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
1325
1350
|
KENDO_DIALOG,
|
|
1326
1351
|
RdictTableTitle
|
|
1327
1352
|
], providers: [], template: "<kendo-grid [data]=\"dataSource\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\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 *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\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\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>", styles: [".edit-link{color:#00f!important;text-decoration:underline!important;cursor:pointer!important}\n"] }]
|
|
1328
|
-
}], ctorParameters: () => [{ type: i1
|
|
1353
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: i0.Injector }, { type: i4.LocalFileService }, { type: ReactiveDictionary }, { type: MaterialDialogService }], propDecorators: { showSerach: [{
|
|
1329
1354
|
type: Input
|
|
1330
1355
|
}], searchFields: [{
|
|
1331
1356
|
type: Input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/material-dialog.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/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 { Inject, Injectable } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../core';\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 // const originalEmit = this.socket.emit;\r\n // this.socket.emit = (event, ...args) => {\r\n // // Transform dates before sending\r\n // const transformedData = this.transformDatesForEncoding(args[0]);\r\n // originalEmit.call(this.socket, event, transformedData);\r\n // return this.socket;\r\n // };\r\n\r\n // Intercept incoming data and apply date transformation\r\n // this.socket.onAny((event, data) => {\r\n // const transformedData = this.transformDatesForDecoding(data);\r\n // this.socket.emit(event, transformedData); // Emit the transformed data back\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 getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (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.asyncDelete(data.key, 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 // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (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 transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === \"object\") {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === \"object\" && obj !== null) {\r\n if (\"__date__\" in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { from, mergeMap, Observable, Subject } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\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 changeEvent$: Subject<any> = new Subject<any>();\r\n private deleteEvent$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n this._socketService = socketService;\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\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);\r\n dict.initialize(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 } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n private transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\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.changeEvent$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deleteEvent$.next({ key });\r\n }\r\n }\r\n delete$(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\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 if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n get$(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getArray$(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getArray(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n async getArray(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getArray', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getArrayWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n\r\n private async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\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 } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\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 } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n onChange$(): Observable<any> {\r\n return this.changeEvent$.asObservable();\r\n }\r\n onDelete$(): Observable<any> {\r\n return this.deleteEvent$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return '0';\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = this.getNextOid();\r\n const dict = await this.asyncGet(key);\r\n for (const key in record) {\r\n if (record.hasOwnProperty(key)) {\r\n const currentValue = await dict.asyncGet(key);\r\n if (currentValue !== record[key]) await dict.asyncSet(key, record[key]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DialogCloseResult, DialogRef, DialogService } from '@progress/kendo-angular-dialog';\nimport { NotificationService, NotificationSettings } from '@progress/kendo-angular-notification';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaterialDialogService {\n public state: NotificationSettings = {\n content: \"Your data has been saved.\",\n type: { style: \"success\", icon: true },\n animation: { type: \"slide\", duration: 400 },\n hideAfter: 3000,\n };\n constructor(\n public translate: TranslateService,\n private dialogService: DialogService,\n private notificationService: NotificationService\n ) { }\n confirmDelete(): Observable<boolean> {\n return this.confirm(\n this.translate.instant(\"Are you sure you want to delete this record ?\"),\n this.translate.instant(\"Delete Record\"),\n this.translate.instant(\"General.Yes\"),\n this.translate.instant(\"General.No\")\n );\n }\n\n confirm(content?: string, title?: string, confirmButtonText?: string, cancelButtonText?: string): Observable<boolean> {\n const dialog: DialogRef = this.dialogService.open({\n title: title || \"Confirm\",\n content: content || \"Are you sure?\",\n actions: [\n { text: cancelButtonText || \"No\", result: false },\n { text: confirmButtonText || \"Yes\", themeColor: \"primary\", result: true }\n ],\n width: 450,\n height: 200,\n minWidth: 250,\n });\n\n // Return an Observable<boolean>\n return new Observable((observer) => {\n dialog.result.subscribe((result) => {\n if (result instanceof DialogCloseResult) {\n // Dialog was closed without an action\n observer.next(false);\n } else {\n const actionResult = result as { text: string, result: boolean };\n observer.next(actionResult.result);\n }\n observer.complete(); // Complete the observable\n });\n });\n }\n showSaveMessage(message?: string): void {\n this.state.content = message || \"Your data has been saved.\";\n this.state.type = { style: \"success\", icon: true };\n this.notificationService.show(this.state);\n }\n // showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\n\n // }\n // showErrorMessage(e: any, message?: string): Observable<boolean> {\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';\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 { 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 { UserService } 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 public translate: TranslateService,\r\n private rdict: ReactiveDictionary\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\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 <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 </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\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 { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router } 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 { KENDO_TOOLBAR } from \"@progress/kendo-angular-toolbar\";\r\nimport { SVGIcon, saveIcon } from \"@progress/kendo-svg-icons\";\r\nimport { LocalFileService } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { CrudFormlyTransaltionModule } from './rsl-reactive-dictionary.module';\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 KENDO_TOOLBAR\r\n ]\r\n})\r\nexport class RdictCrudComponent implements OnInit {\r\n title: string;\r\n\r\n\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 fileLayout: string;\r\n modelKey: string | null;\r\n modelRdict: ReactiveDictionary\r\n public saveIcon: SVGIcon = saveIcon;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected rdict: ReactiveDictionary,\r\n protected localFileService: LocalFileService,\r\n protected dialogService: MaterialDialogService\r\n ) {\r\n\r\n }\r\n\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: string[] = this.router.url.split('/').filter(segment =>\r\n segment !== '' && isNaN(Number(segment))\r\n );\r\n if (['add', 'edit'].includes(currentUrlSegments[currentUrlSegments.length - 1])) {\r\n currentUrlSegments.pop();\r\n }\r\n\r\n this.dictPath = currentUrlSegments.join('.');\r\n this.rdictModel = currentUrlSegments.length > 0 ? currentUrlSegments[currentUrlSegments.length - 1] : '';\r\n const id = this.route.snapshot.paramMap.get('id');\r\n this.modelKey = id ?? null;\r\n this.getModelFields();\r\n this.getModel()\r\n }\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\r\n onSubmit(model) {\r\n // this.saveModel(this.baseForm)\r\n }\r\n getModel() {\r\n if (this.modelKey) {\r\n this.rdict.get$(this.dictPath).subscribe({\r\n next: value => {\r\n value.get$(this.modelKey).subscribe({\r\n next: modelValue => {\r\n this.modelRdict = modelValue\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChange$().subscribe(changes => {\r\n if (changes) {\r\n console.log(\"Changes detected:\", changes);\r\n this.baseForm.get(changes.key).patchValue(changes.value)\r\n // this.model[changes.key] = changes.value;\r\n }\r\n });\r\n }\r\n });\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n getModelFields() {\r\n if (this.rdictModel) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: value => {\r\n if (value) {\r\n const layout = value.find(item => item.model === this.rdictModel);\r\n this.setLayout(layout?.formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n })\r\n } else\r\n this.rdict.get$(\"config.models.\" + this.rdictModel + \".formLayout\").subscribe({\r\n next: formLayout => {\r\n if (formLayout) {\r\n this.setLayout(formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n private setLayout(formLayout: any) {\r\n this.title = this.translate.instant(formLayout[\"title\"]);\r\n // console.log(formLayout[\"fields\"]);\r\n let fieldsTmp: FormlyFieldConfig[] = formLayout[\"fields\"];\r\n this.fields = this.transformFields(fieldsTmp);\r\n // this.transformJsonToFormlyFields()\r\n }\r\n\r\n // transformJsonToFormlyFields(json: any[]): FormlyFieldConfig[] {\r\n\r\n // // return json.map(field => {\r\n // // if (field.type === 'select' && field.props.options) {\r\n // // field.props.options = this.getSelectData(field.props.options);\r\n // // }\r\n // // return {\r\n // // key: field.key,\r\n // // type: field.type,\r\n // // props: field.props,\r\n // // fieldGroup: field?.fieldGroup\r\n // // };\r\n // // });\r\n // }\r\n transformFields(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\r\n return fields.map(field => this.transformField(field));\r\n }\r\n private transformField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n // Handle the current field\r\n if (field.type === 'select' && field.props?.options && typeof field.props.options === 'string') {\r\n field.props.options = this.getSelectData(field.props.options);\r\n }\r\n\r\n // Recursively handle fieldGroup\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.transformFields(field.fieldGroup);\r\n }\r\n\r\n // Recursively handle fieldArray\r\n if (field.fieldArray) {\r\n if (typeof field.fieldArray === 'function') {\r\n const originalFieldArrayFn = field.fieldArray;\r\n field.fieldArray = (fieldConfig: FormlyFieldConfig) => {\r\n const transformedField = this.transformField(originalFieldArrayFn(fieldConfig));\r\n return transformedField;\r\n };\r\n } else {\r\n field.fieldArray = this.transformField(field.fieldArray);\r\n }\r\n }\r\n\r\n return field;\r\n }\r\n public async onSave() {\r\n await this.saveModel(this.baseForm)\r\n }\r\n async saveModel(fg: FormGroup) {\r\n if (fg.valid) {\r\n var dict = await this.rdict.asyncGet(this.dictPath);\r\n await dict.update(fg.value as Record<string, any>, this.modelKey)\r\n this.dialogService.showSaveMessage();\r\n // console.log(fg.value);\r\n } else {\r\n this.validateAllFormFields(fg);\r\n }\r\n }\r\n validateAllFormFields(fg: FormGroup) {\r\n Object.keys(fg.controls).forEach(field => {\r\n // console.log(field);\r\n const control = fg.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsTouched({ onlySelf: true });\r\n } else if (control instanceof FormGroup) {\r\n this.validateAllFormFields(control);\r\n }\r\n });\r\n }\r\n public getSelectData(key: string): Observable<any> {\r\n return this.rdict.getArray$(key)\r\n }\r\n}\r\n","<kendo-toolbar>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\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>\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\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 imports: [\r\n \r\n KENDO_LABEL,\r\n \r\n ],\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 { AddEvent, KENDO_GRID, RemoveEvent } 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 { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\r\nimport { pencilIcon, plusIcon, SVGIcon, trashIcon } from '@progress/kendo-svg-icons';\r\nimport { LocalFileService } from '@rosoftlab/core';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.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 KENDO_BUTTONS,\r\n KENDO_DIALOG,\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 fileLayout: string;\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 @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 referenceColumns = [];\r\n referenceData = new Map<string, Map<string, any>>();\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 selectedItem: any;\r\n public svgEdit: SVGIcon = pencilIcon;\r\n public svgDelete: SVGIcon = trashIcon;\r\n public svgAdd: SVGIcon = plusIcon;\r\n tableRdict: ReactiveDictionary;\r\n editColumn: string | null;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected injector: Injector,\r\n protected localFileService: LocalFileService,\r\n protected rdict: ReactiveDictionary,\r\n protected dialogService: MaterialDialogService\r\n ) {}\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'dictPath', null);\r\n\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 this.setValueFromSnapshot(this, this.route.snapshot, 'editColumn', null);\r\n\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\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.getListLayout();\r\n this.loadData();\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 this.rdict.get$(this.dictPath).subscribe({\r\n next: (rdictData) => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChange$().subscribe({\r\n next: (changes) => {\r\n console.log('Changes detected grid:', changes);\r\n this.onChangeEvent(changes);\r\n }\r\n });\r\n this.tableRdict.onDelete$().subscribe({\r\n next: (changes) => {\r\n console.log('Delete detected grid:', changes);\r\n this.ondDeleteEvent(changes);\r\n }\r\n });\r\n this.rdict.getArray$(this.dictPath, this.tableRdict).subscribe({\r\n next: (value) => {\r\n this.dataSource = value;\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n onChangeEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n const value = changes?.value;\r\n if (key && value) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource[index] = value;\r\n } else {\r\n //get the object from rdict\r\n this.tableRdict.get$(key).subscribe({\r\n next: (value) => {\r\n var dd = value.getPlainObject();\r\n this.dataSource.push(dd);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n ondDeleteEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n if (key) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource.splice(index, 1);\r\n }\r\n // this.tableRdict.delete(key)\r\n }\r\n }\r\n }\r\n getListLayout() {\r\n if (this.model) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n const layout = value.find((item) => item.model === this.model);\r\n this.setLayout(layout?.tableLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n //Use rdict layout\r\n else\r\n this.rdict.get$('config.models.' + this.model + '.tableLayout').subscribe({\r\n next: (value) => {\r\n this.setLayout(value);\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n\r\n private setLayout(layout: any) {\r\n if (layout) {\r\n this.tableLayout = layout;\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 item.isEditLink = false;\r\n if (this.editColumn && this.editColumn === item.propertyName) {\r\n item.isEditLink = true;\r\n }\r\n if (!item.type) {\r\n item.type = 'property';\r\n }\r\n }\r\n return item;\r\n });\r\n //Get reference columns\r\n const referenceColumns = this.allColumns.filter((item) => item.reference !== undefined && item.reference !== null);\r\n if (referenceColumns.length > 0) {\r\n referenceColumns.forEach((item) => {\r\n this.rdict.getArray$(item.reference).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n console.log('Reference data:', value);\r\n this.referenceData.set(item.reference, this.arrayToMap(value, item.referenceKey));\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n });\r\n }\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n this.displayedColumns = [];\r\n this.displayedColumns.push.apply(\r\n this.displayedColumns,\r\n this.allColumns.map((x) => x.propertyName)\r\n );\r\n }\r\n }\r\n arrayToMap<T>(array: T[], keyProperty: keyof T): Map<string, T> {\r\n const map = new Map<string, T>();\r\n for (const item of array) {\r\n const key = String(item[keyProperty]); // ensure it's a string\r\n map.set(key, item);\r\n }\r\n return map;\r\n }\r\n public addHandler(): void {\r\n this.router.navigate([`${this.basePath}/add`]);\r\n }\r\n public editHandler(args: AddEvent): void {\r\n this.edit(args.dataItem);\r\n // this.editDataItem = args.dataItem;\r\n // this.isNew = false;\r\n }\r\n public edit(dataItem: any): void {\r\n this.router.navigate([`${this.basePath}/edit/${dataItem.__idx}`]);\r\n }\r\n public removeHandler(args: RemoveEvent): void {\r\n this.dialogService.confirmDelete().subscribe({\r\n next: (result) => {\r\n if (result) {\r\n this.tableRdict.delete$(args.dataItem.__idx).subscribe({\r\n next: (result) => {\r\n this.dataSource.splice(args.rowIndex, 1);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n // this.editService.remove(args.dataItem);\r\n }\r\n public getCellValue(item: any, column: any): any {\r\n if (typeof item !== 'object' || item === null) {\r\n return null; // or `undefined` or some fallback\r\n }\r\n if (column.type == 'reference') {\r\n const value =\r\n this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];\r\n return value;\r\n } else {\r\n return item[column.propertyName];\r\n }\r\n }\r\n}\r\n","<kendo-grid [data]=\"dataSource\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\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 *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\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\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>","// 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":["uuidv4","i1.SocketService","i1","i2","i1.UserService","i3","i4.ReactiveDictionary","i3.ReactiveDictionary","i4","i5.MaterialDialogService","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/material-dialog.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/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 { Inject, Injectable } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../core';\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 // const originalEmit = this.socket.emit;\r\n // this.socket.emit = (event, ...args) => {\r\n // // Transform dates before sending\r\n // const transformedData = this.transformDatesForEncoding(args[0]);\r\n // originalEmit.call(this.socket, event, transformedData);\r\n // return this.socket;\r\n // };\r\n\r\n // Intercept incoming data and apply date transformation\r\n // this.socket.onAny((event, data) => {\r\n // const transformedData = this.transformDatesForDecoding(data);\r\n // this.socket.emit(event, transformedData); // Emit the transformed data back\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 getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (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.asyncDelete(data.key, 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 // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (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 transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === \"object\") {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === \"object\" && obj !== null) {\r\n if (\"__date__\" in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { from, mergeMap, Observable, Subject } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\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 changeEvent$: Subject<any> = new Subject<any>();\r\n private deleteEvent$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n this._socketService = socketService;\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\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);\r\n dict.initialize(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 } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n private transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\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.changeEvent$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deleteEvent$.next({ key });\r\n }\r\n }\r\n delete$(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\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 if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n get$(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getArray$(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getArray(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n async getArray(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getArray', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getArrayWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n\r\n private async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\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 } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\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 } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n onChange$(): Observable<any> {\r\n return this.changeEvent$.asObservable();\r\n }\r\n onDelete$(): Observable<any> {\r\n return this.deleteEvent$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return '0';\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = this.getNextOid();\r\n const dict = await this.asyncGet(key);\r\n for (const key in record) {\r\n if (record.hasOwnProperty(key)) {\r\n const currentValue = await dict.asyncGet(key);\r\n if (currentValue !== record[key]) await dict.asyncSet(key, record[key]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DialogCloseResult, DialogRef, DialogService } from '@progress/kendo-angular-dialog';\nimport { NotificationService, NotificationSettings } from '@progress/kendo-angular-notification';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaterialDialogService {\n public state: NotificationSettings = {\n content: \"Your data has been saved.\",\n type: { style: \"success\", icon: true },\n animation: { type: \"slide\", duration: 400 },\n hideAfter: 3000,\n };\n constructor(\n public translate: TranslateService,\n private dialogService: DialogService,\n private notificationService: NotificationService\n ) { }\n confirmDelete(): Observable<boolean> {\n return this.confirm(\n this.translate.instant(\"Are you sure you want to delete this record ?\"),\n this.translate.instant(\"Delete Record\"),\n this.translate.instant(\"General.Yes\"),\n this.translate.instant(\"General.No\")\n );\n }\n\n confirm(content?: string, title?: string, confirmButtonText?: string, cancelButtonText?: string): Observable<boolean> {\n const dialog: DialogRef = this.dialogService.open({\n title: title || \"Confirm\",\n content: content || \"Are you sure?\",\n actions: [\n { text: cancelButtonText || \"No\", result: false },\n { text: confirmButtonText || \"Yes\", themeColor: \"primary\", result: true }\n ],\n width: 450,\n height: 200,\n minWidth: 250,\n });\n\n // Return an Observable<boolean>\n return new Observable((observer) => {\n dialog.result.subscribe((result) => {\n if (result instanceof DialogCloseResult) {\n // Dialog was closed without an action\n observer.next(false);\n } else {\n const actionResult = result as { text: string, result: boolean };\n observer.next(actionResult.result);\n }\n observer.complete(); // Complete the observable\n });\n });\n }\n showSaveMessage(message?: string): void {\n this.state.content = message || \"Your data has been saved.\";\n this.state.type = { style: \"success\", icon: true };\n this.notificationService.show(this.state);\n }\n // showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\n\n // }\n // showErrorMessage(e: any, message?: string): Observable<boolean> {\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';\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 { 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 { UserService } 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 public translate: TranslateService,\r\n private rdict: ReactiveDictionary\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\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 <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 </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\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 { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router } 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 { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\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\nimport { SVGIcon, arrowLeftIcon, saveIcon } from '@progress/kendo-svg-icons';\r\nimport { LocalFileService, RouteHistoryService } from '@rosoftlab/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { CrudFormlyTransaltionModule } from './rsl-reactive-dictionary.module';\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 KENDO_GRID,\r\n KENDO_TOOLBAR,\r\n KENDO_LABEL,\r\n KENDO_BUTTONS,\r\n KENDO_DIALOG\r\n ]\r\n})\r\nexport class RdictCrudComponent implements OnInit {\r\n title: string;\r\n\r\n basePath: string;\r\n dictPath: string;\r\n rdictModel: string;\r\n\r\n baseForm = new FormGroup({});\r\n model: any = {};\r\n options: FormlyFormOptions = {};\r\n fields: FormlyFieldConfig[] = [];\r\n fileLayout: string;\r\n modelKey: string | null;\r\n modelRdict: ReactiveDictionary;\r\n public saveIcon: SVGIcon = saveIcon;\r\n public backIcon: SVGIcon = arrowLeftIcon;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected rdict: ReactiveDictionary,\r\n protected localFileService: LocalFileService,\r\n protected dialogService: MaterialDialogService,\r\n private routeHistory: RouteHistoryService\r\n ) {}\r\n\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: string[] = this.router.url.split('/').filter((segment) => segment !== '' && isNaN(Number(segment)));\r\n if (['add', 'edit'].includes(currentUrlSegments[currentUrlSegments.length - 1])) {\r\n currentUrlSegments.pop();\r\n }\r\n\r\n this.dictPath = currentUrlSegments.join('.');\r\n this.rdictModel = currentUrlSegments.length > 0 ? currentUrlSegments[currentUrlSegments.length - 1] : '';\r\n const id = this.route.snapshot.paramMap.get('id');\r\n this.modelKey = id ?? null;\r\n this.getModelFields();\r\n this.getModel();\r\n }\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\r\n onSubmit(model) {\r\n // this.saveModel(this.baseForm)\r\n }\r\n getModel() {\r\n if (this.modelKey) {\r\n this.rdict.get$(this.dictPath).subscribe({\r\n next: (value) => {\r\n value.get$(this.modelKey).subscribe({\r\n next: (modelValue) => {\r\n this.modelRdict = modelValue;\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChange$().subscribe((changes) => {\r\n if (changes) {\r\n console.log('Changes detected:', changes);\r\n this.baseForm.get(changes.key).patchValue(changes.value);\r\n // this.model[changes.key] = changes.value;\r\n }\r\n });\r\n }\r\n });\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n getModelFields() {\r\n if (this.rdictModel) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n const layout = value.find((item) => item.model === this.rdictModel);\r\n this.setLayout(layout?.formLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n } else\r\n this.rdict.get$('config.models.' + this.rdictModel + '.formLayout').subscribe({\r\n next: (formLayout) => {\r\n if (formLayout) {\r\n this.setLayout(formLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n private setLayout(formLayout: any) {\r\n this.title = this.translate.instant(formLayout['title']);\r\n // console.log(formLayout[\"fields\"]);\r\n let fieldsTmp: FormlyFieldConfig[] = formLayout['fields'];\r\n this.fields = this.transformFields(fieldsTmp);\r\n // this.transformJsonToFormlyFields()\r\n }\r\n\r\n // transformJsonToFormlyFields(json: any[]): FormlyFieldConfig[] {\r\n\r\n // // return json.map(field => {\r\n // // if (field.type === 'select' && field.props.options) {\r\n // // field.props.options = this.getSelectData(field.props.options);\r\n // // }\r\n // // return {\r\n // // key: field.key,\r\n // // type: field.type,\r\n // // props: field.props,\r\n // // fieldGroup: field?.fieldGroup\r\n // // };\r\n // // });\r\n // }\r\n transformFields(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\r\n return fields.map((field) => this.transformField(field));\r\n }\r\n private transformField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n // Handle the current field\r\n if (field.type === 'select' && field.props?.options && typeof field.props.options === 'string') {\r\n field.props.options = this.getSelectData(field.props.options);\r\n }\r\n\r\n // Recursively handle fieldGroup\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.transformFields(field.fieldGroup);\r\n }\r\n\r\n // Recursively handle fieldArray\r\n if (field.fieldArray) {\r\n if (typeof field.fieldArray === 'function') {\r\n const originalFieldArrayFn = field.fieldArray;\r\n field.fieldArray = (fieldConfig: FormlyFieldConfig) => {\r\n const transformedField = this.transformField(originalFieldArrayFn(fieldConfig));\r\n return transformedField;\r\n };\r\n } else {\r\n field.fieldArray = this.transformField(field.fieldArray);\r\n }\r\n }\r\n\r\n return field;\r\n }\r\n public async onSave() {\r\n await this.saveModel(this.baseForm);\r\n }\r\n async saveModel(fg: FormGroup) {\r\n if (fg.valid) {\r\n var dict = await this.rdict.asyncGet(this.dictPath);\r\n await dict.update(fg.value as Record<string, any>, this.modelKey);\r\n this.dialogService.showSaveMessage();\r\n // console.log(fg.value);\r\n } else {\r\n this.validateAllFormFields(fg);\r\n }\r\n }\r\n validateAllFormFields(fg: FormGroup) {\r\n Object.keys(fg.controls).forEach((field) => {\r\n // console.log(field);\r\n const control = fg.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsTouched({ onlySelf: true });\r\n } else if (control instanceof FormGroup) {\r\n this.validateAllFormFields(control);\r\n }\r\n });\r\n }\r\n public getSelectData(key: string): Observable<any> {\r\n return this.rdict.getArray$(key);\r\n }\r\n onBack() {\r\n if (this.baseForm.dirty) {\r\n this.dialogService.confirm(\"Do you want to cancel the changes ?\").subscribe({\r\n next: (result) => {\r\n if (result) {\r\n this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);\r\n }\r\n }\r\n });\r\n // .subscribe((result) => {\r\n // if (result) {\r\n // this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);\r\n // }\r\n // });\r\n } else {\r\n this.router.navigate([this.routeHistory.getPreviousUrl() || '/']);\r\n }\r\n }\r\n}\r\n","<kendo-toolbar>\r\n <kendo-toolbar-button text=\"Back\" showText=\"both\" [svgIcon]=\"backIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onBack()\">\r\n </kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"success\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\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>\r\n<div kendoDialogContainer></div>","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\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 imports: [\r\n \r\n KENDO_LABEL,\r\n \r\n ],\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 { AddEvent, KENDO_GRID, RemoveEvent } 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 { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\r\nimport { pencilIcon, plusIcon, SVGIcon, trashIcon } from '@progress/kendo-svg-icons';\r\nimport { LocalFileService } from '@rosoftlab/core';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.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 KENDO_BUTTONS,\r\n KENDO_DIALOG,\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 fileLayout: string;\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 @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 referenceColumns = [];\r\n referenceData = new Map<string, Map<string, any>>();\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 selectedItem: any;\r\n public svgEdit: SVGIcon = pencilIcon;\r\n public svgDelete: SVGIcon = trashIcon;\r\n public svgAdd: SVGIcon = plusIcon;\r\n tableRdict: ReactiveDictionary;\r\n editColumn: string | null;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected injector: Injector,\r\n protected localFileService: LocalFileService,\r\n protected rdict: ReactiveDictionary,\r\n protected dialogService: MaterialDialogService\r\n ) {}\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'dictPath', null);\r\n\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 this.setValueFromSnapshot(this, this.route.snapshot, 'editColumn', null);\r\n\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\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.getListLayout();\r\n this.loadData();\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 this.rdict.get$(this.dictPath).subscribe({\r\n next: (rdictData) => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChange$().subscribe({\r\n next: (changes) => {\r\n console.log('Changes detected grid:', changes);\r\n this.onChangeEvent(changes);\r\n }\r\n });\r\n this.tableRdict.onDelete$().subscribe({\r\n next: (changes) => {\r\n console.log('Delete detected grid:', changes);\r\n this.ondDeleteEvent(changes);\r\n }\r\n });\r\n this.rdict.getArray$(this.dictPath, this.tableRdict).subscribe({\r\n next: (value) => {\r\n this.dataSource = value;\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n onChangeEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n const value = changes?.value;\r\n if (key && value) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource[index] = value;\r\n } else {\r\n //get the object from rdict\r\n this.tableRdict.get$(key).subscribe({\r\n next: (value) => {\r\n var dd = value.getPlainObject();\r\n this.dataSource.push(dd);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n ondDeleteEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n if (key) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource.splice(index, 1);\r\n }\r\n // this.tableRdict.delete(key)\r\n }\r\n }\r\n }\r\n getListLayout() {\r\n if (this.model) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n const layout = value.find((item) => item.model === this.model);\r\n this.setLayout(layout?.tableLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n //Use rdict layout\r\n else\r\n this.rdict.get$('config.models.' + this.model + '.tableLayout').subscribe({\r\n next: (value) => {\r\n this.setLayout(value);\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n\r\n private setLayout(layout: any) {\r\n if (layout) {\r\n this.tableLayout = layout;\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 item.isEditLink = false;\r\n if (this.editColumn && this.editColumn === item.propertyName) {\r\n item.isEditLink = true;\r\n }\r\n if (!item.type) {\r\n item.type = 'property';\r\n }\r\n }\r\n return item;\r\n });\r\n //Get reference columns\r\n const referenceColumns = this.allColumns.filter((item) => item.reference !== undefined && item.reference !== null);\r\n if (referenceColumns.length > 0) {\r\n referenceColumns.forEach((item) => {\r\n this.rdict.getArray$(item.reference).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n // console.log('Reference data:', value);\r\n this.referenceData.set(item.reference, this.arrayToMap(value, item.referenceKey));\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n });\r\n }\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n this.displayedColumns = [];\r\n this.displayedColumns.push.apply(\r\n this.displayedColumns,\r\n this.allColumns.map((x) => x.propertyName)\r\n );\r\n }\r\n }\r\n arrayToMap<T>(array: T[], keyProperty: keyof T): Map<string, T> {\r\n const map = new Map<string, T>();\r\n for (const item of array) {\r\n const key = String(item[keyProperty]); // ensure it's a string\r\n map.set(key, item);\r\n }\r\n return map;\r\n }\r\n public addHandler(): void {\r\n this.router.navigate([`${this.basePath}/add`]);\r\n }\r\n public editHandler(args: AddEvent): void {\r\n this.edit(args.dataItem);\r\n // this.editDataItem = args.dataItem;\r\n // this.isNew = false;\r\n }\r\n public edit(dataItem: any): void {\r\n this.router.navigate([`${this.basePath}/edit/${dataItem.__idx}`]);\r\n }\r\n public removeHandler(args: RemoveEvent): void {\r\n this.dialogService.confirmDelete().subscribe({\r\n next: (result) => {\r\n if (result) {\r\n this.tableRdict.delete$(args.dataItem.__idx).subscribe({\r\n next: (result) => {\r\n this.dataSource.splice(args.rowIndex, 1);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n // this.editService.remove(args.dataItem);\r\n }\r\n public getCellValue(item: any, column: any): any {\r\n if (typeof item !== 'object' || item === null) {\r\n return null; // or `undefined` or some fallback\r\n }\r\n if (column.type == 'reference') {\r\n const value =\r\n this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];\r\n return value;\r\n } else {\r\n return item[column.propertyName];\r\n }\r\n }\r\n}\r\n","<kendo-grid [data]=\"dataSource\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\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 *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\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\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>","// 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":["uuidv4","i1.SocketService","i1","i2","i1.UserService","i3","i4.ReactiveDictionary","i3.ReactiveDictionary","i5.MaterialDialogService","i6","i9"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { ActivatedRoute, ActivatedRouteSnapshot, Router } from '@angular/router';
|
|
4
4
|
import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
|
|
5
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
6
|
-
import { SVGIcon } from
|
|
7
|
-
import { LocalFileService } from
|
|
6
|
+
import { SVGIcon } from '@progress/kendo-svg-icons';
|
|
7
|
+
import { LocalFileService, RouteHistoryService } from '@rosoftlab/core';
|
|
8
8
|
import { Observable } from 'rxjs';
|
|
9
9
|
import { ReactiveDictionary } from '../../reactive-dictionary';
|
|
10
10
|
import { MaterialDialogService } from '../../services/material-dialog.service';
|
|
@@ -16,6 +16,7 @@ export declare class RdictCrudComponent implements OnInit {
|
|
|
16
16
|
protected rdict: ReactiveDictionary;
|
|
17
17
|
protected localFileService: LocalFileService;
|
|
18
18
|
protected dialogService: MaterialDialogService;
|
|
19
|
+
private routeHistory;
|
|
19
20
|
title: string;
|
|
20
21
|
basePath: string;
|
|
21
22
|
dictPath: string;
|
|
@@ -28,7 +29,8 @@ export declare class RdictCrudComponent implements OnInit {
|
|
|
28
29
|
modelKey: string | null;
|
|
29
30
|
modelRdict: ReactiveDictionary;
|
|
30
31
|
saveIcon: SVGIcon;
|
|
31
|
-
|
|
32
|
+
backIcon: SVGIcon;
|
|
33
|
+
constructor(router: Router, route: ActivatedRoute, translate: TranslateService, rdict: ReactiveDictionary, localFileService: LocalFileService, dialogService: MaterialDialogService, routeHistory: RouteHistoryService);
|
|
32
34
|
ngOnInit(): Promise<void>;
|
|
33
35
|
setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void;
|
|
34
36
|
onSubmit(model: any): void;
|
|
@@ -41,6 +43,7 @@ export declare class RdictCrudComponent implements OnInit {
|
|
|
41
43
|
saveModel(fg: FormGroup): Promise<void>;
|
|
42
44
|
validateAllFormFields(fg: FormGroup): void;
|
|
43
45
|
getSelectData(key: string): Observable<any>;
|
|
46
|
+
onBack(): void;
|
|
44
47
|
static ɵfac: i0.ɵɵFactoryDeclaration<RdictCrudComponent, never>;
|
|
45
48
|
static ɵcmp: i0.ɵɵComponentDeclaration<RdictCrudComponent, "app-rdict-crud", never, {}, {}, never, never, true, never>;
|
|
46
49
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosoftlab/rdict",
|
|
3
|
-
"version": "1.0.2-alpha-
|
|
3
|
+
"version": "1.0.2-alpha-18",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.2.8",
|
|
6
6
|
"@angular/core": "^19.2.8",
|
|
@@ -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.2-alpha-
|
|
40
|
+
"@rosoftlab/core": "1.0.2-alpha-18"
|
|
41
41
|
},
|
|
42
42
|
"sideEffects": false,
|
|
43
43
|
"author": "rosoftlab",
|