From af64b77b7417cfd44152150f03b0327d9d62d85e Mon Sep 17 00:00:00 2001 From: pandadev <70103896+0PandaDEV@users.noreply.github.com> Date: Sun, 16 Mar 2025 20:33:22 +0100 Subject: [PATCH] refactor: move selectedResult logic to a new plugin for better organization and maintainability --- lib/selectedResult.ts | 54 ------------------------------- plugins/selectedResult.ts | 68 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 54 deletions(-) delete mode 100644 lib/selectedResult.ts create mode 100644 plugins/selectedResult.ts diff --git a/lib/selectedResult.ts b/lib/selectedResult.ts deleted file mode 100644 index e53411b..0000000 --- a/lib/selectedResult.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { HistoryItem } from '~/types/types' - -interface GroupedHistory { - label: string - items: HistoryItem[] -} - -export const selectedGroupIndex = ref(0) -export const selectedItemIndex = ref(0) -export const selectedElement = ref(null) - -export const useSelectedResult = (groupedHistory: Ref) => { - const selectedItem = computed(() => { - const group = groupedHistory.value[selectedGroupIndex.value] - return group?.items[selectedItemIndex.value] ?? null - }) - - const isSelected = (groupIndex: number, itemIndex: number): boolean => { - return selectedGroupIndex.value === groupIndex && selectedItemIndex.value === itemIndex - } - - const selectNext = (): void => { - const currentGroup = groupedHistory.value[selectedGroupIndex.value] - if (selectedItemIndex.value < currentGroup.items.length - 1) { - selectedItemIndex.value++ - } else if (selectedGroupIndex.value < groupedHistory.value.length - 1) { - selectedGroupIndex.value++ - selectedItemIndex.value = 0 - } - } - - const selectPrevious = (): void => { - if (selectedItemIndex.value > 0) { - selectedItemIndex.value-- - } else if (selectedGroupIndex.value > 0) { - selectedGroupIndex.value-- - selectedItemIndex.value = groupedHistory.value[selectedGroupIndex.value].items.length - 1 - } - } - - const selectItem = (groupIndex: number, itemIndex: number): void => { - selectedGroupIndex.value = groupIndex - selectedItemIndex.value = itemIndex - } - - return { - selectedItem, - isSelected, - selectNext, - selectPrevious, - selectItem, - selectedElement - } -} \ No newline at end of file diff --git a/plugins/selectedResult.ts b/plugins/selectedResult.ts new file mode 100644 index 0000000..d03babd --- /dev/null +++ b/plugins/selectedResult.ts @@ -0,0 +1,68 @@ +import { ref, computed } from 'vue'; +import type { HistoryItem } from '~/types/types'; + +interface GroupedHistory { + label: string; + items: HistoryItem[]; +} + +const selectedGroupIndex = ref(0); +const selectedItemIndex = ref(0); +const selectedElement = ref(null); + +const useSelectedResult = (groupedHistory: Ref) => { + const selectedItem = computed(() => { + const group = groupedHistory.value[selectedGroupIndex.value]; + return group?.items[selectedItemIndex.value] ?? undefined; + }); + + const isSelected = (groupIndex: number, itemIndex: number): boolean => { + return selectedGroupIndex.value === groupIndex && selectedItemIndex.value === itemIndex; + }; + + const selectNext = (): void => { + const currentGroup = groupedHistory.value[selectedGroupIndex.value]; + if (selectedItemIndex.value < currentGroup.items.length - 1) { + selectedItemIndex.value++; + } else if (selectedGroupIndex.value < groupedHistory.value.length - 1) { + selectedGroupIndex.value++; + selectedItemIndex.value = 0; + } + }; + + const selectPrevious = (): void => { + if (selectedItemIndex.value > 0) { + selectedItemIndex.value--; + } else if (selectedGroupIndex.value > 0) { + selectedGroupIndex.value--; + selectedItemIndex.value = groupedHistory.value[selectedGroupIndex.value].items.length - 1; + } + }; + + const selectItem = (groupIndex: number, itemIndex: number): void => { + selectedGroupIndex.value = groupIndex; + selectedItemIndex.value = itemIndex; + }; + + return { + selectedItem, + isSelected, + selectNext, + selectPrevious, + selectItem, + selectedElement + }; +}; + +export default defineNuxtPlugin(() => { + return { + provide: { + selectedResult: { + selectedGroupIndex, + selectedItemIndex, + selectedElement, + useSelectedResult + } + } + }; +}); \ No newline at end of file