@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.
- package/README.md +2 -22
- package/directives/README.md +3 -0
- package/directives/index.d.ts +23 -0
- package/fesm2022/elite.framework-ng.core-directives.mjs +59 -0
- package/fesm2022/elite.framework-ng.core-directives.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-models.mjs +47 -0
- package/fesm2022/elite.framework-ng.core-models.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-pipes.mjs +135 -0
- package/fesm2022/elite.framework-ng.core-pipes.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-providers.mjs +18 -0
- package/fesm2022/elite.framework-ng.core-providers.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-services.mjs +509 -0
- package/fesm2022/elite.framework-ng.core-services.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-tokens.mjs +17 -0
- package/fesm2022/elite.framework-ng.core-tokens.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core.mjs +7 -980
- package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
- package/index.d.ts +4 -179
- package/models/README.md +3 -0
- package/models/index.d.ts +135 -0
- package/package.json +24 -216
- package/pipes/README.md +3 -0
- package/pipes/index.d.ts +20 -0
- package/providers/README.md +3 -0
- package/providers/index.d.ts +6 -0
- package/services/README.md +3 -0
- package/services/index.d.ts +250 -0
- package/tokens/README.md +3 -0
- package/tokens/index.d.ts +15 -0
|
@@ -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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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 };
|
package/models/README.md
ADDED
|
@@ -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 };
|