feat: Extend card action shortcuts

This commit is contained in:
Maksim Eltyshev
2025-11-24 15:02:26 +01:00
parent 561d2c77d4
commit c68ab99bfe
5 changed files with 104 additions and 38 deletions

View File

@@ -18,6 +18,7 @@ import { isModifierKeyPressed } from '../../../utils/event-helpers';
import { BoardShortcutsContext } from '../../../contexts';
import Paths from '../../../constants/Paths';
import { BoardMembershipRoles, ListTypes } from '../../../constants/Enums';
import CardActionsStep from '../../cards/CardActionsStep';
const canEditCardName = (boardMembership, list) => {
if (isListArchiveOrTrash(list)) {
@@ -35,6 +36,14 @@ const canArchiveCard = (boardMembership, list) => {
return boardMembership && boardMembership.role === BoardMembershipRoles.EDITOR;
};
const canUseCardMembers = (boardMembership, list) => {
if (isListArchiveOrTrash(list)) {
return false;
}
return boardMembership && boardMembership.role === BoardMembershipRoles.EDITOR;
};
const canUseCardLabels = (boardMembership, list) => {
if (isListArchiveOrTrash(list)) {
return false;
@@ -50,11 +59,11 @@ const ShortcutsProvider = React.memo(({ children }) => {
const selectedCardRef = useRef(null);
const handleCardMouseEnter = useCallback((id, editName, archive) => {
const handleCardMouseEnter = useCallback((id, editName, openActions) => {
selectedCardRef.current = {
id,
editName,
archive,
openActions,
};
}, []);
@@ -128,7 +137,51 @@ const ShortcutsProvider = React.memo(({ children }) => {
return;
}
selectedCardRef.current.archive();
selectedCardRef.current.openActions(CardActionsStep.StepTypes.ARCHIVE);
};
const handleCardMembers = () => {
if (!selectedCardRef.current) {
return;
}
const state = store.getState();
const card = selectors.selectCardById(state, selectedCardRef.current.id);
if (!card || !card.isPersisted) {
return;
}
const boardMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
const list = selectors.selectListById(state, card.listId);
if (!canUseCardMembers(boardMembership, list)) {
return;
}
selectedCardRef.current.openActions(CardActionsStep.StepTypes.MEMBERS);
};
const handleCardLabels = () => {
if (!selectedCardRef.current) {
return;
}
const state = store.getState();
const card = selectors.selectCardById(state, selectedCardRef.current.id);
if (!card || !card.isPersisted) {
return;
}
const boardMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
const list = selectors.selectListById(state, card.listId);
if (!canUseCardLabels(boardMembership, list)) {
return;
}
selectedCardRef.current.openActions(CardActionsStep.StepTypes.LABELS);
};
const handleLabelToCardAdd = (index) => {
@@ -179,6 +232,16 @@ const ShortcutsProvider = React.memo(({ children }) => {
case 'Enter':
handleCardOpen();
break;
case 'KeyL':
event.preventDefault();
handleCardLabels();
break;
case 'KeyM':
event.preventDefault();
handleCardMembers();
break;
case 'KeyT':
event.preventDefault();