refactor: consolidate 3 identical Redux slices into one seleniumTaskSlice
This commit is contained in:
@@ -20,7 +20,7 @@ import {
|
|||||||
import { apiRequest, queryClient } from "@/lib/queryClient";
|
import { apiRequest, queryClient } from "@/lib/queryClient";
|
||||||
import { useToast } from "@/hooks/use-toast";
|
import { useToast } from "@/hooks/use-toast";
|
||||||
import { useAppDispatch } from "@/redux/hooks";
|
import { useAppDispatch } from "@/redux/hooks";
|
||||||
import { setTaskStatus } from "@/redux/slices/seleniumClaimSubmitTaskSlice";
|
import { setTaskStatus } from "@/redux/slices/seleniumTaskSlice";
|
||||||
import {
|
import {
|
||||||
Pagination,
|
Pagination,
|
||||||
PaginationContent,
|
PaginationContent,
|
||||||
@@ -473,6 +473,7 @@ export default function ClaimsRecentTable({
|
|||||||
try {
|
try {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Sending Data to Selenium...",
|
message: "Sending Data to Selenium...",
|
||||||
})
|
})
|
||||||
@@ -499,6 +500,7 @@ export default function ClaimsRecentTable({
|
|||||||
if (data?.status === "success") {
|
if (data?.status === "success") {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "success",
|
status: "success",
|
||||||
message: "Claims automation completed. Browser remains open.",
|
message: "Claims automation completed. Browser remains open.",
|
||||||
})
|
})
|
||||||
@@ -509,6 +511,7 @@ export default function ClaimsRecentTable({
|
|||||||
} catch {
|
} catch {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: "Selenium submission failed",
|
message: "Selenium submission failed",
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { CheckCircle, LoaderCircleIcon, X } from "lucide-react";
|
|||||||
import { useToast } from "@/hooks/use-toast";
|
import { useToast } from "@/hooks/use-toast";
|
||||||
import { apiRequest, queryClient } from "@/lib/queryClient";
|
import { apiRequest, queryClient } from "@/lib/queryClient";
|
||||||
import { useAppDispatch } from "@/redux/hooks";
|
import { useAppDispatch } from "@/redux/hooks";
|
||||||
import { setTaskStatus } from "@/redux/slices/seleniumEligibilityCheckTaskSlice";
|
import { setTaskStatus } from "@/redux/slices/seleniumTaskSlice";
|
||||||
import { formatLocalDate } from "@/utils/dateUtils";
|
import { formatLocalDate } from "@/utils/dateUtils";
|
||||||
import { QK_PATIENTS_BASE } from "@/components/patients/patient-table";
|
import { QK_PATIENTS_BASE } from "@/components/patients/patient-table";
|
||||||
|
|
||||||
@@ -178,6 +178,7 @@ export function DdmaEligibilityButton({
|
|||||||
socket.on("connect_error", (err: any) => {
|
socket.on("connect_error", (err: any) => {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: "Connection failed",
|
message: "Connection failed",
|
||||||
})
|
})
|
||||||
@@ -195,6 +196,7 @@ export function DdmaEligibilityButton({
|
|||||||
socket.on("reconnect_attempt", (attempt: number) => {
|
socket.on("reconnect_attempt", (attempt: number) => {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: `Realtime reconnect attempt #${attempt}`,
|
message: `Realtime reconnect attempt #${attempt}`,
|
||||||
})
|
})
|
||||||
@@ -205,6 +207,7 @@ export function DdmaEligibilityButton({
|
|||||||
socket.on("reconnect_failed", () => {
|
socket.on("reconnect_failed", () => {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: "Reconnect failed",
|
message: "Reconnect failed",
|
||||||
})
|
})
|
||||||
@@ -223,6 +226,7 @@ export function DdmaEligibilityButton({
|
|||||||
socket.on("disconnect", (reason: any) => {
|
socket.on("disconnect", (reason: any) => {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: "Connection disconnected",
|
message: "Connection disconnected",
|
||||||
})
|
})
|
||||||
@@ -245,6 +249,7 @@ export function DdmaEligibilityButton({
|
|||||||
setOtpModalOpen(true);
|
setOtpModalOpen(true);
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "OTP required for DDMA eligibility. Please enter the OTP.",
|
message: "OTP required for DDMA eligibility. Please enter the OTP.",
|
||||||
})
|
})
|
||||||
@@ -256,6 +261,7 @@ export function DdmaEligibilityButton({
|
|||||||
if (!payload?.session_id) return;
|
if (!payload?.session_id) return;
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "OTP submitted. Finishing DDMA eligibility check...",
|
message: "OTP submitted. Finishing DDMA eligibility check...",
|
||||||
})
|
})
|
||||||
@@ -270,6 +276,7 @@ export function DdmaEligibilityButton({
|
|||||||
if (status === "completed") {
|
if (status === "completed") {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "success",
|
status: "success",
|
||||||
message:
|
message:
|
||||||
"DDMA eligibility updated and PDF attached to patient documents.",
|
"DDMA eligibility updated and PDF attached to patient documents.",
|
||||||
@@ -298,6 +305,7 @@ export function DdmaEligibilityButton({
|
|||||||
"DDMA eligibility session failed.";
|
"DDMA eligibility session failed.";
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: msg,
|
message: msg,
|
||||||
})
|
})
|
||||||
@@ -325,6 +333,7 @@ export function DdmaEligibilityButton({
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: msg,
|
message: msg,
|
||||||
})
|
})
|
||||||
@@ -396,6 +405,7 @@ export function DdmaEligibilityButton({
|
|||||||
// 1) Ensure socket is connected (lazy)
|
// 1) Ensure socket is connected (lazy)
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Opening realtime channel for DDMA eligibility...",
|
message: "Opening realtime channel for DDMA eligibility...",
|
||||||
})
|
})
|
||||||
@@ -412,6 +422,7 @@ export function DdmaEligibilityButton({
|
|||||||
// 2) Start the selenium job via backend
|
// 2) Start the selenium job via backend
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Starting DDMA eligibility check via selenium...",
|
message: "Starting DDMA eligibility check via selenium...",
|
||||||
})
|
})
|
||||||
@@ -461,6 +472,7 @@ export function DdmaEligibilityButton({
|
|||||||
setSessionId(result.session_id as string);
|
setSessionId(result.session_id as string);
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message:
|
message:
|
||||||
"DDMA eligibility job started. Waiting for OTP or final result...",
|
"DDMA eligibility job started. Waiting for OTP or final result...",
|
||||||
@@ -470,6 +482,7 @@ export function DdmaEligibilityButton({
|
|||||||
// fallback if backend returns immediate result
|
// fallback if backend returns immediate result
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "success",
|
status: "success",
|
||||||
message: "DDMA eligibility completed.",
|
message: "DDMA eligibility completed.",
|
||||||
})
|
})
|
||||||
@@ -479,6 +492,7 @@ export function DdmaEligibilityButton({
|
|||||||
console.error("startDdmaEligibility error:", err);
|
console.error("startDdmaEligibility error:", err);
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: err?.message || "Failed to start DDMA eligibility",
|
message: err?.message || "Failed to start DDMA eligibility",
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import { useAppDispatch, useAppSelector } from "@/redux/hooks";
|
|||||||
import {
|
import {
|
||||||
clearTaskStatus,
|
clearTaskStatus,
|
||||||
setTaskStatus,
|
setTaskStatus,
|
||||||
} from "@/redux/slices/seleniumEligibilityBatchCheckTaskSlice";
|
} from "@/redux/slices/seleniumTaskSlice";
|
||||||
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
||||||
import { PatientStatusBadge } from "@/components/appointments/patient-status-badge";
|
import { PatientStatusBadge } from "@/components/appointments/patient-status-badge";
|
||||||
import { AppointmentProceduresDialog } from "@/components/appointment-procedures/appointment-procedures-dialog";
|
import { AppointmentProceduresDialog } from "@/components/appointment-procedures/appointment-procedures-dialog";
|
||||||
@@ -117,7 +117,7 @@ export default function AppointmentsPage() {
|
|||||||
}>({ open: false });
|
}>({ open: false });
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const batchTask = useAppSelector(
|
const batchTask = useAppSelector(
|
||||||
(state) => state.seleniumEligibilityBatchCheckTask
|
(state) => state.seleniumTasks.eligibilityBatchCheck
|
||||||
);
|
);
|
||||||
const [isCheckingAllElig, setIsCheckingAllElig] = useState(false);
|
const [isCheckingAllElig, setIsCheckingAllElig] = useState(false);
|
||||||
const [processedAppointmentIds, setProcessedAppointmentIds] = useState<
|
const [processedAppointmentIds, setProcessedAppointmentIds] = useState<
|
||||||
@@ -743,6 +743,7 @@ export default function AppointmentsPage() {
|
|||||||
// Start: set redux task status (visible globally)
|
// Start: set redux task status (visible globally)
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityBatchCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: `Checking eligibility for appointments on ${dateParam}...`,
|
message: `Checking eligibility for appointments on ${dateParam}...`,
|
||||||
})
|
})
|
||||||
@@ -771,6 +772,7 @@ export default function AppointmentsPage() {
|
|||||||
// global error
|
// global error
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityBatchCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: `Batch eligibility failed: ${errMsg}`,
|
message: `Batch eligibility failed: ${errMsg}`,
|
||||||
})
|
})
|
||||||
@@ -849,6 +851,7 @@ export default function AppointmentsPage() {
|
|||||||
// global success status (summary)
|
// global success status (summary)
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityBatchCheck",
|
||||||
status: skippedCount > 0 ? "error" : "success",
|
status: skippedCount > 0 ? "error" : "success",
|
||||||
message: `Batch processed ${results.length} appointments — success: ${successCount}, warnings: ${warningCount}, skipped: ${skippedCount}.`,
|
message: `Batch processed ${results.length} appointments — success: ${successCount}, warnings: ${warningCount}, skipped: ${skippedCount}.`,
|
||||||
})
|
})
|
||||||
@@ -864,6 +867,7 @@ export default function AppointmentsPage() {
|
|||||||
console.error("[check-all-eligibilities] error", err);
|
console.error("[check-all-eligibilities] error", err);
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityBatchCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: `Batch eligibility error: ${err?.message ?? String(err)}`,
|
message: `Batch eligibility error: ${err?.message ?? String(err)}`,
|
||||||
})
|
})
|
||||||
@@ -912,7 +916,7 @@ export default function AppointmentsPage() {
|
|||||||
status={batchTask.status}
|
status={batchTask.status}
|
||||||
message={batchTask.message}
|
message={batchTask.message}
|
||||||
show={batchTask.show}
|
show={batchTask.show}
|
||||||
onClear={() => dispatch(clearTaskStatus())}
|
onClear={() => dispatch(clearTaskStatus("eligibilityBatchCheck"))}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="container mx-auto">
|
<div className="container mx-auto">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { useAppDispatch, useAppSelector } from "@/redux/hooks";
|
|||||||
import {
|
import {
|
||||||
setTaskStatus,
|
setTaskStatus,
|
||||||
clearTaskStatus,
|
clearTaskStatus,
|
||||||
} from "@/redux/slices/seleniumClaimSubmitTaskSlice";
|
} from "@/redux/slices/seleniumTaskSlice";
|
||||||
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
||||||
import ClaimsRecentTable, {
|
import ClaimsRecentTable, {
|
||||||
QK_CLAIMS_BASE,
|
QK_CLAIMS_BASE,
|
||||||
@@ -47,7 +47,7 @@ export default function ClaimsPage() {
|
|||||||
const [previewFallbackFilename, setPreviewFallbackFilename] = useState<string | null>(null);
|
const [previewFallbackFilename, setPreviewFallbackFilename] = useState<string | null>(null);
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { status, message, show } = useAppSelector(
|
const { status, message, show } = useAppSelector(
|
||||||
(state) => state.seleniumClaimSubmitTask
|
(state) => state.seleniumTasks.claimSubmit
|
||||||
);
|
);
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
@@ -318,6 +318,7 @@ export default function ClaimsPage() {
|
|||||||
try {
|
try {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Submitting claim to Selenium...",
|
message: "Submitting claim to Selenium...",
|
||||||
})
|
})
|
||||||
@@ -336,6 +337,7 @@ export default function ClaimsPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Submitted to Selenium. Awaiting PDF...",
|
message: "Submitted to Selenium. Awaiting PDF...",
|
||||||
})
|
})
|
||||||
@@ -357,6 +359,7 @@ export default function ClaimsPage() {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: error.message || "Selenium submission failed",
|
message: error.message || "Selenium submission failed",
|
||||||
})
|
})
|
||||||
@@ -382,6 +385,7 @@ export default function ClaimsPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Downloading PDF from Selenium...",
|
message: "Downloading PDF from Selenium...",
|
||||||
})
|
})
|
||||||
@@ -402,6 +406,7 @@ export default function ClaimsPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "success",
|
status: "success",
|
||||||
message: "Claim submitted & PDF downloaded successfully.",
|
message: "Claim submitted & PDF downloaded successfully.",
|
||||||
})
|
})
|
||||||
@@ -418,6 +423,7 @@ export default function ClaimsPage() {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: error.message || "Failed to download PDF",
|
message: error.message || "Failed to download PDF",
|
||||||
})
|
})
|
||||||
@@ -456,6 +462,7 @@ export default function ClaimsPage() {
|
|||||||
try {
|
try {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Submitting claim pre auth to Selenium...",
|
message: "Submitting claim pre auth to Selenium...",
|
||||||
})
|
})
|
||||||
@@ -470,6 +477,7 @@ export default function ClaimsPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Submitted to Selenium. Awaiting PDF...",
|
message: "Submitted to Selenium. Awaiting PDF...",
|
||||||
})
|
})
|
||||||
@@ -491,6 +499,7 @@ export default function ClaimsPage() {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "claimSubmit",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: error.message || "Selenium submission failed",
|
message: error.message || "Selenium submission failed",
|
||||||
})
|
})
|
||||||
@@ -508,7 +517,7 @@ export default function ClaimsPage() {
|
|||||||
status={status}
|
status={status}
|
||||||
message={message}
|
message={message}
|
||||||
show={show}
|
show={show}
|
||||||
onClear={() => dispatch(clearTaskStatus())}
|
onClear={() => dispatch(clearTaskStatus("claimSubmit"))}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="container mx-auto space-y-6">
|
<div className="container mx-auto space-y-6">
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import { useAppDispatch, useAppSelector } from "@/redux/hooks";
|
|||||||
import {
|
import {
|
||||||
setTaskStatus,
|
setTaskStatus,
|
||||||
clearTaskStatus,
|
clearTaskStatus,
|
||||||
} from "@/redux/slices/seleniumEligibilityCheckTaskSlice";
|
} from "@/redux/slices/seleniumTaskSlice";
|
||||||
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
import { SeleniumTaskBanner } from "@/components/ui/selenium-task-banner";
|
||||||
import { formatLocalDate, parseLocalDate } from "@/utils/dateUtils";
|
import { formatLocalDate, parseLocalDate } from "@/utils/dateUtils";
|
||||||
import { InsertPatient, Patient } from "@repo/db/types";
|
import { InsertPatient, Patient } from "@repo/db/types";
|
||||||
@@ -34,7 +34,7 @@ export default function InsuranceStatusPage() {
|
|||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { status, message, show } = useAppSelector(
|
const { status, message, show } = useAppSelector(
|
||||||
(state) => state.seleniumEligibilityCheckTask,
|
(state) => state.seleniumTasks.eligibilityCheck,
|
||||||
);
|
);
|
||||||
const [selectedPatient, setSelectedPatient] = useState<Patient | null>(null);
|
const [selectedPatient, setSelectedPatient] = useState<Patient | null>(null);
|
||||||
const [location] = useLocation();
|
const [location] = useLocation();
|
||||||
@@ -121,6 +121,7 @@ export default function InsuranceStatusPage() {
|
|||||||
try {
|
try {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Sending Data to Selenium...",
|
message: "Sending Data to Selenium...",
|
||||||
}),
|
}),
|
||||||
@@ -136,6 +137,7 @@ export default function InsuranceStatusPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "success",
|
status: "success",
|
||||||
message:
|
message:
|
||||||
"Patient status is updated, and its eligibility pdf is uploaded at Document Page.",
|
"Patient status is updated, and its eligibility pdf is uploaded at Document Page.",
|
||||||
@@ -163,6 +165,7 @@ export default function InsuranceStatusPage() {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: error.message || "Selenium submission failed",
|
message: error.message || "Selenium submission failed",
|
||||||
}),
|
}),
|
||||||
@@ -187,6 +190,7 @@ export default function InsuranceStatusPage() {
|
|||||||
try {
|
try {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
message: "Sending Data to Selenium...",
|
message: "Sending Data to Selenium...",
|
||||||
}),
|
}),
|
||||||
@@ -201,6 +205,7 @@ export default function InsuranceStatusPage() {
|
|||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "success",
|
status: "success",
|
||||||
message:
|
message:
|
||||||
"Claim status is updated, and its pdf is uploaded at Document Page.",
|
"Claim status is updated, and its pdf is uploaded at Document Page.",
|
||||||
@@ -228,6 +233,7 @@ export default function InsuranceStatusPage() {
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setTaskStatus({
|
setTaskStatus({
|
||||||
|
key: "eligibilityCheck",
|
||||||
status: "error",
|
status: "error",
|
||||||
message: error.message || "Selenium submission failed",
|
message: error.message || "Selenium submission failed",
|
||||||
}),
|
}),
|
||||||
@@ -426,7 +432,7 @@ export default function InsuranceStatusPage() {
|
|||||||
status={status}
|
status={status}
|
||||||
message={message}
|
message={message}
|
||||||
show={show}
|
show={show}
|
||||||
onClear={() => dispatch(clearTaskStatus())}
|
onClear={() => dispatch(clearTaskStatus("eligibilityCheck"))}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="container mx-auto space-y-6">
|
<div className="container mx-auto space-y-6">
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|
||||||
|
|
||||||
export type TaskStatus = "idle" | "pending" | "success" | "error";
|
|
||||||
|
|
||||||
export interface SeleniumTaskState {
|
|
||||||
status: TaskStatus;
|
|
||||||
message: string;
|
|
||||||
show: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const initialState: SeleniumTaskState = {
|
|
||||||
status: "idle",
|
|
||||||
message: "",
|
|
||||||
show: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const seleniumClaimSubmitTaskSlice = createSlice({
|
|
||||||
name: "seleniumClaimSubmitTask",
|
|
||||||
initialState,
|
|
||||||
reducers: {
|
|
||||||
setTaskStatus: (
|
|
||||||
state: SeleniumTaskState,
|
|
||||||
action: PayloadAction<Partial<SeleniumTaskState>>
|
|
||||||
) => {
|
|
||||||
return { ...state, ...action.payload, show: true };
|
|
||||||
},
|
|
||||||
clearTaskStatus: () => initialState,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const { setTaskStatus, clearTaskStatus } = seleniumClaimSubmitTaskSlice.actions;
|
|
||||||
export default seleniumClaimSubmitTaskSlice.reducer;
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|
||||||
|
|
||||||
export type TaskStatus = "idle" | "pending" | "success" | "error";
|
|
||||||
|
|
||||||
export interface SeleniumTaskState {
|
|
||||||
status: TaskStatus;
|
|
||||||
message: string;
|
|
||||||
show: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const initialState: SeleniumTaskState = {
|
|
||||||
status: "idle",
|
|
||||||
message: "",
|
|
||||||
show: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const seleniumEligibilityBatchCheckTaskSlice = createSlice({
|
|
||||||
name: "seleniumEligibilityBatchCheckTask",
|
|
||||||
initialState,
|
|
||||||
reducers: {
|
|
||||||
setTaskStatus: (
|
|
||||||
state: SeleniumTaskState,
|
|
||||||
action: PayloadAction<Partial<SeleniumTaskState>>
|
|
||||||
) => {
|
|
||||||
return { ...state, ...action.payload, show: true };
|
|
||||||
},
|
|
||||||
clearTaskStatus: () => initialState,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const { setTaskStatus, clearTaskStatus } = seleniumEligibilityBatchCheckTaskSlice.actions;
|
|
||||||
export default seleniumEligibilityBatchCheckTaskSlice.reducer;
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|
||||||
|
|
||||||
export type TaskStatus = "idle" | "pending" | "success" | "error";
|
|
||||||
|
|
||||||
export interface SeleniumTaskState {
|
|
||||||
status: TaskStatus;
|
|
||||||
message: string;
|
|
||||||
show: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const initialState: SeleniumTaskState = {
|
|
||||||
status: "idle",
|
|
||||||
message: "",
|
|
||||||
show: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const seleniumEligibilityCheckTaskSlice = createSlice({
|
|
||||||
name: "seleniumEligibilityCheckTask",
|
|
||||||
initialState,
|
|
||||||
reducers: {
|
|
||||||
setTaskStatus: (
|
|
||||||
state: SeleniumTaskState,
|
|
||||||
action: PayloadAction<Partial<SeleniumTaskState>>
|
|
||||||
) => {
|
|
||||||
return { ...state, ...action.payload, show: true };
|
|
||||||
},
|
|
||||||
clearTaskStatus: () => initialState,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const { setTaskStatus, clearTaskStatus } = seleniumEligibilityCheckTaskSlice.actions;
|
|
||||||
export default seleniumEligibilityCheckTaskSlice.reducer;
|
|
||||||
38
apps/Frontend/src/redux/slices/seleniumTaskSlice.ts
Normal file
38
apps/Frontend/src/redux/slices/seleniumTaskSlice.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
|
|
||||||
|
export type TaskStatus = "idle" | "pending" | "success" | "error";
|
||||||
|
export type TaskKey = "claimSubmit" | "eligibilityCheck" | "eligibilityBatchCheck";
|
||||||
|
|
||||||
|
export interface SeleniumTaskState {
|
||||||
|
status: TaskStatus;
|
||||||
|
message: string;
|
||||||
|
show: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const emptyTask: SeleniumTaskState = { status: "idle", message: "", show: false };
|
||||||
|
|
||||||
|
const initialState: Record<TaskKey, SeleniumTaskState> = {
|
||||||
|
claimSubmit: { ...emptyTask },
|
||||||
|
eligibilityCheck: { ...emptyTask },
|
||||||
|
eligibilityBatchCheck: { ...emptyTask },
|
||||||
|
};
|
||||||
|
|
||||||
|
const seleniumTaskSlice = createSlice({
|
||||||
|
name: "seleniumTasks",
|
||||||
|
initialState,
|
||||||
|
reducers: {
|
||||||
|
setTaskStatus: (
|
||||||
|
state,
|
||||||
|
action: PayloadAction<{ key: TaskKey } & Partial<SeleniumTaskState>>
|
||||||
|
) => {
|
||||||
|
const { key, ...partial } = action.payload;
|
||||||
|
state[key] = { ...state[key], ...partial, show: true };
|
||||||
|
},
|
||||||
|
clearTaskStatus: (state, action: PayloadAction<TaskKey>) => {
|
||||||
|
state[action.payload] = { ...emptyTask };
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export const { setTaskStatus, clearTaskStatus } = seleniumTaskSlice.actions;
|
||||||
|
export default seleniumTaskSlice.reducer;
|
||||||
@@ -1,13 +1,9 @@
|
|||||||
import { configureStore } from "@reduxjs/toolkit";
|
import { configureStore } from "@reduxjs/toolkit";
|
||||||
import seleniumClaimSubmitTaskReducer from "./slices/seleniumClaimSubmitTaskSlice";
|
import seleniumTasksReducer from "./slices/seleniumTaskSlice";
|
||||||
import seleniumEligibilityCheckTaskReducer from "./slices/seleniumEligibilityCheckTaskSlice";
|
|
||||||
import seleniumEligibilityBatchCheckTaskReducer from "./slices/seleniumEligibilityBatchCheckTaskSlice";
|
|
||||||
|
|
||||||
export const store = configureStore({
|
export const store = configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
seleniumClaimSubmitTask: seleniumClaimSubmitTaskReducer,
|
seleniumTasks: seleniumTasksReducer,
|
||||||
seleniumEligibilityCheckTask: seleniumEligibilityCheckTaskReducer,
|
|
||||||
seleniumEligibilityBatchCheckTask: seleniumEligibilityBatchCheckTaskReducer,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user