Skip to content

Commit 47ee7a5

Browse files
committed
fix(search): rework the code matching and search
1 parent 2457645 commit 47ee7a5

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/stores/data/history.store.ts

+15-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import type { TraktHistory } from '~/models/trakt/trakt-history.model';
66

77
import { TraktService } from '~/services/trakt.service';
88

9+
const codesRegex = /[sS]?\d+([eExX])\d+/g;
10+
const getCodeRegex = (season: number, episode: number) => new RegExp(`^[sS]?0*${season}([eExX])0*${episode}$`);
11+
912
export const useHistoryStore = defineStore('data.history', () => {
1013
const loading = ref(true);
1114
const pageSize = ref(100);
@@ -29,19 +32,21 @@ export const useHistoryStore = defineStore('data.history', () => {
2932
const searchHistory = ref('');
3033
const filteredHistory = computed<TraktHistory[]>(() => {
3134
if (!searchHistory.value) return history.value;
35+
const _searchRaw = searchHistory.value.toLowerCase().trim();
36+
const _searchCode = _searchRaw.match(codesRegex);
37+
const _search = _searchRaw.replace(codesRegex, '').trim();
3238
return history.value.filter((item: TraktHistory) => {
33-
if ('movie' in item && item.movie?.title?.toLowerCase().includes(searchHistory.value.toLowerCase())) return true;
34-
if ('show' in item && item.show.title?.toLowerCase().includes(searchHistory.value.toLowerCase())) return true;
3539
if ('episode' in item) {
36-
if (item.episode?.title?.toLowerCase().includes(searchHistory.value.toLowerCase())) return true;
37-
38-
const shorthands = [
39-
`s${item.episode?.season?.toString().padStart(2, '0')}e${item.episode?.number?.toString().padStart(2, '0')}`,
40-
`${item.episode?.season}x${item.episode?.number}`,
41-
];
42-
if (shorthands.some(shorthand => searchHistory.value.toLowerCase().includes(shorthand))) return true;
40+
const codeRegex = getCodeRegex(item.episode.season, item.episode.number);
41+
const matchCode = _searchCode?.some(_code => codeRegex.test(_code));
42+
if (_search && item.episode?.title?.toLowerCase().includes(_search)) return _searchCode ? matchCode : true;
43+
if (_search && 'show' in item && item.show.title?.toLowerCase().includes(_search)) return _searchCode ? matchCode : true;
44+
if (codeRegex.test(_searchRaw)) return true;
4345
}
44-
return !!(item?.watched_at && new Date(item.watched_at).toLocaleString().toLowerCase().includes(searchHistory.value.toLowerCase()));
46+
if (!_search) return false;
47+
if ('show' in item && item.show.title?.toLowerCase().includes(_search)) return true;
48+
if ('movie' in item && item.movie?.title?.toLowerCase().includes(_search)) return true;
49+
return !!(item?.watched_at && new Date(item.watched_at).toLocaleString().toLowerCase().includes(_search));
4550
});
4651
});
4752

0 commit comments

Comments
 (0)