mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
* dbeaver/pro#4583 feat: add tab reordering functionality in NavigationTabsService * dbeaver/pro#4583 feat: update tab filtering to support tabs order * dbeaver/pro#4583 feat: add tab drag-and-drop functionality and associated tests * dbeaver/pro#4583 feat: implement tab drag-and-drop functionality * dbeaver/pro#4583 fix: adjust tab reordering logic to handle dragged tab position correctly since our reordering logic is duplicating in two components and, moreover, I found a bug in one of the implementations, I decided to put all the common logic to a dedicated helper with test coverage to be sure we use the right logic everywhere. * dbeaver/pro#4583 test: remove redundant tests for onReorder in useTabDragAndDrop * dbeaver/pro#4583 refactor: update reorderTab method to remove return value * dbeaver/pro#4583 feat: add tab reordering functionality to SqlResultTabs component * dbeaver/pro#4583 feat: add tabs order persistence via useUserData hook * dbeaver/pro#4583 feat: integrate react-dnd for tab drag-and-drop functionality * dbeaver/pro#4583 chore: update deps * dbeaver/pro#4583 feat: integrate @dbeaver/js-helpers for array reordering in useHeaderDnD * dbeaver/pro#4583 refactor: simplify reorderArray implementation by extracting some logic to helpers * dbeaver/pro#4583 refactor: extracted tab reordering to a separate hook - moved the tab order persistence logic into a new useTabOrderPersistence hook to make the flow is more obvious (we use this default persistence only with tabs container) - introduced new reorderStateKey tab state to have an identifier for a tab panel, use it in canDrop check to prevent cross-panel DnD -replaced reorderable prop with reorderStateKey, because without a key you can't use reordering * dbeaver/pro#4583 refactor: add dropAllowed state to useTabDragAndDrop for improved drag-and-drop UI * dbeaver/pro#4583 chore: add a comment about reorderStateKey * dbeaver/pro#4583 refactor: add safe guard in SqlResultTabs.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * dbeaver/pro#4583 refactor: wrap onReorder function into useCallback for improved performance * dbeaver/pro#4583 refactor: remove applyOrder method from ITabsContainer and update useTabOrderPersistence to not have dependencies on container * dbeaver/pro#4583 refactor: use refactored hook in SideBarPanel and ToolsPanel Since we are not mutating a container state anymore, we have to update sorting separately in TabList level because it reads directly from the container. * dbeaver/pro#4583 refactor: remove fallback for stateKey * dbeaver/pro#4583 refactor: replace hardcoded values with constants in useTabDragAndDrop * dbeaver/pro#4583 refactor: add DragPosition type * dbeaver/pro#4583 refactor: remove dependencies in TabsState effect * dbeaver/pro#4583 refactor: remove stateKey from useTab hook * dbeaver/pro#4583 feat: add panelId prop to SideBarPanel and use as persistence key * dbeaver/pro#4583 refactor: persistence key in useTabOrderPersistence * dbeaver/pro#4583 feat: add reorderArrayWithOrder helper and update SqlResultTabs to use it --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com> Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
60 lines
1.6 KiB
JSON
60 lines
1.6 KiB
JSON
{
|
|
"name": "@cloudbeaver/core-ui",
|
|
"type": "module",
|
|
"sideEffects": [
|
|
"./lib/module.js",
|
|
"./lib/index.js",
|
|
"src/**/*.css",
|
|
"src/**/*.scss",
|
|
"public/**/*"
|
|
],
|
|
"version": "0.1.0",
|
|
"description": "",
|
|
"license": "Apache-2.0",
|
|
"exports": {
|
|
".": "./lib/index.js",
|
|
"./module": "./lib/module.js"
|
|
},
|
|
"scripts": {
|
|
"build": "tsc -b",
|
|
"clean": "rimraf --glob lib",
|
|
"lint": "eslint ./src/ --ext .ts,.tsx",
|
|
"test": "dbeaver-test",
|
|
"validate-dependencies": "core-cli-validate-dependencies"
|
|
},
|
|
"dependencies": {
|
|
"@cloudbeaver/core-blocks": "workspace:*",
|
|
"@cloudbeaver/core-data-context": "workspace:*",
|
|
"@cloudbeaver/core-di": "workspace:*",
|
|
"@cloudbeaver/core-dialogs": "workspace:*",
|
|
"@cloudbeaver/core-events": "workspace:*",
|
|
"@cloudbeaver/core-executor": "workspace:*",
|
|
"@cloudbeaver/core-localization": "workspace:*",
|
|
"@cloudbeaver/core-routing": "workspace:*",
|
|
"@cloudbeaver/core-utils": "workspace:*",
|
|
"@cloudbeaver/core-view": "workspace:*",
|
|
"@dbeaver/js-helpers": "workspace:*",
|
|
"@dbeaver/react-dnd": "workspace:^",
|
|
"mobx": "^6",
|
|
"mobx-react-lite": "^4",
|
|
"react": "^19",
|
|
"react-dnd": "^16",
|
|
"react-dnd-html5-backend": "^16",
|
|
"react-dom": "^19",
|
|
"reakit": "^1",
|
|
"tslib": "^2"
|
|
},
|
|
"devDependencies": {
|
|
"@cloudbeaver/core-cli": "workspace:*",
|
|
"@cloudbeaver/tsconfig": "workspace:*",
|
|
"@dbeaver/cli": "workspace:^",
|
|
"@dbeaver/react-tests": "workspace:^",
|
|
"@testing-library/react": "^16",
|
|
"@types/react": "^19",
|
|
"rimraf": "^6",
|
|
"typescript": "^5",
|
|
"typescript-plugin-css-modules": "^5",
|
|
"vitest": "^3"
|
|
}
|
|
}
|