fix: unable to select integration on board page (#450)

This commit is contained in:
Meier Lukas
2024-05-06 21:12:55 +02:00
committed by GitHub
parent dc0184af07
commit c88464498f
6 changed files with 78 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ import { useCallback } from "react";
import { createId } from "@homarr/db/client";
import type { WidgetKind } from "@homarr/definitions";
import type { BoardItemIntegration } from "@homarr/validation";
import type { EmptySection, Item } from "~/app/[locale]/boards/_types";
import { useUpdateBoard } from "~/app/[locale]/boards/(content)/_client";
@@ -30,6 +31,11 @@ interface UpdateItemOptions {
newOptions: Record<string, unknown>;
}
interface UpdateItemIntegrations {
itemId: string;
newIntegrations: BoardItemIntegration[];
}
interface CreateItem {
kind: WidgetKind;
}
@@ -105,6 +111,36 @@ export const useItemActions = () => {
[updateBoard],
);
const updateItemIntegrations = useCallback(
({ itemId, newIntegrations }: UpdateItemIntegrations) => {
updateBoard((previous) => {
if (!previous) return previous;
return {
...previous,
sections: previous.sections.map((section) => {
// Return same section if item is not in it
if (!section.items.some((item) => item.id === itemId))
return section;
return {
...section,
items: section.items.map((item) => {
// Return same item if item is not the one we're moving
if (item.id !== itemId) return item;
return {
...item,
...("integrations" in item
? { integrations: newIntegrations }
: {}),
};
}),
};
}),
};
});
},
[updateBoard],
);
const moveAndResizeItem = useCallback(
({ itemId, ...positionProps }: MoveAndResizeItem) => {
updateBoard((previous) => ({
@@ -200,6 +236,7 @@ export const useItemActions = () => {
moveItemToSection,
removeItem,
updateItemOptions,
updateItemIntegrations,
createItem,
};
};