mirror of https://github.com/rancher/dashboard.git
122 lines
2.8 KiB
JavaScript
122 lines
2.8 KiB
JavaScript
import { normalizeType, KEY_FIELD_FOR } from './normalize';
|
|
import { proxyFor } from './resource-proxy';
|
|
import { addObject, addObjects, clear, removeObject } from '@/utils/array';
|
|
|
|
export default {
|
|
applyConfig(state, config) {
|
|
if ( !state.config ) {
|
|
state.config = {};
|
|
}
|
|
|
|
Object.assign(state.config, config);
|
|
},
|
|
|
|
registerType(state, type) {
|
|
if ( !state.types[type] ) {
|
|
const cache = {
|
|
list: [],
|
|
haveAll: false,
|
|
};
|
|
|
|
// Not enumerable so they don't get sent back to the client for SSR
|
|
Object.defineProperty(cache, 'map', { value: new Map() });
|
|
|
|
if ( process.server ) {
|
|
Object.defineProperty(cache.list, '__rehydrateAll', { value: type, enumerable: true });
|
|
}
|
|
|
|
state.types[type] = cache;
|
|
}
|
|
},
|
|
|
|
loadAll(state, { type, data, ctx }) {
|
|
if (!data) {
|
|
return;
|
|
}
|
|
const cache = state.types[type];
|
|
const keyField = KEY_FIELD_FOR[type] || KEY_FIELD_FOR['default'];
|
|
|
|
clear(cache.list);
|
|
cache.map.clear();
|
|
|
|
if ( process.server ) {
|
|
Object.defineProperty(cache.list, '__rehydrateAll', { value: type, enumerable: true });
|
|
}
|
|
|
|
const proxies = data.map(x => proxyFor(ctx, x));
|
|
|
|
addObjects(cache.list, proxies);
|
|
|
|
for ( let i = 0 ; i < data.length ; i++ ) {
|
|
cache.map.set(data[i][keyField], proxies[i]);
|
|
}
|
|
|
|
cache.haveAll = true;
|
|
},
|
|
|
|
load(state, { resource, ctx }) {
|
|
let type = normalizeType(resource.type);
|
|
const keyField = KEY_FIELD_FOR[type] || KEY_FIELD_FOR['default'];
|
|
const id = resource[keyField];
|
|
let cache = state.types[type];
|
|
let entry = cache.map.get(id);
|
|
|
|
if ( entry ) {
|
|
Object.assign(entry, resource);
|
|
} else {
|
|
entry = proxyFor(ctx, resource);
|
|
|
|
addObject(cache.list, entry);
|
|
cache.map.set(id, entry);
|
|
}
|
|
|
|
if ( resource.baseType ) {
|
|
type = normalizeType(resource.baseType);
|
|
cache = state.types[type];
|
|
if ( cache ) {
|
|
addObject(cache.list, entry);
|
|
cache.map.set(id, entry);
|
|
}
|
|
}
|
|
},
|
|
|
|
remove(state, obj) {
|
|
let type = normalizeType(obj.type);
|
|
const keyField = KEY_FIELD_FOR[type] || KEY_FIELD_FOR['default'];
|
|
const id = obj[keyField];
|
|
|
|
let entry = state.types[type];
|
|
|
|
if ( entry ) {
|
|
removeObject(entry.list, obj);
|
|
entry.map.delete(id);
|
|
}
|
|
|
|
if ( obj.baseType ) {
|
|
type = normalizeType(obj.baseType);
|
|
entry = state.types[type];
|
|
|
|
if ( entry ) {
|
|
removeObject(entry.list, obj);
|
|
entry.map.delete(id);
|
|
}
|
|
}
|
|
},
|
|
|
|
removeAll(state) {
|
|
state.types = {};
|
|
},
|
|
|
|
setWantSocket(state, want) {
|
|
state.wantSocket = want;
|
|
},
|
|
|
|
enqueuePending(state, obj) {
|
|
state.pendingSends.push(obj);
|
|
},
|
|
|
|
dequeuePending(state, obj) {
|
|
removeObject(state.pendingSends, obj);
|
|
}
|
|
};
|