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