'use strict';
module.exports = (prompt, superFormat) => {
const format = {
default: () => prompt.input,
autocomplete() {
let { focused, input, selected, state, styles } = prompt;
if (!focused || !state.submitted) return input;
if (Array.isArray(selected)) {
return selected.map(ch => styles.primary(ch.message)).join(', ');
}
let value = (prompt.value = prompt.input = focused.value);
return styles.primary(value);
},
boolean(value = prompt.value) {
let { styles, state } = prompt;
return !state.submitted ? styles.primary(value) : styles.success(value);
},
invisible() {
return '';
},
list() {
let { list, state, styles } = prompt;
let style = state.submitted ? styles.primary : val => val;
return list.map(style).join(', ');
},
form(value) {
return !prompt.state.submitted ? superFormat(value) : '';
},
number(input = prompt.input) {
return prompt.styles.info(input);
},
password() {
let { input, state, styles, symbols } = prompt;
let color = state.submitted ? styles.primary : styles.muted;
return color(symbols.asterisk.repeat(input.length));
},
scale() {
let { choices, state, styles } = prompt;
if (state.submitted) {
return choices.map(ch => styles.info(ch.index)).join(', ');
}
return '';
},
select() {
let { focused, selected, state, styles } = prompt;
// if (!state.submitted) return prompt.styles.muted(prompt.state.hint);;
if (!state.submitted) return '';
if (Array.isArray(selected)) {
return selected.map(ch => styles.primary(ch.name)).join(', ');
}
return styles.primary(focused.name);
},
snippet(value) {
let { state, styles } = prompt;
let color = state.completed < 100 ? styles.warning : styles.success;
if (state.submitted && state.completed !== 100) {
color = styles.danger;
}
return color(`${state.completed}% completed`);
},
string(value = prompt.value) {
let { cursor, initial, state, styles } = prompt;
if (!state.submitted) {
return placeholder(prompt, { input, initial: initial, pos: cursor });
}
return styles.submitted(input || initial);
},
survey(...args) {
return format.scale(...args);
}
};
return format;
};