From f8d2b4845d99c8ba96dab998e315e46bc5aee27e Mon Sep 17 00:00:00 2001 From: mgabdev <> Date: Tue, 14 Jul 2020 18:44:42 -0500 Subject: [PATCH] Added user redux for updating profile/credentials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Added: - user redux for updating profile/credentials --- app/javascript/gabsocial/actions/user.js | 53 ++++++++++++++++++++++ app/javascript/gabsocial/reducers/index.js | 2 + app/javascript/gabsocial/reducers/user.js | 24 ++++++++++ 3 files changed, 79 insertions(+) create mode 100644 app/javascript/gabsocial/actions/user.js create mode 100644 app/javascript/gabsocial/reducers/user.js diff --git a/app/javascript/gabsocial/actions/user.js b/app/javascript/gabsocial/actions/user.js new file mode 100644 index 00000000..59821dcb --- /dev/null +++ b/app/javascript/gabsocial/actions/user.js @@ -0,0 +1,53 @@ +import isObject from 'lodash.isobject' +import api from '../api' +import { me } from '../initial_state' +import { importAccount } from './importer' + +export const SAVE_USER_PROFILE_INFORMATION_FETCH_REQUEST = 'SAVE_USER_PROFILE_INFORMATION_FETCH_REQUEST' +export const SAVE_USER_PROFILE_INFORMATION_FETCH_SUCCESS = 'SAVE_USER_PROFILE_INFORMATION_FETCH_SUCCESS' +export const SAVE_USER_PROFILE_INFORMATION_FETCH_FAIL = 'SAVE_USER_PROFILE_INFORMATION_FETCH_FAIL' + +export const saveUserProfileInformation = (data) => { + return function (dispatch, getState) { + if (!isObject(data) || !me) return + + dispatch(saveUserProfileInformationRequest()) + + const formData = new FormData() + if (data.displayName) formData.append('display_name', data.displayName) + if (data.note) formData.append('note', data.note) + if (data.avatar) formData.append('avatar', data.avatar) + if (data.header) formData.append('header', data.header) + + api(getState).patch('/api/v1/accounts/update_credentials', formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then((response) => { + dispatch(importAccount(response.data)) + dispatch(saveUserProfileInformationSuccess(response.data)) + }).catch(error => { + dispatch(saveUserProfileInformationFail(error)) + }) + } +} + +function saveUserProfileInformationRequest() { + return { + type: SAVE_USER_PROFILE_INFORMATION_FETCH_REQUEST, + } +} + +function saveUserProfileInformationSuccess(userProfileData) { + return { + type: SAVE_USER_PROFILE_INFORMATION_FETCH_SUCCESS, + userProfileData, + } +} + +function saveUserProfileInformationFail(error) { + return { + type: SAVE_USER_PROFILE_INFORMATION_FETCH_FAIL, + error, + } +} \ No newline at end of file diff --git a/app/javascript/gabsocial/reducers/index.js b/app/javascript/gabsocial/reducers/index.js index 11763720..a4e85e4c 100644 --- a/app/javascript/gabsocial/reducers/index.js +++ b/app/javascript/gabsocial/reducers/index.js @@ -37,6 +37,7 @@ import status_revisions from './status_revisions' import suggestions from './suggestions' import tenor from './tenor' import timelines from './timelines' +import user from './user' import user_lists from './user_lists' const reducers = { @@ -78,6 +79,7 @@ const reducers = { suggestions, tenor, timelines, + user, user_lists, } diff --git a/app/javascript/gabsocial/reducers/user.js b/app/javascript/gabsocial/reducers/user.js new file mode 100644 index 00000000..f032ec29 --- /dev/null +++ b/app/javascript/gabsocial/reducers/user.js @@ -0,0 +1,24 @@ +import { + SAVE_USER_PROFILE_INFORMATION_FETCH_REQUEST, + SAVE_USER_PROFILE_INFORMATION_FETCH_SUCCESS, + SAVE_USER_PROFILE_INFORMATION_FETCH_FAIL, +} from '../actions/user' +import { Map as ImmutableMap } from 'immutable' + +const initialState = ImmutableMap({ + isLoading: false, + isError: false, +}) + +export default function (state = initialState, action) { + switch (action.type) { + case SAVE_USER_PROFILE_INFORMATION_FETCH_REQUEST: + return state.set('isLoading', true) + case SAVE_USER_PROFILE_INFORMATION_FETCH_SUCCESS: + return state + case SAVE_USER_PROFILE_INFORMATION_FETCH_FAIL: + return state.set('isError', true) + default: + return state + } +} \ No newline at end of file