Skip to content

Commit c303125

Browse files
committed
[fields] Disable clear and clearEdit action buttons for read-only fields and disabled forms
1 parent b5a5c86 commit c303125

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

.changeset/bright-geese-play.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@sjsf/form": patch
3+
---
4+
5+
Disable `clear` and `clearEdit` action buttons for read-only fields and disabled forms

packages/form/src/fields/actions/clear-edit.svelte

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import {
66
getComponent,
77
getDefaultFieldState,
8+
isDisabled,
89
retrieveTranslate,
910
Text,
1011
type Config,
@@ -35,12 +36,15 @@
3536
<Button
3637
type="clear-edit-action"
3738
{config}
38-
disabled={false}
39+
disabled={config.schema.readOnly || isDisabled(ctx)}
3940
{errors}
4041
onclick={() => {
4142
valueRef.current = isNil(valueRef.current)
42-
? (getDefaultFieldState(ctx, config.schema, undefined) ??
43-
getDefaultValueForType(getSimpleSchemaType(config.schema)))
43+
? (getDefaultFieldState(ctx, {
44+
schema: config.schema,
45+
formData: undefined,
46+
includeUndefinedValues: "excludeObjectChildren",
47+
}) ?? getDefaultValueForType(getSimpleSchemaType(config.schema)))
4448
: undefined;
4549
}}
4650
>

packages/form/src/fields/actions/clear.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import type { Ref } from "@/lib/svelte.svelte.js";
33
import {
44
getComponent,
5+
isDisabled,
56
retrieveTranslate,
67
Text,
78
type Config,
@@ -31,7 +32,7 @@
3132
<Button
3233
type="clear-action"
3334
{config}
34-
disabled={false}
35+
disabled={config.schema.readOnly || isDisabled(ctx)}
3536
{errors}
3637
onclick={() => {
3738
valueRef.current = undefined;

packages/form/src/form/state/attributes.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ export function assignProps<O>(options: O) {
144144
return <T extends object>(props: T) => Object.assign(props, options);
145145
}
146146

147+
/**
148+
* @query
149+
*/
147150
export function isDisabled<T>(
148151
ctx: FormState<T>,
149152
attributes?: Partial<Nullable<Disabled>>

0 commit comments

Comments
 (0)