adding project page
This commit is contained in:
5
app2/src/context/appContext/AppContext.tsx
Normal file
5
app2/src/context/appContext/AppContext.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import { Context, createContext } from 'react';
|
||||
import { AppContextProps } from './AppContextProps.interface';
|
||||
|
||||
export const AppContext: Context<AppContextProps> =
|
||||
createContext<AppContextProps>({} as AppContextProps);
|
||||
7
app2/src/context/appContext/AppContextProps.interface.ts
Normal file
7
app2/src/context/appContext/AppContextProps.interface.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { Action } from './reducer';
|
||||
import { AppContextState } from './AppContextState.interface';
|
||||
|
||||
export interface AppContextProps {
|
||||
state: AppContextState;
|
||||
dispatch: React.Dispatch<Action>;
|
||||
}
|
||||
30
app2/src/context/appContext/AppContextProvider.tsx
Normal file
30
app2/src/context/appContext/AppContextProvider.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
import { useMemo, useReducer } from 'react';
|
||||
import { AppContext } from './AppContext';
|
||||
import { AppContextProviderProps } from './AppContextProviderProps.interface';
|
||||
import { AppContextProps } from './AppContextProps.interface';
|
||||
import { AppContextState } from './AppContextState.interface';
|
||||
import { reducer } from './reducer';
|
||||
|
||||
const AppContextProvider = (
|
||||
props: AppContextProviderProps
|
||||
) => {
|
||||
const intialState: AppContextState = {
|
||||
featureFlags: [],
|
||||
userProfile: {}
|
||||
};
|
||||
const [state, dispatch] = useReducer(reducer, intialState);
|
||||
const contextValue: AppContextProps = useMemo(() => {
|
||||
return {
|
||||
state,
|
||||
dispatch
|
||||
};
|
||||
}, [state, dispatch]);
|
||||
|
||||
return (
|
||||
<AppContext.Provider value={contextValue}>
|
||||
{props.children}
|
||||
</AppContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export default AppContextProvider;
|
||||
@@ -0,0 +1,3 @@
|
||||
export interface AppContextProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
6
app2/src/context/appContext/AppContextState.interface.ts
Normal file
6
app2/src/context/appContext/AppContextState.interface.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { User } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export interface AppContextState {
|
||||
featureFlags: { key: string; enabled: boolean }[];
|
||||
userProfile: User;
|
||||
}
|
||||
22
app2/src/context/appContext/reducer.ts
Normal file
22
app2/src/context/appContext/reducer.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { User } from '@microsoft/microsoft-graph-types';
|
||||
import { AppContextState } from './AppContextState.interface';
|
||||
|
||||
export type Action =
|
||||
| { type: 'SET_USER_PROFILE'; payload: User };
|
||||
|
||||
export const reducer = (
|
||||
state: AppContextState,
|
||||
action: Action
|
||||
): AppContextState => {
|
||||
switch (action.type) {
|
||||
case 'SET_USER_PROFILE': {
|
||||
return {
|
||||
...state,
|
||||
userProfile: action.payload
|
||||
};
|
||||
}
|
||||
default: {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user