1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-20 13:49:43 +02:00

Add email and password change functionality for a current user, remove deep compare hooks

This commit is contained in:
Maksim Eltyshev 2019-10-18 08:06:34 +05:00
parent b53e5bf94c
commit 680d664279
67 changed files with 1232 additions and 267 deletions

View file

@ -2,6 +2,24 @@ import { Model, attr } from 'redux-orm';
import ActionTypes from '../constants/ActionTypes';
const DEFAULT_EMAIL_UPDATE_FORM = {
data: {
email: '',
currentPassword: '',
},
isSubmitting: false,
error: null,
};
const DEFAULT_PASSWORD_UPDATE_FORM = {
data: {
password: '',
currentPassword: '',
},
isSubmitting: false,
error: null,
};
export default class extends Model {
static modelName = 'User';
@ -17,6 +35,12 @@ export default class extends Model {
isAvatarUploading: attr({
getDefault: () => false,
}),
emailUpdateForm: attr({
getDefault: () => DEFAULT_EMAIL_UPDATE_FORM,
}),
passwordUpdateForm: attr({
getDefault: () => DEFAULT_PASSWORD_UPDATE_FORM,
}),
};
static reducer({ type, payload }, User) {
@ -44,6 +68,30 @@ export default class extends Model {
User.withId(payload.id).update(payload.data);
break;
case ActionTypes.USER_EMAIL_UPDATE_ERROR_CLEAR: {
const userModel = User.withId(payload.id);
userModel.update({
emailUpdateForm: {
...userModel.emailUpdateForm,
error: null,
},
});
break;
}
case ActionTypes.USER_PASSWORD_UPDATE_ERROR_CLEAR: {
const userModel = User.withId(payload.id);
userModel.update({
passwordUpdateForm: {
...userModel.passwordUpdateForm,
error: null,
},
});
break;
}
case ActionTypes.USER_DELETE:
User.withId(payload.id).deleteWithRelated();
@ -52,6 +100,73 @@ export default class extends Model {
User.withId(payload.user.id).update(payload.user);
break;
case ActionTypes.USER_EMAIL_UPDATE_REQUESTED: {
const userModel = User.withId(payload.id);
userModel.update({
emailUpdateForm: {
...userModel.emailUpdateForm,
data: payload.data,
isSubmitting: true,
},
});
break;
}
case ActionTypes.USER_EMAIL_UPDATE_SUCCEEDED: {
User.withId(payload.id).update({
email: payload.email,
emailUpdateForm: DEFAULT_EMAIL_UPDATE_FORM,
});
break;
}
case ActionTypes.USER_EMAIL_UPDATE_FAILED: {
const userModel = User.withId(payload.id);
userModel.update({
emailUpdateForm: {
...userModel.emailUpdateForm,
isSubmitting: false,
error: payload.error,
},
});
break;
}
case ActionTypes.USER_PASSWORD_UPDATE_REQUESTED: {
const userModel = User.withId(payload.id);
userModel.update({
passwordUpdateForm: {
...userModel.passwordUpdateForm,
data: payload.data,
isSubmitting: true,
},
});
break;
}
case ActionTypes.USER_PASSWORD_UPDATE_SUCCEEDED: {
User.withId(payload.id).update({
passwordUpdateForm: DEFAULT_PASSWORD_UPDATE_FORM,
});
break;
}
case ActionTypes.USER_PASSWORD_UPDATE_FAILED: {
const userModel = User.withId(payload.id);
userModel.update({
passwordUpdateForm: {
...userModel.passwordUpdateForm,
isSubmitting: false,
error: payload.error,
},
});
break;
}
case ActionTypes.USER_AVATAR_UPLOAD_REQUESTED:
User.withId(payload.id).update({
isAvatarUploading: true,
@ -59,8 +174,8 @@ export default class extends Model {
break;
case ActionTypes.USER_AVATAR_UPLOAD_SUCCEEDED:
User.withId(payload.user.id).update({
...payload.user,
User.withId(payload.id).update({
avatar: payload.avatar,
isAvatarUploading: false,
});