52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
import {EventEmitter} from 'events';
|
|
import Client from './github-client';
|
|
|
|
let currentUser = null;
|
|
let emojisMap = null;
|
|
|
|
class Store extends EventEmitter {
|
|
off() { // EventEmitter has `.on` but no matching `.off`
|
|
const slice = [].slice;
|
|
const args = arguments.length >= 1 ? slice.call(arguments, 0) : [];
|
|
return this.removeListener.apply(this, args);
|
|
}
|
|
clear() {
|
|
currentUser = null;
|
|
}
|
|
getUser() {
|
|
return currentUser;
|
|
}
|
|
fetchUser() {
|
|
if (currentUser) {
|
|
return Promise.resolve(currentUser);
|
|
} else {
|
|
if (Client.hasCredentials()) {
|
|
return Client.dbPromise().then(() => {
|
|
return Client.getOcto().user.fetch().then((info) => {
|
|
currentUser = info;
|
|
this.emit('change', info);
|
|
return info;
|
|
});
|
|
});
|
|
} else {
|
|
return Promise.resolve(null);
|
|
}
|
|
}
|
|
}
|
|
fetchEmojis() {
|
|
if (emojisMap) {
|
|
return Promise.resolve(emojisMap);
|
|
} else {
|
|
return Client.dbPromise().then(() => {
|
|
Client.getOcto().emojis.fetch()
|
|
.then((emojis) => emojisMap = emojis);
|
|
});
|
|
}
|
|
}
|
|
getEmojis() {
|
|
return emojisMap;
|
|
}
|
|
}
|
|
|
|
export default new Store();
|