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={
}
+ 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;