From 0f3514c8a7b299ad22215b1ed3b15c6f0e50522b Mon Sep 17 00:00:00 2001 From: Luiz Perez Date: Fri, 22 Dec 2023 20:05:06 +0000 Subject: [PATCH 1/3] Add support for readOnly to disable Menu button --- src/components/IconPicker.tsx | 13 +++++++++++-- src/components/Menu.test.tsx | 7 +++++++ src/components/Menu.tsx | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/components/IconPicker.tsx b/src/components/IconPicker.tsx index e427e86..2801c3e 100644 --- a/src/components/IconPicker.tsx +++ b/src/components/IconPicker.tsx @@ -19,7 +19,12 @@ import type { SearchResultsOnSelectCallback } from './SearchResults'; import type { IconObject, IconPickerOptions } from '../types'; import type { ObjectInputProps } from 'sanity'; -const IconPicker = ({ schemaType, value = {}, onChange }: ObjectInputProps) => { +const IconPicker = ({ + schemaType, + value = {}, + readOnly, + onChange, +}: ObjectInputProps) => { const options: IconPickerOptions = schemaType.options; const [isPopupOpen, setIsPopupOpen] = useState(false); const { query, loading, results, setQuery } = useQuery(options); @@ -88,7 +93,11 @@ const IconPicker = ({ schemaType, value = {}, onChange }: ObjectInputProps) => { - + diff --git a/src/components/Menu.test.tsx b/src/components/Menu.test.tsx index 565b94a..6d2d68e 100644 --- a/src/components/Menu.test.tsx +++ b/src/components/Menu.test.tsx @@ -57,4 +57,11 @@ describe('Menu', () => { await user.click(getByText('Delete')); expect(mockOnClick).toHaveBeenCalledWith(Action.delete); }); + + it('renders disabled state when readOnly is true', async () => { + const { getByText } = render( + + ); + expect(getByText('Add icon').closest('button')).toBeDisabled(); + }); }); diff --git a/src/components/Menu.tsx b/src/components/Menu.tsx index 8c3fede..d4a2e28 100644 --- a/src/components/Menu.tsx +++ b/src/components/Menu.tsx @@ -14,14 +14,17 @@ export type MenuClickCallback = (action: Action) => void | Error; const Menu = ({ onClick, selected, + readOnly, }: { onClick: MenuClickCallback; selected: IconObject | null; + readOnly?: boolean | undefined; }) => { return ( <> {!selected && (