Files
twenty/packages/twenty-front/src/modules/views/view-picker/hooks/useGetAvailableFieldsForKanban.ts
T
2025-01-21 11:34:33 +01:00

64 lines
2.1 KiB
TypeScript

import { useCallback } from 'react';
import { useLocation } from 'react-router-dom';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { SettingsPath } from '@/types/SettingsPath';
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { viewObjectMetadataIdComponentState } from '@/views/states/viewObjectMetadataIdComponentState';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { useNavigateSettings } from '~/hooks/useNavigateSettings';
import { isDefined } from '~/utils/isDefined';
export const useGetAvailableFieldsForKanban = () => {
const viewObjectMetadataId = useRecoilComponentValueV2(
viewObjectMetadataIdComponentState,
);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const setNavigationMemorizedUrl = useSetRecoilState(
navigationMemorizedUrlState,
);
const location = useLocation();
const objectMetadataItem = objectMetadataItems.find(
(objectMetadata) => objectMetadata.id === viewObjectMetadataId,
);
const availableFieldsForKanban =
objectMetadataItem?.fields.filter(
(field) => field.type === FieldMetadataType.SELECT,
) ?? [];
const navigate = useNavigateSettings();
const navigateToSelectSettings = useCallback(() => {
setNavigationMemorizedUrl(location.pathname + location.search);
if (isDefined(objectMetadataItem?.namePlural)) {
navigate(
SettingsPath.ObjectNewFieldConfigure,
{
objectNamePlural: objectMetadataItem.namePlural,
},
{
fieldType: FieldMetadataType.SELECT,
},
);
} else {
navigate(SettingsPath.Objects);
}
}, [
setNavigationMemorizedUrl,
location.pathname,
location.search,
objectMetadataItem,
navigate,
]);
return {
availableFieldsForKanban,
navigateToSelectSettings,
};
};