mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-21 18:01:39 +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>
140 lines
4.5 KiB
TypeScript
140 lines
4.5 KiB
TypeScript
import { DocumentsTabV2 } from "Explorer/Tabs/DocumentsTabV2/DocumentsTabV2";
|
|
import * as ko from "knockout";
|
|
import * as ViewModels from "../../Contracts/ViewModels";
|
|
import { updateUserContext } from "../../UserContext";
|
|
import { useTabs } from "../../hooks/useTabs";
|
|
import { container } from "../Controls/Settings/TestUtils";
|
|
import DocumentId from "../Tree/DocumentId";
|
|
import { NewQueryTab } from "./QueryTab/QueryTab";
|
|
|
|
describe("useTabs tests", () => {
|
|
let database: ViewModels.Database;
|
|
let collection: ViewModels.Collection;
|
|
let queryTab: NewQueryTab;
|
|
let documentsTab: DocumentsTabV2;
|
|
|
|
beforeEach(() => {
|
|
updateUserContext({
|
|
databaseAccount: {
|
|
id: "test",
|
|
name: "test",
|
|
location: "",
|
|
type: "",
|
|
kind: "",
|
|
properties: undefined,
|
|
},
|
|
});
|
|
|
|
database = {
|
|
id: ko.observable<string>("test"),
|
|
isDatabaseShared: () => false,
|
|
} as ViewModels.Database;
|
|
database.isDatabaseExpanded = ko.observable<boolean>(true);
|
|
database.selectedSubnodeKind = ko.observable<ViewModels.CollectionTabKind>();
|
|
|
|
collection = {
|
|
databaseId: "test",
|
|
id: ko.observable<string>("test"),
|
|
} as ViewModels.Collection;
|
|
collection.getDatabase = (): ViewModels.Database => database;
|
|
collection.isCollectionExpanded = ko.observable<boolean>(true);
|
|
collection.selectedSubnodeKind = ko.observable<ViewModels.CollectionTabKind>();
|
|
|
|
queryTab = new NewQueryTab(
|
|
{
|
|
tabKind: ViewModels.CollectionTabKind.Query,
|
|
collection,
|
|
database,
|
|
title: "",
|
|
tabPath: "",
|
|
queryText: "",
|
|
partitionKey: collection.partitionKey,
|
|
onLoadStartKey: 1,
|
|
},
|
|
{
|
|
container: container,
|
|
},
|
|
);
|
|
|
|
documentsTab = new DocumentsTabV2({
|
|
partitionKey: undefined,
|
|
documentIds: ko.observableArray<DocumentId>(),
|
|
tabKind: ViewModels.CollectionTabKind.Documents,
|
|
collection,
|
|
title: "",
|
|
tabPath: "",
|
|
});
|
|
|
|
// make sure tabs have different tabId
|
|
queryTab.tabId = "1";
|
|
documentsTab.tabId = "2";
|
|
});
|
|
|
|
beforeEach(() => useTabs.setState({ openedTabs: [], activeTab: undefined }));
|
|
|
|
it("open new tabs", () => {
|
|
const { activateNewTab } = useTabs.getState();
|
|
activateNewTab(queryTab);
|
|
let tabsState = useTabs.getState();
|
|
expect(tabsState.openedTabs.length).toBe(1);
|
|
expect(tabsState.openedTabs[0]).toEqual(queryTab);
|
|
expect(tabsState.activeTab).toEqual(queryTab);
|
|
expect(queryTab.isActive()).toBe(true);
|
|
|
|
activateNewTab(documentsTab);
|
|
tabsState = useTabs.getState();
|
|
expect(tabsState.openedTabs.length).toBe(2);
|
|
expect(tabsState.openedTabs[1]).toEqual(documentsTab);
|
|
expect(tabsState.activeTab).toEqual(documentsTab);
|
|
expect(queryTab.isActive()).toBe(false);
|
|
expect(documentsTab.isActive()).toBe(true);
|
|
});
|
|
|
|
it("open existing tabs", () => {
|
|
const { activateNewTab, activateTab } = useTabs.getState();
|
|
activateNewTab(queryTab);
|
|
activateNewTab(documentsTab);
|
|
activateTab(queryTab);
|
|
|
|
const { openedTabs, activeTab } = useTabs.getState();
|
|
expect(openedTabs.length).toBe(2);
|
|
expect(activeTab).toEqual(queryTab);
|
|
expect(queryTab.isActive()).toBe(true);
|
|
expect(documentsTab.isActive()).toBe(false);
|
|
});
|
|
|
|
it("get tabs", () => {
|
|
const { activateNewTab, getTabs } = useTabs.getState();
|
|
activateNewTab(queryTab);
|
|
activateNewTab(documentsTab);
|
|
|
|
const queryTabs = getTabs(ViewModels.CollectionTabKind.Query);
|
|
expect(queryTabs.length).toBe(1);
|
|
expect(queryTabs[0]).toEqual(queryTab);
|
|
|
|
const documentsTabs = getTabs(ViewModels.CollectionTabKind.Documents, (tab) => tab.tabId === documentsTab.tabId);
|
|
expect(documentsTabs.length).toBe(1);
|
|
expect(documentsTabs[0]).toEqual(documentsTab);
|
|
});
|
|
|
|
it("close tabs", () => {
|
|
const { activateNewTab, closeTab, closeTabsByComparator } = useTabs.getState();
|
|
activateNewTab(queryTab);
|
|
activateNewTab(documentsTab);
|
|
closeTab(documentsTab);
|
|
|
|
let tabsState = useTabs.getState();
|
|
expect(tabsState.openedTabs.length).toBe(1);
|
|
expect(tabsState.openedTabs[0]).toEqual(queryTab);
|
|
expect(tabsState.activeTab).toEqual(queryTab);
|
|
expect(queryTab.isActive()).toBe(true);
|
|
expect(documentsTab.isActive()).toBe(false);
|
|
|
|
closeTabsByComparator((tab) => tab.tabId === queryTab.tabId);
|
|
tabsState = useTabs.getState();
|
|
expect(tabsState.openedTabs.length).toBe(0);
|
|
expect(tabsState.activeTab).toEqual(undefined);
|
|
expect(queryTab.isActive()).toBe(false);
|
|
});
|
|
});
|