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.
36 lines
811 B
36 lines
811 B
'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;
|
|
|