started
This commit is contained in:
parent
297cc5e07d
commit
18c2687e78
94
block_core.ts
Normal file
94
block_core.ts
Normal file
@ -0,0 +1,94 @@
|
||||
export type Work = {data:string, user:string, time:number};
|
||||
export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]};
|
||||
export type Need = [part:Part, time:number];
|
||||
export type DeskMode = "all" | "one";
|
||||
export type Desk = {name:string, need:Need[], make:Part[], mode:DeskMode, role:[]};
|
||||
|
||||
const Part = (name:string):Part=>
|
||||
{
|
||||
return {name, time:0, work:[], need:[], make:[]};
|
||||
}
|
||||
|
||||
const Desk = (name:string, need:Need[], make:Part[], mode:DeskMode):Desk=>
|
||||
{
|
||||
const obj:Desk = {name, need, make, mode, role:[]};
|
||||
for(let i=0; i<need.length; i++)
|
||||
{
|
||||
const [part] = need[i];
|
||||
|
||||
part.need.push(obj);
|
||||
}
|
||||
for(let i=0; i<make.length; i++)
|
||||
{
|
||||
make[i].make.push(obj);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
const Work =(part:Part, data:string, time=Date.now())=>{
|
||||
const work = {data, user:"", time};
|
||||
if(time > part.time){
|
||||
part.work.unshift(work);
|
||||
part.time = time;
|
||||
}
|
||||
else
|
||||
{
|
||||
part.work.push(work);
|
||||
}
|
||||
part.need.forEach(Recompute);
|
||||
part.make.forEach(Recompute);
|
||||
}
|
||||
|
||||
const Recompute = (desk:Desk)=>{
|
||||
|
||||
let latestMake = -Infinity;
|
||||
for(let i=0; i<desk.make.length; i++)
|
||||
{
|
||||
const {time} = desk.make[i];
|
||||
if(time > latestMake)
|
||||
{
|
||||
latestMake = time;
|
||||
}
|
||||
}
|
||||
|
||||
let latestNeed = -Infinity;
|
||||
const dirtyNeed = [];
|
||||
for(let i=0; i<desk.need.length; i++)
|
||||
{
|
||||
const [{time}] = desk.need[i];
|
||||
if(time > latestNeed)
|
||||
{
|
||||
latestNeed = time;
|
||||
}
|
||||
if(time < latestMake)
|
||||
{
|
||||
dirtyNeed.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
const dirtyMake = []
|
||||
for(let i=0; i<desk.make.length; i++)
|
||||
{
|
||||
const {time} = desk.make[i];
|
||||
if(time > latestNeed)
|
||||
{
|
||||
dirtyMake.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
return [dirtyNeed, dirtyMake];
|
||||
}
|
||||
|
||||
|
||||
type User = {name:string};
|
||||
type Role = [name:string, users:[]]
|
||||
|
||||
function BlockRole<Records extends Record<string, string>>(r:Records):{[K in keyof Records]: Role} {
|
||||
const result = {};
|
||||
for (const key in r) {
|
||||
result[key] = [key, []];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export {Part, Desk, Work, Recompute, BlockRole};
|
||||
4
block_graph.ts
Normal file
4
block_graph.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import * as Core from "./block_core.ts";
|
||||
|
||||
const resp = await import("./block_role.ts");
|
||||
const roleTest = resp.default.r1;
|
||||
5
block_role.ts
Normal file
5
block_role.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import { BlockRole } from "./block_core.ts";
|
||||
|
||||
export default BlockRole({
|
||||
r1:"Developer"
|
||||
})
|
||||
Loading…
Reference in New Issue
Block a user