Files
cally/contexts/DumpContext.tsx
2024-10-11 02:00:11 +02:00

109 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { MaterialCommunityIcons } from "@expo/vector-icons";
import { createContext, useContext, useState } from "react";
export interface IBrainDump {
id: number;
title: string;
description: string;
}
interface IBrainDumpContext {
brainDumps: IBrainDump[];
updateBrainDumpItem: (id: number, changes: Partial<IBrainDump>) => void;
isAddingBrainDump: boolean;
setIsAddingBrainDump: (value: boolean) => void;
addBrainDump: (BrainDump: IBrainDump) => void;
deleteBrainDump: (id: number) => void;
}
const BrainDumpContext = createContext<IBrainDumpContext | undefined>(
undefined
);
export const BrainDumpProvider: React.FC<{ children: React.ReactNode }> = ({
children,
}) => {
const [isAddingBrainDump, setIsAddingBrainDump] = useState<boolean>(false);
const [brainDumps, setBrainDumps] = useState<IBrainDump[]>([
{
id: 0,
title: "Favorite Weekend Activities",
description:
"What's something fun we can do together this weekend? Maybe a new game, a picnic?",
},
{
id: 1,
title: "Whats For Dinner",
description:
"Whats one meal youd love to have for dinner this week?",
},
{
id: 2,
title: "The Best Thing About Today",
description:
"What was the highlight of your day? Lets each take a moment to share something!",
},
{
id: 3,
title: "A Dream Vacation Spot",
description:
"If we could go anywhere in the world right now, where would it be? Everyone pick one dream destination and tell us why.",
},
{
id: 4,
title: "Favorite Childhood Memory",
description:
"Whats a favorite memory from your childhood? Lets take a trip down memory lane and share some of the moments that made us smile.",
},
{
id: 5,
title: "A New Family Tradition",
description:
"Whats one new tradition we could start as a family? Maybe a weekly movie night, a monthly game day, or a yearly family trip. Share your ideas!",
},
]);
const addBrainDump = (BrainDump: IBrainDump) => {
setBrainDumps((prevBrainDumps) => [
...prevBrainDumps,
{
...BrainDump,
id: prevBrainDumps.length
? prevBrainDumps[prevBrainDumps.length - 1].id + 1
: 0,
},
]);
};
const updateBrainDumpItem = (id: number, changes: Partial<IBrainDump>) => {
setBrainDumps((prevBrainDumps) =>
prevBrainDumps.map((BrainDump) =>
BrainDump.id === id ? { ...BrainDump, ...changes } : BrainDump
)
);
};
const deleteBrainDump = (id: number) => {
setBrainDumps((prevBrainDumps) =>
prevBrainDumps.filter((BrainDump) => BrainDump.id !== id)
);
};
return (
<BrainDumpContext.Provider
value={{
brainDumps,
updateBrainDumpItem,
isAddingBrainDump,
setIsAddingBrainDump,
addBrainDump,
deleteBrainDump
}}
>
{children}
</BrainDumpContext.Provider>
);
};
export const useBrainDumpContext = () => useContext(BrainDumpContext)!;