Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4512daf416 | ||
|
|
5f5b5379e8 | ||
|
|
2fe6163642 |
@@ -23,6 +23,8 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
|
|||||||
const { data: integrationData } = clientApi.integration.all.useQuery();
|
const { data: integrationData } = clientApi.integration.all.useQuery();
|
||||||
const settings = useSettings();
|
const settings = useSettings();
|
||||||
|
|
||||||
|
const availableKinds = useMemo(() => new Set((integrationData ?? []).map((i) => i.kind)), [integrationData]);
|
||||||
|
|
||||||
const items = useMemo(
|
const items = useMemo(
|
||||||
() =>
|
() =>
|
||||||
objectEntries(widgetImports)
|
objectEntries(widgetImports)
|
||||||
@@ -40,10 +42,15 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
|
|||||||
[t],
|
[t],
|
||||||
);
|
);
|
||||||
|
|
||||||
const filteredItems = useMemo(
|
const filteredItems = useMemo(() => {
|
||||||
() => items.filter((item) => item.name.toLowerCase().includes(search.toLowerCase())),
|
const query = search.toLowerCase().trim();
|
||||||
[items, search],
|
if (!query) return items;
|
||||||
);
|
return items.filter(
|
||||||
|
(item) =>
|
||||||
|
item.name.toLowerCase().includes(query) ||
|
||||||
|
item.supportedIntegrations.some((kind) => getIntegrationName(kind).toLowerCase().includes(query)),
|
||||||
|
);
|
||||||
|
}, [items, search]);
|
||||||
|
|
||||||
const handleAdd = (kind: WidgetKind) => {
|
const handleAdd = (kind: WidgetKind) => {
|
||||||
const definition = widgetImports[kind].definition;
|
const definition = widgetImports[kind].definition;
|
||||||
@@ -98,7 +105,12 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{filteredItems.map((item) => (
|
{filteredItems.map((item) => (
|
||||||
<WidgetItem key={item.kind} item={item} onSelect={() => handleAdd(item.kind)} />
|
<WidgetItem
|
||||||
|
key={item.kind}
|
||||||
|
item={item}
|
||||||
|
onSelect={() => handleAdd(item.kind)}
|
||||||
|
hasMatchingIntegration={item.supportedIntegrations.some((kind) => availableKinds.has(kind))}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
{filteredItems.length === 0 && (
|
{filteredItems.length === 0 && (
|
||||||
@@ -116,6 +128,7 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
|
|||||||
const WidgetItem = ({
|
const WidgetItem = ({
|
||||||
item,
|
item,
|
||||||
onSelect,
|
onSelect,
|
||||||
|
hasMatchingIntegration,
|
||||||
}: {
|
}: {
|
||||||
item: {
|
item: {
|
||||||
kind: WidgetKind;
|
kind: WidgetKind;
|
||||||
@@ -125,6 +138,7 @@ const WidgetItem = ({
|
|||||||
icon: TablerIcon;
|
icon: TablerIcon;
|
||||||
};
|
};
|
||||||
onSelect: () => void;
|
onSelect: () => void;
|
||||||
|
hasMatchingIntegration: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const t = useI18n();
|
const t = useI18n();
|
||||||
|
|
||||||
@@ -133,7 +147,12 @@ const WidgetItem = ({
|
|||||||
h={selectGridCardHeight}
|
h={selectGridCardHeight}
|
||||||
withBorder
|
withBorder
|
||||||
pos="relative"
|
pos="relative"
|
||||||
style={{ overflow: "hidden", "--_hover-opacity": "0" }}
|
style={{
|
||||||
|
overflow: "hidden",
|
||||||
|
"--_hover-opacity": "0",
|
||||||
|
borderColor: hasMatchingIntegration ? "var(--mantine-color-blue-6)" : undefined,
|
||||||
|
borderWidth: hasMatchingIntegration ? 2 : undefined,
|
||||||
|
}}
|
||||||
onMouseEnter={(e) => e.currentTarget.style.setProperty("--_hover-opacity", "1")}
|
onMouseEnter={(e) => e.currentTarget.style.setProperty("--_hover-opacity", "1")}
|
||||||
onMouseLeave={(e) => e.currentTarget.style.setProperty("--_hover-opacity", "0")}
|
onMouseLeave={(e) => e.currentTarget.style.setProperty("--_hover-opacity", "0")}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in new issue
Block a user