diff --git a/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx b/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx new file mode 100644 index 0000000000..5c2f3a13bb --- /dev/null +++ b/Composer/packages/client/__tests__/components/DialogWrapper/index.test.tsx @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import React from 'react'; +import { render } from 'react-testing-library'; +import { DialogWrapper } from '@app/components/DialogWrapper'; + +describe('', () => { + const props = { + isOpen: true, + title: 'My Dialog', + subText: 'Create new dialog', + onDismiss: jest.fn(), + }; + + it('renders null when not open', () => { + const { container } = render(); + expect(container.hasChildNodes()).toBeFalsy(); + }); +}); diff --git a/Composer/packages/client/jest.config.js b/Composer/packages/client/jest.config.js index e89860abc6..7b7eb814eb 100644 --- a/Composer/packages/client/jest.config.js +++ b/Composer/packages/client/jest.config.js @@ -14,6 +14,8 @@ module.exports = { // use commonjs modules for test so they do not need to be compiled 'office-ui-fabric-react/lib/(.*)$': 'office-ui-fabric-react/lib-commonjs/$1', '@uifabric/fluent-theme/lib/(.*)$': '@uifabric/fluent-theme/lib-commonjs/$1', + + '^@app/(.*)$': '/src/$1', }, testPathIgnorePatterns: ['/node_modules/', '/jestMocks/', '/testUtils/'], // Some node modules are packaged and distributed in a non-transpiled form diff --git a/Composer/packages/client/src/components/DialogWrapper/index.js b/Composer/packages/client/src/components/DialogWrapper/index.tsx similarity index 60% rename from Composer/packages/client/src/components/DialogWrapper/index.js rename to Composer/packages/client/src/components/DialogWrapper/index.tsx index ea6839d508..d0ba28e344 100644 --- a/Composer/packages/client/src/components/DialogWrapper/index.js +++ b/Composer/packages/client/src/components/DialogWrapper/index.tsx @@ -2,15 +2,26 @@ // Licensed under the MIT License. import React from 'react'; -import { Dialog, DialogType } from 'office-ui-fabric-react/lib/Dialog'; +import { Dialog, DialogType, IDialogProps } from 'office-ui-fabric-react/lib/Dialog'; import { styles } from './styles'; -export function DialogWrapper(props) { +interface DialogWrapperProps extends Pick { + isOpen: boolean; + title: string; + subText: string; +} + +export const DialogWrapper: React.FC = props => { const { isOpen, onDismiss, title, subText, children } = props; + + if (!isOpen) { + return null; + } + return ( ); -} +}; + +export default NewDialogModal; diff --git a/Composer/packages/client/src/store/action/dialog.ts b/Composer/packages/client/src/store/action/dialog.ts index b0e0b5a6fa..9809e26c9d 100644 --- a/Composer/packages/client/src/store/action/dialog.ts +++ b/Composer/packages/client/src/store/action/dialog.ts @@ -59,7 +59,7 @@ export const createDialogBase: ActionCreator = async (store, { id, content }) => const response = await httpClient.post(`/projects/opened/dialogs`, { id, content }); const onCreateDialogComplete = store.getState().onCreateDialogComplete; if (typeof onCreateDialogComplete === 'function') { - onCreateDialogComplete(id); + setTimeout(() => onCreateDialogComplete(id)); } store.dispatch({ type: ActionTypes.CREATE_DIALOG_SUCCESS, @@ -67,7 +67,6 @@ export const createDialogBase: ActionCreator = async (store, { id, content }) => response, }, }); - navTo(store, id); } catch (err) { setError(store, { message: err.response && err.response.data.message ? err.response.data.message : err, diff --git a/Composer/packages/client/tsconfig.json b/Composer/packages/client/tsconfig.json index 42032f429e..9cfb8edcfe 100644 --- a/Composer/packages/client/tsconfig.json +++ b/Composer/packages/client/tsconfig.json @@ -4,6 +4,10 @@ "allowJs": true, "declaration": false, "module": "esnext", + "baseUrl": ".", + "paths": { + "@app/*": ["src/*"] + } }, "include": ["./src/**/*", "./__tests__/**/*"], } diff --git a/Composer/packages/extensions/obiformeditor/src/Form/widgets/DialogSelectWidget.tsx b/Composer/packages/extensions/obiformeditor/src/Form/widgets/DialogSelectWidget.tsx index a9a36453bb..a625c6148d 100644 --- a/Composer/packages/extensions/obiformeditor/src/Form/widgets/DialogSelectWidget.tsx +++ b/Composer/packages/extensions/obiformeditor/src/Form/widgets/DialogSelectWidget.tsx @@ -51,7 +51,7 @@ export const DialogSelectWidget: React.FC = props => { formContext.shellApi.createDialog().then(newDialog => { if (newDialog) { onChange(newDialog); - setComboboxTitle(newDialog); + setTimeout(() => formContext.shellApi.navTo(newDialog), 500); } else { setComboboxTitle(null); }