From d1a2294a77faf0fe655553245428e68f6057ffac Mon Sep 17 00:00:00 2001 From: Alexander Polyankin <alexander.polyankin@metabase.com> Date: Fri, 24 Jun 2022 16:19:22 +0300 Subject: [PATCH] Fix editable text issues (#23532) --- .../core/components/EditableText/EditableText.tsx | 11 ++++++++--- .../query_builder/components/view/ViewHeader.jsx | 7 ++----- .../components/view/sidebars/QuestionInfoSidebar.tsx | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/frontend/src/metabase/core/components/EditableText/EditableText.tsx b/frontend/src/metabase/core/components/EditableText/EditableText.tsx index 4e50c84462d..8193edfd85f 100644 --- a/frontend/src/metabase/core/components/EditableText/EditableText.tsx +++ b/frontend/src/metabase/core/components/EditableText/EditableText.tsx @@ -17,6 +17,7 @@ export type EditableTextAttributes = Omit< export interface EditableTextProps extends EditableTextAttributes { initialValue?: string | null; placeholder?: string; + isOptional?: boolean; isMultiline?: boolean; onChange?: (value: string) => void; "data-testid"?: string; @@ -26,6 +27,7 @@ const EditableText = forwardRef(function EditableText( { initialValue, placeholder, + isOptional = false, isMultiline = false, onChange, "data-testid": dataTestId, @@ -35,13 +37,16 @@ const EditableText = forwardRef(function EditableText( ) { const [inputValue, setInputValue] = useState(initialValue ?? ""); const [submitValue, setSubmitValue] = useState(initialValue ?? ""); + const displayValue = inputValue ? inputValue : placeholder; const handleBlur = useCallback(() => { - if (inputValue !== submitValue) { + if (!isOptional && !inputValue) { + setInputValue(submitValue); + } else if (inputValue !== submitValue) { setSubmitValue(inputValue); onChange?.(inputValue); } - }, [inputValue, submitValue, onChange]); + }, [inputValue, submitValue, isOptional, onChange]); const handleChange = useCallback( (event: ChangeEvent<HTMLTextAreaElement>) => { @@ -63,7 +68,7 @@ const EditableText = forwardRef(function EditableText( ); return ( - <EditableTextRoot {...props} ref={ref} data-value={`${inputValue}\u00A0`}> + <EditableTextRoot {...props} ref={ref} data-value={`${displayValue}\u00A0`}> <EditableTextArea value={inputValue} placeholder={placeholder} diff --git a/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx b/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx index de09c06a770..f6e3032836f 100644 --- a/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx +++ b/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx @@ -192,11 +192,8 @@ function SavedQuestionLeftSide(props) { const onHeaderChange = useCallback( name => { - if (name !== question.displayName()) { - onSave({ - ...question.card(), - name, - }); + if (name && name !== question.displayName()) { + onSave(question.setDisplayName(name).card()); } }, [question, onSave], diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/QuestionInfoSidebar.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/QuestionInfoSidebar.tsx index dca8218cf43..ccbb0f38046 100644 --- a/frontend/src/metabase/query_builder/components/view/sidebars/QuestionInfoSidebar.tsx +++ b/frontend/src/metabase/query_builder/components/view/sidebars/QuestionInfoSidebar.tsx @@ -51,6 +51,7 @@ export const QuestionInfoSidebar = ({ <EditableText initialValue={description} placeholder={t`Description`} + isOptional isMultiline onChange={handleSave} /> -- GitLab