infoalloggi-monorepo/apps/infoalloggi/src/providers/PotenzialiProvider.tsx

67 lines
1.7 KiB
TypeScript
Raw Normal View History

import { createContext, useContext, useState } from "react";
import type { UsersId } from "~/schemas/public/Users";
export type ElementoPotenziali = {
id: string;
name: string;
column: string;
descrizione: string;
createdAt: Date;
owner: { userId: UsersId; username: string } | null;
};
type PotenzialiContextType = {
data: ElementoPotenziali[];
editingId: string | null;
updateData: (data: ElementoPotenziali[]) => void;
setEditingId: (id: string | null) => void;
getEditingItem: () => ElementoPotenziali | null;
addItem: (item: ElementoPotenziali) => void;
removeItem: (id: string) => void;
};
const PotenzialiContext = createContext<PotenzialiContextType | null>(null);
type PotenzialiProviderProps = {
children: React.ReactNode;
data: ElementoPotenziali[];
};
export const PotenzialiProvider = ({
children,
data: initial,
}: PotenzialiProviderProps) => {
const [data, setData] = useState<ElementoPotenziali[]>(initial);
const [editingId, setEditingId] = useState<string | null>(null);
const getEditingItem = () => {
return data.find((item) => item.id === editingId) || null;
};
const addItem = (item: ElementoPotenziali) => {
setData((prev) => [...prev, item]);
};
const removeItem = (id: string) => {
setData((prev) => prev.filter((item) => item.id !== id));
};
return (
<PotenzialiContext.Provider
value={{
data,
editingId,
updateData: setData,
setEditingId,
getEditingItem,
addItem,
removeItem,
}}
>
{children}
</PotenzialiContext.Provider>
);
};
export const usePotenziali = () => {
const context = useContext(PotenzialiContext);
if (!context) {
throw new Error("usePotenziali must be used within a PotenzialiProvider");
}
return context;
};