desk state scanning started

This commit is contained in:
Seth Trowbridge 2025-07-27 15:29:50 -04:00
parent 84cb05f9d6
commit bd0ff30f2a
6 changed files with 40 additions and 30 deletions

2
app.js
View File

@ -39,7 +39,7 @@ async function getFolderHandle(dirHandle)
const listPass = H("ul");
Object.entries(roomData.Pass).forEach(([passID, passData])=>{
listPass.appendChild(H("li", {},
H("button", { onclick(){ passData.load();console.log(roomData.Part); } }, passID)
H("button", { onclick(){ passData.load();console.log(roomData); } }, passID)
))
});

View File

@ -11,7 +11,6 @@ export default Graph(
},
part:
{
"a nice room": "yep!",
p1:"hey",
p2:"sup"
},
@ -20,7 +19,8 @@ export default Graph(
d1:["Desk 01", ["dev"], "all", {p2:3}, "p1"]
},
pass:{
pass_01:["pass 01"]
pass_01:["pass 01"],
pass_02:["pass 02"]
}
}
}

View File

@ -51,7 +51,8 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName)
need,
time,
make:[],
role:[]
role:[],
pass:new Map()
};
for(const partId in needObj)
@ -138,12 +139,23 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName)
}
}
}
const selfPass = this;
Object.entries(DeskList).forEach(([deskID, deskObj])=>{
Scan(deskObj, selfPass);
});
this.live = true;
},
dump(){
const selfPass = this;
Object.entries(PartList).forEach(([partID, partObj])=>{
partObj.pass.delete(this);
partObj.pass.delete(selfPass);
});
Object.entries(DeskList).forEach(([deskID, deskObj])=>{
deskObj.pass.delete(selfPass);
});
this.live = false;
},
live:false
@ -172,45 +184,42 @@ export default function Graph(params)
}
const Scan =(desk)=>
/** @type {TYPES.Scanner} */
const Scan =(desk, pass)=>
{
const need = Object.keys(desk.need);
const make = desk.make;
const dirtyNeed = [];
const dirtyMake = [];
let makeMin = Infinity;
let needMax = -Infinity;
for(let i=0; i<need.length; i++)
for(let i=0; i<desk.need.length; i++)
{
const id = need[i];
const part = Part.find(id);
if(part.time > needMax) needMax = part.time;
const part = desk.need[i];
const partPassTime = part.pass.get(pass)?.time || 0;
if(partPassTime > needMax) needMax = partPassTime;
}
for(let i=0; i<make.length; i++)
for(let i=0; i<desk.make.length; i++)
{
const id = make[i];
const part = Part.find(make[i]);
if(part.time < makeMin) makeMin = part.time;
if(part.time < needMax)
const part = desk.make[i];
const partPassTime = part.pass.get(pass)?.time || 0;
if(partPassTime < makeMin) makeMin = partPassTime;
if(partPassTime < needMax)
{
dirtyMake.push(id);
dirtyMake.push(i);
}
}
for(let i=0; i<need.length; i++)
for(let i=0; i<desk.need.length; i++)
{
const id = need[i];
const part = Part.find(id);
if(part.time > makeMin)
const part = desk.need[i];
const partPassTime = part.pass.get(pass)?.time || 0;
if(partPassTime > makeMin)
{
dirtyNeed.push(id);
dirtyNeed.push(i);
}
}
console.log("scan", dirtyNeed, dirtyMake);
return [dirtyNeed, dirtyMake];
desk.pass.set(pass, [dirtyNeed, dirtyMake])
};

View File

@ -29,11 +29,9 @@ async function Interceptor(event)
{
filePointer = await filePointer.getDirectoryHandle(parts[i], {create: false});
}
console.log("about to get file handle", filePointer);
filePointer = await filePointer.getFileHandle(parts[parts.length-1], {create: false});
const file = await filePointer.getFile();
const content = await file.text();
console.log("responding to", pathname, "with content:", content);
return new Response(content, {
headers: {
'Content-Type': 'application/javascript',

View File

@ -1,6 +1,6 @@
export type User = {name:string, desk:Set<Desk>};
export type Role = {name:string, user:User[]};
export type Desk = {name:string, need:Part[], time:number[], make:Part[], mode:string, role:Role[]};
export type Desk = {name:string, need:Part[], time:number[], make:Part[], pass:Map<Pass, [dirtyNeed:number[], dirtyMake:number[]]>, mode:string, role:Role[]};
export type Work = [user:User, time:number, data:string];
export type Pass = {name:string, path:string, live:boolean, load:()=Promise<void>, dump:()=>void};
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[]}>, need:Desk[], make:Desk[]};
@ -36,4 +36,7 @@ export type MassDscription=
(
params:Record<string, Parameters<GraphBuilder>[0]>
)
=>(folder:FileSystemDirectoryHandle)=>Record<string, ReturnType<GraphBuilder>>
=>(folder:FileSystemDirectoryHandle)=>Record<string, ReturnType<GraphBuilder>>
export type Scanner =(desk:Desk, pass:Pass)=>void;