diff --git a/src/Common/TableEntity.tsx b/src/Common/TableEntity.tsx index 3a38f275e..cb6c95b5b 100644 --- a/src/Common/TableEntity.tsx +++ b/src/Common/TableEntity.tsx @@ -36,7 +36,7 @@ export interface TableEntityProps { onDeleteEntity?: () => void; onEditEntity?: () => void; onEntityPropertyChange: (event: React.FormEvent, newInput?: string) => void; - onEntityTypeChange: (event: React.FormEvent, selectedParam: IDropdownOption) => void; + onEntityTypeChange: (event: React.FormEvent, selectedParam: IDropdownOption | undefined) => void; onEntityValueChange: (event: React.FormEvent, newInput?: string) => void; onSelectDate: (date: Date | null | undefined) => void; onEntityTimeValueChange: (event: React.FormEvent, newInput?: string) => void; diff --git a/src/Explorer/Controls/TreeComponent/TreeComponent.tsx b/src/Explorer/Controls/TreeComponent/TreeComponent.tsx index 6c5ceb817..7eafd475d 100644 --- a/src/Explorer/Controls/TreeComponent/TreeComponent.tsx +++ b/src/Explorer/Controls/TreeComponent/TreeComponent.tsx @@ -43,7 +43,7 @@ export interface TreeNode { isLeavesParentsSeparate?: boolean; // Display parents together first, then leaves isLoading?: boolean; isSelected?: () => boolean; - onClick?: (isExpanded: boolean) => void; // Only if a leaf, other click will expand/collapse + onClick?: (isExpanded?: boolean) => void; // Only if a leaf, other click will expand/collapse onExpanded?: () => void; onCollapsed?: () => void; onContextMenuOpen?: () => void; @@ -73,7 +73,7 @@ interface TreeNodeComponentProps { } interface TreeNodeComponentState { - isExpanded: boolean; + isExpanded?: boolean; isMenuShowing: boolean; } export class TreeNodeComponent extends React.Component { @@ -82,7 +82,7 @@ export class TreeNodeComponent extends React.Component(); - private isExpanded: boolean; + private isExpanded?: boolean; constructor(props: TreeNodeComponentProps) { super(props); @@ -93,7 +93,7 @@ export class TreeNodeComponent extends React.Component
- {TreeNodeComponent.getSortedChildren(node).map((childNode: TreeNode) => ( + {TreeNodeComponent?.getSortedChildren(node)?.map((childNode: TreeNode) => ( - previous || (child.isSelected && child.isSelected()) || TreeNodeComponent.isAnyDescendantSelected(child), - false - ) - ); + return node.children + ? node.children.reduce( + (previous: boolean, child: TreeNode) => + previous || (child.isSelected && child.isSelected()) || TreeNodeComponent.isAnyDescendantSelected(child), + false + ) + : false; } private static createClickEvent(): MouseEvent { @@ -230,7 +230,7 @@ export class TreeNodeComponent extends React.Component { - this.contextMenuRef.current.firstChild.dispatchEvent(TreeNodeComponent.createClickEvent()); + this.contextMenuRef?.current?.firstChild?.dispatchEvent(TreeNodeComponent.createClickEvent()); }; private renderContextMenuButton(node: TreeNode): JSX.Element { @@ -253,18 +253,18 @@ export class TreeNodeComponent extends React.Component { + onMenuOpened: (_contextualMenu?: IContextualMenuProps) => { this.setState({ isMenuShowing: true }); node.onContextMenuOpen && node.onContextMenuOpen(); }, - onMenuDismissed: (contextualMenu?: IContextualMenuProps) => this.setState({ isMenuShowing: false }), + onMenuDismissed: (_contextualMenu?: IContextualMenuProps) => this.setState({ isMenuShowing: false }), contextualMenuItemAs: (props: IContextualMenuItemProps) => (
e.target.dispatchEvent(TreeNodeComponent.createClickEvent())} > - {props.item.onRenderIcon()} + {props.item.onRenderIcon && props.item.onRenderIcon()}
), - items: node.contextMenu.map((menuItem: TreeNodeMenuItem) => ({ - key: menuItem.label, - text: menuItem.label, - disabled: menuItem.isDisabled, - className: menuItem.styleClass, - onClick: () => { - menuItem.onClick(); - TelemetryProcessor.trace(Action.ClickResourceTreeNodeContextMenuItem, ActionModifiers.Mark, { - label: menuItem.label, - }); - }, - onRenderIcon: (props: any) => , - })), + items: node.contextMenu + ? node.contextMenu.map((menuItem: TreeNodeMenuItem) => ({ + key: menuItem.label, + text: menuItem.label, + disabled: menuItem.isDisabled, + className: menuItem.styleClass, + onClick: () => { + menuItem.onClick(); + TelemetryProcessor.trace(Action.ClickResourceTreeNodeContextMenuItem, ActionModifiers.Mark, { + label: menuItem.label, + }); + }, + onRenderIcon: (_props: any) => , + })) + : [], }} styles={buttonStyles} /> @@ -324,7 +326,7 @@ export class TreeNodeComponent extends React.Component, node: TreeNode): void => { + private onNodeKeyPress = (event: React.KeyboardEvent, _node: TreeNode): void => { if (event.charCode === Constants.KeyCodes.Space || event.charCode === Constants.KeyCodes.Enter) { event.stopPropagation(); this.props.node.onClick && this.props.node.onClick(this.state.isExpanded); diff --git a/src/Shared/DefaultExperienceUtility.ts b/src/Shared/DefaultExperienceUtility.ts index 27635968e..a91919828 100644 --- a/src/Shared/DefaultExperienceUtility.ts +++ b/src/Shared/DefaultExperienceUtility.ts @@ -2,7 +2,9 @@ import * as DataModels from "../Contracts/DataModels"; import { userContext } from "../UserContext"; export class DefaultExperienceUtility { - public static getApiKindFromDefaultExperience(defaultExperience: typeof userContext.apiType): DataModels.ApiKind { + public static getApiKindFromDefaultExperience( + defaultExperience: typeof userContext.apiType | null + ): DataModels.ApiKind { if (!defaultExperience) { return DataModels.ApiKind.SQL; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index ee037db87..d96ba1784 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -8,6 +8,7 @@ "noUnusedParameters": true }, "files": [ + "./src/Explorer/Controls/TreeComponent/TreeComponent.tsx", "./src/AuthType.ts", "./src/Bindings/ReactBindingHandler.ts", "./src/Common/ArrayHashMap.ts", @@ -55,6 +56,7 @@ "./src/Explorer/Notebook/NotebookContentItem.ts", "./src/Explorer/Notebook/NotebookRenderer/AzureTheme.tsx", "./src/Explorer/Notebook/NotebookRenderer/Prompt.tsx", + "./src/Explorer/Notebook/NotebookRenderer/PromptContent.test.tsx", "./src/Explorer/Notebook/NotebookRenderer/PromptContent.tsx", "./src/Explorer/Notebook/NotebookRenderer/StatusBar.tsx", "./src/Explorer/Notebook/NotebookRenderer/decorators/CellCreator.tsx", @@ -82,10 +84,13 @@ "./src/Explorer/Tree/AccessibleVerticalList.ts", "./src/GitHub/GitHubConnector.ts", "./src/HostedExplorerChildFrame.ts", + "./src/Index.tsx", "./src/Platform/Hosted/Authorization.ts", "./src/Platform/Hosted/Components/MeControl.test.tsx", "./src/Platform/Hosted/Components/MeControl.tsx", "./src/Platform/Hosted/Components/SignInButton.tsx", + "./src/Platform/Hosted/Components/SwitchAccount.tsx", + "./src/Platform/Hosted/Components/SwitchSubscription.tsx", "./src/Platform/Hosted/HostedUtils.test.ts", "./src/Platform/Hosted/HostedUtils.ts", "./src/Platform/Hosted/extractFeatures.test.ts", @@ -94,17 +99,6 @@ "./src/SelfServe/Example/SelfServeExample.types.ts", "./src/SelfServe/SelfServeStyles.tsx", "./src/SelfServe/SqlX/SqlxTypes.ts", - "./src/Shared/Constants.ts", - "./src/Shared/DefaultExperienceUtility.ts", - "./src/Shared/ExplorerSettings.ts", - "./src/Shared/LocalStorageUtility.ts", - "./src/Shared/PriceEstimateCalculator.ts", - "./src/Shared/SessionStorageUtility.ts", - "./src/Shared/StorageUtility.test.ts", - "./src/Shared/StorageUtility.ts", - "./src/Shared/StringUtility.test.ts", - "./src/Shared/StringUtility.ts", - "./src/Shared/appInsights.ts", "./src/UserContext.ts", "./src/Utils/APITypeUtils.ts", "./src/Utils/AutoPilotUtils.ts", @@ -129,17 +123,16 @@ "./src/hooks/useFullScreenURLs.tsx", "./src/hooks/useGraphPhoto.tsx", "./src/hooks/useNotebookSnapshotStore.ts", - "./src/hooks/usePortalAccessToken.tsx", "./src/hooks/useNotificationConsole.ts", "./src/hooks/useObservable.ts", + "./src/hooks/usePortalAccessToken.tsx", "./src/hooks/useSidePanel.ts", "./src/i18n.ts", "./src/quickstart.ts", "./src/setupTests.ts", "./src/userContext.test.ts", "src/Common/EntityValue.tsx", - "./src/Platform/Hosted/Components/SwitchAccount.tsx", - "./src/Platform/Hosted/Components/SwitchSubscription.tsx" + "src/Common/TableEntity.tsx" ], "include": [ "src/CellOutputViewer/transforms/**/*", @@ -161,8 +154,8 @@ "src/Localization/**/*", "src/Platform/Emulator/**/*", "src/SelfServe/Documentation/**/*", - "src/Shared/Telemetry/**/*", + "src/Shared/**/*", "src/Terminal/**/*", "src/Utils/arm/**/*" ] -} +} \ No newline at end of file