Compare commits

..

3 Commits

Author SHA1 Message Date
hardiknai-techm
0897c75114 resolve_eslint_ReadOnlyNodePropertiesComponent 2021-10-14 11:13:35 +05:30
hardiknai-techm
b9e06858c5 resolve master code conflict 2021-10-12 20:59:27 +05:30
hardiknai-techm
043541b0dc resolve eslint ReadOnlyNodePropertiesComponent 2021-08-20 08:10:58 +05:30
10 changed files with 57 additions and 67 deletions

View File

@@ -2,8 +2,6 @@
src/**/__mocks__/**/*
dist/
Contracts/
src/Api/Apis.ts
src/AuthType.ts
src/Bindings/BindingHandlersRegisterer.ts
src/Bindings/ReactBindingHandler.ts
src/Common/Constants.ts
@@ -37,7 +35,6 @@ src/Definitions/svg.d.ts
src/Explorer/ComponentRegisterer.test.ts
src/Explorer/ComponentRegisterer.ts
src/Explorer/Controls/DiffEditor/DiffEditorComponent.ts
src/Explorer/Controls/Editor/EditorComponent.ts
src/Explorer/Controls/JsonEditor/JsonEditorComponent.ts
src/Explorer/DataSamples/ContainerSampleGenerator.test.ts
@@ -84,6 +81,7 @@ src/Explorer/Tables/DataTable/DataTableOperationManager.ts
src/Explorer/Tables/DataTable/DataTableViewModel.ts
src/Explorer/Tables/DataTable/TableEntityListViewModel.ts
src/Explorer/Tables/QueryBuilder/CustomTimestampHelper.ts
src/Explorer/Tables/TableDataClient.ts
src/Explorer/Tables/TableEntityProcessor.ts
src/Explorer/Tables/Utilities.ts
src/Explorer/Tabs/ConflictsTab.ts
@@ -115,12 +113,8 @@ src/ReactDevTools.ts
src/Shared/Constants.ts
src/Shared/DefaultExperienceUtility.test.ts
src/Shared/DefaultExperienceUtility.ts
src/Shared/appInsights.ts
src/SparkClusterManager/ArcadiaResourceManager.ts
src/SparkClusterManager/SparkClusterManager.ts
src/Terminal/JupyterLabAppFactory.ts
src/Terminal/NotebookAppContracts.d.ts
src/applyExplorerBindings.ts
src/global.d.ts
src/setupTests.ts
src/Explorer/Controls/InputTypeahead/InputTypeaheadComponent.tsx
@@ -130,8 +124,6 @@ src/Explorer/Controls/NotebookViewer/NotebookViewerComponent.tsx
src/Explorer/Controls/TreeComponent/TreeComponent.tsx
src/Explorer/Graph/GraphExplorerComponent/GraphExplorer.test.tsx
src/Explorer/Graph/GraphExplorerComponent/NodePropertiesComponent.tsx
src/Explorer/Graph/GraphExplorerComponent/ReadOnlyNodePropertiesComponent.test.tsx
src/Explorer/Graph/GraphExplorerComponent/ReadOnlyNodePropertiesComponent.tsx
src/Explorer/Menus/CommandBar/CommandBarUtil.tsx
src/Explorer/Notebook/NotebookComponent/NotebookComponentAdapter.tsx
src/Explorer/Notebook/NotebookComponent/VirtualCommandBarComponent.tsx
@@ -140,7 +132,6 @@ src/Explorer/Notebook/NotebookRenderer/NotebookRenderer.tsx
src/Explorer/Notebook/NotebookRenderer/decorators/draggable/index.tsx
src/Explorer/Notebook/NotebookRenderer/decorators/hijack-scroll/index.tsx
src/Explorer/Notebook/NotebookRenderer/decorators/kbd-shortcuts/index.tsx
src/Explorer/Notebook/temp/inputs/connected-editors/codemirror.tsx
src/Explorer/Tree/ResourceTreeAdapter.tsx
__mocks__/monaco-editor.ts
src/Explorer/Tree/ResourceTree.tsx

View File

@@ -1,4 +1,4 @@
/**
* Data Explorer version {major.minor.patch}
*/
export const DataExplorer: string = "1.0.1";
export const DataExplorer = "1.0.1";

View File

