43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { useCallback } from "react";
|
|
|
|
import { useUpdateBoard } from "@homarr/boards/updater";
|
|
import type { ContainerSectionOptions } from "@homarr/validation/shared";
|
|
|
|
import { addContainerCallback } from "./actions/add-container";
|
|
import type { RemoveContainerInput } from "./actions/remove-container";
|
|
import { removeContainerCallback } from "./actions/remove-container";
|
|
|
|
interface UpdateContainerOptions {
|
|
containerId: string;
|
|
newOptions: ContainerSectionOptions;
|
|
}
|
|
|
|
export const useContainerActions = () => {
|
|
const { updateBoard } = useUpdateBoard();
|
|
|
|
const addContainer = useCallback(() => {
|
|
updateBoard(addContainerCallback());
|
|
}, [updateBoard]);
|
|
|
|
const updateContainer = useCallback(
|
|
({ containerId, newOptions }: UpdateContainerOptions) => {
|
|
updateBoard((previous) => ({
|
|
...previous,
|
|
sections: previous.sections.map((item) =>
|
|
item.id !== containerId || item.kind !== "container" ? item : { ...item, options: newOptions },
|
|
),
|
|
}));
|
|
},
|
|
[updateBoard],
|
|
);
|
|
|
|
const removeContainer = useCallback(
|
|
(input: RemoveContainerInput) => {
|
|
updateBoard(removeContainerCallback(input));
|
|
},
|
|
[updateBoard],
|
|
);
|
|
|
|
return { addContainer, updateContainer, removeContainer };
|
|
};
|