Refactor armoire content to be cached by day

This commit is contained in:
Phillip Thelen
2024-05-15 16:51:09 +02:00
parent 46d164ddd1
commit 4d38880249
17 changed files with 198 additions and 97 deletions

View File

@@ -15,6 +15,7 @@ import back from './back';
import body from './body';
import headAccessory from './head-accessory';
import eyewear from './eyewear';
import memoize from '../../fns/datedMemoize';
const gear = {
weapon,
@@ -27,44 +28,65 @@ const gear = {
eyewear,
};
/*
The gear is exported as a tree (defined above), and a flat list
(eg, {weapon_healer_1: .., shield_special_0: ...}) since
they are needed in different forms at different points in the app
*/
const flat = {};
function populateGear (key, klass, type, index, item) {
const set = `${klass}-${index}`;
defaults(item, {
type,
key,
set,
klass,
index,
str: 0,
int: 0,
per: 0,
con: 0,
canBuy: () => false,
});
if (item.canOwn === undefined && (item.mystery || key.indexOf('takeThis') !== -1)) {
item.canOwn = ownsItem(key);
}
}
each(GEAR_TYPES, type => {
const allGearTypes = CLASSES.concat(['base', 'special', 'mystery', 'armoire']);
each(allGearTypes, klass => {
each(gear[type][klass], (item, index) => {
const key = `${type}_${klass}_${index}`;
const set = `${klass}-${index}`;
defaults(item, {
type,
key,
set,
klass,
index,
str: 0,
int: 0,
per: 0,
con: 0,
canBuy: () => false,
});
if (item.mystery || key.indexOf('takeThis') !== -1) {
item.canOwn = ownsItem(key);
}
flat[key] = item;
populateGear(key, klass, type, index, item);
});
});
});
function buildFlatList () {
/*
The gear is exported as a tree (defined above), and a flat list
(eg, {weapon_healer_1: .., shield_special_0: ...}) since
they are needed in different forms at different points in the app
*/
const flat = {};
each(GEAR_TYPES, type => {
const allGearTypes = CLASSES.concat(['base', 'special', 'mystery', 'armoire']);
each(allGearTypes, klass => {
each(gear[type][klass], (item, index) => {
const key = `${type}_${klass}_${index}`;
populateGear(key, klass, type, index, item);
flat[key] = item;
});
});
});
return flat;
}
const memoizedFlatList = memoize(buildFlatList);
export default {
tree: gear,
flat,
get flat () {
return memoizedFlatList();
},
};