mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-03-18 22:23:54 +00:00
* Document page now loads list of docs and displays selection * DocumentsTabV2 now properly loads documents, show partition keys and display first doc with proper selection behavior. Move it to its own folder. * Extract table in a separate component * Resizable columns on the document table * Fix selection behavior and some layout issue * Adding table scrolling * Fix NaN height issue * Fix NaN height issue * Fix column sizing + cell selection * Improvement in width size. Add Load More * Add react editor and pass column headers * Dynamic columns for pk * Fix initial columns size * Add nav buttons * Editing content updates buttons state * Discard and save buttons working * Fix save new document. Implement delete. * Remove debug display * Fix unexpand filter and reformat * Fix compil issues * Add refresh button * Update column header placeholder style * Implement delete multiple docs * Fix multi delete * Fix show/hide delete button * Fix selection behavior * Fix UX with buttons behavior and editor display * Fix UX issue with not discarding edit changes * Add some TODO's * Remove debugging info and reformat * Add mongo support * Fix build issues * Fix table header. Remove debug statement * Restore broken nosql * Fix mongo save new document/update document * Fix bugs with clicking on newly created documents * Fix comment * Fix double fetch issue when clicking on an item * Auto-select last document when saving new document * Fix resourceTokenPartitionKey code * Fix format * Fix isQueryCopilotSampleContainer flag * Fix unused code * Call tab when updating error flag * Destructure props to make useEffect dependencies work * Fix loadStartKey * minor update * Fix format * Add title to table * Fix table coming off its container with unwanted horizontal scrollbar * Increase table width. Fix eslint issue. * Move refresh documents button from table back to DocumentsTabV2 * Fix load more text centering * Don't show Load More if nothing to show * Fix columns min width * Add keyboard shortcuts * Add keyboard handlers to load more and refresh button * Add keyboard support to select table row * Disable eslint issue from fluent library * Connect cancel query button * Add Fluent V9 theme for Fabric (#1821) * Clean up dependencies and memoize internal functions and object. Move methods and object that don't depend on state outside of component. * Fix filter disappearing when clicking Apply Filter * Fix typo and format * Implement bulk delete for nosql * Replace filter ui components with fluent ui * Remove jquery calls * Migrate unit test to DocumentsTabV2 * Remove DocumentsTab and MongoDocumentsTab. Fix build issues. * Properly handle activetab * Remove comments and unused code * Port keyboard shortcuts from commitId1f4d0f2* Port item editor shortcuts to improved Items tab branch (#1831) * set filter focus on Ctrl+Shift+F * implement filter enter/esc keybinds * remove debugging * Collapse filter when query is executed * Fix monaco editor not happy when parent is null * Fix how bulk delete operation gets called when no partition key * Fix update id list after delete * Fix deleteDocuments * Fix build issue * Fix bug in mongo delete * Fix mongo delete flow * Proper error handling in mongo * Handle >100 bulk delete operations * Add unit tests for DocumentsTableComponent * More improvements to table unit tests * Fix import. Disable selection test for now * Add more DocumentsTab unit react tests * Remove selection test * Add more unit tests. Add lcov coverage report to display in vscode * Move unit tests to correct file * Add unit test on command bar * Fix build issues * Add more unit tests * Remove unneeded call * Add DocumentsTab for Mongo API * Fix linting errors * Update fluent ui v9 dependency. Color columns separation. Fix refresh button placement to not interfere with header cell width. * Revert @fluentui/react-components to a safe version that compiles * Add confirmation window when documents have been deleted * Fix mongo unit tests * Fix format * Update src/Common/dataAccess/deleteDocument.ts Co-authored-by: Ashley Stanton-Nurse <ashleyst@microsoft.com> * Update src/Common/dataAccess/deleteDocument.ts Co-authored-by: Ashley Stanton-Nurse <ashleyst@microsoft.com> * Update src/Common/dataAccess/deleteDocument.ts Co-authored-by: Ashley Stanton-Nurse <ashleyst@microsoft.com> * Fix bug with markup. Simplify code. * Protect against creating React editor without parent node * Replace rendering tests with snapshot match * Add test screenshot to troubleshoot e2e test * Revert "Add test screenshot to troubleshoot e2e test" This reverts commit1b8138ade0. * Attempt 2 at troubleshooting failing test * Revert "Attempt 2 at troubleshooting failing test" This reverts commit3e51a593bf. * Delete button now shows if one or more rows are selected --------- Co-authored-by: Vsevolod Kukol <sevoku@microsoft.com> Co-authored-by: Ashley Stanton-Nurse <ashleyst@microsoft.com>
92 lines
2.6 KiB
TypeScript
92 lines
2.6 KiB
TypeScript
import * as ko from "knockout";
|
|
import * as DataModels from "../../Contracts/DataModels";
|
|
import { useDialog } from "../Controls/Dialog";
|
|
|
|
/**
|
|
* Replaces DocumentsTab so we can plug any object
|
|
*/
|
|
export interface IDocumentIdContainer {
|
|
partitionKeyProperties?: string[];
|
|
partitionKey: DataModels.PartitionKey;
|
|
isEditorDirty: () => boolean;
|
|
selectDocument: (documentId: DocumentId) => Promise<void>;
|
|
}
|
|
export default class DocumentId {
|
|
public container: IDocumentIdContainer;
|
|
public rid: string;
|
|
public self: string;
|
|
public ts: string;
|
|
public id: ko.Observable<string>;
|
|
public partitionKeyProperties: string[];
|
|
public partitionKey: DataModels.PartitionKey;
|
|
public partitionKeyValue: any[];
|
|
public stringPartitionKeyValues: string[];
|
|
public isDirty: ko.Observable<boolean>;
|
|
|
|
constructor(container: IDocumentIdContainer, data: any, partitionKeyValue: any[]) {
|
|
this.container = container;
|
|
this.self = data._self;
|
|
this.rid = data._rid;
|
|
this.ts = data._ts;
|
|
this.partitionKeyValue = partitionKeyValue;
|
|
this.partitionKeyProperties = container?.partitionKeyProperties;
|
|
this.partitionKey = container && container.partitionKey;
|
|
this.stringPartitionKeyValues = this.getPartitionKeyValueAsString();
|
|
this.id = ko.observable(data.id);
|
|
this.isDirty = ko.observable(false);
|
|
}
|
|
|
|
public click() {
|
|
if (this.container.isEditorDirty()) {
|
|
useDialog
|
|
.getState()
|
|
.showOkCancelModalDialog(
|
|
"Unsaved changes",
|
|
"Your unsaved changes will be lost. Do you want to continue?",
|
|
"OK",
|
|
() => this.loadDocument(),
|
|
"Cancel",
|
|
undefined,
|
|
);
|
|
} else {
|
|
this.loadDocument();
|
|
}
|
|
}
|
|
|
|
public partitionKeyHeader(): Object {
|
|
if (!this.partitionKeyProperties || this.partitionKeyProperties.length === 0) {
|
|
return undefined;
|
|
}
|
|
|
|
if (!this.partitionKeyValue || this.partitionKeyValue.length === 0) {
|
|
return [{}];
|
|
}
|
|
|
|
return [this.partitionKeyValue];
|
|
}
|
|
|
|
public getPartitionKeyValueAsString(): string[] {
|
|
return this.partitionKeyValue?.map((partitionKeyValue) => {
|
|
const typeOfPartitionKeyValue: string = typeof partitionKeyValue;
|
|
|
|
if (
|
|
typeOfPartitionKeyValue === "undefined" ||
|
|
typeOfPartitionKeyValue === "null" ||
|
|
typeOfPartitionKeyValue === "object"
|
|
) {
|
|
return "";
|
|
}
|
|
|
|
if (typeOfPartitionKeyValue === "string") {
|
|
return partitionKeyValue;
|
|
}
|
|
|
|
return JSON.stringify(partitionKeyValue);
|
|
});
|
|
}
|
|
|
|
public async loadDocument(): Promise<void> {
|
|
await this.container.selectDocument(this);
|
|
}
|
|
}
|