Adjust doc detail filtering

This commit is contained in:
shamoon 2024-05-20 11:34:00 -07:00
parent 46831c1d19
commit 948b93db89
3 changed files with 35 additions and 34 deletions

View File

@ -105,13 +105,13 @@
<pngx-input-number i18n-title title="Archive serial number" [error]="error?.archive_serial_number" [horizontal]="true" formControlName='archive_serial_number'></pngx-input-number> <pngx-input-number i18n-title title="Archive serial number" [error]="error?.archive_serial_number" [horizontal]="true" formControlName='archive_serial_number'></pngx-input-number>
<pngx-input-date i18n-title title="Date created" formControlName="created_date" [suggestions]="suggestions?.dates" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)" <pngx-input-date i18n-title title="Date created" formControlName="created_date" [suggestions]="suggestions?.dates" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)"
[error]="error?.created_date"></pngx-input-date> [error]="error?.created_date"></pngx-input-date>
<pngx-input-select [items]="correspondents" i18n-title title="Correspondent" formControlName="correspondent" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)" <pngx-input-select [items]="correspondents" i18n-title title="Correspondent" formControlName="correspondent" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event, DataType.Correspondent)"
(createNew)="createCorrespondent($event)" [suggestions]="suggestions?.correspondents" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.Correspondent }"></pngx-input-select> (createNew)="createCorrespondent($event)" [suggestions]="suggestions?.correspondents" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.Correspondent }"></pngx-input-select>
<pngx-input-select [items]="documentTypes" i18n-title title="Document type" formControlName="document_type" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)" <pngx-input-select [items]="documentTypes" i18n-title title="Document type" formControlName="document_type" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event, DataType.DocumentType)"
(createNew)="createDocumentType($event)" [suggestions]="suggestions?.document_types" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.DocumentType }"></pngx-input-select> (createNew)="createDocumentType($event)" [suggestions]="suggestions?.document_types" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.DocumentType }"></pngx-input-select>
<pngx-input-select [items]="storagePaths" i18n-title title="Storage path" formControlName="storage_path" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)" <pngx-input-select [items]="storagePaths" i18n-title title="Storage path" formControlName="storage_path" [allowNull]="true" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event, DataType.StoragePath)"
(createNew)="createStoragePath($event)" [suggestions]="suggestions?.storage_paths" i18n-placeholder placeholder="Default" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.StoragePath }"></pngx-input-select> (createNew)="createStoragePath($event)" [suggestions]="suggestions?.storage_paths" i18n-placeholder placeholder="Default" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.StoragePath }"></pngx-input-select>
<pngx-input-tags formControlName="tags" [suggestions]="suggestions?.tags" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event)" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.Tag }"></pngx-input-tags> <pngx-input-tags formControlName="tags" [suggestions]="suggestions?.tags" [showFilter]="true" [horizontal]="true" (filterDocuments)="filterDocuments($event, DataType.Tag)" *pngxIfPermissions="{ action: PermissionAction.View, type: PermissionType.Tag }"></pngx-input-tags>
@for (fieldInstance of document?.custom_fields; track fieldInstance.field; let i = $index) { @for (fieldInstance of document?.custom_fields; track fieldInstance.field; let i = $index) {
<div [formGroup]="customFieldFormFields.controls[i]"> <div [formGroup]="customFieldFormFields.controls[i]">
@switch (getCustomFieldFromInstance(fieldInstance)?.data_type) { @switch (getCustomFieldFromInstance(fieldInstance)?.data_type) {

View File

@ -81,6 +81,7 @@ import { environment } from 'src/environments/environment'
import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component' import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component' import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
import { PdfViewerModule } from 'ng2-pdf-viewer' import { PdfViewerModule } from 'ng2-pdf-viewer'
import { DataType } from 'src/app/data/datatype'
const doc: Document = { const doc: Document = {
id: 3, id: 3,
@ -781,10 +782,9 @@ describe('DocumentDetailComponent', () => {
const object = { const object = {
id: 22, id: 22,
name: 'Correspondent22', name: 'Correspondent22',
last_correspondence: new Date().toISOString(),
} as Correspondent } as Correspondent
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter') const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
component.filterDocuments([object]) component.filterDocuments([object], DataType.Correspondent)
expect(qfSpy).toHaveBeenCalledWith([ expect(qfSpy).toHaveBeenCalledWith([
{ {
rule_type: FILTER_CORRESPONDENT, rule_type: FILTER_CORRESPONDENT,
@ -797,7 +797,7 @@ describe('DocumentDetailComponent', () => {
initNormally() initNormally()
const object = { id: 22, name: 'DocumentType22' } as DocumentType const object = { id: 22, name: 'DocumentType22' } as DocumentType
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter') const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
component.filterDocuments([object]) component.filterDocuments([object], DataType.DocumentType)
expect(qfSpy).toHaveBeenCalledWith([ expect(qfSpy).toHaveBeenCalledWith([
{ {
rule_type: FILTER_DOCUMENT_TYPE, rule_type: FILTER_DOCUMENT_TYPE,
@ -814,7 +814,7 @@ describe('DocumentDetailComponent', () => {
path: '/foo/bar/', path: '/foo/bar/',
} as StoragePath } as StoragePath
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter') const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
component.filterDocuments([object]) component.filterDocuments([object], DataType.StoragePath)
expect(qfSpy).toHaveBeenCalledWith([ expect(qfSpy).toHaveBeenCalledWith([
{ {
rule_type: FILTER_STORAGE_PATH, rule_type: FILTER_STORAGE_PATH,
@ -840,7 +840,7 @@ describe('DocumentDetailComponent', () => {
text_color: '#000000', text_color: '#000000',
} as Tag } as Tag
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter') const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
component.filterDocuments([object1, object2]) component.filterDocuments([object1, object2], DataType.Tag)
expect(qfSpy).toHaveBeenCalledWith([ expect(qfSpy).toHaveBeenCalledWith([
{ {
rule_type: FILTER_HAS_TAGS_ALL, rule_type: FILTER_HAS_TAGS_ALL,

View File

@ -70,6 +70,7 @@ import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-conf
import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component' import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
import { HotKeyService } from 'src/app/services/hot-key.service' import { HotKeyService } from 'src/app/services/hot-key.service'
import { PDFDocumentProxy } from 'ng2-pdf-viewer' import { PDFDocumentProxy } from 'ng2-pdf-viewer'
import { DataType } from 'src/app/data/datatype'
enum DocumentDetailNavIDs { enum DocumentDetailNavIDs {
Details = 1, Details = 1,
@ -170,6 +171,8 @@ export class DocumentDetailComponent
public readonly ContentRenderType = ContentRenderType public readonly ContentRenderType = ContentRenderType
public readonly DataType = DataType
@ViewChild('nav') nav: NgbNav @ViewChild('nav') nav: NgbNav
@ViewChild('pdfPreview') set pdfPreview(element) { @ViewChild('pdfPreview') set pdfPreview(element) {
// this gets called when component added or removed from DOM // this gets called when component added or removed from DOM
@ -989,7 +992,7 @@ export class DocumentDetailComponent
) )
} }
filterDocuments(items: ObjectWithId[] | NgbDateStruct[]) { filterDocuments(items: ObjectWithId[] | NgbDateStruct[], type?: DataType) {
const filterRules: FilterRule[] = items.flatMap((i) => { const filterRules: FilterRule[] = items.flatMap((i) => {
if (i.hasOwnProperty('year')) { if (i.hasOwnProperty('year')) {
const isoDateAdapter = new ISODateAdapter() const isoDateAdapter = new ISODateAdapter()
@ -1008,30 +1011,28 @@ export class DocumentDetailComponent
value: dateBefore.toISOString().substring(0, 10), value: dateBefore.toISOString().substring(0, 10),
}, },
] ]
} else if (i.hasOwnProperty('last_correspondence')) { }
// Correspondent switch (type) {
case DataType.Correspondent:
return { return {
rule_type: FILTER_CORRESPONDENT, rule_type: FILTER_CORRESPONDENT,
value: (i as Correspondent).id.toString(), value: (i as Correspondent).id.toString(),
} }
} else if (i.hasOwnProperty('path')) { case DataType.DocumentType:
// Storage Path return {
rule_type: FILTER_DOCUMENT_TYPE,
value: (i as DocumentType).id.toString(),
}
case DataType.StoragePath:
return { return {
rule_type: FILTER_STORAGE_PATH, rule_type: FILTER_STORAGE_PATH,
value: (i as StoragePath).id.toString(), value: (i as StoragePath).id.toString(),
} }
} else if (i.hasOwnProperty('is_inbox_tag')) { case DataType.Tag:
// Tag
return { return {
rule_type: FILTER_HAS_TAGS_ALL, rule_type: FILTER_HAS_TAGS_ALL,
value: (i as Tag).id.toString(), value: (i as Tag).id.toString(),
} }
} else {
// Document Type, has no specific props
return {
rule_type: FILTER_DOCUMENT_TYPE,
value: (i as DocumentType).id.toString(),
}
} }
}) })