65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { useRecoilCallback } from 'recoil';
|
|
|
|
import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateActivityDrawer';
|
|
import { ActivityType } from '@/activities/types/Activity';
|
|
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
|
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
|
|
import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
|
|
import { ActivityTargetableObject } from '../types/ActivityTargetableEntity';
|
|
|
|
export const useOpenCreateActivityDrawerForSelectedRowIds = (
|
|
recordTableId: string,
|
|
) => {
|
|
const openCreateActivityDrawer = useOpenCreateActivityDrawer();
|
|
|
|
const { getSelectedRowIdsSelector } = useRecordTableStates(recordTableId);
|
|
|
|
return useRecoilCallback(
|
|
({ snapshot }) =>
|
|
(
|
|
type: ActivityType,
|
|
objectNameSingular: string,
|
|
relatedEntities?: ActivityTargetableObject[],
|
|
) => {
|
|
const selectedRowIds = getSnapshotValue(
|
|
snapshot,
|
|
getSelectedRowIdsSelector(),
|
|
);
|
|
|
|
let activityTargetableObjectArray: ActivityTargetableObject[] =
|
|
selectedRowIds
|
|
.map((recordId: string) => {
|
|
const targetObjectRecord = getSnapshotValue(
|
|
snapshot,
|
|
recordStoreFamilyState(recordId),
|
|
);
|
|
|
|
if (!targetObjectRecord) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
type: 'Custom',
|
|
targetObjectNameSingular: objectNameSingular,
|
|
id: recordId,
|
|
targetObjectRecord,
|
|
};
|
|
})
|
|
.filter(isDefined);
|
|
|
|
if (isDefined(relatedEntities)) {
|
|
activityTargetableObjectArray =
|
|
activityTargetableObjectArray.concat(relatedEntities);
|
|
}
|
|
|
|
openCreateActivityDrawer({
|
|
type,
|
|
targetableObjects: activityTargetableObjectArray,
|
|
});
|
|
},
|
|
[openCreateActivityDrawer, getSelectedRowIdsSelector],
|
|
);
|
|
};
|