Files
metabuilder/packages/quick_guide/seed/scripts/steps.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