Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions web/src/components/case-details/civil/CivilDocumentsView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@
const documents: {
documentType: DocumentRequestType;
documentData: DocumentData;
memberName: string;
groupKeyOne: string;
groupKeyTwo: string;
documentName: string;
}[] = [];
items
Expand All @@ -276,7 +277,8 @@
documents.push({
documentType,
documentData,
memberName: '',
groupKeyOne: documentData.fileNumberText,
groupKeyTwo: '',
documentName:
item.documentTypeDescription +
' - ' +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@
const documents: {
documentType: DocumentRequestType;
documentData: DocumentData;
memberName: string;
groupKeyOne: string;
groupKeyTwo: string;
documentName: string;
}[] = [];
selectedItems.value
Expand All @@ -302,7 +303,8 @@
documents.push({
documentType,
documentData,
memberName: item.fullName,
groupKeyOne: documentData.fileNumberText,
groupKeyTwo: item.fullName,
documentName: documentData.documentDescription || ''
});
});
Expand Down
11 changes: 6 additions & 5 deletions web/src/components/courtlist/CourtList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,9 @@
const documents: Array<{
documentType: DocumentRequestType;
documentData: Record<string, any>;
memberName: string;
groupKeyTwo: string;
documentName: any;
caseNumber: string;
groupKeyOne: string;
}> = [];
uniqueMap.forEach((value) => {
let documentData: Record<string, any> = {
Expand All @@ -241,16 +241,17 @@
};
if (value.division === DivisionEnum.R) {
documentData.reportType = reportType;
documentData.isCriminal = true;
} else if (value.division === DivisionEnum.I) {
documentData.additionsList = reportType === 'Additions' ? 'Y' : 'N';
}

documents.push({
documentType: DocumentRequestType.Report,
documentData,
memberName: value.courtRoom,
documentName: documentData.reportType || documentData.date,
caseNumber: value.locationName,
groupKeyTwo: value.courtRoom,
documentName: reportType,
groupKeyOne: value.locationName,
});
});
shared.openDocumentsPdfV2(documents);
Expand Down
56 changes: 38 additions & 18 deletions web/src/components/documents/NutrientContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,7 @@
}
const loading = ref(false);
const emptyStore = ref(false);
const configuration = {
initialViewState: new NutrientViewer.ViewState({
sidebarMode: NutrientViewer.SidebarMode.DOCUMENT_OUTLINE,
}),
container: '.pdf-container',
};
const configuration = { container: '.pdf-container' };
let documentResponse: GeneratePdfResponse | null = null;
let pageIndex = 0;

