@@ -0,0 +1,82 @@
|
||||
/** Progress 0–100 for logo loader during setup wizard. */
|
||||
|
||||
const STEP_WEIGHTS = {
|
||||
theme: 10,
|
||||
welcome: 5,
|
||||
device: 12,
|
||||
network: 18,
|
||||
sync: 18,
|
||||
users: 22,
|
||||
hardware: 10,
|
||||
kiosk: 10,
|
||||
bootstrap: 25,
|
||||
done: 8,
|
||||
};
|
||||
|
||||
const FLOWS = {
|
||||
server: ["theme", "welcome", "device", "network", "users", "done"],
|
||||
client: ["theme", "welcome", "device", "sync", "hardware", "kiosk", "bootstrap", "done"],
|
||||
};
|
||||
|
||||
export function getFlow(deviceRole) {
|
||||
return FLOWS[deviceRole] || FLOWS.server;
|
||||
}
|
||||
|
||||
export function createSetupOrchestrator() {
|
||||
let deviceRole = "server";
|
||||
let currentStep = "welcome";
|
||||
let extraPercent = 0;
|
||||
|
||||
function flow() {
|
||||
return getFlow(deviceRole);
|
||||
}
|
||||
|
||||
function basePercent() {
|
||||
const steps = flow();
|
||||
const idx = steps.indexOf(currentStep);
|
||||
if (idx < 0) return 0;
|
||||
let total = 0;
|
||||
for (const s of steps) total += STEP_WEIGHTS[s] || 10;
|
||||
let done = 0;
|
||||
for (let i = 0; i < idx; i += 1) done += STEP_WEIGHTS[steps[i]] || 10;
|
||||
const curWeight = STEP_WEIGHTS[currentStep] || 10;
|
||||
return Math.min(100, Math.round(((done + curWeight * 0.35) / total) * 100));
|
||||
}
|
||||
|
||||
return {
|
||||
get percent() {
|
||||
return Math.min(100, Math.max(basePercent(), extraPercent));
|
||||
},
|
||||
get currentStep() {
|
||||
return currentStep;
|
||||
},
|
||||
get deviceRole() {
|
||||
return deviceRole;
|
||||
},
|
||||
setDeviceRole(role) {
|
||||
deviceRole = role;
|
||||
},
|
||||
setStep(step) {
|
||||
currentStep = step;
|
||||
extraPercent = 0;
|
||||
},
|
||||
bumpExtra(delta) {
|
||||
extraPercent = Math.min(100, extraPercent + delta);
|
||||
},
|
||||
setBootstrapProgress(p) {
|
||||
const steps = flow();
|
||||
const idx = steps.indexOf("bootstrap");
|
||||
if (idx < 0) return;
|
||||
let total = 0;
|
||||
let before = 0;
|
||||
for (let i = 0; i < steps.length; i += 1) {
|
||||
const w = STEP_WEIGHTS[steps[i]] || 10;
|
||||
if (i < idx) before += w;
|
||||
total += w;
|
||||
}
|
||||
const w = STEP_WEIGHTS.bootstrap || 25;
|
||||
extraPercent = Math.round(((before + w * Math.min(1, p)) / total) * 100);
|
||||
},
|
||||
flow,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user