In this PR: - Remove deactivated objects from ActivityTargetInlineCell record picker - Prevent users to deactivate createdAt, updatedAt, deletedAt fields on any objects Still left: - write unit tests on the assert utils - write integration tests on field metadata service - prevent users to deactivate createdAt, updatedAt, deletedAt on FE
87 lines
3.7 KiB
TypeScript
87 lines
3.7 KiB
TypeScript
import { ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject';
|
|
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { useMultipleRecordPickerPerformSearch } from '@/object-record/record-picker/multiple-record-picker/hooks/useMultipleRecordPickerPerformSearch';
|
|
import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerPickableMorphItemsComponentState';
|
|
import { multipleRecordPickerSearchFilterComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchFilterComponentState';
|
|
import { multipleRecordPickerSearchableObjectMetadataItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchableObjectMetadataItemsComponentState';
|
|
import { useRecoilCallback } from 'recoil';
|
|
|
|
type OpenActivityTargetInlineCellEditModeProps = {
|
|
recordPickerInstanceId: string;
|
|
activityTargetObjectRecords: ActivityTargetWithTargetRecord[];
|
|
};
|
|
|
|
export const useOpenActivityTargetInlineCellEditMode = () => {
|
|
const { performSearch: multipleRecordPickerPerformSearch } =
|
|
useMultipleRecordPickerPerformSearch();
|
|
|
|
const openActivityTargetInlineCellEditMode = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
({
|
|
recordPickerInstanceId,
|
|
activityTargetObjectRecords,
|
|
}: OpenActivityTargetInlineCellEditModeProps) => {
|
|
const objectMetadataItems = snapshot
|
|
.getLoadable(objectMetadataItemsState)
|
|
.getValue()
|
|
.filter(
|
|
(objectMetadataItem) =>
|
|
objectMetadataItem.isSearchable &&
|
|
objectMetadataItem.isActive &&
|
|
objectMetadataItem.nameSingular !== CoreObjectNameSingular.Task &&
|
|
objectMetadataItem.nameSingular !== CoreObjectNameSingular.Note &&
|
|
objectMetadataItem.nameSingular !==
|
|
CoreObjectNameSingular.WorkspaceMember,
|
|
);
|
|
|
|
set(
|
|
multipleRecordPickerPickableMorphItemsComponentState.atomFamily({
|
|
instanceId: recordPickerInstanceId,
|
|
}),
|
|
activityTargetObjectRecords.map((activityTargetObjectRecord) => ({
|
|
recordId: activityTargetObjectRecord.targetObject.id,
|
|
objectMetadataId:
|
|
activityTargetObjectRecord.targetObjectMetadataItem.id,
|
|
isSelected: true,
|
|
isMatchingSearchFilter: true,
|
|
})),
|
|
);
|
|
|
|
set(
|
|
multipleRecordPickerSearchableObjectMetadataItemsComponentState.atomFamily(
|
|
{
|
|
instanceId: recordPickerInstanceId,
|
|
},
|
|
),
|
|
objectMetadataItems,
|
|
);
|
|
|
|
set(
|
|
multipleRecordPickerSearchFilterComponentState.atomFamily({
|
|
instanceId: recordPickerInstanceId,
|
|
}),
|
|
'',
|
|
);
|
|
|
|
multipleRecordPickerPerformSearch({
|
|
multipleRecordPickerInstanceId: recordPickerInstanceId,
|
|
forceSearchFilter: '',
|
|
forceSearchableObjectMetadataItems: objectMetadataItems,
|
|
forcePickableMorphItems: activityTargetObjectRecords.map(
|
|
(activityTargetObjectRecord) => ({
|
|
recordId: activityTargetObjectRecord.targetObject.id,
|
|
objectMetadataId:
|
|
activityTargetObjectRecord.targetObjectMetadataItem.id,
|
|
isSelected: true,
|
|
isMatchingSearchFilter: true,
|
|
}),
|
|
),
|
|
});
|
|
},
|
|
[multipleRecordPickerPerformSearch],
|
|
);
|
|
|
|
return { openActivityTargetInlineCellEditMode };
|
|
};
|