Skip to content

Commit

Permalink
Create context for task drawer
Browse files Browse the repository at this point in the history
  • Loading branch information
pacholoamit committed Jul 3, 2022
1 parent affa7db commit 83de90b
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Navbar, Title } from "@mantine/core";
import React from "react";
import { FolderPlus, Home, Note } from "tabler-icons-react";
import { FolderPlus, Note } from "tabler-icons-react";
import useCreateProjectModal from "../../../../hooks/useCreateProjectModal";
import CreateTaskDrawer from "../../../tasks/create-task-drawer";
import useTaskContext from "../../../../hooks/useTaskContext";

import NavbarButton from "../navbar.button";

const ActionsSection: React.FC = () => {
const [opened, setOpened] = React.useState(false);
const { setOpened } = useTaskContext();
const { openCreateProjectModal } = useCreateProjectModal();

const onClick = () => setOpened(true);
Expand All @@ -26,8 +26,6 @@ const ActionsSection: React.FC = () => {
color={"grape"}
label={"Create a new project"}
/>

<CreateTaskDrawer opened={opened} setOpened={setOpened} />
</Navbar.Section>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import React from "react";

import { useForm, zodResolver } from "@mantine/form";
import { z } from "zod";
import { Button, Drawer, Stack, TextInput } from "@mantine/core";
import { Button, Drawer, Stack, TextInput, Text } from "@mantine/core";
import { CreateTaskRequest } from "../../api/dto";
import RichTextEditor from "../RichTextEditor";
import useTaskContext from "../../hooks/useTaskContext";

const initialValues: CreateTaskRequest = {
title: "",
Expand All @@ -21,16 +22,9 @@ const schema = z.object({
label: z.string(),
});

interface CreateTaskDrawerProps {
opened: boolean;
setOpened: React.Dispatch<React.SetStateAction<boolean>>;
}

const CreateTaskDrawer: React.FC<CreateTaskDrawerProps> = ({
opened,
setOpened,
}) => {
const TaskDrawer: React.FC = () => {
const { mutate, isLoading, isSuccess, isError, error } = useCreateTask();
const { opened, setOpened } = useTaskContext();

const form = useForm({
schema: zodResolver(schema),
Expand All @@ -49,19 +43,19 @@ const CreateTaskDrawer: React.FC<CreateTaskDrawerProps> = ({
<Drawer
opened={opened}
position="right"
size="30%"
size="40%"
onClose={() => setOpened(false)}
padding="xl"
>
<form onSubmit={form.onSubmit((v) => mutate(v))}>
<Stack>
<TextInput
label="Name"
label="Task Name"
placeholder="Rule the world!"
disabled={isLoading}
{...form.getInputProps("title")}
/>

<Text>Description</Text>
<RichTextEditor {...form.getInputProps("description")} />
<Button mt="md" type="submit" loading={isLoading}>
Create a new task!
Expand All @@ -72,4 +66,4 @@ const CreateTaskDrawer: React.FC<CreateTaskDrawerProps> = ({
);
};

export default CreateTaskDrawer;
export default TaskDrawer;
8 changes: 8 additions & 0 deletions web/hooks/useTaskContext.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import TaskContext, {
TaskContextInterface,
} from "../providers/task.context.provider";
import { useContext } from "react";

const useTaskContext = () => useContext(TaskContext) as TaskContextInterface;

export default useTaskContext;
2 changes: 2 additions & 0 deletions web/pages/_app.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import type { AppProps } from "next/app";
import Layout from "../components/layout";
import Providers from "../providers";
import TaskDrawer from "../components/tasks/task-drawer";

function MyApp({ Component, pageProps }: AppProps) {
return (
<Providers>
<Layout>
<Component {...pageProps} />
<TaskDrawer />
</Layout>
</Providers>
);
Expand Down
5 changes: 4 additions & 1 deletion web/providers/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from "react";
import ModalsProvider from "./modal.provider";
import QueryProvider from "./query.provider";
import ThemeProvider from "./theme.provider";
import { TaskProvider } from "./task.context.provider";

type ProvidersProps = {
children: React.ReactNode;
Expand All @@ -11,7 +12,9 @@ const Providers: React.FC<ProvidersProps> = ({ children }) => {
return (
<QueryProvider>
<ThemeProvider>
<ModalsProvider>{children}</ModalsProvider>
<ModalsProvider>
<TaskProvider>{children}</TaskProvider>
</ModalsProvider>
</ThemeProvider>
</QueryProvider>
);
Expand Down
31 changes: 31 additions & 0 deletions web/providers/task.context.provider.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { useDisclosure } from "@mantine/hooks";
import { createContext, Dispatch, SetStateAction, useState } from "react";
import { Task } from "../api/dto";

export interface TaskContextInterface {
currentTask: Partial<Task> | null;
setCurrentTask: Dispatch<SetStateAction<Partial<Task> | null>>;
opened: boolean;
setOpened: Dispatch<SetStateAction<boolean>>;
}
// Context of current viewed task for Dialog
const TaskContext = createContext<TaskContextInterface | null>(null);

interface TaskProviderProps {
children: React.ReactNode;
}

export const TaskProvider: React.FC<TaskProviderProps> = ({ children }) => {
const [opened, setOpened] = useState(false);
const [currentTask, setCurrentTask] = useState<Partial<Task> | null>(null);

const value = {
currentTask,
setCurrentTask,
opened,
setOpened,
};
return <TaskContext.Provider value={value}>{children}</TaskContext.Provider>;
};

export default TaskContext;

0 comments on commit 83de90b

Please sign in to comment.