From 637e06f9c0badc657300893950b46f5d9ac1e82d Mon Sep 17 00:00:00 2001 From: Ephraim Duncan <55143799+ephraimduncan@users.noreply.github.com> Date: Sat, 1 Feb 2025 03:34:42 +0000 Subject: [PATCH] fix: unable to check on the checkbox field (#1593) This change prevents race conditions between state updates and API operations by updating local state immediately before making async calls. --- .../(signing)/sign/[token]/checkbox-field.tsx | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx b/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx index 78a25d7ea..627782838 100644 --- a/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx @@ -180,28 +180,25 @@ export const CheckboxField = ({ field, onSignField, onUnsignField }: CheckboxFie ...checkedValues, item.value.length > 0 ? item.value : `empty-value-${item.id}`, ]; - - await removeSignedFieldWithToken({ - token: recipient.token, - fieldId: field.id, - }); - - if (isLengthConditionMet) { - await signFieldWithToken({ - token: recipient.token, - fieldId: field.id, - value: toCheckboxValue(checkedValues), - isBase64: true, - }); - } } else { updatedValues = checkedValues.filter( (v) => v !== item.value && v !== `empty-value-${item.id}`, ); + } - await removeSignedFieldWithToken({ + setCheckedValues(updatedValues); + + await removeSignedFieldWithToken({ + token: recipient.token, + fieldId: field.id, + }); + + if (updatedValues.length > 0) { + await signFieldWithToken({ token: recipient.token, fieldId: field.id, + value: toCheckboxValue(updatedValues), + isBase64: true, }); } } catch (err) { @@ -213,7 +210,6 @@ export const CheckboxField = ({ field, onSignField, onUnsignField }: CheckboxFie variant: 'destructive', }); } finally { - setCheckedValues(updatedValues); startTransition(() => router.refresh()); } };