3129 show page relation field add delete menu item (#3975)
* Fix typing error * Add delete relation button * Disable delete for workspace members * Fix lint
This commit is contained in:
@ -62,6 +62,7 @@ describe('useFindManyRecords', () => {
|
|||||||
setCurrentWorkspaceMember({
|
setCurrentWorkspaceMember({
|
||||||
id: '32219445-f587-4c40-b2b1-6d3205ed96da',
|
id: '32219445-f587-4c40-b2b1-6d3205ed96da',
|
||||||
name: { firstName: 'John', lastName: 'Connor' },
|
name: { firstName: 'John', lastName: 'Connor' },
|
||||||
|
locale: 'en',
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockObjectMetadataItems = getObjectMetadataItemsMock();
|
const mockObjectMetadataItems = getObjectMetadataItemsMock();
|
||||||
|
|||||||
@ -6,12 +6,13 @@ import { LightIconButton, MenuItem } from 'tsup.ui.index';
|
|||||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||||
import { RecordChip } from '@/object-record/components/RecordChip';
|
import { RecordChip } from '@/object-record/components/RecordChip';
|
||||||
|
import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord.ts';
|
||||||
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
|
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
|
||||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||||
import { usePersistField } from '@/object-record/record-field/hooks/usePersistField';
|
import { usePersistField } from '@/object-record/record-field/hooks/usePersistField';
|
||||||
import { FieldRelationMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
import { FieldRelationMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
||||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||||
import { IconDotsVertical, IconUnlink } from '@/ui/display/icon';
|
import { IconDotsVertical, IconTrash, IconUnlink } from '@/ui/display/icon';
|
||||||
import { CardContent } from '@/ui/layout/card/components/CardContent';
|
import { CardContent } from '@/ui/layout/card/components/CardContent';
|
||||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||||
@ -75,6 +76,10 @@ export const RecordRelationFieldCardContent = ({
|
|||||||
objectNameSingular: relationObjectMetadataNameSingular,
|
objectNameSingular: relationObjectMetadataNameSingular,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { deleteOneRecord: deleteOneRelationRecord } = useDeleteOneRecord({
|
||||||
|
objectNameSingular: relationObjectMetadataNameSingular,
|
||||||
|
});
|
||||||
|
|
||||||
const dropdownScopeId = `record-field-card-menu-${relationRecord.id}`;
|
const dropdownScopeId = `record-field-card-menu-${relationRecord.id}`;
|
||||||
|
|
||||||
const { closeDropdown, isDropdownOpen } = useDropdown(dropdownScopeId);
|
const { closeDropdown, isDropdownOpen } = useDropdown(dropdownScopeId);
|
||||||
@ -101,6 +106,11 @@ export const RecordRelationFieldCardContent = ({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleDelete = async () => {
|
||||||
|
closeDropdown();
|
||||||
|
await deleteOneRelationRecord(relationRecord.id);
|
||||||
|
};
|
||||||
|
|
||||||
const isOpportunityCompanyRelation =
|
const isOpportunityCompanyRelation =
|
||||||
(objectMetadataNameSingular === CoreObjectNameSingular.Opportunity &&
|
(objectMetadataNameSingular === CoreObjectNameSingular.Opportunity &&
|
||||||
relationObjectMetadataNameSingular === CoreObjectNameSingular.Company) ||
|
relationObjectMetadataNameSingular === CoreObjectNameSingular.Company) ||
|
||||||
@ -108,6 +118,10 @@ export const RecordRelationFieldCardContent = ({
|
|||||||
relationObjectMetadataNameSingular ===
|
relationObjectMetadataNameSingular ===
|
||||||
CoreObjectNameSingular.Opportunity);
|
CoreObjectNameSingular.Opportunity);
|
||||||
|
|
||||||
|
const isAccountOwnerRelation =
|
||||||
|
relationObjectMetadataNameSingular ===
|
||||||
|
CoreObjectNameSingular.WorkspaceMember;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledCardContent isDropdownOpen={isDropdownOpen} divider={divider}>
|
<StyledCardContent isDropdownOpen={isDropdownOpen} divider={divider}>
|
||||||
<RecordChip
|
<RecordChip
|
||||||
@ -134,6 +148,14 @@ export const RecordRelationFieldCardContent = ({
|
|||||||
text="Detach"
|
text="Detach"
|
||||||
onClick={handleDetach}
|
onClick={handleDetach}
|
||||||
/>
|
/>
|
||||||
|
{!isAccountOwnerRelation && (
|
||||||
|
<MenuItem
|
||||||
|
LeftIcon={IconTrash}
|
||||||
|
text="Delete"
|
||||||
|
accent="danger"
|
||||||
|
onClick={handleDelete}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</DropdownMenuItemsContainer>
|
</DropdownMenuItemsContainer>
|
||||||
}
|
}
|
||||||
dropdownHotkeyScope={{
|
dropdownHotkeyScope={{
|
||||||
|
|||||||
Reference in New Issue
Block a user