fix(website): nav / member provider

This commit is contained in:
iCrawl
2023-03-24 06:24:47 +01:00
parent 52f8e0670c
commit 5fcd0e48a8
3 changed files with 28 additions and 13 deletions

View File

@@ -2,12 +2,15 @@
import type { PropsWithChildren } from 'react';
import { CmdKProvider } from '~/contexts/cmdK';
import { MemberProvider } from '~/contexts/member';
import { NavProvider } from '~/contexts/nav';
export function Providers({ children }: PropsWithChildren) {
return (
<NavProvider>
<CmdKProvider>{children}</CmdKProvider>
<MemberProvider>
<CmdKProvider>{children}</CmdKProvider>
</MemberProvider>
</NavProvider>
);
}

View File

@@ -1,17 +1,21 @@
'use client';
import type { ApiItemJSON } from '@discordjs/api-extractor-utils';
import { createContext, useContext, type ReactNode } from 'react';
import type { ApiItem } from '@microsoft/api-extractor-model';
import { createContext, useContext, useMemo, useState } from 'react';
import type { PropsWithChildren, Dispatch, SetStateAction } from 'react';
export const MemberContext = createContext<ApiItemJSON | null | undefined>(undefined);
export const MemberContext = createContext<{
member: ApiItem | ApiItemJSON | null | undefined;
setMember: Dispatch<SetStateAction<ApiItem | ApiItemJSON | null | undefined>>;
}>({ member: undefined, setMember: (_) => {} });
export const MemberProvider = ({
member,
children,
}: {
children?: ReactNode | undefined;
member: ApiItemJSON | null | undefined;
}) => <MemberContext.Provider value={member}>{children}</MemberContext.Provider>;
export const MemberProvider = ({ children }: PropsWithChildren) => {
const [member, setMember] = useState<ApiItem | ApiItemJSON | null | undefined>(undefined);
const value = useMemo(() => ({ member, setMember }), [member]);
return <MemberContext.Provider value={value}>{children}</MemberContext.Provider>;
};
export function useMember() {
return useContext(MemberContext);

View File

@@ -1,6 +1,14 @@
'use client';
import { type PropsWithChildren, type Dispatch, type SetStateAction, createContext, useContext, useState } from 'react';
import {
type PropsWithChildren,
type Dispatch,
type SetStateAction,
createContext,
useContext,
useState,
useMemo,
} from 'react';
export const NavContext = createContext<{ opened: boolean; setOpened: Dispatch<SetStateAction<boolean>> }>({
opened: false,
@@ -9,9 +17,9 @@ export const NavContext = createContext<{ opened: boolean; setOpened: Dispatch<S
export const NavProvider = ({ children }: PropsWithChildren) => {
const [opened, setOpened] = useState(false);
const value = useMemo(() => ({ opened, setOpened }), [opened]);
// eslint-disable-next-line react/jsx-no-constructed-context-values
return <NavContext.Provider value={{ opened, setOpened }}>{children}</NavContext.Provider>;
return <NavContext.Provider value={value}>{children}</NavContext.Provider>;
};
export function useNav() {