fix: login redirection to active objects (#15366)

Fixes - https://github.com/twentyhq/twenty/issues/15364

- Removed `activeNonSystemObjectMetadataItems` from the hook as it was
not necessary. Hook use `alphaSortedActiveNonSystemObjectMetadataItems`
now.
- Correctly check for read permissions.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Ranjeet Baraik
2025-10-30 22:01:26 +05:30
committed by GitHub
parent 51fdaf2731
commit 0cbd1e8ec5
12 changed files with 87 additions and 55 deletions
@@ -2,8 +2,8 @@ import React from 'react';
import { useRecoilValue } from 'recoil';
import { PreComputedChipGeneratorsProvider } from '@/object-metadata/components/PreComputedChipGeneratorsProvider';
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { shouldAppBeLoadingState } from '@/object-metadata/states/shouldAppBeLoadingState';
import { UserOrMetadataLoader } from '~/loading/components/UserOrMetadataLoader';
export const ObjectMetadataItemsProvider = ({
@@ -11,12 +11,10 @@ export const ObjectMetadataItemsProvider = ({
}: React.PropsWithChildren) => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const isAppWaitingForFreshObjectMetadata = useRecoilValue(
isAppWaitingForFreshObjectMetadataState,
);
const shouldAppBeLoading = useRecoilValue(shouldAppBeLoadingState);
const shouldDisplayChildren =
!isAppWaitingForFreshObjectMetadata && objectMetadataItems.length > 0;
!shouldAppBeLoading && objectMetadataItems.length > 0;
return (
<>
@@ -1,5 +1,6 @@
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { isAppEffectRedirectEnabledState } from '@/app/states/isAppEffectRedirectEnabledState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { shouldAppBeLoadingState } from '@/object-metadata/states/shouldAppBeLoadingState';
import { useRecoilCallback } from 'recoil';
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
@@ -17,12 +18,15 @@ export const useLoadMockedObjectMetadataItems = () => {
set(objectMetadataItemsState, generatedMockObjectMetadataItems);
}
if (snapshot.getLoadable(shouldAppBeLoadingState).getValue() === true) {
set(shouldAppBeLoadingState, false);
}
if (
snapshot
.getLoadable(isAppWaitingForFreshObjectMetadataState)
.getValue() === true
snapshot.getLoadable(isAppEffectRedirectEnabledState).getValue() ===
false
) {
set(isAppWaitingForFreshObjectMetadataState, false);
set(isAppEffectRedirectEnabledState, true);
}
},
[],
@@ -1,7 +1,8 @@
import { isAppEffectRedirectEnabledState } from '@/app/states/isAppEffectRedirectEnabledState';
import { currentUserWorkspaceState } from '@/auth/states/currentUserWorkspaceState';
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '@/object-metadata/graphql/queries';
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { shouldAppBeLoadingState } from '@/object-metadata/states/shouldAppBeLoadingState';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { enrichObjectMetadataItemsWithPermissions } from '@/object-metadata/utils/enrichObjectMetadataItemsWithPermissions';
import { mapPaginatedObjectMetadataItemsToObjectMetadataItems } from '@/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems';
@@ -75,7 +76,17 @@ export const useRefreshObjectMetadataItems = (
newObjectMetadataItems.length > 0
) {
set(objectMetadataItemsState, newObjectMetadataItems);
set(isAppWaitingForFreshObjectMetadataState, false);
}
if (snapshot.getLoadable(shouldAppBeLoadingState).getValue() === true) {
set(shouldAppBeLoadingState, false);
}
if (
snapshot.getLoadable(isAppEffectRedirectEnabledState).getValue() ===
false
) {
set(isAppEffectRedirectEnabledState, true);
}
return newObjectMetadataItems;
@@ -1,5 +0,0 @@
import { createState } from 'twenty-ui/utilities';
export const isAppWaitingForFreshObjectMetadataState = createState<boolean>({
key: 'isAppWaitingForFreshObjectMetadataState',
defaultValue: false,
});
@@ -0,0 +1,5 @@
import { createState } from 'twenty-ui/utilities';
export const shouldAppBeLoadingState = createState<boolean>({
key: 'shouldAppBeLoadingState',
defaultValue: false,
});