const fs = require('fs'); const path = require('path'); const filePath = path.join(__dirname, 'frontend/src/pages/cases/cases-view.tsx'); let content = fs.readFileSync(filePath, 'utf8'); const imports = ` import CardBoxModal from "../../components/CardBoxModal"; import FormField from "../../components/FormField"; import { Field, Form, Formik } from "formik"; import axios from "axios"; `; content = content.replace("import BaseButton from \"../../components/BaseButton\";", "import BaseButton from \"../../components/BaseButton\";" + imports); const stateAndHandlers = ` const [modalAction, setModalAction] = useState(null); const [actionLoading, setActionLoading] = useState(false); const handleActionSubmit = async (values) => { setActionLoading(true); try { if (modalAction === 'markWon') { await axios.put(\"/cases/\${id}/mark-won\", { data: { resolutionReason: values.reason } }); } else if (modalAction === 'markLost') { await axios.put(\"/cases/\${id}/mark-lost\", { data: { resolutionReason: values.reason } }); } else if (modalAction === 'reopen') { await axios.put(\"/cases/\${id}/reopen\", { data: { reopenReason: values.reason } }); } else if (modalAction === 'changeStatus') { await axios.put(\"/cases/\${id}/change-status\", { data: { status: values.status } }); } dispatch(fetchCase({ id })); setModalAction(null); } catch (e) { console.error(e); alert('Action failed: ' + (e.response?.data?.message || e.message)); } finally { setActionLoading(false); } }; `; content = content.replace(/const { id } = router.query;/, stateAndHandlers + '\n const { id } = router.query;'); const newButtons = ` setModalAction('changeStatus')} /> setModalAction('markWon')} /> setModalAction('markLost')} /> {['won', 'lost'].includes(cases.status) && setModalAction('reopen')} />} `; content = content.replace(//, newButtons); const modals = ` setModalAction(null)} onConfirm={() => { const form = document.getElementById('action-form'); if (form) form.dispatchEvent(new Event('submit', { cancelable: true, bubbles: true })); }} >
{['markWon', 'markLost', 'reopen'].includes(modalAction) && ( )} {modalAction === 'changeStatus' && ( )}
`; content = content.replace(//, "\n" + modals); fs.writeFileSync(filePath, content); console.log('Patched CasesView');