From 502f894def40514cceedf1801ffa69c506961519 Mon Sep 17 00:00:00 2001 From: BlossomiShymae <87099578+BlossomiShymae@users.noreply.github.com> Date: Sun, 5 May 2024 22:02:26 -0500 Subject: [PATCH] Add id and text search --- composables/useIsNumeric.ts | 5 +++++ composables/useQueryablePagination.ts | 18 +++++++++++++++ pages/summoner-emotes/index.vue | 32 +++++++++++++++++++++------ pages/summoner-icons/index.vue | 30 ++++++++++++++++++++----- pages/ward-skins/index.vue | 30 ++++++++++++++++++++----- 5 files changed, 96 insertions(+), 19 deletions(-) create mode 100644 composables/useIsNumeric.ts create mode 100644 composables/useQueryablePagination.ts diff --git a/composables/useIsNumeric.ts b/composables/useIsNumeric.ts new file mode 100644 index 0000000..5811352 --- /dev/null +++ b/composables/useIsNumeric.ts @@ -0,0 +1,5 @@ +export default function isIsNumeric() { + return { + isNumeric: (num: any) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num as number) + } +} \ No newline at end of file diff --git a/composables/useQueryablePagination.ts b/composables/useQueryablePagination.ts new file mode 100644 index 0000000..c1c2ab7 --- /dev/null +++ b/composables/useQueryablePagination.ts @@ -0,0 +1,18 @@ + +const isNumeric = (num: any) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num as number); + +export default function useQueryablePagination(iterable: Array, pageSize: number, query: Ref) { + const pagination = computed(() => { + let filtered = []; + if (isNumeric(query.value)) + filtered = iterable.filter((x: any) => x.id == parseInt(query.value, 10)); + else + filtered = iterable.filter((x) => x.title.toLowerCase().includes(query.value.toLowerCase())); + + return usePagination(icons, 100); +}) + + return { + + } +} \ No newline at end of file diff --git a/pages/summoner-emotes/index.vue b/pages/summoner-emotes/index.vue index 3256515..4e8943f 100644 --- a/pages/summoner-emotes/index.vue +++ b/pages/summoner-emotes/index.vue @@ -2,12 +2,17 @@

Summoner Emotes

- +
+ +
+ +
+ v-for="emote in p.pages[p.index.value]" :key="emote.id">
@@ -17,8 +22,8 @@
- +
@@ -26,11 +31,24 @@ import Pagination from '../../components/Pagination.vue'; import Badge from '~/components/Badge.vue'; import useClient from '../../composables/useClient'; +import useIsNumeric from '../../composables/useIsNumeric'; import usePagination from '../../composables/usePagination'; -const { client } = useClient();; +const { client } = useClient(); + +const query = ref(""); const emotes = (await client.summonerEmotes.listAsync({locale: "default", version: "latest"})) .sort((a, b) => a.id - b.id); -const { count, pages, index, prev, next, first, last } = usePagination(emotes, 24); + +const { isNumeric } = useIsNumeric(); +const p = computed(() => { + let filtered = []; + if (isNumeric(query.value)) + filtered = emotes.filter((x) => x.id == parseInt(query.value, 10)); + else + filtered = emotes.filter((x) => x.name.toLowerCase().includes(query.value.toLowerCase())); + + return usePagination(filtered, 24); +}) \ No newline at end of file diff --git a/pages/summoner-icons/index.vue b/pages/summoner-icons/index.vue index 5499af7..dbce8ec 100644 --- a/pages/summoner-icons/index.vue +++ b/pages/summoner-icons/index.vue @@ -2,8 +2,13 @@

Summoner Icons

- +
+ +
+ +
@@ -15,7 +20,7 @@ - +
{{ icon.id }} @@ -36,8 +41,8 @@
- +
@@ -45,10 +50,23 @@ import Pagination from '~/components/Pagination.vue'; import useClient from '../../composables/useClient'; import usePagination from '../../composables/usePagination'; +import useIsNumeric from '../../composables/useIsNumeric'; const { client } = useClient(); +const query = ref("") + const icons = (await client.summonerIcons.listAsync({locale: "default", version: "latest"})) .sort((a, b) => a.id - b.id); -const { count, pages, index, prev, next, first, last } = usePagination(icons, 100); + +const { isNumeric } = useIsNumeric(); +const p = computed(() => { + let filtered = []; + if (isNumeric(query.value)) + filtered = icons.filter((x) => x.id == parseInt(query.value, 10)); + else + filtered = icons.filter((x) => x.title.toLowerCase().includes(query.value.toLowerCase())); + + return usePagination(filtered, 100); +}); \ No newline at end of file diff --git a/pages/ward-skins/index.vue b/pages/ward-skins/index.vue index 32b6e83..731d722 100644 --- a/pages/ward-skins/index.vue +++ b/pages/ward-skins/index.vue @@ -2,8 +2,13 @@

Ward Skins

- +
+ +
+ +
@@ -15,7 +20,7 @@ - +
{{ skin.id }} @@ -36,18 +41,31 @@
- +
\ No newline at end of file