From 1991353fe799b44c06320175f43a34ca0099b7e2 Mon Sep 17 00:00:00 2001 From: zeye Date: Wed, 18 Nov 2020 07:21:04 +0800 Subject: [PATCH] chore: add missing type declarations in 'useDialogEditApi' (#4801) * fix async move * add type declarations for useDialogEditApi * fix ts type Co-authored-by: Soroush Co-authored-by: Chris Whitten Co-authored-by: Andy Brown --- .../AdaptiveFlowEditor.tsx | 4 +- .../hooks/useDialogEditApi.ts | 75 +++++++++++++------ .../hooks/useEditorEventApi.ts | 11 ++- 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx index fd30a4d226..980c3045ee 100644 --- a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/AdaptiveFlowEditor.tsx @@ -7,7 +7,7 @@ import createCache from '@emotion/cache'; import React, { useRef, useMemo, useEffect } from 'react'; import isEqual from 'lodash/isEqual'; import formatMessage from 'format-message'; -import { DialogFactory, SchemaDefinitions } from '@bfc/shared'; +import { DialogFactory, MicrosoftIDialog, SchemaDefinitions } from '@bfc/shared'; import { useShellApi, JSONSchema7, FlowUISchema, FlowWidget } from '@bfc/extension-client'; import { MarqueeSelection } from 'office-ui-fabric-react/lib/MarqueeSelection'; @@ -88,7 +88,7 @@ const VisualDesigner: React.FC = ({ onFocus, onBlur, schema dataCache.current = inputData; } - const data = dataCache.current; + const data = dataCache.current as MicrosoftIDialog; const focusedId = Array.isArray(focusedActions) && focusedActions[0] ? focusedActions[0] : ''; // Compute schema diff diff --git a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts index 817a8ad480..4b2b038804 100644 --- a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useDialogEditApi.ts @@ -1,14 +1,14 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { BaseSchema, ShellApi } from '@botframework-composer/types'; +import { MicrosoftIDialog, MicrosoftIRecognizer, ShellApi } from '@botframework-composer/types'; import { DialogUtils } from '@bfc/shared'; export interface DialogApiContext { - copyAction: (actionId: string) => BaseSchema; - deleteAction: (actionId: BaseSchema) => BaseSchema; - copyActions: (actionIds: string[]) => BaseSchema[]; - deleteActions: (actionIds: BaseSchema[]) => BaseSchema[]; + copyAction: (actionId: string) => MicrosoftIDialog; + deleteAction: (actionId: MicrosoftIDialog) => MicrosoftIDialog; + copyActions: (actionIds: string[]) => MicrosoftIDialog[]; + deleteActions: (actionIds: MicrosoftIDialog[]) => MicrosoftIDialog[]; } const { disableNodes, enableNodes, appendNodesAfter, queryNodes, insertNodes, deleteNode, deleteNodes } = DialogUtils; @@ -18,57 +18,90 @@ export function useDialogEditApi(shellApi: ShellApi) { async function insertActions( dialogId: string, - dialogData, + dialogData: MicrosoftIDialog, targetArrayPath: string, targetArrayPosition: number, - actionsToInsert: BaseSchema[] - ) { + actionsToInsert: MicrosoftIDialog[] + ): Promise { const newNodes = await constructActions(dialogId, actionsToInsert); - return insertNodes(dialogData, targetArrayPath, targetArrayPosition, newNodes); + return insertNodes(dialogData, targetArrayPath, targetArrayPosition, newNodes) as MicrosoftIDialog; } async function insertAction( dialogId: string, - dialogData, + dialogData: MicrosoftIDialog, targetArrayPath: string, targetArrayPosition: number, - actionToInsert: BaseSchema - ) { + actionToInsert: MicrosoftIDialog + ): Promise { return insertActions(dialogId, dialogData, targetArrayPath, targetArrayPosition, [actionToInsert]); } - async function insertActionsAfter(dialogId: string, dialogData, targetId: string, actionsToInsert: BaseSchema[]) { + async function insertActionsAfter( + dialogId: string, + dialogData: MicrosoftIDialog, + targetId: string, + actionsToInsert: MicrosoftIDialog[] + ): Promise { const newNodes = await constructActions(dialogId, actionsToInsert); - return appendNodesAfter(dialogData, targetId, newNodes); + return appendNodesAfter(dialogData, targetId, newNodes) as MicrosoftIDialog; } - function deleteSelectedAction(dialogId, dialogData, actionId: string) { + function deleteSelectedAction( + dialogId: string, + dialogData: MicrosoftIDialog, + actionId: string + ): Promise { return deleteNode(dialogData, actionId, (node) => deleteAction(dialogId, node)); } - function deleteSelectedActions(dialogId: string, dialogData, actionIds: string[]) { + function deleteSelectedActions( + dialogId: string, + dialogData: MicrosoftIDialog, + actionIds: string[] + ): Promise { return deleteNodes(dialogData, actionIds, (nodes) => deleteActions(dialogId, nodes)); } - function disableSelectedActions(dialogId: string, dialogData, actionIds: string[]) { + function disableSelectedActions( + dialogId: string, + dialogData: MicrosoftIDialog, + actionIds: string[] + ): MicrosoftIDialog { return disableNodes(dialogData, actionIds); } - function enableSelectedActions(dialogId: string, dialogData, actionIds: string[]) { + function enableSelectedActions( + dialogId: string, + dialogData: MicrosoftIDialog, + actionIds: string[] + ): MicrosoftIDialog { return enableNodes(dialogData, actionIds); } - async function copySelectedActions(dialogId, dialogData, actionIds: string[]) { + async function copySelectedActions( + dialogId: string, + dialogData: MicrosoftIDialog, + actionIds: string[] + ): Promise { const actions = queryNodes(dialogData, actionIds); return copyActions(dialogId, actions); } - async function cutSelectedActions(dialogId, dialogData, actionIds: string[]) { + async function cutSelectedActions( + dialogId: string, + dialogData: MicrosoftIDialog, + actionIds: string[] + ): Promise<{ dialog: MicrosoftIDialog; cutActions: MicrosoftIDialog[] }> { const cutActions = await copySelectedActions(dialogId, dialogData, actionIds); const newDialog = await deleteSelectedActions(dialogId, dialogData, actionIds); return { dialog: newDialog, cutActions }; } - function updateRecognizer(dialogId, dialogData, recognizer) { + function updateRecognizer( + dialogId: string, + dialogData: MicrosoftIDialog, + recognizer: MicrosoftIRecognizer | string + ): MicrosoftIDialog { dialogData.recognizer = recognizer; return dialogData; } diff --git a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts index ff1fb9dd7a..652d256ea1 100644 --- a/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts +++ b/Composer/packages/adaptive-flow/src/adaptive-flow-editor/hooks/useEditorEventApi.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { DialogUtils, SDKKinds, ShellApi, registerEditorAPI } from '@bfc/shared'; +import { DialogUtils, SDKKinds, ShellApi, registerEditorAPI, MicrosoftIDialog } from '@bfc/shared'; import get from 'lodash/get'; import { useDialogApi } from '@bfc/extension-client'; @@ -21,7 +21,12 @@ import { calculateRangeSelection } from '../utils/calculateRangeSelection'; import { useDialogEditApi } from './useDialogEditApi'; export const useEditorEventApi = ( - state: { path: string; data: any; nodeContext: NodeRendererContextValue; selectionContext: SelectionContextData }, + state: { + path: string; + data: MicrosoftIDialog; + nodeContext: NodeRendererContextValue; + selectionContext: SelectionContextData; + }, shellApi: ShellApi ) => { const { actionsContainLuIntent } = shellApi; @@ -64,7 +69,7 @@ export const useEditorEventApi = ( const trackActionChange = (actionPath: string) => { const affectedPaths = DialogUtils.getParentPaths(actionPath); for (const path of affectedPaths) { - const json = get(data, path); + const json = get(data, path) as MicrosoftIDialog; designerCache.uncacheBoundary(json); } };