summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorHaishan <[email protected]>2019-01-13 22:23:05 +0800
committerHaishan <[email protected]>2019-01-13 22:25:15 +0800
commit61dd81d488662ce43af0193796673ebf01dd0d90 (patch)
tree185d0813c804bed189968481c4ba9600ee7b371a /src/api
parentdfc85a317a0a35dadb05190543387fe4e1896704 (diff)
refactor(logs): move logs state into redux store
Diffstat (limited to 'src/api')
-rw-r--r--src/api/logs.js54
1 files changed, 18 insertions, 36 deletions
diff --git a/src/api/logs.js b/src/api/logs.js
index 6de5b65..c8c3593 100644
--- a/src/api/logs.js
+++ b/src/api/logs.js
@@ -6,37 +6,20 @@ const getRandomStr = () => {
return Math.floor((1 + Math.random()) * 0x10000).toString(16);
};
-const Size = 300;
-
let even = false;
-const store = {
- logs: [],
- size: Size,
- fetched: false,
- subscribers: [],
- appendData(o) {
- const now = new Date();
- const time = now.toLocaleString('zh-Hans');
- // mutate input param in place intentionally
- o.time = time;
- o.id = now - 0 + getRandomStr();
- o.even = even = !even;
- this.logs.unshift(o);
- if (this.logs.length > this.size) this.logs.pop();
- this.subscribers.forEach(f => f(o));
- },
+let fetched = false;
- subscribe(listener) {
- const me = this;
- this.subscribers.push(listener);
- return function unsubscribe() {
- const idx = me.subscribers.indexOf(listener);
- me.subscribers.splice(idx, 1);
- };
- }
-};
+function appendData(o, callback) {
+ const now = new Date();
+ const time = now.toLocaleString('zh-Hans');
+ // mutate input param in place intentionally
+ o.time = time;
+ o.id = now - 0 + getRandomStr();
+ o.even = even = !even;
+ callback(o);
+}
-function pump(reader) {
+function pump(reader, appendLog) {
return reader.read().then(({ done, value }) => {
if (done) {
// eslint-disable-next-line no-console
@@ -47,31 +30,30 @@ function pump(reader) {
const arrRawJSON = t.trim().split('\n');
arrRawJSON.forEach(s => {
try {
- store.appendData(JSON.parse(s));
+ appendData(JSON.parse(s), appendLog);
} catch (err) {
// eslint-disable-next-line no-console
console.log('JSON.parse error', JSON.parse(s));
}
});
- return pump(reader);
+ return pump(reader, appendLog);
});
}
-function fetchLogs(apiConfig) {
- if (store.fetched) return store;
- store.fetched = true;
+function fetchLogs(apiConfig, appendLog) {
+ if (fetched) return;
+ fetched = true;
const { url, init } = getURLAndInit(apiConfig);
fetch(url + endpoint, init)
.then(response => {
const reader = response.body.getReader();
- pump(reader);
+ pump(reader, appendLog);
})
.catch(err => {
- store.fetched = false;
+ fetched = false;
// eslint-disable-next-line no-console
console.log('GET /logs error', err);
});
- return store;
}
export { fetchLogs };