mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-27 07:12:39 +00:00
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
export const HISTORY_PREFIX = 'HOMEBREWERY-HISTORY'
|
|
// const HISTORY_SAVE_DELAYS = {
|
|
// 0: 0, // 0 minutes (if not specified)
|
|
// 1: 2, // 2 minutes
|
|
// 2: 10, // 10 minutes
|
|
// 3: 60, // 60 minutes
|
|
// 4: 12 * 60, // 12 hours
|
|
// 5: 2 * 24 * 60 // 2 days
|
|
// };
|
|
|
|
// Test values
|
|
const HISTORY_SAVE_DELAYS = {
|
|
0: 0, // 0 minutes (if not specified)
|
|
1: 1, // 1 minutes
|
|
2: 2, // 2 minutes
|
|
3: 3, // 3 minutes
|
|
4: 4, // 4 minutes
|
|
5: 5 // 5 minutes
|
|
};
|
|
|
|
const DEFAULT_STORED_BREW = {
|
|
shareId : 'default_brew',
|
|
expireAt : '2000-01-01T00:00:00.000Z'
|
|
};
|
|
|
|
function getKeyBySlot(brew, slot){
|
|
return `${HISTORY_PREFIX}-${brew.shareId}-${slot}`;
|
|
};
|
|
|
|
function getVersionBySlot(brew, slot){
|
|
// Read stored brew data
|
|
// - If it exists, parse data to object
|
|
// - If it doesn't exist, pass default object
|
|
const key = getKeyBySlot(brew, slot);
|
|
const storedVersion = localStorage.getItem(key);
|
|
const output = storedVersion ? JSON.parse(storedVersion) : { ...DEFAULT_STORED_BREW, ...brew };
|
|
return output;
|
|
};
|
|
|
|
function updateStoredBrew(brew, slot=0){
|
|
const archiveBrew = {};
|
|
|
|
// Data from brew to be stored
|
|
archiveBrew.title = brew.title;
|
|
archiveBrew.text = brew.text;
|
|
archiveBrew.style = brew.style;
|
|
archiveBrew.version = brew.version;
|
|
archiveBrew.shareId = brew.shareId;
|
|
|
|
// Calculated values
|
|
archiveBrew.savedAt = new Date();
|
|
archiveBrew.expireAt = new Date();
|
|
archiveBrew.expireAt.setMinutes(archiveBrew.expireAt.getMinutes() + HISTORY_SAVE_DELAYS[slot]);
|
|
|
|
// Store data
|
|
const key = getKeyBySlot(brew, slot);
|
|
localStorage.setItem(key, JSON.stringify(archiveBrew));
|
|
return;
|
|
};
|
|
|
|
export function updateHistory(brew) {
|
|
const numbers = [1,2,3,4,5];
|
|
const history = {};
|
|
|
|
// Load data from local storage to History object
|
|
numbers.forEach((i)=>{
|
|
history[i] = getVersionBySlot(brew, i);
|
|
});
|
|
|
|
numbers.toReversed().every((slot)=>{
|
|
const storedVersion = history[slot];
|
|
|
|
// If slot has expired, update
|
|
if(new Date() >= new Date(storedVersion.expireAt)){
|
|
const keys = Array.from(Array(slot - 1).keys());
|
|
keys.toReversed().every((n)=>{
|
|
const num = n + 1;
|
|
updateStoredBrew({ ...history[num], shareId: brew.shareId }, num + 1);
|
|
if(num == 1) {
|
|
updateStoredBrew(brew, 1);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
};
|