diff --git a/src/CqlBuilderPanel/ValueSets/Search/Search.tsx b/src/CqlBuilderPanel/ValueSets/Search/Search.tsx index 866bc33a..e3f90d1e 100644 --- a/src/CqlBuilderPanel/ValueSets/Search/Search.tsx +++ b/src/CqlBuilderPanel/ValueSets/Search/Search.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React from "react"; import ControlledAutoComplete from "../../../common/ControlledAutoComplete"; import { useFormik } from "formik"; import SearchField from "../../../common/SearchField"; @@ -66,6 +66,7 @@ export default function Search(props: SearchProps) { await handleSearch(formik.values); }, }); + const trimField = (fieldName) => { formik.setFieldValue(fieldName, formik.values[fieldName].trim()); }; @@ -100,6 +101,9 @@ export default function Search(props: SearchProps) { formik.setFieldValue(value, ""); } }); + if (!saveMap["url"] && formik.values["version"]) { + formik.setFieldValue("version", ""); + } }; return ( @@ -112,13 +116,20 @@ export default function Search(props: SearchProps) { formControl={formik.getFieldProps("searchCategories")} onClose={undefined} {...formik.getFieldProps("searchCategories")} - onChange={(_event: any, selectedVal: string | null, reason) => { + onChange={( + _event: any, + selectedVal: { label: string; value: string }[] | null, + reason + ) => { if (reason === "removeOption") { formBlanker(selectedVal); } if (reason === "clear") { formBlanker([]); } + if (!selectedVal.some((obj) => obj.value === "url")) { + selectedVal = selectedVal.filter((obj) => obj.value !== "version"); + } formik.setFieldValue("searchCategories", selectedVal); }} id="search-by-category" @@ -127,7 +138,10 @@ export default function Search(props: SearchProps) { disabled={!canEdit} options={SEARCH_CATEGORIES} getOptionDisabled={(option) => { - if (option.value === "version") { + if ( + option.value === "version" && + !formik.values.searchCategories.some((obj) => obj.value === "url") + ) { return formik.values.url === ""; } return false; @@ -149,6 +163,14 @@ export default function Search(props: SearchProps) { prefix="Search" label={SEARCH_MAP[value]} trimField={trimField} + placeHolder={ + value === "version" && !formik.values.url + ? "OID/URL must be entered first" + : "" + } + disabled={ + value === "version" ? !formik.values.url : false + } />
@@ -160,6 +182,12 @@ export default function Search(props: SearchProps) { prefix="Search" label={SEARCH_MAP[value]} trimField={trimField} + placeHolder={ + value === "version" && !formik.values.url + ? "OID/URL must be entered first" + : "" + } + disabled={value === "version" ? !formik.values.url : false} /> ); })} diff --git a/src/CqlBuilderPanel/ValueSets/ValueSets.test.tsx b/src/CqlBuilderPanel/ValueSets/ValueSets.test.tsx index a3f38cfd..fb65996b 100644 --- a/src/CqlBuilderPanel/ValueSets/ValueSets.test.tsx +++ b/src/CqlBuilderPanel/ValueSets/ValueSets.test.tsx @@ -133,15 +133,29 @@ describe("ValueSets Page", () => { userEvent.click(getByText("Status")); userEvent.click(categoriesSelectButton); userEvent.click(getByText("Title")); + userEvent.click(categoriesSelectButton); + userEvent.click(getByText("OID/URL")); + userEvent.click(categoriesSelectButton); + userEvent.click(getByText("Definition Version")); expect(getByTestId("code-text-input")).toBeInTheDocument(); expect(getByTestId("status-text-input")).toBeInTheDocument(); expect(getByTestId("title-text-input")).toBeInTheDocument(); + expect(getByTestId("url-text-input")).toBeInTheDocument(); + expect(getByTestId("version-text-input")).toBeInTheDocument(); const deleteCodeButton = getByRole("button", { name: "Code" }); const deleteIcon = within(deleteCodeButton).getByTestId("CancelIcon"); userEvent.click(deleteIcon); await waitFor(() => { expect(queryByTestId("code-text-input")).not.toBeInTheDocument(); }); + const deleteURLButton = getByRole("button", { name: "OID/URL" }); + const deleteURLIcon = within(deleteURLButton).getByTestId("CancelIcon"); + userEvent.click(deleteURLIcon); + await waitFor(() => { + expect(queryByTestId("url-text-input")).not.toBeInTheDocument(); + expect(queryByTestId("version-text-input")).not.toBeInTheDocument(); + }); + const clearButton = getByLabelText("Clear"); userEvent.click(clearButton); await waitFor(() => { diff --git a/src/CqlBuilderPanel/functionsSection/functionBuilder/FunctionBuilder.tsx b/src/CqlBuilderPanel/functionsSection/functionBuilder/FunctionBuilder.tsx index cabaeebb..b0503cc3 100644 --- a/src/CqlBuilderPanel/functionsSection/functionBuilder/FunctionBuilder.tsx +++ b/src/CqlBuilderPanel/functionsSection/functionBuilder/FunctionBuilder.tsx @@ -327,8 +327,10 @@ export default function FunctionBuilder({ fluentFunction: formik.values.fluentFunction, expressionValue: formik.values.expressionEditorValue, }; - resetForm(); - handleApplyFunction(functionToApply); + const result = handleApplyFunction(functionToApply); + if (result === "success") { + resetForm(); + } } } >