Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';
|
|
|
|
export function useChatListKeyboardEvents(listRef) {
|
|
const getKeyboardListenerParams = () => {
|
|
const allConversations = listRef.value.querySelectorAll(
|
|
'div.conversations-list div.conversation'
|
|
);
|
|
const activeConversation = listRef.value.querySelector(
|
|
'div.conversations-list div.conversation.active'
|
|
);
|
|
const activeConversationIndex = [...allConversations].indexOf(
|
|
activeConversation
|
|
);
|
|
const lastConversationIndex = allConversations.length - 1;
|
|
return {
|
|
allConversations,
|
|
activeConversation,
|
|
activeConversationIndex,
|
|
lastConversationIndex,
|
|
};
|
|
};
|
|
|
|
const handleConversationNavigation = direction => {
|
|
const { allConversations, activeConversationIndex, lastConversationIndex } =
|
|
getKeyboardListenerParams();
|
|
|
|
// Determine the new index based on the direction
|
|
const newIndex =
|
|
direction === 'previous'
|
|
? activeConversationIndex - 1
|
|
: activeConversationIndex + 1;
|
|
|
|
// Check if the new index is within the valid range
|
|
if (
|
|
allConversations.length > 0 &&
|
|
newIndex >= 0 &&
|
|
newIndex <= lastConversationIndex
|
|
) {
|
|
// Click the conversation at the new index
|
|
allConversations[newIndex].click();
|
|
} else if (allConversations.length > 0) {
|
|
// If the new index is out of range, click the first or last conversation based on the direction
|
|
const fallbackIndex =
|
|
direction === 'previous' ? 0 : lastConversationIndex;
|
|
allConversations[fallbackIndex].click();
|
|
}
|
|
};
|
|
const keyboardEvents = {
|
|
'Alt+KeyJ': {
|
|
action: () => handleConversationNavigation('previous'),
|
|
allowOnFocusedInput: true,
|
|
},
|
|
'Alt+KeyK': {
|
|
action: () => handleConversationNavigation('next'),
|
|
allowOnFocusedInput: true,
|
|
},
|
|
};
|
|
|
|
useKeyboardEvents(keyboardEvents);
|
|
}
|