diff --git a/client/coral-admin/src/actions/assets.js b/client/coral-admin/src/actions/assets.js index 75bd2477d..b9ebe0ada 100644 --- a/client/coral-admin/src/actions/assets.js +++ b/client/coral-admin/src/actions/assets.js @@ -35,7 +35,7 @@ export const fetchAssets = (skip = '', limit = '', search = '', sort = '', filte // Update an asset state // Get comments to fill each of the three lists on the mod queue export const updateAssetState = (id, closedAt) => (dispatch) => { - dispatch({type: UPDATE_ASSET_STATE_REQUEST}); + dispatch({type: UPDATE_ASSET_STATE_REQUEST, id, closedAt}); return coralApi(`/assets/${id}/status`, {method: 'PUT', body: {closedAt}}) .then(() => dispatch({type: UPDATE_ASSET_STATE_SUCCESS})) .catch((error) => { diff --git a/client/coral-admin/src/actions/install.js b/client/coral-admin/src/actions/install.js index 33cefab63..6393c58dd 100644 --- a/client/coral-admin/src/actions/install.js +++ b/client/coral-admin/src/actions/install.js @@ -93,21 +93,21 @@ const validation = (formData, dispatch, next) => { }; export const submitSettings = () => (dispatch, getState) => { - const settingsFormData = getState().install.toJS().data.settings; + const settingsFormData = getState().install.data.settings; validation(settingsFormData, dispatch, function() { dispatch(nextStep()); }); }; export const submitUser = () => (dispatch, getState) => { - const userFormData = getState().install.toJS().data.user; + const userFormData = getState().install.data.user; validation(userFormData, dispatch, function() { dispatch(nextStep()); }); }; export const finishInstall = () => (dispatch, getState) => { - const data = getState().install.toJS().data; + const data = getState().install.data; dispatch(installRequest()); return coralApi('/setup', {method: 'POST', body: data}) .then(() => { diff --git a/client/coral-admin/src/actions/settings.js b/client/coral-admin/src/actions/settings.js index ba8b917ea..ca9062b9e 100644 --- a/client/coral-admin/src/actions/settings.js +++ b/client/coral-admin/src/actions/settings.js @@ -42,7 +42,7 @@ export const updateDomainlist = (listName, list) => { }; export const saveSettingsToServer = () => (dispatch, getState) => { - let settings = getState().settings.toJS(); + let settings = getState().settings; if (settings.charCount) { settings.charCount = parseInt(settings.charCount); } diff --git a/client/coral-admin/src/containers/Layout.js b/client/coral-admin/src/containers/Layout.js index 8b119fb72..ae022f2ef 100644 --- a/client/coral-admin/src/containers/Layout.js +++ b/client/coral-admin/src/containers/Layout.js @@ -74,10 +74,8 @@ class LayoutContainer extends Component { } const mapStateToProps = (state) => ({ - auth: state.auth.toJS(), - TALK_RECAPTCHA_PUBLIC: state.config - .get('data') - .get('TALK_RECAPTCHA_PUBLIC', null) + auth: state.auth, + TALK_RECAPTCHA_PUBLIC: state.config.data.TALK_RECAPTCHA_PUBLIC, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/client/coral-admin/src/containers/UserDetail.js b/client/coral-admin/src/containers/UserDetail.js index e59629a85..2ae6e4c9c 100644 --- a/client/coral-admin/src/containers/UserDetail.js +++ b/client/coral-admin/src/containers/UserDetail.js @@ -169,8 +169,8 @@ const mapStateToProps = (state) => ({ selectedCommentIds: state.userDetail.selectedCommentIds, statuses: state.userDetail.statuses, activeTab: state.userDetail.activeTab, - bannedWords: state.settings.toJS().wordlist.banned, - suspectWords: state.settings.toJS().wordlist.suspect, + bannedWords: state.settings.wordlist.banned, + suspectWords: state.settings.wordlist.suspect, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/client/coral-admin/src/reducers/assets.js b/client/coral-admin/src/reducers/assets.js index 03f0be9bb..bb8751973 100644 --- a/client/coral-admin/src/reducers/assets.js +++ b/client/coral-admin/src/reducers/assets.js @@ -1,35 +1,40 @@ -import {Map, List, fromJS} from 'immutable'; import * as actions from '../constants/assets'; +import update from 'immutability-helper'; -const initialState = Map({ - byId: Map(), - ids: List(), - assets: List() -}); +const initialState = { + byId: {}, + ids: [], + assets: [] +}; export default function assets (state = initialState, action) { switch (action.type) { - case actions.FETCH_ASSETS_SUCCESS: - return replaceAssets(action, state); + case actions.FETCH_ASSETS_SUCCESS: { + const assets = action.assets.reduce((prev, curr) => { + prev[curr.id] = curr; + return prev; + }, {}); + + return update(state, { + byId: {$set: assets}, + count: {$set: action.count}, + ids: {$set: Object.keys(assets)}, + }); + } case actions.UPDATE_ASSET_STATE_REQUEST: - return state - .setIn(['byId', action.id, 'closedAt'], action.closedAt); + return update(state, { + byId: { + [action.id]: { + closedAt: {$set: action.closedAt}, + }, + }, + }); case actions.UPDATE_ASSETS: - return state - .set('assets', List(action.assets)); + return update(state, { + assets: {$set: action.assets}, + }); default: return state; } } -const replaceAssets = (action, state) => { - const assets = fromJS(action.assets.reduce((prev, curr) => { - prev[curr.id] = curr; - return prev; - }, {})); - - return state - .set('byId', assets) - .set('count', action.count) - .set('ids', List(assets.keys())); -}; diff --git a/client/coral-admin/src/reducers/auth.js b/client/coral-admin/src/reducers/auth.js index a60d73cec..a9c7f520e 100644 --- a/client/coral-admin/src/reducers/auth.js +++ b/client/coral-admin/src/reducers/auth.js @@ -1,43 +1,63 @@ -import {Map} from 'immutable'; import * as actions from '../constants/auth'; -const initialState = Map({ +const initialState = { loggedIn: false, user: null, loginError: null, loginMaxExceeded: false, passwordRequestSuccess: null -}); +}; export default function auth (state = initialState, action) { switch (action.type) { case actions.CHECK_LOGIN_REQUEST: - return state - .set('loadingUser', true); + return { + ...state, + loadingUser: true, + }; case actions.CHECK_LOGIN_FAILURE: - return state - .set('loggedIn', false) - .set('loadingUser', false) - .set('user', null); + return { + ...state, + loggedIn: false, + loadingUser: false, + user: null, + }; case actions.CHECK_LOGIN_SUCCESS: - return state - .set('loggedIn', true) - .set('loadingUser', false) - .set('user', action.user); + return { + ...state, + loggedIn: true, + loadingUser: false, + user: action.user, + }; case actions.LOGOUT: return initialState; case actions.LOGIN_SUCCESS: - return state.set('loginMaxExceeded', false).set('loginError', null); + return { + ...state, + loginMaxExceeded: false, + loginError: null, + }; case actions.LOGIN_FAILURE: - return state.set('loginError', action.message); + return { + ...state, + loginError: action.message, + }; case actions.FETCH_FORGOT_PASSWORD_REQUEST: - return state.set('passwordRequestSuccess', null); + return { + ...state, + passwordRequestSuccess: null, + }; case actions.FETCH_FORGOT_PASSWORD_SUCCESS: - return state.set('passwordRequestSuccess', 'If you have a registered account, a password reset link was sent to that email.'); + return { + ...state, + passwordRequestSuccess: 'If you have a registered account, a password reset link was sent to that email.', + }; case actions.LOGIN_MAXIMUM_EXCEEDED: - return state - .set('loginMaxExceeded', true) - .set('loginError', action.message); + return { + ...state, + loginMaxExceeded: true, + loginError: action.message, + }; default : return state; } diff --git a/client/coral-admin/src/reducers/community.js b/client/coral-admin/src/reducers/community.js index 3fba504f8..9f724c8d6 100644 --- a/client/coral-admin/src/reducers/community.js +++ b/client/coral-admin/src/reducers/community.js @@ -1,5 +1,3 @@ -import {Map} from 'immutable'; - import { FETCH_COMMENTERS_REQUEST, FETCH_COMMENTERS_FAILURE, @@ -13,8 +11,8 @@ import { HIDE_REJECT_USERNAME_DIALOG } from '../constants/community'; -const initialState = Map({ - community: Map(), +const initialState = { + community: {}, isFetchingPeople: false, errorPeople: '', accounts: [], @@ -22,72 +20,87 @@ const initialState = Map({ ascPeople: false, totalPagesPeople: 0, pagePeople: 0, - user: Map({}), + user: {}, banDialog: false, rejectUsernameDialog: false -}); +}; export default function community (state = initialState, action) { switch (action.type) { case FETCH_COMMENTERS_REQUEST : - return state - .set('isFetchingPeople', true); + return { + ...state, + isFetchingPeople: true, + }; case FETCH_COMMENTERS_FAILURE : - return state - .set('isFetchingPeople', false) - .set('errorPeople', action.error); - + return { + ...state, + isFetchingPeople: false, + errorPeople: action.error, + }; case FETCH_COMMENTERS_SUCCESS : { const {accounts, type, page, count, limit, totalPages, ...rest} = action; // eslint-disable-line - return state - .merge({ - isFetchingPeople: false, - errorPeople: '', - pagePeople: page, - countPeople: count, - limitPeople: limit, - totalPagesPeople: totalPages, - ...rest - }) - .set('accounts', accounts); // Sets to normal array + return { + ...state, + isFetchingPeople: false, + errorPeople: '', + pagePeople: page, + countPeople: count, + limitPeople: limit, + totalPagesPeople: totalPages, + ...rest, + accounts, // Sets to normal array + }; } case SET_ROLE : { - const commenters = state.get('accounts'); + const commenters = state.accounts; const idx = commenters.findIndex((el) => el.id === action.id); commenters[idx].roles[0] = action.role; - return state.set('accounts', commenters.map((id) => id)); + return { + ...state, + accounts: commenters.map((id) => id), + }; } case SET_COMMENTER_STATUS: { - const commenters = state.get('accounts'); + const commenters = state.accounts; const idx = commenters.findIndex((el) => el.id === action.id); commenters[idx].status = action.status; - return state.set('accounts', commenters.map((id) => id)); + return { + ...state, + accounts: commenters.map((id) => id), + }; } case SORT_UPDATE : - return state - .set('fieldPeople', action.sort.field) - .set('ascPeople', !state.get('ascPeople')); + return { + ...state, + fieldPeople: action.sort.field, + ascPeople: !state.ascPeople, + }; case HIDE_BANUSER_DIALOG: - return state - .set('banDialog', false); + return { + ...state, + banDialog: false, + }; case SHOW_BANUSER_DIALOG: - return state - .merge({ - user: Map(action.user), - banDialog: true - }); + return { + ...state, + user: action.user, + banDialog: true, + }; case HIDE_REJECT_USERNAME_DIALOG: - return state - .set('rejectUsernameDialog', false); + return { + ...state, + rejectUsernameDialog: false, + }; case SHOW_REJECT_USERNAME_DIALOG: - return state - .merge({ - user: Map(action.user), - rejectUsernameDialog: true - }); + return { + ...state, + user: action.user, + rejectUsernameDialog: true + }; default : return state; } diff --git a/client/coral-admin/src/reducers/config.js b/client/coral-admin/src/reducers/config.js index a5d11d6eb..310a198ed 100644 --- a/client/coral-admin/src/reducers/config.js +++ b/client/coral-admin/src/reducers/config.js @@ -1,15 +1,16 @@ -import {Map} from 'immutable'; - import * as actions from '../actions/config'; -const initialState = Map({ - data: Map({}) -}); +const initialState = { + data: {} +}; export default function config (state = initialState, action) { switch (action.type) { case actions.CONFIG_UPDATED: - return state.set('data', Map(action.data)); + return { + ...state, + data: action.data, + }; default: return state; } diff --git a/client/coral-admin/src/reducers/install.js b/client/coral-admin/src/reducers/install.js index 1f0f079ff..c6e85c69f 100644 --- a/client/coral-admin/src/reducers/install.js +++ b/client/coral-admin/src/reducers/install.js @@ -1,30 +1,29 @@ -import {Map, List} from 'immutable'; - import * as actions from '../constants/install'; +import update from 'immutability-helper'; -const initialState = Map({ +const initialState = { isLoading: false, - data: Map({ - settings: Map({ + data: { + settings: { organizationName: '', - domains: Map({ - whitelist: List() - }) - }), - user: Map({ + domains: { + whitelist: [], + } + }, + user: { username: '', email: '', password: '', confirmPassword: '' - }) - }), - errors: Map({ + } + }, + errors: { organizationName: '', username: '', email: '', password: '', confirmPassword: '' - }), + }, showErrors: false, hasError: false, error: null, @@ -44,57 +43,91 @@ const initialState = Map({ installRequest: null, installRequestError: null, alreadyInstalled: false -}); +}; export default function install (state = initialState, action) { switch (action.type) { case actions.NEXT_STEP: - return state - .set('step', state.get('step') + 1); + return { + ...state, + step: state.step + 1, + }; case actions.PREVIOUS_STEP: - return state - .set('step', state.get('step') - 1); + return { + ...state, + step: state.step - 1, + }; case actions.GO_TO_STEP: - return state - .set('step', action.step); + return { + ...state, + step: action.step, + }; case actions.UPDATE_PERMITTED_DOMAINS_SETTINGS: - return state - .setIn(['data', 'settings', 'domains', 'whitelist'], action.value); + return update(state, { + data: { + settings: { + domains: { + whitelist: {$set: action.value}, + }, + }, + }, + }); case actions.UPDATE_FORMDATA_SETTINGS: - return state - .setIn(['data', 'settings', action.name], action.value); + return update(state, { + data: { + settings: { + [action.name]: {$set: action.value}, + }, + }, + }); case actions.UPDATE_FORMDATA_USER: - return state - .setIn(['data', 'user', action.name], action.value); + return update(state, { + data: { + user: { + [action.name]: {$set: action.value}, + }, + }, + }); case actions.HAS_ERROR: - return state - .merge({ - hasError: true, - showErrors: true - }); + return { + ...state, + hasError: true, + showErrors: true, + }; case actions.ADD_ERROR: - return state - .setIn(['errors', action.name], action.error); + return update(state, { + errors: { + [action.name]: {$set: action.error}, + }, + }); case actions.CLEAR_ERRORS: - return state - .set('errors', Map()); + return { + ...state, + errors: {}, + }; case actions.INSTALL_REQUEST: - return state - .set('isLoading', true); + return { + ...state, + isLoading: true, + }; case actions.INSTALL_SUCCESS: - return state - .set('isLoading', false) - .set('installRequest', 'SUCCESS'); + return { + ...state, + isLoading: false, + installRequest: 'SUCCESS', + }; case actions.INSTALL_FAILURE: - return state - .merge({ - isLoading: false, - installRequest: 'FAILURE', - installRequestError: action.error - }); + return { + ...state, + isLoading: false, + installRequest: 'FAILURE', + installRequestError: action.error + }; case actions.CHECK_INSTALL_SUCCESS: - return state - .set('alreadyInstalled', action.installed); + return { + ...state, + alreadyInstalled: action.installed, + }; default : return state; } diff --git a/client/coral-admin/src/reducers/moderation.js b/client/coral-admin/src/reducers/moderation.js index a0cba1f5f..e0a608488 100644 --- a/client/coral-admin/src/reducers/moderation.js +++ b/client/coral-admin/src/reducers/moderation.js @@ -1,37 +1,54 @@ -import {fromJS} from 'immutable'; import * as actions from '../constants/moderation'; -const initialState = fromJS({ +const initialState = { singleView: false, modalOpen: false, storySearchVisible: false, storySearchString: '', shortcutsNoteVisible: window.localStorage.getItem('coral:shortcutsNote') || 'show', sortOrder: 'REVERSE_CHRONOLOGICAL', -}); +}; export default function moderation (state = initialState, action) { switch (action.type) { case actions.MODERATION_CLEAR_STATE: return initialState; case actions.TOGGLE_MODAL: - return state - .set('modalOpen', action.open); + return { + ...state, + modalOpen: action.open, + }; case actions.SINGLE_VIEW: - return state - .set('singleView', !state.get('singleView')); + return { + ...state, + singleView: !state.singleView, + }; case actions.HIDE_SHORTCUTS_NOTE: - return state - .set('shortcutsNoteVisible', 'hide'); + return { + ...state, + shortcutsNoteVisible: 'hide', + }; case actions.SHOW_STORY_SEARCH: - return state.set('storySearchVisible', true); + return { + ...state, + storySearchVisible: true, + }; case actions.HIDE_STORY_SEARCH: - return state.set('storySearchVisible', false); + return { + ...state, + storySearchVisible: false, + }; case actions.STORY_SEARCH_CHANGE_VALUE: - return state.set('storySearchString', action.value); + return { + ...state, + storySearchString: action.value, + }; case actions.SET_SORT_ORDER: - return state.set('sortOrder', action.order); - default : + return { + ...state, + sortOrder: action.order, + }; + default: return state; } } diff --git a/client/coral-admin/src/reducers/settings.js b/client/coral-admin/src/reducers/settings.js index 67907b327..6e29ba719 100644 --- a/client/coral-admin/src/reducers/settings.js +++ b/client/coral-admin/src/reducers/settings.js @@ -1,5 +1,5 @@ -import {Map, List} from 'immutable'; import * as actions from '../actions/settings'; +import update from 'immutability-helper'; // this is initialized here because // currently you have to reload the dashboard to get new stats @@ -10,63 +10,80 @@ const DASHBOARD_WINDOW_MINUTES = 5; let then = new Date(); then.setMinutes(then.getMinutes() - DASHBOARD_WINDOW_MINUTES); -const initialState = Map({ - wordlist: Map({ - banned: List(), - suspect: List() - }), +const initialState = { + wordlist: { + banned: [], + suspect: [] + }, dashboardWindowStart: then.toISOString(), dashboardWindowEnd: new Date().toISOString(), - domains: Map({ - whitelist: List() - }), + domains: { + whitelist: [] + }, saveSettingsError: null, fetchSettingsError: null, fetchingSettings: false -}); +}; export default function settings (state = initialState, action) { switch (action.type) { case actions.SETTINGS_LOADING: - return state - .set('fetchingSettings', true) - .set('fetchSettingsError', null); + return { + ...state, + fetchingSettings: true, + fetchSettingsError: null, + }; case actions.SETTINGS_RECEIVED: - return state.merge({ + return { + ...state, fetchingSettings: false, fetchSettingsError: null, ...action.settings - }); + }; case actions.SETTINGS_FETCH_ERROR: - return state - .set('fetchingSettings', false) - .set('fetchSettingsError', action.error); + return { + ...state, + fetchingSettings: false, + fetchSettingsError: action.error, + }; case actions.SETTINGS_UPDATED: - return state.merge({ + return { + ...state, fetchingSettings: false, fetchSettingsError: null, ...action.settings - }); + }; case actions.SAVE_SETTINGS_LOADING: - return state - .set('fetchingSettings', true) - .set('saveSettingsError', null); + return { + ...state, + fetchingSettings: true, + saveSettingsError: null, + }; case actions.SAVE_SETTINGS_SUCCESS: - return state.merge({ + return { + ...state, fetchingSettings: false, fetchSettingsError: null, ...action.settings - }); + }; case actions.SAVE_SETTINGS_FAILED: - return state - .set('fetchingSettings', false) - .set('fetchSettingsError', action.error); + return { + ...state, + fetchingSettings: false, + fetchSettingsError: action.error, + }; case actions.WORDLIST_UPDATED: - return state - .setIn(['wordlist', action.listName], action.list); + return update(state, { + wordList: { + [action.listName]: {$set: action.list}, + } + }); case actions.DOMAINLIST_UPDATED: - return state - .setIn(['domains', action.listName], action.list); + return update(state, { + domains: { + [action.listName]: {$set: action.list}, + } + }); default: return state; } diff --git a/client/coral-admin/src/routes/Community/containers/Community.js b/client/coral-admin/src/routes/Community/containers/Community.js index a9a164ac9..b04fc0281 100644 --- a/client/coral-admin/src/routes/Community/containers/Community.js +++ b/client/coral-admin/src/routes/Community/containers/Community.js @@ -87,8 +87,8 @@ export const withCommunityQuery = withQuery(gql` }); const mapStateToProps = (state) => ({ - community: state.community.toJS(), - currentUser: state.auth.toJS().user, + community: state.community, + currentUser: state.auth.user, }); const mapDispatchToProps = (dispatch) => diff --git a/client/coral-admin/src/routes/Community/containers/Table.js b/client/coral-admin/src/routes/Community/containers/Table.js index 8bd5395e4..5d4e4914f 100644 --- a/client/coral-admin/src/routes/Community/containers/Table.js +++ b/client/coral-admin/src/routes/Community/containers/Table.js @@ -23,7 +23,7 @@ class TableContainer extends Component { } const mapStateToProps = (state) => ({ - commenters: state.community.get('accounts'), + commenters: state.community.accounts, }); const mapDispatchToProps = (dispatch) => diff --git a/client/coral-admin/src/routes/Configure/containers/Configure.js b/client/coral-admin/src/routes/Configure/containers/Configure.js index c68b39e0c..aff1e57b2 100644 --- a/client/coral-admin/src/routes/Configure/containers/Configure.js +++ b/client/coral-admin/src/routes/Configure/containers/Configure.js @@ -23,8 +23,8 @@ class ConfigureContainer extends Component { } const mapStateToProps = (state) => ({ - auth: state.auth.toJS(), - settings: state.settings.toJS() + auth: state.auth, + settings: state.settings }); const mapDispatchToProps = (dispatch) => diff --git a/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js b/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js index ea1fb2b6c..74faedcf7 100644 --- a/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js +++ b/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js @@ -54,8 +54,8 @@ export const witDashboardQuery = withQuery(gql` const mapStateToProps = (state) => { return { - settings: state.settings.toJS(), - moderation: state.moderation.toJS() + settings: state.settings, + moderation: state.moderation }; }; diff --git a/client/coral-admin/src/routes/Install/containers/Install.js b/client/coral-admin/src/routes/Install/containers/Install.js index 5dcb35705..442127e47 100644 --- a/client/coral-admin/src/routes/Install/containers/Install.js +++ b/client/coral-admin/src/routes/Install/containers/Install.js @@ -35,7 +35,7 @@ InstallContainer.contextTypes = { }; const mapStateToProps = (state) => ({ - install: state.install.toJS() + install: state.install }); const mapDispatchToProps = (dispatch) => diff --git a/client/coral-admin/src/routes/Moderation/containers/Moderation.js b/client/coral-admin/src/routes/Moderation/containers/Moderation.js index d7f62491d..d5ca5c840 100644 --- a/client/coral-admin/src/routes/Moderation/containers/Moderation.js +++ b/client/coral-admin/src/routes/Moderation/containers/Moderation.js @@ -376,9 +376,9 @@ const withQueueCountPolling = withQuery(gql` }); const mapStateToProps = (state) => ({ - moderation: state.moderation.toJS(), - settings: state.settings.toJS(), - auth: state.auth.toJS(), + moderation: state.moderation, + settings: state.settings, + auth: state.auth, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/client/coral-admin/src/routes/Stories/containers/Stories.js b/client/coral-admin/src/routes/Stories/containers/Stories.js index 450efcf74..f645f310c 100644 --- a/client/coral-admin/src/routes/Stories/containers/Stories.js +++ b/client/coral-admin/src/routes/Stories/containers/Stories.js @@ -12,7 +12,7 @@ class StoriesContainer extends Component { } const mapStateToProps = (state) => ({ - assets: state.assets.toJS() + assets: state.assets }); const mapDispatchToProps = (dispatch) => diff --git a/client/coral-configure/containers/ConfigureStreamContainer.js b/client/coral-configure/containers/ConfigureStreamContainer.js index e7b937030..8489c809f 100644 --- a/client/coral-configure/containers/ConfigureStreamContainer.js +++ b/client/coral-configure/containers/ConfigureStreamContainer.js @@ -119,7 +119,7 @@ class ConfigureStreamContainer extends Component { } const mapStateToProps = (state) => ({ - asset: state.asset.toJS() + asset: state.asset }); const mapDispatchToProps = (dispatch) => ({ diff --git a/client/coral-embed-stream/src/containers/Embed.js b/client/coral-embed-stream/src/containers/Embed.js index 06646a6c2..e21a683d1 100644 --- a/client/coral-embed-stream/src/containers/Embed.js +++ b/client/coral-embed-stream/src/containers/Embed.js @@ -170,7 +170,7 @@ export const withEmbedQuery = withQuery(EMBED_QUERY, { }); const mapStateToProps = (state) => ({ - auth: state.auth.toJS(), + auth: state.auth, commentId: state.stream.commentId, assetId: state.stream.assetId, assetUrl: state.stream.assetUrl, diff --git a/client/coral-embed-stream/src/containers/Stream.js b/client/coral-embed-stream/src/containers/Stream.js index 73676713c..451b115a9 100644 --- a/client/coral-embed-stream/src/containers/Stream.js +++ b/client/coral-embed-stream/src/containers/Stream.js @@ -10,7 +10,6 @@ import { import * as authActions from 'coral-framework/actions/auth'; import * as notificationActions from 'coral-framework/actions/notification'; -import {editName} from 'coral-framework/actions/user'; import {setActiveReplyBox, setActiveTab, viewAllComments} from '../actions/stream'; import Stream from '../components/Stream'; import Comment from './Comment'; @@ -26,7 +25,7 @@ import { } from '../graphql/utils'; import omit from 'lodash/omit'; -const {showSignInDialog} = authActions; +const {showSignInDialog, editName} = authActions; const {addNotification} = notificationActions; class StreamContainer extends React.Component { @@ -298,7 +297,7 @@ const fragments = { }; const mapStateToProps = (state) => ({ - auth: state.auth.toJS(), + auth: state.auth, refetching: state.embed.refetching, commentCountCache: state.stream.commentCountCache, activeReplyBox: state.stream.activeReplyBox, diff --git a/client/coral-embed-stream/src/graphql/index.js b/client/coral-embed-stream/src/graphql/index.js index 2c39235a2..b4c5ce163 100644 --- a/client/coral-embed-stream/src/graphql/index.js +++ b/client/coral-embed-stream/src/graphql/index.js @@ -147,8 +147,8 @@ const extension = { __typename: 'Comment', user: { __typename: 'User', - id: auth.toJS().user.id, - username: auth.toJS().user.username + id: auth.user.id, + username: auth.user.username }, created_at: new Date().toISOString(), body, @@ -160,7 +160,7 @@ const extension = { __typename: 'Tag' }, assigned_by: { - id: auth.toJS().user.id, + id: auth.user.id, __typename: 'User' }, __typename: 'TagLink' diff --git a/client/coral-framework/actions/asset.js b/client/coral-framework/actions/asset.js index 24739ddde..aab3caf3a 100644 --- a/client/coral-framework/actions/asset.js +++ b/client/coral-framework/actions/asset.js @@ -13,7 +13,7 @@ const updateAssetSettingsSuccess = (settings) => ({type: actions.UPDATE_ASSET_SE const updateAssetSettingsFailure = (error) => ({type: actions.UPDATE_ASSET_SETTINGS_FAILURE, error}); export const updateConfiguration = (newConfig) => (dispatch, getState) => { - const assetId = getState().asset.toJS().id; + const assetId = getState().asset.id; dispatch(updateAssetSettingsRequest()); coralApi(`/assets/${assetId}/settings`, {method: 'PUT', body: newConfig}) .then(() => { @@ -27,7 +27,7 @@ export const updateConfiguration = (newConfig) => (dispatch, getState) => { }; export const updateOpenStream = (closedBody) => (dispatch, getState) => { - const assetId = getState().asset.toJS().id; + const assetId = getState().asset.id; dispatch(fetchAssetRequest()); coralApi(`/assets/${assetId}/status`, {method: 'PUT', body: closedBody}) .then(() => { diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js index f4cf5217e..7c6d3bf89 100644 --- a/client/coral-framework/actions/auth.js +++ b/client/coral-framework/actions/auth.js @@ -4,6 +4,7 @@ import * as actions from '../constants/auth'; import * as Storage from '../helpers/storage'; import coralApi, {base} from '../helpers/request'; import pym from '../services/pym'; +import {addNotification} from '../actions/notification'; import {resetWebsocket} from 'coral-framework/services/client'; import t from 'coral-framework/services/i18n'; @@ -220,7 +221,7 @@ const signUpSuccess = (user) => ({type: actions.FETCH_SIGNUP_SUCCESS, user}); const signUpFailure = (error) => ({type: actions.FETCH_SIGNUP_FAILURE, error}); export const fetchSignUp = (formData) => (dispatch, getState) => { - const redirectUri = getState().auth.toJS().redirectUri; + const redirectUri = getState().auth.redirectUri; dispatch(signUpRequest()); coralApi('/users', { @@ -257,7 +258,7 @@ const forgotPasswordFailure = (error) => ({ export const fetchForgotPassword = (email) => (dispatch, getState) => { dispatch(forgotPasswordRequest(email)); - const redirectUri = getState().auth.toJS().redirectUri; + const redirectUri = getState().auth.redirectUri; coralApi('/account/password/reset', { method: 'POST', body: {email, loc: redirectUri} @@ -351,7 +352,7 @@ const verifyEmailFailure = () => ({ }); export const requestConfirmEmail = (email) => (dispatch, getState) => { - const redirectUri = getState().auth.toJS().redirectUri; + const redirectUri = getState().auth.redirectUri; dispatch(verifyEmailRequest()); return coralApi('/users/resend-verify', { method: 'POST', @@ -378,3 +379,23 @@ export const setRedirectUri = (uri) => ({ type: actions.SET_REDIRECT_URI, uri, }); + +//============================================================================== +// Edit Username +//============================================================================== + +const editUsernameFailure = (error) => ({type: actions.EDIT_USERNAME_FAILURE, error}); +const editUsernameSuccess = () => ({type: actions.EDIT_USERNAME_SUCCESS}); + +export const editName = (username) => (dispatch) => { + return coralApi('/account/username', {method: 'PUT', body: {username}}) + .then(() => { + dispatch(editUsernameSuccess()); + dispatch(addNotification('success', t('framework.success_name_update'))); + }) + .catch((error) => { + console.error(error); + const errorMessage = error.translation_key ? t(`error.${error.translation_key}`) : error.toString(); + dispatch(editUsernameFailure(errorMessage)); + }); +}; diff --git a/client/coral-framework/actions/user.js b/client/coral-framework/actions/user.js deleted file mode 100644 index a6ad45d4a..000000000 --- a/client/coral-framework/actions/user.js +++ /dev/null @@ -1,21 +0,0 @@ -import {addNotification} from '../actions/notification'; -import coralApi from '../helpers/request'; -import * as actions from '../constants/auth'; - -import t from 'coral-framework/services/i18n'; - -const editUsernameFailure = (error) => ({type: actions.EDIT_USERNAME_FAILURE, error}); -const editUsernameSuccess = () => ({type: actions.EDIT_USERNAME_SUCCESS}); - -export const editName = (username) => (dispatch) => { - return coralApi('/account/username', {method: 'PUT', body: {username}}) - .then(() => { - dispatch(editUsernameSuccess()); - dispatch(addNotification('success', t('framework.success_name_update'))); - }) - .catch((error) => { - console.error(error); - const errorMessage = error.translation_key ? t(`error.${error.translation_key}`) : error.toString(); - dispatch(editUsernameFailure(errorMessage)); - }); -}; diff --git a/client/coral-framework/constants/assets.js b/client/coral-framework/constants/assets.js deleted file mode 100644 index 3883ee835..000000000 --- a/client/coral-framework/constants/assets.js +++ /dev/null @@ -1,3 +0,0 @@ -export const MULTIPLE_ASSETS_REQUEST = 'MULTIPLE_ASSETS_REQUEST'; -export const MULTIPLE_ASSETS_SUCCESS = 'MULTIPLE_ASSETS_SUCCESS'; -export const MULTIPLE_ASSSETS_FAILURE = 'MULTIPLE_ASSSETS_FAILURE'; diff --git a/client/coral-framework/constants/user.js b/client/coral-framework/constants/user.js deleted file mode 100644 index 1557a42c9..000000000 --- a/client/coral-framework/constants/user.js +++ /dev/null @@ -1,10 +0,0 @@ -export const EDIT_NAME_REQUEST = 'EDIT_NAME_REQUEST'; -export const EDIT_NAME_SUCCESS = 'EDIT_NAME_SUCCESS'; -export const EDIT_NAME_FAILURE = 'EDIT_NAME_FAILURE'; -export const COMMENTS_BY_USER_REQUEST = 'COMMENTS_BY_USER_REQUEST'; -export const COMMENTS_BY_USER_SUCCESS = 'COMMENTS_BY_USER_SUCCESS'; -export const COMMENTS_BY_USER_FAILURE = 'COMMENTS_BY_USER_FAILURE'; -export const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS'; -export const UPDATE_USERNAME = 'UPDATE_USERNAME'; -export const IGNORE_USER_SUCCESS = 'IGNORE_USER_SUCCESS'; -export const STOP_IGNORING_USER_SUCCESS = 'STOP_IGNORING_USER_SUCCESS'; diff --git a/client/coral-framework/reducers/asset.js b/client/coral-framework/reducers/asset.js index f9d0a55e3..b9837eddd 100644 --- a/client/coral-framework/reducers/asset.js +++ b/client/coral-framework/reducers/asset.js @@ -1,24 +1,27 @@ -import {Map} from 'immutable'; import * as actions from '../constants/asset'; -const initialState = Map({ +const initialState = { closedAt: null, settings: null, title: null, url: null, - features: Map({}), + features: {}, status: 'open', moderation: null -}); +}; export default function asset (state = initialState, action) { switch (action.type) { case actions.FETCH_ASSET_SUCCESS: - return state - .merge(action.asset); + return { + ...state, + ...action.asset, + }; case actions.UPDATE_ASSET_SETTINGS_SUCCESS: - return state - .setIn(['settings'], action.settings); + return { + ...state, + settings: action.settings, + }; default: return state; } diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js index 5481b7a5e..1e18ddffa 100644 --- a/client/coral-framework/reducers/auth.js +++ b/client/coral-framework/reducers/auth.js @@ -1,8 +1,7 @@ -import {Map, fromJS} from 'immutable'; import * as actions from '../constants/auth'; import pym from 'coral-framework/services/pym'; -const initialState = Map({ +const initialState = { isLoading: false, loggedIn: false, user: null, @@ -21,27 +20,34 @@ const initialState = Map({ fromSignUp: false, requireEmailConfirmation: false, redirectUri: pym.parentUrl || location.href, -}); +}; const purge = (user) => { - const {settings, profiles, ...userData} = user; // eslint-disable-line - return fromJS(userData); + const {settings, ...userData} = user; // eslint-disable-line + return userData; }; export default function auth (state = initialState, action) { switch (action.type) { case actions.FOCUS_SIGNIN_DIALOG: - return state - .set('signInDialogFocus', true); + return { + ...state, + signInDialogFocus: true, + }; case actions.BLUR_SIGNIN_DIALOG: - return state - .set('signInDialogFocus', false); - case actions.SHOW_SIGNIN_DIALOG : - return state - .set('showSignInDialog', true) - .set('signInDialogFocus', true); + return { + ...state, + signInDialogFocus: false, + }; + case actions.SHOW_SIGNIN_DIALOG: + return { + ...state, + showSignInDialog: true, + signInDialogFocus: true, + }; case actions.HIDE_SIGNIN_DIALOG : - return state.merge(Map({ + return { + ...state, isLoading: false, showSignInDialog: false, signInDialogFocus: false, @@ -53,125 +59,198 @@ export default function auth (state = initialState, action) { emailVerificationSuccess: false, emailVerificationLoading: false, successSignUp: false - })); - case actions.SHOW_CREATEUSERNAME_DIALOG : - return state - .set('showCreateUsernameDialog', true); - case actions.HIDE_CREATEUSERNAME_DIALOG : - return state.merge(Map({ - showCreateUsernameDialog: false - })); - case actions.CREATE_USERNAME_SUCCESS : - return state.merge(Map({ + }; + case actions.SHOW_CREATEUSERNAME_DIALOG: + return { + ...state, + showCreateUsernameDialog: true, + }; + case actions.HIDE_CREATEUSERNAME_DIALOG: + return { + ...state, showCreateUsernameDialog: false, - error: '' - })); - case actions.CREATE_USERNAME_FAILURE : - return state - .set('error', action.error); - case actions.CHANGE_VIEW : - return state - .set('error', '') - .set('view', action.view); + }; + case actions.CREATE_USERNAME_SUCCESS: + return { + ...state, + showCreateUsernameDialog: false, + error: '', + }; + case actions.CREATE_USERNAME_FAILURE: + return { + ...state, + error: action.error, + }; + case actions.CHANGE_VIEW: + return { + ...state, + error: action.error, + view: action.view, + }; case actions.CLEAN_STATE: return initialState; case actions.FETCH_SIGNIN_REQUEST: - return state - .set('isLoading', true); + return { + ...state, + isLoading: true, + }; case actions.CHECK_LOGIN_FAILURE: - return state - .set('checkedInitialLogin', true) - .set('loggedIn', false) - .set('user', null); + return { + ...state, + checkedInitialLogin: true, + loggedIn: false, + user: null, + }; case actions.CHECK_LOGIN_SUCCESS: - return state - .set('checkedInitialLogin', true) - .set('loggedIn', true) - .set('user', purge(action.user)); + return { + ...state, + checkedInitialLogin: true, + loggedIn: true, + user: purge(action.user), + }; case actions.FETCH_SIGNIN_SUCCESS: - return state - .set('loggedIn', true) - .set('user', purge(action.user)); + return { + ...state, + loggedIn: true, + user: purge(action.user), + }; case actions.FETCH_SIGNIN_FAILURE: - return state - .set('isLoading', false) - .set('error', action.error) - .set('user', null); + return { + ...state, + isLoading: false, + error: action.error, + user: null, + }; case actions.FETCH_SIGNUP_FACEBOOK_REQUEST: - return state - .set('fromSignUp', true); + return { + ...state, + fromSignUp: true, + }; case actions.FETCH_SIGNIN_FACEBOOK_REQUEST: - return state - .set('fromSignUp', false); + return { + ...state, + fromSignUp: false, + }; case actions.FETCH_SIGNIN_FACEBOOK_SUCCESS: - return state - .set('user', purge(action.user)) - .set('loggedIn', true); + return { + ...state, + loggedIn: true, + user: purge(action.user), + }; case actions.FETCH_SIGNIN_FACEBOOK_FAILURE: - return state - .set('error', action.error) - .set('user', null); + return { + ...state, + error: action.error, + user: null, + }; case actions.FETCH_SIGNUP_REQUEST: - return state - .set('isLoading', true); + return { + ...state, + isLoading: true, + }; case actions.FETCH_SIGNUP_FAILURE: - return state - .set('error', action.error) - .set('isLoading', false); + return { + ...state, + error: action.error, + isLoading: false, + }; case actions.FETCH_SIGNUP_SUCCESS: - return state - .set('isLoading', false) - .set('successSignUp', true); + return { + ...state, + isLoading: false, + successSignUp: true, + }; case actions.LOGOUT: - return state - .set('user', null) - .set('isLoading', false) - .set('loggedIn', false); + return { + ...state, + user: null, + isLoading: false, + loggedIn: false, + }; case actions.INVALID_FORM: - return state - .set('error', action.error); + return { + ...state, + error: action.error, + }; case actions.VALID_FORM: - return state - .set('error', ''); + return { + ...state, + error: '', + }; case actions.FETCH_FORGOT_PASSWORD_SUCCESS: - return state - .set('passwordRequestFailure', null) - .set('passwordRequestSuccess', 'If you have a registered account, a password reset link was sent to that email'); + return { + ...state, + passwordRequestFailure: null, + passwordRequestSuccess: 'If you have a registered account, a password reset link was sent to that email', + }; case actions.FETCH_FORGOT_PASSWORD_FAILURE: - return state - .set('passwordRequestFailure', 'There was an error sending your password reset email. Please try again soon!') - .set('passwordRequestSuccess', null); + return { + ...state, + passwordRequestFailure: 'There was an error sending your password reset email. Please try again soon!', + passwordRequestSuccess: null, + }; case actions.UPDATE_USERNAME: - return state - .setIn(['user', 'username'], action.username); + return { + ...state, + user: { + ...state.user, + username: action.username, + } + }; case actions.VERIFY_EMAIL_FAILURE: - return state - .set('emailVerificationFailure', true) - .set('emailVerificationLoading', false); + return { + ...state, + emailVerificationFailure: true, + emailVerificationLoading: false, + }; case actions.VERIFY_EMAIL_REQUEST: - return state.set('emailVerificationLoading', true); + return { + ...state, + emailVerificationLoading: true, + }; case actions.VERIFY_EMAIL_SUCCESS: - return state - .set('emailVerificationSuccess', true) - .set('emailVerificationLoading', false); + return { + ...state, + emailVerificationSuccess: true, + emailVerificationLoading: false, + }; case actions.SET_REQUIRE_EMAIL_VERIFICATION: - return state - .set('requireEmailConfirmation', action.required); + return { + ...state, + requireEmailConfirmation: action.required, + }; case actions.SET_REDIRECT_URI: - return state - .set('redirectUri', action.uri); + return { + ...state, + redirectUri: action.uri, + }; case 'APOLLO_SUBSCRIPTION_RESULT': if (action.operationName === 'UserBanned' && state.getIn(['user', 'id']) === action.variables.user_id) { - return state - .mergeIn(['user'], action.result.data.userBanned); + return { + ...state, + user: { + ...state.user, + ...action.result.data.userBanned, + }, + }; } if (action.operationName === 'UserSuspended' && state.getIn(['user', 'id']) === action.variables.user_id) { - return state - .mergeIn(['user'], action.result.data.userSuspended); + return { + ...state, + user: { + ...state.user, + ...action.result.data.userSuspended, + }, + }; } if (action.operationName === 'UsernameRejected' && state.getIn(['user', 'id']) === action.variables.user_id) { - return state - .mergeIn(['user'], action.result.data.usernameRejected); + return { + ...state, + user: { + ...state.user, + ...action.result.data.usernameRejected, + }, + }; } return state; default : diff --git a/client/coral-framework/reducers/index.js b/client/coral-framework/reducers/index.js index f1ac580dc..6b9b730ca 100644 --- a/client/coral-framework/reducers/index.js +++ b/client/coral-framework/reducers/index.js @@ -1,11 +1,9 @@ import auth from './auth'; -import user from './user'; import asset from './asset'; import {reducer as commentBox} from '../../talk-plugin-commentbox'; export default { auth, - user, asset, commentBox, }; diff --git a/client/coral-framework/reducers/user.js b/client/coral-framework/reducers/user.js deleted file mode 100644 index bc40cf3ae..000000000 --- a/client/coral-framework/reducers/user.js +++ /dev/null @@ -1,43 +0,0 @@ -import {Map} from 'immutable'; -import * as authActions from '../constants/auth'; -import * as actions from '../constants/user'; -import * as assetActions from '../constants/assets'; - -const initialState = Map({ - username: '', - profiles: [], - settings: {}, - myComments: [], - myAssets: [], // the assets from which myComments (above) originated -}); - -const purge = (user) => { - const {_id, created_at, updated_at, __v, roles, ...userData} = user; // eslint-disable-line - return userData; -}; - -export default function user (state = initialState, action) { - switch (action.type) { - case authActions.CHECK_LOGIN_SUCCESS: - return state.merge(Map(purge(action.user))); - case authActions.CHECK_LOGIN_FAILURE: - return initialState; - case authActions.FETCH_SIGNIN_SUCCESS: - return state.merge(Map(purge(action.user))); - case authActions.FETCH_SIGNIN_FAILURE: - return initialState; - case authActions.FETCH_SIGNIN_FACEBOOK_SUCCESS: - return state.merge(Map(purge(action.user))); - case authActions.FETCH_SIGNIN_FACEBOOK_FAILURE: - return initialState; - case actions.SAVE_BIO_SUCCESS: - return state.set('settings', action.settings); - case actions.COMMENTS_BY_USER_SUCCESS: - return state.set('myComments', action.comments); - case assetActions.MULTIPLE_ASSETS_SUCCESS: - return state.set('myAssets', action.assets); - case actions.LOGOUT_SUCCESS: - return initialState; - } - return state; -} diff --git a/client/coral-settings/containers/ProfileContainer.js b/client/coral-settings/containers/ProfileContainer.js index 0090847f7..e33c0b6cd 100644 --- a/client/coral-settings/containers/ProfileContainer.js +++ b/client/coral-settings/containers/ProfileContainer.js @@ -51,7 +51,7 @@ class ProfileContainer extends Component { }; render() { - const {auth, asset, showSignInDialog, stopIgnoringUser} = this.props; + const {auth, auth: {user}, asset, showSignInDialog, stopIgnoringUser} = this.props; const {me} = this.props.root; const loading = [1, 2, 4].indexOf(this.props.data.networkStatus) >= 0; @@ -63,14 +63,14 @@ class ProfileContainer extends Component { return ; } - const localProfile = this.props.user.profiles.find( + const localProfile = user.profiles.find( (p) => p.provider === 'local' ); const emailAddress = localProfile && localProfile.id; return (
-

{this.props.user.username}

+

{user.username}

{emailAddress ?

{emailAddress}

: null} {me.ignoredUsers && me.ignoredUsers.length @@ -138,9 +138,8 @@ const withProfileQuery = withQuery( `); const mapStateToProps = (state) => ({ - user: state.user.toJS(), - asset: state.asset.toJS(), - auth: state.auth.toJS() + asset: state.asset, + auth: state.auth }); const mapDispatchToProps = (dispatch) => diff --git a/docs/_docs/03-05-client-architecture.md b/docs/_docs/03-05-client-architecture.md index 6bb44bfad..6996811c5 100644 --- a/docs/_docs/03-05-client-architecture.md +++ b/docs/_docs/03-05-client-architecture.md @@ -6,7 +6,6 @@ permalink: /docs/architecture/client ## The Stack - [React](#react) - [Redux](#redux) - - [ImmutableJS](#immutablejs) ## The Architecture @@ -96,14 +95,6 @@ We use [Apollo](http://www.apollodata.com/) to handle graph requests and handle ## Redux We use [Redux](http://redux.js.org/) to handle the auth state. - -## ImmutableJS -We use Immutable JS to maintain our state immutable. -We found some really good tradeoffs while building Talk. - -[How to use ImmutableJS and how we use it with Talk](https://facebook.github.io/immutable-js/docs/#/) - - ## Test [How we do testing at Coral with Talk]({{ "/docs/development/tools" | absolute_url }}) diff --git a/package.json b/package.json index ebe1138f6..c6b8a782d 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,6 @@ "hammerjs": "^2.0.8", "history": "^3.0.0", "ignore-styles": "^5.0.1", - "immutable": "^3.8.1", "imports-loader": "^0.7.1", "istanbul": "^1.1.0-alpha.1", "jsdom": "^9.8.3", diff --git a/plugin-api/beta/client/hocs/withReaction.js b/plugin-api/beta/client/hocs/withReaction.js index 7f43cc5b2..22c30d639 100644 --- a/plugin-api/beta/client/hocs/withReaction.js +++ b/plugin-api/beta/client/hocs/withReaction.js @@ -363,7 +363,7 @@ export default (reaction) => (WrappedComponent) => { ); const mapStateToProps = (state) => ({ - user: state.auth.toJS().user, + user: state.auth.user, }); const mapDispatchToProps = (dispatch) => diff --git a/plugin-api/beta/client/hocs/withTags.js b/plugin-api/beta/client/hocs/withTags.js index e9b5bdff0..b0a74f4d7 100644 --- a/plugin-api/beta/client/hocs/withTags.js +++ b/plugin-api/beta/client/hocs/withTags.js @@ -84,7 +84,7 @@ export default (tag) => (WrappedComponent) => { } const mapStateToProps = (state) => ({ - user: state.auth.toJS().user, + user: state.auth.user, }); const mapDispatchToProps = (dispatch) => diff --git a/plugins/talk-plugin-auth/client/components/ChangeUsername.js b/plugins/talk-plugin-auth/client/components/ChangeUsername.js index ed3c5ace0..c1ad081b1 100644 --- a/plugins/talk-plugin-auth/client/components/ChangeUsername.js +++ b/plugins/talk-plugin-auth/client/components/ChangeUsername.js @@ -122,7 +122,7 @@ class ChangeUsernameContainer extends React.Component { } const mapStateToProps = ({auth}) => ({ - auth: auth.toJS() + auth: auth }); const mapDispatchToProps = (dispatch) => diff --git a/plugins/talk-plugin-auth/client/components/SignInButton.js b/plugins/talk-plugin-auth/client/components/SignInButton.js index 0adb300a7..9c8a04b11 100644 --- a/plugins/talk-plugin-auth/client/components/SignInButton.js +++ b/plugins/talk-plugin-auth/client/components/SignInButton.js @@ -16,7 +16,7 @@ const SignInButton = ({loggedIn, showSignInDialog}) => ( ); const mapStateToProps = ({auth}) => ({ - loggedIn: auth.toJS().loggedIn + loggedIn: auth.loggedIn }); const mapDispatchToProps = (dispatch) => diff --git a/plugins/talk-plugin-auth/client/components/SignInContainer.js b/plugins/talk-plugin-auth/client/components/SignInContainer.js index 6950f4124..188651186 100644 --- a/plugins/talk-plugin-auth/client/components/SignInContainer.js +++ b/plugins/talk-plugin-auth/client/components/SignInContainer.js @@ -176,7 +176,7 @@ class SignInContainer extends React.Component { } const mapStateToProps = (state) => ({ - auth: state.auth.toJS() + auth: state.auth }); const mapDispatchToProps = (dispatch) => diff --git a/plugins/talk-plugin-auth/client/components/UserBox.js b/plugins/talk-plugin-auth/client/components/UserBox.js index 5b79b664a..61540d3c5 100644 --- a/plugins/talk-plugin-auth/client/components/UserBox.js +++ b/plugins/talk-plugin-auth/client/components/UserBox.js @@ -22,8 +22,8 @@ const UserBox = ({loggedIn, user, logout, onShowProfile}) => ( ); const mapStateToProps = ({auth}) => ({ - loggedIn: auth.toJS().loggedIn, - user: auth.toJS().user + loggedIn: auth.loggedIn, + user: auth.user }); const mapDispatchToProps = (dispatch) => diff --git a/plugins/talk-plugin-featured-comments/client/containers/ModSubscription.js b/plugins/talk-plugin-featured-comments/client/containers/ModSubscription.js index 85e0d8fe2..82f323530 100644 --- a/plugins/talk-plugin-featured-comments/client/containers/ModSubscription.js +++ b/plugins/talk-plugin-featured-comments/client/containers/ModSubscription.js @@ -91,7 +91,7 @@ const COMMENT_UNFEATURED_SUBSCRIPTION = gql` `; const mapStateToProps = (state) => ({ - user: state.auth.toJS().user, + user: state.auth.user, }); export default connect(mapStateToProps, null)(ModSubscription); diff --git a/yarn.lock b/yarn.lock index 9c1ac35e9..818049337 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4051,10 +4051,6 @@ immutability-helper@^2.2.0: dependencies: invariant "^2.2.0" -immutable@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" - imports-loader@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253"