From dfbcf05b2f595f5b7b77dd61abf77e6e07acaf8f Mon Sep 17 00:00:00 2001 From: Guy Ben-Aharon Date: Mon, 21 Jul 2025 15:54:27 +0300 Subject: [PATCH] feat(canvas): Add filter tables on canvas (#774) * feat(canvas): filter tables on canvas * fix build * fix * fix --- package-lock.json | 79 ++- package.json | 3 +- src/components/empty-state/empty-state.tsx | 2 +- .../tree-view/tree-item-skeleton.tsx | 17 + src/components/tree-view/tree-view.tsx | 461 ++++++++++++++++++ src/components/tree-view/tree.ts | 41 ++ src/components/tree-view/use-tree.ts | 153 ++++++ src/context/canvas-context/canvas-context.tsx | 4 + .../canvas-context/canvas-provider.tsx | 4 + .../chartdb-context/chartdb-context.tsx | 10 + .../chartdb-context/chartdb-provider.tsx | 43 +- src/context/config-context/config-context.tsx | 14 + .../config-context/config-provider.tsx | 80 ++- .../keyboard-shortcuts.ts | 8 + src/i18n/locales/ar.ts | 2 + src/i18n/locales/bn.ts | 2 + src/i18n/locales/de.ts | 2 + src/i18n/locales/en.ts | 1 + src/i18n/locales/es.ts | 2 + src/i18n/locales/fr.ts | 2 + src/i18n/locales/gu.ts | 2 + src/i18n/locales/hi.ts | 2 + src/i18n/locales/id_ID.ts | 2 + src/i18n/locales/ja.ts | 2 + src/i18n/locales/ko_KR.ts | 2 + src/i18n/locales/mr.ts | 2 + src/i18n/locales/ne.ts | 2 + src/i18n/locales/pt_BR.ts | 2 + src/i18n/locales/ru.ts | 2 + src/i18n/locales/te.ts | 2 + src/i18n/locales/tr.ts | 2 + src/i18n/locales/uk.ts | 2 + src/i18n/locales/vi.ts | 2 + src/i18n/locales/zh_CN.ts | 2 + src/i18n/locales/zh_TW.ts | 2 + src/lib/domain/config.ts | 1 + src/lib/domain/db-table.ts | 18 +- .../canvas/canvas-filter/canvas-filter.tsx | 410 ++++++++++++++++ src/pages/editor-page/canvas/canvas.tsx | 53 +- .../editor-page/canvas/toolbar/toolbar.tsx | 68 +-- .../tables-section/tables-section.tsx | 20 +- 41 files changed, 1471 insertions(+), 59 deletions(-) create mode 100644 src/components/tree-view/tree-item-skeleton.tsx create mode 100644 src/components/tree-view/tree-view.tsx create mode 100644 src/components/tree-view/tree.ts create mode 100644 src/components/tree-view/use-tree.ts create mode 100644 src/pages/editor-page/canvas/canvas-filter/canvas-filter.tsx diff --git a/package-lock.json b/package-lock.json index 56916616..44d037f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,8 +46,9 @@ "html-to-image": "^1.11.11", "i18next": "^23.14.0", "i18next-browser-languagedetector": "^8.0.0", - "lucide-react": "^0.441.0", + "lucide-react": "^0.525.0", "monaco-editor": "^0.52.0", + "motion": "^12.23.6", "nanoid": "^5.0.7", "node-sql-parser": "^5.3.2", "react": "^18.3.1", @@ -6767,6 +6768,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.6.tgz", + "integrity": "sha512-dsJ389QImVE3lQvM8Mnk99/j8tiZDM/7706PCqvkQ8sSCnpmWxsgX+g0lj7r5OBVL0U36pIecCTBoIWcM2RuKw==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.6", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -8052,12 +8080,12 @@ } }, "node_modules/lucide-react": { - "version": "0.441.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.441.0.tgz", - "integrity": "sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==", + "version": "0.525.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", + "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", "license": "ISC", "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/lz-string": { @@ -8198,6 +8226,47 @@ "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==", "license": "MIT" }, + "node_modules/motion": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.6.tgz", + "integrity": "sha512-6U55IW5i6Vut2ryKEhrZKg55490k9d6qdGXZoNSf98oQgDj5D7bqTnVJotQ6UW3AS6QfbW6KSLa7/e1gy+a07g==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.6.tgz", + "integrity": "sha512-G2w6Nw7ZOVSzcQmsdLc0doMe64O/Sbuc2bVAbgMz6oP/6/pRStKRiVRV4bQfHp5AHYAKEGhEdVHTM+R3FDgi5w==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", diff --git a/package.json b/package.json index 41a9b289..9827bf73 100644 --- a/package.json +++ b/package.json @@ -54,8 +54,9 @@ "html-to-image": "^1.11.11", "i18next": "^23.14.0", "i18next-browser-languagedetector": "^8.0.0", - "lucide-react": "^0.441.0", + "lucide-react": "^0.525.0", "monaco-editor": "^0.52.0", + "motion": "^12.23.6", "nanoid": "^5.0.7", "node-sql-parser": "^5.3.2", "react": "^18.3.1", diff --git a/src/components/empty-state/empty-state.tsx b/src/components/empty-state/empty-state.tsx index 44dfacb1..1f44db03 100644 --- a/src/components/empty-state/empty-state.tsx +++ b/src/components/empty-state/empty-state.tsx @@ -52,7 +52,7 @@ export const EmptyState = forwardRef<