useRecentSearches.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. import { useLocalStorage } from '@vueuse/core'
  3. import { useSessionStore } from '#shared/stores/session.ts'
  4. const RECENTLY_SEARCHES_MAX_LENGTH = 10
  5. const ADD_RECENT_SEARCH_DEBOUNCE_TIME = 1000
  6. export const useRecentSearches = (maxLength = RECENTLY_SEARCHES_MAX_LENGTH) => {
  7. const { userId } = useSessionStore()
  8. const recentSearches = useLocalStorage<string[]>(
  9. `${userId}-recentSearches`,
  10. [],
  11. )
  12. const addSearch = (search?: string) => {
  13. if (!search) return
  14. // Remove the search term if it already exists to avoid duplicates
  15. recentSearches.value = recentSearches.value.filter(
  16. (item) => item !== search,
  17. )
  18. // Add the new search term
  19. recentSearches.value.push(search)
  20. // Remove the oldest search if we exceed the maximum length
  21. if (recentSearches.value.length > maxLength) {
  22. recentSearches.value.shift()
  23. }
  24. }
  25. const removeSearch = (search: string) => {
  26. recentSearches.value = recentSearches.value.filter(
  27. (item) => item !== search,
  28. )
  29. }
  30. const clearSearches = () => {
  31. recentSearches.value = []
  32. }
  33. return {
  34. ADD_RECENT_SEARCH_DEBOUNCE_TIME,
  35. recentSearches,
  36. addSearch,
  37. removeSearch,
  38. clearSearches,
  39. }
  40. }