This commit is contained in:
Nati
2026-08-19 08:35:28 +00:00
parent 130082dcc4
commit f97eb68e25
12 changed files with 276 additions and 35 deletions

View File

@@ -41,6 +41,8 @@ import {
useAssignApplicationMutation,
useCompleteReviewMutation,
useConfirmPaymentMutation,
useScheduleIssuanceMutation,
useIssueCertificateMutation,
useScheduleExamMutation,
useEscalateApplicationMutation,
useFinalApproveMutation,
@@ -186,6 +188,8 @@ export function LicenseReviewPage() {
const [scheduleInspection] = useScheduleInspectionMutation();
const [recordResult] = useRecordInspectionResultMutation();
const [confirmPayment] = useConfirmPaymentMutation();
const [scheduleIssuance] = useScheduleIssuanceMutation();
const [issueCertificate] = useIssueCertificateMutation();
const [scheduleExam, { isLoading: schedulingExam }] =
useScheduleExamMutation();
const [holdApplication] = useHoldApplicationMutation();
@@ -206,6 +210,8 @@ export function LicenseReviewPage() {
const [railOpen, setRailOpen] = useState(true);
const [inspectionOpen, setInspectionOpen] = useState(false);
const [inspectionDate, setInspectionDate] = useState("");
const [issuanceOpen, setIssuanceOpen] = useState(false);
const [issuanceDate, setIssuanceDate] = useState("");
const [resultOpen, setResultOpen] = useState(false);
const [scheduleExamOpen, setScheduleExamOpen] = useState(false);
const [findings, setFindings] = useState("");
@@ -441,6 +447,9 @@ export function LicenseReviewPage() {
case "schedule-inspection":
setInspectionOpen(true);
return;
case "schedule-issuance":
setIssuanceOpen(true);
return;
case "record-inspection":
setResultOpen(true);
return;
@@ -584,6 +593,12 @@ export function LicenseReviewPage() {
t("review.done.confirmPayment", "Payment confirmed"),
);
break;
case "issue-certificate":
await run(
() => issueCertificate(id).unwrap(),
t("review.done.issueCertificate", "Certificate issued"),
);
break;
case "hold":
await run(
() => holdApplication({ id, reason: submission.reason }).unwrap(),
@@ -1145,6 +1160,47 @@ export function LicenseReviewPage() {
</Stack>
</Modal>
<Modal
opened={issuanceOpen}
onClose={() => setIssuanceOpen(false)}
title={t("review.actions.scheduleIssuance", "Schedule pickup")}
>
<Stack>
<AmharicDatePicker
label={t("review.pickupDate", "Pickup date")}
value={issuanceDate}
onChange={setIssuanceDate}
/>
<ModalFooter>
<Tooltip
label={t("review.pickDate", "Pick a date and time first")}
disabled={Boolean(issuanceDate)}
>
<span>
<button type="button" hidden aria-hidden />
</span>
</Tooltip>
<ActionIcon
variant="filled"
size="lg"
disabled={!issuanceDate}
aria-label={t("review.schedule", "Schedule")}
onClick={() =>
run(async () => {
await scheduleIssuance({
id,
scheduledDate: issuanceDate,
}).unwrap();
setIssuanceOpen(false);
}, t("review.done.scheduleIssuance", "Pickup scheduled"))
}
>
<IconCheck size={18} />
</ActionIcon>
</ModalFooter>
</Stack>
</Modal>
<Modal
opened={resultOpen}
onClose={() => setResultOpen(false)}