diff --git a/lib/GADS.pm b/lib/GADS.pm index 0d0db0750..4ab2dc0d0 100644 --- a/lib/GADS.pm +++ b/lib/GADS.pm @@ -340,6 +340,9 @@ hook before_template => sub { # Base 64 encoder for use in templates $tokens->{b64_filter} = sub { encode_base64(encode_json shift, '') }; + $tokens->{actions} = session 'actions'; + session->delete('actions'); + # This line used to be pre-request. However, occasionally errors have been # experienced with pages not submitting CSRF tokens. I think these may have # been race conditions where the session had been destroyed between the @@ -2299,7 +2302,7 @@ prefix '/:layout_name' => sub { any ['get', 'post'] => '/data' => require_login sub { my $layout = var('layout') or pass; - + my $user = logged_in_user; my @additional_filters; @@ -4675,6 +4678,7 @@ sub _process_edit ); $params{layout} = var('layout') if var('layout'); # Used when creating a new record + my $actions; my $layout; if (my $delete_id = param 'delete') @@ -4801,6 +4805,9 @@ sub _process_edit my $forward = (!$id && $layout->forward_record_after_create) || param('submit') eq 'submit-and-remain' ? 'record/'.$record->current_id : $layout->identifier.'/data'; + $actions->{clear_saved_values} = $id ? $id: 0; + session 'actions' => $actions; + return forwardHome( { success => 'Submission has been completed successfully for record ID '.$record->current_id }, $forward ); } diff --git a/src/frontend/components/button/lib/cancel-button.ts b/src/frontend/components/button/lib/cancel-button.ts index 0bbaf24d8..a81518d80 100644 --- a/src/frontend/components/button/lib/cancel-button.ts +++ b/src/frontend/components/button/lib/cancel-button.ts @@ -6,7 +6,7 @@ export default function createCancelButton(el: HTMLElement | JQuery $el.data('cancel-button', "true"); $el.on('click', async () => { const href = $el.data('href'); - await clearSavedFormValues($el.closest('form')); + await clearSavedFormValues(); if (href) window.location.href = href; else diff --git a/src/frontend/components/button/lib/common.ts b/src/frontend/components/button/lib/common.ts index 2c2909e80..7654c2103 100644 --- a/src/frontend/components/button/lib/common.ts +++ b/src/frontend/components/button/lib/common.ts @@ -1,22 +1,14 @@ -import gadsStorage from "util/gadsStorage"; +import StorageProvider from "util/storageProvider"; /** * Clear all saved form values for the current record * @param $form The form to clear the data for */ -export async function clearSavedFormValues($form: JQuery) { - if (!$form || $form.length === 0) return; - const layout = layoutId(); - const record = recordId(); +export async function clearSavedFormValues() { const ls = storage(); const item = await ls.getItem(table_key()); - if (item) ls.removeItem(`linkspace-record-change-${layout}-${record}`); - await Promise.all($form.find(".linkspace-field").map(async (_, el) => { - const field_id = $(el).data("column-id"); - const item = await gadsStorage.getItem(`linkspace-column-${field_id}-${layout}-${record}`); - if (item) gadsStorage.removeItem(`linkspace-column-${field_id}-${layout}-${record}`); - })); + if (item) ls.clear(); } /** @@ -48,5 +40,5 @@ export function table_key() { * @returns The storage object */ export function storage() { - return gadsStorage; + return new StorageProvider(table_key()); } \ No newline at end of file diff --git a/src/frontend/components/button/lib/submit-draft-record-button.ts b/src/frontend/components/button/lib/submit-draft-record-button.ts index 8c601ae74..2b3d67e89 100644 --- a/src/frontend/components/button/lib/submit-draft-record-button.ts +++ b/src/frontend/components/button/lib/submit-draft-record-button.ts @@ -11,7 +11,6 @@ export default function createSubmitDraftRecordButton(element: JQuery