diff --git a/packages/@vue/cli-ui/src/components/PromptCheckbox.vue b/packages/@vue/cli-ui/src/components/PromptCheckbox.vue index d545e5ad15..c6aecbe347 100644 --- a/packages/@vue/cli-ui/src/components/PromptCheckbox.vue +++ b/packages/@vue/cli-ui/src/components/PromptCheckbox.vue @@ -18,6 +18,8 @@ {{ choice.name }} + + diff --git a/packages/@vue/cli-ui/src/components/PromptConfirm.vue b/packages/@vue/cli-ui/src/components/PromptConfirm.vue index 4dd74007c4..da88946024 100644 --- a/packages/@vue/cli-ui/src/components/PromptConfirm.vue +++ b/packages/@vue/cli-ui/src/components/PromptConfirm.vue @@ -11,6 +11,8 @@ :link="prompt.link" /> + + diff --git a/packages/@vue/cli-ui/src/components/PromptError.vue b/packages/@vue/cli-ui/src/components/PromptError.vue new file mode 100644 index 0000000000..c8b86a64d8 --- /dev/null +++ b/packages/@vue/cli-ui/src/components/PromptError.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/packages/@vue/cli-ui/src/components/PromptInput.vue b/packages/@vue/cli-ui/src/components/PromptInput.vue index 6662555f50..914f5a6904 100644 --- a/packages/@vue/cli-ui/src/components/PromptInput.vue +++ b/packages/@vue/cli-ui/src/components/PromptInput.vue @@ -15,6 +15,8 @@ /> + + diff --git a/packages/@vue/cli-ui/src/components/PromptList.vue b/packages/@vue/cli-ui/src/components/PromptList.vue index 31158b5c08..372f8e3552 100644 --- a/packages/@vue/cli-ui/src/components/PromptList.vue +++ b/packages/@vue/cli-ui/src/components/PromptList.vue @@ -21,6 +21,8 @@ + + diff --git a/packages/@vue/cli-ui/src/graphql-api/connectors/projects.js b/packages/@vue/cli-ui/src/graphql-api/connectors/projects.js index 5e2e19a204..8543cd4b99 100644 --- a/packages/@vue/cli-ui/src/graphql-api/connectors/projects.js +++ b/packages/@vue/cli-ui/src/graphql-api/connectors/projects.js @@ -126,6 +126,7 @@ function initCreator (context) { // Prompts prompts.reset() creator.injectedPrompts.forEach(prompts.add) + updatePromptsFeatures() prompts.start() return creator diff --git a/packages/@vue/cli-ui/src/graphql-api/connectors/prompts.js b/packages/@vue/cli-ui/src/graphql-api/connectors/prompts.js index 6c146fec02..8e2a6fe6b5 100644 --- a/packages/@vue/cli-ui/src/graphql-api/connectors/prompts.js +++ b/packages/@vue/cli-ui/src/graphql-api/connectors/prompts.js @@ -52,7 +52,7 @@ function getEnabled (value) { function validateInput (prompt, value) { const validate = prompt.raw.validate if (typeof validate === 'function') { - return validate(value) + return validate(value, answers) } return true } @@ -147,6 +147,7 @@ function generatePrompt (data) { choices: null, value: null, valueChanged: false, + error: null, raw: data } } @@ -218,7 +219,7 @@ function setValue ({ id, value }) { if (validation !== true) { prompt.error = generatePromptError(validation) } else { - prompt.error = undefined + prompt.error = null } prompt.value = getDisplayedValue(prompt, value) const finalValue = getValue(prompt, value) diff --git a/packages/@vue/cli-ui/src/mixins/Prompts.js b/packages/@vue/cli-ui/src/mixins/Prompts.js new file mode 100644 index 0000000000..8a5d79f3f3 --- /dev/null +++ b/packages/@vue/cli-ui/src/mixins/Prompts.js @@ -0,0 +1,48 @@ +import PROMPT_ANSWER from '../graphql/promptAnswer.gql' + +export default function ({ + field, + query +}) { + // @vue/component + return { + computed: { + configurationValid () { + return this.enabledPrompts.filter( + p => + p.error || + p.value === null || + JSON.parse(p.value) === '' + ).length === 0 + }, + + enabledPrompts () { + if (!this[field]) { + return [] + } + return this[field].prompts.filter( + p => p.enabled + ) + } + }, + + methods: { + async answerPrompt ({ prompt, value }) { + await this.$apollo.mutate({ + mutation: PROMPT_ANSWER, + variables: { + input: { + id: prompt.id, + value: JSON.stringify(value) + } + }, + update: (store, { data: { promptAnswer } }) => { + const data = store.readQuery({ query }) + data[field].prompts = promptAnswer + store.writeQuery({ query, data }) + } + }) + } + } + } +} diff --git a/packages/@vue/cli-ui/src/views/ProjectCreate.vue b/packages/@vue/cli-ui/src/views/ProjectCreate.vue index 1a63ce4f12..c98adaa0d5 100644 --- a/packages/@vue/cli-ui/src/views/ProjectCreate.vue +++ b/packages/@vue/cli-ui/src/views/ProjectCreate.vue @@ -365,11 +365,12 @@