From 12695a53aef44c2621a5469bc84d63663149843d Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 3 Dec 2020 21:03:00 +0900 Subject: [PATCH] [Improve] renders study list and Fixed eslint error --- .eslintrc.js | 1 + src/reducers/slice.js | 14 ++++--------- src/reducers/slice.test.js | 40 ++++++++++---------------------------- src/services/api.js | 12 ++++++++++-- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 65a726b..e2280f2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,6 +27,7 @@ module.exports = { plugins: [ 'react', ], + ignorePatterns: ['build/', 'node_modules/'], rules: { indent: ['error', 2], 'no-trailing-spaces': 'error', diff --git a/src/reducers/slice.js b/src/reducers/slice.js index 68e6154..06c01c9 100644 --- a/src/reducers/slice.js +++ b/src/reducers/slice.js @@ -50,16 +50,10 @@ const { actions, reducer } = createSlice({ }, reducers: { - setStudyGroups(state, { payload: { groups, tag } }) { + setStudyGroups(state, { payload: groups }) { return { ...state, - groups: tag ? groups.reduce((studies, group) => { - if (group.tags.includes(tag)) { - return [...studies, group]; - } - - return studies; - }, []) : groups, + groups, }; }, @@ -167,9 +161,9 @@ export const { } = actions; export const loadStudyGroups = (tag) => async (dispatch) => { - const groups = await getStudyGroups(); + const groups = await getStudyGroups(tag); - dispatch(setStudyGroups({ groups, tag })); + dispatch(setStudyGroups(groups)); }; export const loadStudyGroup = (id) => async (dispatch) => { diff --git a/src/reducers/slice.test.js b/src/reducers/slice.test.js index 5bc8f7e..6b31c36 100644 --- a/src/reducers/slice.test.js +++ b/src/reducers/slice.test.js @@ -72,34 +72,17 @@ describe('reducer', () => { }); describe('setStudyGroups', () => { - context('with tag', () => { - it('get study groups list with tags filtered', () => { - const initialState = { - groups: [], - }; - - const state = reducer( - initialState, - setStudyGroups({ groups: STUDY_GROUPS, tag: 'JavaScript' }), - ); - - expect(state.groups).toHaveLength(1); - }); - }); - - context('without tag', () => { - it("get study groups list doesn't tags filtered", () => { - const initialState = { - groups: [], - }; + it('get study groups list', () => { + const initialState = { + groups: [], + }; - const state = reducer( - initialState, - setStudyGroups({ groups: STUDY_GROUPS, tag: '' }), - ); + const state = reducer( + initialState, + setStudyGroups(STUDY_GROUPS), + ); - expect(state.groups).toHaveLength(2); - }); + expect(state.groups).toHaveLength(2); }); }); @@ -315,10 +298,7 @@ describe('async actions', () => { const actions = store.getActions(); - expect(actions[0]).toEqual(setStudyGroups({ - groups: [], - tag: undefined, - })); + expect(actions[0]).toEqual(setStudyGroups([])); }); }); diff --git a/src/services/api.js b/src/services/api.js index 499bb83..eb46475 100644 --- a/src/services/api.js +++ b/src/services/api.js @@ -1,7 +1,15 @@ import { db, auth } from './firebase'; -export const getStudyGroups = async () => { - const response = await db.collection('groups').get(); +const branchGetGroups = (tag) => { + if (tag) { + return db.collection('groups').where('tags', 'array-contains', tag).get(); + } + + return db.collection('groups').get(); +}; + +export const getStudyGroups = async (tag) => { + const response = await branchGetGroups(tag); const groups = response.docs.map((doc) => ({ ...doc.data(),