@@ -1,7 +1,6 @@
import React from "react";
import { shallow } from "enzyme";
import React from "react";
import { GraphHighlightedNodeData } from "./GraphExplorer";
import {
ReadOnlyNodePropertiesComponent,
ReadOnlyNodePropertiesComponentProps,
@@ -44,7 +43,7 @@ describe("<ReadOnlyNodePropertiesComponent />", () => {
const mockNode2 = {
...mockNode,
properties: {
key3: ["abcd", 1234, true, false, undefined, null],
key3: ["abcd", 1234, true, false, undefined],
},
};
const props: ReadOnlyNodePropertiesComponentProps = { node: mockNode2 };

View File

@@ -60,9 +60,7 @@ export class ReadOnlyNodePropertiesComponent extends React.Component<ReadOnlyNod
}
public static singlePropertyValueToString(value: ViewModels.GremlinPropertyValueType): string {
if (value === null) {
return "null";
} else if (typeof value === "undefined") {
if (typeof value === "undefined") {
return "undefined";
} else {
return value.toString();
@@ -71,11 +69,8 @@ export class ReadOnlyNodePropertiesComponent extends React.Component<ReadOnlyNod
public static renderSinglePropertyValue(value: ViewModels.GremlinPropertyValueType): JSX.Element {
let singlePropValue = value;
let className = "propertyValue";
if (singlePropValue === null) {
singlePropValue = "null";
className += " isNull";
} else if (typeof singlePropValue === "undefined") {
const className = "propertyValue";
if (typeof singlePropValue === "undefined") {
singlePropValue = "undefined";
} else {
singlePropValue = value.toString();

View File

@@ -123,7 +123,7 @@ exports[`<ReadOnlyNodePropertiesComponent /> renders properties (with multiple v
</td>
<td
className="valueCol"
title="abcd, 1234, true, false, undefined, null"
title="abcd, 1234, true, false, undefined"
>
<div
className="propertyValue"
@@ -155,12 +155,6 @@ exports[`<ReadOnlyNodePropertiesComponent /> renders properties (with multiple v
>
undefined
</div>
<div
className="propertyValue isNull"
key="null"
>
null
</div>
</td>
</tr>
</tbody>

View File

@@ -307,11 +307,18 @@ function createOpenSynapseLinkDialogButton(container: Explorer): CommandButtonCo
function createNewDatabase(container: Explorer): CommandButtonComponentProps {
const label = "New " + getDatabaseName();
const newDatabaseButton = document.activeElement as HTMLElement;
return {
iconSrc: AddDatabaseIcon,
iconAlt: label,
onCommandClick: () =>
useSidePanel.getState().openSidePanel("New " + getDatabaseName(), <AddDatabasePanel explorer={container} />),
useSidePanel
.getState()
.openSidePanel(
"New " + getDatabaseName(),
<AddDatabasePanel explorer={container} buttonElement={newDatabaseButton} />
),
commandButtonLabel: label,
ariaLabel: label,
hasPopup: true,

View File

@@ -23,10 +23,12 @@ import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneFor
export interface AddDatabasePaneProps {
explorer: Explorer;
buttonElement?: HTMLElement;
}
export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
explorer: container,
buttonElement,
}: AddDatabasePaneProps) => {
const closeSidePanel = useSidePanel((state) => state.closeSidePanel);
let throughput: number;
@@ -77,6 +79,7 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
dataExplorerArea: Constants.Areas.ContextualPane,
};
TelemetryProcessor.trace(Action.CreateDatabase, ActionModifiers.Open, addDatabasePaneOpenMessage);
buttonElement.focus();
}, []);
const onSubmit = () => {

View File

@@ -307,16 +307,23 @@ export class SplashScreen extends React.Component<SplashScreenProps> {
iconSrc: AddDatabaseIcon,
title: "New " + getDatabaseName(),
description: undefined,
onClick: () =>
useSidePanel
.getState()
.openSidePanel("New " + getDatabaseName(), <AddDatabasePanel explorer={this.container} />),
onClick: () => this.openAddDatabasePanel(),
});
}
return items;
}
private openAddDatabasePanel() {
const newDatabaseButton = document.activeElement as HTMLElement;
useSidePanel
.getState()
.openSidePanel(
"New " + getDatabaseName(),
<AddDatabasePanel explorer={this.container} buttonElement={newDatabaseButton} />
);
}
private decorateOpenCollectionActivity({ databaseId, collectionId }: MostRecentActivity.OpenCollectionItem) {
return {
iconSrc: NotebookIcon,

View File

@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { FeedOptions } from "@azure/cosmos";
import * as ko from "knockout";
import Q from "q";
@@ -32,6 +31,8 @@ export interface CassandraTableKey {
}
export abstract class TableDataClient {
constructor() {}
public abstract createDocument(
collection: ViewModels.Collection,
entity: Entities.ITableEntity
@@ -53,7 +54,7 @@ export abstract class TableDataClient {
public abstract deleteDocuments(
collection: ViewModels.Collection,
entitiesToDelete: Entities.ITableEntity[]
): Promise<unknown>;
): Promise<any>;
}
export class TablesAPIDataClient extends TableDataClient {
@@ -66,7 +67,7 @@ export class TablesAPIDataClient extends TableDataClient {
collection,
TableEntityProcessor.convertEntityToNewDocument(<Entities.ITableEntityForTablesAPI>entity)
).then(
(newDocument: unknown) => {
(newDocument: any) => {
const newEntity = TableEntityProcessor.convertDocumentsToEntities([newDocument])[0];
deferred.resolve(newEntity);
},
@@ -145,7 +146,7 @@ export class CassandraAPIDataClient extends TableDataClient {
const clearInProgressMessage = logConsoleProgress(`Adding new row to table ${collection.id()}`);
let properties = "(";
let values = "(";
for (const property in entity) {
for (let property in entity) {
if (entity[property]._ === null) {
continue;
}
@@ -163,7 +164,7 @@ export class CassandraAPIDataClient extends TableDataClient {
const deferred = Q.defer<Entities.ITableEntity>();
this.queryDocuments(collection, query)
.then(
() => {
(data: any) => {
entity[TableConstants.EntityKeyNames.RowKey] = entity[this.getCassandraPartitionKeyProperty(collection)];
entity[TableConstants.EntityKeyNames.RowKey]._ = entity[TableConstants.EntityKeyNames.RowKey]._.toString();
logConsoleInfo(`Successfully added new row to table ${collection.id()}`);
@@ -187,10 +188,10 @@ export class CassandraAPIDataClient extends TableDataClient {
try {
let whereSegment = " WHERE";
const keys: CassandraTableKey[] = collection.cassandraKeys.partitionKeys.concat(
let keys: CassandraTableKey[] = collection.cassandraKeys.partitionKeys.concat(
collection.cassandraKeys.clusteringKeys
);
for (const keyIndex in keys) {
for (let keyIndex in keys) {
const key = keys[keyIndex].property;
const keyType = keys[keyIndex].type;
whereSegment += this.isStringType(keyType)
@@ -201,21 +202,14 @@ export class CassandraAPIDataClient extends TableDataClient {
let updateQuery = `UPDATE ${collection.databaseId}.${collection.id()}`;
let isPropertyUpdated = false;
let isFirstPropertyToUpdate = true;
for (const property in newEntity) {
for (let property in newEntity) {
if (
!originalDocument[property] ||
newEntity[property]._.toString() !== originalDocument[property]._.toString()
) {
let propertyQuerySegment = this.isStringType(newEntity[property].$)
? `${property} = '${newEntity[property]._}',`
: `${property} = ${newEntity[property]._},`;
// Only add the "SET" keyword once
if (isFirstPropertyToUpdate) {
propertyQuerySegment = " SET " + propertyQuerySegment;
isFirstPropertyToUpdate = false;
}
updateQuery += propertyQuerySegment;
updateQuery += this.isStringType(newEntity[property].$)
? ` SET ${property} = '${newEntity[property]._}',`
: ` SET ${property} = ${newEntity[property]._},`;
isPropertyUpdated = true;
}
}
@@ -228,7 +222,7 @@ export class CassandraAPIDataClient extends TableDataClient {
let deleteQuery = `DELETE `;
let isPropertyDeleted = false;
for (const property in originalDocument) {
for (let property in originalDocument) {
if (property !== TableConstants.EntityKeyNames.RowKey && !newEntity[property] && !!originalDocument[property]) {
deleteQuery += ` ${property},`;
isPropertyDeleted = true;
@@ -332,16 +326,16 @@ export class CassandraAPIDataClient extends TableDataClient {
resourceId: string,
explorer: Explorer,
createKeyspaceQuery: string
): Q.Promise<unknown> {
): Q.Promise<any> {
if (!createKeyspaceQuery) {
return Q.reject("No query specified");
}
const deferred: Q.Deferred<unknown> = Q.defer();
const deferred: Q.Deferred<any> = Q.defer();
const clearInProgressMessage = logConsoleProgress(`Creating a new keyspace with query ${createKeyspaceQuery}`);
this.createOrDeleteQuery(cassandraEndpoint, resourceId, createKeyspaceQuery)
.then(
() => {
(data: any) => {
logConsoleInfo(`Successfully created a keyspace with query ${createKeyspaceQuery}`);
deferred.resolve();
},
@@ -365,8 +359,8 @@ export class CassandraAPIDataClient extends TableDataClient {
explorer: Explorer,
createTableQuery: string,
createKeyspaceQuery?: string
): Q.Promise<unknown> {
let createKeyspacePromise: Q.Promise<unknown>;
): Q.Promise<any> {
let createKeyspacePromise: Q.Promise<any>;
if (createKeyspaceQuery) {
createKeyspacePromise = this.createKeyspace(cassandraEndpoint, resourceId, explorer, createKeyspaceQuery);
} else {
@@ -379,7 +373,7 @@ export class CassandraAPIDataClient extends TableDataClient {
const clearInProgressMessage = logConsoleProgress(`Creating a new table with query ${createTableQuery}`);
this.createOrDeleteQuery(cassandraEndpoint, resourceId, createTableQuery)
.then(
() => {
(data: any) => {
logConsoleInfo(`Successfully created a table with query ${createTableQuery}`);
deferred.resolve();
},
@@ -398,7 +392,7 @@ export class CassandraAPIDataClient extends TableDataClient {
}
public getTableKeys(collection: ViewModels.Collection): Q.Promise<CassandraTableKeys> {
if (collection.cassandraKeys) {
if (!!collection.cassandraKeys) {
return Q.resolve(collection.cassandraKeys);
}
const clearInProgressMessage = logConsoleProgress(`Fetching keys for table ${collection.id()}`);
@@ -407,7 +401,7 @@ export class CassandraAPIDataClient extends TableDataClient {
authType === AuthType.EncryptedToken
? Constants.CassandraBackend.guestKeysApi
: Constants.CassandraBackend.keysApi;
const endpoint = `${configContext.BACKEND_ENDPOINT}/${apiEndpoint}`;
let endpoint = `${configContext.BACKEND_ENDPOINT}/${apiEndpoint}`;
const deferred = Q.defer<CassandraTableKeys>();
$.ajax(endpoint, {
@@ -428,7 +422,7 @@ export class CassandraAPIDataClient extends TableDataClient {
logConsoleInfo(`Successfully fetched keys for table ${collection.id()}`);
deferred.resolve(data);
},
(error: Error) => {
(error: any) => {
handleError(error, "FetchKeysCassandra", `Error fetching keys for table ${collection.id()}`);
deferred.reject(error);
}
@@ -438,7 +432,7 @@ export class CassandraAPIDataClient extends TableDataClient {
}
public getTableSchema(collection: ViewModels.Collection): Q.Promise<CassandraTableKey[]> {
if (collection.cassandraSchema) {
if (!!collection.cassandraSchema) {
return Q.resolve(collection.cassandraSchema);
}
const clearInProgressMessage = logConsoleProgress(`Fetching schema for table ${collection.id()}`);
@@ -447,7 +441,7 @@ export class CassandraAPIDataClient extends TableDataClient {
authType === AuthType.EncryptedToken
? Constants.CassandraBackend.guestSchemaApi
: Constants.CassandraBackend.schemaApi;
const endpoint = `${configContext.BACKEND_ENDPOINT}/${apiEndpoint}`;
let endpoint = `${configContext.BACKEND_ENDPOINT}/${apiEndpoint}`;
const deferred = Q.defer<CassandraTableKey[]>();
$.ajax(endpoint, {
@@ -468,7 +462,7 @@ export class CassandraAPIDataClient extends TableDataClient {
logConsoleInfo(`Successfully fetched schema for table ${collection.id()}`);
deferred.resolve(data.columns);
},
(error: Error) => {
(error: any) => {
handleError(error, "FetchSchemaCassandra", `Error fetching schema for table ${collection.id()}`);
deferred.reject(error);
}
@@ -495,7 +489,7 @@ export class CassandraAPIDataClient extends TableDataClient {
beforeSend: this.setAuthorizationHeader,
cache: false,
}).then(
() => {
(data: any) => {
deferred.resolve();
},
(reason) => {

View File

@@ -3,7 +3,7 @@ import { BindingHandlersRegisterer } from "./Bindings/BindingHandlersRegisterer"
import Explorer from "./Explorer/Explorer";
export const applyExplorerBindings = (explorer: Explorer) => {
if (!!explorer) {
if (explorer) {
window.dataExplorer = explorer;
BindingHandlersRegisterer.registerBindingHandlers();
ko.applyBindings(explorer);