@dignite/vault-extract 0.2.0

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.
Files changed (39) hide show
  1. package/README.md +17 -0
  2. package/fesm2022/dignite-vault-extract-config.mjs +82 -0
  3. package/fesm2022/dignite-vault-extract-config.mjs.map +1 -0
  4. package/fesm2022/dignite-vault-extract-documents-cabinet-list.component-Ch0gpSCc.mjs +184 -0
  5. package/fesm2022/dignite-vault-extract-documents-cabinet-list.component-Ch0gpSCc.mjs.map +1 -0
  6. package/fesm2022/dignite-vault-extract-documents-content-type-DjCs-s4E.mjs +115 -0
  7. package/fesm2022/dignite-vault-extract-documents-content-type-DjCs-s4E.mjs.map +1 -0
  8. package/fesm2022/dignite-vault-extract-documents-document-detail.component-DHs42DWJ.mjs +1146 -0
  9. package/fesm2022/dignite-vault-extract-documents-document-detail.component-DHs42DWJ.mjs.map +1 -0
  10. package/fesm2022/dignite-vault-extract-documents-document-file-preview.component-CStXf8v9.mjs +72 -0
  11. package/fesm2022/dignite-vault-extract-documents-document-file-preview.component-CStXf8v9.mjs.map +1 -0
  12. package/fesm2022/dignite-vault-extract-documents-document-list.component-jThR5cct.mjs +642 -0
  13. package/fesm2022/dignite-vault-extract-documents-document-list.component-jThR5cct.mjs.map +1 -0
  14. package/fesm2022/dignite-vault-extract-documents-document-overview.component-BHUUUIVr.mjs +318 -0
  15. package/fesm2022/dignite-vault-extract-documents-document-overview.component-BHUUUIVr.mjs.map +1 -0
  16. package/fesm2022/dignite-vault-extract-documents-document-recycle-bin.component-dqeBrw22.mjs +178 -0
  17. package/fesm2022/dignite-vault-extract-documents-document-recycle-bin.component-dqeBrw22.mjs.map +1 -0
  18. package/fesm2022/dignite-vault-extract-documents-document-type-list.component-C8kXFJGb.mjs +464 -0
  19. package/fesm2022/dignite-vault-extract-documents-document-type-list.component-C8kXFJGb.mjs.map +1 -0
  20. package/fesm2022/dignite-vault-extract-documents-export-template-list.component-DlmZFFF1.mjs +361 -0
  21. package/fesm2022/dignite-vault-extract-documents-export-template-list.component-DlmZFFF1.mjs.map +1 -0
  22. package/fesm2022/dignite-vault-extract-documents-extensible-table-DkLXuoWo.mjs +53 -0
  23. package/fesm2022/dignite-vault-extract-documents-extensible-table-DkLXuoWo.mjs.map +1 -0
  24. package/fesm2022/dignite-vault-extract-documents-field-definition-list.component-ClmWkRun.mjs +530 -0
  25. package/fesm2022/dignite-vault-extract-documents-field-definition-list.component-ClmWkRun.mjs.map +1 -0
  26. package/fesm2022/dignite-vault-extract-documents-field-reextraction-modal.component-D7OOycv9.mjs +163 -0
  27. package/fesm2022/dignite-vault-extract-documents-field-reextraction-modal.component-D7OOycv9.mjs.map +1 -0
  28. package/fesm2022/dignite-vault-extract-documents-format-bytes-Cd3QwfQZ.mjs +19 -0
  29. package/fesm2022/dignite-vault-extract-documents-format-bytes-Cd3QwfQZ.mjs.map +1 -0
  30. package/fesm2022/dignite-vault-extract-documents-format-field-value-Xjb8lwzA.mjs +22 -0
  31. package/fesm2022/dignite-vault-extract-documents-format-field-value-Xjb8lwzA.mjs.map +1 -0
  32. package/fesm2022/dignite-vault-extract-documents.mjs +71 -0
  33. package/fesm2022/dignite-vault-extract-documents.mjs.map +1 -0
  34. package/fesm2022/dignite-vault-extract.mjs +522 -0
  35. package/fesm2022/dignite-vault-extract.mjs.map +1 -0
  36. package/package.json +38 -0
  37. package/types/dignite-vault-extract-config.d.ts +5 -0
  38. package/types/dignite-vault-extract-documents.d.ts +5 -0
  39. package/types/dignite-vault-extract.d.ts +521 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dignite-vault-extract-documents-export-template-list.component-DlmZFFF1.mjs","sources":["../../../packages/vault-extract/documents/src/lib/exports/export-template-list/export-template-list.component.ts","../../../packages/vault-extract/documents/src/lib/exports/export-template-list/export-template-list.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { escapeHtmlChars, ListService, LocalizationPipe, LocalizationService, PermissionService } from '@abp/ng.core';\nimport type { ABP } from '@abp/ng.core';\nimport {\n EntityProp,\n EXTENSIONS_IDENTIFIER,\n ExtensionsService,\n ExtensibleTableComponent,\n ePropType,\n} from '@abp/ng.components/extensible';\nimport { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { of } from 'rxjs';\nimport {\n CabinetDto,\n CabinetService,\n CreateExportTemplateDto,\n DocumentLifecycleStatus,\n DocumentTypeDto,\n DocumentTypeService,\n ExportColumnInput,\n ExportFormat,\n ExportTemplateDto,\n ExportTemplateService,\n FieldDefinitionDto,\n FieldDefinitionService,\n EXTRACT_PERMISSIONS,\n documentLifecycleStatusOptions,\n exportFormatOptions,\n} from '@dignite/vault-extract';\nimport {\n ClientPagedResult,\n configureEntityTable,\n pageClientItems,\n EXTRACT_TABLES,\n SortAccessors,\n} from '../../shared/extensible-table';\n\n// Mirrors ExportTemplateConsts (Domain.Shared).\nconst MAX_NAME_LENGTH = 128;\n\nconst EXPORT_TEMPLATE_SORTS: SortAccessors<ExportTemplateDto> = {\n name: template => template.name,\n format: template => template.format,\n documentTypeId: template => template.documentTypeId,\n columns: template => template.columns?.length ?? 0,\n};\n\n@Component({\n selector: 'lib-export-template-list',\n templateUrl: './export-template-list.component.html',\n styleUrls: ['./export-template-list.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n LocalizationPipe,\n ExtensibleTableComponent,\n NgbDropdownModule,\n ],\n providers: [\n ListService,\n {\n provide: EXTENSIONS_IDENTIFIER,\n useValue: EXTRACT_TABLES.ExportTemplates,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExportTemplateListComponent implements OnInit {\n private readonly service = inject(ExportTemplateService);\n private readonly documentTypeService = inject(DocumentTypeService);\n private readonly fieldDefinitionService = inject(FieldDefinitionService);\n private readonly cabinetService = inject(CabinetService);\n private readonly fb = inject(FormBuilder);\n private readonly confirmation = inject(ConfirmationService);\n private readonly toaster = inject(ToasterService);\n private readonly permissionService = inject(PermissionService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly extensions = inject(ExtensionsService);\n\n readonly list = inject(ListService);\n\n readonly canManage = this.permissionService.getGrantedPolicy(\n EXTRACT_PERMISSIONS.Documents.Templates.Default,\n );\n readonly canExport = this.permissionService.getGrantedPolicy(\n EXTRACT_PERMISSIONS.Documents.Export,\n );\n\n readonly formatOptions = exportFormatOptions;\n readonly ExportFormat = ExportFormat;\n readonly DocumentLifecycleStatus = DocumentLifecycleStatus;\n readonly lifecycleStatusOptions = documentLifecycleStatusOptions;\n\n allTemplates = signal<ExportTemplateDto[]>([]);\n templates = signal<ClientPagedResult<ExportTemplateDto>>({ totalCount: 0, items: [] });\n documentTypes = signal<DocumentTypeDto[]>([]);\n fieldDefinitions = signal<FieldDefinitionDto[]>([]);\n cabinets = signal<CabinetDto[]>([]);\n isLoading = signal(true);\n editing = signal<ExportTemplateDto | 'create' | null>(null);\n isSubmitting = signal(false);\n exportingId = signal<string | null>(null);\n /** Export template currently configuring filters; when non-null, show the filter modal. */\n filteringTemplate = signal<ExportTemplateDto | null>(null);\n private tableQuery: Partial<ABP.PageQueryParams> = {};\n\n readonly filterForm = this.fb.nonNullable.group({\n lifecycleStatus: [null as DocumentLifecycleStatus | null],\n cabinetId: [null as string | null],\n creationTimeMin: [null as string | null],\n creationTimeMax: [null as string | null],\n });\n\n readonly form = this.fb.nonNullable.group({\n name: ['', [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)]],\n format: [ExportFormat.Csv, [Validators.required]],\n documentTypeId: ['', [Validators.required]],\n columns: this.fb.array<FormGroup>([]),\n });\n\n get columns(): FormArray<FormGroup> {\n return this.form.controls.columns;\n }\n\n constructor() {\n configureEntityTable<ExportTemplateDto>(this.extensions, EXTRACT_TABLES.ExportTemplates, [\n EntityProp.create<ExportTemplateDto>({\n type: ePropType.String,\n name: 'name',\n displayName: '::ExportTemplate:Name',\n sortable: true,\n }),\n EntityProp.create<ExportTemplateDto>({\n type: ePropType.String,\n name: 'format',\n displayName: '::ExportTemplate:Format',\n sortable: true,\n columnWidth: 150,\n valueResolver: data => {\n const localization = data.getInjected(LocalizationService);\n return of(`<span class=\"badge bg-secondary\">${escapeHtmlChars(localization.instant('::ExportFormat:' + this.formatLabel(data.record.format)))}</span>`);\n },\n }),\n EntityProp.create<ExportTemplateDto>({\n type: ePropType.String,\n name: 'documentTypeId',\n displayName: '::ExportTemplate:DocumentType',\n sortable: true,\n columnWidth: 220,\n valueResolver: data => {\n const label = this.documentTypeLabel(data.record.documentTypeId);\n return of(label\n ? `<span class=\"badge bg-info text-dark\">${escapeHtmlChars(label)}</span>`\n : '<span class=\"text-muted\">-</span>');\n },\n }),\n EntityProp.create<ExportTemplateDto>({\n type: ePropType.Number,\n name: 'columns',\n displayName: '::ExportTemplate:Columns',\n sortable: true,\n columnWidth: 150,\n valueResolver: data => of(data.record.columns?.length ?? 0),\n }),\n ]);\n }\n\n ngOnInit(): void {\n this.hookTableQuery();\n this.load();\n this.loadDocumentTypes();\n this.loadCabinets();\n }\n\n refresh(): void {\n this.load();\n }\n\n private load(): void {\n this.isLoading.set(true);\n this.service\n .getList()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: list => {\n this.allTemplates.set(list);\n this.list.totalCount = list.length;\n this.applyTableQuery();\n this.isLoading.set(false);\n },\n error: () => {\n this.allTemplates.set([]);\n this.templates.set({ totalCount: 0, items: [] });\n this.list.totalCount = 0;\n this.isLoading.set(false);\n },\n });\n }\n\n private hookTableQuery(): void {\n this.list.query$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(query => this.applyTableQuery(query));\n }\n\n private applyTableQuery(query: Partial<ABP.PageQueryParams> = this.tableQuery): void {\n this.tableQuery = query;\n this.templates.set(pageClientItems(this.allTemplates(), query, EXPORT_TEMPLATE_SORTS));\n }\n\n private loadDocumentTypes(): void {\n this.documentTypeService\n .getVisible()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: list => {\n this.documentTypes.set(list);\n this.applyTableQuery();\n },\n });\n }\n\n private loadCabinets(): void {\n this.cabinetService\n .getList()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: list => this.cabinets.set(list) });\n }\n\n openCreate(): void {\n this.columns.clear();\n this.fieldDefinitions.set([]);\n this.form.reset({ name: '', format: ExportFormat.Csv, documentTypeId: '' });\n this.addColumn();\n this.editing.set('create');\n }\n\n openEdit(template: ExportTemplateDto): void {\n this.columns.clear();\n this.form.reset({\n name: template.name,\n format: template.format,\n documentTypeId: template.documentTypeId,\n });\n this.loadFieldDefinitions(template.documentTypeId);\n [...(template.columns ?? [])]\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .forEach(c => this.addColumn(c.fieldDefinitionId));\n this.editing.set(template);\n }\n\n addColumn(fieldDefinitionId = ''): void {\n this.columns.push(\n this.fb.nonNullable.group({\n fieldDefinitionId: [fieldDefinitionId, [Validators.required]],\n }),\n );\n }\n\n removeColumn(index: number): void {\n this.columns.removeAt(index);\n }\n\n // Switching the document type invalidates already-picked field columns (they belong to the prior type).\n onDocumentTypeChange(): void {\n const documentTypeId = this.form.controls.documentTypeId.value;\n this.columns.controls.forEach(ctrl => ctrl.get('fieldDefinitionId')?.setValue(''));\n this.loadFieldDefinitions(documentTypeId);\n }\n\n private loadFieldDefinitions(documentTypeId: string | undefined): void {\n if (!documentTypeId) {\n this.fieldDefinitions.set([]);\n return;\n }\n this.fieldDefinitionService\n .getList({ documentTypeId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: defs => this.fieldDefinitions.set(defs),\n error: () => this.fieldDefinitions.set([]),\n });\n }\n\n closeModal(): void {\n this.editing.set(null);\n }\n\n submit(): void {\n if (this.form.invalid || this.columns.length === 0) {\n this.form.markAllAsTouched();\n return;\n }\n const mode = this.editing();\n if (mode === null) return;\n\n this.isSubmitting.set(true);\n const raw = this.form.getRawValue();\n // Order = array position; the editor's row order is the source of truth.\n const columns: ExportColumnInput[] = this.columns.controls.map((ctrl, i) => {\n const v = ctrl.getRawValue() as { fieldDefinitionId: string };\n return { fieldDefinitionId: v.fieldDefinitionId, order: i };\n });\n\n if (mode === 'create') {\n const input: CreateExportTemplateDto = {\n name: raw.name,\n format: raw.format,\n documentTypeId: raw.documentTypeId,\n columns,\n };\n this.service\n .create(input)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => this.onSaved('::ExportTemplate:CreatedSuccessfully'),\n error: () => this.isSubmitting.set(false),\n });\n } else {\n this.service\n .update(mode.id!, {\n name: raw.name,\n format: raw.format,\n documentTypeId: raw.documentTypeId,\n columns,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => this.onSaved('::ExportTemplate:UpdatedSuccessfully'),\n error: () => this.isSubmitting.set(false),\n });\n }\n }\n\n private onSaved(messageKey: string): void {\n this.isSubmitting.set(false);\n this.closeModal();\n this.toaster.success(messageKey, '::Success');\n this.load();\n }\n\n delete(template: ExportTemplateDto): void {\n this.confirmation\n .warn('::ExportTemplate:AreYouSureToDelete', '::AreYouSure')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(status => {\n if (status !== Confirmation.Status.confirm) return;\n this.service\n .delete(template.id!)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.toaster.success('::ExportTemplate:DeletedSuccessfully', '::Success');\n this.load();\n },\n error: () => this.toaster.error('::ExportTemplate:DeleteFailed', '::Error'),\n });\n });\n }\n\n exportTemplate(template: ExportTemplateDto): void {\n this.filterForm.reset({ lifecycleStatus: null, cabinetId: null, creationTimeMin: null, creationTimeMax: null });\n this.filteringTemplate.set(template);\n }\n\n closeFilterModal(): void {\n this.filteringTemplate.set(null);\n }\n\n startExport(): void {\n const template = this.filteringTemplate();\n if (!template) return;\n\n const f = this.filterForm.getRawValue();\n this.exportingId.set(template.id!);\n this.filteringTemplate.set(null);\n\n this.service\n .export({\n templateId: template.id!,\n lifecycleStatus: f.lifecycleStatus ?? undefined,\n cabinetId: f.cabinetId ?? undefined,\n creationTimeMin: f.creationTimeMin ?? undefined,\n creationTimeMax: f.creationTimeMax ?? undefined,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: blob => {\n const ext = template.format === ExportFormat.Xlsx ? '.xlsx' : '.csv';\n this.triggerDownload(blob, template.name + ext);\n this.exportingId.set(null);\n },\n error: () => this.exportingId.set(null),\n });\n }\n\n private triggerDownload(blob: Blob, fileName: string): void {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = fileName;\n anchor.click();\n // Defer revoke so the browser's download handler has taken ownership of the\n // blob before its backing URL is released (avoids a race on large files).\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n\n formatLabel(format: ExportFormat | undefined): string {\n return this.formatOptions.find(o => o.value === format)?.key ?? String(format);\n }\n\n documentTypeLabel(documentTypeId: string | undefined): string | null {\n return this.documentTypes().find(dt => dt.id === documentTypeId)?.typeCode ?? null;\n }\n}\n","<div class=\"container-fluid py-4\">\n <!-- Header -->\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <h4 class=\"mb-0\">\n <i class=\"fas fa-file-export me-2\"></i>\n {{ '::ExportTemplate:Title' | abpLocalization }}\n </h4>\n <div class=\"d-flex gap-2\">\n <button\n class=\"btn btn-outline-secondary\"\n (click)=\"refresh()\"\n [disabled]=\"isLoading()\"\n title=\"{{ '::Refresh' | abpLocalization }}\"\n >\n <i class=\"fas fa-sync-alt\" [class.fa-spin]=\"isLoading()\"></i>\n </button>\n @if (canManage) {\n <button class=\"btn btn-primary\" (click)=\"openCreate()\">\n <i class=\"fas fa-plus me-1\"></i>\n {{ '::ExportTemplate:New' | abpLocalization }}\n </button>\n }\n </div>\n </div>\n\n @if (isLoading()) {\n <div class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n </div>\n }\n\n @if (!isLoading() && templates().totalCount === 0) {\n <div class=\"card shadow-sm\">\n <div class=\"card-body text-center py-5\">\n <i class=\"fas fa-file-export fa-3x text-muted mb-3 d-block\"></i>\n <p class=\"text-muted mb-0\">{{ '::ExportTemplate:Empty' | abpLocalization }}</p>\n </div>\n </div>\n }\n\n @if (!isLoading() && templates().totalCount > 0) {\n <div class=\"card shadow-sm\">\n <div class=\"card-body p-0\">\n <ng-template #actionsTemplate let-template>\n @if (canExport || canManage) {\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\n <button type=\"button\" class=\"btn btn-sm btn-primary\" ngbDropdownToggle>\n {{ 'AbpUi::Actions' | abpLocalization }}\n </button>\n <div ngbDropdownMenu>\n @if (canExport) {\n <button\n type=\"button\"\n ngbDropdownItem\n (click)=\"exportTemplate(template)\"\n [disabled]=\"exportingId() === template.id\"\n >\n @if (exportingId() === template.id) {\n <span class=\"spinner-border spinner-border-sm me-2\"></span>\n } @else {\n <i class=\"fas fa-download me-2\"></i>\n }\n {{ '::ExportTemplate:Export' | abpLocalization }}\n </button>\n }\n @if (canManage) {\n <button type=\"button\" ngbDropdownItem (click)=\"openEdit(template)\">\n <i class=\"fas fa-pen me-2\"></i>\n {{ '::Edit' | abpLocalization }}\n </button>\n <button type=\"button\" ngbDropdownItem (click)=\"delete(template)\">\n <i class=\"fas fa-trash me-2\"></i>\n {{ '::Delete' | abpLocalization }}\n </button>\n }\n </div>\n </div>\n }\n </ng-template>\n\n <abp-extensible-table\n [data]=\"templates().items\"\n [recordsTotal]=\"templates().totalCount\"\n [list]=\"list\"\n [actionsTemplate]=\"actionsTemplate\"\n actionsText=\"AbpUi::Actions\"\n [actionsColumnWidth]=\"150\"\n />\n </div>\n </div>\n }\n</div>\n\n<!-- Export filter modal -->\n@if (filteringTemplate(); as tmpl) {\n <div class=\"modal d-block\" tabindex=\"-1\" style=\"background:rgba(0,0,0,.4);\" (click)=\"closeFilterModal()\">\n <div class=\"modal-dialog modal-dialog-centered\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-content\">\n <form [formGroup]=\"filterForm\" (ngSubmit)=\"startExport()\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">\n <i class=\"fas fa-filter me-2\"></i>\n {{ '::ExportTemplate:FilterAndExport' | abpLocalization }}\n </h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"closeFilterModal()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ '::Document:Status' | abpLocalization }}</label>\n <select class=\"form-select\" formControlName=\"lifecycleStatus\">\n <option [ngValue]=\"null\">{{ '::Document:Filter:AllStatuses' | abpLocalization }}</option>\n @for (opt of lifecycleStatusOptions; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ '::Document:Status:' + opt.key | abpLocalization }}</option>\n }\n </select>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ '::Document:Cabinet' | abpLocalization }}</label>\n <select class=\"form-select\" formControlName=\"cabinetId\">\n <option [ngValue]=\"null\">{{ '::Document:Filter:AllCabinets' | abpLocalization }}</option>\n @for (c of cabinets(); track c.id) {\n <option [value]=\"c.id\">{{ c.name }}</option>\n }\n </select>\n </div>\n <div class=\"row g-2\">\n <div class=\"col-6\">\n <label class=\"form-label\">{{ '::ExportTemplate:Filter:DateFrom' | abpLocalization }}</label>\n <input type=\"date\" class=\"form-control\" formControlName=\"creationTimeMin\" />\n </div>\n <div class=\"col-6\">\n <label class=\"form-label\">{{ '::ExportTemplate:Filter:DateTo' | abpLocalization }}</label>\n <input type=\"date\" class=\"form-control\" formControlName=\"creationTimeMax\" />\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeFilterModal()\">\n {{ '::Cancel' | abpLocalization }}\n </button>\n <button type=\"submit\" class=\"btn btn-success\">\n <i class=\"fas fa-download me-1\"></i>\n {{ '::ExportTemplate:Export' | abpLocalization }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n}\n\n<!-- Create / Edit modal -->\n@if (editing(); as mode) {\n <div class=\"modal d-block\" tabindex=\"-1\" style=\"background:rgba(0,0,0,.4);\" (click)=\"closeModal()\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-content\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">\n <i class=\"fas fa-file-export me-2\"></i>\n {{ (mode === 'create' ? '::ExportTemplate:New' : '::ExportTemplate:Edit') | abpLocalization }}\n </h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"closeModal()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"row g-3 mb-3\">\n <div class=\"col-md-5\">\n <label class=\"form-label\">{{ '::ExportTemplate:Name' | abpLocalization }}</label>\n <input\n type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [class.is-invalid]=\"form.controls.name.touched && form.controls.name.invalid\"\n />\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">{{ '::ExportTemplate:Format' | abpLocalization }}</label>\n <select class=\"form-select\" formControlName=\"format\">\n @for (opt of formatOptions; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ '::ExportFormat:' + opt.key | abpLocalization }}</option>\n }\n </select>\n </div>\n <div class=\"col-md-4\">\n <label class=\"form-label\">{{ '::ExportTemplate:DocumentType' | abpLocalization }}</label>\n <select\n class=\"form-select\"\n formControlName=\"documentTypeId\"\n (change)=\"onDocumentTypeChange()\"\n >\n <option value=\"\" disabled>{{ '::ExportTemplate:DocumentType' | abpLocalization }}</option>\n @for (dt of documentTypes(); track dt.id) {\n <option [value]=\"dt.id\">{{ dt.displayName }} ({{ dt.typeCode }})</option>\n }\n </select>\n </div>\n </div>\n\n <label class=\"form-label d-flex justify-content-between align-items-center\">\n <span>{{ '::ExportTemplate:Columns' | abpLocalization }}</span>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addColumn()\">\n <i class=\"fas fa-plus me-1\"></i>{{ '::ExportTemplate:AddColumn' | abpLocalization }}\n </button>\n </label>\n\n @if (columns.length === 0) {\n <p class=\"text-muted small\">{{ '::ExportTemplate:NoColumns' | abpLocalization }}</p>\n }\n\n <div formArrayName=\"columns\">\n @for (col of columns.controls; track $index) {\n <div class=\"row g-2 mb-2 align-items-center\" [formGroupName]=\"$index\">\n <div class=\"col-11\">\n <select class=\"form-select form-select-sm\" formControlName=\"fieldDefinitionId\">\n <option value=\"\" disabled>\n {{ '::ExportTemplate:ColumnKey' | abpLocalization }}\n </option>\n @for (fd of fieldDefinitions(); track fd.id) {\n <option [value]=\"fd.id\">{{ fd.displayName }} ({{ fd.name }})</option>\n }\n </select>\n </div>\n <div class=\"col-1 text-end\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-danger\"\n (click)=\"removeColumn($index)\"\n title=\"{{ '::Delete' | abpLocalization }}\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeModal()\">\n {{ '::Cancel' | abpLocalization }}\n </button>\n <button\n type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid || columns.length === 0 || isSubmitting()\"\n >\n @if (isSubmitting()) {\n <span class=\"spinner-border spinner-border-sm me-1\"></span>\n }\n {{ '::Save' | abpLocalization }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ const EXTRACT_TABLES = {
2
+ Cabinets: 'VaultExtract.Cabinets',
3
+ Documents: 'VaultExtract.Documents',
4
+ DocumentRecycleBin: 'VaultExtract.DocumentRecycleBin',
5
+ DocumentTypes: 'VaultExtract.DocumentTypes',
6
+ ExportTemplates: 'VaultExtract.ExportTemplates',
7
+ FieldDefinitions: 'VaultExtract.FieldDefinitions',
8
+ };
9
+ function configureEntityTable(extensions, identifier, props) {
10
+ const entityProps = extensions.entityProps.get(identifier);
11
+ entityProps.clearContributors();
12
+ entityProps.addContributor(propList => propList.addManyTail(props));
13
+ }
14
+ function pageClientItems(items, query, sortAccessors = {}) {
15
+ const sorted = sortItems(items, query.sorting, sortAccessors);
16
+ const skipCount = query.skipCount ?? 0;
17
+ const maxResultCount = query.maxResultCount ?? sorted.length;
18
+ return {
19
+ totalCount: sorted.length,
20
+ items: sorted.slice(skipCount, skipCount + maxResultCount),
21
+ };
22
+ }
23
+ function sortItems(items, sorting, sortAccessors) {
24
+ if (!sorting)
25
+ return [...items];
26
+ const [sortKey, sortOrder] = sorting.split(' ');
27
+ if (!sortKey)
28
+ return [...items];
29
+ const direction = sortOrder?.toLowerCase() === 'desc' ? -1 : 1;
30
+ const getValue = sortAccessors[sortKey] ?? ((item) => item[sortKey]);
31
+ return [...items].sort((a, b) => compareValues(getValue(a), getValue(b)) * direction);
32
+ }
33
+ function compareValues(a, b) {
34
+ if (a == null && b == null)
35
+ return 0;
36
+ if (a == null)
37
+ return 1;
38
+ if (b == null)
39
+ return -1;
40
+ const left = a instanceof Date ? a.getTime() : a;
41
+ const right = b instanceof Date ? b.getTime() : b;
42
+ if (typeof left === 'string' && typeof right === 'string') {
43
+ return left.localeCompare(right);
44
+ }
45
+ if (left < right)
46
+ return -1;
47
+ if (left > right)
48
+ return 1;
49
+ return 0;
50
+ }
51
+
52
+ export { EXTRACT_TABLES as E, configureEntityTable as c, pageClientItems as p };
53
+ //# sourceMappingURL=dignite-vault-extract-documents-extensible-table-DkLXuoWo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dignite-vault-extract-documents-extensible-table-DkLXuoWo.mjs","sources":["../../../packages/vault-extract/documents/src/lib/shared/extensible-table.ts"],"sourcesContent":["import { EntityProp, ExtensionsService } from '@abp/ng.components/extensible';\nimport type { ABP } from '@abp/ng.core';\n\nexport const EXTRACT_TABLES = {\n Cabinets: 'VaultExtract.Cabinets',\n Documents: 'VaultExtract.Documents',\n DocumentRecycleBin: 'VaultExtract.DocumentRecycleBin',\n DocumentTypes: 'VaultExtract.DocumentTypes',\n ExportTemplates: 'VaultExtract.ExportTemplates',\n FieldDefinitions: 'VaultExtract.FieldDefinitions',\n} as const;\n\nexport interface ClientPagedResult<T> {\n totalCount: number;\n items: T[];\n}\n\nexport type SortValue = boolean | Date | number | string | null | undefined;\nexport type SortAccessors<T> = Record<string, (item: T) => SortValue>;\n\nexport function configureEntityTable<T>(\n extensions: ExtensionsService,\n identifier: string,\n props: EntityProp<T>[],\n): void {\n const entityProps = extensions.entityProps.get(identifier);\n entityProps.clearContributors();\n entityProps.addContributor(propList => propList.addManyTail(props));\n}\n\nexport function pageClientItems<T>(\n items: T[],\n query: Partial<ABP.PageQueryParams>,\n sortAccessors: SortAccessors<T> = {},\n): ClientPagedResult<T> {\n const sorted = sortItems(items, query.sorting, sortAccessors);\n const skipCount = query.skipCount ?? 0;\n const maxResultCount = query.maxResultCount ?? sorted.length;\n\n return {\n totalCount: sorted.length,\n items: sorted.slice(skipCount, skipCount + maxResultCount),\n };\n}\n\nfunction sortItems<T>(\n items: T[],\n sorting: string | undefined,\n sortAccessors: SortAccessors<T>,\n): T[] {\n if (!sorting) return [...items];\n\n const [sortKey, sortOrder] = sorting.split(' ');\n if (!sortKey) return [...items];\n\n const direction = sortOrder?.toLowerCase() === 'desc' ? -1 : 1;\n const getValue = sortAccessors[sortKey] ?? ((item: T) => (item as Record<string, SortValue>)[sortKey]);\n\n return [...items].sort((a, b) => compareValues(getValue(a), getValue(b)) * direction);\n}\n\nfunction compareValues(a: SortValue, b: SortValue): number {\n if (a == null && b == null) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n\n const left = a instanceof Date ? a.getTime() : a;\n const right = b instanceof Date ? b.getTime() : b;\n\n if (typeof left === 'string' && typeof right === 'string') {\n return left.localeCompare(right);\n }\n\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"],"names":[],"mappings":"AAGO,MAAM,cAAc,GAAG;AAC5B,IAAA,QAAQ,EAAE,uBAAuB;AACjC,IAAA,SAAS,EAAE,wBAAwB;AACnC,IAAA,kBAAkB,EAAE,iCAAiC;AACrD,IAAA,aAAa,EAAE,4BAA4B;AAC3C,IAAA,eAAe,EAAE,8BAA8B;AAC/C,IAAA,gBAAgB,EAAE,+BAA+B;;SAWnC,oBAAoB,CAClC,UAA6B,EAC7B,UAAkB,EAClB,KAAsB,EAAA;IAEtB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1D,WAAW,CAAC,iBAAiB,EAAE;AAC/B,IAAA,WAAW,CAAC,cAAc,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACrE;AAEM,SAAU,eAAe,CAC7B,KAAU,EACV,KAAmC,EACnC,gBAAkC,EAAE,EAAA;AAEpC,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC;IACtC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM;IAE5D,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAAC;KAC3D;AACH;AAEA,SAAS,SAAS,CAChB,KAAU,EACV,OAA2B,EAC3B,aAA+B,EAAA;AAE/B,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AAE/B,IAAA,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AAE/B,IAAA,MAAM,SAAS,GAAG,SAAS,EAAE,WAAW,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;AAC9D,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAO,KAAM,IAAkC,CAAC,OAAO,CAAC,CAAC;AAEtG,IAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AACvF;AAEA,SAAS,aAAa,CAAC,CAAY,EAAE,CAAY,EAAA;AAC/C,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;IACvB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;AAExB,IAAA,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,IAAA,MAAM,KAAK,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;IAEjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACzD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC;IAEA,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,IAAI,GAAG,KAAK;AAAE,QAAA,OAAO,CAAC;AAC1B,IAAA,OAAO,CAAC;AACV;;;;"}