0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-02-10 21:58:23 -05:00
logto/packages/ui/src/hooks/use-page-context.ts

65 lines
1.7 KiB
TypeScript
Raw Normal View History

import { useState, useMemo, createContext } from 'react';
import { SignInExperienceSettings } from '@/types';
type Context = {
toast: string;
loading: boolean;
termsAgreement: boolean;
showTermsModal: boolean;
experienceSettings: SignInExperienceSettings | undefined;
setToast: (message: string) => void;
setLoading: (loading: boolean) => void;
setTermsAgreement: (termsAgreement: boolean) => void;
setShowTermsModal: (showTermsModal: boolean) => void;
setExperienceSettings: (settings: SignInExperienceSettings) => void;
};
const noop = () => {
throw new Error('Context provider not found');
};
export const PageContext = createContext<Context>({
toast: '',
loading: false,
termsAgreement: false,
showTermsModal: false,
experienceSettings: undefined,
setToast: noop,
setLoading: noop,
setTermsAgreement: noop,
setShowTermsModal: noop,
setExperienceSettings: noop,
});
const usePageContext = () => {
const [loading, setLoading] = useState(false);
const [toast, setToast] = useState('');
const [experienceSettings, setExperienceSettings] = useState<SignInExperienceSettings>();
const [termsAgreement, setTermsAgreement] = useState(false);
const [showTermsModal, setShowTermsModal] = useState(false);
const context = useMemo(
() => ({
toast,
loading,
termsAgreement,
showTermsModal,
experienceSettings,
setLoading,
setToast,
setTermsAgreement,
setShowTermsModal,
setExperienceSettings,
}),
[experienceSettings, loading, showTermsModal, termsAgreement, toast]
);
return {
context,
Provider: PageContext.Provider,
};
};
export default usePageContext;