ui
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import { useCallback } from 'react';
|
||||
|
||||
export const isPointerModifierEvent = (event) =>
|
||||
Boolean(event && (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey));
|
||||
|
||||
export const isPrimaryPointerEvent = (event) => {
|
||||
if (!event) {
|
||||
return true;
|
||||
}
|
||||
if (typeof event.button === 'number' && event.button !== 0) {
|
||||
return false;
|
||||
}
|
||||
const type = typeof event.type === 'string' ? event.type.toLowerCase() : '';
|
||||
return type === 'click' || type === 'pointerdown' || type === 'pointerup';
|
||||
};
|
||||
|
||||
export const useEntryPointerHandler = ({
|
||||
resolveDocumentRowKey,
|
||||
resolveFolderRowKey,
|
||||
onSelectDocument,
|
||||
onSelectFolder,
|
||||
}) =>
|
||||
useCallback(
|
||||
(entry, event) => {
|
||||
if (!entry || !entry.id) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { type, id } = entry;
|
||||
if (type !== 'document' && type !== 'folder') {
|
||||
return;
|
||||
}
|
||||
|
||||
const rowKey = entry.key
|
||||
|| (type === 'document' ? resolveDocumentRowKey?.(id) : resolveFolderRowKey?.(id));
|
||||
if (!rowKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
const modifierClick = isPointerModifierEvent(event);
|
||||
const primaryClick = isPrimaryPointerEvent(event);
|
||||
|
||||
if (type === 'document') {
|
||||
if (typeof onSelectDocument === 'function') {
|
||||
onSelectDocument(id, event, { modifierClick, primaryClick, rowKey });
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof onSelectFolder === 'function') {
|
||||
onSelectFolder(id, event, { modifierClick, primaryClick, rowKey });
|
||||
}
|
||||
},
|
||||
[
|
||||
resolveDocumentRowKey,
|
||||
resolveFolderRowKey,
|
||||
onSelectDocument,
|
||||
onSelectFolder,
|
||||
],
|
||||
);
|
||||
|
||||
export default useEntryPointerHandler;
|
||||
Reference in New Issue
Block a user