fix(workspace): simplify hostname matching logic in WorkspaceProvider… (#12365)
…Effect Replaced `getHostnamesFromWorkspaceUrls` with `isWorkspaceHostnameMatchCurrentLocationHostname` for streamlined hostname comparison, reducing redundancy and improving logic clarity. Fix #12295
This commit is contained in:
@ -4,7 +4,7 @@ import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWork
|
|||||||
import { useReadWorkspaceUrlFromCurrentLocation } from '@/domain-manager/hooks/useReadWorkspaceUrlFromCurrentLocation';
|
import { useReadWorkspaceUrlFromCurrentLocation } from '@/domain-manager/hooks/useReadWorkspaceUrlFromCurrentLocation';
|
||||||
import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain';
|
import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain';
|
||||||
import { lastAuthenticatedWorkspaceDomainState } from '@/domain-manager/states/lastAuthenticatedWorkspaceDomainState';
|
import { lastAuthenticatedWorkspaceDomainState } from '@/domain-manager/states/lastAuthenticatedWorkspaceDomainState';
|
||||||
import { useEffect } from 'react';
|
import { useEffect, useCallback } from 'react';
|
||||||
|
|
||||||
import { useInitializeQueryParamState } from '@/app/hooks/useInitializeQueryParamState';
|
import { useInitializeQueryParamState } from '@/app/hooks/useInitializeQueryParamState';
|
||||||
import { useGetPublicWorkspaceDataByDomain } from '@/domain-manager/hooks/useGetPublicWorkspaceDataByDomain';
|
import { useGetPublicWorkspaceDataByDomain } from '@/domain-manager/hooks/useGetPublicWorkspaceDataByDomain';
|
||||||
@ -27,26 +27,23 @@ export const WorkspaceProviderEffect = () => {
|
|||||||
|
|
||||||
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
|
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
|
||||||
|
|
||||||
const getHostnamesFromWorkspaceUrls = (workspaceUrls: WorkspaceUrls) => {
|
|
||||||
return {
|
|
||||||
customUrlHostname: workspaceUrls.customUrl
|
|
||||||
? new URL(workspaceUrls.customUrl).hostname
|
|
||||||
: undefined,
|
|
||||||
subdomainUrlHostname: new URL(workspaceUrls.subdomainUrl).hostname,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const { initializeQueryParamState } = useInitializeQueryParamState();
|
const { initializeQueryParamState } = useInitializeQueryParamState();
|
||||||
|
|
||||||
|
const isWorkspaceHostnameMatchCurrentLocationHostname = useCallback(
|
||||||
|
(workspaceUrls: WorkspaceUrls) => {
|
||||||
|
const { hostname } = new URL(getWorkspaceUrl(workspaceUrls));
|
||||||
|
return hostname === currentLocationHostname;
|
||||||
|
},
|
||||||
|
[currentLocationHostname],
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const hostnames = getPublicWorkspaceData
|
|
||||||
? getHostnamesFromWorkspaceUrls(getPublicWorkspaceData?.workspaceUrls)
|
|
||||||
: null;
|
|
||||||
if (
|
if (
|
||||||
isMultiWorkspaceEnabled &&
|
isMultiWorkspaceEnabled &&
|
||||||
isDefined(getPublicWorkspaceData) &&
|
isDefined(getPublicWorkspaceData) &&
|
||||||
currentLocationHostname !== hostnames?.customUrlHostname &&
|
!isWorkspaceHostnameMatchCurrentLocationHostname(
|
||||||
currentLocationHostname !== hostnames?.subdomainUrlHostname
|
getPublicWorkspaceData.workspaceUrls,
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
redirectToWorkspaceDomain(
|
redirectToWorkspaceDomain(
|
||||||
getWorkspaceUrl(getPublicWorkspaceData.workspaceUrls),
|
getWorkspaceUrl(getPublicWorkspaceData.workspaceUrls),
|
||||||
@ -57,6 +54,7 @@ export const WorkspaceProviderEffect = () => {
|
|||||||
redirectToWorkspaceDomain,
|
redirectToWorkspaceDomain,
|
||||||
getPublicWorkspaceData,
|
getPublicWorkspaceData,
|
||||||
currentLocationHostname,
|
currentLocationHostname,
|
||||||
|
isWorkspaceHostnameMatchCurrentLocationHostname,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user