forked from gabceb/redux-persist-transform-expire
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
47 lines (43 loc) · 1.28 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
'use strict'
import {
reduxPersist,
createTransform
} from 'redux-persist';
const PERSIST_EXPIRE_DEFAULT_KEY = 'persistExpiresAt';
function dateToUnix(date) {
return +(date.getTime() / 1000).toFixed(0);
}
export default function createExpirationTransform(expireDatas) {
expireDatas = expireDatas || {};
let stateMap = new Map();
const inbound = (state, key) => {
if ((state || typeof state === 'object') && expireDatas.hasOwnProperty(key)) {
if (stateMap.has(key)) {
if (typeof state.toJS === 'function') {
let newState = state.toJS();
newState.expireDate = new Date((new Date()).getTime() + expireDatas[key].expireSpan);
return newState;
}
else {
state.expireDate = new Date((new Date()).getTime() + expireDatas[key].expireSpan);
}
}
else {
stateMap.set(key, true);
}
}
return state;
};
const outbound = (state, key) => {
if ((state || typeof state === 'object') && expireDatas.hasOwnProperty(key)) {
if (state.expireDate) {
const data = expireDatas[key];
if (dateToUnix(new Date(state.expireDate)) < dateToUnix(new Date())) {
state = data.default;
}
}
}
return state;
};
return createTransform(inbound, outbound);
}