file handles only in service worker
This commit is contained in:
parent
276e09b2ca
commit
89908827fb
4
app.js
4
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)
|
||||
))
|
||||
});
|
||||
|
||||
|
||||
@ -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"],
|
||||
|
||||
53
graph.js
53
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,23 +104,24 @@ 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<userData.length; i++)
|
||||
{
|
||||
if(userFile.name.endsWith(".json"))
|
||||
{
|
||||
const userID = userFile.name.substring(0, userFile.name.length-5);
|
||||
const userObject = UserList[userID];
|
||||
const [userID, userObject] = userData[i];
|
||||
try
|
||||
{
|
||||
/** @type {Record<string, Array<[time:number, data:string]>>} */
|
||||
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(loadedData).forEach(([partID, payload])=>{
|
||||
Object.entries(json).forEach(([partID, payload])=>{
|
||||
|
||||
let latest = 0;
|
||||
payload.forEach((condensedWork)=>{
|
||||
@ -129,7 +129,7 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName)
|
||||
{
|
||||
latest = condensedWork[0];
|
||||
}
|
||||
condensedWork.push(userObject);
|
||||
condensedWork[2] = userObject;
|
||||
});
|
||||
|
||||
const passCheck = PartList[partID].pass.get(this);
|
||||
@ -146,25 +146,20 @@ function Builder({user, role, part, desk, pass}, folderHandle, folderName)
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.warn(`Couldn't parse user data: ${roomFolder.name} / ${passFolder.name} / ${userFile.name}`, 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;
|
||||
}
|
||||
|
||||
6
types.ts
6
types.ts
@ -1,7 +1,7 @@
|
||||
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[], pass:Map<Pass, {need:number[], make:number[]}>, 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<void>, dump:()=>void};
|
||||
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>void}>, need:Desk[], make:Desk[]};
|
||||
|
||||
@ -21,7 +21,6 @@ export type GraphBuilder=
|
||||
desk:Desks,
|
||||
pass:Record<string, [name:string]>,
|
||||
},
|
||||
folderHandle:FileSystemDirectoryHandle,
|
||||
folderName:string
|
||||
)
|
||||
=>{
|
||||
@ -36,7 +35,8 @@ export type MassDscription=
|
||||
(
|
||||
params:Record<string, Parameters<GraphBuilder>[0]>
|
||||
)
|
||||
=>(folder:FileSystemDirectoryHandle)=>Record<string, ReturnType<GraphBuilder>>
|
||||
=>()=>Record<string, ReturnType<GraphBuilder>>
|
||||
|
||||
export type UserPassFile = Record<string, Array<[time:number, data:string, user?:User]>>
|
||||
|
||||
export type Scanner =(desk:Desk, pass:Pass)=>void;
|
||||
Loading…
Reference in New Issue
Block a user