Files
habitica/website/client/store/actions/guilds.js
T
Keith Holliday 2e9bc2c31c New client guilds (#8736)
* add colors palette

* add secondary menu component and style it

* add box shadow to secondary menu

* misc css, fixes for secondary menu

* client: add equipment page with grouping, css: add some styles

* add typography

* more equipment

* stable: fix linting

* equipment: add styles (lots of general styles too)

* remove duplicate google fonts loading

* add dropdowns

* design: white search input background, remove gray from items

* start adding drawer and selected indicator

* wip equipment

* fix equipment

* equipment: correctly bind new properties on items.gear.equipped

* equipment: fix vue binding. version 2

* equipment: fix vue binding. version 3

* back to first fix for equip op, fix for sourcemaps, send http request when an item is equipped, load bootstrap-vue components where needed

* checkboxes and radio buttons

* correctly renders selected items in first postion during the first render

* add search

* general changes, constants part of app state, add popovers

* add toggle switch, rename css

* correct offset

* upgrade deps

* upgrade deps

* drawer and lot of other work

* update equipping mechanism

* finish equipment

* fix compilation and upgrade deps

* use v-show in place of v-if to fix ui issues

* v-show -> v-if

* Start of guild syyles

* fix linting in test/client

* fix es6 compilation in test/client

* fix babel compilation for tests

* fix groupsUtilities mixin tests

* More designs

* Added public guild state

* Added my guilds store

* client: buttons

* client: buttons: fix colors

* Added join and leave

* Began adding new guild form

* Create form updates

* Added search to local data

* Added filtering

* Added initial code for group create

* Added more create checks

* Added more guild routes

* Added styles to guild page

* Added more chat styles

* Began porting over angular functions

* Moved over group service functions

* Added paging

* Updated sidebar

* Updated join/leave and minor text

* Added new sidebar functions

* Updated paging

* Added some form updates

* Added more translations and styles

* Updated shrinkwrap

* Removed features config

* Lint cleanup

* Added member modal

* Added more member actions

* Updated nav

* Fixed filter toggling

* Updated create guild

* Added no guild page

* Added sort select

* Added more styles

* Added update guild form

* Removed extra css and other minor changes

* Many css and syntax fixes

* Fixed color and merge conflic

* Removed paging from my guilds

* Removed extra strings

* Many requests updates

* Small style fixes
2017-06-02 14:55:02 -06:00

163 lines
4.3 KiB
JavaScript

import axios from 'axios';
import omit from 'lodash/omit';
import findIndex from 'lodash/findIndex';
export async function getPublicGuilds (store, payload) {
let response = await axios.get('/api/v3/groups', {
params: {
type: 'publicGuilds',
paginate: true,
page: payload.page,
},
});
return response.data.data;
}
export async function getMyGuilds (store) {
let response = await axios.get('/api/v3/groups', {
params: {
type: 'privateGuilds',
},
});
let guilds = response.data.data;
store.state.myGuilds = guilds;
return response.data.data;
}
export async function getGroup (store, payload) {
let response = await axios.get(`/api/v3/groups/${payload.groupId}`);
// @TODO: should we store the active group for modifying?
// let guilds = response.data.data;
// store.state.myGuilds = guilds;
// @TODO: Populate wiht members, challenges, and invites
return response.data.data;
}
export async function join (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.guildId}/join`);
// @TODO: abstract for parties as well
store.state.user.data.guilds.push(payload.guildId);
if (payload.type === 'myGuilds') {
store.state.myGuilds.push(response.data.data);
}
return response.data.data;
}
export async function leave (store, payload) {
// @TODO: is the dafault for keepChallenges 'remain-in-challenges'
let data = {
keep: payload.keep,
keepChallenges: payload.keepChallenges,
};
let response = await axios.post(`/api/v3/groups/${payload.guildId}/leave`, data);
// @TODO: update for party
let index = store.state.user.data.guilds.indexOf(payload.guildId);
store.state.user.data.guilds.splice(index, 1);
if (payload.type === 'myGuilds') {
let guildIndex = findIndex(store.state.myGuilds, (guild) => {
return guild._id === payload.guildId;
});
store.state.myGuilds.splice(guildIndex, 1);
}
return response.data.data;
}
export async function create (store, payload) {
let response = await axios.post('/api/v3/groups/', payload.group);
let newGroup = response.data.data;
// @TODO: Add party
if (newGroup.privacy === 'public') {
store.state.publicGuilds.push(newGroup);
} else if (newGroup.privacy === 'private') {
store.state.myGuilds.push(newGroup);
}
return newGroup;
}
export async function update (store, payload) {
// Remove populated fields
let groupDetailsToSend = omit(payload.group, ['chat', 'challenges', 'members', 'invites']);
if (groupDetailsToSend.leader && groupDetailsToSend.leader._id) groupDetailsToSend.leader = groupDetailsToSend.leader._id;
let response = await axios.put(`/api/v3/groups/${payload.group.id}`, {
data: groupDetailsToSend,
});
let updatedGroup = response.data.data;
// @TODO: Replace old group
// store.state.publicGuilds.push(newGroup);
return updatedGroup;
}
export async function rejectInvite (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/reject-invite`);
// @TODO: refresh or add guild
return response;
}
export async function removeMember (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/removeMember/${payload.memberId}`, {
message: payload.message,
});
// @TODO: find guild and remove member
return response;
}
export async function invite (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/invite`, {
uuids: payload.invitationDetails.uuids,
emails: payload.invitationDetails.emails,
});
// @TODO: find guild and add invites
return response;
}
export async function inviteToQuest (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/quests/invite/${payload.key}`);
// @TODO: Any updates?
return response;
}
export async function addManager (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/add-manager/`, {
managerId: payload.memberId,
});
// @TODO: Add managers to group or does the component handle?
return response;
}
export async function removeManager (store, payload) {
let response = await axios.post(`/api/v3/groups/${payload.groupId}/remove-manager/`, {
managerId: payload.memberId,
});
// @TODO: Add managers to group or does the component handle?
return response;
}