e.preventDefault()}
>
-
+
@@ -533,10 +534,10 @@ export function PeerGroupSelector({
"text-neutral-500 dark:text-nb-gray-300 font-medium flex items-center gap-2"
}
>
-
+
{peerCount} Peer(s)
) : (
@@ -568,17 +569,17 @@ export function PeerGroupSelector({
/>
)}
- {showPeers && (
-
-
-
- )}
+ {showPeers && (
+
+
+
+ )}
@@ -597,6 +598,7 @@ const TabTriggers = ({
showPeers?: boolean;
}) => {
if (!showResources && !showPeers) return null;
+
return (
- {showResources && (
- searchRef.current?.focus()}
- >
-
- Resources
-
- )}
+ {showResources && (
+ searchRef.current?.focus()}
+ >
+
+ Resources
+
+ )}
- {showPeers && (
- searchRef.current?.focus()}
- >
-
- Peers
-
- )}
+ {showPeers && (
+ searchRef.current?.focus()}
+ >
+
+ Peers
+
+ )}
);
};
@@ -800,105 +802,105 @@ const ResourcesList = ({
};
const peersSearchPredicate = (item: Peer, query: string) => {
- const lowerCaseQuery = query.toLowerCase();
- if (item.name.toLowerCase().includes(lowerCaseQuery)) return true;
- return item.ip.toLowerCase().includes(lowerCaseQuery);
+ const lowerCaseQuery = query.toLowerCase();
+ if (item.name.toLowerCase().includes(lowerCaseQuery)) return true;
+ return item.ip.toLowerCase().includes(lowerCaseQuery);
};
const PeersList = ({
- search,
- peers,
- isLoading,
- value,
- onChange,
- }: {
- search: string;
- peers?: Peer[];
- isLoading: boolean;
- value?: PolicyRuleResource;
- onChange: (peer: Peer) => void;
+ search,
+ peers,
+ isLoading,
+ value,
+ onChange,
+}: {
+ search: string;
+ peers?: Peer[];
+ isLoading: boolean;
+ value?: PolicyRuleResource;
+ onChange: (peer: Peer) => void;
}) => {
- const [filteredItems, _, setSearch] = useSearch(
- peers || [],
- peersSearchPredicate,
- { filter: true, debounce: 150 },
- );
+ const [filteredItems, _, setSearch] = useSearch(
+ peers || [],
+ peersSearchPredicate,
+ { filter: true, debounce: 150 },
+ );
- useEffect(() => {
- setSearch(search);
- }, [search, setSearch]);
-
- if (isLoading) {
- return (
-
-
-
-
-
-
- );
- }
-
- if (search != "" && filteredItems.length == 0) {
- return (
-
- There are no peers matching your search. Please try a different search
- term.
-
- );
- }
-
- if (search == "" && filteredItems.length == 0) {
- return (
-
- There are no peers available yet.
- Go to Peers to add some peers.
-
- );
- }
+ useEffect(() => {
+ setSearch(search);
+ }, [search, setSearch]);
+ if (isLoading) {
return (
-
- {
- if (!res?.id) return;
-
- return (
-
-
-
{
- e.preventDefault();
- }}
- >
-
-
-
-
-
-
-
- );
- }}
- />
-
+
+
+
+
+
+
);
-};
\ No newline at end of file
+ }
+
+ if (search != "" && filteredItems.length == 0) {
+ return (
+
+ There are no peers matching your search. Please try a different search
+ term.
+
+ );
+ }
+
+ if (search == "" && filteredItems.length == 0) {
+ return (
+
+ There are no peers available yet.
+ Go to Peers to add some peers.
+
+ );
+ }
+
+ return (
+
+ {
+ if (!res?.id) return;
+
+ return (
+
+
+
{
+ e.preventDefault();
+ }}
+ >
+
+
+
+
+
+
+
+ );
+ }}
+ />
+
+ );
+};
diff --git a/src/components/SegmentedTabs.tsx b/src/components/SegmentedTabs.tsx
index 35e386b..76e080a 100644
--- a/src/components/SegmentedTabs.tsx
+++ b/src/components/SegmentedTabs.tsx
@@ -44,10 +44,12 @@ function Trigger({
children,
value,
disabled = false,
+ className,
}: {
children: React.ReactNode;
value: string;
disabled?: boolean;
+ className?: string;
}) {
const currentValue = useTabContext();
return (
@@ -60,6 +62,7 @@ function Trigger({
: disabled
? ""
: "text-nb-gray-400 hover:bg-nb-gray-900/50",
+ className,
)}
value={value}
>
diff --git a/src/components/select/SelectDropdown.tsx b/src/components/select/SelectDropdown.tsx
index 64c19d7..50b3427 100644
--- a/src/components/select/SelectDropdown.tsx
+++ b/src/components/select/SelectDropdown.tsx
@@ -37,6 +37,10 @@ interface SelectDropdownProps {
searchPlaceholder?: string;
isLoading?: boolean;
variant?: ButtonVariants["variant"];
+ className?: string;
+ size?: "xs" | "sm";
+ children?: React.ReactNode;
+ maxHeight?: number;
}
export function SelectDropdown({
@@ -51,6 +55,10 @@ export function SelectDropdown({
searchPlaceholder = "Search...",
isLoading = false,
variant = "input",
+ className,
+ size = "sm",
+ children,
+ maxHeight,
}: Readonly
) {
const [inputRef, { width }] = useElementSize();
@@ -79,6 +87,46 @@ export function SelectDropdown({
});
}, [options, debouncedSearch]);
+ const Loading = () => {
+ return (
+
+
+
+
+ );
+ };
+
+ const SelectedItem = () => {
+ return (
+
+ {selected?.icon &&
}
+
+ {selected?.label}
+
+
+ );
+ };
+
+ const PlaceholderItem = () => {
+ return (
+
+ );
+ };
+
return (
-
-
+ }
+ >
+