You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
811 B
37 lines
811 B
3 years ago
|
'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;
|