sc4
Version:
A command line utility for automating SimCity 4 modding tasks & modifying savegames
46 lines (45 loc) • 1.13 kB
JavaScript
// # nested-list.js
import select from '@inquirer/select';
const kUp = Symbol('up');
export default async function nestedList(config) {
let stack = [];
let menu = config;
while (typeof menu === 'object') {
let prev = menu;
let parsed = convert(menu);
menu = await select(parsed);
if (menu === kUp) {
menu = stack.pop();
}
else {
stack.push(prev);
}
}
return menu;
}
function convert(config) {
let { choices, ...rest } = config;
choices = Object.entries(choices).map(([key, value]) => {
if (typeof value === 'object') {
return {
name: `${key}...`,
value: {
name: 'menu',
message: key,
pageSize: config.pageSize,
choices: {
...value,
'^Up': kUp,
},
},
};
}
else {
return { name: key, value };
}
});
return {
...rest,
choices,
};
}