From af587784b6f8446e359fcc6331c31895d50b7661 Mon Sep 17 00:00:00 2001 From: Andy Kuny Date: Wed, 19 Jun 2024 15:59:26 -0400 Subject: [PATCH 001/116] Start building out the status report order response form --- __10102-notes-delete-when-finished.md | 7 + .../authorizationClientService.ts | 4 + .../src/business/entities/EntityConstants.ts | 6 + .../entities/StatusReportOrderResponseForm.ts | 54 +++ shared/src/tools/externalFilingEvents.json | 3 +- shared/src/tools/internalFilingEvents.json | 3 +- web-client/src/getConstants.ts | 2 + ...learStatusReportOrderResponseFormAction.ts | 13 + .../computeds/documentViewerHelper.ts | 8 + .../computeds/documentViewerLinksHelper.ts | 1 + .../computeds/messageDocumentHelper.ts | 19 + .../computeds/orderResponseHelper.ts | 31 ++ web-client/src/presenter/presenter.ts | 6 + ...arStatusReportOrderResponseFormSequence.ts | 11 + .../sequences/gotoOrderResponseSequence.ts | 21 + web-client/src/presenter/state.ts | 4 + web-client/src/router.ts | 27 ++ web-client/src/views/AppComponent.tsx | 2 + .../DocketRecord/DocumentViewerDocument.tsx | 16 +- .../src/views/Messages/MessageDocument.tsx | 23 +- web-client/src/views/OrderResponse.tsx | 455 ++++++++++++++++++ 21 files changed, 703 insertions(+), 13 deletions(-) create mode 100644 __10102-notes-delete-when-finished.md create mode 100644 shared/src/business/entities/StatusReportOrderResponseForm.ts create mode 100644 web-client/src/presenter/actions/clearStatusReportOrderResponseFormAction.ts create mode 100644 web-client/src/presenter/computeds/orderResponseHelper.ts create mode 100644 web-client/src/presenter/sequences/clearStatusReportOrderResponseFormSequence.ts create mode 100644 web-client/src/presenter/sequences/gotoOrderResponseSequence.ts create mode 100644 web-client/src/views/OrderResponse.tsx diff --git a/__10102-notes-delete-when-finished.md b/__10102-notes-delete-when-finished.md new file mode 100644 index 00000000000..2672de2c300 --- /dev/null +++ b/__10102-notes-delete-when-finished.md @@ -0,0 +1,7 @@ +# 10102 + +## Questions for UX + +1. Should the "Docket entry descripton" textarea field have a restriction on its +character length similar to "Additional order text" above? + diff --git a/shared/src/authorization/authorizationClientService.ts b/shared/src/authorization/authorizationClientService.ts index cca1c7b108d..8afcf0a26bf 100644 --- a/shared/src/authorization/authorizationClientService.ts +++ b/shared/src/authorization/authorizationClientService.ts @@ -45,6 +45,7 @@ export const ROLE_PERMISSIONS = { JUDGE_ACTIVITY_REPORT: 'JUDGE_ACTIVITY_REPORT', JUDGES_NOTES: 'JUDGES_NOTES', MANAGE_PRACTITIONER_USERS: 'MANAGE_PRACTITIONER_USERS', + ORDER_RESPONSE: 'ORDER_RESPONSE', PENDING_ITEMS: 'PENDING_ITEMS', PENDING_MOTIONS_TABLE: 'PENDING_MOTIONS_TABLE', PETITION: 'PETITION', @@ -117,6 +118,7 @@ const allInternalUserPermissions = [ const adcPermissions = [ ...allInternalUserPermissions, ROLE_PERMISSIONS.CREATE_TRIAL_SESSION, + ROLE_PERMISSIONS.ORDER_RESPONSE, ROLE_PERMISSIONS.STAMP_MOTION, ]; @@ -151,6 +153,7 @@ const chambersPermissions = [ ROLE_PERMISSIONS.JUDGE_ACTIVITY_REPORT, ROLE_PERMISSIONS.CASE_WORKSHEET, ROLE_PERMISSIONS.DOCKET_ENTRY_WORKSHEET, + ROLE_PERMISSIONS.ORDER_RESPONSE, ]; const docketClerkPermissions = [ @@ -268,6 +271,7 @@ const judgePermissions = [ ROLE_PERMISSIONS.JUDGE_ACTIVITY_REPORT, ROLE_PERMISSIONS.CASE_WORKSHEET, ROLE_PERMISSIONS.DOCKET_ENTRY_WORKSHEET, + ROLE_PERMISSIONS.ORDER_RESPONSE, ]; const petitionerPermissions = [ diff --git a/shared/src/business/entities/EntityConstants.ts b/shared/src/business/entities/EntityConstants.ts index 522cdf67dfc..ce28a7212a7 100644 --- a/shared/src/business/entities/EntityConstants.ts +++ b/shared/src/business/entities/EntityConstants.ts @@ -583,6 +583,12 @@ export const STAMPED_DOCUMENTS_ALLOWLIST = uniq( .map(x => x.eventCode), ); +export const ORDER_RESPONSE_DOCUMENTS_ALLOWLIST = uniq( + [...EXTERNAL_DOCUMENTS_ARRAY, ...INTERNAL_DOCUMENTS_ARRAY] + .filter((doc: Record) => doc.allowOrderResponse) + .map(x => x.eventCode), +); + export const EXTERNAL_TRACKED_DOCUMENT_EVENT_CODES = EXTERNAL_DOCUMENTS_ARRAY.filter( doc => diff --git a/shared/src/business/entities/StatusReportOrderResponseForm.ts b/shared/src/business/entities/StatusReportOrderResponseForm.ts new file mode 100644 index 00000000000..c9875f64936 --- /dev/null +++ b/shared/src/business/entities/StatusReportOrderResponseForm.ts @@ -0,0 +1,54 @@ +import { JoiValidationConstants } from './JoiValidationConstants'; +import { JoiValidationEntity } from './JoiValidationEntity'; +import joi from 'joi'; + +export class StatusReportOrderResponseForm extends JoiValidationEntity { + public issueOrder?: string; + public statusReportOrStipulatedDecision: string; + public dueDate: string; + public strikenFromTrialSessions: string; + public jurisdiction: string; + public additionalOrderText: string; + public docketEntryDescription: string; + + constructor(rawProps) { + super('StatusReportOrderResponseForm'); + + this.issueOrder = rawProps.issueOrder; + this.statusReportOrStipulatedDecision = + rawProps.statusReportOrStipulatedDecision; + this.dueDate = rawProps.dueDate; + this.strikenFromTrialSessions = rawProps.strikenFromTrialSessions; + this.jurisdiction = rawProps.jurisdiction; + this.additionalOrderText = rawProps.additionalOrderText; + this.docketEntryDescription = rawProps.docketEntryDescription; + } + static VALIDATION_RULES = joi.object().keys({ + // confirmPassword: joi + // .valid(joi.ref('password')) + // .required() + // .messages({ '*': 'Passwords must match' }), + // email: JoiValidationConstants.EMAIL.required() + // .messages({ + // '*': 'Enter a valid email address', + // 'string.max': 'Email address must contain fewer than 100 characters', + // }) + // .description('Email of user'), + // entityName: + // JoiValidationConstants.STRING.valid('ChangePasswordForm').required(), + // password: PASSWORD_RULE, + + // TODO issueOrder radio button is only required if the case is a lead case + statusReportOrStipulatedDecision: JoiValidationConstants.STRING.valid([ + 'statusReport', + 'orStipulatedDecision', + ]), + }); + + getValidationRules() { + return StatusReportOrderResponseForm.VALIDATION_RULES; + } +} + +export type RawStatusReportOrderResponseForm = + ExcludeMethods; diff --git a/shared/src/tools/externalFilingEvents.json b/shared/src/tools/externalFilingEvents.json index 8ed387c4ac9..b7f340d8a84 100644 --- a/shared/src/tools/externalFilingEvents.json +++ b/shared/src/tools/externalFilingEvents.json @@ -395,7 +395,8 @@ "scenario": "Standard", "labelPreviousDocument": "", "labelFreeText": "", - "ordinalField": "" + "ordinalField": "", + "allowOrderResponse": true } ], "Motion": [ diff --git a/shared/src/tools/internalFilingEvents.json b/shared/src/tools/internalFilingEvents.json index 43935db499e..3ddadc9d0ab 100644 --- a/shared/src/tools/internalFilingEvents.json +++ b/shared/src/tools/internalFilingEvents.json @@ -557,7 +557,8 @@ "labelPreviousDocument": "", "labelFreeText": "", "labelFreeText2": "", - "ordinalField": "" + "ordinalField": "", + "allowOrderResponse": true } ], "Motion": [ diff --git a/web-client/src/getConstants.ts b/web-client/src/getConstants.ts index 2b92999fbf8..9056ea033be 100644 --- a/web-client/src/getConstants.ts +++ b/web-client/src/getConstants.ts @@ -81,6 +81,7 @@ import { OPINION_EVENT_CODES_WITHOUT_BENCH_OPINION, OPINION_EVENT_CODES_WITH_BENCH_OPINION, ORDER_EVENT_CODES, + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST, ORDER_TYPES, OTHER_TYPES, PARTIES_CODES, @@ -259,6 +260,7 @@ export const getConstants = () => ({ OPINION_EVENT_CODES_WITH_BENCH_OPINION, OPINION_EVENT_CODES_WITHOUT_BENCH_OPINION, ORDER_EVENT_CODES, + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST, ORDER_TYPES_MAP: ORDER_TYPES, OTHER_TYPES, PARTIES_CODES, diff --git a/web-client/src/presenter/actions/clearStatusReportOrderResponseFormAction.ts b/web-client/src/presenter/actions/clearStatusReportOrderResponseFormAction.ts new file mode 100644 index 00000000000..592980ecf2f --- /dev/null +++ b/web-client/src/presenter/actions/clearStatusReportOrderResponseFormAction.ts @@ -0,0 +1,13 @@ +import { state } from '@web-client/presenter/app.cerebral'; + +export const clearStatusReportOrderResponseFormAction = ({ + store, +}: ActionProps) => { + store.unset(state.form.issueOrder); + store.unset(state.form.statusReportOrStipulatedDecision); + store.unset(state.form.dueDate); + store.unset(state.form.strikenFromTrialSessions); + store.unset(state.form.jurisdiction); + store.set(state.form.additionalOrderText, ''); + store.set(state.form.docketEntryDescription, ''); +}; diff --git a/web-client/src/presenter/computeds/documentViewerHelper.ts b/web-client/src/presenter/computeds/documentViewerHelper.ts index 70e97e134ef..fe41e8590a8 100644 --- a/web-client/src/presenter/computeds/documentViewerHelper.ts +++ b/web-client/src/presenter/computeds/documentViewerHelper.ts @@ -12,6 +12,7 @@ export const documentViewerHelper = ( ): any => { const { COURT_ISSUED_EVENT_CODES, + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST, PROPOSED_STIPULATED_DECISION_EVENT_CODE, STAMPED_DOCUMENTS_ALLOWLIST, STIPULATED_DECISION_EVENT_CODE, @@ -98,6 +99,12 @@ export const documentViewerHelper = ( permissions.STAMP_MOTION && STAMPED_DOCUMENTS_ALLOWLIST.includes(formattedDocumentToDisplay.eventCode); + const showOrderResponseButton = + permissions.ORDER_RESPONSE && + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST.includes( + formattedDocumentToDisplay.eventCode, + ); + return { description: formattedDocumentToDisplay.descriptionDisplay, filedLabel, @@ -105,6 +112,7 @@ export const documentViewerHelper = ( showApplyStampButton, showCompleteQcButton, showNotServed, + showOrderResponseButton, showSealedInBlackstone: formattedDocumentToDisplay.isLegacySealed, showServeCourtIssuedDocumentButton, showServePaperFiledDocumentButton, diff --git a/web-client/src/presenter/computeds/documentViewerLinksHelper.ts b/web-client/src/presenter/computeds/documentViewerLinksHelper.ts index 10d96ab3b70..c321d3c9354 100644 --- a/web-client/src/presenter/computeds/documentViewerLinksHelper.ts +++ b/web-client/src/presenter/computeds/documentViewerLinksHelper.ts @@ -13,6 +13,7 @@ export const documentViewerLinksHelper = (get: Get): any => { applyStampFromCaseDetailsLink: `/case-detail/${caseDetail.docketNumber}/documents/${viewerDocumentToDisplay.docketEntryId}/apply-stamp`, completeQcLink: `/case-detail/${caseDetail.docketNumber}/documents/${viewerDocumentToDisplay.docketEntryId}/edit`, documentViewerLink: `/case-detail/${caseDetail.docketNumber}/document-view?docketEntryId=${viewerDocumentToDisplay.docketEntryId}`, + orderResponseFromCaseDetailsLink: `/case-detail/${caseDetail.docketNumber}/documents/${viewerDocumentToDisplay.docketEntryId}/order-response`, redirectUrl: `/case-detail/${caseDetail.docketNumber}/document-view?docketEntryId=${viewerDocumentToDisplay.docketEntryId}`, reviewAndServePetitionLink: `/case-detail/${caseDetail.docketNumber}/petition-qc/document-view/${viewerDocumentToDisplay.docketEntryId}`, signStipulatedDecisionLink: `/case-detail/${caseDetail.docketNumber}/edit-order/${viewerDocumentToDisplay.docketEntryId}/sign`, diff --git a/web-client/src/presenter/computeds/messageDocumentHelper.ts b/web-client/src/presenter/computeds/messageDocumentHelper.ts index 43f286e8edc..d07a735e018 100644 --- a/web-client/src/presenter/computeds/messageDocumentHelper.ts +++ b/web-client/src/presenter/computeds/messageDocumentHelper.ts @@ -24,6 +24,7 @@ export const messageDocumentHelper = ( GENERIC_ORDER_EVENT_CODE, INITIAL_DOCUMENT_TYPES, NOTICE_EVENT_CODES, + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST, PROPOSED_STIPULATED_DECISION_EVENT_CODE, STAMPED_DOCUMENTS_ALLOWLIST, STIPULATED_DECISION_EVENT_CODE, @@ -163,6 +164,21 @@ export const messageDocumentHelper = ( (STAMPED_DOCUMENTS_ALLOWLIST.includes(caseDocument.eventCode) || STAMPED_DOCUMENTS_ALLOWLIST.includes(formattedDocument?.eventCode)); + // declare a constant called showOrderResponseButton + // 1 does the user have permission? i.e., are they a judge, chambers, or adc user? + // - refer to how roles and permissions are set up in authorizationClientService.ts + // + // 2 does the document have an `eventCode` === "RPT" + // -add a property called something like `allowOrderResponse` to the status + // report object in externalFilingEvents.json and internalFilingEvents.json + + const showOrderResponseButton = + permissions.ORDER_RESPONSE && + (ORDER_RESPONSE_DOCUMENTS_ALLOWLIST.includes(caseDocument.eventCode) || + ORDER_RESPONSE_DOCUMENTS_ALLOWLIST.includes( + formattedDocument?.eventCode, + )); + return { addDocketEntryLink: `/case-detail/${caseDetail.docketNumber}/documents/${viewerDocumentIdToDisplay}/add-court-issued-docket-entry/${parentMessageId}`, applyStampFromMessagesLink: `/messages/${caseDetail.docketNumber}/message-detail/${parentMessageId}/${viewerDocumentIdToDisplay}/apply-stamp`, @@ -170,6 +186,7 @@ export const messageDocumentHelper = ( editCorrespondenceLink: `/case-detail/${caseDetail.docketNumber}/edit-correspondence/${viewerDocumentIdToDisplay}/${parentMessageId}`, editUrl, messageDetailLink: `/messages/${caseDetail.docketNumber}/message-detail/${parentMessageId}`, + orderResponseFromMessagesLink: `/messages/${caseDetail.docketNumber}/message-detail/${parentMessageId}/${viewerDocumentIdToDisplay}/order-response`, servePetitionLink: `/case-detail/${caseDetail.docketNumber}/petition-qc/${parentMessageId}`, showAddDocketEntryButton, showApplySignatureButton: @@ -184,6 +201,8 @@ export const messageDocumentHelper = ( showEditButtonSigned, showEditCorrespondenceButton: showEditButtonForRole && showEditButtonForCorrespondenceDocument, + // export the constant defined above + showOrderResponseButton, showRemoveSignatureButton: showApplyRemoveSignatureButtonForRole && showRemoveSignatureButtonForDocument && diff --git a/web-client/src/presenter/computeds/orderResponseHelper.ts b/web-client/src/presenter/computeds/orderResponseHelper.ts new file mode 100644 index 00000000000..483db7d3d0a --- /dev/null +++ b/web-client/src/presenter/computeds/orderResponseHelper.ts @@ -0,0 +1,31 @@ +// import { state } from '@web-client/presenter/app.cerebral'; + +/** + * gets the status report order response form helper fields + * + * @param {Function} get the cerebral get function + * @param {object} applicationContext the application context + * @returns {object} apply stamp form helper fields + */ +import { ClientApplicationContext } from '@web-client/applicationContext'; +import { Get } from 'cerebral'; +export const orderResponseHelper = ( + get: Get, + applicationContext: ClientApplicationContext, +): any => { + // What we need: + // is this the lead case in a consolidated group? + // - conditionally expose radio buttons to add just the case to the PDF or + // - to add all of the cases in the group to the PDF + // what is the current day's date? (for due date calendar picker) + + const { DATE_FORMATS } = applicationContext.getConstants(); + + const minDate = applicationContext + .getUtilities() + .formatNow(DATE_FORMATS.YYYYMMDD); + + return { + minDate, + }; +}; diff --git a/web-client/src/presenter/presenter.ts b/web-client/src/presenter/presenter.ts index 98da883feee..a9233a5ad7a 100644 --- a/web-client/src/presenter/presenter.ts +++ b/web-client/src/presenter/presenter.ts @@ -59,6 +59,7 @@ import { clearOptionalFieldsStampFormSequence } from './sequences/clearOptionalF import { clearPdfPreviewUrlSequence } from './sequences/clearPdfPreviewUrlSequence'; import { clearPreferredTrialCitySequence } from './sequences/clearPreferredTrialCitySequence'; import { clearSelectedWorkItemsSequence } from './sequences/clearSelectedWorkItemsSequence'; +import { clearStatusReportOrderResponseFormSequence } from './sequences/clearStatusReportOrderResponseFormSequence'; import { clearViewerDocumentToDisplaySequence } from './sequences/clearViewerDocumentToDisplaySequence'; import { closeModalAndNavigateBackSequence } from './sequences/closeModalAndNavigateBackSequence'; import { closeModalAndNavigateSequence } from './sequences/closeModalAndNavigateSequence'; @@ -177,6 +178,7 @@ import { gotoMaintenanceSequence } from './sequences/gotoMaintenanceSequence'; import { gotoMessageDetailSequence } from './sequences/gotoMessageDetailSequence'; import { gotoMessagesSequence } from './sequences/gotoMessagesSequence'; import { gotoMyAccountSequence } from './sequences/gotoMyAccountSequence'; +import { gotoOrderResponseSequence } from './sequences/gotoOrderResponseSequence'; import { gotoPdfPreviewSequence } from './sequences/gotoPdfPreviewSequence'; import { gotoPendingReportSequence } from './sequences/gotoPendingReportSequence'; import { gotoPetitionQcSequence } from './sequences/gotoPetitionQcSequence'; @@ -660,6 +662,8 @@ export const presenterSequences = { clearPreferredTrialCitySequence as unknown as Function, clearSelectedWorkItemsSequence: clearSelectedWorkItemsSequence as unknown as Function, + clearStatusReportOrderResponseFormSequence: + clearStatusReportOrderResponseFormSequence as unknown as Function, clearViewerDocumentToDisplaySequence: clearViewerDocumentToDisplaySequence as unknown as Function, closeModalAndNavigateBackSequence: @@ -854,6 +858,8 @@ export const presenterSequences = { gotoMessageDetailSequence: gotoMessageDetailSequence as unknown as Function, gotoMessagesSequence: gotoMessagesSequence as unknown as Function, gotoMyAccountSequence: gotoMyAccountSequence as unknown as Function, + // TODO fix typing + gotoOrderResponseSequence: gotoOrderResponseSequence as unknown as Function, gotoPdfPreviewSequence: gotoPdfPreviewSequence as unknown as Function, gotoPendingReportSequence: gotoPendingReportSequence as unknown as Function, gotoPetitionQcSequence: gotoPetitionQcSequence as unknown as Function, diff --git a/web-client/src/presenter/sequences/clearStatusReportOrderResponseFormSequence.ts b/web-client/src/presenter/sequences/clearStatusReportOrderResponseFormSequence.ts new file mode 100644 index 00000000000..ffc077df656 --- /dev/null +++ b/web-client/src/presenter/sequences/clearStatusReportOrderResponseFormSequence.ts @@ -0,0 +1,11 @@ +import { clearAlertsAction } from '../actions/clearAlertsAction'; +import { clearErrorAlertsAction } from '../actions/clearErrorAlertsAction'; +import { clearStatusReportOrderResponseFormAction } from '../actions/clearStatusReportOrderResponseFormAction'; +import { stopShowValidationAction } from '../actions/stopShowValidationAction'; + +export const clearStatusReportOrderResponseFormSequence = [ + stopShowValidationAction, + clearAlertsAction, + clearErrorAlertsAction, + clearStatusReportOrderResponseFormAction, +]; diff --git a/web-client/src/presenter/sequences/gotoOrderResponseSequence.ts b/web-client/src/presenter/sequences/gotoOrderResponseSequence.ts new file mode 100644 index 00000000000..ed646b46fbc --- /dev/null +++ b/web-client/src/presenter/sequences/gotoOrderResponseSequence.ts @@ -0,0 +1,21 @@ +import { clearFormAction } from '../actions/clearFormAction'; +import { getCaseAction } from '../actions/getCaseAction'; +import { setCaseAction } from '../actions/setCaseAction'; +import { setDocketEntryIdAction } from '../actions/setDocketEntryIdAction'; +import { setDocketEntrySelectedFromMessageAction } from '../actions/setDocketEntrySelectedFromMessageAction'; +import { setupCurrentPageAction } from '../actions/setupCurrentPageAction'; +// import { startWebSocketConnectionSequenceDecorator } from '../utilities/startWebSocketConnectionSequenceDecorator'; + +export const gotoOrderResponseSequence = + //startWebSocketConnectionSequenceDecorator( + [ + setupCurrentPageAction('Interstitial'), + getCaseAction, + setCaseAction, + setDocketEntryIdAction, + setDocketEntrySelectedFromMessageAction, + clearFormAction, + // need to load the PDF into state? + // see setPDFForStampAction for an example + setupCurrentPageAction('OrderResponse'), + ]; //); diff --git a/web-client/src/presenter/state.ts b/web-client/src/presenter/state.ts index fe58d6afa30..8cc5213be53 100644 --- a/web-client/src/presenter/state.ts +++ b/web-client/src/presenter/state.ts @@ -97,6 +97,7 @@ import { messageModalHelper } from './computeds/messageModalHelper'; import { messagesHelper } from './computeds/messagesHelper'; import { myAccountHelper } from './computeds/myAccountHelper'; import { noticeStatusHelper } from './computeds/noticeStatusHelper'; +import { orderResponseHelper } from './computeds/orderResponseHelper'; import { orderTypesHelper } from './computeds/orderTypesHelper'; import { paperDocketEntryHelper } from './computeds/paperDocketEntryHelper'; import { paperServiceStatusHelper } from './computeds/paperServiceStatusHelper'; @@ -410,6 +411,9 @@ export const computeds = { noticeStatusHelper: noticeStatusHelper as unknown as ReturnType< typeof noticeStatusHelper >, + orderResponseHelper: orderResponseHelper as unknown as ReturnType< + typeof orderResponseHelper + >, orderTypesHelper: orderTypesHelper as unknown as ReturnType< typeof orderTypesHelper >, diff --git a/web-client/src/router.ts b/web-client/src/router.ts index 5930609a2ef..224b1ab12c6 100644 --- a/web-client/src/router.ts +++ b/web-client/src/router.ts @@ -410,6 +410,19 @@ const router = { }), ); + registerRoute( + '/case-detail/*/documents/*/order-response', + ifHasAccess({ app }, (docketNumber, docketEntryId) => { + setPageTitle( + `${getPageTitleDocketPrefix(docketNumber)} Order Response`, + ); + return app.getSequence('gotoOrderResponseSequence')({ + docketEntryId, + docketNumber, + }); + }), + ); + registerRoute( '/case-detail/*/docket-entry/*/edit-meta', ifHasAccess({ app }, (docketNumber, docketRecordIndex) => { @@ -1305,6 +1318,20 @@ const router = { }), ); + registerRoute( + '/messages/*/message-detail/*/*/order-response', + ifHasAccess({ app }, (docketNumber, parentMessageId, docketEntryId) => { + setPageTitle( + `${getPageTitleDocketPrefix(docketNumber)} Order Response`, + ); + return app.getSequence('gotoOrderResponseSequence')({ + docketEntryId, + docketNumber, + parentMessageId, + }); + }), + ); + registerRoute( '/pdf-preview', ifHasAccess({ app }, () => { diff --git a/web-client/src/views/AppComponent.tsx b/web-client/src/views/AppComponent.tsx index f1aedaa11ec..3cc012ad039 100644 --- a/web-client/src/views/AppComponent.tsx +++ b/web-client/src/views/AppComponent.tsx @@ -65,6 +65,7 @@ import { Login } from '@web-client/views/Login/Login'; import { MessageDetail } from './Messages/MessageDetail'; import { Messages } from './Messages/Messages'; import { MyAccount } from './MyAccount'; +import { OrderResponse } from './OrderResponse'; import { PaperFiling } from './PaperFiling/PaperFiling'; import { PendingReport } from './PendingReport/PendingReport'; import { PetitionQc } from './PetitionQc/PetitionQc'; @@ -164,6 +165,7 @@ const pages = { MessageDetail, Messages, MyAccount, + OrderResponse, PaperFiling, PendingReport, PetitionQc, diff --git a/web-client/src/views/DocketRecord/DocumentViewerDocument.tsx b/web-client/src/views/DocketRecord/DocumentViewerDocument.tsx index 52a81ce00c1..ed67dafa53f 100644 --- a/web-client/src/views/DocketRecord/DocumentViewerDocument.tsx +++ b/web-client/src/views/DocketRecord/DocumentViewerDocument.tsx @@ -21,6 +21,7 @@ export const DocumentViewerDocument = connect( iframeSrc: state.iframeSrc, navigateToPathAndSetRedirectUrlSequence: sequences.navigateToPathAndSetRedirectUrlSequence, + navigateToPathSequence: sequences.navigateToPathSequence, openCaseDocumentDownloadUrlSequence: sequences.openCaseDocumentDownloadUrlSequence, openConfirmServeCourtIssuedDocumentSequence: @@ -41,6 +42,7 @@ export const DocumentViewerDocument = connect( gotoCompleteDocketEntryQCSequence, iframeSrc, navigateToPathAndSetRedirectUrlSequence, + navigateToPathSequence, openCaseDocumentDownloadUrlSequence, openConfirmServeCourtIssuedDocumentSequence, openConfirmServePaperFiledDocumentSequence, @@ -183,7 +185,19 @@ export const DocumentViewerDocument = connect( Apply Stamp )} - + {documentViewerHelper.showOrderResponseButton && ( + + )} + )} + +
+ + + +
+ +
+
+
+ {/*
+ + + It is ORDERED as follows: +
+ + This motion is{' '} + + {form.disposition?.toUpperCase()} + {' '} + {form.deniedAsMoot && 'as moot '} + {form.deniedWithoutPrejudice && 'without prejudice'} +
+
+ {(form.strickenFromTrialSession || + form.jurisdictionalOption || + (form.dueDateMessage && form.date) || + form.customText) &&
} + {form.strickenFromTrialSession && ( + <> + - {constants.STRICKEN_FROM_TRIAL_SESSION_MESSAGE} - +
+ + )} + {form.jurisdictionalOption && ( + <> + - {form.jurisdictionalOption} -
+ + )} + + {form.date && ( + <> + - {form.dueDateMessage} {form.date} - +
+ + )} + {form.customText && <>- {form.customText} -} +
+
+
+ + (Signed) {pdfForSigning.nameForSigning} +
+ {pdfForSigning.nameForSigningLine2} +
+
+ +
*/} +
+
+
+ + + + ); + }, +); From eb243adfa7d62571171ce61098cc9ade58559601 Mon Sep 17 00:00:00 2001 From: Andy Kuny Date: Thu, 20 Jun 2024 09:07:13 -0400 Subject: [PATCH 002/116] Add class to FormGroup to add padding --- web-client/src/views/OrderResponse.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web-client/src/views/OrderResponse.tsx b/web-client/src/views/OrderResponse.tsx index 1f432dda082..f8d5e103e4d 100644 --- a/web-client/src/views/OrderResponse.tsx +++ b/web-client/src/views/OrderResponse.tsx @@ -7,7 +7,7 @@ import { FormGroup } from '../ustc-ui/FormGroup/FormGroup'; import { connect } from '@web-client/presenter/shared.cerebral'; import { sequences } from '@web-client/presenter/app.cerebral'; import { state } from '@web-client/presenter/app.cerebral'; -// import React, { useEffect, useRef } from 'react'; +import React from 'react'; //{ useEffect, useRef } export const OrderResponse = connect( { @@ -56,8 +56,9 @@ export const OrderResponse = connect(
{/* TODO this field will conditionally render if the case is a lead CaseDetail */}