150 lines
5.4 KiB
TypeScript
150 lines
5.4 KiB
TypeScript
import { apiConfigState } from '@/client-config/states/apiConfigState';
|
|
import { authProvidersState } from '@/client-config/states/authProvidersState';
|
|
import { billingState } from '@/client-config/states/billingState';
|
|
import { canManageFeatureFlagsState } from '@/client-config/states/canManageFeatureFlagsState';
|
|
import { captchaState } from '@/client-config/states/captchaState';
|
|
import { chromeExtensionIdState } from '@/client-config/states/chromeExtensionIdState';
|
|
import { clientConfigApiStatusState } from '@/client-config/states/clientConfigApiStatusState';
|
|
import { isAnalyticsEnabledState } from '@/client-config/states/isAnalyticsEnabledState';
|
|
import { isDebugModeState } from '@/client-config/states/isDebugModeState';
|
|
import { isDeveloperDefaultSignInPrefilledState } from '@/client-config/states/isDeveloperDefaultSignInPrefilledState';
|
|
import { isEmailVerificationRequiredState } from '@/client-config/states/isEmailVerificationRequiredState';
|
|
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
|
|
import { labPublicFeatureFlagsState } from '@/client-config/states/labPublicFeatureFlagsState';
|
|
import { sentryConfigState } from '@/client-config/states/sentryConfigState';
|
|
import { supportChatState } from '@/client-config/states/supportChatState';
|
|
import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState';
|
|
import { useEffect } from 'react';
|
|
import { useRecoilState, useSetRecoilState } from 'recoil';
|
|
import { useGetClientConfigQuery } from '~/generated/graphql';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
|
|
export const ClientConfigProviderEffect = () => {
|
|
const setIsDebugMode = useSetRecoilState(isDebugModeState);
|
|
const setIsAnalyticsEnabled = useSetRecoilState(isAnalyticsEnabledState);
|
|
const setDomainConfiguration = useSetRecoilState(domainConfigurationState);
|
|
const setAuthProviders = useSetRecoilState(authProvidersState);
|
|
|
|
const setIsDeveloperDefaultSignInPrefilled = useSetRecoilState(
|
|
isDeveloperDefaultSignInPrefilledState,
|
|
);
|
|
const setIsMultiWorkspaceEnabled = useSetRecoilState(
|
|
isMultiWorkspaceEnabledState,
|
|
);
|
|
const setIsEmailVerificationRequired = useSetRecoilState(
|
|
isEmailVerificationRequiredState,
|
|
);
|
|
|
|
const setBilling = useSetRecoilState(billingState);
|
|
const setSupportChat = useSetRecoilState(supportChatState);
|
|
|
|
const setSentryConfig = useSetRecoilState(sentryConfigState);
|
|
const [clientConfigApiStatus, setClientConfigApiStatus] = useRecoilState(
|
|
clientConfigApiStatusState,
|
|
);
|
|
|
|
const setCaptcha = useSetRecoilState(captchaState);
|
|
|
|
const setChromeExtensionId = useSetRecoilState(chromeExtensionIdState);
|
|
|
|
const setApiConfig = useSetRecoilState(apiConfigState);
|
|
|
|
const setCanManageFeatureFlags = useSetRecoilState(
|
|
canManageFeatureFlagsState,
|
|
);
|
|
|
|
const setLabPublicFeatureFlags = useSetRecoilState(
|
|
labPublicFeatureFlagsState,
|
|
);
|
|
|
|
const { data, loading, error } = useGetClientConfigQuery({
|
|
skip: clientConfigApiStatus.isLoaded,
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (loading) return;
|
|
setClientConfigApiStatus((currentStatus) => ({
|
|
...currentStatus,
|
|
isLoaded: true,
|
|
}));
|
|
|
|
if (error instanceof Error) {
|
|
setClientConfigApiStatus((currentStatus) => ({
|
|
...currentStatus,
|
|
isErrored: true,
|
|
error,
|
|
}));
|
|
return;
|
|
}
|
|
|
|
if (!isDefined(data?.clientConfig)) {
|
|
return;
|
|
}
|
|
|
|
setClientConfigApiStatus((currentStatus) => ({
|
|
...currentStatus,
|
|
isErrored: false,
|
|
error: undefined,
|
|
}));
|
|
|
|
setAuthProviders({
|
|
google: data?.clientConfig.authProviders.google,
|
|
microsoft: data?.clientConfig.authProviders.microsoft,
|
|
password: data?.clientConfig.authProviders.password,
|
|
magicLink: false,
|
|
sso: data?.clientConfig.authProviders.sso,
|
|
});
|
|
setIsDebugMode(data?.clientConfig.debugMode);
|
|
setIsAnalyticsEnabled(data?.clientConfig.analyticsEnabled);
|
|
setIsDeveloperDefaultSignInPrefilled(data?.clientConfig.signInPrefilled);
|
|
setIsMultiWorkspaceEnabled(data?.clientConfig.isMultiWorkspaceEnabled);
|
|
setIsEmailVerificationRequired(
|
|
data?.clientConfig.isEmailVerificationRequired,
|
|
);
|
|
setBilling(data?.clientConfig.billing);
|
|
setSupportChat(data?.clientConfig.support);
|
|
|
|
setSentryConfig({
|
|
dsn: data?.clientConfig?.sentry?.dsn,
|
|
release: data?.clientConfig?.sentry?.release,
|
|
environment: data?.clientConfig?.sentry?.environment,
|
|
});
|
|
|
|
setCaptcha({
|
|
provider: data?.clientConfig?.captcha?.provider,
|
|
siteKey: data?.clientConfig?.captcha?.siteKey,
|
|
});
|
|
|
|
setChromeExtensionId(data?.clientConfig?.chromeExtensionId);
|
|
setApiConfig(data?.clientConfig?.api);
|
|
setDomainConfiguration({
|
|
defaultSubdomain: data?.clientConfig?.defaultSubdomain,
|
|
frontDomain: data?.clientConfig?.frontDomain,
|
|
});
|
|
setCanManageFeatureFlags(data?.clientConfig?.canManageFeatureFlags);
|
|
setLabPublicFeatureFlags(data?.clientConfig?.publicFeatureFlags);
|
|
}, [
|
|
data,
|
|
setIsDebugMode,
|
|
setIsDeveloperDefaultSignInPrefilled,
|
|
setIsMultiWorkspaceEnabled,
|
|
setIsEmailVerificationRequired,
|
|
setSupportChat,
|
|
setBilling,
|
|
setSentryConfig,
|
|
loading,
|
|
setClientConfigApiStatus,
|
|
setCaptcha,
|
|
setChromeExtensionId,
|
|
setApiConfig,
|
|
setIsAnalyticsEnabled,
|
|
error,
|
|
setDomainConfiguration,
|
|
setAuthProviders,
|
|
setCanManageFeatureFlags,
|
|
setLabPublicFeatureFlags,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|