d2ddd6f473
Moves system-level operations (auth, billing, admin) to use the /metadata endpoint instead of /graphql. This cleans up the endpoint separation so /graphql is purely for core objects (Company, People, etc.) and /metadata handles all system operations. Part of prep work for webhook/API key core migration.
61 lines
2.4 KiB
TypeScript
61 lines
2.4 KiB
TypeScript
import { workspacePublicDataState } from '@/auth/states/workspacePublicDataState';
|
|
import { clientConfigApiStatusState } from '@/client-config/states/clientConfigApiStatusState';
|
|
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
|
|
import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useIsCurrentLocationOnDefaultDomain';
|
|
import { useOrigin } from '@/domain-manager/hooks/useOrigin';
|
|
import { useRedirectToDefaultDomain } from '@/domain-manager/hooks/useRedirectToDefaultDomain';
|
|
import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState';
|
|
import { useRecoilValue, useSetRecoilState } from 'recoil';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import { useGetPublicWorkspaceDataByDomainQuery } from '~/generated-metadata/graphql';
|
|
|
|
export const useGetPublicWorkspaceDataByDomain = () => {
|
|
const { isDefaultDomain } = useIsCurrentLocationOnDefaultDomain();
|
|
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
|
|
const { origin } = useOrigin();
|
|
const setWorkspaceAuthProviders = useSetRecoilState(
|
|
workspaceAuthProvidersState,
|
|
);
|
|
const workspacePublicData = useRecoilValue(workspacePublicDataState);
|
|
const { redirectToDefaultDomain } = useRedirectToDefaultDomain();
|
|
const setWorkspacePublicDataState = useSetRecoilState(
|
|
workspacePublicDataState,
|
|
);
|
|
const clientConfigApiStatus = useRecoilValue(clientConfigApiStatusState);
|
|
|
|
const { loading, data, error } = useGetPublicWorkspaceDataByDomainQuery({
|
|
variables: {
|
|
origin,
|
|
},
|
|
skip:
|
|
!clientConfigApiStatus.isSaved ||
|
|
(isMultiWorkspaceEnabled && isDefaultDomain) ||
|
|
isDefined(workspacePublicData),
|
|
onCompleted: (data) => {
|
|
setWorkspaceAuthProviders(
|
|
data.getPublicWorkspaceDataByDomain.authProviders,
|
|
);
|
|
setWorkspacePublicDataState(data.getPublicWorkspaceDataByDomain);
|
|
},
|
|
onError: (error) => {
|
|
// Only redirect to default domain if it's a workspace not found error
|
|
const isWorkspaceNotFoundError = error.graphQLErrors?.some(
|
|
(graphQLError) => graphQLError.extensions?.code === 'NOT_FOUND',
|
|
);
|
|
|
|
if (isWorkspaceNotFoundError) {
|
|
redirectToDefaultDomain();
|
|
} else {
|
|
// eslint-disable-next-line no-console
|
|
console.error(error);
|
|
}
|
|
},
|
|
});
|
|
|
|
return {
|
|
loading,
|
|
data: data?.getPublicWorkspaceDataByDomain,
|
|
error,
|
|
};
|
|
};
|