feat(web): disable submit while saving + Save & create another + Cmd/Ctrl+Enter (#46)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-07 23:15:21 +02:00
parent ed0c13907c
commit 3900bc362c
7 changed files with 122 additions and 25 deletions
+11 -4
View File
@@ -18,7 +18,10 @@ export function ObjectNewPage() {
useDocumentTitle(t("objects.new"));
useBreadcrumb([{ label: t("nav.objects"), to: "/objects" }, { label: t("objects.new") }]);
const onSubmit = async (values: ObjectFormValues) => {
const onSubmit = async (
values: ObjectFormValues,
opts?: { createAnother?: boolean },
): Promise<boolean> => {
setError(null);
let id: string;
@@ -32,7 +35,7 @@ export function ObjectNewPage() {
id = created.id;
} catch {
setError(t("form.rejected"));
return;
return false;
}
if (Object.keys(values.fields).length > 0) {
@@ -40,12 +43,16 @@ export function ObjectNewPage() {
await setFields.mutateAsync({ id, fields: values.fields });
} catch (e) {
const fieldErrorKey = e instanceof FieldRejection ? e.field : undefined;
navigate(`/objects/${id}/edit`, { state: { fieldsError: true, fieldErrorKey } });
return;
const fieldErrorCode = e instanceof FieldRejection ? e.code : undefined;
navigate(`/objects/${id}/edit`, { state: { created: true, fieldErrorKey, fieldErrorCode } });
return true;
}
}
if (opts?.createAnother) return true;
navigate(`/objects/${id}`);
return true;
};
return (