habitica-self-host/website/client/store/actions/user.js
negue 87f39b4273 item pinning (#8918)
* toggle pinned state of items server + client

* pin quests / add pin src

* add officially pinned items and api to get in app rewards

* update schema and get items deatils

* update pin actions to the new logic

* show countBadge only with a number

* extract getPinKey - pin seasonal items

* togglePinned in buy-dialogs

* add pinKey to shop items

* wip

* wip

* fix path

* togglePinnedItem as common.op / use in client

* fix linting

* pinning: getItemInfo and save in db path and type

* make api more consistent, fix bugs

* updates

* fix bugs

* update actions to current api

* marketGear

* change to pinType

* add mystery_set to getItemInfo

* fix isPinned

* ignore animals

* list shopItems (initial)

* shopItem now has default popoverconent, itemclass and price / currency - list pinned items as rewards - attributes to gear

* show buyModal for the rewards

* show mystery_set icon

* add info whether item is suggested

* write migration, fix style issues

* pin potion and armoire

* make potion, armoire not unpinnable

* show notes for armoire and potion, add default items for new users

* show unpin notification

* add/remove pinned gear on class-change

* remove pinned & add new gear on purchase - refactoring pinning methods - fixes

* always allow to purchase armoire

* highlight item if suggested
2017-08-14 19:15:32 +02:00

73 lines
2 KiB
JavaScript

import { loadAsyncResource } from 'client/libs/asyncResource';
import setProps from 'lodash/set';
import axios from 'axios';
import { togglePinnedItem as togglePinnedItemOp } from 'common/script/ops/pinnedGearUtils';
export function fetch (store, forceLoad = false) { // eslint-disable-line no-shadow
return loadAsyncResource({
store,
path: 'user',
url: '/api/v3/user',
deserialize (response) {
return response.data.data;
},
forceLoad,
});
}
export function set (store, changes) {
const user = store.state.user.data;
for (let key in changes) {
if (key === 'tags') {
// Keep challenge and group tags
const oldTags = user.tags.filter(t => {
return t.group || t.challenge;
});
user.tags = changes[key].concat(oldTags);
} else {
setProps(user, key, changes[key]);
}
}
axios.put('/api/v3/user', changes);
// TODO
// .then((res) => console.log('set', res))
// .catch((err) => console.error('set', err));
}
export async function sleep () {
let response = await axios.post('/api/v3/user/sleep');
return response.data.data;
}
export async function addWebhook (store, payload) {
let response = await axios.post('/api/v3/user/webhook', payload.webhookInfo);
return response.data.data;
}
export async function updateWebhook (store, payload) {
let response = await axios.put(`/api/v3/user/webhook/${payload.webhook.id}`, payload.webhook);
return response.data.data;
}
export async function deleteWebhook (store, payload) {
let response = await axios.delete(`/api/v3/user/webhook/${payload.webhook.id}`);
return response.data.data;
}
export function togglePinnedItem (store, params) {
const user = store.state.user.data;
let addedItem = togglePinnedItemOp(user, params);
axios.get(`/api/v3/user/toggle-pinned-item/${params.type}/${params.path}`);
// TODO
// .then((res) => console.log('equip', res))
// .catch((err) => console.error('equip', err));
return addedItem;
}