From a75a3958fa85bc923f235b630c301be5eb189ec0 Mon Sep 17 00:00:00 2001 From: Weitian Li Date: Wed, 18 Sep 2019 20:27:11 +0800 Subject: [PATCH 1/9] update dialog trigger json parse --- .../packages/server/src/models/bot/indexers/dialogIndexers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/Composer/packages/server/src/models/bot/indexers/dialogIndexers.ts b/Composer/packages/server/src/models/bot/indexers/dialogIndexers.ts index 9ab7f564bb..0198e31c02 100644 --- a/Composer/packages/server/src/models/bot/indexers/dialogIndexers.ts +++ b/Composer/packages/server/src/models/bot/indexers/dialogIndexers.ts @@ -122,6 +122,7 @@ export class DialogIndexer { trigers.push(trigger); } }); + return true; } return false; }; From 11e1eda037732a9243ea88a5e05ca6c8d17a015d Mon Sep 17 00:00:00 2001 From: Weitian Li Date: Thu, 19 Sep 2019 14:38:57 +0800 Subject: [PATCH 2/9] fetch event types from schemas --- Composer/cypress/support/commands.js | 4 ++ .../ProjectTree/TriggerCreationModal.tsx | 49 +++++++++++++++---- .../src/components/ProjectTree/styles.ts | 2 +- Composer/packages/client/src/store/types.ts | 2 + .../packages/client/src/utils/dialogUtil.ts | 22 +++++---- 5 files changed, 59 insertions(+), 20 deletions(-) diff --git a/Composer/cypress/support/commands.js b/Composer/cypress/support/commands.js index e351efa57c..a881813908 100644 --- a/Composer/cypress/support/commands.js +++ b/Composer/cypress/support/commands.js @@ -70,6 +70,10 @@ Cypress.Commands.add('addEventHandler', handler => { cy.getByTestId('AddNewTrigger').click(); cy.get(`[data-testid="triggerTypeDropDown"]`).click(); cy.getByText(handler).click(); + if (handler === 'Handle a Dialog Event') { + cy.get(`[data-testid="eventTypeDropDown"]`).click(); + cy.getByText('consultDialog').click(); + } cy.get('input[data-testid="triggerName"]').type(`__TestTrigger`); cy.get(`[data-testid="triggerFormSubmit"]`).click(); }); diff --git a/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx b/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx index f3053461a6..330a8a88b8 100644 --- a/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx +++ b/Composer/packages/client/src/components/ProjectTree/TriggerCreationModal.tsx @@ -3,23 +3,31 @@ import { Dialog, DialogType } from 'office-ui-fabric-react'; import formatMessage from 'format-message'; import { DialogFooter, PrimaryButton, DefaultButton, Stack, TextField, IDropdownOption } from 'office-ui-fabric-react'; import { Dropdown } from 'office-ui-fabric-react/lib/Dropdown'; +import { get } from 'lodash'; import { addNewTrigger, getTriggerTypes, TriggerFormData, TriggerFormDataErrors } from '../../utils/dialogUtil'; import { StoreContext } from '../../store'; import { DialogInfo } from '../../store/types'; -import { styles, dropdownStyles, name, dialogWindow, description } from './styles'; +import { styles, dropdownStyles, name, dialogWindow, constraint } from './styles'; + +const eventTypeKey = 'Microsoft.OnDialogEvent'; + const isValidName = name => { const nameRegex = /^[a-zA-Z0-9-_.]+$/; return nameRegex.test(name); }; const validateForm = (data: TriggerFormData): TriggerFormDataErrors => { const errors: TriggerFormDataErrors = {}; - const { name, $type } = data; + const { name, $type, eventType } = data; if (!name || !isValidName(name)) { errors.name = formatMessage('Spaces and special characters are not allowed. Use letters, numbers, -, or _.'); } + if ($type === eventTypeKey && !eventType) { + errors.eventType = formatMessage('please select a event type'); + } + if (!$type) { errors.$type = formatMessage('please select a trigger type'); } @@ -37,7 +45,8 @@ const initialFormData: TriggerFormData = { errors: {}, $type: '', name: '', - description: '', + constraint: '', + eventType: '', }; const triggerTypeOptions: IDropdownOption[] = getTriggerTypes(); @@ -46,7 +55,7 @@ export const TriggerCreationModal: React.FC = props = const { isOpen, onDismiss, onSubmit, dialogId } = props; const [formData, setFormData] = useState(initialFormData); const { state } = useContext(StoreContext); - const { dialogs } = state; + const { dialogs, schemas } = state; const onClickSubmitButton = e => { e.preventDefault(); @@ -65,16 +74,26 @@ export const TriggerCreationModal: React.FC = props = }; const onSelectTriggerType = (e, option) => { + delete formData.eventType; setFormData({ ...formData, $type: option.key }); }; + const onSelectEventType = (e, option) => { + setFormData({ ...formData, eventType: option.key }); + }; + const updateForm = field => (e, newValue) => { setFormData({ ...formData, [field]: newValue, }); }; - + const eventTypes = get(schemas, `sdk.content.definitions.['${eventTypeKey}'].properties.events.items.enum`, []).map( + t => { + return { key: t, text: t }; + } + ); + const showEventDropDown = formData.$type === eventTypeKey; return (