67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
|
|
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;
|
||
|
|
};
|