diff --git a/resources/assets/src/views/user/Closet/index.tsx b/resources/assets/src/views/user/Closet/index.tsx index ee16db88..45c31551 100644 --- a/resources/assets/src/views/user/Closet/index.tsx +++ b/resources/assets/src/views/user/Closet/index.tsx @@ -71,9 +71,19 @@ const Closet: React.FC = () => { getItems() }, [category, query, page]) - const switchCategoryToSkin = () => setCategory('skin') + const switchCategoryToSkin = () => { + if (category !== 'skin') { + setCategory('skin') + setPage(1) + } + } - const switchCategoryToCape = () => setCategory('cape') + const switchCategoryToCape = () => { + if (category !== 'cape') { + setCategory('cape') + setPage(1) + } + } const handleSearch = (event: React.ChangeEvent) => { const value = event.target.value diff --git a/resources/assets/tests/utils.ts b/resources/assets/tests/utils.ts index 0f0420a5..b5f5cf4f 100644 --- a/resources/assets/tests/utils.ts +++ b/resources/assets/tests/utils.ts @@ -4,13 +4,13 @@ export function flushPromises() { return new Promise((resolve) => setImmediate(resolve)) } -export function createPaginator(data: T[]): Paginator { +export function createPaginator(data: T[], perPage = 6): Paginator { return { data, total: data.length, from: 1, to: data.length, current_page: 1, - last_page: 1, + last_page: Math.ceil(data.length / perPage), } } diff --git a/resources/assets/tests/views/user/Closet.test.tsx b/resources/assets/tests/views/user/Closet.test.tsx index f89b1ce9..4d0dbd17 100644 --- a/resources/assets/tests/views/user/Closet.test.tsx +++ b/resources/assets/tests/views/user/Closet.test.tsx @@ -128,6 +128,57 @@ describe('switch category', () => { fireEvent.click(getByText(t('general.skin'))) await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) }) + + it('reset page', async () => { + fetch.get + .mockResolvedValueOnce( + createPaginator( + Array.from({ length: 30 }).map((_, i) => ({ + ...fixtureSkin, + tid: i + 1, + })), + ), + ) + .mockResolvedValueOnce( + createPaginator( + Array.from({ length: 30 }).map((_, i) => ({ + ...fixtureSkin, + tid: i + 1, + })), + ), + ) + .mockResolvedValueOnce(createPaginator([fixtureCape])) + + const { getByText } = render() + await waitFor(() => + expect(fetch.get).toBeCalledWith(urls.user.closet.list(), { + category: 'skin', + q: '', + page: 1, + perPage: 6, + }), + ) + + fireEvent.click(getByText('3')) + await waitFor(() => + expect(fetch.get).toBeCalledWith(urls.user.closet.list(), { + category: 'skin', + q: '', + page: 3, + perPage: 6, + }), + ) + + fireEvent.click(getByText(t('general.cape'))) + await waitFor(() => + expect(fetch.get).toBeCalledWith(urls.user.closet.list(), { + category: 'cape', + q: '', + page: 1, + perPage: 6, + }), + ) + }) }) describe('rename item', () => {