diff --git a/docs/content/components/editable.md b/docs/content/components/editable.md index b115ce59c..9ef8d09ad 100644 --- a/docs/content/components/editable.md +++ b/docs/content/components/editable.md @@ -146,6 +146,27 @@ Contains the cancel trigger of the editable component. +## Examples + +### Change only on submit + +By default the component will submit when `blur` event triggers. We can modify the `submit-mode` prop to alter this behavior. +In this case, we want to submit only when user click on `EditableSubmitTrigger`, so we change the submit mode to `none`. + +```vue line=2,8 + +``` + ## Accessibility ### Keyboard Interactions diff --git a/packages/radix-vue/src/Editable/Editable.test.ts b/packages/radix-vue/src/Editable/Editable.test.ts index 35d4035ae..d6ee4fc77 100644 --- a/packages/radix-vue/src/Editable/Editable.test.ts +++ b/packages/radix-vue/src/Editable/Editable.test.ts @@ -83,7 +83,7 @@ describe('editable', () => { }) it('submits the value when pressing enter', async () => { - const { input, preview, rerender } = setup({ editableProps: { modelValue: '' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data }) } }) + const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'enter' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data }) } }) await userEvent.type(input, 'New Value') await userEvent.keyboard(kbd.ENTER) @@ -94,8 +94,10 @@ describe('editable', () => { it('submits the value on blur', async () => { const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'blur' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data, submitMode: 'blur' }) } }) + await userEvent.dblClick(preview) await userEvent.type(input, 'New Value') - await userEvent.tab() + await userEvent.click(document.children[0]) + expect(preview).toBeVisible() expect(preview).toHaveTextContent('New Value') }) @@ -112,8 +114,10 @@ describe('editable', () => { it('submits the value on blur if submitMode is both', async () => { const { input, preview, rerender } = setup({ editableProps: { modelValue: '', submitMode: 'both' }, emits: { 'onUpdate:modelValue': (data: string) => rerender({ modelValue: data, submitMode: 'blur' }) } }) + await userEvent.dblClick(preview) await userEvent.type(input, 'New Value') - await userEvent.tab() + await userEvent.click(document.children[0]) + expect(preview).toBeVisible() expect(preview).toHaveTextContent('New Value') }) diff --git a/packages/radix-vue/src/Editable/EditableInput.vue b/packages/radix-vue/src/Editable/EditableInput.vue index c1e276a21..a4a898d49 100644 --- a/packages/radix-vue/src/Editable/EditableInput.vue +++ b/packages/radix-vue/src/Editable/EditableInput.vue @@ -53,7 +53,7 @@ function handleSubmitKeyDown(event: KeyboardEvent) { diff --git a/packages/radix-vue/src/Editable/EditableRoot.vue b/packages/radix-vue/src/Editable/EditableRoot.vue index 1b445be9f..a005356e4 100644 --- a/packages/radix-vue/src/Editable/EditableRoot.vue +++ b/packages/radix-vue/src/Editable/EditableRoot.vue @@ -13,6 +13,7 @@ type EditableRootContext = { maxLength: Ref disabled: Ref modelValue: Ref + inputValue: Ref placeholder: Ref<{ edit: string, preview: string }> isEditing: Ref submitMode: Ref @@ -75,7 +76,7 @@ export const [injectEditableRootContext, provideEditableRootContext]