Files
Pinry/pinry-spa/src/components/api.js

84 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-11-22 19:12:02 +08:00
import axios from 'axios';
2019-11-29 13:43:09 +08:00
import storage from './utils/storage';
2019-11-22 19:12:02 +08:00
const API_PREFIX = '/api/v2/';
function fetchPins(offset, tagFilter, userFilter) {
const url = `${API_PREFIX}pins/`;
const queryArgs = {
format: 'json',
ordering: '-id',
2019-11-29 12:26:50 +08:00
limit: 30,
2019-11-22 19:12:02 +08:00
offset,
};
if (tagFilter) queryArgs.tags__name = tagFilter;
if (userFilter) queryArgs.submitter__username = userFilter;
return axios.get(
url,
{ params: queryArgs },
);
}
2019-11-28 23:12:19 +08:00
function fetchPinsForBoard(boardId) {
const url = `${API_PREFIX}boards/${boardId}`;
return new Promise(
(resolve, reject) => {
axios.get(url).then(
(resp) => {
2019-11-29 00:16:28 +08:00
resolve({ data: { results: resp.data.pins_detail, next: null } });
2019-11-28 23:12:19 +08:00
},
error => reject(error),
);
},
);
}
2019-11-29 13:43:09 +08:00
const User = {
storageKey: 'pinry.user',
logOut() {
const self = this;
return new Promise(
(resolve) => {
axios.get('/api-auth/logout/?next=/api/v2/').then(
() => {
storage.set(self.storageKey, null, 1);
resolve();
},
);
},
);
},
fetchUserInfo() {
/* returns null if user not logged in */
const self = this;
const userInfo = storage.get(self.storageKey);
if (userInfo !== null) {
return new Promise(
resolve => resolve(userInfo),
);
}
const url = `${API_PREFIX}users/`;
return new Promise(
(resolve) => {
axios.get(url).then(
(resp) => {
const users = resp.data;
if (users.length === 0) {
return resolve(null);
}
const value = users[0];
storage.set(self.storageKey, value, 60 * 5 * 1000);
return resolve(users[0]);
},
);
},
);
},
};
2019-11-22 19:12:02 +08:00
export default {
fetchPins,
2019-11-28 23:12:19 +08:00
fetchPinsForBoard,
2019-11-29 13:43:09 +08:00
User,
2019-11-22 19:12:02 +08:00
};