diff --git a/Composer/packages/client/src/TestController.tsx b/Composer/packages/client/src/TestController.tsx index 42896c1b4b..1d7b928480 100644 --- a/Composer/packages/client/src/TestController.tsx +++ b/Composer/packages/client/src/TestController.tsx @@ -56,6 +56,17 @@ export const TestController: React.FC = () => { startBot(false); }, [toStartBot]); + function isLuisConfigComplete(config) { + let complete = true; + for (const key in LuisConfig) { + if (config && config[LuisConfig[key]] === '') { + complete = false; + break; + } + } + return complete; + } + async function handleClick() { const dialogErrors = dialogs.reduce((result, dialog) => { if (dialog.diagnostics.length !== 0) { @@ -78,7 +89,7 @@ export const TestController: React.FC = () => { const config = settings.luis; if (!isAbsHosted() && getReferredFiles(luFiles, dialogs).length > 0) { - if (!luisPublishSucceed || (config && config[LuisConfig.AUTHORING_KEY] === '')) { + if (!luisPublishSucceed || !isLuisConfigComplete(config)) { setModalOpen(true); } else { await publishAndReload(); diff --git a/Composer/packages/client/src/constants/index.ts b/Composer/packages/client/src/constants/index.ts index 6a3289e2d9..4db2999d9c 100644 --- a/Composer/packages/client/src/constants/index.ts +++ b/Composer/packages/client/src/constants/index.ts @@ -122,6 +122,8 @@ export enum LuisConfig { AUTHORING_KEY = 'authoringKey', ENVIRONMENT = 'environment', PROJECT_NAME = 'name', + REGION = 'authoringRegion', + LANGUAGE = 'defaultLanguage', } export const FileTypes = { diff --git a/Composer/packages/client/src/pages/language-understanding/publish-luis-modal.js b/Composer/packages/client/src/pages/language-understanding/publish-luis-modal.js index 6dd56dccbd..96f4dd71a8 100644 --- a/Composer/packages/client/src/pages/language-understanding/publish-luis-modal.js +++ b/Composer/packages/client/src/pages/language-understanding/publish-luis-modal.js @@ -41,20 +41,23 @@ const onRenderLabel = info => props => ( const nameRegex = /^[a-zA-Z0-9-_.]+$/; const validationProperties = ['name', 'authoringKey', 'environment']; +const defaultFields = { authoringRegion: 'westus', defaultLanguage: 'en-us' }; const validateForm = data => { - const errors = {}; + const result = { errors: {} }; const dataKeys = keys(data); dataKeys.forEach(key => { const value = data[key]; if (validationProperties.indexOf(key) > -1 && (!value || !nameRegex.test(value))) { - errors[key] = formatMessage( + result.errors[key] = formatMessage( 'Spaces and special characters are not allowed. Use letters, numbers, -, or _., numbers, -, and _' ); + } else if (key in defaultFields && value === '') { + result[key] = defaultFields[key]; } }); - return errors; + return result; }; const DeploySuccess = props => { @@ -120,13 +123,13 @@ export const PublishLuis = props => { const handlePublish = async e => { e.preventDefault(); - const errors = validateForm(formData); - if (keys(errors).length) { - setFormData({ ...formData, errors }); + const result = validateForm(formData); + if (keys(result.errors).length) { + setFormData({ ...formData, ...result }); return; } // save the settings change to store and persist to server - const newValue = { ...formData }; + const newValue = { ...formData, ...result }; delete newValue.errors; await setSettings(botName, { ...settings, luis: newValue }); await onPublish(); @@ -168,13 +171,13 @@ export const PublishLuis = props => { />