@rosoftlab/rdict 1.0.1-alpha-12 → 1.0.2-alpha-14
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i6$2 from '@angular/common';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import {
|
|
4
|
+
import { Inject, Injectable, Component, NgModule, forwardRef, Input, ViewChild, EventEmitter, ElementRef, Output, ViewEncapsulation, InjectionToken } from '@angular/core';
|
|
5
5
|
import * as i1$1 from '@angular/router';
|
|
6
6
|
import { RouterModule, UrlSegment, NavigationStart } from '@angular/router';
|
|
7
7
|
import * as i2 from '@ngx-translate/core';
|
|
@@ -170,10 +170,10 @@ class SocketService {
|
|
|
170
170
|
}
|
|
171
171
|
return obj;
|
|
172
172
|
}
|
|
173
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
174
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.
|
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SocketService, deps: [{ token: SOCKET_URL }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
174
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SocketService, providedIn: 'root' }); }
|
|
175
175
|
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SocketService, decorators: [{
|
|
177
177
|
type: Injectable,
|
|
178
178
|
args: [{
|
|
179
179
|
providedIn: 'root'
|
|
@@ -406,7 +406,7 @@ class ReactiveDictionary extends Map {
|
|
|
406
406
|
data = await this.asyncGet(key);
|
|
407
407
|
if (!data)
|
|
408
408
|
return new Map();
|
|
409
|
-
console.log('getTable', data);
|
|
409
|
+
// console.log('getTable', data);
|
|
410
410
|
const entries = await Promise.all(Array.from(data.entries()).map(async ([k, v]) => {
|
|
411
411
|
const entry = (await data.asyncGet(k));
|
|
412
412
|
if (entry instanceof ReactiveDictionary) {
|
|
@@ -424,7 +424,7 @@ class ReactiveDictionary extends Map {
|
|
|
424
424
|
data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary
|
|
425
425
|
if (!data)
|
|
426
426
|
return []; // Return an empty array if data is undefined
|
|
427
|
-
console.log('getTable', data);
|
|
427
|
+
// console.log('getTable', data);
|
|
428
428
|
// Filter and get only entries that are instances of ReactiveDictionary
|
|
429
429
|
const result = (await Promise.all(Array.from(data.entries()).map(async (key, index) => {
|
|
430
430
|
const entry = (await data.asyncGet(key[0]));
|
|
@@ -534,11 +534,11 @@ class ReactiveDictionary extends Map {
|
|
|
534
534
|
modelFormList(property, value) {
|
|
535
535
|
return this.get('__modelFormList');
|
|
536
536
|
}
|
|
537
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
538
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.
|
|
537
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ReactiveDictionary, deps: [{ token: SocketService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
538
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ReactiveDictionary, providedIn: 'root' // This makes the service a singleton and available throughout the app
|
|
539
539
|
}); }
|
|
540
540
|
}
|
|
541
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
541
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ReactiveDictionary, decorators: [{
|
|
542
542
|
type: Injectable,
|
|
543
543
|
args: [{
|
|
544
544
|
providedIn: 'root' // This makes the service a singleton and available throughout the app
|
|
@@ -705,10 +705,10 @@ class UserService extends BaseService {
|
|
|
705
705
|
const response = this.datastore.findAll(Menu);
|
|
706
706
|
return response;
|
|
707
707
|
}
|
|
708
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
709
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.
|
|
708
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, deps: [{ token: i1.DatastoreCore }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
709
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, providedIn: 'root' }); }
|
|
710
710
|
}
|
|
711
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
711
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: UserService, decorators: [{
|
|
712
712
|
type: Injectable,
|
|
713
713
|
args: [{
|
|
714
714
|
providedIn: 'root'
|
|
@@ -788,10 +788,10 @@ class FullComponent {
|
|
|
788
788
|
});
|
|
789
789
|
return drawerItems;
|
|
790
790
|
}
|
|
791
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
792
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.
|
|
791
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, deps: [{ token: UserService }, { token: i1$1.Router }, { token: i2.TranslateService }, { token: ReactiveDictionary }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
792
|
+
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$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: 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" }] }); }
|
|
793
793
|
}
|
|
794
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
794
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, decorators: [{
|
|
795
795
|
type: Component,
|
|
796
796
|
args: [{ selector: 'rdict-full', imports: [
|
|
797
797
|
CommonModule,
|
|
@@ -802,7 +802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
|
|
|
802
802
|
ToolBarModule,
|
|
803
803
|
LayoutModule,
|
|
804
804
|
KENDO_SVGICON
|
|
805
|
-
], template: "<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n
|
|
805
|
+
], 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"] }]
|
|
806
806
|
}], ctorParameters: () => [{ type: UserService }, { type: i1$1.Router }, { type: i2.TranslateService }, { type: ReactiveDictionary }] });
|
|
807
807
|
|
|
808
808
|
class MaterialDialogService {
|
|
@@ -852,10 +852,10 @@ class MaterialDialogService {
|
|
|
852
852
|
this.state.type = { style: "success", icon: true };
|
|
853
853
|
this.notificationService.show(this.state);
|
|
854
854
|
}
|
|
855
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
856
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.
|
|
855
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, deps: [{ token: i2.TranslateService }, { token: i2$1.DialogService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
856
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, providedIn: 'root' }); }
|
|
857
857
|
}
|
|
858
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, decorators: [{
|
|
859
859
|
type: Injectable,
|
|
860
860
|
args: [{
|
|
861
861
|
providedIn: 'root'
|
|
@@ -911,13 +911,13 @@ function registerTranslateExtension(translate) {
|
|
|
911
911
|
}
|
|
912
912
|
|
|
913
913
|
class CrudFormlyTransaltionModule {
|
|
914
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
915
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.
|
|
916
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.
|
|
914
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: CrudFormlyTransaltionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
915
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.8", ngImport: i0, type: CrudFormlyTransaltionModule, imports: [CommonModule] }); }
|
|
916
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: CrudFormlyTransaltionModule, providers: [
|
|
917
917
|
{ provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
|
|
918
918
|
], imports: [CommonModule] }); }
|
|
919
919
|
}
|
|
920
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
920
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: CrudFormlyTransaltionModule, decorators: [{
|
|
921
921
|
type: NgModule,
|
|
922
922
|
args: [{
|
|
923
923
|
imports: [
|
|
@@ -1091,10 +1091,10 @@ class RdictCrudComponent {
|
|
|
1091
1091
|
getSelectData(key) {
|
|
1092
1092
|
return this.rdict.getTableAsObservable(key);
|
|
1093
1093
|
}
|
|
1094
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
1095
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.
|
|
1094
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictCrudComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2.TranslateService }, { token: ReactiveDictionary }, { token: i1.LocalFileService }, { token: MaterialDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1095
|
+
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-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", 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"] }] }); }
|
|
1096
1096
|
}
|
|
1097
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
1097
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictCrudComponent, decorators: [{
|
|
1098
1098
|
type: Component,
|
|
1099
1099
|
args: [{ selector: 'app-rdict-crud', imports: [
|
|
1100
1100
|
FormlyModule,
|
|
@@ -1111,14 +1111,14 @@ class RdictTableTitle extends ToolBarToolComponent {
|
|
|
1111
1111
|
super();
|
|
1112
1112
|
this.tabindex = -1;
|
|
1113
1113
|
}
|
|
1114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
1115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.
|
|
1114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictTableTitle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1115
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: RdictTableTitle, isStandalone: true, selector: "table-title", inputs: { text: "text" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }], viewQueries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbarTemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1116
1116
|
<ng-template #toolbarTemplate>
|
|
1117
1117
|
<kendo-label>{{text}}</kendo-label>
|
|
1118
1118
|
</ng-template>
|
|
1119
1119
|
`, isInline: true, dependencies: [{ kind: "component", type: i1$2.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }] }); }
|
|
1120
1120
|
}
|
|
1121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
1121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: RdictTableTitle, decorators: [{
|
|
1122
1122
|
type: Component,
|
|
1123
1123
|
args: [{
|
|
1124
1124
|
providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }],
|
|
@@ -1164,6 +1164,8 @@ class GenericRdictTableComponent {
|
|
|
1164
1164
|
this.columns = [];
|
|
1165
1165
|
this.tableLayout = {};
|
|
1166
1166
|
this.allColumns = [];
|
|
1167
|
+
this.referenceColumns = [];
|
|
1168
|
+
this.referenceData = new Map();
|
|
1167
1169
|
// ColumnMode = ColumnMode;
|
|
1168
1170
|
// SelectionType = SelectionType;
|
|
1169
1171
|
this.headerHeight = 50;
|
|
@@ -1173,7 +1175,7 @@ class GenericRdictTableComponent {
|
|
|
1173
1175
|
this.svgAdd = plusIcon;
|
|
1174
1176
|
}
|
|
1175
1177
|
async ngOnInit() {
|
|
1176
|
-
this.setValueFromSnapshot(this, this.route.snapshot, 'model',
|
|
1178
|
+
this.setValueFromSnapshot(this, this.route.snapshot, 'model', '');
|
|
1177
1179
|
this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);
|
|
1178
1180
|
this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);
|
|
1179
1181
|
this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);
|
|
@@ -1190,12 +1192,12 @@ class GenericRdictTableComponent {
|
|
|
1190
1192
|
this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);
|
|
1191
1193
|
this.setValueFromSnapshot(this, this.route.snapshot, 'editColumn', null);
|
|
1192
1194
|
this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');
|
|
1193
|
-
const currentUrlSegments = this.router.url.split('/').map(segment => new UrlSegment(segment, {}));
|
|
1194
|
-
this.basePath = currentUrlSegments.map(segment => segment.path).join('/');
|
|
1195
|
-
const filteredSegments = currentUrlSegments.filter(segment => segment.path !== '');
|
|
1196
|
-
this.dictPath = filteredSegments.map(segment => segment.path).join('.');
|
|
1195
|
+
const currentUrlSegments = this.router.url.split('/').map((segment) => new UrlSegment(segment, {}));
|
|
1196
|
+
this.basePath = currentUrlSegments.map((segment) => segment.path).join('/');
|
|
1197
|
+
const filteredSegments = currentUrlSegments.filter((segment) => segment.path !== '');
|
|
1198
|
+
this.dictPath = filteredSegments.map((segment) => segment.path).join('.');
|
|
1197
1199
|
this.model = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 1].path : ''; // Default to empty string if no valid segments
|
|
1198
|
-
this.router.events.subscribe(event => {
|
|
1200
|
+
this.router.events.subscribe((event) => {
|
|
1199
1201
|
if (event instanceof NavigationStart) {
|
|
1200
1202
|
// Navigation to another page is about to occur
|
|
1201
1203
|
this.data = [];
|
|
@@ -1217,28 +1219,28 @@ class GenericRdictTableComponent {
|
|
|
1217
1219
|
}
|
|
1218
1220
|
async loadData() {
|
|
1219
1221
|
this.rdict.getAsObservable(this.dictPath).subscribe({
|
|
1220
|
-
next: rdictData => {
|
|
1222
|
+
next: (rdictData) => {
|
|
1221
1223
|
this.tableRdict = rdictData;
|
|
1222
1224
|
this.tableRdict.onChanges().subscribe({
|
|
1223
1225
|
next: (changes) => {
|
|
1224
|
-
console.log(
|
|
1226
|
+
console.log('Changes detected grid:', changes);
|
|
1225
1227
|
this.onChangeEvent(changes);
|
|
1226
1228
|
}
|
|
1227
1229
|
});
|
|
1228
1230
|
this.tableRdict.onDelete().subscribe({
|
|
1229
1231
|
next: (changes) => {
|
|
1230
|
-
console.log(
|
|
1232
|
+
console.log('Delete detected grid:', changes);
|
|
1231
1233
|
this.ondDeleteEvent(changes);
|
|
1232
1234
|
}
|
|
1233
1235
|
});
|
|
1234
1236
|
this.rdict.getTableAsObservable(this.dictPath, this.tableRdict).subscribe({
|
|
1235
|
-
next: value => {
|
|
1237
|
+
next: (value) => {
|
|
1236
1238
|
this.dataSource = value;
|
|
1237
1239
|
},
|
|
1238
|
-
error: err => console.error('Error:', err.message)
|
|
1240
|
+
error: (err) => console.error('Error:', err.message)
|
|
1239
1241
|
});
|
|
1240
1242
|
},
|
|
1241
|
-
error: err => console.error('Error:', err.message)
|
|
1243
|
+
error: (err) => console.error('Error:', err.message)
|
|
1242
1244
|
});
|
|
1243
1245
|
}
|
|
1244
1246
|
onChangeEvent(changes) {
|
|
@@ -1253,7 +1255,7 @@ class GenericRdictTableComponent {
|
|
|
1253
1255
|
else {
|
|
1254
1256
|
//get the object from rdict
|
|
1255
1257
|
this.tableRdict.getAsObservable(key).subscribe({
|
|
1256
|
-
next: value => {
|
|
1258
|
+
next: (value) => {
|
|
1257
1259
|
var dd = value.getPlainObject();
|
|
1258
1260
|
this.dataSource.push(dd);
|
|
1259
1261
|
}
|
|
@@ -1279,30 +1281,30 @@ class GenericRdictTableComponent {
|
|
|
1279
1281
|
if (this.fileLayout) {
|
|
1280
1282
|
//load from file
|
|
1281
1283
|
this.localFileService.getJsonData(this.fileLayout).subscribe({
|
|
1282
|
-
next: value => {
|
|
1284
|
+
next: (value) => {
|
|
1283
1285
|
if (value) {
|
|
1284
|
-
const layout = value.find(item => item.model === this.model);
|
|
1286
|
+
const layout = value.find((item) => item.model === this.model);
|
|
1285
1287
|
this.setLayout(layout?.tableLayout);
|
|
1286
1288
|
}
|
|
1287
1289
|
},
|
|
1288
|
-
error: err => console.error('Error:', err.message)
|
|
1290
|
+
error: (err) => console.error('Error:', err.message)
|
|
1289
1291
|
});
|
|
1290
1292
|
}
|
|
1293
|
+
//Use rdict layout
|
|
1291
1294
|
else
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
next: value => {
|
|
1295
|
+
this.rdict.getAsObservable('config.models.' + this.model + '.tableLayout').subscribe({
|
|
1296
|
+
next: (value) => {
|
|
1295
1297
|
this.setLayout(value);
|
|
1296
1298
|
},
|
|
1297
|
-
error: err => console.error('Error:', err.message)
|
|
1299
|
+
error: (err) => console.error('Error:', err.message)
|
|
1298
1300
|
});
|
|
1299
1301
|
}
|
|
1300
1302
|
}
|
|
1301
1303
|
setLayout(layout) {
|
|
1302
1304
|
if (layout) {
|
|
1303
1305
|
this.tableLayout = layout;
|
|
1304
|
-
this.title = this.translate.instant(this.tableLayout[
|
|
1305
|
-
this.allColumns = this.tableLayout[
|
|
1306
|
+
this.title = this.translate.instant(this.tableLayout['title']);
|
|
1307
|
+
this.allColumns = this.tableLayout['columns'].map((item) => {
|
|
1306
1308
|
if (!item.isTranslated) {
|
|
1307
1309
|
item.name = this.translate.instant(item.translateKey);
|
|
1308
1310
|
item.isTranslated = true;
|
|
@@ -1310,15 +1312,41 @@ class GenericRdictTableComponent {
|
|
|
1310
1312
|
if (this.editColumn && this.editColumn === item.propertyName) {
|
|
1311
1313
|
item.isEditLink = true;
|
|
1312
1314
|
}
|
|
1315
|
+
if (!item.type) {
|
|
1316
|
+
item.type = 'property';
|
|
1317
|
+
}
|
|
1313
1318
|
}
|
|
1314
1319
|
return item;
|
|
1315
1320
|
});
|
|
1321
|
+
//Get reference columns
|
|
1322
|
+
const referenceColumns = this.allColumns.filter((item) => item.reference !== undefined && item.reference !== null);
|
|
1323
|
+
if (referenceColumns.length > 0) {
|
|
1324
|
+
referenceColumns.forEach((item) => {
|
|
1325
|
+
this.rdict.getTableAsObservable(item.reference).subscribe({
|
|
1326
|
+
next: (value) => {
|
|
1327
|
+
if (value) {
|
|
1328
|
+
console.log('Reference data:', value);
|
|
1329
|
+
this.referenceData.set(item.reference, this.arrayToMap(value, item.referenceKey));
|
|
1330
|
+
}
|
|
1331
|
+
},
|
|
1332
|
+
error: (err) => console.error('Error:', err.message)
|
|
1333
|
+
});
|
|
1334
|
+
});
|
|
1335
|
+
}
|
|
1316
1336
|
this.columns = [];
|
|
1317
1337
|
this.allColumns.sort((a, b) => a.order - b.order);
|
|
1318
1338
|
this.displayedColumns = [];
|
|
1319
|
-
this.displayedColumns.push.apply(this.displayedColumns, this.allColumns.map(x => x.propertyName));
|
|
1339
|
+
this.displayedColumns.push.apply(this.displayedColumns, this.allColumns.map((x) => x.propertyName));
|
|
1320
1340
|
}
|
|
1321
1341
|
}
|
|
1342
|
+
arrayToMap(array, keyProperty) {
|
|
1343
|
+
const map = new Map();
|
|
1344
|
+
for (const item of array) {
|
|
1345
|
+
const key = String(item[keyProperty]); // ensure it's a string
|
|
1346
|
+
map.set(key, item);
|
|
1347
|
+
}
|
|
1348
|
+
return map;
|
|
1349
|
+
}
|
|
1322
1350
|
addHandler() {
|
|
1323
1351
|
this.router.navigate([`${this.basePath}/add`]);
|
|
1324
1352
|
}
|
|
@@ -1344,21 +1372,25 @@ class GenericRdictTableComponent {
|
|
|
1344
1372
|
});
|
|
1345
1373
|
// this.editService.remove(args.dataItem);
|
|
1346
1374
|
}
|
|
1347
|
-
getCellValue(item,
|
|
1348
|
-
if (item
|
|
1349
|
-
|
|
1375
|
+
getCellValue(item, column) {
|
|
1376
|
+
if (typeof item !== 'object' || item === null) {
|
|
1377
|
+
return null; // or `undefined` or some fallback
|
|
1378
|
+
}
|
|
1379
|
+
if (column.type == "reference") {
|
|
1380
|
+
const value = this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];
|
|
1381
|
+
return value;
|
|
1350
1382
|
}
|
|
1351
1383
|
else {
|
|
1352
|
-
return item[propertyName];
|
|
1384
|
+
return item[column.propertyName];
|
|
1353
1385
|
}
|
|
1354
1386
|
}
|
|
1355
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.
|
|
1356
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.
|
|
1387
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: GenericRdictTableComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2.TranslateService }, { token: i0.Injector }, { token: i1.LocalFileService }, { token: ReactiveDictionary }, { token: MaterialDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1388
|
+
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:
|
|
1357
1389
|
// MatPaginatorModule,
|
|
1358
1390
|
// MatTableModule,
|
|
1359
|
-
TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: i7$1.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i7$1.GridToolbarFocusableDirective, selector: " [kendoGridToolbarFocusable], [kendoGridAddCommand], [kendoGridCancelCommand], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridExcelCommand], [kendoGridPDFCommand] " }, { kind: "component", type: i7$1.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i7$1.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { kind: "component", type: i7$1.CommandColumnComponent, selector: "kendo-grid-command-column" }, { kind: "directive", type: i7$1.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: i7$1.EditCommandDirective, selector: "[kendoGridEditCommand]" }, { kind: "component", type: i7$1.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { kind: "directive", type: i7$1.AddCommandToolbarDirective, selector: "[kendoGridAddTool]" }, { 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.ToolbarCustomMessagesComponent, selector: "kendo-toolbar-messages" }, { 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]" }, { kind: "component", type: RdictTableTitle, selector: "table-title", inputs: ["text"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1391
|
+
TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: i7$1.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i7$1.GridToolbarFocusableDirective, selector: " [kendoGridToolbarFocusable], [kendoGridAddCommand], [kendoGridCancelCommand], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridExcelCommand], [kendoGridPDFCommand] " }, { kind: "component", type: i7$1.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i7$1.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { kind: "component", type: i7$1.CommandColumnComponent, selector: "kendo-grid-command-column" }, { kind: "directive", type: i7$1.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: i7$1.EditCommandDirective, selector: "[kendoGridEditCommand]" }, { kind: "component", type: i7$1.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { kind: "directive", type: i7$1.AddCommandToolbarDirective, selector: "[kendoGridAddTool]" }, { 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.ToolbarCustomMessagesComponent, selector: "kendo-toolbar-messages" }, { 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]" }, { kind: "component", type: RdictTableTitle, selector: "table-title", inputs: ["text"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1360
1392
|
}
|
|
1361
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.
|
|
1393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: GenericRdictTableComponent, decorators: [{
|
|
1362
1394
|
type: Component,
|
|
1363
1395
|
args: [{ selector: 'rsl-rdict-generic-table', encapsulation: ViewEncapsulation.None, imports: [
|
|
1364
1396
|
CommonModule,
|
|
@@ -1372,7 +1404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
|
|
|
1372
1404
|
KENDO_BUTTONS,
|
|
1373
1405
|
KENDO_DIALOG,
|
|
1374
1406
|
RdictTableTitle
|
|
1375
|
-
], 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 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
|
|
1407
|
+
], 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"] }]
|
|
1376
1408
|
}], ctorParameters: () => [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2.TranslateService }, { type: i0.Injector }, { type: i1.LocalFileService }, { type: ReactiveDictionary }, { type: MaterialDialogService }], propDecorators: { showSerach: [{
|
|
1377
1409
|
type: Input
|
|
1378
1410
|
}], searchFields: [{
|
|
@@ -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/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/services/material-dialog.service.ts","../../../../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 changes$: Subject<any> = new Subject<any>();\r\n private deletes$: 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\r\n this._socketService = socketService;\r\n // this._socketService.initSocket(authToken)\r\n\r\n // this._socketService.getSetEvent(this)\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\r\n // override keys(): IterableIterator<string> {\r\n // const excludedKeys = ['__guid', '__type']; // Key to exclude\r\n // const iterator = super.keys();\r\n\r\n // const filteredIterator = {\r\n // [Symbol.iterator]: () => ({\r\n // next: () => {\r\n // let result;\r\n\r\n // // Loop until we find a valid key or run out of keys\r\n // do {\r\n // result = iterator.next(); // Get the next entry ([key, value])\r\n // if (result.done) return { done: true }; // Stop if done\r\n\r\n // const key = result.value; // Destructure the entry\r\n // const value = super.get(key);\r\n // // Check if the key is in excludedKeys or if the value is an object\r\n // if (!excludedKeys.includes(key) && !(typeof value === 'object' && value !== null)) {\r\n // return { value: key, done: false }; // Return the valid key\r\n // }\r\n // } while (true); // Continue until a valid key is found\r\n // }\r\n // })\r\n // };\r\n\r\n // return filteredIterator as IterableIterator<string>;\r\n // }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\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 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.changes$.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.deletes$.next({ key });\r\n }\r\n }\r\n deleteAsObservable(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 getAsObservable(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getTableAsObservable(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(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 getTableAsObservable_old(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionary) => {\r\n if (!Array.isArray(dictionary)) {\r\n throw new Error('Expected an array but received something else');\r\n }\r\n\r\n const isArrayOfReactiveDictionaries = dictionary.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isArrayOfReactiveDictionaries) {\r\n throw new Error('Expected an array of ReactiveDictionary instances but received something else');\r\n }\r\n\r\n // ✅ WRAP THIS IN from(...) to make it emit real data, not a Promise\r\n return from(this.processTableData(dictionary));\r\n })\r\n );\r\n }\r\n async getTable(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('getTable', 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 getTable_old(key: string, data: any = null): Promise<any[]> {\r\n if (!data) data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) return []; // Return an empty array if data is undefined\r\n console.log('getTable', data);\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async (key: any, index: number) => {\r\n const entry = (await data.asyncGet(key[0])) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key[0]);\r\n }\r\n return entry;\r\n })\r\n )) || []; // Return an empty array if the above yields undefined\r\n\r\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n }\r\n async getTableWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n 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 // async processTableData(data: any): Promise<any[]> {\r\n // // Filter and get only entries that are instances of ReactiveDictionary\r\n // const result = 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 // // Filter out entries that are not ReactiveDictionary instances\r\n // const filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n\r\n // // Remove __guid from each dictionary and return the plain object\r\n // return filteredResults.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 // }\r\n\r\n onChanges(): Observable<any> {\r\n return this.changes$.asObservable();\r\n }\r\n onDelete(): Observable<any> {\r\n return this.deletes$.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 null;\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 modelFormList(property: string, value: any): any {\r\n return this.get('__modelFormList');\r\n }\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { Right } from '../models/right';\r\nimport { User } from '../models/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService extends BaseService<User> {\r\n userRights!: Right[]; \r\n constructor(datastore: DatastoreCore) {\r\n super(datastore);\r\n this.setModelType(User);\r\n }\r\n getRights(): Observable<BaseQueryData<Right>> {\r\n const response = this.datastore.findAll(Right);\r\n return response;\r\n }\r\n hasRightForLink(link: string): boolean {\r\n\r\n if (this.userRights && link) {\r\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\r\n return true;\r\n }\r\n return false;\r\n }\r\n getMenus(): Observable<BaseQueryData<Menu>> {\r\n const response = this.datastore.findAll(Menu);\r\n return response;\r\n } \r\n}\r\n","import { 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 <!-- <kendo-toolbar-button icon=\"menu\" themeColor=\"tertiary\" (click)=\"drawer.toggle()\"> </kendo-toolbar-button> -->\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n <!-- <ng-template kendoDrawerItemTemplate let-item>\r\n <div *ngIf=\"item.path !== ''\" class=\"k-drawer-link\" [routerLink]=\"item.path\">\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n <div *ngIf=\"item.path == ''\" class=\"k-drawer-link\" >\r\n <kendo-svgicon [icon]=\"item.svgIcon\"></kendo-svgicon>\r\n <span>{{ item.text }}</span>\r\n </div>\r\n </ng-template> -->\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n <!-- <div>{{selected}}</div> -->\r\n <!-- <my-content [selectedItem]=\"selected\"></my-content> -->\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>","import { 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 { 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 public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary,\r\n private localFileService: LocalFileService,\r\n private 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.getAsObservable(this.dictPath).subscribe({\r\n next: value => {\r\n value.getAsObservable(this.modelKey).subscribe({\r\n next: modelValue => {\r\n this.modelRdict = modelValue\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChanges().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.getAsObservable(\"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.getTableAsObservable(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\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\r\n @Output() selectedObject: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() click: EventEmitter<{ propertyName: string, model: any }> = new EventEmitter<{ propertyName: string, model: any }>();\r\n @Output() editModel: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n columns = [];\r\n tableLayout = {};\r\n allColumns = [];\r\n displayedColumns: string[];\r\n // ColumnMode = ColumnMode;\r\n // SelectionType = SelectionType;\r\n\r\n readonly headerHeight = 50;\r\n readonly rowHeight = 50;\r\n isLoading: boolean;\r\n filterValue: string;\r\n oldOffsetY: number;\r\n hasSearch: false\r\n 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 public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private injector: Injector,\r\n private localFileService: LocalFileService,\r\n private rdict: ReactiveDictionary,\r\n private dialogService: MaterialDialogService) {\r\n }\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', \"\");\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\r\n 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.getAsObservable(this.dictPath).subscribe({\r\n next: rdictData => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChanges().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.getTableAsObservable(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 }\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\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.getAsObservable(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 }\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 }\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 } else\r\n //Use rdict layout\r\n this.rdict.getAsObservable(\"config.models.\" + this.model + \".tableLayout\").subscribe(\r\n {\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\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 }\r\n return item;\r\n });\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n this.displayedColumns = [];\r\n this.displayedColumns.push.apply(this.displayedColumns, this.allColumns.map(x => x.propertyName));\r\n }\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.deleteAsObservable(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 }\r\n public getCellValue(item: any, propertyName: string): any {\r\n if (item instanceof ReactiveDictionary) {\r\n console.log(item)\r\n } else {\r\n return item[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 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.propertyName) }}\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.propertyName) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column 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 kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button 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.UserService","i2","i3","i4.ReactiveDictionary","i1","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/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/services/material-dialog.service.ts","../../../../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 changes$: Subject<any> = new Subject<any>();\r\n private deletes$: 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\r\n this._socketService = socketService;\r\n // this._socketService.initSocket(authToken)\r\n\r\n // this._socketService.getSetEvent(this)\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\r\n // override keys(): IterableIterator<string> {\r\n // const excludedKeys = ['__guid', '__type']; // Key to exclude\r\n // const iterator = super.keys();\r\n\r\n // const filteredIterator = {\r\n // [Symbol.iterator]: () => ({\r\n // next: () => {\r\n // let result;\r\n\r\n // // Loop until we find a valid key or run out of keys\r\n // do {\r\n // result = iterator.next(); // Get the next entry ([key, value])\r\n // if (result.done) return { done: true }; // Stop if done\r\n\r\n // const key = result.value; // Destructure the entry\r\n // const value = super.get(key);\r\n // // Check if the key is in excludedKeys or if the value is an object\r\n // if (!excludedKeys.includes(key) && !(typeof value === 'object' && value !== null)) {\r\n // return { value: key, done: false }; // Return the valid key\r\n // }\r\n // } while (true); // Continue until a valid key is found\r\n // }\r\n // })\r\n // };\r\n\r\n // return filteredIterator as IterableIterator<string>;\r\n // }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\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 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.changes$.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.deletes$.next({ key });\r\n }\r\n }\r\n deleteAsObservable(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 getAsObservable(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getTableAsObservable(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(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 getTableAsObservable_old(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionary) => {\r\n if (!Array.isArray(dictionary)) {\r\n throw new Error('Expected an array but received something else');\r\n }\r\n\r\n const isArrayOfReactiveDictionaries = dictionary.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isArrayOfReactiveDictionaries) {\r\n throw new Error('Expected an array of ReactiveDictionary instances but received something else');\r\n }\r\n\r\n // ✅ WRAP THIS IN from(...) to make it emit real data, not a Promise\r\n return from(this.processTableData(dictionary));\r\n })\r\n );\r\n }\r\n async getTable(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('getTable', 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 getTable_old(key: string, data: any = null): Promise<any[]> {\r\n if (!data) data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) return []; // Return an empty array if data is undefined\r\n // console.log('getTable', data);\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async (key: any, index: number) => {\r\n const entry = (await data.asyncGet(key[0])) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key[0]);\r\n }\r\n return entry;\r\n })\r\n )) || []; // Return an empty array if the above yields undefined\r\n\r\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n }\r\n async getTableWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n 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 // async processTableData(data: any): Promise<any[]> {\r\n // // Filter and get only entries that are instances of ReactiveDictionary\r\n // const result = 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 // // Filter out entries that are not ReactiveDictionary instances\r\n // const filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n\r\n // // Remove __guid from each dictionary and return the plain object\r\n // return filteredResults.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 // }\r\n\r\n onChanges(): Observable<any> {\r\n return this.changes$.asObservable();\r\n }\r\n onDelete(): Observable<any> {\r\n return this.deletes$.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 null;\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 modelFormList(property: string, value: any): any {\r\n return this.get('__modelFormList');\r\n }\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { Right } from '../models/right';\r\nimport { User } from '../models/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService extends BaseService<User> {\r\n userRights!: Right[]; \r\n constructor(datastore: DatastoreCore) {\r\n super(datastore);\r\n this.setModelType(User);\r\n }\r\n getRights(): Observable<BaseQueryData<Right>> {\r\n const response = this.datastore.findAll(Right);\r\n return response;\r\n }\r\n hasRightForLink(link: string): boolean {\r\n\r\n if (this.userRights && link) {\r\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\r\n return true;\r\n }\r\n return false;\r\n }\r\n getMenus(): Observable<BaseQueryData<Menu>> {\r\n const response = this.datastore.findAll(Menu);\r\n return response;\r\n } \r\n}\r\n","import { 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 { 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 { 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 public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary,\r\n private localFileService: LocalFileService,\r\n private 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.getAsObservable(this.dictPath).subscribe({\r\n next: value => {\r\n value.getAsObservable(this.modelKey).subscribe({\r\n next: modelValue => {\r\n this.modelRdict = modelValue\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChanges().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.getAsObservable(\"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.getTableAsObservable(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 public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private injector: Injector,\r\n private localFileService: LocalFileService,\r\n private rdict: ReactiveDictionary,\r\n private dialogService: MaterialDialogService\r\n ) {}\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\r\n 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.getAsObservable(this.dictPath).subscribe({\r\n next: (rdictData) => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChanges().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.getTableAsObservable(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.getAsObservable(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.getAsObservable('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.getTableAsObservable(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.deleteAsObservable(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= 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.UserService","i2","i3","i4.ReactiveDictionary","i1","i3.ReactiveDictionary","i4","i5.MaterialDialogService","i6"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ActivatedRoute, ActivatedRouteSnapshot, Router } from '@angular/router'
|
|
|
3
3
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
4
|
import { AddEvent, RemoveEvent } from '@progress/kendo-angular-grid';
|
|
5
5
|
import { SVGIcon } from '@progress/kendo-svg-icons';
|
|
6
|
-
import { LocalFileService } from
|
|
6
|
+
import { LocalFileService } from '@rosoftlab/core';
|
|
7
7
|
import { ReactiveDictionary } from '../../reactive-dictionary';
|
|
8
8
|
import { MaterialDialogService } from '../../services/material-dialog.service';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
@@ -48,6 +48,8 @@ export declare class GenericRdictTableComponent implements OnInit {
|
|
|
48
48
|
columns: any[];
|
|
49
49
|
tableLayout: {};
|
|
50
50
|
allColumns: any[];
|
|
51
|
+
referenceColumns: any[];
|
|
52
|
+
referenceData: Map<string, Map<string, any>>;
|
|
51
53
|
displayedColumns: string[];
|
|
52
54
|
readonly headerHeight = 50;
|
|
53
55
|
readonly rowHeight = 50;
|
|
@@ -69,11 +71,12 @@ export declare class GenericRdictTableComponent implements OnInit {
|
|
|
69
71
|
ondDeleteEvent(changes: any): void;
|
|
70
72
|
getListLayout(): void;
|
|
71
73
|
private setLayout;
|
|
74
|
+
arrayToMap<T>(array: T[], keyProperty: keyof T): Map<string, T>;
|
|
72
75
|
addHandler(): void;
|
|
73
76
|
editHandler(args: AddEvent): void;
|
|
74
77
|
edit(dataItem: any): void;
|
|
75
78
|
removeHandler(args: RemoveEvent): void;
|
|
76
|
-
getCellValue(item: any,
|
|
79
|
+
getCellValue(item: any, column: any): any;
|
|
77
80
|
static ɵfac: i0.ɵɵFactoryDeclaration<GenericRdictTableComponent, never>;
|
|
78
81
|
static ɵcmp: i0.ɵɵComponentDeclaration<GenericRdictTableComponent, "rsl-rdict-generic-table", never, { "showSerach": { "alias": "showSerach"; "required": false; }; "searchFields": { "alias": "searchFields"; "required": false; }; "customInclude": { "alias": "customInclude"; "required": false; }; "defaultSort": { "alias": "defaultSort"; "required": false; }; "deletePropertyName": { "alias": "deletePropertyName"; "required": false; }; "defaultFilter": { "alias": "defaultFilter"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "hasAdd": { "alias": "hasAdd"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; "editOnClick": { "alias": "editOnClick"; "required": false; }; "editOnDblClick": { "alias": "editOnDblClick"; "required": false; }; }, { "selectedObject": "selectedObject"; "click": "click"; "editModel": "editModel"; }, never, never, true, never>;
|
|
79
82
|
}
|
package/package.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosoftlab/rdict",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2-alpha-14",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^19.
|
|
6
|
-
"@angular/core": "^19.
|
|
7
|
-
"@angular/localize": "^19.
|
|
5
|
+
"@angular/common": "^19.2.8",
|
|
6
|
+
"@angular/core": "^19.2.8",
|
|
7
|
+
"@angular/localize": "^19.2.8"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"tslib": "^2.3.0",
|
|
11
|
-
"@progress/kendo-angular-grid": "^18.
|
|
11
|
+
"@progress/kendo-angular-grid": "^18.5.2",
|
|
12
12
|
"@progress/kendo-data-query": "^1.7.1",
|
|
13
13
|
"@progress/kendo-drawing": "^1.21.2",
|
|
14
|
-
"@progress/kendo-licensing": "^1.
|
|
15
|
-
"@progress/kendo-angular-buttons": "^18.
|
|
16
|
-
"@progress/kendo-angular-common": "^18.
|
|
17
|
-
"@progress/kendo-angular-dateinputs": "^18.
|
|
18
|
-
"@progress/kendo-angular-layout": "^18.
|
|
19
|
-
"@progress/kendo-angular-dropdowns": "^18.
|
|
20
|
-
"@progress/kendo-angular-excel-export": "^18.
|
|
21
|
-
"@progress/kendo-angular-icons": "^18.
|
|
22
|
-
"@progress/kendo-angular-inputs": "^18.
|
|
23
|
-
"@progress/kendo-angular-intl": "^18.
|
|
24
|
-
"@progress/kendo-angular-l10n": "^18.
|
|
25
|
-
"@progress/kendo-angular-label": "^18.
|
|
26
|
-
"@progress/kendo-angular-pager": "^18.
|
|
27
|
-
"@progress/kendo-angular-pdf-export": "^18.
|
|
28
|
-
"@progress/kendo-angular-popup": "^18.
|
|
29
|
-
"@progress/kendo-angular-toolbar": "^18.
|
|
30
|
-
"@progress/kendo-angular-utils": "^18.
|
|
31
|
-
"@progress/kendo-angular-treeview": "^18.
|
|
32
|
-
"@progress/kendo-angular-navigation": "^18.
|
|
33
|
-
"@progress/kendo-angular-dialog": "^18.
|
|
34
|
-
"@progress/kendo-svg-icons": "^4.
|
|
35
|
-
"@progress/kendo-angular-progressbar": "^18.
|
|
36
|
-
"@progress/kendo-theme-default": "^10.
|
|
14
|
+
"@progress/kendo-licensing": "^1.5.1",
|
|
15
|
+
"@progress/kendo-angular-buttons": "^18.5.2",
|
|
16
|
+
"@progress/kendo-angular-common": "^18.5.2",
|
|
17
|
+
"@progress/kendo-angular-dateinputs": "^18.5.2",
|
|
18
|
+
"@progress/kendo-angular-layout": "^18.5.2",
|
|
19
|
+
"@progress/kendo-angular-dropdowns": "^18.5.2",
|
|
20
|
+
"@progress/kendo-angular-excel-export": "^18.5.2",
|
|
21
|
+
"@progress/kendo-angular-icons": "^18.5.2",
|
|
22
|
+
"@progress/kendo-angular-inputs": "^18.5.2",
|
|
23
|
+
"@progress/kendo-angular-intl": "^18.5.2",
|
|
24
|
+
"@progress/kendo-angular-l10n": "^18.5.2",
|
|
25
|
+
"@progress/kendo-angular-label": "^18.5.2",
|
|
26
|
+
"@progress/kendo-angular-pager": "^18.5.2",
|
|
27
|
+
"@progress/kendo-angular-pdf-export": "^18.5.2",
|
|
28
|
+
"@progress/kendo-angular-popup": "^18.5.2",
|
|
29
|
+
"@progress/kendo-angular-toolbar": "^18.5.2",
|
|
30
|
+
"@progress/kendo-angular-utils": "^18.5.2",
|
|
31
|
+
"@progress/kendo-angular-treeview": "^18.5.2",
|
|
32
|
+
"@progress/kendo-angular-navigation": "^18.5.2",
|
|
33
|
+
"@progress/kendo-angular-dialog": "^18.5.2",
|
|
34
|
+
"@progress/kendo-svg-icons": "^4.1.0",
|
|
35
|
+
"@progress/kendo-angular-progressbar": "^18.5.2",
|
|
36
|
+
"@progress/kendo-theme-default": "^10.5.0",
|
|
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.
|
|
40
|
+
"@rosoftlab/core": "1.0.2-alpha-14"
|
|
41
41
|
},
|
|
42
42
|
"sideEffects": false,
|
|
43
43
|
"author": "rosoftlab",
|