81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { useRecoilValue, useSetRecoilState, useRecoilState } from 'recoil';
|
|
|
|
import { useGetPublicWorkspaceDataBySubdomainQuery } from '~/generated/graphql';
|
|
|
|
import { workspacePublicDataState } from '@/auth/states/workspacePublicDataState';
|
|
import { authProvidersState } from '@/client-config/states/authProvidersState';
|
|
import { useEffect } from 'react';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
import { lastAuthenticateWorkspaceState } from '@/auth/states/lastAuthenticateWorkspaceState';
|
|
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
|
|
import { useUrlManager } from '@/url-manager/hooks/useUrlManager';
|
|
|
|
export const WorkspaceProviderEffect = () => {
|
|
const workspacePublicData = useRecoilValue(workspacePublicDataState);
|
|
|
|
const setAuthProviders = useSetRecoilState(authProvidersState);
|
|
const setWorkspacePublicDataState = useSetRecoilState(
|
|
workspacePublicDataState,
|
|
);
|
|
|
|
const [lastAuthenticateWorkspace, setLastAuthenticateWorkspace] =
|
|
useRecoilState(lastAuthenticateWorkspaceState);
|
|
|
|
const {
|
|
redirectToHome,
|
|
getWorkspaceSubdomain,
|
|
redirectToWorkspace,
|
|
isTwentyHomePage,
|
|
} = useUrlManager();
|
|
|
|
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
|
|
|
|
useGetPublicWorkspaceDataBySubdomainQuery({
|
|
skip:
|
|
(isMultiWorkspaceEnabled && isTwentyHomePage) ||
|
|
isDefined(workspacePublicData),
|
|
onCompleted: (data) => {
|
|
setAuthProviders(data.getPublicWorkspaceDataBySubdomain.authProviders);
|
|
setWorkspacePublicDataState(data.getPublicWorkspaceDataBySubdomain);
|
|
},
|
|
onError: (error) => {
|
|
// eslint-disable-next-line no-console
|
|
console.error(error);
|
|
setLastAuthenticateWorkspace(null);
|
|
redirectToHome();
|
|
},
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (
|
|
isMultiWorkspaceEnabled &&
|
|
isDefined(workspacePublicData?.subdomain) &&
|
|
workspacePublicData.subdomain !== getWorkspaceSubdomain
|
|
) {
|
|
redirectToWorkspace(workspacePublicData.subdomain);
|
|
}
|
|
}, [
|
|
getWorkspaceSubdomain,
|
|
isMultiWorkspaceEnabled,
|
|
redirectToWorkspace,
|
|
workspacePublicData,
|
|
]);
|
|
|
|
useEffect(() => {
|
|
if (
|
|
isMultiWorkspaceEnabled &&
|
|
isDefined(lastAuthenticateWorkspace?.subdomain) &&
|
|
isTwentyHomePage
|
|
) {
|
|
redirectToWorkspace(lastAuthenticateWorkspace.subdomain);
|
|
}
|
|
}, [
|
|
isMultiWorkspaceEnabled,
|
|
isTwentyHomePage,
|
|
lastAuthenticateWorkspace,
|
|
redirectToWorkspace,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|