https://github.com/user-attachments/assets/c0a42726-50ac-496e-a993-9d6076a84a6a --------- Co-authored-by: Félix Malfait <felix@twenty.com>
54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
import { useRecordAgnosticActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRecordAgnosticActions';
|
|
import { ActionViewType } from '@/action-menu/actions/types/ActionViewType';
|
|
import { ShouldBeRegisteredFunctionParams } from '@/action-menu/actions/types/ShouldBeRegisteredFunctionParams';
|
|
import { getActionConfig } from '@/action-menu/actions/utils/getActionConfig';
|
|
import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType';
|
|
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
|
|
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
|
|
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
|
|
export const useRegisteredActions = (
|
|
shouldBeRegisteredParams: ShouldBeRegisteredFunctionParams,
|
|
) => {
|
|
const { objectMetadataItem } = shouldBeRegisteredParams;
|
|
|
|
const contextStoreTargetedRecordsRule = useRecoilComponentValueV2(
|
|
contextStoreTargetedRecordsRuleComponentState,
|
|
);
|
|
|
|
const contextStoreCurrentViewType = useRecoilComponentValueV2(
|
|
contextStoreCurrentViewTypeComponentState,
|
|
);
|
|
|
|
const viewType = getActionViewType(
|
|
contextStoreCurrentViewType,
|
|
contextStoreTargetedRecordsRule,
|
|
);
|
|
|
|
const recordActionConfig = getActionConfig({
|
|
objectMetadataItem,
|
|
});
|
|
|
|
const recordAgnosticActionConfig = useRecordAgnosticActions();
|
|
|
|
const actionsConfig = {
|
|
...recordActionConfig,
|
|
...recordAgnosticActionConfig,
|
|
};
|
|
|
|
const actionsToRegister = isDefined(viewType)
|
|
? Object.values(actionsConfig).filter(
|
|
(action) =>
|
|
action.availableOn?.includes(viewType) ||
|
|
action.availableOn?.includes(ActionViewType.GLOBAL),
|
|
)
|
|
: [];
|
|
|
|
const actions = actionsToRegister
|
|
.filter((action) => action.shouldBeRegistered(shouldBeRegisteredParams))
|
|
.sort((a, b) => a.position - b.position);
|
|
|
|
return actions;
|
|
};
|