colors improved, still not quite right
This commit is contained in:
parent
e682b8a619
commit
a573835219
85
app.js
85
app.js
@ -132,33 +132,46 @@ function Desks(inDesks)
|
||||
}
|
||||
}
|
||||
|
||||
let emptyCount = 0;
|
||||
|
||||
/** @type {(part:TYPES.Part, index:number, array:TYPES.Part[], pass:TYPES.Pass, dirty:number[], type:"need"|"make")=>HTMLElement|null} */
|
||||
const Iterator = (part, index, array, pass, dirty, type)=>{
|
||||
const work = [];
|
||||
for(const [pass, scan] of desk.pass)
|
||||
{
|
||||
|
||||
const drawDirtyAsCaution = scan.need_empty.length>0 && scan.need_empty.length<desk.need.length;
|
||||
|
||||
work.push(DOM.tr(
|
||||
DOM.td(pass.name),
|
||||
desk.need.map((part, index, array)=>
|
||||
{
|
||||
const partPass = part.pass.get(pass);
|
||||
if(partPass)
|
||||
{
|
||||
const time = partPass.time;
|
||||
const latest = partPass.work.find(t=>t[0] == time);
|
||||
if(!partPass){ return null }
|
||||
const latest = partPass.work.find(t=>t[0] == partPass.time)?.[1];
|
||||
|
||||
if(type == "need")
|
||||
const attributes = {};
|
||||
|
||||
attributes.class = latest ? Tag("PartGood") : Tag("PartEmpty");
|
||||
|
||||
if(scan.need_dirty.includes(index))
|
||||
{
|
||||
if(!latest)
|
||||
attributes.class = drawDirtyAsCaution ? Tag("PartCaution") : Tag("PartDirty");
|
||||
}
|
||||
|
||||
return DOM.td(
|
||||
Div.Part(
|
||||
attributes,
|
||||
latest
|
||||
)
|
||||
);
|
||||
}),
|
||||
DOM.td("->"),
|
||||
desk.make.map((part, index, array)=>
|
||||
{
|
||||
emptyCount++;
|
||||
}
|
||||
}
|
||||
const partPass = part.pass.get(pass);
|
||||
if(!partPass){ return null }
|
||||
const latest = partPass.work.find(t=>t[0] == partPass.time)?.[1];
|
||||
|
||||
const attributes = {
|
||||
class: dirty.includes(index) ? Tag("DeskDirty") : (type == "need"&&!latest) ? Tag("PartEmpty") : ""
|
||||
};
|
||||
|
||||
|
||||
if(type == "make")
|
||||
{
|
||||
attributes.onclick=function(){
|
||||
onclick(){
|
||||
loggedIn.rawVal && van.add(this, Input((str)=>{
|
||||
if(loggedIn.rawVal)
|
||||
{
|
||||
@ -175,34 +188,26 @@ function Desks(inDesks)
|
||||
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
attributes.class = latest ? Tag("PartGood") : Tag("PartEmpty");
|
||||
|
||||
if(scan.make_dirty.includes(index))
|
||||
{
|
||||
attributes.class = drawDirtyAsCaution ? Tag("PartCaution") : Tag("PartDirty");
|
||||
}
|
||||
if(desk.need.length == 0 && !latest)
|
||||
{
|
||||
attributes.class = Tag("PartDirty");
|
||||
}
|
||||
|
||||
return DOM.td(
|
||||
Div.Part(
|
||||
attributes,
|
||||
latest?.[1] || ""
|
||||
latest
|
||||
)
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
const work = [];
|
||||
for(const [pass, dirty] of desk.pass)
|
||||
{
|
||||
emptyCount = 0;
|
||||
|
||||
const need = desk.need.map((part, index, array)=>Iterator(part, index, array, pass, dirty.need, "need"));
|
||||
if(desk.need.length == 0 || emptyCount == 0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
work.push(DOM.tr(
|
||||
DOM.td(pass.name),
|
||||
need,
|
||||
DOM.td("->"),
|
||||
desk.make.map((part, index, array)=>Iterator(part, index, array, pass, dirty.make, "make"))
|
||||
}),
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
@ -219,6 +219,9 @@ const Scan =(desk, pass)=>
|
||||
const dirtyNeed = [];
|
||||
const dirtyMake = [];
|
||||
|
||||
const emptyNeed = [];
|
||||
const emptyMake = [];
|
||||
|
||||
let makeMin = Infinity;
|
||||
let needMax = -Infinity;
|
||||
|
||||
@ -228,6 +231,7 @@ const Scan =(desk, pass)=>
|
||||
const part = desk.need[i];
|
||||
const partPassTime = part.pass.get(pass)?.time || 0;
|
||||
if(partPassTime > needMax) needMax = partPassTime;
|
||||
if(!partPassTime) emptyNeed.push(i)
|
||||
}
|
||||
|
||||
// update makeMin AND dirty check makes
|
||||
@ -236,10 +240,8 @@ const Scan =(desk, pass)=>
|
||||
const part = desk.make[i];
|
||||
const partPassTime = part.pass.get(pass)?.time || 0;
|
||||
if(partPassTime < makeMin) makeMin = partPassTime;
|
||||
if(partPassTime < needMax)
|
||||
{
|
||||
dirtyMake.push(i);
|
||||
}
|
||||
if(partPassTime < needMax) dirtyMake.push(i);
|
||||
if(!partPassTime) emptyMake.push(i)
|
||||
}
|
||||
|
||||
// dirty check needs
|
||||
@ -247,11 +249,8 @@ const Scan =(desk, pass)=>
|
||||
{
|
||||
const part = desk.need[i];
|
||||
const partPassTime = part.pass.get(pass)?.time || 0;
|
||||
if(partPassTime > makeMin)
|
||||
{
|
||||
dirtyNeed.push(i);
|
||||
}
|
||||
if(partPassTime > makeMin) dirtyNeed.push(i);
|
||||
}
|
||||
|
||||
desk.pass.set(pass, {need:dirtyNeed, make:dirtyMake})
|
||||
desk.pass.set(pass, {need_dirty:dirtyNeed, make_dirty:dirtyMake, need_empty:emptyNeed, make_empty:emptyMake})
|
||||
};
|
||||
@ -1,10 +1,10 @@
|
||||
export type User = {name:string, id:string, desk:Set<Desk>};
|
||||
export type Role = {name:string, id:string, user:User[]};
|
||||
export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map<Pass, Flag>, mode:string, role:Role[]};
|
||||
export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map<Pass, Scan>, mode:string, role:Role[]};
|
||||
export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise<void>, dump:()=>void};
|
||||
export type Part = {name:string, id:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>Promise<void>}>, need:Desk[], make:Desk[]};
|
||||
export type Work = [time:number, data:string, user:User];
|
||||
export type Flag = {need:number[], make:number[]}
|
||||
export type Scan = {need_dirty:number[], make_dirty:number[], need_empty:number[], make_empty:number[]}
|
||||
|
||||
export type GraphBuilder=
|
||||
<
|
||||
|
||||
@ -8,7 +8,7 @@ const user = {
|
||||
u6:"Matt Y",
|
||||
u7:"Seth F",
|
||||
u8:"Brittany F"
|
||||
}
|
||||
};
|
||||
|
||||
export default CreateAllRooms({
|
||||
room_01:Room({
|
||||
@ -22,10 +22,11 @@ export default CreateAllRooms({
|
||||
p1:"Page title",
|
||||
p2:"Page slug",
|
||||
p3:"Page preview",
|
||||
p4:"Page Project",
|
||||
},
|
||||
desk:{
|
||||
d1:["Write page metas", ["admin", "write"], "all", {}, "p1", "p2"],
|
||||
d2:["Build Page preview", ["admin", "dev"], "all", {p1:1, p2:1}, "p3" ]
|
||||
d2:["Build Page preview", ["admin", "dev"], "all", {p1:1, p2:1}, "p3", "p4"]
|
||||
},
|
||||
pass:{
|
||||
pass_01:["January"],
|
||||
|
||||
8
mock-user-folder/store/room_01/pass_01/u5.json
Normal file
8
mock-user-folder/store/room_01/pass_01/u5.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"p2": [
|
||||
[
|
||||
1762186044460,
|
||||
"le-slug"
|
||||
]
|
||||
]
|
||||
}
|
||||
8
mock-user-folder/store/room_01/pass_02/u1.json
Normal file
8
mock-user-folder/store/room_01/pass_02/u1.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"p4": [
|
||||
[
|
||||
1762193485093,
|
||||
"proj01"
|
||||
]
|
||||
]
|
||||
}
|
||||
8
mock-user-folder/store/room_01/pass_02/u5.json
Normal file
8
mock-user-folder/store/room_01/pass_02/u5.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"p1": [
|
||||
[
|
||||
1762186057868,
|
||||
"new post"
|
||||
]
|
||||
]
|
||||
}
|
||||
19
styles.js
19
styles.js
@ -12,11 +12,24 @@ export default Gale({
|
||||
Part:{
|
||||
border: `1px solid black`,
|
||||
borderRadius: `5px`,
|
||||
padding: `1rem`
|
||||
padding: `1rem`,
|
||||
},
|
||||
PartGood:{
|
||||
background:"#009b2e",
|
||||
color:"white",
|
||||
fontWeight: "bolder",
|
||||
},
|
||||
PartEmpty:{
|
||||
background:"gray"
|
||||
},
|
||||
PartDirty:{
|
||||
background:"tomato",
|
||||
color:"white",
|
||||
},
|
||||
PartCaution:{
|
||||
background:"yellow",
|
||||
color:"black",
|
||||
},
|
||||
BlockScreen:{
|
||||
position: "fixed",
|
||||
zIndex: "9999",
|
||||
@ -31,10 +44,6 @@ export default Gale({
|
||||
borderRadius: `5px`,
|
||||
padding: `1rem`
|
||||
},
|
||||
DeskDirty:{
|
||||
background:"tomato",
|
||||
color:"white",
|
||||
},
|
||||
GapHorizontal:{
|
||||
borderCollapse:"separate",
|
||||
borderSpacing:"0 2rem",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user