mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
108 lines
2.2 KiB
Lua
108 lines
2.2 KiB
Lua
-- Steps editor logic for quick guides
|
|
local M = {}
|
|
|
|
-- Generate a unique step ID
|
|
function M.generateStepId()
|
|
return "step_" .. tostring(os.time()) .. "_" .. math.random(1000, 9999)
|
|
end
|
|
|
|
-- Create a new empty step
|
|
function M.createStep()
|
|
return {
|
|
id = M.generateStepId(),
|
|
title = "New step",
|
|
description = "Describe what happens in this step.",
|
|
duration = "1-2 min",
|
|
mediaUrl = nil
|
|
}
|
|
end
|
|
|
|
-- Update a step in the list
|
|
function M.updateStep(steps, stepId, updates)
|
|
local result = {}
|
|
for i, step in ipairs(steps) do
|
|
if step.id == stepId then
|
|
local updatedStep = {}
|
|
for k, v in pairs(step) do
|
|
updatedStep[k] = v
|
|
end
|
|
for k, v in pairs(updates) do
|
|
updatedStep[k] = v
|
|
end
|
|
result[i] = updatedStep
|
|
else
|
|
result[i] = step
|
|
end
|
|
end
|
|
return result
|
|
end
|
|
|
|
-- Remove a step from the list
|
|
function M.removeStep(steps, stepId)
|
|
local result = {}
|
|
for _, step in ipairs(steps) do
|
|
if step.id ~= stepId then
|
|
result[#result + 1] = step
|
|
end
|
|
end
|
|
return result
|
|
end
|
|
|
|
-- Add a new step to the list
|
|
function M.addStep(steps)
|
|
local newStep = M.createStep()
|
|
local result = {}
|
|
for i, step in ipairs(steps) do
|
|
result[i] = step
|
|
end
|
|
result[#result + 1] = newStep
|
|
return result, newStep
|
|
end
|
|
|
|
-- Reset step IDs to sequential order
|
|
function M.resetOrdering(steps)
|
|
local result = {}
|
|
for i, step in ipairs(steps) do
|
|
local resetStep = {}
|
|
for k, v in pairs(step) do
|
|
resetStep[k] = v
|
|
end
|
|
resetStep.id = "step_" .. tostring(i)
|
|
result[i] = resetStep
|
|
end
|
|
return result
|
|
end
|
|
|
|
-- Validate a step
|
|
function M.validateStep(step)
|
|
local errors = {}
|
|
|
|
if not step.title or step.title == "" then
|
|
errors.title = "Title is required"
|
|
end
|
|
|
|
if not step.description or step.description == "" then
|
|
errors.description = "Description is required"
|
|
end
|
|
|
|
return { valid = next(errors) == nil, errors = errors }
|
|
end
|
|
|
|
-- Validate all steps
|
|
function M.validateAllSteps(steps)
|
|
local allErrors = {}
|
|
local valid = true
|
|
|
|
for i, step in ipairs(steps) do
|
|
local result = M.validateStep(step)
|
|
if not result.valid then
|
|
valid = false
|
|
allErrors[step.id] = result.errors
|
|
end
|
|
end
|
|
|
|
return { valid = valid, errors = allErrors }
|
|
end
|
|
|
|
return M
|