@es.framework/ng.ui.core 2.0.58 → 2.0.59

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 +1 @@
1
- {"version":3,"file":"es.framework-ng.ui.core-filter-templates.mjs","sources":["../../../../libs/ng.ui.core/filter-templates/src/lib/filter-templates.module.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/filter-template.schema.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/filter-template-editor-dialog.component.ts","../../../../libs/ng.ui.core/filter-templates/src/index.ts","../../../../libs/ng.ui.core/filter-templates/src/es.framework-ng.ui.core-filter-templates.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class FilterTemplatesModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type FilterTemplateDefaults = {\n defaultPermission?: string;\n defaultModule?: string;\n defaultService?: string;\n defaultFeature?: string;\n};\n\nexport function FilterTemplateFormFields(\n filterFields: FormlyFieldConfig[] = [],\n defaults: FilterTemplateDefaults = {}\n): FormlyFieldConfig[] {\n const hiddenMeta = {\n filter: { hidden: true },\n sort: { hidden: true },\n group: { hidden: true },\n report: { hidden: true },\n table: { hidden: true },\n };\n\n return [\n {\n type: 'tab-type',\n props: {\n tabViewClass: 'advanced-query-tabs',\n scrollable: false,\n lazy: true,\n activeIndex: 0,\n },\n fieldGroup: [\n {\n type: 'group',\n props: {\n tabLabel: 'DETAILS',\n leftIcon: 'pi pi-info-circle',\n badge: (field: FormlyFieldConfig) => 0,\n },\n fieldGroup: [\n {\n wrappers: ['panel'],\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: [\n {\n type: 'input',\n key: 'nameAr',\n props: {\n label: 'DESCRIPTION_AR',\n placeholder: 'DESCRIPTION_AR',\n required: true,\n },\n },\n {\n type: 'input',\n key: 'nameEn',\n props: {\n label: 'DESCRIPTION_EN',\n placeholder: 'DESCRIPTION_EN',\n required: false,\n },\n },\n {\n type: 'textarea',\n key: 'description',\n props: {\n label: 'DETAILS',\n placeholder: 'DETAILS',\n table: { hidden: true },\n },\n },\n {\n type: 'prime-icon-picker',\n key: 'icon',\n props: {\n label: 'ICON',\n placeholder: 'e.g. pi pi-filter',\n required: true,\n },\n },\n\n // مشاركة\n {\n key: 'shareScope',\n type: 'select',\n defaultValue: 'ALL',\n props: {\n label: 'SHARED_WITH',\n required: true,\n appendTo: 'body',\n options: [\n { label: 'ONLY_ME', value: 'ME' },\n { label: 'ALL_USERS', value: 'ALL' },\n { label: 'SPECIFIC_USERS', value: 'USERS' },\n ],\n },\n },\n {\n key: 'ShareUsersList',\n type: 'generic-selector',\n props: {\n label: 'USERS',\n serviceName: 'users/sysusrs',\n labelField: 'name',\n valueField: 'id',\n multiple: true,\n placeholder: 'SELECT_USERS',\n query:{\n filters: (searchText: string, field: FormlyFieldConfig, model?: any) => {\n return [\n // مجموعة البحث النصي\n {\n logicalOperator: 'or',\n groupLogicalOperator: 'and',\n conditions: [\n { field: 'nameAr', operator: 'contains', value: searchText },\n { field: 'nameEn', operator: 'contains', value: searchText },\n { field: 'id', operator: 'eq', value: searchText }\n ]\n },\n // مجموعة الاستبعاد حسب الحالة\n {\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: [\n { field: 'suTy', operator: 'contains', value: 'EMP' },\n ]\n }\n ];\n },},\n },\n\n hideExpression: (model) => model?.shareScope !== 'USERS',\n parsers: [\n (value: any) => {\n return value; // الاحتفاظ بالقيمة الأصلية إذا لم تكن مصفوفة\n },\n],\n },\n\n // ✅ حقول أصلية مخفية وتتعبّى تلقائيًا\n {\n type: 'input',\n key: 'permission',\n hide: true,\n defaultValue: defaults.defaultPermission,\n props: {\n label: 'PERMISSION',\n placeholder: 'e.g. Reports.View',\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'module',\n hide: true,\n defaultValue: defaults.defaultModule,\n props: {\n label: 'MODULE',\n placeholder: 'HR, CRM...',\n required: true,\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'service',\n hide: true,\n defaultValue: defaults.defaultService,\n props: {\n label: 'SERVICE_API',\n placeholder: 'Service name',\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'feature',\n hide: true,\n defaultValue: defaults.defaultFeature,\n props: {\n label: 'FEATURE',\n placeholder: 'FEATURE',\n ...hiddenMeta,\n },\n },\n\n {\n type: 'switch',\n key: 'isActive',\n props: {\n label: 'IS_ACTIVE',\n placeholder: 'IS_ACTIVE',\n table: {\n hidden: false,\n type: 'tag',\n props: { styleClass: 'font-medium' },\n },\n },\n },\n ],\n },\n ],\n },\n\n // Filters tab\n {\n type: 'group',\n props: {\n tabLabel: 'FILTERS',\n leftIcon: 'pi pi-filter',\n badge: (field: FormlyFieldConfig) => 0,\n },\n fieldGroup: [\n {\n wrappers: ['panel'],\n fieldGroup: [\n {\n key: 'filters',\n type: 'query-type',\n props: {\n type: 'text',\n label: 'Filters JSON',\n placeholder: 'RuleBuilder / OData JSON',\n required: false,\n rows: 10,\n class: 'font-mono text-sm',\n description: 'Enter RuleBuilder or OData filter JSON here',\n filterFields,\n ...hiddenMeta,\n },\n },\n ],\n },\n ],\n },\n ],\n },\n ];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BaseService } from '@es.framework/ng.core/services';\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\nimport { FilterTemplateFormFields } from './filter-template.schema';\n\ntype EditorMode = 'create' | 'edit';\n\n@Component({\n selector: 'filter-template-editor-dialog',\n standalone: true,\n imports: [CommonModule, GenericDialogComponent],\n providers: [BaseService],\n template: `\n <app-generic-dialog\n [service]=\"svc\"\n [apiName]=\"apiName\"\n [idField]=\"idField\"\n [form]=\"form\"\n [formFields]=\"computedFields\"\n [model]=\"model\"\n [isEditMode]=\"mode === 'edit'\"\n [isViewMode]=\"false\"\n [displayMode]=\"'dialog'\"\n [dialogVisible]=\"visible\"\n [dialogMaxWidth]=\"dialogMaxWidth\"\n [beforeSaveTransform]=\"beforeSaveTransform\"\n (visibleChange)=\"onVisibleChange($event)\"\n (afterSave)=\"onAfterSave($event)\"\n ></app-generic-dialog>\n `,\n})\nexport class FilterTemplateEditorDialogComponent {\n svc = inject(BaseService);\n form = new UntypedFormGroup({});\n\n /** فتح/إغلاق */\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /** وضع المكون */\n @Input() mode: EditorMode = 'create';\n\n /** نموذج القالب */\n @Input() model: any = {};\n\n /** حقول query builder */\n @Input() filterFields: FormlyFieldConfig[] = [];\n\n\n\n /** API */\n @Input() apiName ='';\n @Input() moduleName = 'crm'; // إذا عندكم moduleName في السيرفر\n @Input() idField = 'id';\n\n /** Defaults */\n // @Input() defaultModule = 'crm';\n // @Input() defaultService = '';\n @Input() defaultFeature = '';\n @Input() defaultPermission = '';\n @Input() defaultCategory = '';\n\n /** UI */\n @Input() dialogMaxWidth = '46rem';\n\n /** Events */\n @Output() saved = new EventEmitter<any>();\n\n\n @Input() currentUserId: string | null = null;\n\n get computedFields(): FormlyFieldConfig[] {\n return FilterTemplateFormFields(this.filterFields, {\n defaultPermission: this.defaultPermission,\n defaultModule: this.moduleName,\n defaultService: this.apiName,\n defaultFeature: this.defaultFeature,\n });\n }\n\n // ✅ نضمن إرسال القيم المخفية دائماً\n beforeSaveTransform = (record: any) => {\n const r = { ...(record || {}) };\n\n r.module = r.module ?? this.moduleName;\n r.service = r.service ?? this.apiName;\n r.feature = r.feature ?? this.defaultFeature;\n r.permission = r.permission ?? this.defaultPermission;\n r.category = r.category ?? this.defaultCategory;\n r.isActive = r.isActive ?? true;\n r.shareScope = r.shareScope ?? 'ALL';\n\n if (r.shareScope === 'ME') {\n r.shareUsers = this.currentUserId ? `<${this.currentUserId}>` : '';\n }\n\n return r;\n };\n\n onVisibleChange(v: boolean) {\n this.visible = v;\n this.visibleChange.emit(v);\n }\n\n onAfterSave(e: any) {\n // e.response غالباً يرجع العنصر بعد الحفظ\n this.saved.emit(e?.response ?? e?.record ?? this.model);\n this.onVisibleChange(false);\n }\n}\n","export * from './lib/filter-templates.module';\nexport * from './lib/filter-template.schema';\nexport * from './lib/filter-template-editor-dialog.component';\n// export * from './lib/report-templates-drawer.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"es.framework-ng.ui.core-filter-templates.mjs","sources":["../../../../libs/ng.ui.core/filter-templates/src/lib/filter-templates.module.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/filter-template.schema.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/filter-template-editor-dialog.component.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/report-templates-drawer.component.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/CrudContextService.ts","../../../../libs/ng.ui.core/filter-templates/src/lib/app-report-templates-wrapper.component.ts","../../../../libs/ng.ui.core/filter-templates/src/es.framework-ng.ui.core-filter-templates.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class FilterTemplatesModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type FilterTemplateDefaults = {\n defaultPermission?: string;\n defaultModule?: string;\n defaultService?: string;\n defaultFeature?: string;\n};\n\nexport function FilterTemplateFormFields(\n filterFields: FormlyFieldConfig[] = [],\n defaults: FilterTemplateDefaults = {}\n): FormlyFieldConfig[] {\n const hiddenMeta = {\n filter: { hidden: true },\n sort: { hidden: true },\n group: { hidden: true },\n report: { hidden: true },\n table: { hidden: true },\n };\n\n return [\n {\n type: 'tab-type',\n props: {\n tabViewClass: 'advanced-query-tabs',\n scrollable: false,\n lazy: true,\n activeIndex: 0,\n },\n fieldGroup: [\n {\n type: 'group',\n props: {\n tabLabel: 'DETAILS',\n leftIcon: 'pi pi-info-circle',\n badge: (field: FormlyFieldConfig) => 0,\n },\n fieldGroup: [\n {\n wrappers: ['panel'],\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: [\n {\n type: 'input',\n key: 'nameAr',\n props: {\n label: 'DESCRIPTION_AR',\n placeholder: 'DESCRIPTION_AR',\n required: true,\n },\n },\n {\n type: 'input',\n key: 'nameEn',\n props: {\n label: 'DESCRIPTION_EN',\n placeholder: 'DESCRIPTION_EN',\n required: false,\n },\n },\n {\n type: 'textarea',\n key: 'description',\n props: {\n label: 'DETAILS',\n placeholder: 'DETAILS',\n table: { hidden: true },\n },\n },\n {\n type: 'prime-icon-picker',\n key: 'icon',\n props: {\n label: 'ICON',\n placeholder: 'e.g. pi pi-filter',\n required: true,\n },\n },\n\n // مشاركة\n {\n key: 'shareScope',\n type: 'select',\n defaultValue: 'ALL',\n props: {\n label: 'SHARED_WITH',\n required: true,\n appendTo: 'body',\n options: [\n { label: 'ONLY_ME', value: 'ME' },\n { label: 'ALL_USERS', value: 'ALL' },\n { label: 'SPECIFIC_USERS', value: 'USERS' },\n ],\n },\n },\n {\n key: 'ShareUsersList',\n type: 'generic-selector',\n props: {\n label: 'USERS',\n serviceName: 'users/sysusrs',\n labelField: 'name',\n valueField: 'id',\n multiple: true,\n placeholder: 'SELECT_USERS',\n query:{\n filters: (searchText: string, field: FormlyFieldConfig, model?: any) => {\n return [\n // مجموعة البحث النصي\n {\n logicalOperator: 'or',\n groupLogicalOperator: 'and',\n conditions: [\n { field: 'nameAr', operator: 'contains', value: searchText },\n { field: 'nameEn', operator: 'contains', value: searchText },\n { field: 'id', operator: 'eq', value: searchText }\n ]\n },\n // مجموعة الاستبعاد حسب الحالة\n {\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: [\n { field: 'suTy', operator: 'contains', value: 'EMP' },\n ]\n }\n ];\n },},\n },\n\n hideExpression: (model) => model?.shareScope !== 'USERS',\n parsers: [\n (value: any) => {\n return value; // الاحتفاظ بالقيمة الأصلية إذا لم تكن مصفوفة\n },\n],\n },\n\n // ✅ حقول أصلية مخفية وتتعبّى تلقائيًا\n {\n type: 'input',\n key: 'permission',\n hide: true,\n defaultValue: defaults.defaultPermission,\n props: {\n label: 'PERMISSION',\n placeholder: 'e.g. Reports.View',\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'module',\n hide: true,\n defaultValue: defaults.defaultModule,\n props: {\n label: 'MODULE',\n placeholder: 'HR, CRM...',\n required: true,\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'service',\n hide: true,\n defaultValue: defaults.defaultService,\n props: {\n label: 'SERVICE_API',\n placeholder: 'Service name',\n ...hiddenMeta,\n },\n },\n {\n type: 'input',\n key: 'feature',\n hide: true,\n defaultValue: defaults.defaultFeature,\n props: {\n label: 'FEATURE',\n placeholder: 'FEATURE',\n ...hiddenMeta,\n },\n },\n\n {\n type: 'switch',\n key: 'isActive',\n props: {\n label: 'IS_ACTIVE',\n placeholder: 'IS_ACTIVE',\n table: {\n hidden: false,\n type: 'tag',\n props: { styleClass: 'font-medium' },\n },\n },\n },\n ],\n },\n ],\n },\n\n // Filters tab\n {\n type: 'group',\n props: {\n tabLabel: 'FILTERS',\n leftIcon: 'pi pi-filter',\n badge: (field: FormlyFieldConfig) => 0,\n },\n fieldGroup: [\n {\n wrappers: ['panel'],\n fieldGroup: [\n {\n key: 'filters',\n type: 'query-type',\n props: {\n type: 'text',\n label: 'Filters JSON',\n placeholder: 'RuleBuilder / OData JSON',\n required: false,\n rows: 10,\n class: 'font-mono text-sm',\n description: 'Enter RuleBuilder or OData filter JSON here',\n filterFields,\n ...hiddenMeta,\n },\n },\n ],\n },\n ],\n },\n ],\n },\n ];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BaseService } from '@es.framework/ng.core/services';\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\nimport { FilterTemplateFormFields } from './filter-template.schema';\n\ntype EditorMode = 'create' | 'edit';\n\n@Component({\n selector: 'filter-template-editor-dialog',\n standalone: true,\n imports: [CommonModule, GenericDialogComponent],\n providers: [BaseService],\n template: `\n <app-generic-dialog\n [service]=\"svc\"\n [apiName]=\"apiName\"\n [idField]=\"idField\"\n [form]=\"form\"\n [formFields]=\"computedFields\"\n [model]=\"model\"\n [isEditMode]=\"mode === 'edit'\"\n [isViewMode]=\"false\"\n [displayMode]=\"'dialog'\"\n [dialogVisible]=\"visible\"\n [dialogMaxWidth]=\"dialogMaxWidth\"\n [beforeSaveTransform]=\"beforeSaveTransform\"\n (visibleChange)=\"onVisibleChange($event)\"\n (afterSave)=\"onAfterSave($event)\"\n ></app-generic-dialog>\n `,\n})\nexport class FilterTemplateEditorDialogComponent {\n svc = inject(BaseService);\n form = new UntypedFormGroup({});\n\n /** فتح/إغلاق */\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /** وضع المكون */\n @Input() mode: EditorMode = 'create';\n\n /** نموذج القالب */\n @Input() model: any = {};\n\n /** حقول query builder */\n @Input() filterFields: FormlyFieldConfig[] = [];\n\n\n\n /** API */\n @Input() apiName ='';\n @Input() moduleName = 'crm'; // إذا عندكم moduleName في السيرفر\n @Input() idField = 'id';\n\n /** Defaults */\n // @Input() defaultModule = 'crm';\n // @Input() defaultService = '';\n @Input() defaultFeature = '';\n @Input() defaultPermission = '';\n @Input() defaultCategory = '';\n\n /** UI */\n @Input() dialogMaxWidth = '46rem';\n\n /** Events */\n @Output() saved = new EventEmitter<any>();\n\n\n @Input() currentUserId: string | null = null;\n\n get computedFields(): FormlyFieldConfig[] {\n return FilterTemplateFormFields(this.filterFields, {\n defaultPermission: this.defaultPermission,\n defaultModule: this.moduleName,\n defaultService: this.apiName,\n defaultFeature: this.defaultFeature,\n });\n }\n\n // ✅ نضمن إرسال القيم المخفية دائماً\n beforeSaveTransform = (record: any) => {\n const r = { ...(record || {}) };\n\n r.module = r.module ?? this.moduleName;\n r.service = r.service ?? this.apiName;\n r.feature = r.feature ?? this.defaultFeature;\n r.permission = r.permission ?? this.defaultPermission;\n r.category = r.category ?? this.defaultCategory;\n r.isActive = r.isActive ?? true;\n r.shareScope = r.shareScope ?? 'ALL';\n\n if (r.shareScope === 'ME') {\n r.shareUsers = this.currentUserId ? `<${this.currentUserId}>` : '';\n }\n\n return r;\n };\n\n onVisibleChange(v: boolean) {\n this.visible = v;\n this.visibleChange.emit(v);\n }\n\n onAfterSave(e: any) {\n // e.response غالباً يرجع العنصر بعد الحفظ\n this.saved.emit(e?.response ?? e?.record ?? this.model);\n this.onVisibleChange(false);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { BaseService, SwalService } from '@es.framework/ng.core/services';\nimport { DrawerModule } from 'primeng/drawer';\nimport { finalize } from 'rxjs';\nimport { LoadingSkeletonComponent } from \"@es.framework/ng.ui.core/loading-skeletons\";\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport {FilterTemplateEditorDialogComponent} from \"./filter-template-editor-dialog.component\";\n\n\n@Component({\n selector: 'saved-report-templates-drawer',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n ButtonModule,\n InputTextModule,\n TooltipModule,\n DrawerModule,\n LoadingSkeletonComponent,\n FilterTemplateEditorDialogComponent\n],\n providers: [BaseService],\n template: `\n <p-drawer\n [visible]=\"visible\"\n (visibleChange)=\"onVisibleChange($event)\"\n [position]=\"position\"\n [modal]=\"modal\"\n [dismissible]=\"dismissable\"\n [closeOnEscape]=\"closeOnEscape\"\n [blockScroll]=\"blockScroll\"\n [showCloseIcon]=\"showCloseIcon\"\n>\n <div class=\"h-full flex flex-col bg-white\">\n\n <!-- Header -->\n <div class=\"sticky top-0 z-10 bg-white border-b border-gray-200 px-4 py-4\">\n <div class=\"flex items-center gap-3\">\n <div class=\"w-9 h-9 rounded-xl flex items-center justify-center bg-gray-100 text-gray-700\">\n <i class=\"pi pi-bookmark\"></i>\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"text-xs text-gray-500\">\n {{ 'TEMPLATES' | translate }}\n </div>\n <div class=\"text-base font-semibold text-gray-900 truncate\">\n {{ selected ? getName(selected) : ('SELECT_TEMPLATE' | translate) }}\n </div>\n </div>\n\n <button\n pButton\n type=\"button\"\n class=\"p-button-rounded p-button-sm p-button-text\"\n icon=\"pi pi-refresh\"\n (click)=\"refresh()\"\n [disabled]=\"loading\"\n pTooltip=\"{{ 'REFRESH' | translate }}\"\n tooltipPosition=\"bottom\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n class=\"p-button-rounded p-button-sm p-button-primary\"\n icon=\"pi pi-plus\"\n (click)=\"openTemplateCreate()\"\n [disabled]=\"loading\"\n pTooltip=\"{{ 'COMMON.ADD' | translate }}\"\n tooltipPosition=\"bottom\"\n ></button>\n </div>\n\n <!-- Search -->\n <div class=\"mt-4\">\n <span class=\"p-input-icon-left w-full\">\n <i class=\"pi pi-search\"></i>\n <input\n pInputText\n class=\"w-full !rounded-xl\"\n [(ngModel)]=\"search\"\n [disabled]=\"loading\"\n [placeholder]=\"'SEARCH_FOR_A_VIEW' | translate\"\n />\n </span>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"flex-1 overflow-auto px-3 py-3\">\n\n <!-- ✅ Loading -->\n <div *ngIf=\"loading\" class=\"py-4\">\n <app-loading-skeleton [itemsCount]=\"4\"></app-loading-skeleton>\n </div>\n\n <!-- ✅ Empty -->\n <div *ngIf=\"!loading && filteredAll.length === 0\" class=\"text-sm text-gray-500 text-center py-12\">\n <div class=\"mx-auto mb-3 w-12 h-12 rounded-2xl bg-gray-100 flex items-center justify-center\">\n <i class=\"pi pi-inbox text-gray-500\"></i>\n </div>\n {{ 'NO_DATA_FOUND' | translate }}\n </div>\n\n <!-- ✅ Content when not loading -->\n <ng-container *ngIf=\"!loading\">\n\n <!-- Favorites -->\n <ng-container *ngIf=\"favList.length > 0\">\n <button\n type=\"button\"\n class=\"w-full flex items-center justify-between px-2 py-2 text-sm font-semibold text-gray-800\"\n (click)=\"favOpen = !favOpen\"\n >\n <span class=\"flex items-center gap-2\">\n <i class=\"pi pi-star-fill text-yellow-500\"></i>\n {{ 'FAVOURITES' | translate }}\n <span class=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 text-gray-600\">{{ favList.length }}</span>\n </span>\n <i class=\"pi text-xs\" [ngClass]=\"favOpen ? 'pi-chevron-up' : 'pi-chevron-down'\"></i>\n </button>\n\n <div *ngIf=\"favOpen\" class=\"mt-1 space-y-1\">\n <ng-container *ngFor=\"let t of favList\">\n <div\n class=\"group relative flex items-center gap-3 px-3 py-2 rounded-xl transition cursor-pointer\n hover:bg-gray-50\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-50, rgba(59,130,246,0.10))' : ''\"\n (click)=\"select(t)\"\n >\n <span\n class=\"absolute left-0 top-1 bottom-1 w-1 rounded-full\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : 'transparent'\"\n ></span>\n\n <i class=\"text-base shrink-0\"\n [ngClass]=\"t.icon || 'pi pi-check-circle'\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\"></i>\n\n <span class=\"flex-1 truncate\"\n [class.font-semibold]=\"isSelected(t)\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\">\n {{ getName(t) }}\n </span>\n\n <!-- Actions -->\n <div class=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition\"\n (click)=\"$event.stopPropagation()\">\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n [icon]=\"t.isFav ? 'pi pi-star-fill' : 'pi pi-star'\"\n (click)=\"toggleFav(t)\"></button>\n\n @if (!isSelected(t)) {\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n icon=\"pi pi-pencil\"\n (click)=\"openTemplateEdit(t)\"></button>\n\n <button pButton type=\"button\" class=\"p-button-text p-button-sm p-button-danger\"\n icon=\"pi pi-trash\"\n (click)=\"confirmDelete(t)\"></button>\n }\n </div>\n </div>\n </ng-container>\n </div>\n\n <div class=\"my-3 border-b border-gray-200\"></div>\n </ng-container>\n\n <!-- Shared -->\n <ng-container *ngIf=\"sharedList.length > 0\">\n <button\n type=\"button\"\n class=\"w-full flex items-center justify-between px-2 py-2 text-sm font-semibold text-gray-800\"\n (click)=\"sharedOpen = !sharedOpen\"\n >\n <span class=\"flex items-center gap-2\">\n <i class=\"pi pi-users text-gray-600\"></i>\n {{ 'SHARED' | translate }}\n <span class=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 text-gray-600\">{{ sharedList.length }}</span>\n </span>\n <i class=\"pi text-xs\" [ngClass]=\"sharedOpen ? 'pi-chevron-up' : 'pi-chevron-down'\"></i>\n </button>\n\n <div *ngIf=\"sharedOpen\" class=\"mt-1 space-y-1\">\n <ng-container *ngFor=\"let t of sharedList\">\n <div\n class=\"group relative flex items-center gap-3 px-3 py-2 rounded-xl transition cursor-pointer hover:bg-gray-50\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-50, rgba(59,130,246,0.10))' : ''\"\n (click)=\"select(t)\"\n >\n <span\n class=\"absolute left-0 top-1 bottom-1 w-1 rounded-full\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : 'transparent'\"\n ></span>\n\n <i class=\"text-base shrink-0\"\n [ngClass]=\"t.icon || 'pi pi-check-circle'\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\"></i>\n\n <span class=\"flex-1 truncate\"\n [class.font-semibold]=\"isSelected(t)\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\">\n {{ getName(t) }}\n </span>\n\n <div class=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition\"\n (click)=\"$event.stopPropagation()\">\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n [icon]=\"t.isFav ? 'pi pi-star-fill' : 'pi pi-star'\"\n (click)=\"toggleFav(t)\"></button>\n\n @if (!isSelected(t)) {\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n icon=\"pi pi-pencil\"\n (click)=\"openTemplateEdit(t)\"></button>\n\n <button pButton type=\"button\" class=\"p-button-text p-button-sm p-button-danger\"\n icon=\"pi pi-trash\"\n (click)=\"confirmDelete(t)\"></button>\n }\n </div>\n </div>\n </ng-container>\n </div>\n\n <div class=\"my-3 border-b border-gray-200\"></div>\n </ng-container>\n\n <!-- Private -->\n <ng-container *ngIf=\"privateList.length > 0\">\n <button\n type=\"button\"\n class=\"w-full flex items-center justify-between px-2 py-2 text-sm font-semibold text-gray-800\"\n (click)=\"privateOpen = !privateOpen\"\n >\n <span class=\"flex items-center gap-2\">\n <i class=\"pi pi-lock text-gray-600\"></i>\n {{ 'PRIVATE' | translate }}\n <span class=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 text-gray-600\">{{ privateList.length }}</span>\n </span>\n <i class=\"pi text-xs\" [ngClass]=\"privateOpen ? 'pi-chevron-up' : 'pi-chevron-down'\"></i>\n </button>\n\n <div *ngIf=\"privateOpen\" class=\"mt-1 space-y-1\">\n <ng-container *ngFor=\"let t of privateList\">\n <div\n class=\"group relative flex items-center gap-3 px-3 py-2 rounded-xl transition cursor-pointer hover:bg-gray-50\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-50, rgba(59,130,246,0.10))' : ''\"\n (click)=\"select(t)\"\n >\n <span\n class=\"absolute left-0 top-1 bottom-1 w-1 rounded-full\"\n [style.backgroundColor]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : 'transparent'\"\n ></span>\n\n <i class=\"text-base shrink-0\"\n [ngClass]=\"t.icon || 'pi pi-check-circle'\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\"></i>\n\n <span class=\"flex-1 truncate\"\n [class.font-semibold]=\"isSelected(t)\"\n [style.color]=\"isSelected(t) ? 'var(--p-primary-color, #3b82f6)' : ''\">\n {{ getName(t) }}\n </span>\n\n <div class=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition\"\n (click)=\"$event.stopPropagation()\">\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n [icon]=\"t.isFav ? 'pi pi-star-fill' : 'pi pi-star'\"\n (click)=\"toggleFav(t)\"></button>\n\n @if (!isSelected(t)) {\n <button pButton type=\"button\" class=\"p-button-text p-button-sm\"\n icon=\"pi pi-pencil\"\n (click)=\"openTemplateEdit(t)\"></button>\n\n <button pButton type=\"button\" class=\"p-button-text p-button-sm p-button-danger\"\n icon=\"pi pi-trash\"\n (click)=\"confirmDelete(t)\"></button>\n }\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n</p-drawer>\n\n<filter-template-editor-dialog\n [(visible)]=\"templateEditorVisible\"\n [mode]=\"templateEditorMode\"\n [model]=\"templateEditorModel\"\n [filterFields]=\"filterFields\"\n [moduleName]=\"moduleName\"\n [apiName]=\"apiName\"\n [defaultFeature]=\"defaultFeature\"\n [defaultCategory]=\"defaultCategory\"\n [defaultPermission]=\"defaultPermission\"\n [currentUserId]=\"currentUserId\"\n (saved)=\"onTemplateSaved($event)\">\n</filter-template-editor-dialog>\n\n\n `,\n})\nexport class SavedReportTemplatesDrawerComponent implements OnInit {\n private svc = inject(BaseService);\n private swal = inject(SwalService);\n private tr = inject(TranslateService);\n\n @Input() apiName = 'filter-templates';\n @Input() module = 'crm';\n @Input() service = '';\n @Input() category = '';\n @Input() feature = '';\n\n @Output() templateSelected = new EventEmitter<any>();\n @Output() edit = new EventEmitter<any>();\n\n // ✅ جديد\n @Output() add = new EventEmitter<void>();\n\n // ✅ التحكم من الأب\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n // ✅ اختياري: خلّها قابلة للتخصيص من الأب\n @Input() position: 'left' | 'right' = 'left';\n @Input() showCloseIcon = true;\n @Input() modal = true; // ✅ يغمّق اللي تحت\n @Input() dismissable = true; // ✅ الضغط خارج/على الماسك يقفل\n @Input() closeOnEscape = true; // ✅ ESC يقفل\n @Input() blockScroll = true; // ✅ يمنع سكرول للخلفية\n\n @Input() filterFields: FormlyFieldConfig[] = [];\n \n@Input() moduleName = '';\n\n@Input() defaultFeature = '';\n@Input() defaultCategory = '';\n@Input() defaultPermission = '';\n\n@Input() currentUserId: string | null = null;\n\n templateEditorVisible = false;\ntemplateEditorMode: 'create' | 'edit' = 'create';\ntemplateEditorModel: any = {};\n\n templates: any[] = [];\n selected: any | null = null;\n loading = false;\n\n\n search = '';\n\n favOpen = true;\n sharedOpen = true;\n privateOpen = true;\n\n ngOnInit(): void {\n this.refresh();\n }\n\n refresh() {\n this.loading = true;\n\n this.svc.apiName = this.apiName;\n this.svc.moduleName = this.module;\n\n const filters: any = {\n service: this.service,\n module: this.module,\n category: this.category,\n };\n\n this.svc.getList({ sorting: 'id DESC', filtering: { filters } })\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res: any) => {\n this.templates = res?.items ?? res ?? [];\n if (this.selected) {\n this.selected =\n this.templates.find(x => String(x.id) === String(this.selected!.id)) ?? null;\n }\n },\n error: () =>\n this.swal.error(\n this.tr.instant('ERROR_TITLE'),\n this.tr.instant('ERROR.FAILED_LOAD_DATA')\n ),\n });\n}\n\n\n get filteredAll(): any[] {\n const q = (this.search || '').trim().toLowerCase();\n if (!q) return [...this.templates];\n return this.templates.filter(t => (this.getName(t) || '').toLowerCase().includes(q));\n }\n\n get favList(): any[] {\n return this.filteredAll.filter(x => !!x.isFav);\n }\n\n get privateList(): any[] {\n return this.filteredAll.filter(x => x.shareScope === 'ME');\n }\n\n get sharedList(): any[] {\n return this.filteredAll.filter(x => x.shareScope !== 'ME' && !x.isFav);\n }\n\n select(t: any) {\n if (this.isSelected(t)) {\n this.clearSelection();\n return;\n }\n this.selected = t;\n this.templateSelected.emit(t);\n}\n\n\n isSelected(t: any) {\n return this.selected && String(this.selected.id) === String(t.id);\n }\n\n getName(t: any): string {\n const lang = this.tr.currentLang || 'ar';\n return (lang.startsWith('ar') ? (t.nameAr || t.nameEn) : (t.nameEn || t.nameAr)) || '';\n }\n\n toggleFav(t: any) {\n const payload: any = { ...t, isFav: !t.isFav };\n\n this.svc.update(String(t.id), payload).subscribe({\n next: (u: any) => (t.isFav = u?.isFav ?? payload.isFav),\n error: () => this.swal.error(this.tr.instant('ERROR_TITLE'), this.tr.instant('OPERATION_FAILED')),\n });\n }\n\n confirmDelete(t: any) {\n this.swal.confirm(\n this.tr.instant('DELETE_CONFIRM_TITLE'),\n this.tr.instant('DELETE_CONFIRM_MESSAGE'),\n this.tr.instant('COMMON.DELETE')\n ).then((r: any) => {\n if (!r?.isConfirmed) return;\n this.deleteTemplate(t);\n });\n}\n\nprivate deleteTemplate(t: any) {\n // مهم: نفس إعدادات الاستدعاءات الثانية\n this.svc.apiName = this.apiName;\n this.svc.moduleName = this.module;\n\n // ✅ استدعاء Endpoint الحذف\n // ملاحظة: اسم الميثود يعتمد على BaseService عندكم:\n // غالباً delete(id) أو remove(id)\n const id = String(t.id);\n\n (this.svc as any).delete(id).subscribe({\n next: () => {\n // حدّث القائمة محلياً\n this.templates = this.templates.filter(x => String(x.id) !== id);\n\n // لو المحذوف هو المحدد\n if (this.selected && String(this.selected.id) === id) {\n this.selected = null;\n this.templateSelected.emit(null);\n }\n\n this.swal.toast(\n this.tr.instant('RECORD_DELETED_SUCCESSFULLY'),\n );\n },\n error: () =>\n this.swal.error(this.tr.instant('ERROR_TITLE'), this.tr.instant('OPERATION_FAILED')),\n });\n}\n\n\n onVisibleChange(v: boolean) {\n this.visible = v;\n this.visibleChange.emit(v);\n }\n\n clearSelection() {\n this.selected = null;\n this.templateSelected.emit(null); // ✅ يبلغ الأب: ما عاد فيه قالب\n}\n\n\n\nopenTemplateCreate() {\n this.templateEditorMode = 'create';\n this.templateEditorModel = {\n isActive: true,\n shareScope: 'ALL',\n };\n this.templateEditorVisible = true;\n}\n\nopenTemplateEdit(t: any) {\n this.templateEditorMode = 'edit';\n this.templateEditorModel = { ...t };\n this.templateEditorVisible = true;\n}\n\nonTemplateSaved(saved: any) {\n this.refresh(); // ✅ هو نفسه يحدث القائمة\n this.templateEditorVisible = false;\n}\n\n}\n","import { Injectable, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable()\nexport class CrudContextService {\n // استخدام Signals لأداء أسرع\n moduleName = signal<string>('');\n category = signal<string>('');\n feature = signal<string>('');\n filters = signal<any[]>([]);\n templateDrawerVisible = signal<boolean>(false);\n\n // حدث يطلق عند اختيار قالب\n templateSelected$ = new Subject<any>();\n\n openTemplates() { this.templateDrawerVisible.set(true); }\n closeTemplates() { this.templateDrawerVisible.set(false); }\n}\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SavedReportTemplatesDrawerComponent } from './report-templates-drawer.component';\nimport { CrudContextService } from './CrudContextService';\n\n@Component({\n selector: 'app-report-templates-wrapper',\n standalone: true,\n imports: [CommonModule, SavedReportTemplatesDrawerComponent],\n template: `\n <saved-report-templates-drawer\n [visible]=\"context.templateDrawerVisible()\"\n [filterFields]=\"context.filters()\"\n [service]=\"context.moduleName()\"\n [category]=\"context.category()\"\n [feature]=\"context.feature()\"\n (templateSelected)=\"onSelect($event)\">\n </saved-report-templates-drawer>\n `\n})\nexport class ReportTemplatesWrapperComponent {\n context = inject(CrudContextService); // يحصل على نفس النسخة الخاصة بالجدول الأب\n\n onSelect(template: any) {\n this.context.templateSelected$.next(template);\n this.context.closeTemplates();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -173,32 +173,91 @@ class GenericSelectorTypeComponent extends FieldType {
173
173
  this.loading = true;
174
174
  const vf = this.to['valueField'] || 'id';
175
175
  const fixedFilters = this.getFixedFilters();
176
- const lf = this.to['loadDefaultField'] || 'isDefault';
177
- const lfValue = this.to['loadDefaultValue'] || true;
178
- const searchParams = {
179
- [lf]: lfValue,
180
- ...fixedFilters,
181
- };
182
- this.api.getList(searchParams)
176
+ let listEndpoint = this.props.listEndpoint;
177
+ if (typeof listEndpoint === 'function') {
178
+ listEndpoint = listEndpoint(this.model);
179
+ }
180
+ let searchParams = {};
181
+ // ✅ CASE 1: defaultQuery exists (FULL dynamic query like search)
182
+ if (this.to['defaultQuery']) {
183
+ const dq = this.to['defaultQuery'];
184
+ const queryParams = {
185
+ filters: [],
186
+ orderBy: dq.orderBy ?? [],
187
+ groupBy: dq.groupBy ?? [],
188
+ expand: dq.expand ?? [],
189
+ select: dq.select ?? [],
190
+ top: dq.top ?? 1, // 👈 important for default (only 1)
191
+ skip: dq.skip ?? 0,
192
+ };
193
+ // 🔹 Execute filters (function or static)
194
+ let dynamicFilters = [];
195
+ if (dq.filters) {
196
+ if (typeof dq.filters === 'function') {
197
+ dynamicFilters = dq.filters('', this.field); // 👈 no search text
198
+ }
199
+ else if (Array.isArray(dq.filters)) {
200
+ dynamicFilters = dq.filters;
201
+ }
202
+ }
203
+ // 🔹 Add dynamic filters
204
+ dynamicFilters.forEach((fg, index) => {
205
+ if (index === 0 && queryParams.filters.length === 0) {
206
+ queryParams.filters.push(fg);
207
+ }
208
+ else {
209
+ queryParams.filters.push({
210
+ ...fg,
211
+ groupLogicalOperator: fg.groupLogicalOperator || 'and',
212
+ });
213
+ }
214
+ });
215
+ // 🔹 Merge fixed filters
216
+ if (fixedFilters) {
217
+ const fixedGroup = {
218
+ logicalOperator: 'and',
219
+ conditions: Object.keys(fixedFilters).map(key => ({
220
+ field: key,
221
+ operator: 'eq',
222
+ value: fixedFilters[key],
223
+ })),
224
+ };
225
+ queryParams.filters.push({
226
+ ...fixedGroup,
227
+ groupLogicalOperator: 'and',
228
+ });
229
+ }
230
+ searchParams = {
231
+ query: QueryParser.toString(queryParams),
232
+ };
233
+ }
234
+ // ✅ CASE 2: fallback (old behavior)
235
+ else {
236
+ const lf = this.to['loadDefaultField'] || 'isDefault';
237
+ const lfValue = this.to['loadDefaultValue'] ?? true;
238
+ searchParams = {
239
+ [lf]: lfValue,
240
+ ...fixedFilters,
241
+ };
242
+ }
243
+ // 🚀 Call API
244
+ this.api.getList(searchParams, listEndpoint)
183
245
  .subscribe({
184
246
  next: (res) => {
185
- // Assuming the API returns a list and you want to select the first one
186
- if (res && res.items && res.items.length > 0) {
247
+ const items = res?.items ?? res ?? [];
248
+ if (items.length > 0) {
187
249
  if (this.to['multiple']) {
188
- this.formControl.setValue(res.items.map((c) => c[vf]));
250
+ this.formControl.setValue(items.map((c) => c[vf]));
189
251
  }
190
252
  else {
191
- const defaultValue = res.items[0];
192
- this.formControl.setValue(defaultValue?.[vf]);
253
+ this.formControl.setValue(items[0]?.[vf]);
193
254
  }
194
255
  }
195
256
  this.loading = false;
196
- // this.initOnlineSelection(); // Proceed with online selection after setting the value
197
257
  },
198
258
  error: (err) => {
199
259
  console.error("Failed to load default value from API:", err);
200
260
  this.loading = false;
201
- // this.initOnlineSelection(); // Fallback to local selection if API fails
202
261
  }
203
262
  });
204
263
  }
@@ -1 +1 @@
1
- {"version":3,"file":"es.framework-ng.ui.core-generic-selector.mjs","sources":["../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector-module.ts","../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector.component.ts","../../../../libs/ng.ui.core/generic-selector/src/es.framework-ng.ui.core-generic-selector.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericSelectorModule {}\n","import { ChangeDetectorRef, Component, Injector, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { finalize, map, tap } from 'rxjs/operators';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { BaseService, FilterGroup, LocalizationService, QueryParameters, QueryParser } from '@es.framework/ng.core/services';\r\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { FormlyFieldConfig, FieldType, FormlyAttributes, FieldTypeConfig } from '@ngx-formly/core';\r\n\r\ninterface GenericSelectorProps extends FormlyFieldProps/* , FormlyFieldSelectProps */ {\r\n // appendTo?: Select['appendTo'];\r\n moduleName: string;\r\n serviceName: string;\r\n listEndpoint?: string | ((model: any) => string);\r\n loadDefaultField?: string;\r\n loadDefaultValue?: string;\r\n loadDefault?: boolean;\r\n\r\n labelField?: string;\r\n labelFieldEn?: string;\r\n valueField?: string;\r\n useMultiLang?: boolean;\r\n\r\n multiple?: boolean;\r\n\r\n display?: boolean;\r\n offline?: boolean;\r\n\r\n loadSaved?: boolean;\r\n loadSavedField?: string;\r\n\r\n\r\n /** Static offline items (array of objects) */\r\n offlineItems?: any[];\r\n\r\n /** Async offline items (observable) */\r\n offlineItems$?: Observable<any[]>;\r\n\r\n /** Function-based filter for offline items */\r\n onSelect?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n offlineDataFn?: (query?: string) => any[];\r\n query?: Record<string, any> | QueryParameters;\r\n fixedFilters?: Record<string, any>;\r\n defaultValue?: any; // id أو array of ids\r\n defaultItem?: any; // الكائن كامل (object) إذا عندك جاهز\r\n\r\n viewPermissionName?: string;\r\n editPermissionName?: string;\r\n addPermissionName?: string;\r\n idField?: string;\r\n dialogDisplayMode?: | 'drawer'\r\n | 'dialog'\r\n | 'route'\r\n | 'inline'\r\n | Partial<\r\n Record<\r\n 'add' | 'edit' | 'view',\r\n 'drawer' | 'dialog' | 'route' | 'inline'\r\n >>;\r\n canAdd?: boolean;\r\n canLookup?: boolean;\r\n formFields?: FormlyFieldConfig[];\r\n afterSave?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n formatter?: (row: any, value?: any) => string;\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'formly-generic-selector',\r\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"!(props['required'] ?? false)\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span [innerHTML]=\"getFormattedLabel(item)\"></span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [moduleName]=\"props.moduleName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\r\n providers: [DialogService,BaseService],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n AutoCompleteModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FormlyAttributes,\r\n TranslatePipe,\r\n AutoComplete,\r\n CheckboxModule,\r\n ButtonModule,\r\n GenericDialogComponent\r\n]\r\n})\r\nexport class GenericSelectorTypeComponent extends FieldType<FieldTypeConfig<GenericSelectorProps>> implements OnInit,OnDestroy {\r\n @ViewChild('autoComp') autoComp!: AutoComplete;\r\n @ViewChild('dialog') dialog!: GenericDialogComponent;\r\n options_: any[] = [];\r\n selectedItem: any;\r\n\r\n loading = false;\r\n private _offlineList: any[] = [];\r\n private translateService= inject(LocalizationService);\r\n\r\n api: BaseService|any;\r\n private valueChangeSubscription!: Subscription; // Add a subscription to manage the observable\r\n\r\nget optionLabel(): string {\r\n if(this.to.useMultiLang == true){\r\n if(this.translateService.currentLang == 'en'){\r\n return this.to?.labelFieldEn || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n}\r\n\r\nprivate isNullOrEmpty(val: any): boolean {\r\n return val === null || val === undefined || val === '';\r\n}\r\n getFormattedLabel(item: any): SafeHtml {\r\n if (!item) return '';\r\n\r\n let value: string;\r\n\r\n // Use the formatter if provided\r\n if (this.to?.formatter) {\r\n value = this.to.formatter(item);\r\n } else {\r\n value = this.getPrimaryLabel(item);\r\n }\r\n\r\n // Sanitize it for safe HTML\r\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\r\n }\r\ngetPrimaryLabel(item: any): string {\r\n const fields = [\r\n this.optionLabel, // resolved field name from getter\r\n this.to.labelField || 'name',\r\n this.to.labelFieldEn || 'name'\r\n ];\r\n\r\n for (const f of fields) {\r\n const v = item[f];\r\n if (!this.isNullOrEmpty(v)) {\r\n return v;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n constructor(private svc: BaseService,private injector: Injector,private cdr: ChangeDetectorRef) {\r\n super();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.api = this.svc;\r\n const to = this.props;\r\n this.api.apiName = to['serviceName'];\r\n this.api.moduleName = to['moduleName'];\r\n\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection();\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection();\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection();\r\n }\r\n } else {\r\n\r\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\r\n const vf = this.to['valueField'] || 'id';\r\n const lf = this.optionLabel;\r\n this.selectedItem =\r\n {\r\n [vf]:this.formControl.value,\r\n [lf]:this.model[this.props.loadSavedField],\r\n };\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n else{\r\n\r\n this.initOnlineSelection();\r\n }\r\n }\r\n\r\n // Subscribe to formControl value changes\r\n this.valueChangeSubscription = this.formControl.valueChanges\r\n .subscribe(() => {\r\n // This tap operator is a good place to run side effects\r\n // like calling your change handler after a value changes.\r\n // this.selectedItem = this.formControl.value;\r\n if (this.props.change) {\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection(false);\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection(false);\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection(false);\r\n }\r\n } else {\r\n this.initOnlineSelection(false);\r\n }\r\n }\r\n })\r\n ;\r\n }\r\n\r\n // Remember to unsubscribe to prevent memory leaks!\r\n ngOnDestroy() {\r\n if (this.valueChangeSubscription) {\r\n this.valueChangeSubscription.unsubscribe();\r\n }\r\n }\r\nprivate loadDefaultValue() {\r\n this.loading = true;\r\n const vf = this.to['valueField'] || 'id';\r\n const fixedFilters = this.getFixedFilters();\r\n const lf = this.to['loadDefaultField'] || 'isDefault';\r\n const lfValue = this.to['loadDefaultValue'] || true;\r\nconst searchParams = {\r\n [lf]: lfValue,\r\n ...fixedFilters,\r\n };\r\n this.api.getList(searchParams)\r\n .subscribe({\r\n next: (res: any) => {\r\n // Assuming the API returns a list and you want to select the first one\r\n if (res && res.items && res.items.length > 0) {\r\n if (this.to['multiple']){\r\n this.formControl.setValue(res.items.map((c: any) => c[vf]));\r\n }\r\n else{\r\n const defaultValue = res.items[0];\r\n this.formControl.setValue(defaultValue?.[vf]);\r\n }\r\n }\r\n this.loading = false;\r\n // this.initOnlineSelection(); // Proceed with online selection after setting the value\r\n },\r\n error: (err: any) => {\r\n console.error(\"Failed to load default value from API:\", err);\r\n this.loading = false;\r\n // this.initOnlineSelection(); // Fallback to local selection if API fails\r\n }\r\n });\r\n}\r\n // New method to handle loading the default value from the API\r\n\r\n afterSave(event: any) {\r\n this.onSelectionChange(event.record);\r\n if (this.props.afterSave) {\r\n this.props.afterSave(this.field, { item: event.response });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelect(event: any) {\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(this.field, { item: event.value });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelectionChange(val: any) {\r\n const vf = this.to['valueField'] || 'id';\r\n if(this.to['offline']){\r\n // this.selectedItem = val;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n this.formControl.setValue(\r\n Array.isArray(this.selectedItem) ? this.selectedItem.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\r\n }\r\n }\r\n else{\r\n this.selectedItem = val;\r\n\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(\r\n Array.isArray(val) ? val.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.formControl.setValue(val?.[vf] ?? null);\r\n }\r\n }\r\n\r\n}\r\n private initOfflineSelection(withSetValue=true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null) return;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n }\r\n\r\n if(withSetValue == true){\r\n\r\n this.formControl.setValue(\r\n this.to['multiple']\r\n ? this.selectedItem.map((c: any) => c[vf])\r\n : this.selectedItem?.[vf]\r\n );\r\n }\r\n else{\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n private initOnlineSelection(withSetValue = true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null || (Array.isArray(val) && val.length === 0)) {\r\n this.selectedItem = this.to['multiple'] ? [] : null;\r\n\r\n if (this.props['loadDefault'] === true) {\r\n this.loadDefaultValue();\r\n }\r\n return;\r\n }\r\n\r\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n // 🔑 one getList call per id, but include fixedFilters in each\r\n const calls = val.map((id: any) =>\r\n this.api.getList({ ...fixedFilters, [vf]: id }).pipe(\r\n map((res: any) => (res?.items?.length ? res.items[0] : null))\r\n )\r\n );\r\n\r\n forkJoin(calls)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (items: any[]) => {\r\n this.selectedItem = items.filter(i => i != null);\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(this.selectedItem.map((c: any) => c[vf]));\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load multiple selections:', err);\r\n this.selectedItem = [];\r\n this.loading = false;\r\n },\r\n });\r\n } else {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n const searchParams = { ...fixedFilters, [vf]: val };\r\n\r\n this.api\r\n .getList(searchParams)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n const item = res?.items?.[0] || null;\r\n this.selectedItem = item;\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(item?.[vf]);\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load selection:', err);\r\n this.selectedItem = null;\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\ngetFixedFilters(query:string=''): any {\r\n const fixedFilters = this.to['fixedFilters'];\r\n\r\n if (typeof fixedFilters === 'function') {\r\n // Call with current model (and optionally field)\r\n try {\r\n return fixedFilters(query, this.field);\r\n } catch (error) {\r\n return fixedFilters(this.model);\r\n }\r\n }\r\n\r\n return fixedFilters || {};\r\n }\r\n\r\nonArrowDown(event: any) {\r\n event.preventDefault();\r\n // this.autoComp.show();\r\nthis.onDropdownButtonClick();\r\n}\r\n\r\nonEscape(event: any) {\r\n this.autoComp.hide();\r\n\r\n}\r\nonAddNewClick() {\r\n // your logic for adding a new item\r\n // e.g. open dialog or emit event\r\n console.log('Add new item clicked');\r\n this.dialog.openForm(\"create\");\r\n}\r\nonDropdownButtonClick() {\r\n this.search({ query: '' }); // trigger your own search\r\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\r\n}\r\n// Called when dropdown button clicked\r\n onDropdownClick(event: any) {\r\n // 🚫 stop the default dropdown behavior\r\n event.originalEvent.preventDefault();\r\n event.originalEvent.stopPropagation();\r\n\r\n console.log('Dropdown clicked!', event);\r\n // ✅ your custom code here\r\n // e.g., force trigger search for empty query\r\n this.search({ query: '' });\r\n }\r\n\r\n\r\n\r\n\r\nsearch(event: { query: string }) {\r\n const q = event.query?.toString() || '';\r\n const lf = this.optionLabel;\r\n const fixedFilters = this.getFixedFilters(q);\r\n\r\n if (this.to['offline']) {\r\n this.options_ = this.to['offlineDataFn']\r\n ? this.to['offlineDataFn'](q)\r\n : this._offlineList.filter(item =>\r\n item[lf]?.toString().includes(q)\r\n );\r\n\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n } else {\r\n this.loading = true;\r\n this.options_ = [];\r\n\r\n // Build QueryParameters\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: [],\r\n groupBy: [],\r\n expand:[],\r\n select:[],\r\n top: 10,\r\n skip: 0,\r\n };\r\n\r\n // Handle main search and fixed filters\r\n if (!this.to['query']) {\r\n // Create a group for main search condition\r\n const mainGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: [\r\n {\r\n field: lf,\r\n operator: 'contains',\r\n value: q\r\n }\r\n ]\r\n };\r\n\r\n // Add fixed filters to the same group\r\n Object.keys(fixedFilters || {}).forEach(key => {\r\n const value = fixedFilters[key];\r\n if (value !== null && value !== undefined) {\r\n mainGroup.conditions.push({\r\n field: key,\r\n operator: 'eq',\r\n value: value\r\n });\r\n }\r\n });\r\n\r\n if (mainGroup.conditions.length > 0) {\r\n queryParams.filters.push(mainGroup);\r\n }\r\n }\r\n else{\r\n\r\n queryParams.skip = this.to['query'].skip ?? 0;\r\n queryParams.top = this.to['query'].top ?? 10;\r\n queryParams.orderBy = this.to['query'].orderBy;\r\n queryParams.groupBy = this.to['query'].groupBy;\r\n queryParams.expand = this.to['query'].expand;\r\n queryParams.select = this.to['query'].select;\r\n\r\n }\r\n\r\n // Merge dynamic filters (function or array)\r\n let dynamicFilters: FilterGroup[] | any[] = [];\r\n if(this.to['query'] && this.to['query']['filters']){\r\n\r\n const filtersProp = this.to['query']['filters'];\r\n if (typeof filtersProp === 'function') {\r\n dynamicFilters = filtersProp(q,this.field); // pass search text\r\n } else if (Array.isArray(filtersProp)) {\r\n dynamicFilters = filtersProp;\r\n }\r\n }\r\n // Add dynamic filters with proper groupLogicalOperator\r\n dynamicFilters.forEach((filterGroup, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n // First filter group, no groupLogicalOperator needed\r\n queryParams.filters.push(filterGroup);\r\n } else {\r\n // Subsequent groups, ensure they have groupLogicalOperator\r\n const groupWithOperator = {\r\n ...filterGroup,\r\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\r\n };\r\n queryParams.filters.push(groupWithOperator);\r\n }\r\n });\r\n\r\n // Use listEndpoint if available, otherwise use default\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n const searchParams: Record<string, any> = {\r\n 'query': QueryParser.toString(queryParams)\r\n };\r\n\r\n this.api.getList(searchParams, listEndpoint)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.options_ = res.items ?? res ?? [];\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n },\r\n error: () => {\r\n this.options_ = [];\r\n },\r\n });\r\n }\r\n}\r\n\r\n openCrud(mode: 'add' | 'edit' | 'info') {\r\n const payload = mode === 'add' ? null : this.selectedItem;\r\n\r\n // Example integration:\r\n // const ref = this.dialog.open(CrudComponent, {\r\n // data: {\r\n // serviceName: this.to.serviceName,\r\n // mode,\r\n // record: payload\r\n // }\r\n // });\r\n // ref.onClose.subscribe((updated: any) => {\r\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\r\n // this.api.get(updated[this.to.valueField])\r\n // .subscribe(item => {\r\n // this.selectedItem = item;\r\n // this.formControl.setValue(item?.[this.to.valueField]);\r\n // });\r\n // }\r\n // });\r\n\r\n }\r\n\r\n getEmptyMessage(): string {\r\n if (this.loading) {\r\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\r\n } else if (this.options_.length === 0) {\r\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\r\n }\r\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\r\n }\r\n\r\nisItemSelected(item: any): boolean {\r\n const vf = this.to['valueField'] || 'id';\r\n return Array.isArray(this.selectedItem) &&\r\n this.selectedItem.some((sel: any) => sel[vf] === item[vf]);\r\n}\r\n\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"es.framework-ng.ui.core-generic-selector.mjs","sources":["../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector-module.ts","../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector.component.ts","../../../../libs/ng.ui.core/generic-selector/src/es.framework-ng.ui.core-generic-selector.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericSelectorModule {}\n","import { ChangeDetectorRef, Component, Injector, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { finalize, map, tap } from 'rxjs/operators';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { BaseService, FilterGroup, LocalizationService, QueryParameters, QueryParser } from '@es.framework/ng.core/services';\r\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { FormlyFieldConfig, FieldType, FormlyAttributes, FieldTypeConfig } from '@ngx-formly/core';\r\n\r\ninterface GenericSelectorProps extends FormlyFieldProps/* , FormlyFieldSelectProps */ {\r\n // appendTo?: Select['appendTo'];\r\n moduleName: string;\r\n serviceName: string;\r\n listEndpoint?: string | ((model: any) => string);\r\n loadDefaultField?: string;\r\n loadDefaultValue?: string;\r\n loadDefault?: boolean;\r\n defaultQuery?: Record<string, any> | QueryParameters;\r\n\r\n labelField?: string;\r\n labelFieldEn?: string;\r\n valueField?: string;\r\n useMultiLang?: boolean;\r\n\r\n multiple?: boolean;\r\n\r\n display?: boolean;\r\n offline?: boolean;\r\n\r\n loadSaved?: boolean;\r\n loadSavedField?: string;\r\n\r\n\r\n /** Static offline items (array of objects) */\r\n offlineItems?: any[];\r\n\r\n /** Async offline items (observable) */\r\n offlineItems$?: Observable<any[]>;\r\n\r\n /** Function-based filter for offline items */\r\n onSelect?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n offlineDataFn?: (query?: string) => any[];\r\n query?: Record<string, any> | QueryParameters;\r\n fixedFilters?: Record<string, any>;\r\n defaultValue?: any; // id أو array of ids\r\n defaultItem?: any; // الكائن كامل (object) إذا عندك جاهز\r\n\r\n viewPermissionName?: string;\r\n editPermissionName?: string;\r\n addPermissionName?: string;\r\n idField?: string;\r\n dialogDisplayMode?: | 'drawer'\r\n | 'dialog'\r\n | 'route'\r\n | 'inline'\r\n | Partial<\r\n Record<\r\n 'add' | 'edit' | 'view',\r\n 'drawer' | 'dialog' | 'route' | 'inline'\r\n >>;\r\n canAdd?: boolean;\r\n canLookup?: boolean;\r\n formFields?: FormlyFieldConfig[];\r\n afterSave?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n formatter?: (row: any, value?: any) => string;\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'formly-generic-selector',\r\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"!(props['required'] ?? false)\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span [innerHTML]=\"getFormattedLabel(item)\"></span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [moduleName]=\"props.moduleName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\r\n providers: [DialogService,BaseService],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n AutoCompleteModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FormlyAttributes,\r\n TranslatePipe,\r\n AutoComplete,\r\n CheckboxModule,\r\n ButtonModule,\r\n GenericDialogComponent\r\n]\r\n})\r\nexport class GenericSelectorTypeComponent extends FieldType<FieldTypeConfig<GenericSelectorProps>> implements OnInit,OnDestroy {\r\n @ViewChild('autoComp') autoComp!: AutoComplete;\r\n @ViewChild('dialog') dialog!: GenericDialogComponent;\r\n options_: any[] = [];\r\n selectedItem: any;\r\n\r\n loading = false;\r\n private _offlineList: any[] = [];\r\n private translateService= inject(LocalizationService);\r\n\r\n api: BaseService|any;\r\n private valueChangeSubscription!: Subscription; // Add a subscription to manage the observable\r\n\r\nget optionLabel(): string {\r\n if(this.to.useMultiLang == true){\r\n if(this.translateService.currentLang == 'en'){\r\n return this.to?.labelFieldEn || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n}\r\n\r\nprivate isNullOrEmpty(val: any): boolean {\r\n return val === null || val === undefined || val === '';\r\n}\r\n getFormattedLabel(item: any): SafeHtml {\r\n if (!item) return '';\r\n\r\n let value: string;\r\n\r\n // Use the formatter if provided\r\n if (this.to?.formatter) {\r\n value = this.to.formatter(item);\r\n } else {\r\n value = this.getPrimaryLabel(item);\r\n }\r\n\r\n // Sanitize it for safe HTML\r\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\r\n }\r\ngetPrimaryLabel(item: any): string {\r\n const fields = [\r\n this.optionLabel, // resolved field name from getter\r\n this.to.labelField || 'name',\r\n this.to.labelFieldEn || 'name'\r\n ];\r\n\r\n for (const f of fields) {\r\n const v = item[f];\r\n if (!this.isNullOrEmpty(v)) {\r\n return v;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n constructor(private svc: BaseService,private injector: Injector,private cdr: ChangeDetectorRef) {\r\n super();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.api = this.svc;\r\n const to = this.props;\r\n this.api.apiName = to['serviceName'];\r\n this.api.moduleName = to['moduleName'];\r\n\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection();\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection();\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection();\r\n }\r\n } else {\r\n\r\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\r\n const vf = this.to['valueField'] || 'id';\r\n const lf = this.optionLabel;\r\n this.selectedItem =\r\n {\r\n [vf]:this.formControl.value,\r\n [lf]:this.model[this.props.loadSavedField],\r\n };\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n else{\r\n\r\n this.initOnlineSelection();\r\n }\r\n }\r\n\r\n // Subscribe to formControl value changes\r\n this.valueChangeSubscription = this.formControl.valueChanges\r\n .subscribe(() => {\r\n // This tap operator is a good place to run side effects\r\n // like calling your change handler after a value changes.\r\n // this.selectedItem = this.formControl.value;\r\n if (this.props.change) {\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection(false);\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection(false);\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection(false);\r\n }\r\n } else {\r\n this.initOnlineSelection(false);\r\n }\r\n }\r\n })\r\n ;\r\n }\r\n\r\n // Remember to unsubscribe to prevent memory leaks!\r\n ngOnDestroy() {\r\n if (this.valueChangeSubscription) {\r\n this.valueChangeSubscription.unsubscribe();\r\n }\r\n }\r\nprivate loadDefaultValue() {\r\n this.loading = true;\r\n\r\n const vf = this.to['valueField'] || 'id';\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n let searchParams: Record<string, any> = {};\r\n\r\n // ✅ CASE 1: defaultQuery exists (FULL dynamic query like search)\r\n if (this.to['defaultQuery']) {\r\n const dq = this.to['defaultQuery'];\r\n\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: dq.orderBy ?? [],\r\n groupBy: dq.groupBy ?? [],\r\n expand: dq.expand ?? [],\r\n select: dq.select ?? [],\r\n top: dq.top ?? 1, // 👈 important for default (only 1)\r\n skip: dq.skip ?? 0,\r\n };\r\n\r\n // 🔹 Execute filters (function or static)\r\n let dynamicFilters: FilterGroup[] = [];\r\n\r\n if (dq.filters) {\r\n if (typeof dq.filters === 'function') {\r\n dynamicFilters = dq.filters('', this.field); // 👈 no search text\r\n } else if (Array.isArray(dq.filters)) {\r\n dynamicFilters = dq.filters;\r\n }\r\n }\r\n\r\n // 🔹 Add dynamic filters\r\n dynamicFilters.forEach((fg, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n queryParams.filters.push(fg);\r\n } else {\r\n queryParams.filters.push({\r\n ...fg,\r\n groupLogicalOperator: fg.groupLogicalOperator || 'and',\r\n });\r\n }\r\n });\r\n\r\n // 🔹 Merge fixed filters\r\n if (fixedFilters) {\r\n const fixedGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: Object.keys(fixedFilters).map(key => ({\r\n field: key,\r\n operator: 'eq',\r\n value: fixedFilters[key],\r\n })),\r\n };\r\n\r\n queryParams.filters.push({\r\n ...fixedGroup,\r\n groupLogicalOperator: 'and',\r\n });\r\n }\r\n\r\n searchParams = {\r\n query: QueryParser.toString(queryParams),\r\n };\r\n }\r\n\r\n // ✅ CASE 2: fallback (old behavior)\r\n else {\r\n const lf = this.to['loadDefaultField'] || 'isDefault';\r\n const lfValue = this.to['loadDefaultValue'] ?? true;\r\n\r\n searchParams = {\r\n [lf]: lfValue,\r\n ...fixedFilters,\r\n };\r\n }\r\n\r\n // 🚀 Call API\r\n this.api.getList(searchParams, listEndpoint)\r\n .subscribe({\r\n next: (res: any) => {\r\n const items = res?.items ?? res ?? [];\r\n\r\n if (items.length > 0) {\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(items.map((c: any) => c[vf]));\r\n } else {\r\n this.formControl.setValue(items[0]?.[vf]);\r\n }\r\n }\r\n\r\n this.loading = false;\r\n },\r\n error: (err: any) => {\r\n console.error(\"Failed to load default value from API:\", err);\r\n this.loading = false;\r\n }\r\n });\r\n}\r\n // New method to handle loading the default value from the API\r\n\r\n afterSave(event: any) {\r\n this.onSelectionChange(event.record);\r\n if (this.props.afterSave) {\r\n this.props.afterSave(this.field, { item: event.response });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelect(event: any) {\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(this.field, { item: event.value });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelectionChange(val: any) {\r\n const vf = this.to['valueField'] || 'id';\r\n if(this.to['offline']){\r\n // this.selectedItem = val;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n this.formControl.setValue(\r\n Array.isArray(this.selectedItem) ? this.selectedItem.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\r\n }\r\n }\r\n else{\r\n this.selectedItem = val;\r\n\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(\r\n Array.isArray(val) ? val.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.formControl.setValue(val?.[vf] ?? null);\r\n }\r\n }\r\n\r\n}\r\n private initOfflineSelection(withSetValue=true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null) return;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n }\r\n\r\n if(withSetValue == true){\r\n\r\n this.formControl.setValue(\r\n this.to['multiple']\r\n ? this.selectedItem.map((c: any) => c[vf])\r\n : this.selectedItem?.[vf]\r\n );\r\n }\r\n else{\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n private initOnlineSelection(withSetValue = true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null || (Array.isArray(val) && val.length === 0)) {\r\n this.selectedItem = this.to['multiple'] ? [] : null;\r\n\r\n if (this.props['loadDefault'] === true) {\r\n this.loadDefaultValue();\r\n }\r\n return;\r\n }\r\n\r\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n // 🔑 one getList call per id, but include fixedFilters in each\r\n const calls = val.map((id: any) =>\r\n this.api.getList({ ...fixedFilters, [vf]: id }).pipe(\r\n map((res: any) => (res?.items?.length ? res.items[0] : null))\r\n )\r\n );\r\n\r\n forkJoin(calls)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (items: any[]) => {\r\n this.selectedItem = items.filter(i => i != null);\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(this.selectedItem.map((c: any) => c[vf]));\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load multiple selections:', err);\r\n this.selectedItem = [];\r\n this.loading = false;\r\n },\r\n });\r\n } else {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n const searchParams = { ...fixedFilters, [vf]: val };\r\n\r\n this.api\r\n .getList(searchParams)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n const item = res?.items?.[0] || null;\r\n this.selectedItem = item;\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(item?.[vf]);\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load selection:', err);\r\n this.selectedItem = null;\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\ngetFixedFilters(query:string=''): any {\r\n const fixedFilters = this.to['fixedFilters'];\r\n\r\n if (typeof fixedFilters === 'function') {\r\n // Call with current model (and optionally field)\r\n try {\r\n return fixedFilters(query, this.field);\r\n } catch (error) {\r\n return fixedFilters(this.model);\r\n }\r\n }\r\n\r\n return fixedFilters || {};\r\n }\r\n\r\nonArrowDown(event: any) {\r\n event.preventDefault();\r\n // this.autoComp.show();\r\nthis.onDropdownButtonClick();\r\n}\r\n\r\nonEscape(event: any) {\r\n this.autoComp.hide();\r\n\r\n}\r\nonAddNewClick() {\r\n // your logic for adding a new item\r\n // e.g. open dialog or emit event\r\n console.log('Add new item clicked');\r\n this.dialog.openForm(\"create\");\r\n}\r\nonDropdownButtonClick() {\r\n this.search({ query: '' }); // trigger your own search\r\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\r\n}\r\n// Called when dropdown button clicked\r\n onDropdownClick(event: any) {\r\n // 🚫 stop the default dropdown behavior\r\n event.originalEvent.preventDefault();\r\n event.originalEvent.stopPropagation();\r\n\r\n console.log('Dropdown clicked!', event);\r\n // ✅ your custom code here\r\n // e.g., force trigger search for empty query\r\n this.search({ query: '' });\r\n }\r\n\r\n\r\n\r\n\r\nsearch(event: { query: string }) {\r\n const q = event.query?.toString() || '';\r\n const lf = this.optionLabel;\r\n const fixedFilters = this.getFixedFilters(q);\r\n\r\n if (this.to['offline']) {\r\n this.options_ = this.to['offlineDataFn']\r\n ? this.to['offlineDataFn'](q)\r\n : this._offlineList.filter(item =>\r\n item[lf]?.toString().includes(q)\r\n );\r\n\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n } else {\r\n this.loading = true;\r\n this.options_ = [];\r\n\r\n // Build QueryParameters\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: [],\r\n groupBy: [],\r\n expand:[],\r\n select:[],\r\n top: 10,\r\n skip: 0,\r\n };\r\n\r\n // Handle main search and fixed filters\r\n if (!this.to['query']) {\r\n // Create a group for main search condition\r\n const mainGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: [\r\n {\r\n field: lf,\r\n operator: 'contains',\r\n value: q\r\n }\r\n ]\r\n };\r\n\r\n // Add fixed filters to the same group\r\n Object.keys(fixedFilters || {}).forEach(key => {\r\n const value = fixedFilters[key];\r\n if (value !== null && value !== undefined) {\r\n mainGroup.conditions.push({\r\n field: key,\r\n operator: 'eq',\r\n value: value\r\n });\r\n }\r\n });\r\n\r\n if (mainGroup.conditions.length > 0) {\r\n queryParams.filters.push(mainGroup);\r\n }\r\n }\r\n else{\r\n\r\n queryParams.skip = this.to['query'].skip ?? 0;\r\n queryParams.top = this.to['query'].top ?? 10;\r\n queryParams.orderBy = this.to['query'].orderBy;\r\n queryParams.groupBy = this.to['query'].groupBy;\r\n queryParams.expand = this.to['query'].expand;\r\n queryParams.select = this.to['query'].select;\r\n\r\n }\r\n\r\n // Merge dynamic filters (function or array)\r\n let dynamicFilters: FilterGroup[] | any[] = [];\r\n if(this.to['query'] && this.to['query']['filters']){\r\n\r\n const filtersProp = this.to['query']['filters'];\r\n if (typeof filtersProp === 'function') {\r\n dynamicFilters = filtersProp(q,this.field); // pass search text\r\n } else if (Array.isArray(filtersProp)) {\r\n dynamicFilters = filtersProp;\r\n }\r\n }\r\n // Add dynamic filters with proper groupLogicalOperator\r\n dynamicFilters.forEach((filterGroup, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n // First filter group, no groupLogicalOperator needed\r\n queryParams.filters.push(filterGroup);\r\n } else {\r\n // Subsequent groups, ensure they have groupLogicalOperator\r\n const groupWithOperator = {\r\n ...filterGroup,\r\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\r\n };\r\n queryParams.filters.push(groupWithOperator);\r\n }\r\n });\r\n\r\n // Use listEndpoint if available, otherwise use default\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n const searchParams: Record<string, any> = {\r\n 'query': QueryParser.toString(queryParams)\r\n };\r\n\r\n this.api.getList(searchParams, listEndpoint)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.options_ = res.items ?? res ?? [];\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n },\r\n error: () => {\r\n this.options_ = [];\r\n },\r\n });\r\n }\r\n}\r\n\r\n openCrud(mode: 'add' | 'edit' | 'info') {\r\n const payload = mode === 'add' ? null : this.selectedItem;\r\n\r\n // Example integration:\r\n // const ref = this.dialog.open(CrudComponent, {\r\n // data: {\r\n // serviceName: this.to.serviceName,\r\n // mode,\r\n // record: payload\r\n // }\r\n // });\r\n // ref.onClose.subscribe((updated: any) => {\r\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\r\n // this.api.get(updated[this.to.valueField])\r\n // .subscribe(item => {\r\n // this.selectedItem = item;\r\n // this.formControl.setValue(item?.[this.to.valueField]);\r\n // });\r\n // }\r\n // });\r\n\r\n }\r\n\r\n getEmptyMessage(): string {\r\n if (this.loading) {\r\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\r\n } else if (this.options_.length === 0) {\r\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\r\n }\r\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\r\n }\r\n\r\nisItemSelected(item: any): boolean {\r\n const vf = this.to['valueField'] || 'id';\r\n return Array.isArray(this.selectedItem) &&\r\n this.selectedItem.some((sel: any) => sel[vf] === item[vf]);\r\n}\r\n\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@es.framework/ng.ui.core",
3
- "version": "2.0.58",
3
+ "version": "2.0.59",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"