Improved how tags are exposed by the ApiClient when listing tags

This commit is contained in:
Alejandro Celaya
2020-05-10 11:20:40 +02:00
parent 67c674f073
commit 6fd30ed51a
4 changed files with 6 additions and 5 deletions

View File

@@ -61,14 +61,14 @@ export const listTags = (buildShlinkApiClient, force = true) => () => async (dis
try { try {
const { listTags } = buildShlinkApiClient(getState); const { listTags } = buildShlinkApiClient(getState);
const { stats = [], data } = await listTags(); const { tags, stats = [] } = await listTags();
const processedStats = stats.reduce((acc, { tag, shortUrlsCount, visitsCount }) => { const processedStats = stats.reduce((acc, { tag, shortUrlsCount, visitsCount }) => {
acc[tag] = { shortUrlsCount, visitsCount }; acc[tag] = { shortUrlsCount, visitsCount };
return acc; return acc;
}, {}); }, {});
dispatch({ tags: data, stats: processedStats, type: LIST_TAGS }); dispatch({ tags, stats: processedStats, type: LIST_TAGS });
} catch (e) { } catch (e) {
dispatch({ type: LIST_TAGS_ERROR }); dispatch({ type: LIST_TAGS_ERROR });
} }

View File

@@ -54,7 +54,8 @@ export default class ShlinkApiClient {
listTags = () => listTags = () =>
this._performRequest('/tags', 'GET', { withStats: 'true' }) this._performRequest('/tags', 'GET', { withStats: 'true' })
.then((resp) => resp.data.tags); .then((resp) => resp.data.tags)
.then(({ data, stats }) => ({ tags: data, stats }));
deleteTags = (tags) => deleteTags = (tags) =>
this._performRequest('/tags', 'DELETE', { tags }) this._performRequest('/tags', 'DELETE', { tags })

View File

@@ -103,7 +103,7 @@ describe('tagsListReducer', () => {
it('dispatches loaded lists when no error occurs', async () => { it('dispatches loaded lists when no error occurs', async () => {
const tags = [ 'foo', 'bar', 'baz' ]; const tags = [ 'foo', 'bar', 'baz' ];
listTagsMock.mockResolvedValue({ data: tags, stats: [] }); listTagsMock.mockResolvedValue({ tags, stats: [] });
buildShlinkApiClient.mockReturnValue({ listTags: listTagsMock }); buildShlinkApiClient.mockReturnValue({ listTags: listTagsMock });
await listTags(buildShlinkApiClient, true)()(dispatch, getState); await listTags(buildShlinkApiClient, true)()(dispatch, getState);

View File

@@ -141,7 +141,7 @@ describe('ShlinkApiClient', () => {
const result = await listTags(); const result = await listTags();
expect({ data: expectedTags }).toEqual(result); expect({ tags: expectedTags }).toEqual(result);
expect(axiosSpy).toHaveBeenCalledWith(expect.objectContaining({ url: '/tags', method: 'GET' })); expect(axiosSpy).toHaveBeenCalledWith(expect.objectContaining({ url: '/tags', method: 'GET' }));
}); });
}); });