Skip to content

Commit

Permalink
Make upload dialog more robust and secure
Browse files Browse the repository at this point in the history
- Create interfaces for setting data to allow for
  better validation
- Create a global options const that can be used
  for both add and edit to make sure they are
  consistent
- Pass in parcel/owner services to avoid long
  modal opening times
  • Loading branch information
trslater committed Feb 26, 2025
1 parent d3f4cce commit d750fb1
Show file tree
Hide file tree
Showing 9 changed files with 242 additions and 192 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,25 @@ import {
DocumentUploadDialogComponent,
VisibilityGroup,
} from '../../../shared/document-upload-dialog/document-upload-dialog.component';
import {
DocumentUploadDialogData,
DocumentUploadDialogOptions,
} from '../../../shared/document-upload-dialog/document-upload-dialog.interface';

const DOCUMENT_UPLOAD_DIALOG_OPTIONS: DocumentUploadDialogOptions = {
allowedVisibilityFlags: ['A', 'C', 'G', 'P'],
allowsFileEdit: true,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
};

@Component({
selector: 'app-documents',
Expand Down Expand Up @@ -63,37 +82,19 @@ export class DocumentsComponent implements OnInit {
}

async onUploadFile() {
const submission = await this.applicationSubmissionService.fetchSubmission(this.fileId);
const parcels = await this.applicationParcelService.fetchParcels(this.fileId);
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
fileId: this.fileId,
documentService: this.applicationDocumentService,
parcelService: this.applicationParcelService,
submissionService: this.applicationSubmissionService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
documentService: this.applicationDocumentService,
selectableParcels: parcels.map((parcel, index) => ({ ...parcel, index })),
selectableOwners: submission.owners
.filter((owner) => owner.type.code === 'ORGZ')
.map((owner) => ({
label: owner.organizationName ?? owner.displayName,
uuid: owner.uuid,
})),
allowedVisibilityFlags: ['A', 'C', 'G', 'P'],
allowsFileEdit: true,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
},
data,
})
.afterClosed()
.subscribe((isDirty) => {
Expand Down Expand Up @@ -126,37 +127,21 @@ export class DocumentsComponent implements OnInit {
}

async onEditFile(element: ApplicationDocumentDto) {
const submission = await this.applicationSubmissionService.fetchSubmission(this.fileId);
const parcels = await this.applicationParcelService.fetchParcels(this.fileId);
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
fileId: this.fileId,
existingDocument: element,
documentService: this.applicationDocumentService,
parcelService: this.applicationParcelService,
submissionService: this.applicationSubmissionService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
existingDocument: element,
documentService: this.applicationDocumentService,
selectableParcels: parcels.map((parcel, index) => ({ ...parcel, index })),
selectableOwners: submission.owners
.filter((owner) => owner.type.code === 'ORGZ')
.map((owner) => ({
label: owner.organizationName ?? owner.displayName,
uuid: owner.uuid,
})),
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
},
data,
})
.afterClosed()
.subscribe((isDirty: boolean) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { ConfirmationDialogService } from '../../../shared/confirmation-dialog/c
import { DOCUMENT_SYSTEM } from '../../../shared/document/document.dto';
import { FILE_NAME_TRUNCATE_LENGTH } from '../../../shared/constants';
import { DocumentUploadDialogComponent } from '../../../shared/document-upload-dialog/document-upload-dialog.component';
import { DocumentUploadDialogData } from '../../../shared/document-upload-dialog/document-upload-dialog.interface';

@Component({
selector: 'app-documents',
Expand Down Expand Up @@ -47,16 +48,18 @@ export class DocumentsComponent implements OnInit {
}

async onUploadFile() {
const data: DocumentUploadDialogData = {
allowsFileEdit: true,
fileId: this.fileId,
documentService: this.inquiryDocumentService,
};

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
documentService: this.inquiryDocumentService,
allowsFileEdit: true,
},
data,
})
.afterClosed()
.subscribe((isDirty) => {
Expand Down Expand Up @@ -89,17 +92,19 @@ export class DocumentsComponent implements OnInit {
}

onEditFile(element: PlanningReviewDocumentDto) {
const data: DocumentUploadDialogData = {
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
fileId: this.fileId,
existingDocument: element,
documentService: this.inquiryDocumentService,
};

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
existingDocument: element,
documentService: this.inquiryDocumentService,
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
},
data,
})
.afterClosed()
.subscribe((isDirty: boolean) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,25 @@ import {
} from '../../../shared/document-upload-dialog/document-upload-dialog.component';
import { NoticeOfIntentSubmissionService } from '../../../services/notice-of-intent/notice-of-intent-submission/notice-of-intent-submission.service';
import { NoticeOfIntentParcelService } from '../../../services/notice-of-intent/notice-of-intent-parcel/notice-of-intent-parcel.service';
import {
DocumentUploadDialogData,
DocumentUploadDialogOptions,
} from '../../../shared/document-upload-dialog/document-upload-dialog.interface';

const DOCUMENT_UPLOAD_DIALOG_OPTIONS: DocumentUploadDialogOptions = {
allowedVisibilityFlags: ['A', 'C', 'G', 'P'],
allowsFileEdit: true,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
};

@Component({
selector: 'app-noi-documents',
Expand Down Expand Up @@ -67,37 +86,19 @@ export class NoiDocumentsComponent implements OnInit {
}

async onUploadFile() {
const submission = await this.noiSubmissionService.fetchSubmission(this.fileId);
const parcels = await this.noiParcelService.fetchParcels(this.fileId);
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
fileId: this.fileId,
documentService: this.noiDocumentService,
parcelService: this.noiParcelService,
submissionService: this.noiSubmissionService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
documentService: this.noiDocumentService,
selectableParcels: parcels.map((parcel, index) => ({ ...parcel, index })),
selectableOwners: submission.owners
.filter((owner) => owner.type.code === 'ORGZ')
.map((owner) => ({
label: owner.organizationName ?? owner.displayName,
uuid: owner.uuid,
})),
allowedVisibilityFlags: ['A', 'C', 'G', 'P'],
allowsFileEdit: true,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
},
data,
})
.afterClosed()
.subscribe((isDirty) => {
Expand All @@ -116,38 +117,21 @@ export class NoiDocumentsComponent implements OnInit {
}

async onEditFile(element: NoticeOfIntentDocumentDto) {
const submission = await this.noiSubmissionService.fetchSubmission(this.fileId);
const parcels = await this.noiParcelService.fetchParcels(this.fileId);
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
fileId: this.fileId,
existingDocument: element,
documentService: this.noiDocumentService,
parcelService: this.noiParcelService,
submissionService: this.noiSubmissionService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
existingDocument: element,
documentService: this.noiDocumentService,
selectableParcels: parcels.map((parcel, index) => ({ ...parcel, index })),
selectableOwners: submission.owners
.filter((owner) => owner.type.code === 'ORGZ')
.map((owner) => ({
label: owner.organizationName ?? owner.displayName,
uuid: owner.uuid,
})),
allowedVisibilityFlags: ['A', 'C', 'G', 'P'],
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
documentTypeOverrides: {
[DOCUMENT_TYPE.CERTIFICATE_OF_TITLE]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
[DOCUMENT_TYPE.CORPORATE_SUMMARY]: {
visibilityGroups: [VisibilityGroup.INTERNAL],
allowsFileEdit: false,
},
},
},
data,
})
.afterClosed()
.subscribe((isDirty: boolean) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ import { ConfirmationDialogService } from '../../../shared/confirmation-dialog/c
import { DOCUMENT_SYSTEM } from '../../../shared/document/document.dto';
import { FILE_NAME_TRUNCATE_LENGTH } from '../../../shared/constants';
import { DocumentUploadDialogComponent } from '../../../shared/document-upload-dialog/document-upload-dialog.component';
import {
DocumentUploadDialogData,
DocumentUploadDialogOptions,
} from '../../../shared/document-upload-dialog/document-upload-dialog.interface';

const DOCUMENT_UPLOAD_DIALOG_OPTIONS: DocumentUploadDialogOptions = {
allowedVisibilityFlags: ['A', 'G', 'P'],
allowsFileEdit: true,
};

@Component({
selector: 'app-notification-documents',
Expand Down Expand Up @@ -48,17 +57,17 @@ export class NotificationDocumentsComponent implements OnInit {
}

async onUploadFile() {
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
fileId: this.fileId,
documentService: this.notificationDocumentService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
documentService: this.notificationDocumentService,
allowedVisibilityFlags: ['A', 'G', 'P'],
allowsFileEdit: true,
},
data,
})
.afterClosed()
.subscribe((isDirty) => {
Expand Down Expand Up @@ -91,18 +100,19 @@ export class NotificationDocumentsComponent implements OnInit {
}

onEditFile(element: NoticeOfIntentDocumentDto) {
const data: DocumentUploadDialogData = Object.assign(DOCUMENT_UPLOAD_DIALOG_OPTIONS, {
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
fileId: this.fileId,
existingDocument: element,
documentService: this.notificationDocumentService,
});

this.dialog
.open(DocumentUploadDialogComponent, {
minWidth: '600px',
maxWidth: '800px',
width: '70%',
data: {
fileId: this.fileId,
existingDocument: element,
documentService: this.notificationDocumentService,
allowedVisibilityFlags: ['A', 'G', 'P'],
allowsFileEdit: element.system === DOCUMENT_SYSTEM.ALCS,
},
data,
})
.afterClosed()
.subscribe((isDirty: boolean) => {
Expand Down
Loading

0 comments on commit d750fb1

Please sign in to comment.