Merged Cassandra related implementation

This commit is contained in:
vaidankarswapnil 2021-08-06 12:50:52 +05:30
commit 0cb897451d
2 changed files with 114 additions and 36 deletions

View File

@ -13,6 +13,7 @@ import {
import React, { FunctionComponent } from "react"; import React, { FunctionComponent } from "react";
import AddIcon from "../../../../images/Add.svg"; import AddIcon from "../../../../images/Add.svg";
import CancelIcon from "../../../../images/cancel.svg"; import CancelIcon from "../../../../images/cancel.svg";
import { userContext } from "../../../UserContext";
import { IOption } from "./QueryTableTabUtils"; import { IOption } from "./QueryTableTabUtils";
const dropdownStyles: Partial<IDropdownStyles> = { dropdown: { width: 100 } }; const dropdownStyles: Partial<IDropdownStyles> = { dropdown: { width: 100 } };
@ -73,6 +74,15 @@ export const QueryTableEntityClause: FunctionComponent<IQueryTableEntityClausePr
const sectionStackTokens: IStackTokens = { childrenGap: 12 }; const sectionStackTokens: IStackTokens = { childrenGap: 12 };
const validateEntityTypeOption = (): boolean => {
if (userContext.apiType === "Cassandra") {
return true;
} else if (selectedField === "PartitionKey" || selectedField === "RowKey" || selectedField === "Timestamp") {
return true;
}
return false;
};
return ( return (
<> <>
<Stack horizontal tokens={sectionStackTokens}> <Stack horizontal tokens={sectionStackTokens}>
@ -115,7 +125,7 @@ export const QueryTableEntityClause: FunctionComponent<IQueryTableEntityClausePr
} }
options={entityTypeOptions} options={entityTypeOptions}
id="entityOptionId" id="entityOptionId"
disabled={selectedField !== "t3PN"} disabled={validateEntityTypeOption()}
styles={dropdownStyles} styles={dropdownStyles}
/> />
<Dropdown <Dropdown

View File

@ -39,6 +39,7 @@ import Explorer from "../../Explorer";
import { useCommandBar } from "../../Menus/CommandBar/CommandBarComponentAdapter"; import { useCommandBar } from "../../Menus/CommandBar/CommandBarComponentAdapter";
import { AddTableEntityPanel } from "../../Panes/Tables/AddTableEntityPanel"; import { AddTableEntityPanel } from "../../Panes/Tables/AddTableEntityPanel";
import { EditTableEntityPanel } from "../../Panes/Tables/EditTableEntityPanel"; import { EditTableEntityPanel } from "../../Panes/Tables/EditTableEntityPanel";
import { getQuotedCqlIdentifier } from "../../Tables/CqlUtilities";
import * as DataTableUtilities from "../../Tables/DataTable/DataTableUtilities"; import * as DataTableUtilities from "../../Tables/DataTable/DataTableUtilities";
import TableCommands from "../../Tables/DataTable/TableCommands"; import TableCommands from "../../Tables/DataTable/TableCommands";
import TableEntityListViewModel from "../../Tables/DataTable/TableEntityListViewModel"; import TableEntityListViewModel from "../../Tables/DataTable/TableEntityListViewModel";
@ -162,7 +163,7 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
isQueryTableEntityChecked: false, isQueryTableEntityChecked: false,
selectedOperator: "=", selectedOperator: "=",
id: "1", id: "1",
selectedField: "PartitionKey", selectedField: userContext.apiType === "Cassandra" ? "email" : "PartitionKey",
selectedOperation: "", selectedOperation: "",
entityValue: "", entityValue: "",
selectedEntityType: "String", selectedEntityType: "String",
@ -392,19 +393,20 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
", ", ", ",
this.state.selection.getSelection() this.state.selection.getSelection()
); );
let timeStamp: string; let itemValue: string;
const documentKey = userContext.apiType === "Cassandra" ? "userid" : "Timestamp";
let selectedItems: Entities.ITableEntity[]; let selectedItems: Entities.ITableEntity[];
if (this.state.selection.getSelection().length > 0) { if (this.state.selection.getSelection().length > 0) {
Object.keys(this.state.selection.getSelection()[0]).map((key, index) => { Object.keys(this.state.selection.getSelection()[0]).map((key, index) => {
if (key === "Timestamp") { if (key === documentKey) {
timeStamp = Object.values(this.state.selection.getSelection()[0])[index]; itemValue = Object.values(this.state.selection.getSelection()[0])[index];
console.log( console.log(
"🚀 ~ file: QueryTablesTabComponent.tsx ~ line 445 ~ QueryTablesTabComponent ~ timeStamp", "🚀 ~ file: QueryTablesTabComponent.tsx ~ line 445 ~ QueryTablesTabComponent ~ timeStamp",
timeStamp itemValue
); );
} }
}); });
selectedItems = this.state.entities.filter((item) => item["Timestamp"]._ === timeStamp); selectedItems = this.state.entities.filter((item) => item[documentKey]._ === itemValue);
console.log( console.log(
"🚀 ~ file: QueryTablesTabComponent.tsx ~ line 293 ~ QueryTablesTabComponent ~ selectedItems", "🚀 ~ file: QueryTablesTabComponent.tsx ~ line 293 ~ QueryTablesTabComponent ~ selectedItems",
selectedItems selectedItems
@ -434,9 +436,11 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
queryTableRows: queryTableRowsClone, queryTableRows: queryTableRowsClone,
}); });
this.state.queryViewModel if (userContext.apiType !== "Cassandra") {
.queryBuilderViewModel() this.state.queryViewModel
.setExample(entities.length && entities[0].PartitionKey._, entities.length && entities[0].RowKey._); .queryBuilderViewModel()
.setExample(entities.length && entities[0].PartitionKey._, entities.length && entities[0].RowKey._);
}
this.state.queryViewModel.queryBuilderViewModel().queryClauses.children.map((clause, index) => { this.state.queryViewModel.queryBuilderViewModel().queryClauses.children.map((clause, index) => {
this.allQueryTableRows.push({ this.allQueryTableRows.push({
@ -479,22 +483,75 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
} }
public async loadEntities(isInitialLoad: boolean): Promise<void> { public async loadEntities(isInitialLoad: boolean): Promise<void> {
const { tableEntityListViewModel } = this.state; const { tableEntityListViewModel, selectedQueryText } = this.state;
tableEntityListViewModel.renderNextPageAndupdateCache(); tableEntityListViewModel.renderNextPageAndupdateCache();
let headers: string[] = [];
let documents: any = {};
if (userContext.apiType === "Cassandra") {
const query = `SELECT * FROM ${getQuotedCqlIdentifier(
this.props.queryTablesTab.collection.databaseId
)}.${getQuotedCqlIdentifier(this.props.queryTablesTab.collection.id())}`;
documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments(
this.props.queryTablesTab.collection,
query,
true
);
headers = this.getFormattedHeaders(documents.Results);
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
} else {
const { collection } = this.props;
documents = await this.getDocuments(collection, selectedQueryText);
headers = this.getFormattedHeaders(documents.Results);
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
}
// setTimeout(() => { // this.columns = [];
// console.log( // headers.map((header) => {
// "🚀 ~ file: QueryTablesTabComponent.tsx ~ line 296 ~ QueryTablesTabComponent ~ componentDidMount ~ componentDidMount", // this.columns.push({
// this.state.tableEntityListViewModel.items() // key: header,
// name: header,
// minWidth: 100,
// maxWidth: 200,
// data: "string",
// fieldName: header,
// isResizable: true,
// isSorted: true,
// isSortedDescending: false,
// sortAscendingAriaLabel: "Sorted A to Z",
// sortDescendingAriaLabel: "Sorted Z to A",
// });
// });
// const documentItems = this.generateDetailsList(documents.Results);
// // const queryTableRowsClone = [...queryTableRows];
// // queryTableRowsClone[0].fieldOptions = getformattedOptions(headers);
// this.setState(
// {
// columns: this.columns,
// headers,
// operators: this.state.queryViewModel.queryBuilderViewModel().operators(),
// isLoading: false,
// items: documentItems,
// entities: documents.Results,
// originalItems: documentItems,
// queryText: this.state.queryViewModel.queryText(),
// },
// () => {
// if (isInitialLoad) {
// this.loadFilterExample();
// // this.setDefaultItemSelection();
// }
// }
// ); // );
// const { queryTableRows } = this.state;
console.log( //If
"🚀 ~ file: QueryTablesTabComponent.tsx ~ line 496 ~ QueryTablesTabComponent ~ //setTimeout ~ this.state.selectedQueryText", }
this.state.selectedQueryText
); private setupIntialEntities = (
const { collection } = this.props; entities: Entities.ITableEntity[],
const documents = await this.getDocuments(collection, this.state.selectedQueryText); headers: string[],
const headers = this.getFormattedHeaders(documents.Results); isInitialLoad: boolean
): void => {
this.columns = []; this.columns = [];
headers.map((header) => { headers.map((header) => {
this.columns.push({ this.columns.push({
@ -527,7 +584,9 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
}); });
}); });
const documentItems = this.generateDetailsList(documents.Results); const documentItems = this.generateDetailsList(entities);
// const queryTableRowsClone = [...queryTableRows];
// queryTableRowsClone[0].fieldOptions = getformattedOptions(headers);
this.setState( this.setState(
{ {
columns: this.columns, columns: this.columns,
@ -535,18 +594,18 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
operators: this.state.queryViewModel.queryBuilderViewModel().operators(), operators: this.state.queryViewModel.queryBuilderViewModel().operators(),
isLoading: false, isLoading: false,
items: documentItems, items: documentItems,
entities: documents.Results, entities: entities,
originalItems: documentItems, originalItems: documentItems,
queryText: this.state.queryViewModel.queryText(), queryText: this.state.queryViewModel.queryText(),
}, },
() => { () => {
if (isInitialLoad) { if (isInitialLoad) {
this.loadFilterExample(); this.loadFilterExample();
// this.setDefaultItemSelection(); this.setDefaultItemSelection();
} }
} }
); );
} };
private onColumnClick = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => { private onColumnClick = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {
const { columns, items } = this.state; const { columns, items } = this.state;
@ -998,14 +1057,23 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore //@ts-ignore
cloneQueryTableRows[index][selectedOptionType] = selectedOption.text; cloneQueryTableRows[index][selectedOptionType] = selectedOption.text;
if (selectedOptionType !== "selectedOperation" && selectedOptionType !== "selectedOperator") { if (userContext.apiType !== "Cassandra") {
cloneQueryTableRows[index].selectedEntityType = "String"; if (selectedOptionType !== "selectedOperation" && selectedOptionType !== "selectedOperator") {
cloneQueryTableRows[index].selectedEntityType = "String";
const { text } = selectedOption;
if (text === "DateTime" || text === "Timestamp") {
cloneQueryTableRows[index].isTimeStampSelected = true;
cloneQueryTableRows[index].selectedEntityType = "DateTime";
} else if (selectedOptionType !== "selectedTimestamp") {
cloneQueryTableRows[index].isTimeStampSelected = false;
}
}
} else {
const { text } = selectedOption; const { text } = selectedOption;
if (text === "DateTime" || text === "Timestamp") { if (text === "userid") {
cloneQueryTableRows[index].isTimeStampSelected = true; cloneQueryTableRows[index].selectedEntityType = "Int";
cloneQueryTableRows[index].selectedEntityType = "DateTime"; } else {
} else if (selectedOptionType !== "selectedTimestamp") { cloneQueryTableRows[index].selectedEntityType = "Text";
cloneQueryTableRows[index].isTimeStampSelected = false;
} }
} }
this.setState({ queryTableRows: cloneQueryTableRows }); this.setState({ queryTableRows: cloneQueryTableRows });
@ -1041,12 +1109,12 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
operatorOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().operators()), operatorOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().operators()),
// id: cloneQueryTableRows.length + 1, // id: cloneQueryTableRows.length + 1,
id: newClause._id, id: newClause._id,
selectedField: "PartitionKey", selectedField: userContext.apiType === "Cassandra" ? "email" : "PartitionKey",
fieldOptions: getformattedOptions(headers), fieldOptions: getformattedOptions(headers),
entityTypeOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().edmTypes()), entityTypeOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().edmTypes()),
selectedEntityType: "String", selectedEntityType: userContext.apiType === "Cassandra" ? "Text" : "String",
operationOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().clauseRules()), operationOptions: getformattedOptions(queryViewModel.queryBuilderViewModel().clauseRules()),
// operationOptions: queryTableRows[0].operationOptions, // operationOptions: queryTableRows[0].operationOptions,
selectedOperation: "And", selectedOperation: "And",