diff --git a/ui-common/src/components/OasModal/OasModal.module.sass b/ui-common/src/components/OasModal/OasModal.module.sass index f7f8015e4..19716381b 100644 --- a/ui-common/src/components/OasModal/OasModal.module.sass +++ b/ui-common/src/components/OasModal/OasModal.module.sass @@ -32,6 +32,9 @@ overflow-y: scroll .borderLine - border-top: 1px solid #dee6fe - margin-bottom: 1% + border-top: 1px solid #dee6fe + margin-bottom: 1% + +.root + width: 100% diff --git a/ui-common/src/components/OasModal/OasModal.tsx b/ui-common/src/components/OasModal/OasModal.tsx index 00bbac1e5..4d3b7747c 100644 --- a/ui-common/src/components/OasModal/OasModal.tsx +++ b/ui-common/src/components/OasModal/OasModal.tsx @@ -1,5 +1,5 @@ import { Box, Fade, FormControl, MenuItem, Modal, Backdrop } from "@material-ui/core"; -import { useCallback, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { RedocStandalone } from "redoc"; import closeIcon from "assets/closeIcon.svg"; import { toast } from 'react-toastify'; @@ -7,8 +7,8 @@ import style from './OasModal.module.sass'; import openApiLogo from 'assets/openApiLogo.png' import { redocThemeOptions } from "./redocThemeOptions"; import React from "react"; -import { Select } from "../UI/Select"; import { TOAST_CONTAINER_ID } from "../../configs/Consts"; +import SearchableDropdown from "../UI/SearchableDropdown/SearchableDropdown"; const modalStyle = { @@ -30,6 +30,8 @@ const OasModal = ({ openModal, handleCloseModal, getOasServices, getOasByService const [oasServices, setOasServices] = useState([] as string[]) const [selectedServiceName, setSelectedServiceName] = useState(""); const [selectedServiceSpec, setSelectedServiceSpec] = useState(null); + + const classes = {root: style.root} const onSelectedOASService = async (selectedService) => { if (oasServices.length === 0) { @@ -88,19 +90,12 @@ const OasModal = ({ openModal, handleCloseModal, getOasServices, getOasByService
- - + +
diff --git a/ui-common/src/components/UI/SearchableDropdown/DefaultIconDown.svg b/ui-common/src/components/UI/SearchableDropdown/DefaultIconDown.svg new file mode 100644 index 000000000..7adbb0d4d --- /dev/null +++ b/ui-common/src/components/UI/SearchableDropdown/DefaultIconDown.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.module.sass b/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.module.sass new file mode 100644 index 000000000..25f42f6a7 --- /dev/null +++ b/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.module.sass @@ -0,0 +1,30 @@ +.optionItem + font-size: 12px + display: flex + align-items: center + overflow: hidden + text-overflow: ellipsis + white-space: nowrap + font-family: Source Sans Pro, Lucida Grande, Tahoma, sans-serif + +.title + overflow: hidden + text-overflow: ellipsis + white-space: nowrap + font-family: Source Sans Pro, Lucida Grande, Tahoma, sans-serif + +.optionListItem + font-size: 12px + margin-right: -15px + background-color: #262a3e + border-radius: 20px 0px 0px 20px + padding: 0px 16px 4px 12px + display: flex + max-width: 100px + height: 18px + +.optionListItemTitle + overflow: hidden + max-width: 80px + text-overflow: ellipsis + white-space: nowrap \ No newline at end of file diff --git a/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.tsx b/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.tsx new file mode 100644 index 000000000..6f3ce8840 --- /dev/null +++ b/ui-common/src/components/UI/SearchableDropdown/SearchableDropdown.tsx @@ -0,0 +1,87 @@ +import React from "react"; +import { makeStyles } from "@material-ui/core/styles"; +import { Autocomplete } from "@material-ui/lab"; +import { Checkbox, TextField } from "@material-ui/core"; +import CheckBoxOutlineBlankIcon from "@material-ui/icons/CheckBoxOutlineBlank"; +import CheckBoxIcon from "@material-ui/icons/CheckBox"; +import DefaultIconDown from "DefaultIconDown.svg"; +import styles from "./SearchableDropdown.module.sass"; + +interface SearchableDropdownProps { + options: string[], + selectedValues?: any, + onChange: (string) => void, + isLoading?: boolean, + label?: string, + multiple?: boolean, + inputWidth?: string + freeSolo?: boolean +} + +const useStyles = makeStyles(() => ({ + + inputRoot: { + padding: "8px 4px 8px 12px !important", + borderRadius: "9px !important" + }, + input: { + padding: "0px 33px 0px 0px !important", + height: 18, + fontWeight: "normal", + fontFamily: "Source Sans Pro, Lucida Grande, Tahoma, sans-serif" + }, + root: { + "& .MuiFormLabel-root": { + fontFamily: "Source Sans Pro, Lucida Grande, Tahoma, sans-serif" + } + } +})); + + +const SearchableDropdown: React.FC = ({ options, selectedValues, onChange, isLoading, label, multiple, inputWidth, freeSolo }) => { + + const classes = useStyles(); + + return option} + onChange={(event, val) => onChange(val)} + size={"small"} + popupIcon={iconDown} + renderOption={(option, { selected }) => ( +
+ {multiple && } + checkedIcon={} + style={{ marginRight: 8 }} + checked={selected} + />} +
{option}
+
+ )} + renderTags={() =>
+
0 ? `${selectedValues[0]} (+${selectedValues.length - 1})` : ""} className={styles.optionListItemTitle}> + {selectedValues?.length > 0 ? `${selectedValues[0]}` : ""} +
+ {selectedValues?.length > 1 &&
{`(+${selectedValues.length - 1})`}
} +
} + renderInput={(params) => freeSolo && onChange(e.target.value)} + variant="outlined" label={label} + className={`${classes.root} searchableDropdown`} + style={{ backgroundColor: "transparent" }} + {...params} + /> + } + /> +}; + +export default SearchableDropdown;