# Scrollbar fix Fixes https://github.com/twentyhq/twenty/issues/11403 <img width="1512" alt="image" src="https://github.com/user-attachments/assets/b13fe0f2-8c61-4ea8-9ea1-e61e571a90da" /> --------- Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
155 lines
4.5 KiB
TypeScript
155 lines
4.5 KiB
TypeScript
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
|
|
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
|
|
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
|
|
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
|
|
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
|
|
import { useSetLastVisitedObjectMetadataId } from '@/navigation/hooks/useSetLastVisitedObjectMetadataId';
|
|
import { useSetLastVisitedViewForObjectMetadataNamePlural } from '@/navigation/hooks/useSetLastVisitedViewForObjectMetadataNamePlural';
|
|
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector';
|
|
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
|
|
import { View } from '@/views/types/View';
|
|
import { ViewType } from '@/views/types/ViewType';
|
|
import { useEffect } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
|
|
type MainContextStoreProviderEffectProps = {
|
|
viewId?: string;
|
|
objectMetadataItem?: ObjectMetadataItem;
|
|
isRecordIndexPage: boolean;
|
|
isRecordShowPage: boolean;
|
|
isSettingsPage: boolean;
|
|
};
|
|
|
|
export const MainContextStoreProviderEffect = ({
|
|
viewId,
|
|
objectMetadataItem,
|
|
isRecordIndexPage,
|
|
isRecordShowPage,
|
|
isSettingsPage,
|
|
}: MainContextStoreProviderEffectProps) => {
|
|
const { setLastVisitedViewForObjectMetadataNamePlural } =
|
|
useSetLastVisitedViewForObjectMetadataNamePlural();
|
|
|
|
const { setLastVisitedObjectMetadataId } =
|
|
useSetLastVisitedObjectMetadataId();
|
|
|
|
const [contextStoreCurrentViewId, setContextStoreCurrentViewId] =
|
|
useRecoilComponentStateV2(
|
|
contextStoreCurrentViewIdComponentState,
|
|
MAIN_CONTEXT_STORE_INSTANCE_ID,
|
|
);
|
|
|
|
const [contextStoreCurrentViewType, setContextStoreCurrentViewType] =
|
|
useRecoilComponentStateV2(
|
|
contextStoreCurrentViewTypeComponentState,
|
|
MAIN_CONTEXT_STORE_INSTANCE_ID,
|
|
);
|
|
|
|
const [
|
|
contextStoreCurrentObjectMetadataItemId,
|
|
setContextStoreCurrentObjectMetadataItemId,
|
|
] = useRecoilComponentStateV2(
|
|
contextStoreCurrentObjectMetadataItemIdComponentState,
|
|
MAIN_CONTEXT_STORE_INSTANCE_ID,
|
|
);
|
|
|
|
const view = useRecoilValue(
|
|
prefetchViewFromViewIdFamilySelector({
|
|
viewId: viewId ?? '',
|
|
}),
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (contextStoreCurrentObjectMetadataItemId !== objectMetadataItem?.id) {
|
|
setContextStoreCurrentObjectMetadataItemId(objectMetadataItem?.id);
|
|
}
|
|
|
|
if (!objectMetadataItem) {
|
|
return;
|
|
}
|
|
|
|
setLastVisitedViewForObjectMetadataNamePlural({
|
|
objectNamePlural: objectMetadataItem.namePlural,
|
|
viewId: viewId ?? '',
|
|
});
|
|
|
|
setLastVisitedObjectMetadataId({
|
|
objectMetadataItemId: objectMetadataItem.id,
|
|
});
|
|
}, [
|
|
contextStoreCurrentObjectMetadataItemId,
|
|
objectMetadataItem,
|
|
setContextStoreCurrentObjectMetadataItemId,
|
|
setLastVisitedObjectMetadataId,
|
|
setLastVisitedViewForObjectMetadataNamePlural,
|
|
viewId,
|
|
]);
|
|
|
|
useEffect(() => {
|
|
if (isSettingsPage) {
|
|
setContextStoreCurrentViewId(undefined);
|
|
return;
|
|
}
|
|
|
|
if (contextStoreCurrentViewId !== viewId) {
|
|
setContextStoreCurrentViewId(viewId);
|
|
}
|
|
}, [
|
|
contextStoreCurrentViewId,
|
|
isSettingsPage,
|
|
setContextStoreCurrentViewId,
|
|
viewId,
|
|
]);
|
|
|
|
useEffect(() => {
|
|
const viewType = getViewType({
|
|
isSettingsPage,
|
|
isRecordShowPage,
|
|
isRecordIndexPage,
|
|
view,
|
|
});
|
|
|
|
if (contextStoreCurrentViewType !== viewType) {
|
|
setContextStoreCurrentViewType(viewType);
|
|
}
|
|
}, [
|
|
contextStoreCurrentViewType,
|
|
setContextStoreCurrentViewType,
|
|
view,
|
|
isSettingsPage,
|
|
isRecordShowPage,
|
|
isRecordIndexPage,
|
|
]);
|
|
|
|
return null;
|
|
};
|
|
|
|
const getViewType = ({
|
|
isSettingsPage,
|
|
isRecordShowPage,
|
|
isRecordIndexPage,
|
|
view,
|
|
}: {
|
|
isSettingsPage: boolean;
|
|
isRecordShowPage: boolean;
|
|
isRecordIndexPage: boolean;
|
|
view?: View;
|
|
}) => {
|
|
if (isSettingsPage) {
|
|
return null;
|
|
}
|
|
|
|
if (isRecordIndexPage) {
|
|
return view?.type === ViewType.Kanban
|
|
? ContextStoreViewType.Kanban
|
|
: ContextStoreViewType.Table;
|
|
}
|
|
|
|
if (isRecordShowPage) {
|
|
return ContextStoreViewType.ShowPage;
|
|
}
|
|
|
|
return null;
|
|
};
|