passes started
This commit is contained in:
parent
feb55e4c1d
commit
bf9d740c13
47
graph.js
47
graph.js
@ -1,7 +1,7 @@
|
||||
/** @import * as TYPES from "./types.ts" */
|
||||
|
||||
/** @type {TYPES.GraphBuilder} */
|
||||
export default function({users, roles, parts, desks})
|
||||
export default function({users, roles, parts, desks, passes})
|
||||
{
|
||||
|
||||
// mutate users
|
||||
@ -21,7 +21,7 @@ export default function({users, roles, parts, desks})
|
||||
for(let roleId in roles)
|
||||
{
|
||||
const [name, ...userIds] = roles[roleId];
|
||||
RoleList[roleId] = {name, user:userIds.map(uId=>UserList[uId])};
|
||||
RoleList[roleId] = {name, user:userIds.map(uId=>UserList[/**@type{string}*/(uId)])};
|
||||
}
|
||||
|
||||
// mutate parts
|
||||
@ -31,20 +31,18 @@ export default function({users, roles, parts, desks})
|
||||
for(let partId in parts)
|
||||
{
|
||||
const name = parts[partId];
|
||||
PartList[partId] = /** @type {TYPES.Part} */({name, work:[], time:0, need:[], make:[]});
|
||||
PartList[partId] = /** @type {TYPES.Part} */({name, need:[], make:[], pass:new Map()});
|
||||
}
|
||||
|
||||
|
||||
// mutate desks
|
||||
/** @type {Record<string, TYPES.Desk>} */
|
||||
//@ts-ignore
|
||||
const DeskList = desks;
|
||||
|
||||
for(let deskId in desks)
|
||||
{
|
||||
const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId];
|
||||
const need =[];
|
||||
const time =[];
|
||||
/** @type {TYPES.Part[]}*/ const need =[];
|
||||
/** @type {number[]}*/ const time =[];
|
||||
|
||||
/** @type {TYPES.Desk} */
|
||||
const desk = {
|
||||
@ -81,6 +79,41 @@ export default function({users, roles, parts, desks})
|
||||
DeskList[deskId] = desk;
|
||||
}
|
||||
|
||||
// Apply passes
|
||||
for(let passID in passes)
|
||||
{
|
||||
const [name, users] = passes[passID];
|
||||
/** @type {TYPES.Pass} */
|
||||
const pass = {name, path:passID};
|
||||
|
||||
for(let userID in users)
|
||||
{
|
||||
const userPart = users[userID];
|
||||
const user = UserList[userID];
|
||||
for(let partID in userPart)
|
||||
{
|
||||
const part = PartList[partID];
|
||||
const entries = userPart[partID];
|
||||
entries.forEach(([time, data]) => {
|
||||
/** @type {TYPES.Work} */
|
||||
const work = [user, time, data];
|
||||
|
||||
let partPass = part.pass.get(pass);
|
||||
if(!partPass)
|
||||
{
|
||||
partPass = {time:0, work:[]}
|
||||
part.pass.set(pass, partPass);
|
||||
}
|
||||
partPass.work.push(work);
|
||||
if(partPass.time < time)
|
||||
{
|
||||
partPass.time = time;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(users, parts, desks);
|
||||
}
|
||||
|
||||
|
||||
16
index.js
16
index.js
@ -15,5 +15,21 @@ Graph({
|
||||
desks:
|
||||
{
|
||||
d1:["Desk 01", ["dev"], "all", {p2:3}, "p1"]
|
||||
},
|
||||
passes:
|
||||
{
|
||||
pass1:
|
||||
[
|
||||
"Pass One",
|
||||
{
|
||||
u2:
|
||||
{
|
||||
p1:[
|
||||
[123, "some data"],
|
||||
[456, "more data"]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
39
types.ts
39
types.ts
@ -1,18 +1,31 @@
|
||||
type PartBlueprint = string
|
||||
type UserBlueprint = string
|
||||
|
||||
export type GraphBuilder=
|
||||
<
|
||||
Users extends Record<string, UserBlueprint>,
|
||||
Users extends Record<string, string>,
|
||||
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
|
||||
Parts extends Record<string, PartBlueprint>,
|
||||
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, mode:"all"|"one", need:Partial<Record<keyof Parts, number>>, ...make:Array<keyof Parts>]>
|
||||
Parts extends Record<string, string>,
|
||||
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, mode:"all"|"one", need:Partial<Record<keyof Parts, number>>, ...make:Array<keyof Parts>]>,
|
||||
Pass extends Record<
|
||||
string,
|
||||
[
|
||||
name:string,
|
||||
user:Partial<Record<
|
||||
keyof Users,
|
||||
Partial<Record<
|
||||
keyof Parts,
|
||||
Array<[time:number, data:string]>
|
||||
>>
|
||||
>>
|
||||
]
|
||||
>
|
||||
>
|
||||
(
|
||||
params:{users:Users,
|
||||
roles:Roles,
|
||||
parts:Parts,
|
||||
desks:Desks}
|
||||
params:{
|
||||
users:Users,
|
||||
roles:Roles,
|
||||
parts:Parts,
|
||||
desks:Desks,
|
||||
passes:Pass,
|
||||
}
|
||||
)
|
||||
=>void
|
||||
|
||||
@ -20,6 +33,6 @@ export type GraphBuilder=
|
||||
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 Work = [user:User, part:Part, time:number, data:string];
|
||||
export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]};
|
||||
|
||||
export type Work = [user:User, time:number, data:string];
|
||||
export type Pass = {name:string, path:string};
|
||||
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[]}>, need:Desk[], make:Desk[]};
|
||||
Loading…
Reference in New Issue
Block a user