36 lines
811 B
JavaScript
36 lines
811 B
JavaScript
'use strict';
|
|
|
|
const StringPrompt = require('../types/string');
|
|
|
|
class ListPrompt extends StringPrompt {
|
|
constructor(options = {}) {
|
|
super(options);
|
|
this.sep = this.options.separator || /, */;
|
|
this.initial = options.initial || '';
|
|
}
|
|
|
|
split(input = this.value) {
|
|
return input ? String(input).split(this.sep) : [];
|
|
}
|
|
|
|
format() {
|
|
let style = this.state.submitted ? this.styles.primary : val => val;
|
|
return this.list.map(style).join(', ');
|
|
}
|
|
|
|
async submit(value) {
|
|
let result = this.state.error || await this.validate(this.list, this.state);
|
|
if (result !== true) {
|
|
this.state.error = result;
|
|
return super.submit();
|
|
}
|
|
this.value = this.list;
|
|
return super.submit();
|
|
}
|
|
|
|
get list() {
|
|
return this.split();
|
|
}
|
|
}
|
|
|
|
module.exports = ListPrompt;
|