comparison mod_adhoc_dataforms_demo/mod_adhoc_dataforms_demo.lua @ 3558:22587eb2d87c

mod_adhoc_dataforms_demo: Add a multi-step command demo
author Kim Alvefur <zash@zash.se>
date Sat, 06 Apr 2019 18:32:24 +0200
parents 54b4b020de4c
children f5caacd475c4
comparison
equal deleted inserted replaced
3557:54b4b020de4c 3558:22587eb2d87c
119 119
120 module:provides("adhoc", 120 module:provides("adhoc",
121 adhoc_new("Dataforms Demo", 121 adhoc_new("Dataforms Demo",
122 "xmpp:zash.se/mod_adhoc_dataforms_demo#form", 122 "xmpp:zash.se/mod_adhoc_dataforms_demo#form",
123 adhoc_util.new_simple_form(form, handler))); 123 adhoc_util.new_simple_form(form, handler)));
124
125
126 local function multi_step_command(_, data, state)
127
128 if data.action == "cancel" then
129 return { status = "canceled" };
130 elseif data.action == "complete" then
131 return {
132 status = "completed",
133 info = "State was:\n"
134 .. serialization.serialize(state, { fatal = false }),
135 };
136 end
137 state = state or { step = 1, forms = { } };
138
139 if data.action == "next" then
140 state.step = state.step + 1;
141 elseif data.action == "prev" then
142 state.step = math.max(state.step - 1, 1);
143 end
144
145 local current_form = state.forms[state.step]
146 if not current_form then
147 current_form = {
148 title = string.format("Step %d", state.step);
149 instructions = state.step == 1 and "Here's a form." or "Here's another form.";
150 };
151 local already_selected = {};
152 for _ = 1, math.random(1, 5) do
153 local random
154 repeat
155 random = math.random(2, #form);
156 until not already_selected[random]
157 table.insert(current_form, form[random]);
158 end
159 state.forms[state.step] = dataforms.new(current_form);
160 end
161
162 local next_step = {
163 status = "executing",
164 form = current_form,
165 actions = {
166 "next", "complete"
167 },
168 };
169 if state.step > 1 then
170 table.insert(next_step.actions, 1, "prev");
171 end
172 return next_step, state;
173 end
174
175 module:provides("adhoc",
176 adhoc_new("Multi-step command demo",
177 "xmpp:zash.se/mod_adhoc_dataforms_demo#multi",
178 multi_step_command));
179