diff --git a/app.js b/app.js index b6bec80..79185b5 100644 --- a/app.js +++ b/app.js @@ -30,7 +30,7 @@ async function getFolderHandle(dirHandle) const workingFolder = await dirHandle.getDirectoryHandle("room"); const module = await import("./data/room.js"); - const rooms = module.default(workingFolder); + const rooms = module.default(); button.innerText = "change directory"; listRoom.innerHTML = ""; @@ -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);globalThis.ROOM=roomData; } }, passID) + H("button", { onclick(){ passData.load();console.log(roomData);globalThis.ROOM=roomData; } }, passData.name) )) }); diff --git a/data/room.js b/data/room.js index a905132..5aef6bd 100644 --- a/data/room.js +++ b/data/room.js @@ -16,7 +16,7 @@ export default Graph( }, desk: { - d1:["Desk 01", ["dev"], "all", {p1:3}, "p2"] + d1:["Desk 01", ["dev"], "one", {p1:3}, "p2"] }, pass:{ pass_01:["pass 01"], diff --git a/graph.js b/graph.js index 71a63a0..f8bc5d2 100644 --- a/graph.js +++ b/graph.js @@ -1,7 +1,7 @@ /** @import * as TYPES from "./types.ts" */ /** @type {TYPES.GraphBuilder} */ -function Builder({user, role, part, desk, pass}, folderHandle, folderName) +function Builder({user, role, part, desk, pass}, folderName) { // mutate users @@ -92,10 +92,9 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName) path:passID, async load(){ - const roomFolder = await folderHandle.getDirectoryHandle(folderName); - const passFolder = await roomFolder.getDirectoryHandle(passID); - Object.entries(PartList).forEach(([partID, partObj])=> + // make room for this pass to each part and desk + Object.values(PartList).forEach((partObj)=> { partObj.pass.set(passObj, {time:0, work:[], make(user, data) { @@ -105,66 +104,62 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName) partObj.need.forEach((arg)=>{Scan(arg, passObj)}); }}); }); - Object.entries(DeskList).forEach(([deskID, deskObj])=> + Object.values(DeskList).forEach((deskObj)=> { deskObj.pass.set(passObj, {need:[], make:[]}); }); + - for await (const [_, userFile] of passFolder.entries()) + // actually load the pass + const userData = Object.entries(UserList); + for(let i=0; i>} */ - const loadedData = await userFile.getFile().then(d=>d.text()).then(t=>JSON.parse(t)); + const resp = await fetch(`./room/${folderName}/${passID}/${userID}.json`); + /** @type {TYPES.UserPassFile} */ + const json = await resp.json(); + + Object.entries(json).forEach(([partID, payload])=>{ - Object.entries(loadedData).forEach(([partID, payload])=>{ - - let latest = 0; - payload.forEach((condensedWork)=>{ - if(condensedWork[0] > latest) - { - latest = condensedWork[0]; - } - condensedWork.push(userObject); - }); - - const passCheck = PartList[partID].pass.get(this); - if(passCheck) + let latest = 0; + payload.forEach((condensedWork)=>{ + if(condensedWork[0] > latest) { - if(latest > passCheck.time) - { - passCheck.time = latest; - } - passCheck.work = /** @type {TYPES.Work[]}*/(payload); + latest = condensedWork[0]; } + condensedWork[2] = userObject; + }); - }) - } - catch (e) - { - console.warn(`Couldn't parse user data: ${roomFolder.name} / ${passFolder.name} / ${userFile.name}`, e); - } + const passCheck = PartList[partID].pass.get(this); + if(passCheck) + { + if(latest > passCheck.time) + { + passCheck.time = latest; + } + passCheck.work = /** @type {TYPES.Work[]}*/(payload); + } + + }) } + catch(e) + { + console.warn(`No data for user ${userID} on pass ${passID} yet.`) + continue; + } + } - Object.entries(DeskList).forEach(([deskID, deskObj])=>{ - Scan(deskObj, passObj); - }); + // update the graph + Object.values(DeskList).forEach((deskObj)=>Scan(deskObj, passObj)); this.live = true; }, dump(){ - Object.entries(PartList).forEach(([partID, partObj])=>{ - partObj.pass.delete(passObj); - }); - Object.entries(DeskList).forEach(([deskID, deskObj])=>{ - deskObj.pass.delete(passObj); - }); - + Object.values(PartList).forEach((partObj)=>partObj.pass.delete(passObj)); + Object.values(DeskList).forEach((deskObj)=>deskObj.pass.delete(passObj)); this.live = false; }, live:false @@ -185,10 +180,10 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName) /** @type {TYPES.MassDscription} */ export default function Graph(params) { - return (folderHandle)=>{ + return ()=>{ Object.entries(params).forEach( ([roomFolderName, roomData])=> { - params[roomFolderName] = Builder(roomData, folderHandle, roomFolderName); + params[roomFolderName] = Builder(roomData, roomFolderName); }); return params; } diff --git a/types.ts b/types.ts index 5060952..f6e979f 100644 --- a/types.ts +++ b/types.ts @@ -1,7 +1,7 @@ export type User = {name:string, desk:Set}; export type Role = {name:string, user:User[]}; export type Desk = {name:string, need:Part[], time:number[], make:Part[], pass:Map, mode:string, role:Role[]}; -export type Work = [user:User, time:number, data:string]; +export type Work = [time:number, data:string, user:User]; export type Pass = {name:string, path:string, live:boolean, load:()=>Promise, dump:()=>void}; export type Part = {name:string, pass:Mapvoid}>, need:Desk[], make:Desk[]}; @@ -21,7 +21,6 @@ export type GraphBuilder= desk:Desks, pass:Record, }, - folderHandle:FileSystemDirectoryHandle, folderName:string ) =>{ @@ -36,7 +35,8 @@ export type MassDscription= ( params:Record[0]> ) -=>(folder:FileSystemDirectoryHandle)=>Record> +=>()=>Record> +export type UserPassFile = Record> export type Scanner =(desk:Desk, pass:Pass)=>void; \ No newline at end of file