✨ basic ui, some filters
This commit is contained in:
60
ui/persistent.js
Normal file
60
ui/persistent.js
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
import * as nodes from '../src/nodes';
|
||||
import defaultValues from './defaultGraph';
|
||||
|
||||
|
||||
export const createNode = ({name, options, id}) => {
|
||||
try {
|
||||
const node = new nodes[name](options);
|
||||
node.deserialize({id, options});
|
||||
return node;
|
||||
} catch (err) {
|
||||
console.error('Failed to create node', name, err)
|
||||
}
|
||||
}
|
||||
|
||||
export const createNodes = (nodes) => {
|
||||
nodes = nodes.map(({node, x, y}) => {
|
||||
const nodeInstance = createNode(node);
|
||||
return ({
|
||||
node: nodeInstance,
|
||||
x, y,
|
||||
connect(outputs) {
|
||||
try {
|
||||
nodeInstance.reconnect(node, outputs);
|
||||
} catch(err) {
|
||||
console.error('Can\'t recoonect', nodeInstance, err);
|
||||
}
|
||||
}
|
||||
});
|
||||
}).filter(({node}) => node);
|
||||
|
||||
const outputsById = nodes
|
||||
.map(({node}) => Object.values(node.out.__values))
|
||||
.reduce((acc, nxt) => acc.concat(nxt), [])
|
||||
.reduce((acc, nxt) => {
|
||||
acc[nxt.id] = nxt;
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
return nodes.map(({node, x, y, connect}) => {
|
||||
connect(outputsById);
|
||||
return {node,x,y};
|
||||
})
|
||||
}
|
||||
|
||||
export const serializeNodes = (nodes) =>
|
||||
nodes.map(({node, x, y}) => ({
|
||||
node: node.serialize(),
|
||||
x, y,
|
||||
}));
|
||||
|
||||
|
||||
export const load = (name) => {
|
||||
try {
|
||||
return createNodes(JSON.parse(localStorage.getItem(`IFP_GRAPH_${name}`)) || defaultValues);
|
||||
} catch (err) {
|
||||
return createNodes(defaultValues);
|
||||
}
|
||||
};
|
||||
export const save = (name, graph) => localStorage.setItem(`IFP_GRAPH_${name}`, JSON.stringify(serializeNodes(graph)));
|
||||
Reference in New Issue
Block a user