Fix Infinite loop on invite route (#2866)
This commit is contained in:
@ -47,7 +47,9 @@ export const PageChangeEffect = () => {
|
|||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}, [location, previousLocation]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
const isMachinOngoingUserCreationRoute =
|
const isMachinOngoingUserCreationRoute =
|
||||||
isMatchingLocation(AppPath.SignUp) ||
|
isMatchingLocation(AppPath.SignUp) ||
|
||||||
isMatchingLocation(AppPath.SignIn) ||
|
isMatchingLocation(AppPath.SignIn) ||
|
||||||
@ -108,7 +110,16 @@ export const PageChangeEffect = () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}, [
|
||||||
|
enqueueSnackBar,
|
||||||
|
isMatchingLocation,
|
||||||
|
location.pathname,
|
||||||
|
navigate,
|
||||||
|
onboardingStatus,
|
||||||
|
workspaceFromInviteHashQuery,
|
||||||
|
]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case isMatchingLocation(AppPath.RecordTablePage): {
|
case isMatchingLocation(AppPath.RecordTablePage): {
|
||||||
setHotkeyScope(TableHotkeyScope.Table, {
|
setHotkeyScope(TableHotkeyScope.Table, {
|
||||||
@ -177,7 +188,9 @@ export const PageChangeEffect = () => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}, [isMatchingLocation, setHotkeyScope]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
setToIntitialCommandMenu();
|
setToIntitialCommandMenu();
|
||||||
|
|
||||||
addToCommandMenu([
|
addToCommandMenu([
|
||||||
@ -190,7 +203,9 @@ export const PageChangeEffect = () => {
|
|||||||
onCommandClick: () => openCreateActivity({ type: 'Task' }),
|
onCommandClick: () => openCreateActivity({ type: 'Task' }),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
}, [addToCommandMenu, setToIntitialCommandMenu, openCreateActivity]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
eventTracker('pageview', {
|
eventTracker('pageview', {
|
||||||
location: {
|
location: {
|
||||||
@ -198,20 +213,7 @@ export const PageChangeEffect = () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
}, [
|
}, [eventTracker, location.pathname]);
|
||||||
onboardingStatus,
|
|
||||||
navigate,
|
|
||||||
isMatchingLocation,
|
|
||||||
setHotkeyScope,
|
|
||||||
location,
|
|
||||||
previousLocation,
|
|
||||||
eventTracker,
|
|
||||||
workspaceFromInviteHashQuery,
|
|
||||||
enqueueSnackBar,
|
|
||||||
addToCommandMenu,
|
|
||||||
openCreateActivity,
|
|
||||||
setToIntitialCommandMenu,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from 'react';
|
||||||
import { matchPath, useLocation } from 'react-router-dom';
|
import { matchPath, useLocation } from 'react-router-dom';
|
||||||
import { parse } from 'url';
|
import { parse } from 'url';
|
||||||
|
|
||||||
@ -6,11 +7,14 @@ import { AppBasePath } from '@/types/AppBasePath';
|
|||||||
export const useIsMatchingLocation = () => {
|
export const useIsMatchingLocation = () => {
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
|
|
||||||
return (path: string, basePath?: AppBasePath) => {
|
return useCallback(
|
||||||
const constructedPath = basePath
|
(path: string, basePath?: AppBasePath) => {
|
||||||
? parse(`${basePath}/${path}`).pathname ?? ''
|
const constructedPath = basePath
|
||||||
: path;
|
? parse(`${basePath}/${path}`).pathname ?? ''
|
||||||
|
: path;
|
||||||
|
|
||||||
return !!matchPath(constructedPath, location.pathname);
|
return !!matchPath(constructedPath, location.pathname);
|
||||||
};
|
},
|
||||||
|
[location.pathname],
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from 'react';
|
||||||
import { isNonEmptyString } from '@sniptt/guards';
|
import { isNonEmptyString } from '@sniptt/guards';
|
||||||
import { useRecoilState, useRecoilValue } from 'recoil';
|
import { useRecoilState, useRecoilValue } from 'recoil';
|
||||||
|
|
||||||
@ -32,47 +33,55 @@ export const useOpenCreateActivityDrawer = () => {
|
|||||||
);
|
);
|
||||||
const [, setViewableActivityId] = useRecoilState(viewableActivityIdState);
|
const [, setViewableActivityId] = useRecoilState(viewableActivityIdState);
|
||||||
|
|
||||||
return async ({
|
return useCallback(
|
||||||
type,
|
async ({
|
||||||
targetableEntities,
|
type,
|
||||||
assigneeId,
|
targetableEntities,
|
||||||
}: {
|
assigneeId,
|
||||||
type: ActivityType;
|
}: {
|
||||||
targetableEntities?: ActivityTargetableEntity[];
|
type: ActivityType;
|
||||||
assigneeId?: string;
|
targetableEntities?: ActivityTargetableEntity[];
|
||||||
}) => {
|
assigneeId?: string;
|
||||||
const targetableEntitiesWithRelations = targetableEntities
|
}) => {
|
||||||
? getTargetableEntitiesWithParents(targetableEntities)
|
const targetableEntitiesWithRelations = targetableEntities
|
||||||
: [];
|
? getTargetableEntitiesWithParents(targetableEntities)
|
||||||
|
: [];
|
||||||
|
|
||||||
const createdActivity = await createOneActivity?.({
|
const createdActivity = await createOneActivity?.({
|
||||||
authorId: currentWorkspaceMember?.id,
|
authorId: currentWorkspaceMember?.id,
|
||||||
assigneeId:
|
assigneeId:
|
||||||
assigneeId ?? isNonEmptyString(currentWorkspaceMember?.id)
|
assigneeId ?? isNonEmptyString(currentWorkspaceMember?.id)
|
||||||
? currentWorkspaceMember?.id
|
? currentWorkspaceMember?.id
|
||||||
: undefined,
|
: undefined,
|
||||||
type: type,
|
type: type,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!createdActivity) {
|
if (!createdActivity) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
targetableEntitiesWithRelations.map(async (targetableEntity) => {
|
targetableEntitiesWithRelations.map(async (targetableEntity) => {
|
||||||
await createOneActivityTarget?.({
|
await createOneActivityTarget?.({
|
||||||
companyId:
|
companyId:
|
||||||
targetableEntity.type === 'Company' ? targetableEntity.id : null,
|
targetableEntity.type === 'Company' ? targetableEntity.id : null,
|
||||||
personId:
|
personId:
|
||||||
targetableEntity.type === 'Person' ? targetableEntity.id : null,
|
targetableEntity.type === 'Person' ? targetableEntity.id : null,
|
||||||
activityId: createdActivity.id,
|
activityId: createdActivity.id,
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
setHotkeyScope(RightDrawerHotkeyScope.RightDrawer, { goto: false });
|
setHotkeyScope(RightDrawerHotkeyScope.RightDrawer, { goto: false });
|
||||||
setViewableActivityId(createdActivity.id);
|
setViewableActivityId(createdActivity.id);
|
||||||
setActivityTargetableEntityArray(targetableEntities ?? []);
|
setActivityTargetableEntityArray(targetableEntities ?? []);
|
||||||
openRightDrawer(RightDrawerPages.CreateActivity);
|
openRightDrawer(RightDrawerPages.CreateActivity);
|
||||||
};
|
},
|
||||||
|
[
|
||||||
|
openRightDrawer,
|
||||||
|
setActivityTargetableEntityArray,
|
||||||
|
setHotkeyScope,
|
||||||
|
setViewableActivityId,
|
||||||
|
],
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from 'react';
|
||||||
import { useRecoilCallback, useSetRecoilState } from 'recoil';
|
import { useRecoilCallback, useSetRecoilState } from 'recoil';
|
||||||
|
|
||||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||||
@ -38,9 +39,12 @@ export const useCommandMenu = () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const addToCommandMenu = (addCommand: Command[]) => {
|
const addToCommandMenu = useCallback(
|
||||||
setCommands((prev) => [...prev, ...addCommand]);
|
(addCommand: Command[]) => {
|
||||||
};
|
setCommands((prev) => [...prev, ...addCommand]);
|
||||||
|
},
|
||||||
|
[setCommands],
|
||||||
|
);
|
||||||
|
|
||||||
const setToIntitialCommandMenu = () => {
|
const setToIntitialCommandMenu = () => {
|
||||||
setCommands(commandMenuCommands);
|
setCommands(commandMenuCommands);
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from 'react';
|
||||||
import { useRecoilCallback } from 'recoil';
|
import { useRecoilCallback } from 'recoil';
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
@ -36,18 +37,19 @@ export const useSnackBar = () => {
|
|||||||
queue: [...prev.queue, newValue] as SnackBarOptions[],
|
queue: [...prev.queue, newValue] as SnackBarOptions[],
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
[scopeId],
|
||||||
);
|
);
|
||||||
|
|
||||||
const enqueueSnackBar = (
|
const enqueueSnackBar = useCallback(
|
||||||
message: string,
|
(message: string, options?: Omit<SnackBarOptions, 'message' | 'id'>) => {
|
||||||
options?: Omit<SnackBarOptions, 'message' | 'id'>,
|
setSnackBarQueue({
|
||||||
) => {
|
id: uuidv4(),
|
||||||
setSnackBarQueue({
|
message,
|
||||||
id: uuidv4(),
|
...options,
|
||||||
message,
|
});
|
||||||
...options,
|
},
|
||||||
});
|
[setSnackBarQueue],
|
||||||
};
|
);
|
||||||
|
|
||||||
return { handleSnackBarClose, enqueueSnackBar };
|
return { handleSnackBarClose, enqueueSnackBar };
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user