mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
59 lines
1.2 KiB
TypeScript
59 lines
1.2 KiB
TypeScript
import {createContext, useCallback} from 'react';
|
|
|
|
import type {OnboardingProjectStatus, OnboardingSelectedSDK} from 'sentry/types';
|
|
import {useSessionStorage} from 'sentry/utils/useSessionStorage';
|
|
|
|
type Project = {
|
|
slug: string;
|
|
status: OnboardingProjectStatus;
|
|
firstIssueId?: string;
|
|
};
|
|
|
|
type Data = {
|
|
projects: Record<string, Project>;
|
|
selectedSDK?: OnboardingSelectedSDK;
|
|
};
|
|
|
|
export type OnboardingContextProps = {
|
|
data: Data;
|
|
setData: (data: Data) => void;
|
|
};
|
|
|
|
export const OnboardingContext = createContext<OnboardingContextProps>({
|
|
data: {
|
|
projects: {},
|
|
selectedSDK: undefined,
|
|
},
|
|
setData: () => {},
|
|
});
|
|
|
|
type ProviderProps = {
|
|
children: React.ReactNode;
|
|
value?: Data;
|
|
};
|
|
|
|
export function OnboardingContextProvider({children, value}: ProviderProps) {
|
|
const [sessionStorage, setSessionStorage] = useSessionStorage<Data>('onboarding', {
|
|
projects: value?.projects ?? {},
|
|
selectedSDK: value?.selectedSDK,
|
|
});
|
|
|
|
const setData = useCallback(
|
|
(data: Data) => {
|
|
setSessionStorage(data);
|
|
},
|
|
[setSessionStorage]
|
|
);
|
|
|
|
return (
|
|
<OnboardingContext.Provider
|
|
value={{
|
|
data: sessionStorage,
|
|
setData,
|
|
}}
|
|
>
|
|
{children}
|
|
</OnboardingContext.Provider>
|
|
);
|
|
}
|