feat: highlight widgets with available integrations in add-item modal

This commit is contained in:
Thomas Camlong committed 2026-06-09 17:45:03 +02:00
1 parent 2fe6163642
commit 5f5b5379e8
1 file changed
+19 -2
@@ -23,6 +23,11 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
const { data: integrationData } = clientApi.integration.all.useQuery();
const settings = useSettings();
const availableKinds = useMemo(
() => new Set((integrationData ?? []).map((i) => i.kind)),
[integrationData],
);
const items = useMemo(
() =>
objectEntries(widgetImports)
@@ -103,7 +108,12 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
}}
>
{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 && (
@@ -121,6 +131,7 @@ export const ItemSelectModal = createModal<void>(({ actions }) => {
const WidgetItem = ({
item,
onSelect,
hasMatchingIntegration,
}: {
item: {
kind: WidgetKind;
@@ -130,6 +141,7 @@ const WidgetItem = ({
icon: TablerIcon;
};
onSelect: () => void;
hasMatchingIntegration: boolean;
}) => {
const t = useI18n();
@@ -138,7 +150,12 @@ const WidgetItem = ({
h={selectGridCardHeight}
withBorder
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")}
onMouseLeave={(e) => e.currentTarget.style.setProperty("--_hover-opacity", "0")}
>