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" */
|
/** @import * as TYPES from "./types.ts" */
|
||||||
|
|
||||||
/** @type {TYPES.GraphBuilder} */
|
/** @type {TYPES.GraphBuilder} */
|
||||||
export default function({users, roles, parts, desks})
|
export default function({users, roles, parts, desks, passes})
|
||||||
{
|
{
|
||||||
|
|
||||||
// mutate users
|
// mutate users
|
||||||
@ -21,7 +21,7 @@ export default function({users, roles, parts, desks})
|
|||||||
for(let roleId in roles)
|
for(let roleId in roles)
|
||||||
{
|
{
|
||||||
const [name, ...userIds] = roles[roleId];
|
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
|
// mutate parts
|
||||||
@ -31,20 +31,18 @@ export default function({users, roles, parts, desks})
|
|||||||
for(let partId in parts)
|
for(let partId in parts)
|
||||||
{
|
{
|
||||||
const name = parts[partId];
|
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
|
// mutate desks
|
||||||
/** @type {Record<string, TYPES.Desk>} */
|
/** @type {Record<string, TYPES.Desk>} */
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const DeskList = desks;
|
const DeskList = desks;
|
||||||
|
|
||||||
for(let deskId in desks)
|
for(let deskId in desks)
|
||||||
{
|
{
|
||||||
const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId];
|
const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId];
|
||||||
const need =[];
|
/** @type {TYPES.Part[]}*/ const need =[];
|
||||||
const time =[];
|
/** @type {number[]}*/ const time =[];
|
||||||
|
|
||||||
/** @type {TYPES.Desk} */
|
/** @type {TYPES.Desk} */
|
||||||
const desk = {
|
const desk = {
|
||||||
@ -81,6 +79,41 @@ export default function({users, roles, parts, desks})
|
|||||||
DeskList[deskId] = desk;
|
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);
|
console.log(users, parts, desks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
index.js
16
index.js
@ -15,5 +15,21 @@ Graph({
|
|||||||
desks:
|
desks:
|
||||||
{
|
{
|
||||||
d1:["Desk 01", ["dev"], "all", {p2:3}, "p1"]
|
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=
|
export type GraphBuilder=
|
||||||
<
|
<
|
||||||
Users extends Record<string, UserBlueprint>,
|
Users extends Record<string, string>,
|
||||||
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
|
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
|
||||||
Parts extends Record<string, PartBlueprint>,
|
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>]>
|
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,
|
params:{
|
||||||
roles:Roles,
|
users:Users,
|
||||||
parts:Parts,
|
roles:Roles,
|
||||||
desks:Desks}
|
parts:Parts,
|
||||||
|
desks:Desks,
|
||||||
|
passes:Pass,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
=>void
|
=>void
|
||||||
|
|
||||||
@ -20,6 +33,6 @@ export type GraphBuilder=
|
|||||||
export type User = {name:string, desk:Set<Desk>};
|
export type User = {name:string, desk:Set<Desk>};
|
||||||
export type Role = {name:string, user:User[]};
|
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[], mode:string, role:Role[]};
|
||||||
export type Work = [user:User, part:Part, time:number, data:string];
|
export type Work = [user:User, time:number, data:string];
|
||||||
export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]};
|
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