summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/members/store
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/members/store')
-rw-r--r--app/assets/javascripts/members/store/actions.js44
-rw-r--r--app/assets/javascripts/members/store/index.js9
-rw-r--r--app/assets/javascripts/members/store/mutation_types.js10
-rw-r--r--app/assets/javascripts/members/store/mutations.js48
-rw-r--r--app/assets/javascripts/members/store/state.js27
-rw-r--r--app/assets/javascripts/members/store/utils.js1
6 files changed, 139 insertions, 0 deletions
diff --git a/app/assets/javascripts/members/store/actions.js b/app/assets/javascripts/members/store/actions.js
new file mode 100644
index 00000000000..4c31b3c9744
--- /dev/null
+++ b/app/assets/javascripts/members/store/actions.js
@@ -0,0 +1,44 @@
+import * as types from './mutation_types';
+import axios from '~/lib/utils/axios_utils';
+import { formatDate } from '~/lib/utils/datetime_utility';
+
+export const updateMemberRole = async ({ state, commit }, { memberId, accessLevel }) => {
+ try {
+ await axios.put(
+ state.memberPath.replace(/:id$/, memberId),
+ state.requestFormatter({ accessLevel: accessLevel.integerValue }),
+ );
+
+ commit(types.RECEIVE_MEMBER_ROLE_SUCCESS, { memberId, accessLevel });
+ } catch (error) {
+ commit(types.RECEIVE_MEMBER_ROLE_ERROR);
+
+ throw error;
+ }
+};
+
+export const showRemoveGroupLinkModal = ({ commit }, groupLink) => {
+ commit(types.SHOW_REMOVE_GROUP_LINK_MODAL, groupLink);
+};
+
+export const hideRemoveGroupLinkModal = ({ commit }) => {
+ commit(types.HIDE_REMOVE_GROUP_LINK_MODAL);
+};
+
+export const updateMemberExpiration = async ({ state, commit }, { memberId, expiresAt }) => {
+ try {
+ await axios.put(
+ state.memberPath.replace(':id', memberId),
+ state.requestFormatter({ expires_at: expiresAt ? formatDate(expiresAt, 'isoDate') : '' }),
+ );
+
+ commit(types.RECEIVE_MEMBER_EXPIRATION_SUCCESS, {
+ memberId,
+ expiresAt: expiresAt ? formatDate(expiresAt, 'isoUtcDateTime') : null,
+ });
+ } catch (error) {
+ commit(types.RECEIVE_MEMBER_EXPIRATION_ERROR);
+
+ throw error;
+ }
+};
diff --git a/app/assets/javascripts/members/store/index.js b/app/assets/javascripts/members/store/index.js
new file mode 100644
index 00000000000..f219f8931b0
--- /dev/null
+++ b/app/assets/javascripts/members/store/index.js
@@ -0,0 +1,9 @@
+import createState from 'ee_else_ce/members/store/state';
+import mutations from 'ee_else_ce/members/store/mutations';
+import * as actions from 'ee_else_ce/members/store/actions';
+
+export default initialState => ({
+ state: createState(initialState),
+ actions,
+ mutations,
+});
diff --git a/app/assets/javascripts/members/store/mutation_types.js b/app/assets/javascripts/members/store/mutation_types.js
new file mode 100644
index 00000000000..77307aa745b
--- /dev/null
+++ b/app/assets/javascripts/members/store/mutation_types.js
@@ -0,0 +1,10 @@
+export const RECEIVE_MEMBER_ROLE_SUCCESS = 'RECEIVE_MEMBER_ROLE_SUCCESS';
+export const RECEIVE_MEMBER_ROLE_ERROR = 'RECEIVE_MEMBER_ROLE_ERROR';
+
+export const RECEIVE_MEMBER_EXPIRATION_SUCCESS = 'RECEIVE_MEMBER_EXPIRATION_SUCCESS';
+export const RECEIVE_MEMBER_EXPIRATION_ERROR = 'RECEIVE_MEMBER_EXPIRATION_ERROR';
+
+export const HIDE_ERROR = 'HIDE_ERROR';
+
+export const SHOW_REMOVE_GROUP_LINK_MODAL = 'SHOW_REMOVE_GROUP_LINK_MODAL';
+export const HIDE_REMOVE_GROUP_LINK_MODAL = 'HIDE_REMOVE_GROUP_LINK_MODAL';
diff --git a/app/assets/javascripts/members/store/mutations.js b/app/assets/javascripts/members/store/mutations.js
new file mode 100644
index 00000000000..2415e744290
--- /dev/null
+++ b/app/assets/javascripts/members/store/mutations.js
@@ -0,0 +1,48 @@
+import Vue from 'vue';
+import { s__ } from '~/locale';
+import * as types from './mutation_types';
+import { findMember } from './utils';
+
+export default {
+ [types.RECEIVE_MEMBER_ROLE_SUCCESS](state, { memberId, accessLevel }) {
+ const member = findMember(state, memberId);
+
+ if (!member) {
+ return;
+ }
+
+ Vue.set(member, 'accessLevel', accessLevel);
+ },
+ [types.RECEIVE_MEMBER_ROLE_ERROR](state) {
+ state.errorMessage = s__(
+ "Members|An error occurred while updating the member's role, please try again.",
+ );
+ state.showError = true;
+ },
+ [types.RECEIVE_MEMBER_EXPIRATION_SUCCESS](state, { memberId, expiresAt }) {
+ const member = findMember(state, memberId);
+
+ if (!member) {
+ return;
+ }
+
+ Vue.set(member, 'expiresAt', expiresAt);
+ },
+ [types.RECEIVE_MEMBER_EXPIRATION_ERROR](state) {
+ state.errorMessage = s__(
+ "Members|An error occurred while updating the member's expiration date, please try again.",
+ );
+ state.showError = true;
+ },
+ [types.HIDE_ERROR](state) {
+ state.showError = false;
+ state.errorMessage = '';
+ },
+ [types.SHOW_REMOVE_GROUP_LINK_MODAL](state, groupLink) {
+ state.removeGroupLinkModalVisible = true;
+ state.groupLinkToRemove = groupLink;
+ },
+ [types.HIDE_REMOVE_GROUP_LINK_MODAL](state) {
+ state.removeGroupLinkModalVisible = false;
+ },
+};
diff --git a/app/assets/javascripts/members/store/state.js b/app/assets/javascripts/members/store/state.js
new file mode 100644
index 00000000000..23a7983adcc
--- /dev/null
+++ b/app/assets/javascripts/members/store/state.js
@@ -0,0 +1,27 @@
+export default ({
+ members,
+ sourceId,
+ currentUserId,
+ canManageMembers,
+ tableFields,
+ tableAttrs,
+ tableSortableFields,
+ memberPath,
+ requestFormatter,
+ filteredSearchBar,
+}) => ({
+ members,
+ sourceId,
+ currentUserId,
+ canManageMembers,
+ tableFields,
+ tableAttrs,
+ tableSortableFields,
+ memberPath,
+ requestFormatter,
+ filteredSearchBar,
+ showError: false,
+ errorMessage: '',
+ removeGroupLinkModalVisible: false,
+ groupLinkToRemove: null,
+});
diff --git a/app/assets/javascripts/members/store/utils.js b/app/assets/javascripts/members/store/utils.js
new file mode 100644
index 00000000000..7dcd33111e8
--- /dev/null
+++ b/app/assets/javascripts/members/store/utils.js
@@ -0,0 +1 @@
+export const findMember = (state, memberId) => state.members.find(member => member.id === memberId);