Compare commits

..

2 Commits

Author SHA1 Message Date
Dave
784378a999 feature/IO-3571-Create-Job-Done-Loading - Fix set is submitting 2026-03-09 12:53:59 -04:00
Allan Carr
0d502d4dd4 IO-3571 Create Job Done Button Loading
Signed-off-by: Allan Carr <allan@imexsystems.ca>
2026-03-06 18:31:22 -08:00
7 changed files with 19 additions and 19 deletions

View File

@@ -41,7 +41,7 @@ export function EmailOverlayComponent({ emailConfig, form, selectedMediaState, b
const emailsToMenu = { const emailsToMenu = {
items: [ items: [
...bodyshop.employees ...bodyshop.employees
.filter((e) => e.user_email && e.active === true) .filter((e) => e.user_email)
.map((e, idx) => ({ .map((e, idx) => ({
key: idx, key: idx,
label: `${e.first_name} ${e.last_name}`, label: `${e.first_name} ${e.last_name}`,
@@ -59,7 +59,7 @@ export function EmailOverlayComponent({ emailConfig, form, selectedMediaState, b
const menuCC = { const menuCC = {
items: [ items: [
...bodyshop.employees ...bodyshop.employees
.filter((e) => e.user_email && e.active === true) .filter((e) => e.user_email)
.map((e, idx) => ({ .map((e, idx) => ({
key: idx, key: idx,
label: `${e.first_name} ${e.last_name}`, label: `${e.first_name} ${e.last_name}`,

View File

@@ -25,7 +25,6 @@ const Eula = ({ currentEula, currentUser, acceptEula }) => {
const handleScroll = useCallback( const handleScroll = useCallback(
(e) => { (e) => {
if (!e.target) return;
const bottom = e.target.scrollHeight - 100 <= e.target.scrollTop + e.target.clientHeight; const bottom = e.target.scrollHeight - 100 <= e.target.scrollTop + e.target.clientHeight;
if (bottom && !hasEverScrolledToBottom) { if (bottom && !hasEverScrolledToBottom) {
setHasEverScrolledToBottom(true); setHasEverScrolledToBottom(true);
@@ -37,9 +36,7 @@ const Eula = ({ currentEula, currentUser, acceptEula }) => {
); );
useEffect(() => { useEffect(() => {
if (markdownCardRef.current) { handleScroll({ target: markdownCardRef.current });
handleScroll({ target: markdownCardRef.current });
}
}, [handleScroll]); }, [handleScroll]);
const handleChange = useCallback(() => { const handleChange = useCallback(() => {

View File

@@ -10,14 +10,12 @@ import JobsCreateOwnerInfoContainer from "../../components/jobs-create-owner-inf
import JobsCreateVehicleInfoContainer from "../../components/jobs-create-vehicle-info/jobs-create-vehicle-info.container"; import JobsCreateVehicleInfoContainer from "../../components/jobs-create-vehicle-info/jobs-create-vehicle-info.container";
import JobCreateContext from "../../pages/jobs-create/jobs-create.context"; import JobCreateContext from "../../pages/jobs-create/jobs-create.context";
export default function JobsCreateComponent({ form }) { export default function JobsCreateComponent({ form, isSubmitting }) {
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [errorMessage, setErrorMessage] = useState(null); const [errorMessage, setErrorMessage] = useState(null);
const [state] = useContext(JobCreateContext); const [state] = useContext(JobCreateContext);
const { t } = useTranslation(); const { t } = useTranslation();
const steps = [ const steps = [
{ {
title: t("jobs.labels.create.vehicleinfo"), title: t("jobs.labels.create.vehicleinfo"),
@@ -42,11 +40,9 @@ export default function JobsCreateComponent({ form }) {
const next = () => { const next = () => {
setPageIndex(pageIndex + 1); setPageIndex(pageIndex + 1);
console.log("Next");
}; };
const prev = () => { const prev = () => {
setPageIndex(pageIndex - 1); setPageIndex(pageIndex - 1);
console.log("Previous");
}; };
const ProgressButtons = ({ top }) => { const ProgressButtons = ({ top }) => {
@@ -79,17 +75,19 @@ export default function JobsCreateComponent({ form }) {
{pageIndex === steps.length - 1 && ( {pageIndex === steps.length - 1 && (
<Button <Button
type="primary" type="primary"
loading={isSubmitting}
onClick={() => { onClick={() => {
form form
.validateFields() .validateFields()
.then(() => { .then(() => {
// NO OP form.submit();
}) })
.catch((error) => console.log("error", error)); .catch((error) => {
form.submit(); console.log("error", error);
});
}} }}
> >
Done {t("general.actions.done")}
</Button> </Button>
)} )}
</Space> </Space>
@@ -146,13 +144,11 @@ export default function JobsCreateComponent({ form }) {
) : ( ) : (
<div> <div>
<ProgressButtons top /> <ProgressButtons top />
{errorMessage ? ( {errorMessage ? (
<div> <div>
<AlertComponent title={errorMessage} type="error" /> <AlertComponent title={errorMessage} type="error" />
</div> </div>
) : null} ) : null}
{steps.map((item, idx) => ( {steps.map((item, idx) => (
<div <div
key={idx} key={idx}

View File

@@ -46,6 +46,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader, curr
}); });
const [form] = Form.useForm(); const [form] = Form.useForm();
const [state, setState] = contextState; const [state, setState] = contextState;
const [isSubmitting, setIsSubmitting] = useState(false);
const [insertJob] = useMutation(INSERT_NEW_JOB); const [insertJob] = useMutation(INSERT_NEW_JOB);
const [loadOwner, remoteOwnerData] = useLazyQuery(QUERY_OWNER_FOR_JOB_CREATION); const [loadOwner, remoteOwnerData] = useLazyQuery(QUERY_OWNER_FOR_JOB_CREATION);
@@ -83,16 +84,19 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader, curr
newJobId: resp.data.insert_jobs.returning[0].id newJobId: resp.data.insert_jobs.returning[0].id
}); });
logImEXEvent("manual_job_create_completed", {}); logImEXEvent("manual_job_create_completed", {});
setIsSubmitting(false);
}) })
.catch((error) => { .catch((error) => {
notification.error({ notification.error({
title: t("jobs.errors.creating", { error: error }) title: t("jobs.errors.creating", { error: error })
}); });
setState({ ...state, error: error }); setState({ ...state, error: error });
setIsSubmitting(false);
}); });
}; };
const handleFinish = (values) => { const handleFinish = (values) => {
setIsSubmitting(true);
let job = Object.assign( let job = Object.assign(
{}, {},
values, values,
@@ -297,7 +301,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader, curr
}) })
}} }}
> >
<JobsCreateComponent form={form} /> <JobsCreateComponent form={form} isSubmitting={isSubmitting} />
</Form> </Form>
</RbacWrapper> </RbacWrapper>
</JobCreateContext.Provider> </JobCreateContext.Provider>

View File

@@ -1295,6 +1295,7 @@
"delete": "Delete", "delete": "Delete",
"deleteall": "Delete All", "deleteall": "Delete All",
"deselectall": "Deselect All", "deselectall": "Deselect All",
"done": "Done",
"download": "Download", "download": "Download",
"edit": "Edit", "edit": "Edit",
"gotoadmin": "Go to Admin Panel", "gotoadmin": "Go to Admin Panel",

View File

@@ -1295,6 +1295,7 @@
"delete": "Borrar", "delete": "Borrar",
"deleteall": "", "deleteall": "",
"deselectall": "", "deselectall": "",
"done": "",
"download": "", "download": "",
"edit": "Editar", "edit": "Editar",
"gotoadmin": "", "gotoadmin": "",

View File

@@ -1295,6 +1295,7 @@
"delete": "Effacer", "delete": "Effacer",
"deleteall": "", "deleteall": "",
"deselectall": "", "deselectall": "",
"done": "",
"download": "", "download": "",
"edit": "modifier", "edit": "modifier",
"gotoadmin": "", "gotoadmin": "",