Expand All @@ -48,6 +43,7 @@
const loadMultiple = async () => {
const groupedDocs = pdfStore.groupedDocuments;
const allDocs: StoreDocument[] = [];

Object.values(groupedDocs).forEach(
(userGroup: Record<string, StoreDocument[]>) => {
Object.values(userGroup).forEach((docs) => {
Expand All @@ -60,46 +56,70 @@
allDocs.map((doc) => doc.request)
);
loading.value = false;

const outline = configureOutline();
let instance = await NutrientViewer.load({
...configuration,
document: `data:application/pdf;base64,${documentResponse.base64Pdf}`,
});
configureOutline(instance);

instance.setDocumentOutline(outline);
instance.setViewState((viewState) =>
viewState.set('sidebarMode', NutrientViewer.SidebarMode.DOCUMENT_OUTLINE)
);
};

const configureOutline = (instance: any) => {
const configureOutline = (): any => {
const outline = NutrientViewer.Immutable.List(
Object.entries(pdfStore.groupedDocuments).map(([groupKey, userGroup]) =>
makeCaseElement(groupKey, userGroup)
makeFirstGroup(groupKey, userGroup)
)
);
instance.setDocumentOutline(outline);
return outline;
};

const makeCaseElement = (
const makeFirstGroup = (
groupKey: string,
userGroup: Record<string, StoreDocument[]>
) => {
const childrenArray: any[] = [];
Object.entries(userGroup).forEach(([name, docs]) => {
if (name !== '') {
childrenArray.push(makeSecondGroup(name, docs));
} else {
makeDocElements(docs).forEach((el: any) => childrenArray.push(el));
}
});
const childrenList = NutrientViewer.Immutable.List(childrenArray);
return new NutrientViewer.OutlineElement({
title: groupKey,
children: NutrientViewer.Immutable.List(
Object.entries(userGroup).map(([name, docs]) =>
makeMemberElement(name || 'Documents', docs)
)
),
isExpanded: true,
children: childrenList,
});
};

const makeMemberElement = (memberName: string, docs: StoreDocument[]) => {
const makeSecondGroup = (memberName: string, docs: StoreDocument[]) => {
return new NutrientViewer.OutlineElement({
title: memberName,
isExpanded: true,
children: NutrientViewer.Immutable.List(
docs.map((doc) => makeDocElement(doc))
),
});
};

const makeDocElements = (docs: StoreDocument[]) => {
return NutrientViewer.Immutable.List(
docs.map((doc) =>
new NutrientViewer.OutlineElement({
title: doc.documentName,
action: new NutrientViewer.Actions.GoToAction({
pageIndex: documentResponse?.pageRanges?.[pageIndex++]?.start,
}),
})
)
);
};

const makeDocElement = (doc: StoreDocument) => {
return new NutrientViewer.OutlineElement({
title: doc.documentName,
Expand Down
10 changes: 6 additions & 4 deletions web/src/components/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ export default {
documents?: {
documentType: DocumentRequestType;
documentData: DocumentData;
memberName: string;
groupKeyOne: string;
groupKeyTwo: string;
documentName: string;
caseNumber?: string;
}[]
): void {
if (!documents || documents.length === 0) return;
Expand Down Expand Up @@ -117,15 +117,17 @@ export default {
locationId: doc.documentData.locationId,
roomCode: doc.documentData.roomCode || '',
reportType: doc.documentData.reportType || '',
additionsList: doc.documentData.additionsList || '',
},
},
caseNumber: doc.caseNumber || doc.documentData.fileNumberText || 'Case',
memberName: doc.memberName,
groupKeyOne: doc.groupKeyOne,
groupKeyTwo: doc.groupKeyTwo,
documentName: doc.documentName,
});
});
window.open('/pdf-viewer', 'pdf-viewer');
},

generateFileName(
documentType: CourtDocumentType,
documentData: DocumentData
Expand Down
15 changes: 7 additions & 8 deletions web/src/stores/PDFViewerStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ export const usePDFViewerStore = defineStore('PDFViewerStore', {
addDocument(document: StoreDocument): void {
this.storedDocuments.push(document);

if (document.caseNumber) {
// Group documents by caseNumber, then by memberName
if (document.groupKeyOne) {
const grouped = this.documents.reduce(
(acc, doc) => {
if (!acc[doc.caseNumber]) acc[doc.caseNumber] = {};
if (!acc[doc.caseNumber][doc.memberName])
acc[doc.caseNumber][doc.memberName] = [];
acc[doc.caseNumber][doc.memberName].push(doc);
if (!acc[doc.groupKeyOne]) acc[doc.groupKeyOne] = {};
if (!acc[doc.groupKeyOne][doc.groupKeyTwo])
acc[doc.groupKeyOne][doc.groupKeyTwo] = [];
acc[doc.groupKeyOne][doc.groupKeyTwo].push(doc);
return acc;
},
{} as Record<string, Record<string, StoreDocument[]>>
Expand All @@ -41,7 +40,7 @@ export const usePDFViewerStore = defineStore('PDFViewerStore', {

export type StoreDocument = {
request: GeneratePdfRequest;
caseNumber: string;
memberName: string;
groupKeyOne: string;
groupKeyTwo: string;
documentName: string;
};
1 change: 1 addition & 0 deletions web/src/types/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export interface DocumentData {
roomCode?: string;
reportType?: string;
isCriminal?: boolean;
additionsList?: string;
}

export enum CourtDocumentType {
Expand Down
11 changes: 6 additions & 5 deletions web/tests/components/documents/NutrientContainer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const mockGroupedDocuments = {
"data": {
}
},
"caseNumber": "123",
"memberName": "John Johnson",
"groupKeyOne": "123",
"groupKeyTwo": "John Johnson",
"documentName": "Information"
}
],
Expand All @@ -26,8 +26,8 @@ const mockGroupedDocuments = {
"data": {
}
},
"caseNumber": "123",
"memberName": "Elmer Fudd",
"groupKeyOne": "123",
"groupKeyTwo": "Elmer Fudd",
"documentName": "Information"
}
]
Expand Down Expand Up @@ -91,7 +91,8 @@ describe('NutrientContainer.vue', () => {
const mergedInstance = {
totalPageCount: typeof document !== 'string' && document instanceof ArrayBuffer ? 3 : 2,
exportPDFWithOperations: vi.fn().mockResolvedValue('mergedDocument'),
setDocumentOutline: vi.fn()
setDocumentOutline: vi.fn(),
setViewState: vi.fn(),
};
return Promise.resolve(mergedInstance);
});
Expand Down
Loading