[FE] handle restricted objects 2 (#12437)

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Weiko
2025-06-05 15:49:22 +02:00
committed by GitHub
parent ad804ebecd
commit 3f30964523
109 changed files with 904 additions and 306 deletions

View File

@ -66,8 +66,8 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
position: 0,
isPinned: true,
Icon: IconPlus,
shouldBeRegistered: ({ hasObjectReadOnlyPermission }) =>
!hasObjectReadOnlyPermission,
shouldBeRegistered: ({ objectPermissions }) =>
objectPermissions.canUpdateObjectRecords,
availableOn: [ActionViewType.INDEX_PAGE_NO_SELECTION],
component: <CreateNewTableRecordNoSelectionRecordAction />,
},
@ -194,10 +194,15 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
Icon: IconTrash,
accent: 'default',
isPinned: true,
shouldBeRegistered: ({ selectedRecord, isSoftDeleteFilterActive }) =>
shouldBeRegistered: ({
selectedRecord,
isSoftDeleteFilterActive,
objectPermissions,
}) =>
isDefined(selectedRecord) &&
!selectedRecord.isRemote &&
!isSoftDeleteFilterActive,
!isSoftDeleteFilterActive &&
objectPermissions.canSoftDeleteObjectRecords,
availableOn: [
ActionViewType.INDEX_PAGE_SINGLE_RECORD_SELECTION,
ActionViewType.SHOW_PAGE,
@ -215,12 +220,12 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
accent: 'default',
isPinned: true,
shouldBeRegistered: ({
hasObjectReadOnlyPermission,
objectPermissions,
isRemote,
isSoftDeleteFilterActive,
numberOfSelectedRecords,
}) =>
!hasObjectReadOnlyPermission &&
objectPermissions.canSoftDeleteObjectRecords &&
!isRemote &&
!isSoftDeleteFilterActive &&
isDefined(numberOfSelectedRecords) &&
@ -268,12 +273,8 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
Icon: IconTrashX,
accent: 'danger',
isPinned: true,
shouldBeRegistered: ({
selectedRecord,
hasObjectReadOnlyPermission,
isRemote,
}) =>
!hasObjectReadOnlyPermission &&
shouldBeRegistered: ({ selectedRecord, objectPermissions, isRemote }) =>
objectPermissions.canDestroyObjectRecords &&
!isRemote &&
isDefined(selectedRecord?.deletedAt),
availableOn: [
@ -317,12 +318,12 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
accent: 'danger',
isPinned: true,
shouldBeRegistered: ({
hasObjectReadOnlyPermission,
objectPermissions,
isRemote,
isSoftDeleteFilterActive,
numberOfSelectedRecords,
}) =>
!hasObjectReadOnlyPermission &&
objectPermissions.canDestroyObjectRecords &&
!isRemote &&
isDefined(isSoftDeleteFilterActive) &&
isSoftDeleteFilterActive &&
@ -343,14 +344,14 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
isPinned: true,
shouldBeRegistered: ({
selectedRecord,
hasObjectReadOnlyPermission,
objectPermissions,
isRemote,
isShowPage,
isSoftDeleteFilterActive,
}) =>
!isRemote &&
isDefined(selectedRecord?.deletedAt) &&
!hasObjectReadOnlyPermission &&
objectPermissions.canSoftDeleteObjectRecords &&
((isDefined(isShowPage) && isShowPage) ||
(isDefined(isSoftDeleteFilterActive) && isSoftDeleteFilterActive)),
availableOn: [
@ -370,12 +371,12 @@ export const DEFAULT_RECORD_ACTIONS_CONFIG: Record<
accent: 'default',
isPinned: true,
shouldBeRegistered: ({
hasObjectReadOnlyPermission,
objectPermissions,
isRemote,
isSoftDeleteFilterActive,
numberOfSelectedRecords,
}) =>
!hasObjectReadOnlyPermission &&
objectPermissions.canSoftDeleteObjectRecords &&
!isRemote &&
isDefined(isSoftDeleteFilterActive) &&
isSoftDeleteFilterActive &&

View File

@ -1,12 +1,13 @@
import { ActionViewType } from '@/action-menu/actions/types/ActionViewType';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { ObjectPermissions } from '@/object-record/cache/types/ObjectPermissions';
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { WorkflowWithCurrentVersion } from '@/workflow/types/Workflow';
export type ShouldBeRegisteredFunctionParams = {
objectMetadataItem?: ObjectMetadataItem;
hasObjectReadOnlyPermission?: boolean;
objectPermissions: ObjectPermissions;
isWorkflowEnabled: boolean;
recordFilters?: RecordFilter[];
isShowPage?: boolean;

View File

@ -8,9 +8,9 @@ import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType
import { useFavorites } from '@/favorites/hooks/useFavorites';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { isSoftDeleteFilterActiveComponentState } from '@/object-record/record-table/states/isSoftDeleteFilterActiveComponentState';
import { useHasObjectReadOnlyPermission } from '@/settings/roles/hooks/useHasObjectReadOnlyPermission';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { useContext } from 'react';
@ -42,7 +42,9 @@ export const useShouldActionBeRegisteredParams = ({
const selectedRecord =
useRecoilValue(recordStoreFamilyState(recordId ?? '')) || undefined;
const hasObjectReadOnlyPermission = useHasObjectReadOnlyPermission();
const objectPermissions = useObjectPermissionsForObject(
objectMetadataItem?.id,
);
const isNoteOrTask =
objectMetadataItem?.nameSingular === CoreObjectNameSingular.Note ||
@ -78,7 +80,7 @@ export const useShouldActionBeRegisteredParams = ({
return {
objectMetadataItem,
isFavorite,
hasObjectReadOnlyPermission,
objectPermissions,
isNoteOrTask,
isInRightDrawer,
isSoftDeleteFilterActive,