diff --git a/libs/ui/src/components/Explorer/DataView.tsx b/libs/ui/src/components/Explorer/DataView.tsx
index c28ed95d4..b13fd4820 100644
--- a/libs/ui/src/components/Explorer/DataView.tsx
+++ b/libs/ui/src/components/Explorer/DataView.tsx
@@ -2,7 +2,7 @@
// This file is released under LGPL V3
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
import {cloneElement, ComponentProps, FunctionComponent, memo, ReactNode} from 'react';
-import {KitButton, KitDropDown, KitPagination, KitSpace, KitTable, useKitTheme} from 'aristid-ds';
+import {KitButton, KitDropDown, KitPagination, KitTable} from 'aristid-ds';
import type {KitTableColumnType} from 'aristid-ds/dist/Kit/DataDisplay/Table/types';
import {FaEllipsisH} from 'react-icons/fa';
import {Override} from '@leav/utils';
diff --git a/libs/ui/src/components/Explorer/Explorer.test.tsx b/libs/ui/src/components/Explorer/Explorer.test.tsx
index dadae3778..c945024fe 100644
--- a/libs/ui/src/components/Explorer/Explorer.test.tsx
+++ b/libs/ui/src/components/Explorer/Explorer.test.tsx
@@ -18,7 +18,7 @@ import {Explorer} from '_ui/index';
import {IEntrypointLibrary, IEntrypointLink, IItemAction, IPrimaryAction} from './_types';
import * as useExecuteSaveValueBatchMutation from '../RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';
import * as useColumnWidth from './useColumnWidth';
-import {AddLinkModal} from './link-item/AddLinkModal';
+import {LinkModal} from './link-item/LinkModal';
import {FunctionComponent} from 'react';
import {IViewSettingsState, ViewSettingsContext, viewSettingsInitialState} from './manage-view-settings';
import {useViewSettingsReducer} from './useViewSettingsReducer';
@@ -1574,15 +1574,15 @@ describe('Explorer', () => {
});
});
- describe('Add link modal', () => {
- test('Should be able to add existing item to atribute', async () => {
+ describe('Link modal', () => {
+ test('Should be able to link existing item to parent record and create linked attribute', async () => {
const viewInitialState = {
...viewSettingsInitialState,
- entrypoint: linkEntrypoint
+ entrypoint: {...libraryEntrypoint, libraryId: explorerLinkAttribute.linked_library.id}
};
const fetch = jest.fn();
- const selecionIdsImplementation = [
+ const selectionIdsImplementation = [
fetch,
{
loading: false,
@@ -1591,12 +1591,13 @@ describe('Explorer', () => {
];
jest.spyOn(gqlTypes, 'useExplorerSelectionIdsLazyQuery').mockImplementation(
- () => selecionIdsImplementation as gqlTypes.ExplorerSelectionIdsLazyQueryHookResult
+ () => selectionIdsImplementation as gqlTypes.ExplorerSelectionIdsLazyQueryHookResult
);
+ // TODO: review mock/spy logic
render(
-
+
,
{
mocks: [ExplorerLinkAttributeQueryMock]
diff --git a/libs/ui/src/components/Explorer/Explorer.tsx b/libs/ui/src/components/Explorer/Explorer.tsx
index de207de99..c1489594e 100644
--- a/libs/ui/src/components/Explorer/Explorer.tsx
+++ b/libs/ui/src/components/Explorer/Explorer.tsx
@@ -12,11 +12,13 @@ import {useExplorerData} from './_queries/useExplorerData';
import {DataView} from './DataView';
import {ExplorerTitle} from './ExplorerTitle';
import {ExplorerToolbar} from './ExplorerToolbar';
-import {useRemoveAction} from './useRemoveAction';
-import {useEditAction} from './useEditAction';
-import {usePrimaryActionsButton} from './usePrimaryActions';
-import {useCreateAction} from './useCreateAction';
-import {useMassActions} from './useMassActions';
+import {useRemoveItemAction} from './actions-item/useRemoveItemAction';
+import {useEditItemAction} from './actions-item/useEditItemAction';
+import {usePrimaryActionsButton} from './actions-primary/usePrimaryActions';
+import {useCreatePrimaryAction} from './actions-primary/useCreatePrimaryAction';
+import {useLinkPrimaryAction} from './actions-primary/useLinkPrimaryAction';
+import {useMassActions} from './actions-mass/useMassActions';
+import {useDeactivateMassAction} from './actions-mass/useDeactivateMassAction';
import {
defaultPageSizeOptions,
SidePanel,
@@ -27,9 +29,7 @@ import {
import {useSearchInput} from './useSearchInput';
import {usePagination} from './usePagination';
import {useViewSettingsReducer} from './useViewSettingsReducer';
-import {useDeactivateMassAction} from './useDeactivateMassAction';
import {MASS_SELECTION_ALL} from './_constants';
-import {useAddItemAction} from './useAddItemAction';
const isNotEmpty = (union: T): union is Exclude => union.length > 0;
@@ -114,31 +114,31 @@ export const Explorer: FunctionComponent = ({
const isMassSelectionAll = view.massSelection === MASS_SELECTION_ALL;
- const {removeAction} = useRemoveAction({
+ const {removeItemAction} = useRemoveItemAction({
isEnabled: isNotEmpty(defaultActionsForItem) && defaultActionsForItem.includes('remove'),
store: {view, dispatch},
entrypoint
});
- const {editAction, editModal} = useEditAction({
+ const {editItemAction, editItemModal} = useEditItemAction({
isEnabled: isNotEmpty(defaultActionsForItem) && defaultActionsForItem.includes('edit')
});
- const {createAction, createModal} = useCreateAction({
+ const totalCount = data?.totalCount ?? 0;
+
+ const {createPrimaryAction, createModal} = useCreatePrimaryAction({
isEnabled: isNotEmpty(defaultPrimaryActions) && defaultPrimaryActions.includes('create'),
- library: view.libraryId,
+ libraryId: view.libraryId,
entrypoint: view.entrypoint,
- itemsCount: data?.totalCount ?? 0,
+ totalCount,
refetch
});
- const {linkItemsAction, linkItemsModal} = useAddItemAction({
+ const {linkPrimaryAction, linkModal} = useLinkPrimaryAction({
isEnabled: entrypoint.type === 'link',
- library: view.libraryId,
- maxItemsLeft: null
+ maxItemsLeft: null // TODO: use KitTable.row
});
- const totalCount = data?.totalCount ?? 0;
const allVisibleKeys = data?.records.map(({key}) => key) ?? [];
const {deactivateMassAction} = useDeactivateMassAction({
@@ -156,7 +156,9 @@ export const Explorer: FunctionComponent = ({
massActions: [deactivateMassAction, ...massActions].filter(Boolean)
});
- const {primaryButton} = usePrimaryActionsButton([createAction, linkItemsAction, ...primaryActions].filter(Boolean));
+ const {primaryButton} = usePrimaryActionsButton(
+ [createPrimaryAction, linkPrimaryAction, ...primaryActions].filter(Boolean)
+ );
const {viewSettingsButton} = useOpenViewSettings(view.libraryId);
@@ -212,7 +214,7 @@ export const Explorer: FunctionComponent = ({
}
: undefined
}
- itemActions={[editAction, removeAction, ...itemActions].filter(Boolean).map(action => ({
+ itemActions={[editItemAction, removeItemAction, ...itemActions].filter(Boolean).map(action => ({
...action,
disabled: isMassSelectionAll
}))}
@@ -227,9 +229,9 @@ export const Explorer: FunctionComponent = ({
)}
{settingsPanelElement && createPortal(, settingsPanelElement?.() ?? document.body)}
- {editModal}
+ {editItemModal}
{createModal}
- {linkItemsModal}
+ {linkModal}
);
};
diff --git a/libs/ui/src/components/Explorer/useEditAction.tsx b/libs/ui/src/components/Explorer/actions-item/useEditItemAction.tsx
similarity index 89%
rename from libs/ui/src/components/Explorer/useEditAction.tsx
rename to libs/ui/src/components/Explorer/actions-item/useEditItemAction.tsx
index 0e03e3960..618956cf1 100644
--- a/libs/ui/src/components/Explorer/useEditAction.tsx
+++ b/libs/ui/src/components/Explorer/actions-item/useEditItemAction.tsx
@@ -6,7 +6,7 @@ import {FaPen} from 'react-icons/fa';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
import {EditRecordModal} from '_ui/components/RecordEdition/EditRecordModal';
import {RecordFilterCondition, useExplorerLibraryDataLazyQuery} from '_ui/_gqlTypes';
-import {ActionHook, IItemAction, IItemData} from './_types';
+import {ActionHook, IItemAction, IItemData} from '../_types';
/**
* Hook used to get the action for `` component.
@@ -18,14 +18,14 @@ import {ActionHook, IItemAction, IItemData} from './_types';
*
* @param isEnabled - whether the action is present
*/
-export const useEditAction = ({isEnabled}: ActionHook) => {
+export const useEditItemAction = ({isEnabled}: ActionHook) => {
const {t} = useSharedTranslation();
const [refreshItem] = useExplorerLibraryDataLazyQuery({fetchPolicy: 'network-only'});
const [editingItem, setEditingItem] = useState(null);
- const _editAction: IItemAction = {
+ const _editItemAction: IItemAction = {
label: t('explorer.edit-item'),
icon: ,
callback: item => {
@@ -53,8 +53,8 @@ export const useEditAction = ({isEnabled}: ActionHook) => {
const editAction = useMemo(
() => ({
- editAction: isEnabled ? _editAction : null,
- editModal:
+ editItemAction: isEnabled ? _editItemAction : null,
+ editItemModal:
isEnabled && editingItem !== null ? (
` component.
@@ -26,7 +22,7 @@ import {MASS_SELECTION_ALL} from '_ui/components/Explorer/_constants';
* @param dispatch - method to change the current view
* @param entrypoint - represent the current entrypoint
*/
-export const useRemoveAction = ({
+export const useRemoveItemAction = ({
isEnabled,
store: {view, dispatch},
entrypoint
@@ -72,7 +68,7 @@ export const useRemoveAction = ({
}
});
- const _removeAction: IItemAction = useMemo(
+ const _removeItemAction: IItemAction = useMemo(
() => ({
label: entrypoint.type === 'library' ? t('explorer.deactivate-item') : t('explorer.delete-item'),
icon: ,
@@ -126,6 +122,6 @@ export const useRemoveAction = ({
);
return {
- removeAction: isEnabled ? _removeAction : null
+ removeItemAction: isEnabled ? _removeItemAction : null
};
};
diff --git a/libs/ui/src/components/Explorer/useDeactivateMassAction.tsx b/libs/ui/src/components/Explorer/actions-mass/useDeactivateMassAction.tsx
similarity index 94%
rename from libs/ui/src/components/Explorer/useDeactivateMassAction.tsx
rename to libs/ui/src/components/Explorer/actions-mass/useDeactivateMassAction.tsx
index 29690a1ba..c446f4164 100644
--- a/libs/ui/src/components/Explorer/useDeactivateMassAction.tsx
+++ b/libs/ui/src/components/Explorer/actions-mass/useDeactivateMassAction.tsx
@@ -6,10 +6,10 @@ import {FaTrash} from 'react-icons/fa';
import {KitModal} from 'aristid-ds';
import {useDeactivateRecordsMutation} from '_ui/_gqlTypes';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
-import {ActionHook, IMassActions} from './_types';
-import {IViewSettingsAction, IViewSettingsState, ViewSettingsActionTypes} from './manage-view-settings';
-import {MASS_SELECTION_ALL} from './_constants';
-import type {useExplorerData} from './_queries/useExplorerData';
+import {ActionHook, IMassActions} from '../_types';
+import {IViewSettingsAction, IViewSettingsState, ViewSettingsActionTypes} from '../manage-view-settings';
+import {MASS_SELECTION_ALL} from '../_constants';
+import type {useExplorerData} from '../_queries/useExplorerData';
/**
* Hook used to get the action for mass actions only available on selection.
diff --git a/libs/ui/src/components/Explorer/useMassActions.tsx b/libs/ui/src/components/Explorer/actions-mass/useMassActions.tsx
similarity index 95%
rename from libs/ui/src/components/Explorer/useMassActions.tsx
rename to libs/ui/src/components/Explorer/actions-mass/useMassActions.tsx
index 603c0d3f2..0251bd291 100644
--- a/libs/ui/src/components/Explorer/useMassActions.tsx
+++ b/libs/ui/src/components/Explorer/actions-mass/useMassActions.tsx
@@ -7,11 +7,11 @@ import {FaChevronDown} from 'react-icons/fa';
import {RecordFilterCondition, RecordFilterOperator} from '_ui/_gqlTypes';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
import {interleaveElement} from '_ui/_utils/interleaveElement';
-import {IMassActions} from './_types';
-import {MASS_SELECTION_ALL} from './_constants';
-import {IViewSettingsAction, IViewSettingsState, ViewSettingsActionTypes} from './manage-view-settings';
-import {prepareFiltersForRequest} from './_queries/prepareFiltersForRequest';
-import {MassSelection} from './manage-view-settings/store-view-settings/viewSettingsReducer';
+import {IMassActions} from '../_types';
+import {MASS_SELECTION_ALL} from '../_constants';
+import {IViewSettingsAction, IViewSettingsState, ViewSettingsActionTypes} from '../manage-view-settings';
+import {prepareFiltersForRequest} from '../_queries/prepareFiltersForRequest';
+import {MassSelection} from '../manage-view-settings/store-view-settings/viewSettingsReducer';
/**
* Hook used to manage mass selection as the snackbar and all kind of selection (manual, all in page, all in filters)
diff --git a/libs/ui/src/components/Explorer/useCreateAction.tsx b/libs/ui/src/components/Explorer/actions-primary/useCreatePrimaryAction.tsx
similarity index 87%
rename from libs/ui/src/components/Explorer/useCreateAction.tsx
rename to libs/ui/src/components/Explorer/actions-primary/useCreatePrimaryAction.tsx
index f09b7abc1..6cc131a6c 100644
--- a/libs/ui/src/components/Explorer/useCreateAction.tsx
+++ b/libs/ui/src/components/Explorer/actions-primary/useCreatePrimaryAction.tsx
@@ -5,9 +5,9 @@ import {useState} from 'react';
import {FaPlus} from 'react-icons/fa';
import {EditRecordModal} from '_ui/components';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
-import {ActionHook, Entrypoint, IEntrypointLink, IPrimaryAction} from './_types';
import useSaveValueBatchMutation from '_ui/components/RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';
import {useExplorerLinkAttributeQuery} from '_ui/_gqlTypes';
+import {ActionHook, Entrypoint, IEntrypointLink, IPrimaryAction} from '../_types';
/**
* Hook used to get the action for `` component.
@@ -17,19 +17,21 @@ import {useExplorerLinkAttributeQuery} from '_ui/_gqlTypes';
* It returns also two parts : one for the call action button - one for displayed the modal required by the action.
*
* @param isEnabled - whether the action is present
- * @param library - the library's id to add new item
+ * @param libraryId - the library's id to add new item
+ * @param entrypoint - represent the current entrypoint
+ * @param totalCount - used for display purpose only
* @param refetch - method to call to refresh the list. New item will be visible if it matches filters and sorts
*/
-export const useCreateAction = ({
+export const useCreatePrimaryAction = ({
isEnabled,
- library,
+ libraryId,
entrypoint,
- itemsCount,
+ totalCount,
refetch
}: ActionHook<{
- library: string;
+ libraryId: string;
entrypoint: Entrypoint;
- itemsCount: number;
+ totalCount: number;
refetch: () => void;
}>) => {
const {t} = useSharedTranslation();
@@ -52,9 +54,9 @@ export const useCreateAction = ({
}
});
- const canCreateRecord = entrypoint.type === 'library' ? true : multipleValues || itemsCount === 0;
+ const canCreateRecord = entrypoint.type === 'library' ? true : multipleValues || totalCount === 0;
- const createAction: IPrimaryAction = {
+ const _createPrimaryAction: IPrimaryAction = {
callback: () => {
setRecordCreationVisible(true);
},
@@ -64,12 +66,12 @@ export const useCreateAction = ({
};
return {
- createAction: isEnabled ? createAction : null,
+ createPrimaryAction: isEnabled ? _createPrimaryAction : null,
createModal: isRecordCreationVisible ? (
{
setRecordCreationVisible(false);
}}
diff --git a/libs/ui/src/components/Explorer/useAddItemAction.tsx b/libs/ui/src/components/Explorer/actions-primary/useLinkPrimaryAction.tsx
similarity index 64%
rename from libs/ui/src/components/Explorer/useAddItemAction.tsx
rename to libs/ui/src/components/Explorer/actions-primary/useLinkPrimaryAction.tsx
index a231e5dff..99505be84 100644
--- a/libs/ui/src/components/Explorer/useAddItemAction.tsx
+++ b/libs/ui/src/components/Explorer/actions-primary/useLinkPrimaryAction.tsx
@@ -4,8 +4,8 @@
import {useState} from 'react';
import {FaPlus} from 'react-icons/fa';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
-import {ActionHook, IPrimaryAction} from './_types';
-import {AddLinkModal} from './link-item/AddLinkModal';
+import {ActionHook, IPrimaryAction} from '../_types';
+import {LinkModal} from '../link-item/LinkModal';
/**
* Hook used to get the action for `` component.
@@ -15,26 +15,23 @@ import {AddLinkModal} from './link-item/AddLinkModal';
* It returns also two parts : one for the call action button - one for displaying the modal required by the action.
*
* @param isEnabled - whether the action is present
- * @param library - the library's id to add new item
* @param maxItemsLeft - the number of items that can be added
*/
-export const useAddItemAction = ({
+export const useLinkPrimaryAction = ({
isEnabled,
- library,
maxItemsLeft
}: ActionHook<{
- library: string;
maxItemsLeft: number | null;
}>) => {
const {t} = useSharedTranslation();
- const [isLinkItemsModalVisible, setIsLinkItemsModalVisible] = useState(false);
+ const [isLinkModalVisible, setIsLinkModalVisible] = useState(false);
const disableAddItemAction = maxItemsLeft === 0;
- const linkItemsAction: IPrimaryAction = {
+ const _linkPrimaryAction: IPrimaryAction = {
callback: () => {
- setIsLinkItemsModalVisible(true);
+ setIsLinkModalVisible(true);
},
icon: ,
disabled: disableAddItemAction,
@@ -42,13 +39,12 @@ export const useAddItemAction = ({
};
return {
- linkItemsAction: isEnabled ? linkItemsAction : null,
- linkItemsModal: isLinkItemsModalVisible ? (
- {
- setIsLinkItemsModalVisible(false);
+ setIsLinkModalVisible(false);
}}
/>
) : null
diff --git a/libs/ui/src/components/Explorer/usePrimaryActions.tsx b/libs/ui/src/components/Explorer/actions-primary/usePrimaryActions.tsx
similarity index 97%
rename from libs/ui/src/components/Explorer/usePrimaryActions.tsx
rename to libs/ui/src/components/Explorer/actions-primary/usePrimaryActions.tsx
index 5c8f01255..261b9fb42 100644
--- a/libs/ui/src/components/Explorer/usePrimaryActions.tsx
+++ b/libs/ui/src/components/Explorer/actions-primary/usePrimaryActions.tsx
@@ -1,8 +1,8 @@
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
// This file is released under LGPL V3
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
-import {IPrimaryAction} from './_types';
import {KitButton, KitSpace} from 'aristid-ds';
+import {IPrimaryAction} from '../_types';
/**
* Hook used to get the primary actions for `` component.
diff --git a/libs/ui/src/components/Explorer/link-item/AddLinkModal.tsx b/libs/ui/src/components/Explorer/link-item/LinkModal.tsx
similarity index 78%
rename from libs/ui/src/components/Explorer/link-item/AddLinkModal.tsx
rename to libs/ui/src/components/Explorer/link-item/LinkModal.tsx
index 229b8076d..620f47439 100644
--- a/libs/ui/src/components/Explorer/link-item/AddLinkModal.tsx
+++ b/libs/ui/src/components/Explorer/link-item/LinkModal.tsx
@@ -1,27 +1,27 @@
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
// This file is released under LGPL V3
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
-import {Modal} from 'antd';
-import {ComponentProps, FunctionComponent, ReactNode, useRef} from 'react';
-import {closeKitSnackBar, KitButton, KitSpace} from 'aristid-ds';
+import {ComponentProps, FunctionComponent, useRef} from 'react';
+import {closeKitSnackBar, KitButton, KitSpace, AntModal} from 'aristid-ds';
import styled from 'styled-components';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import {faXmark} from '@fortawesome/free-solid-svg-icons';
import {Explorer} from '../Explorer';
import {IEntrypointLink} from '../_types';
-import {useAddLinkMassAction} from '../useAddLinkMassAction';
+import {useLinkMassAction} from './useLinkMassAction';
import {useViewSettingsContext} from '../manage-view-settings/store-view-settings/useViewSettingsContext';
import {EditSettingsContextProvider} from '../manage-view-settings';
interface IAddLinkModalProps {
open: boolean;
- library: string;
- onClose?: () => void;
+ onClose: () => void;
}
const modalMaxWidth = 1200;
-const StyledModal = styled(Modal)`
+
+// TODO: use KitModal instead for explorer first
+const StyledModal = styled(AntModal)`
&& {
width: 90vw;
max-width: ${modalMaxWidth}px;
@@ -34,7 +34,6 @@ const StyledModal = styled(Modal)`
.ant-modal-content {
display: flex;
flex-direction: column;
- padding: calc(var(--general-spacing-xs) * 1px);
overflow: hidden;
padding: 0;
}
@@ -52,34 +51,34 @@ const ModalMainStyledDiv = styled.div`
position: relative;
`;
-const ModalFooter = styled.div`
+const ModalFooterStyledDiv = styled.div`
display: flex;
justify-content: flex-end;
padding: calc(var(--general-spacing-xs) * 1px) calc(var(--general-spacing-s) * 1px);
border-top: 1px solid var(--general-utilities-border);
`;
-export const AddLinkModal: FunctionComponent = ({open, library, onClose}) => {
+export const LinkModal: FunctionComponent = ({open, onClose}) => {
const {t} = useSharedTranslation();
const explorerContainerRef = useRef(null);
const {view, dispatch} = useViewSettingsContext();
- const {addLinkMassAction} = useAddLinkMassAction({
+ const {addLinkMassAction} = useLinkMassAction({
isEnabled: true,
store: {view, dispatch},
linkAttributeId: (view.entrypoint as IEntrypointLink).linkAttributeId,
libraryId: view.libraryId
});
- const _handleClose = () => {
+ const _handleClose: ComponentProps['onClick'] = () => {
closeKitSnackBar();
- onClose?.();
+ onClose();
};
- const _closeButtonLabel: string = t('global.close');
+ const _closeButtonLabel: ComponentProps['aria-label'] = t('global.close');
- const _footer: ComponentProps['footer'] = (
-
+ const _footer: ComponentProps['footer'] = (
+
= ({open, libra
{_closeButtonLabel}
-
+
);
return (
@@ -98,7 +97,6 @@ export const AddLinkModal: FunctionComponent = ({open, libra
open={open}
onCancel={_handleClose}
destroyOnClose
- className="add-link-modal"
closable={false}
cancelText={t('global.cancel')}
width="90vw"
@@ -110,7 +108,7 @@ export const AddLinkModal: FunctionComponent = ({open, libra
= ({open, libra
itemActions={[]}
defaultPrimaryActions={[]}
/>
+ {/* TODO: avoid getting last view for user */}
diff --git a/libs/ui/src/components/Explorer/useAddLinkMassAction.tsx b/libs/ui/src/components/Explorer/link-item/useLinkMassAction.tsx
similarity index 91%
rename from libs/ui/src/components/Explorer/useAddLinkMassAction.tsx
rename to libs/ui/src/components/Explorer/link-item/useLinkMassAction.tsx
index c9644436b..bf71b3e7d 100644
--- a/libs/ui/src/components/Explorer/useAddLinkMassAction.tsx
+++ b/libs/ui/src/components/Explorer/link-item/useLinkMassAction.tsx
@@ -5,9 +5,9 @@ import {Dispatch, useMemo} from 'react';
import {FaTrash} from 'react-icons/fa';
import {useExplorerSelectionIdsLazyQuery} from '_ui/_gqlTypes';
import {useSharedTranslation} from '_ui/hooks/useSharedTranslation';
-import {ActionHook, IEntrypointLink, IMassActions} from './_types';
-import {IViewSettingsAction, IViewSettingsState} from './manage-view-settings';
import useSaveValueBatchMutation from '_ui/components/RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';
+import {ActionHook, IEntrypointLink, IMassActions} from '../_types';
+import {IViewSettingsAction, IViewSettingsState} from '../manage-view-settings';
/**
* Hook used to link records
@@ -16,8 +16,9 @@ import useSaveValueBatchMutation from '_ui/components/RecordEdition/EditRecordCo
* @param view - represent the current view
* @param dispatch - method to change the current view
* @param libraryId - concerned library
+ * @param linkAttributeId
*/
-export const useAddLinkMassAction = ({
+export const useLinkMassAction = ({
isEnabled,
store: {view, dispatch},
libraryId,