@elite.framework/ng.core 1.0.63 → 2.0.1

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":"elite.framework-ng.core.mjs","sources":["../../../projects/core/src/lib/components/generic-button/generic-button.ts","../../../projects/core/src/lib/components/generic-button/generic-button.html","../../../projects/core/src/lib/components/generic-formly-fields/generic-formly-fields.ts","../../../projects/core/src/lib/components/generic-formly-fields/generic-formly-fields.html","../../../projects/core/src/lib/components/generic-errormessage/generic-errormessage.ts","../../../projects/core/src/lib/components/generic-errormessage/generic-errormessage.html","../../../projects/core/src/lib/components/generic-crud-dialog/generic-crud-dialog.ts","../../../projects/core/src/lib/components/generic-crud-dialog/generic-crud-dialog.html","../../../projects/core/src/lib/components/deactivation-reason/deactivation-reason.ts","../../../projects/core/src/lib/services/SwalService.service.ts","../../../projects/core/src/lib/components/base-crud.ts","../../../projects/core/src/lib/components/InputWithIconType.ts","../../../projects/core/src/lib/components/formly-presets.ts","../../../projects/core/src/elite.framework-ng.core.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { MenuItem } from 'primeng/api';\n\ntype ButtonVariant = 'text' | 'outlined' | 'raised' | 'rounded';\ntype ButtonSeverity = 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' ;\ntype ButtonSize = 'small' | 'normal' | 'large';\ntype IconPosition = 'left' | 'right';\n\n@Component({\n selector: 'lib-generic-button',\n standalone: true,\n imports: [ CommonModule , ButtonModule, SplitButtonModule,/* HasPermissionDirective */],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './generic-button.html',\n})\nexport class GenericButton {\n\n // permissionChecker = inject(PermissionCheckerService);\n\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\n @Input() model?: MenuItem[];\n\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() icon: string = '';\n @Input() label: string = '';\n @Input() variant: ButtonVariant = 'raised';\n @Input() severity: ButtonSeverity = 'primary';\n @Input() size: ButtonSize = 'normal';\n @Input() iconPosition: IconPosition = 'left';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() ariaLabel?: string;\n @Input() extraClasses = ''; // لأي Tailwind إضافي\n @Input() permission?: string;\n @Output() clicked = new EventEmitter<void>();\n @Output() itemClick = new EventEmitter<any>();\n\n\n // خريطة أحجام\n private sizeMap: Record<ButtonSize,string> = {\n small: 'px-2 py-1 text-sm',\n normal: 'px-4 py-2 text-base',\n large: 'px-6 py-3 text-lg',\n };\n\n // خريطة ألوان للـ raised و rounded\n private colorMap: Record<ButtonSeverity,string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n warning: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\n };\n\n // خريطة حدوده للـ outlined\n private outlinedMap: Record<ButtonSeverity,string> = {\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n warning: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\n };\n\n get twClasses(): string {\n const base = [\n 'inline-flex items-center justify-center font-medium',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\n this.sizeMap[this.size]\n ];\n // variant-specific\n if (this.variant === 'outlined') {\n base.push(this.outlinedMap[this.severity]);\n } else {\n base.push(this.colorMap[this.severity]);\n }\n if (this.variant === 'text') {\n base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\n }\n if (this.variant === 'rounded') {\n base.push('rounded-full');\n } else {\n base.push('rounded-md');\n }\n if (this.disabled || this.loading) {\n base.push('opacity-50 cursor-not-allowed');\n }\n if (this.extraClasses) {\n base.push(this.extraClasses);\n }\n return base.join(' ');\n }\n\n onClick() {\n if (!this.disabled && !this.loading) {\n this.clicked.emit();\n }\n }\n\n onItemClick(evt: any) {\n this.itemClick.emit(evt);\n }\n\n // دالة مساعدة لدمج حالة التعطيل مع حالة الصلاحية\n // get isDisabledOrLoadingOrNoPermission(): boolean {\n // // إذا كان الزر معطلاً بشكل صريح أو في حالة تحميل، فهو معطل\n // if (this.disabled || this.loading) {\n // return true;\n // }\n // // إذا تم تحديد صلاحية للزر، تحقق منها\n // if (this.permission) {\n // return !this.permissionChecker.isGranted(this.permission);\n // }\n // // إذا لم يتم تحديد صلاحية، فالزر ليس معطلاً بسبب الصلاحيات\n // return false;\n // }\n\n}\n","\n<!-- generic-button.component.html -->\n <!-- *hasPermission=\"permission\" -->\n<ng-container >\n <ng-container *ngIf=\"model?.length; else simpleBtn\">\n <!-- حالة الـ splitButton -->\n <p-splitButton\n [model]=\"model\"\n [icon]=\"icon\"\n [label]=\"label\"\n [styleClass]=\"twClasses\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n ></p-splitButton>\n </ng-container>\n\n <ng-template #simpleBtn>\n <!-- حالة الزرّ العادي -->\n <button\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label\"\n [ngClass]=\"twClasses\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n\n <!-- محتوى مخصّص -->\n <ng-content *ngIf=\"!label && !icon && !loading\"></ng-content>\n </button>\n </ng-template>\n </ng-container>\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormGroup, FormsModule } from '@angular/forms';\nimport { FormlyFormOptions, FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';\n\n@Component({\n selector: 'lib-generic-formly-fields',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n FormlyForm,\n // FormlyPrimeNGModule,\n ],\n templateUrl: './generic-formly-fields.html',\n})\nexport class GenericFormlyFields implements OnInit, OnChanges {\n /** الـ FormGroup الذي يُدار خارجيًا */\n @Input() form!: FormGroup;\n\n /** حقول Formly */\n @Input() fields: FormlyFieldConfig[] = [];\n\n /** النموذج (object) الذي سيُربط بالحقول */\n @Input() model: any = {};\n\n /** خيارات Formly (validation, hideExpression, ...) */\n @Input() options: FormlyFormOptions = {};\n\n ngOnInit() {\n // ما من حاجة هنا: يفترض أن form مُهيّأ في الخارج\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // لو احتجت تتعامل مع تغيّر الحقول أو الموديل، هنا المكان\n }\n\n // دالة مساعدة للوصول الآمن لخصائص الحقل\n getFieldIcon(field: FormlyFieldConfig): string | null {\n return field.templateOptions?.['icon'] || null;\n }\n}\n","<!-- يرسم حقول Formly داخل الـ form الموجود -->\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\">\n</formly-form>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-generic-errormessage',\n imports: [CommonModule],\n templateUrl: './generic-errormessage.html',\n styleUrl: './generic-errormessage.css'\n})\nexport class GenericErrormessage {\n /** نص رسالة الخطأ */\n @Input() text: string = '';\n}\n"," \n@if (text) {\n<div class=\"bg-red-100 border border-red-300 text-red-800 px-4 py-3 rounded my-4\"> {{ text }} </div>\n}","import { Component, inject, Inject, OnDestroy } from '@angular/core';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormGroup } from '@angular/forms';\nimport { FormlyFormOptions, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyPrimeNGModule } from '@ngx-formly/primeng';\nimport { ButtonModule } from 'primeng/button';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { MessageModule } from 'primeng/message';\nimport { CrudService } from '../../services/crud-service.interface';\nimport { GenericButton } from '../generic-button/generic-button';\nimport { GenericFormlyFields } from '../generic-formly-fields/generic-formly-fields';\nimport { TranslateService,TranslateModule } from '@ngx-translate/core';\nimport { GenericErrormessage } from \"../generic-errormessage/generic-errormessage\";\n\n@Component({\n selector: 'app-generic-crud-dialog',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormlyPrimeNGModule,\n ButtonModule,\n ProgressSpinnerModule,\n MessageModule,\n GenericButton, // إضافة المكون العام للأزرار\n GenericFormlyFields,\n TranslateModule,\n GenericErrormessage\n],\n templateUrl: `./generic-crud-dialog.html`,\n styles: [`\n :host {\n display: block;\n }\n\n button {\n min-width: 120px;\n }\n `]\n})\nexport class GenericCrudDialog<T> implements OnDestroy {\n form = new FormGroup({});\n model: Partial<T> = {};\n fields: FormlyFieldConfig[] = [];\n options: FormlyFormOptions = {};\n loading = false;\n id :any= null;\n errorMessage: string | null = null;\n translate:TranslateService = inject(TranslateService);\n private destroy$ = new Subject<void>();\n private idField: keyof T;\n\n constructor(\n public ref: DynamicDialogRef,\n public config: DynamicDialogConfig\n ) {\n // استقبال البيانات من المكون الأب\n this.fields = this.config.data.fields;\n this.idField = this.config.data.idField;\n this.model = this.config.data.item ? {...this.config.data.item} : {};\n\n // تحديد وضع العملية (تعديل أو إضافة)\n // this.isEditMode = !!this.config.data.item;\n try {\n const id = (this.model as any)[this.idField];\n this.id = id != undefined;\n\n } catch (error) {\n\n }\n }\n\n onSubmit() {\n if (this.form.invalid) return;\n\n this.loading = true;\n this.errorMessage = null;\n\n const service = this.config.data.service as CrudService<T>;\n console.log('service:', service);\n\n try {\n this.id = (this.model as any)[this.idField];\n } catch (error) {\n\n }\n console.log('isEditMode:', this.id);\n debugger\n const isEditMode = !!this.config.data.item;\n\nconst operation$: Observable<any> = isEditMode\n ? service.update(this.id, this.model as T)\n : service.create(this.model as T);\n\n operation$.pipe(takeUntil(this.destroy$)).subscribe({\n next: () => {\n this.ref.close(true); // نجاح العملية\n },\n error: (err) => {\n this.loading = false;\n this.errorMessage = err.error?.message ||\n err.message ||\n 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n"," <div class=\"p-4\">\n @if (errorMessage) {\n <lib-generic-errormessage [text]=\"errorMessage\"></lib-generic-errormessage>\n }\n\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- استخدام المكون العام للحقول -->\n <lib-generic-formly-fields\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\">\n </lib-generic-formly-fields>\n\n <div class=\"flex justify-end gap-2 mt-4\">\n\n <!-- استخدام المكون العام للأزرار - زر الحفظ -->\n <lib-generic-button\n variant=\"raised\"\n severity=\"primary\"\n type=\"submit\"\n [loading]=\"loading\"\n [disabled]=\"loading || form.invalid\"\n [label]=\"(id ? 'COMMON.UPDATE' : 'COMMON.SAVE') | translate\">\n </lib-generic-button>\n <!-- استخدام المكون العام للأزرار - زر الإلغاء -->\n <lib-generic-button\n variant=\"text\"\n severity=\"secondary\"\n [disabled]=\"loading\"\n [label]=\"'COMMON.CANCEL' | translate\"\n (clicked)=\"ref.close(false)\">\n </lib-generic-button>\n\n </div>\n </form>\n </div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject, OnDestroy } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'app-deactivation-reason-form',\n template: `\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"p-4 space-y-4\">\n <formly-form [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n\n\n <div class=\"bottom-0 left-0 right-0 bg-gray-200 border-t border-gray-400 px-4 py-3 flex justify-end gap-2\">\n\n <p-button\n [label]=\"( 'SAVE') | translate\"\n size=\"small\"\n [disabled]=\"form.invalid\"\n [type]=\"'submit'\">\n </p-button>\n\n <p-button\n [label]=\"'CANCEL' | translate \"\n severity=\"danger\"\n size=\"small\"\n (onClick)=\"ref.close(false)\">\n </p-button>\n\n </div>\n </form>\n `,\n imports:[FormlyForm,CommonModule,ReactiveFormsModule,FormsModule,TranslateModule,ButtonModule]\n})\nexport class DeactivationReasonFormComponent implements OnDestroy {\n form = new FormGroup({});\n model: any = {};\n fields: FormlyFieldConfig[];\n loading = false;\n errorMessage: string | null = null;\n private destroy$ = new Subject<void>();\n private idField: keyof any;\n constructor(\n public ref: DynamicDialogRef,\n public config: DynamicDialogConfig\n ) {\n this.model = config.data?.model || {};\n this.idField = this.config.data.idField;\n this.fields = [\n {\n key: 'deactivationReason',\n type: 'textarea',\n props: {\n label: 'DeactivationReason',\n placeholder: 'DeactivationReason',\n rows: 5,\n required: true,\n },\n },\n ];\n }\n\n\n onSubmit() {\n if (this.form.invalid) return;\n\n // this.loading = true;\n // this.errorMessage = null;\n\n const service = this.config.data.service;\n const id = (this.model as any)[this.idField] ;\n this.model.isActive = false;\n const operation$: Observable<any> = service.update(id, this.model);\n\n operation$.pipe(takeUntil(this.destroy$)).subscribe({\n next: () => {\n this.ref.close(this.model); // نجاح العملية\n },\n error: (err) => {\n this.loading = false;\n this.errorMessage = err.error?.message ||\n err.message ||\n 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n }\n });\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","// app/shared/services/swal.service.ts\nimport { Injectable } from '@angular/core';\nimport Swal, {\n SweetAlertOptions,\n SweetAlertResult,\n SweetAlertIcon\n} from 'sweetalert2';\n\n@Injectable({ providedIn: 'root' })\nexport class SwalService {\n /** رسالة تأكيد قبل تنفيذ إجراء */\n confirm(\n title = 'هل أنت متأكد؟',\n text = 'لن يمكنك التراجع عن هذا الإجراء',\n confirmButtonText = 'نعم',\n cancelButtonText = 'إلغاء'\n ): Promise<SweetAlertResult> {\n return Swal.fire({\n icon: 'warning',\n title,\n text,\n showCancelButton: true,\n confirmButtonText,\n cancelButtonText,\n // reverseButtons: true,\n customClass: {\n container: 'swal2-container' // ✅ أضف هذه الفئة\n }\n });\n }\n\n /** رسالة نجاح */\n success(\n title: string,\n text?: string,\n timer = 2000\n ): Promise<SweetAlertResult> {\n return Swal.fire({\n icon: 'success',\n title,\n text,\n timer,\n showConfirmButton: false,\n customClass: {\n container: 'swal2-container' // ✅ أضف هذه الفئة\n }\n });\n }\n\n /** رسالة خطأ */\n error(\n title: string,\n text?: string,\n footer?: string\n ): Promise<SweetAlertResult> {\n return Swal.fire({\n icon: 'error',\n title,\n text,\n footer,\n customClass: {\n container: 'swal2-container' // ✅ أضف هذه الفئة\n }\n });\n }\n\n /** رسالة معلومات */\n info(\n title: string,\n text?: string\n ): Promise<SweetAlertResult> {\n return Swal.fire({\n icon: 'info',\n title,\n text,\n });\n }\n\n /** عرض نافذة SweetAlert2 بأي خيارات تريد */\n alert(\n options: SweetAlertOptions\n ): Promise<SweetAlertResult> {\n return Swal.fire(options);\n }\n\n /** Toast بسيط قابل لإعادة الاستخدام */\n toast(\n title: string,\n icon: SweetAlertIcon = 'info',\n position: SweetAlertOptions['position'] = 'top-end',\n timer = 3000\n ): void {\n const Toast = Swal.mixin({\n toast: true,\n position,\n timer,\n showConfirmButton: false,\n });\n Toast.fire({ icon, title });\n }\n\n}\n","// src/app/shared/components/base-crud.component.ts\r\nimport { Directive, inject } from '@angular/core';\r\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { ActionDef } from '../models/Actiondef';\r\nimport { PaginatedResult } from '../models/Paginated';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { GenericCrudDialog } from './generic-crud-dialog/generic-crud-dialog';\r\nimport { BaseService } from '../services/base.service';\r\nimport { DeactivationReasonFormComponent } from './deactivation-reason/deactivation-reason';\r\nimport { SwalService } from '../services/SwalService.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Directive()\r\nexport abstract class BaseCrud<T, F = any> {\r\n list: T[] = [];\r\n paginator: boolean = true;\r\n canLoad: boolean = true;\r\n loading: boolean = false;\r\n errorMsg: string = '';\r\n first: number = 0;\r\n rows: number = 10;\r\n totalRecords: number = 0;\r\n searchGlobal: string = '';\r\n sort?: string;\r\n pageFilters: Partial<F> = {};\r\n currentFilters: Partial<F> = {};\r\n mode: string ='';\r\n scrollHeight: string ='400px';\r\n private swalService = inject(SwalService);\r\n\r\n protected dialogRef!: DynamicDialogRef;\r\n\r\n\r\n // abstract service: CrudService<T, F>;\r\n abstract service: BaseService;\r\n abstract dialogService: DialogService;\r\n // abstract dialogComponent: any;\r\n // abstract columns: ColumnDef<T>[];\r\n abstract actions: ActionDef<T>[];\r\n\r\n // for generic dialog:\r\n abstract formFields: FormlyFieldConfig[];\r\n abstract idField: keyof T;\r\n dialogVisible: boolean = false;\r\n drawerVisible: boolean = false;\r\n selectedItem: T | any = null;\r\n defaultModel: T | any = null;\r\n // selectedItem: T | any = {};\r\n isViewMode = false;\r\n isEditMode = false;\r\n\r\n\r\n\r\n displayMode:\r\n | 'drawer' | 'dialog' | 'route'\r\n | Partial<Record<'add' | 'edit' | 'view', 'drawer' | 'dialog' | 'route'>>\r\n = 'drawer';\r\n\r\n private router= inject(Router);\r\n private route = inject(ActivatedRoute);\r\n\r\nloadPage(pageIndex: number, pageSize: number): void {\r\n if(this.canLoad){\r\n\r\n\r\n this.loading = true;\r\n var filters: Partial<F> = {\r\n maxResultCount:pageSize,\r\n skipCount:pageIndex,\r\n sorting:this.sort,\r\n ...this.currentFilters,\r\n ...this.pageFilters,\r\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\r\n };\r\n //\r\n this.service.getList(filters)\r\n .subscribe({\r\n next: (res: PaginatedResult<T>) => {\r\n //\r\n this.list = res.items;\r\n this.totalRecords = res.totalCount;\r\n this.loading = false;\r\n },\r\n error: err => {\r\n this.errorMsg = err.error?.message || err.message || 'خطأ في التحميل';\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\nonSearch(filters?: any): void {\r\n //\r\n if (filters && typeof filters === 'object' && !Array.isArray(filters)) {\r\n this.pageFilters = filters;\r\n } else {\r\n this.searchGlobal = filters;\r\n }\r\n\r\n this.loadPage(0, 10);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nonPageChange(event: { first?: number; rows?: number; sort?: string; filters?: Record<string, any> }): void {\r\n // فك المتغيّرات مع قيمة افتراضية لفلاتر\r\n const {\r\n first = this.first,\r\n rows = this.rows,\r\n sort = this.sort,\r\n filters = {}\r\n } = event;\r\n\r\n this.first = first;\r\n this.rows = rows;\r\n this.sort = sort;\r\n\r\n // const pageIndex = Math.floor(first / rows);\r\n const skipCount = first;\r\n const pageIndex = skipCount;\r\n\r\n // الوصول للفلتر العام عبر الصيغة المربعة\r\n const globalValue = filters['global'];\r\n this.searchGlobal = typeof globalValue === 'string' ? globalValue : '';\r\n\r\n // فلترة خاصة بحقل واحد\r\n // const fieldFilters = { ...filters };\r\n // delete fieldFilters['global'];\r\n // this.currentFilters = fieldFilters as Partial<F>;\r\n\r\n\r\n\r\n this.loadPage(pageIndex, rows);\r\n}\r\n\r\n\r\nprotected openEditor(item: T | null, mode: 'add' | 'edit' | 'view'): void {\r\n this.mode = mode;\r\n this.selectedItem = item ?? this.defaultModel ?? {};\r\n this.isEditMode = mode === 'edit';\r\n this.isViewMode = mode === 'view';\r\n\r\n // resolve displayMode (string or map)\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[mode] ?? 'drawer';\r\n\r\n switch (modeConfig) {\r\n case 'drawer':\r\n this.drawerVisible = true;\r\n break;\r\n\r\n case 'dialog':\r\n this.dialogVisible = true;\r\n break;\r\n\r\n case 'route':\r\n const id = item ? (item as any)[this.idField] : 'new';\r\n if(mode === 'add'){\r\n this.router.navigate([mode], { relativeTo: this.route });\r\n }\r\n else{\r\n this.router.navigate([id, mode], { relativeTo: this.route });\r\n }\r\n break;\r\n }\r\n}\r\n\r\nvisibleChange(value: boolean) {\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[this.mode as 'add' | 'edit' | 'view'] ?? 'drawer';\r\n\r\n if (modeConfig === 'dialog') {\r\n this.dialogVisible = value;\r\n } else if (modeConfig === 'drawer') {\r\n this.drawerVisible = value;\r\n } else {\r\n // route mode does not use drawer/dialog\r\n }\r\n}\r\n\r\n\r\n// onTableAction(event: { name: string; row: T | null }): void {\r\n// switch (event.name) {\r\n// case 'add': this.openDrawer(null,event.name); break;\r\n// case 'view': this.openDrawer(event.row!,event.name); break;\r\n// case 'edit': this.openDrawer(event.row!,event.name); break;\r\n// case 'delete': this.onDelete(event.row!);break;\r\n// case 'state': this.openDeactivationReason(event.row!);break;\r\n// }\r\n// }\r\n\r\nonTableAction(event: { name: string; row: T | null }): void {\r\n switch (event.name) {\r\n case 'add':\r\n case 'edit':\r\n case 'view':\r\n this.openEditor(event.row, event.name);\r\n break;\r\n case 'delete':\r\n this.onDelete(event.row!);\r\n break;\r\n case 'state':\r\n this.openDeactivationReason(event.row!);\r\n break;\r\n }\r\n}\r\n\r\n\r\nprotected openDrawer(item: T | null,mode:string): void {\r\n\r\n this.mode = mode;\r\n\r\n // this.drawerVisible = !this.drawerVisible;\r\n\r\n\r\n if (item == null) {\r\n\r\n this.selectedItem = this.defaultModel || {};\r\n }\r\n else{\r\n this.selectedItem = item;\r\n }\r\n\r\n if(mode == 'edit'){\r\n this.drawerVisible = true;\r\n this.isEditMode = true ;\r\n this.isViewMode = false ;\r\n // this.isEditMode = item !=null ;\r\n }\r\n if(mode == 'add'){\r\n this.drawerVisible = true;\r\n this.isViewMode = false ;\r\n this.isEditMode = false ;\r\n }\r\n if(mode == 'view'){\r\n // this.drawerVisible = true;\r\n this.dialogVisible = true;\r\n\r\n this.isViewMode = true ;\r\n this.isEditMode = false ;\r\n }\r\n}\r\nprotected openDialog(item: T | null): void {\r\n this.dialogRef = this.dialogService.open(GenericCrudDialog<T>, {\r\n header: item ? 'تعديل' : 'اضافه',\r\n styleClass: 'w-1/2',\r\n modal: true,\r\n data: {\r\n item,\r\n fields: this.formFields,\r\n service: this.service,\r\n idField: this.idField\r\n }\r\n });\r\n //\r\n this.dialogRef.onClose.subscribe((reload: boolean) => {\r\n if (reload) this.loadPage(0, this.rows);\r\n });\r\n}\r\n\r\nopenDeactivationReason(model: any) {\r\n\r\n this.selectedItem = model;\r\n if(this.selectedItem.isActive == true){\r\n\r\n\r\n const ref = this.dialogService.open(DeactivationReasonFormComponent, {\r\n header: 'السبب (في حال تم إيقافه)',\r\n width: '30vw',\r\n data: { model: { ...model },\r\n fields: this.formFields,\r\n service: this.service,\r\n idField: this.idField },\r\n });\r\n\r\n ref.onClose.subscribe((result) => {\r\n if (result) {\r\n this.selectedItem.isActive = false;\r\n this.selectedItem.deactivationReason = result.deactivationReason;\r\n // Optionally: save model via API\r\n }\r\n });\r\n}\r\nelse{\r\n this.selectedItem.isActive = true;\r\n this.selectedItem.deactivationReason = \"\";\r\n const id = (this.selectedItem as any)[this.idField] ;\r\n this.service.update(id, this.selectedItem).subscribe({\r\n next: () => {\r\n\r\n },\r\n error: (err) => {\r\n this.loading = false;\r\n\r\n }\r\n });\r\n}\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n // onDelete(item: any): void {\r\n // if (!confirm('هل تريد الحذف فعلاً؟')) return;\r\n // const id = (item as any)[this.idField];\r\n // this.service.delete(id).subscribe(() => {\r\n // this.loadPage(0, this.rows);\r\n // });\r\n // }\r\n\r\n\r\nonDelete(item: any): void {\r\n const id = item[this.idField];\r\n\r\n this.swalService.confirm(\r\n 'تأكيد الحذف',\r\n 'هل تريد حذف هذا السجل فعلاً؟',\r\n 'نعم، احذف',\r\n 'إلغاء'\r\n ).then((result) => {\r\n if (result.isConfirmed) {\r\n this.service.delete(id).subscribe({\r\n next: () => {\r\n this.loadPage(0, this.rows);\r\n this.swalService.success('تم الحذف بنجاح');\r\n },\r\n error: (err: any) => {\r\n this.loading = false;\r\n\r\n const msg =\r\n err.error?.title ||\r\n err.message ||\r\n 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\r\n\r\n // this.errorMessage = msg;\r\n\r\n // ❌ رسالة خطأ\r\n this.swalService.error('فشل الحذف', msg);\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\nget columns(): FormlyFieldConfig[] {\r\n const flattenFields = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] => {\r\n return fields.flatMap(field => {\r\n // Check for nested group/panel\r\n if (field.fieldGroup?.length) {\r\n return flattenFields(field.fieldGroup);\r\n }\r\n\r\n // Skip fields with no props or table.hidden === true\r\n if (!field.props || field.props['table']?.hidden === true) {\r\n return [];\r\n }\r\n\r\n // Determine the column type: table.type > field.type > 'label-type'\r\n // const tableType = field.props['table']?.type || field.type || 'label-type';\r\n const tableType = field.props['table']?.type || 'label-type';\r\n\r\n //\r\n\r\n return [{\r\n type: tableType,\r\n key: field['key'], // always set key for table rendering\r\n props: {\r\n ...field.props, // base props\r\n ...field.props['table']?.props // table-specific overrides\r\n },\r\n expressions: field.props['table']?.expressions\r\n }];\r\n });\r\n };\r\n\r\n return flattenFields(this.formFields);\r\n}\r\n\r\n\r\nget filters(): FormlyFieldConfig[] {\r\n const flattenForFilter = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) {\r\n // Recursively handle nested panels/groups\r\n return flattenForFilter(field.fieldGroup);\r\n }\r\n\r\n // Skip fields with no props or filter.hidden === true\r\n if (!field.props || field.props['filter']?.hidden === true) {\r\n return [];\r\n }\r\n\r\n return [field];\r\n });\r\n };\r\n\r\n return flattenForFilter(this.formFields);\r\n}\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\n\n@Component({\n selector: 'formly-field-input-with-icon',\n imports:[FormlyAttributes,ReactiveFormsModule,CommonModule,FormsModule],\n template: `\n <div class=\"relative\">\n <!-- [formControl]=\"formControl\" -->\n <input\n [type]=\"type\"\n\n [formlyAttributes]=\"field\"\n class=\"w-full rounded-xl border border-gray-200 bg-gray-50 pl-12 pr-4 py-3 text-sm focus:border-primary focus:ring-2 focus:ring-blue-100 transition-all\"\n [placeholder]=\"to.placeholder\"\n [disabled]=\"to.disabled ? true : false\"\n />\n <i class=\"{{ to['icon'] }} absolute left-4 top-1/2 -translate-y-1/2 text-gray-400 text-base\"></i>\n </div>\n `,\n})\nexport class InputWithIconType extends FieldType {\n get type() {\n return this.to.type || 'text';\n }\n}\n","import { FormlyFieldConfig } from \"@ngx-formly/core\";\nimport { Observable } from \"rxjs\";\n\nexport const DEFAULT_CONTROL_CLASS = [\n 'w-full',\n 'border',\n 'border-gray-300',\n 'rounded',\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-green-400',\n].join(' ');\n\n\nexport interface SelectOption {\n label: string;\n value: any;\n icon?: string; // ← allow icon\n}\n\nexport function numberField(\n key: string,\n label: string,\n required = false,\n className = 'col-span-1',\n): FormlyFieldConfig {\n return {\n key,\n type: 'input',\n className,\n wrappers: ['form-field'],\n templateOptions: {\n type:\"number\",\n label,\n required,\n attributes: { class: DEFAULT_CONTROL_CLASS },\n },\n };\n}\n\nexport function textField(\n key: string,\n label: string,\n required = false,\n className = 'col-span-1',\n // ✅ تم تغيير هذا البراميتر ليقبل خصائص إضافية لـ templateOptions\n extraTemplateOptions?: { [key: string]: any }\n): FormlyFieldConfig {\n return {\n key,\n type: 'advanced-input',\n className,\n wrappers: ['form-field'],\n props: {\n label,\n required,\n attributes: {\n class: DEFAULT_CONTROL_CLASS,\n },\n // ✅ دمج الخصائص الإضافية هنا\n ...extraTemplateOptions,\n },\n };\n}\n\nexport function textField2(\n key: string,\n label: string,\n required = false,\n className = 'col-span-1',\n expressions?: FormlyFieldConfig['expressions']\n): FormlyFieldConfig {\n return {\n key,\n type: 'input',\n className,\n wrappers: ['form-field'],\n templateOptions: {\n label,\n required,\n attributes: {\n class: DEFAULT_CONTROL_CLASS,\n },\n // ✅ اضف disabled ليتضبب الحقل إذا كان readonly\n },\n expressions,\n };\n}\n\n\nexport function textareaField(\n key: string,\n label: string,\n rows = 3,\n className = 'col-span-1',\n): FormlyFieldConfig {\n return {\n key,\n type: 'textarea',\n className,\n wrappers: ['form-field'],\n templateOptions: {\n label,\n rows,\n attributes: { class: DEFAULT_CONTROL_CLASS },\n },\n };\n}\n\n// formly-presets.ts\n\n export interface SelectFieldOptions {\n key: string;\n label: string;\n options?: SelectOption[] | Observable<SelectOption[]>;\n className?: string;\n defaultValue?: any;\n required?: boolean;\n fullWidth?: boolean;\n }\n\nexport function selectField({\n key,\n label,\n options = [],\n className,\n defaultValue,\n fullWidth = false,\n required = false,\n}: SelectFieldOptions): FormlyFieldConfig {\n const config: FormlyFieldConfig = {\n key,\n type: 'select',\n className: className ?? (fullWidth ? 'col-span-2' : 'col-span-1'),\n wrappers: ['form-field'],\n templateOptions: {\n label,\n options,\n required,\n placeholder: `اختر ${label}`,\n showClear: true,\n filter: true,\n appendTo: 'body',\n optionLabel: 'label',\n optionValue: 'value',\n attributes: { class: DEFAULT_CONTROL_CLASS },\n },\n };\n\n\n if (options !== undefined) {\n config.templateOptions!.options = options;\n }\n\n if (defaultValue !== undefined) {\n config.defaultValue = defaultValue;\n }\n\n return config;\n}\n\n\n\n// export function checkboxField(\n// key: string,\n// label: string,\n// required = false,\n// className = 'col-span-1',\n// useNumberMapping = false\n// ): FormlyFieldConfig {\n// const field: FormlyFieldConfig = {\n// key,\n// type: 'checkbox',\n// className,\n// wrappers: ['form-field'],\n// templateOptions: {\n// label,\n// required,\n// attributes: {\n// class: 'flex items-center gap-2',\n// },\n// },\n// };\n\n// if (useNumberMapping) {\n// field.hooks = {\n// onInit: (field) => {\n// // ✅ تهيئة القيمة داخل الفورم كنترول\n// const initialValue = field.model?.[key];\n// if (initialValue === 1 || initialValue === 2) {\n// field.formControl?.setValue(initialValue === 1, { emitEvent: false });\n// }\n\n// // ✅ تحويل عند تغيّر القيمة من الـ checkbox\n// field.formControl?.valueChanges.subscribe(val => {\n// const newValue = val ? 1 : 2;\n// if (field.model) {\n// field.model[key] = newValue;\n// }\n// });\n// }\n// };\n// }\n\n// return field;\n// }\n\n\n\n\nexport function checkboxField(\n key: string,\n label: string,\n required = false,\n className = 'col-span-1',\n): FormlyFieldConfig {\n return {\n key,\n type: 'checkbox',\n className,\n wrappers: ['form-field'],\n templateOptions: {\n label,\n required,\n attributes: {\n class: 'flex items-center gap-2',\n },\n },\n hooks: {\n onInit: (field) => {\n const val = field.model?.[key];\n\n if (val === 1) {\n field.formControl?.setValue(true, { emitEvent: false });\n } else if (val === 2) {\n field.formControl?.setValue(false, { emitEvent: false });\n } else if (val === undefined) {\n field.model[key] = 2; // تعيين القيمة الافتراضية في الموديل\n field.formControl?.setValue(false, { emitEvent: false });\n } else {\n field.formControl?.setValue(false, { emitEvent: false });\n }\n\n field.formControl?.valueChanges.subscribe(val => {\n const newVal = val ? 1 : 2;\n if (field.model && field.model[key] !== newVal) {\n field.model[key] = newVal;\n }\n });\n }\n }\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.core.mjs","sources":["../tmp-esm2022/lib/ng.core/ng.core.js","../tmp-esm2022/elite.framework-ng.core.js"],"sourcesContent":["import { Component } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NgCore {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgCore, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: NgCore, isStandalone: true, selector: \"lib-ng-core\", ngImport: i0, template: \"<p>NgCore works!</p>\\n\", styles: [\"\"] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgCore, decorators: [{\n type: Component,\n args: [{ selector: 'lib-ng-core', imports: [], template: \"<p>NgCore works!</p>\\n\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcuY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zcmMvbGliL25nLmNvcmUvbmcuY29yZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zcmMvbGliL25nLmNvcmUvbmcuY29yZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUTFDLE1BQU0sT0FBTyxNQUFNO3VHQUFOLE1BQU07MkZBQU4sTUFBTSx1RUNSbkIsd0JBQ0E7OzJGRE9hLE1BQU07a0JBTmxCLFNBQVM7K0JBQ0UsYUFBYSxXQUNkLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5nLWNvcmUnLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nLmNvcmUuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9uZy5jb3JlLmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE5nQ29yZSB7fVxuIiwiPHA+TmdDb3JlIHdvcmtzITwvcD5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLmNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc3JjL2VsaXRlLmZyYW1ld29yay1uZy5jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":";;;AAEO,MAAM,MAAM,CAAC;AACpB,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAChK,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjN;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AAC/F,SAAS,CAAC,EAAE,CAAC;;ACTb;AACA;AACA;;;;"}
package/index.d.ts CHANGED
@@ -1,183 +1,8 @@
1
- import { DynamicDialogRef, DialogService } from 'primeng/dynamicdialog';
2
- import { FormlyFieldConfig, FieldType } from '@ngx-formly/core';
3
- import * as rxjs from 'rxjs';
4
- import { Observable } from 'rxjs';
5
- import { HttpParameterCodec, HttpParams, HttpHeaders, HttpClient, HttpRequest } from '@angular/common/http';
6
1
  import * as i0 from '@angular/core';
7
2
 
8
- interface ActionDef<T> {
9
- name: string;
10
- icon?: string;
11
- label?: string;
12
- styleClass?: string;
13
- action?: (item: T) => void | Promise<void>;
3
+ declare class NgCore {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgCore, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgCore, "lib-ng-core", never, {}, {}, never, never, true, never>;
14
6
  }
15
7
 
16
- interface PaginatedResult<T> {
17
- items: T[];
18
- totalCount: number;
19
- }
20
-
21
- interface Root {
22
- registerLocaleFn: (locale: string) => Promise<any>;
23
- skipGetAppConfiguration?: boolean;
24
- skipInitAuthService?: boolean;
25
- sendNullsAsQueryParam?: boolean;
26
- tenantKey?: string;
27
- othersGroup?: string;
28
- dynamicLayouts?: Map<string, string>;
29
- disableProjectNameInTitle?: boolean;
30
- }
31
-
32
- declare namespace Rest {
33
- type Config = Partial<{
34
- apiName: string;
35
- skipHandleError: boolean;
36
- skipAddingHeader: boolean;
37
- observe: Observe;
38
- httpParamEncoder?: HttpParameterCodec;
39
- }>;
40
- const enum Observe {
41
- Body = "body",
42
- Events = "events",
43
- Response = "response"
44
- }
45
- const enum ResponseType {
46
- ArrayBuffer = "arraybuffer",
47
- Blob = "blob",
48
- JSON = "json",
49
- Text = "text"
50
- }
51
- type Params = HttpParams | {
52
- [param: string]: any;
53
- };
54
- interface Request<T> {
55
- body?: T;
56
- headers?: HttpHeaders | {
57
- [header: string]: string | string[];
58
- };
59
- method: string;
60
- params?: Params;
61
- reportProgress?: boolean;
62
- responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
63
- url: string;
64
- withCredentials?: boolean;
65
- }
66
- }
67
-
68
- declare class RestService {
69
- protected options: Root;
70
- protected http: HttpClient;
71
- private environment;
72
- constructor(options: Root, http: HttpClient);
73
- protected getApiFromStore(apiName: string | undefined): string;
74
- handleError(err: any): Observable<any>;
75
- request<T, R>(request: HttpRequest<T> | Rest.Request<T>, config?: Rest.Config, api?: string): Observable<R>;
76
- private getHttpClient;
77
- private getParams;
78
- private removeDuplicateSlashes;
79
- static ɵfac: i0.ɵɵFactoryDeclaration<RestService, never>;
80
- static ɵprov: i0.ɵɵInjectableDeclaration<RestService>;
81
- }
82
-
83
- declare class BaseService {
84
- restService: RestService;
85
- apiName: string;
86
- moduleName: string;
87
- constructor(restService: RestService);
88
- get: (id: string) => rxjs.Observable<any>;
89
- getList: (input: any, endpoint?: string) => rxjs.Observable<PaginatedResult<any>>;
90
- create: (input: any) => rxjs.Observable<any>;
91
- update: (id: string, input: any) => rxjs.Observable<any>;
92
- delete: (id: string) => rxjs.Observable<void>;
93
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseService, never>;
94
- static ɵprov: i0.ɵɵInjectableDeclaration<BaseService>;
95
- }
96
-
97
- declare abstract class BaseCrud<T, F = any> {
98
- list: T[];
99
- paginator: boolean;
100
- canLoad: boolean;
101
- loading: boolean;
102
- errorMsg: string;
103
- first: number;
104
- rows: number;
105
- totalRecords: number;
106
- searchGlobal: string;
107
- sort?: string;
108
- pageFilters: Partial<F>;
109
- currentFilters: Partial<F>;
110
- mode: string;
111
- scrollHeight: string;
112
- private swalService;
113
- protected dialogRef: DynamicDialogRef;
114
- abstract service: BaseService;
115
- abstract dialogService: DialogService;
116
- abstract actions: ActionDef<T>[];
117
- abstract formFields: FormlyFieldConfig[];
118
- abstract idField: keyof T;
119
- dialogVisible: boolean;
120
- drawerVisible: boolean;
121
- selectedItem: T | any;
122
- defaultModel: T | any;
123
- isViewMode: boolean;
124
- isEditMode: boolean;
125
- displayMode: 'drawer' | 'dialog' | 'route' | Partial<Record<'add' | 'edit' | 'view', 'drawer' | 'dialog' | 'route'>>;
126
- private router;
127
- private route;
128
- loadPage(pageIndex: number, pageSize: number): void;
129
- onSearch(filters?: any): void;
130
- onPageChange(event: {
131
- first?: number;
132
- rows?: number;
133
- sort?: string;
134
- filters?: Record<string, any>;
135
- }): void;
136
- protected openEditor(item: T | null, mode: 'add' | 'edit' | 'view'): void;
137
- visibleChange(value: boolean): void;
138
- onTableAction(event: {
139
- name: string;
140
- row: T | null;
141
- }): void;
142
- protected openDrawer(item: T | null, mode: string): void;
143
- protected openDialog(item: T | null): void;
144
- openDeactivationReason(model: any): void;
145
- onDelete(item: any): void;
146
- get columns(): FormlyFieldConfig[];
147
- get filters(): FormlyFieldConfig[];
148
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseCrud<any, any>, never>;
149
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseCrud<any, any>, never, never, {}, {}, never, never, true, never>;
150
- }
151
-
152
- declare class InputWithIconType extends FieldType {
153
- get type(): string;
154
- static ɵfac: i0.ɵɵFactoryDeclaration<InputWithIconType, never>;
155
- static ɵcmp: i0.ɵɵComponentDeclaration<InputWithIconType, "formly-field-input-with-icon", never, {}, {}, never, never, true, never>;
156
- }
157
-
158
- declare const DEFAULT_CONTROL_CLASS: string;
159
- interface SelectOption {
160
- label: string;
161
- value: any;
162
- icon?: string;
163
- }
164
- declare function numberField(key: string, label: string, required?: boolean, className?: string): FormlyFieldConfig;
165
- declare function textField(key: string, label: string, required?: boolean, className?: string, extraTemplateOptions?: {
166
- [key: string]: any;
167
- }): FormlyFieldConfig;
168
- declare function textField2(key: string, label: string, required?: boolean, className?: string, expressions?: FormlyFieldConfig['expressions']): FormlyFieldConfig;
169
- declare function textareaField(key: string, label: string, rows?: number, className?: string): FormlyFieldConfig;
170
- interface SelectFieldOptions {
171
- key: string;
172
- label: string;
173
- options?: SelectOption[] | Observable<SelectOption[]>;
174
- className?: string;
175
- defaultValue?: any;
176
- required?: boolean;
177
- fullWidth?: boolean;
178
- }
179
- declare function selectField({ key, label, options, className, defaultValue, fullWidth, required, }: SelectFieldOptions): FormlyFieldConfig;
180
- declare function checkboxField(key: string, label: string, required?: boolean, className?: string): FormlyFieldConfig;
181
-
182
- export { BaseCrud, DEFAULT_CONTROL_CLASS, InputWithIconType, checkboxField, numberField, selectField, textField, textField2, textareaField };
183
- export type { SelectFieldOptions, SelectOption };
8
+ export { NgCore };
@@ -0,0 +1,3 @@
1
+ # @elite.framework/ng.core/models
2
+
3
+ Secondary entry point of `@elite.framework/ng.core`. It can be used by importing from `@elite.framework/ng.core/models`.
@@ -0,0 +1,135 @@
1
+ import { HttpParameterCodec, HttpParams, HttpHeaders } from '@angular/common/http';
2
+
3
+ interface ActionDef<T> {
4
+ name: string;
5
+ icon?: string;
6
+ label?: string;
7
+ styleClass?: string;
8
+ action?: (item: T) => void | Promise<void>;
9
+ }
10
+
11
+ declare class AttachmentDto {
12
+ id?: number;
13
+ binaryObjectId?: string;
14
+ description?: string;
15
+ mimeType?: string | any;
16
+ fileName?: string;
17
+ base64?: string;
18
+ caption?: string;
19
+ link?: string;
20
+ }
21
+
22
+ interface ButtonConfig {
23
+ icon: string;
24
+ label: string;
25
+ position?: 'top' | 'bottom';
26
+ variant: 'text' | 'outlined' | 'raised' | 'rounded';
27
+ severity: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast';
28
+ size: 'small' | 'normal' | 'large';
29
+ actionName?: string;
30
+ permission?: string;
31
+ }
32
+
33
+ interface ColumnDef<T> {
34
+ header: string;
35
+ /** تقييد المفاتيح لتكون من خصائص T */
36
+ field: keyof T | string;
37
+ width?: string;
38
+ pipe?: (value: any) => string;
39
+ clickable?: boolean;
40
+ hoverable?: boolean;
41
+ clickAction?: (row: T, event?: MouseEvent) => void;
42
+ /** تنسيق مخصص للخلية: إن وُجد يُستخدم بدل field/pipe */
43
+ formatter?: (row: T) => string;
44
+ isCardVisible?: boolean;
45
+ onCellMouseEnter?: (row: T, event: MouseEvent) => void;
46
+ onCellMouseLeave?: (row: T, event: MouseEvent) => void;
47
+ fixed?: boolean;
48
+ }
49
+
50
+ interface Root {
51
+ registerLocaleFn: (locale: string) => Promise<any>;
52
+ skipGetAppConfiguration?: boolean;
53
+ skipInitAuthService?: boolean;
54
+ sendNullsAsQueryParam?: boolean;
55
+ tenantKey?: string;
56
+ othersGroup?: string;
57
+ dynamicLayouts?: Map<string, string>;
58
+ disableProjectNameInTitle?: boolean;
59
+ }
60
+ declare class ListResultDto<T> {
61
+ items?: T[];
62
+ constructor(initialValues?: Partial<ListResultDto<T>>);
63
+ }
64
+ declare class PagedResultDto<T> extends ListResultDto<T> {
65
+ totalCount?: number;
66
+ constructor(initialValues?: Partial<PagedResultDto<T>>);
67
+ }
68
+ declare class GeneralResponse<T> {
69
+ success?: boolean;
70
+ result?: T;
71
+ targetUrl?: string;
72
+ error?: any;
73
+ unAuthorizedRequest?: boolean;
74
+ constructor();
75
+ }
76
+ declare function checkHasProp<T>(object: T, key: string | keyof T): key is keyof T;
77
+
78
+ type FilterType = 'text' | 'number' | 'select' | 'date';
79
+ interface FilterDef<T> {
80
+ /** اسم الحقل في بياناتك */
81
+ field: keyof T;
82
+ /** نص العنوان للعرض */
83
+ label: string;
84
+ /** نوع البحث */
85
+ type: FilterType;
86
+ /** للقوائم المنسدلة فقط */
87
+ options?: {
88
+ label: string;
89
+ value: any;
90
+ }[];
91
+ }
92
+
93
+ interface PaginatedResult<T> {
94
+ items: T[];
95
+ totalCount: number;
96
+ }
97
+
98
+ declare namespace Rest {
99
+ type Config = Partial<{
100
+ apiName: string;
101
+ skipHandleError: boolean;
102
+ skipAddingHeader: boolean;
103
+ observe: Observe;
104
+ httpParamEncoder?: HttpParameterCodec;
105
+ }>;
106
+ const enum Observe {
107
+ Body = "body",
108
+ Events = "events",
109
+ Response = "response"
110
+ }
111
+ const enum ResponseType {
112
+ ArrayBuffer = "arraybuffer",
113
+ Blob = "blob",
114
+ JSON = "json",
115
+ Text = "text"
116
+ }
117
+ type Params = HttpParams | {
118
+ [param: string]: any;
119
+ };
120
+ interface Request<T> {
121
+ body?: T;
122
+ headers?: HttpHeaders | {
123
+ [header: string]: string | string[];
124
+ };
125
+ method: string;
126
+ params?: Params;
127
+ reportProgress?: boolean;
128
+ responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
129
+ url: string;
130
+ withCredentials?: boolean;
131
+ }
132
+ }
133
+
134
+ export { AttachmentDto, GeneralResponse, ListResultDto, PagedResultDto, Rest, checkHasProp };
135
+ export type { ActionDef, ButtonConfig, ColumnDef, FilterDef, FilterType, PaginatedResult, Root };