From 4b41b6f014c2e8f08145d0aefbf2e6dfec35346b Mon Sep 17 00:00:00 2001 From: pranavxc Date: Wed, 31 May 2023 17:18:55 +0000 Subject: [PATCH 01/21] [create-pull-request] automated change Signed-off-by: GitHub --- packages/nc-gui/package-lock.json | 54 +++++++++++++++++++------------ packages/nc-gui/package.json | 2 +- packages/nc-lib-gui/package.json | 2 +- packages/nocodb-sdk/package.json | 2 +- packages/nocodb/package-lock.json | 50 +++++++++++++--------------- packages/nocodb/package.json | 8 ++--- 6 files changed, 63 insertions(+), 55 deletions(-) diff --git a/packages/nc-gui/package-lock.json b/packages/nc-gui/package-lock.json index 57c16ce20f..20ae32f330 100644 --- a/packages/nc-gui/package-lock.json +++ b/packages/nc-gui/package-lock.json @@ -30,7 +30,7 @@ "leaflet.markercluster": "^1.5.3", "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", - "nocodb-sdk": "file:../nocodb-sdk", + "nocodb-sdk": "0.108.1", "papaparse": "^5.3.2", "pinia": "^2.0.33", "qrcode": "^1.5.1", @@ -110,7 +110,8 @@ } }, "../nocodb-sdk": { - "version": "0.108.0", + "version": "0.108.1", + "extraneous": true, "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", @@ -8775,7 +8776,6 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "devOptional": true, "funding": [ { "type": "individual", @@ -12294,8 +12294,21 @@ } }, "node_modules/nocodb-sdk": { - "resolved": "../nocodb-sdk", - "link": true + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", + "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", + "dependencies": { + "axios": "^0.21.1", + "jsep": "^1.3.6" + } + }, + "node_modules/nocodb-sdk/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } }, "node_modules/node-abi": { "version": "3.23.0", @@ -24797,8 +24810,7 @@ "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "devOptional": true + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" }, "form-data": { "version": "4.0.0", @@ -27348,22 +27360,22 @@ } }, "nocodb-sdk": { - "version": "file:../nocodb-sdk", + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", + "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", "requires": { - "@typescript-eslint/eslint-plugin": "^4.0.1", - "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "cspell": "^4.1.0", - "eslint": "^7.8.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-functional": "^3.0.2", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-prettier": "^4.0.0", - "jsep": "^1.3.6", - "npm-run-all": "^4.1.5", - "prettier": "^2.1.1", - "typescript": "^4.0.2" + "jsep": "^1.3.6" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + } } }, "node-abi": { diff --git a/packages/nc-gui/package.json b/packages/nc-gui/package.json index 847017b499..8e5e472641 100644 --- a/packages/nc-gui/package.json +++ b/packages/nc-gui/package.json @@ -54,7 +54,7 @@ "leaflet.markercluster": "^1.5.3", "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", - "nocodb-sdk": "file:../nocodb-sdk", + "nocodb-sdk": "0.108.1", "papaparse": "^5.3.2", "pinia": "^2.0.33", "qrcode": "^1.5.1", diff --git a/packages/nc-lib-gui/package.json b/packages/nc-lib-gui/package.json index b4186cb6c4..89e9198429 100644 --- a/packages/nc-lib-gui/package.json +++ b/packages/nc-lib-gui/package.json @@ -1,6 +1,6 @@ { "name": "nc-lib-gui", - "version": "0.108.0", + "version": "0.108.1", "description": "NocoDB GUI", "author": { "name": "NocoDB", diff --git a/packages/nocodb-sdk/package.json b/packages/nocodb-sdk/package.json index 516ee8927c..cee3da77fe 100644 --- a/packages/nocodb-sdk/package.json +++ b/packages/nocodb-sdk/package.json @@ -1,6 +1,6 @@ { "name": "nocodb-sdk", - "version": "0.108.0", + "version": "0.108.1", "description": "NocoDB SDK", "main": "build/main/index.js", "typings": "build/main/index.d.ts", diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index e7b388a078..dc1259297a 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -1,12 +1,12 @@ { "name": "nocodb", - "version": "0.108.0", + "version": "0.108.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nocodb", - "version": "0.108.0", + "version": "0.108.1", "license": "AGPL-3.0-or-later", "dependencies": { "@google-cloud/storage": "^5.7.2", @@ -80,10 +80,10 @@ "mysql2": "^3.2.0", "nanoid": "^3.1.20", "nc-help": "^0.2.87", - "nc-lib-gui": "0.108.0", + "nc-lib-gui": "0.108.1", "nc-plugin": "^0.1.3", "ncp": "^2.0.0", - "nocodb-sdk": "file:../nocodb-sdk", + "nocodb-sdk": "0.108.1", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "os-locale": "^6.0.2", @@ -190,7 +190,8 @@ } }, "../nocodb-sdk": { - "version": "0.108.0", + "version": "0.108.1", + "extraneous": true, "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", @@ -13157,9 +13158,9 @@ } }, "node_modules/nc-lib-gui": { - "version": "0.108.0", - "resolved": "https://registry.npmjs.org/nc-lib-gui/-/nc-lib-gui-0.108.0.tgz", - "integrity": "sha512-ZV4g5ivc5T5rGDZD89UqJtazNOv4Bo/mc/8sf3OXLOPB4ksIp8v63mSIeb+jBE9TRdptRKA+Ml67Rczwa+0SKA==", + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nc-lib-gui/-/nc-lib-gui-0.108.1.tgz", + "integrity": "sha512-GYhDzkcqOCQ/pqWpxU8hI/4KcuuQrqkhG9zXmwUx1pQlz9qD70X8bQtjqb5rdvJw6diGdYneMl+wRI48bLiUAg==", "dependencies": { "express": "^4.17.1" } @@ -13206,8 +13207,13 @@ } }, "node_modules/nocodb-sdk": { - "resolved": "../nocodb-sdk", - "link": true + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", + "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", + "dependencies": { + "axios": "^0.21.1", + "jsep": "^1.3.6" + } }, "node_modules/node-abort-controller": { "version": "3.1.1", @@ -28442,9 +28448,9 @@ } }, "nc-lib-gui": { - "version": "0.108.0", - "resolved": "https://registry.npmjs.org/nc-lib-gui/-/nc-lib-gui-0.108.0.tgz", - "integrity": "sha512-ZV4g5ivc5T5rGDZD89UqJtazNOv4Bo/mc/8sf3OXLOPB4ksIp8v63mSIeb+jBE9TRdptRKA+Ml67Rczwa+0SKA==", + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nc-lib-gui/-/nc-lib-gui-0.108.1.tgz", + "integrity": "sha512-GYhDzkcqOCQ/pqWpxU8hI/4KcuuQrqkhG9zXmwUx1pQlz9qD70X8bQtjqb5rdvJw6diGdYneMl+wRI48bLiUAg==", "requires": { "express": "^4.17.1" } @@ -28479,22 +28485,12 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "nocodb-sdk": { - "version": "file:../nocodb-sdk", + "version": "0.108.1", + "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", + "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", "requires": { - "@typescript-eslint/eslint-plugin": "^4.0.1", - "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "cspell": "^4.1.0", - "eslint": "^7.8.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-functional": "^3.0.2", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-prettier": "^4.0.0", - "jsep": "^1.3.6", - "npm-run-all": "^4.1.5", - "prettier": "^2.1.1", - "typescript": "^4.0.2" + "jsep": "^1.3.6" } }, "node-abort-controller": { diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index 989c911c05..9f5db96912 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -1,6 +1,6 @@ { "name": "nocodb", - "version": "0.108.0", + "version": "0.108.1", "description": "NocoDB Backend", "main": "dist/bundle.js", "author": { @@ -113,10 +113,10 @@ "mysql2": "^3.2.0", "nanoid": "^3.1.20", "nc-help": "^0.2.87", - "nc-lib-gui": "0.108.0", + "nc-lib-gui": "0.108.1", "nc-plugin": "^0.1.3", "ncp": "^2.0.0", - "nocodb-sdk": "file:../nocodb-sdk", + "nocodb-sdk": "0.108.1", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "os-locale": "^6.0.2", @@ -203,4 +203,4 @@ "coverageDirectory": "../coverage", "testEnvironment": "node" } -} +} \ No newline at end of file From e21cf184ca83e43d7b7cf5c5f07bdfe58a54e475 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Wed, 31 May 2023 23:34:32 +0530 Subject: [PATCH 02/21] chore: update sdk path Signed-off-by: Pranav C --- packages/nc-gui/package-lock.json | 52 +++++++++++---------------- packages/nc-gui/package.json | 2 +- packages/nocodb-sdk/package-lock.json | 4 +-- packages/nocodb/package-lock.json | 30 +++++++++------- packages/nocodb/package.json | 4 +-- 5 files changed, 42 insertions(+), 50 deletions(-) diff --git a/packages/nc-gui/package-lock.json b/packages/nc-gui/package-lock.json index 20ae32f330..3215e147ad 100644 --- a/packages/nc-gui/package-lock.json +++ b/packages/nc-gui/package-lock.json @@ -30,7 +30,7 @@ "leaflet.markercluster": "^1.5.3", "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", - "nocodb-sdk": "0.108.1", + "nocodb-sdk": "file:../nocodb-sdk", "papaparse": "^5.3.2", "pinia": "^2.0.33", "qrcode": "^1.5.1", @@ -111,7 +111,6 @@ }, "../nocodb-sdk": { "version": "0.108.1", - "extraneous": true, "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", @@ -8776,6 +8775,7 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "devOptional": true, "funding": [ { "type": "individual", @@ -12294,21 +12294,8 @@ } }, "node_modules/nocodb-sdk": { - "version": "0.108.1", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", - "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - } - }, - "node_modules/nocodb-sdk/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-abi": { "version": "3.23.0", @@ -24810,7 +24797,8 @@ "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "devOptional": true }, "form-data": { "version": "4.0.0", @@ -27360,22 +27348,22 @@ } }, "nocodb-sdk": { - "version": "0.108.1", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", - "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", + "version": "file:../nocodb-sdk", "requires": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "jsep": "^1.3.6" - }, - "dependencies": { - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - } + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" } }, "node-abi": { diff --git a/packages/nc-gui/package.json b/packages/nc-gui/package.json index 8e5e472641..847017b499 100644 --- a/packages/nc-gui/package.json +++ b/packages/nc-gui/package.json @@ -54,7 +54,7 @@ "leaflet.markercluster": "^1.5.3", "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", - "nocodb-sdk": "0.108.1", + "nocodb-sdk": "file:../nocodb-sdk", "papaparse": "^5.3.2", "pinia": "^2.0.33", "qrcode": "^1.5.1", diff --git a/packages/nocodb-sdk/package-lock.json b/packages/nocodb-sdk/package-lock.json index bc444e9392..b0c351704d 100644 --- a/packages/nocodb-sdk/package-lock.json +++ b/packages/nocodb-sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "nocodb-sdk", - "version": "0.108.0", + "version": "0.108.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nocodb-sdk", - "version": "0.108.0", + "version": "0.108.1", "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index dc1259297a..bd5e898700 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -83,7 +83,7 @@ "nc-lib-gui": "0.108.1", "nc-plugin": "^0.1.3", "ncp": "^2.0.0", - "nocodb-sdk": "0.108.1", + "nocodb-sdk": "file:../nocodb-sdk", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "os-locale": "^6.0.2", @@ -191,7 +191,6 @@ }, "../nocodb-sdk": { "version": "0.108.1", - "extraneous": true, "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", @@ -13207,13 +13206,8 @@ } }, "node_modules/nocodb-sdk": { - "version": "0.108.1", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", - "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-abort-controller": { "version": "3.1.1", @@ -28485,12 +28479,22 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "nocodb-sdk": { - "version": "0.108.1", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.108.1.tgz", - "integrity": "sha512-XJZjDNNEBSJV9+zldpRXX5x2iMO9pvrnWlbphMQ5GlmtHdcLQXjSr6EP0B3QxCFQzdwYyEpcmEY+/qJGtEyRjA==", + "version": "file:../nocodb-sdk", "requires": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "jsep": "^1.3.6" + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" } }, "node-abort-controller": { diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index 9f5db96912..d611fd9329 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -116,7 +116,7 @@ "nc-lib-gui": "0.108.1", "nc-plugin": "^0.1.3", "ncp": "^2.0.0", - "nocodb-sdk": "0.108.1", + "nocodb-sdk": "file:../nocodb-sdk", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "os-locale": "^6.0.2", @@ -203,4 +203,4 @@ "coverageDirectory": "../coverage", "testEnvironment": "node" } -} \ No newline at end of file +} From c85818147e55425f0c2729c1d05e442da176ebb5 Mon Sep 17 00:00:00 2001 From: navi Date: Wed, 31 May 2023 21:01:26 +0100 Subject: [PATCH 03/21] New translations en.json (Turkish) --- packages/nc-gui/lang/tr.json | 80 ++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/nc-gui/lang/tr.json b/packages/nc-gui/lang/tr.json index f901404359..0bf3ae7cd6 100644 --- a/packages/nc-gui/lang/tr.json +++ b/packages/nc-gui/lang/tr.json @@ -39,7 +39,7 @@ "signIn": "KAYIT OL", "signOut": "Oturumu Kapat", "required": "Gerekli", - "enableScanner": "Enable Scanner for filling", + "enableScanner": "Doldurmak için tarayıcıyı etkinleştir", "preferred": "Tercihen", "mandatory": "Zorunlu", "loading": "Yükleniyor ...", @@ -76,7 +76,7 @@ "hideField": "Alanı Gizle", "sortAsc": "Artan Sırala", "sortDesc": "Azalan Sıralama", - "geoDataField": "GeoData Field" + "geoDataField": "GeoData Alanı" }, "objects": { "project": "Proje", @@ -101,7 +101,7 @@ "form": "Form", "kanban": "Kanban", "calendar": "Takvim", - "map": "Map" + "map": "Harita" }, "user": "Kullanıcı", "users": "Kullanıcılar", @@ -210,8 +210,8 @@ "advancedSettings": "Gelişmiş Ayarlar", "codeSnippet": "Kod Parçacığı", "keyboardShortcut": "Klavye Kısayolları", - "generateRandomName": "Generate Random Name", - "findRowByScanningCode": "Find row by scanning a QR or Barcode" + "generateRandomName": "Rastgele Ad Oluştur", + "findRowByScanningCode": "QR veya Barkod okutarak satır bulun" }, "labels": { "createdBy": "Tarafından Oluşturuldu", @@ -221,7 +221,7 @@ "viewName": "Görünüm adı", "viewLink": "Görünüm Linki", "columnName": "Sütun Adı", - "columnToScanFor": "Column to scan", + "columnToScanFor": "Taranacak sütun", "columnType": "Sütun Tipi", "roleName": "Rol Adı", "roleDescription": "Rol Tanımı", @@ -238,7 +238,7 @@ "action": "Aksiyon", "actions": "Aksiyonlar", "operation": "İşlem", - "operationSub": "Sub Operation", + "operationSub": "Alt İşlem", "operationType": "İşlem türü", "operationSubType": "İşlem alt-türü", "description": "Tanım", @@ -260,9 +260,9 @@ "barcodeFormat": "Barkod formatı", "qrCodeValueTooLong": "QR kodu için çok fazla karakter", "barcodeValueTooLong": "Barkod için çok fazla karakter", - "currentLocation": "Current Location", - "lng": "Lng", - "lat": "Lat", + "currentLocation": "Geçerli Konum", + "lng": "Boylam", + "lat": "Enlem", "aggregateFunction": "Birleştirme fonksiyonu", "dbCreateIfNotExists": "Veritabanı : yoksa oluştur", "clientKey": "İstemci Anahtarı", @@ -385,18 +385,18 @@ "nextRecord": "Sonraki kayıt", "previousRecord": "Önceki kayıt", "copyApiURL": "API linkini kopyala", - "createTable": "Create New Table", + "createTable": "Yeni tablo oluştur", "refreshTable": "Tabloları Yenile", - "renameTable": "Rename Table", - "deleteTable": "Delete Table", + "renameTable": "Tabloyu Yeniden Adlandır", + "deleteTable": "Tabloyu Sil", "addField": "Tabloya yeni alan ekle", - "setDisplay": "Set as Display value", + "setDisplay": "Görünüm değeri olarak ayarla", "addRow": "Yeni satır ekle", "saveRow": "Satırı kaydet", "saveAndExit": "Kaydet ve Çık", "saveAndStay": "Kaydet ve Kal", "insertRow": "Yeni Satır Ekle", - "duplicateRow": "Duplicate Row", + "duplicateRow": "Satırı Çoğalt", "deleteRow": "Satırı Sil", "deleteSelectedRow": "Seçilen Satırları Sil", "importExcel": "Excel içe aktar", @@ -412,8 +412,8 @@ "changePwd": "Şifre değiştir", "createView": "Bir görünüm oluştur", "shareView": "Görünümü paylaş", - "findRowByCodeScan": "Find row by scan", - "fillByCodeScan": "Fill by scan", + "findRowByCodeScan": "Tarayarak satır bul", + "fillByCodeScan": "Tarayarak doldur", "listSharedView": "Paylaşılan Görünümler", "ListView": "Görünüm Listesi", "copyView": "Görünümü kopyala", @@ -429,10 +429,10 @@ "openTab": "Yeni sekme aç", "iFrame": "Gömülü HTML kodunu kopyalayın", "addWebhook": "Yeni Webhook ekle", - "enableWebhook": "Enable Webhook", - "testWebhook": "Test Webhook", - "copyWebhook": "Copy Webhook", - "deleteWebhook": "Delete Webhook", + "enableWebhook": "Webhook'u Etkinleştir", + "testWebhook": "Webhook'u Test Et", + "copyWebhook": "Webhook'u Kopyala", + "deleteWebhook": "Webhook'u Sil", "newToken": "Yeni Token ekle", "exportZip": "Zip olarak dışa aktar", "importZip": "Zip olarak içe aktar", @@ -472,10 +472,10 @@ "map": { "mappedBy": "Mapped By", "chooseMappingField": "Choose a Mapping Field", - "openInGoogleMaps": "Google Maps", + "openInGoogleMaps": "Google Haritalar", "openInOpenStreetMap": "OSM" }, - "toggleMobileMode": "Toggle Mobile Mode" + "toggleMobileMode": "Mobil Modu Aç / Kapat" }, "tooltip": { "saveChanges": "Değişiklikleri Kaydet", @@ -542,15 +542,15 @@ "orgViewer": "İzleyicinin yeni proje oluşturmasına izin verilmez ancak davet edilen herhangi bir projeye erişebilir." }, "codeScanner": { - "loadingScanner": "Loading the scanner...", - "selectColumn": "Select a column (QR code or Barcode) that you want to use for finding a row by scanning.", - "moreThanOneRowFoundForCode": "More than one row found for this code. Currently only unique codes are supported.", - "noRowFoundForCode": "No row found for this code for the selected column" + "loadingScanner": "Tarayıcı yükleniyor...", + "selectColumn": "Tarayarak satır bulmak için kullanmak istediğiniz sütunu (QR kodu veya Barkod) seçin.", + "moreThanOneRowFoundForCode": "Bu kod için birden fazla satır bulundu. Şu anda yalnızca benzersiz kodlar desteklenmektedir.", + "noRowFoundForCode": "Seçilen sütunda bu kod için satır bulunamadı" }, "map": { - "overLimit": "You're over the limit.", - "closeLimit": "You're getting close to the limit.", - "limitNumber": "The limit of markers shown in a Map View is 1000 records." + "overLimit": "Sınırı aştınız.", + "closeLimit": "Sınıra yaklaşıyorsunuz.", + "limitNumber": "Bir Harita Görünümünde en fazla 1000 kayıt gösterilebilir." }, "footerInfo": "Sayfa başına satır", "upload": "Yüklenecek Dosyayı Seçin", @@ -634,7 +634,7 @@ "gallery": "Galeri görünümü ekle", "form": "Form görünümü ekle", "kanban": "Kanban görünümü ekle", - "map": "Add Map View", + "map": "Harita Görünümü Ekle", "calendar": "Takvim görünümü ekle" }, "tablesMetadataInSync": "Tablonun meta verileri senkronize", @@ -666,11 +666,11 @@ "deleteViewConfirmation": "Bu görünümü silmek istediğinizden emin misiniz?", "deleteTableConfirmation": "Tabloyu silmek istiyor musunuz", "showM2mTables": "M2M Tablolarını Göster", - "showM2mTablesDesc": "Many-to-many relation is supported via a junction table & is hidden by default. Enable this option to list all such tables along with existing tables.", - "showNullInCells": "Show NULL in Cells", - "showNullInCellsDesc": "Display 'NULL' tag in cells holding NULL value. This helps differentiate against cells holding EMPTY string.", - "showNullAndEmptyInFilter": "Show NULL and EMPTY in Filter", - "showNullAndEmptyInFilterDesc": "Enable 'additional' filters to differentiate fields containing NULL & Empty Strings. Default support for Blank treats both NULL & Empty strings alike.", + "showM2mTablesDesc": "Çoktan çoğa ilişki bir köprü tablosu aracılığıyla oluşturulur ve bu tablo varsayılan olarak gizlenir. Mevcut tablolarla birlikte bu köprü tablolarını da listelemek için bu seçeneği etkinleştirin.", + "showNullInCells": "Hücrelerde NULL Göster", + "showNullInCellsDesc": "NULL değerini taşıyan hücreler için 'NULL' etiketini göster. Bu BOŞ dizi değerleri ile ayırt etmenize yardımcı olur.", + "showNullAndEmptyInFilter": "Filtrelerde NULL ve EMPTY Göster", + "showNullAndEmptyInFilterDesc": "NULL ve Boş dizileri ayırt etmek için 'Ekstra' filtreleri etkinleştir. Varsayılan 'Blank' değeri NULL ve boş dizileri aynı şekilde ele alır.", "deleteKanbanStackConfirmation": "Bu yığının silinmesi `{stackToBeDeleted}` seçim seçeneğini `{groupingField}` adresinden de kaldıracaktır. Kayıtlar kategorize edilmemiş yığına taşınacaktır.", "computedFieldEditWarning": "Hesaplanan alan: içerik salt okunurdur. Yeniden yapılandırmak için sütun düzenleme menüsünü kullanın", "computedFieldDeleteWarning": "Hesaplanan alan: içerik salt okunurdur. İçerik temizlenemiyor.", @@ -698,7 +698,7 @@ "allowedSpecialCharList": "İzin verilen özel karakter listesi" }, "invalidURL": "Geçersiz URL", - "invalidEmail": "Invalid Email", + "invalidEmail": "Geçersiz E-posta", "internalError": "Bazı dahili hatalar oluştu", "templateGeneratorNotFound": "Şablon Oluşturucu bulunamıyor!", "fileUploadFailed": "Dosya yüklenemedi", @@ -726,7 +726,7 @@ "nameShouldStartWithAnAlphabetOr_": "İsim bir alfabe veya _ ile başlamalıdır", "followingCharactersAreNotAllowed": "Aşağıdaki karakterlere izin verilmez", "columnNameRequired": "Sütun adı gereklidir", - "columnNameExceedsCharacters": "The length of column name exceeds the max {value} characters", + "columnNameExceedsCharacters": "Sütun adının uzunluğu maksimum {value} karakter sınırını aşıyor", "projectNameExceeds50Characters": "Proje adı 50 karakteri aşıyor", "projectNameCannotStartWithSpace": "Proje adı boşlukla başlayamaz", "requiredField": "Zorunlu alan", @@ -759,7 +759,7 @@ }, "success": { "columnDuplicated": "Sütun başarıyla çoğaltıldı", - "rowDuplicatedWithoutSavedYet": "Row duplicated (not saved)", + "rowDuplicatedWithoutSavedYet": "Satır çoğaltıldı (kaydedilmedi)", "updatedUIACL": "Tablolar için UI ACL başarıyla güncellendi", "pluginUninstalled": "Eklenti başarıyla kaldırıldı", "pluginSettingsSaved": "Eklenti ayarları başarıyla kaydedildi", @@ -779,7 +779,7 @@ "userDeletedFromProject": "Kullanıcı projeden başarıyla silindi", "inviteEmailSent": "Davet E-postası başarıyla gönderildi", "inviteURLCopied": "Panoya kopyalanan davet URL'si", - "commentCopied": "Comment copied to clipboard", + "commentCopied": "Yorum panoya kopyalandı", "passwordResetURLCopied": "Panoya kopyalanan parola sıfırlama URL'si", "shareableURLCopied": "Paylaşılabilir temel URL panoya kopyalandı!", "embeddableHTMLCodeCopied": "Yerleştirilebilir HTML kodu kopyalandı!", From 3fdae72fe5a07437911ad2a983df798050320f76 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 1 Jun 2023 10:04:56 +0530 Subject: [PATCH 04/21] fix: missing await Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../pages/Dashboard/common/Toolbar/Filter.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts index 50b8835f11..117018bb15 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts @@ -65,7 +65,7 @@ export class ToolbarFilterPage extends BasePage { await this.rootPage.locator('.nc-filter-field-select').last().click(); if (skipWaitingResponse) { - this.rootPage + await this.rootPage .locator('div.ant-select-dropdown.nc-dropdown-toolbar-field-list') .locator(`div[label="${title}"]:visible`) .click(); @@ -88,7 +88,7 @@ export class ToolbarFilterPage extends BasePage { // first() : filter list has >, >= if (skipWaitingResponse) { - this.rootPage + await this.rootPage .locator('.nc-dropdown-filter-comp-op') .locator(`.ant-select-item:has-text("${operation}")`) .first() @@ -117,7 +117,7 @@ export class ToolbarFilterPage extends BasePage { // first() : filter list has >, >= if (skipWaitingResponse) { - this.rootPage + await this.rootPage .locator('.nc-dropdown-filter-comp-sub-op') .locator(`.ant-select-item:has-text("${subOperation}")`) .first() @@ -167,7 +167,7 @@ export class ToolbarFilterPage extends BasePage { await this.rootPage.locator(`.ant-picker-dropdown:visible`); if (skipWaitingResponse) { - this.rootPage.locator(`.ant-picker-cell-inner:has-text("${value}")`).click(); + await this.rootPage.locator(`.ant-picker-cell-inner:has-text("${value}")`).click(); } else { await this.waitForResponse({ uiAction: () => this.rootPage.locator(`.ant-picker-cell-inner:has-text("${value}")`).click(), @@ -188,7 +188,7 @@ export class ToolbarFilterPage extends BasePage { break; case UITypes.Duration: if (skipWaitingResponse) { - this.get().locator('.nc-filter-value-select').locator('input').fill(value); + await this.get().locator('.nc-filter-value-select').locator('input').fill(value); } else { await this.waitForResponse({ uiAction: () => this.get().locator('.nc-filter-value-select').locator('input').fill(value), @@ -298,4 +298,4 @@ export class ToolbarFilterPage extends BasePage { return opListText; } -} \ No newline at end of file +} From fab651371d0d8fdee3718e69289d73c4011a5b40 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 1 Jun 2023 11:18:35 +0530 Subject: [PATCH 05/21] test: grouped filters Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../pages/Dashboard/common/Toolbar/Filter.ts | 69 +++++++++++++++++++ tests/playwright/tests/db/filters.spec.ts | 49 +++++++++++++ 2 files changed, 118 insertions(+) diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts index 117018bb15..f9ed740107 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts @@ -37,6 +37,75 @@ export class ToolbarFilterPage extends BasePage { await this.get().locator(`button:has-text("Add Filter")`).first().click(); } + // can reuse code for addFilterGroup and addFilter + // support for subOperation & datatype specific filter operations not supported yet + async addFilterGroup({ + title, + operation, + _subOperation: _subOperation, + value, + _locallySaved: _locallySaved = false, + _dataType: _dataType, + _openModal: _openModal = false, + _skipWaitingResponse: _skipWaitingResponse = false, // used for undo (single request, less stable) + filterGroupIndex = 0, + filterLogicalOperator = 'AND', + }: { + title: string; + operation: string; + _subOperation?: string; // for date datatype + value?: string; + _locallySaved?: boolean; + _dataType?: string; + _openModal?: boolean; + _skipWaitingResponse?: boolean; + filterGroupIndex?: number; + filterLogicalOperator?: string; + }) { + await this.get().locator(`button:has-text("Add Filter Group")`).last().click(); + const filterDropdown = await this.get().locator('.menu-filter-dropdown').nth(filterGroupIndex); + await filterDropdown.waitFor({ state: 'visible' }); + await filterDropdown.locator(`button:has-text("Add Filter")`).first().click(); + const selectField = await filterDropdown.locator('.nc-filter-field-select').last(); + const selectOperation = await filterDropdown.locator('.nc-filter-operation-select').last(); + const selectValue = await filterDropdown.locator('.nc-filter-value-select > input').last(); + + await selectField.waitFor({ state: 'visible' }); + await selectField.click(); + const fieldDropdown = await this.rootPage + .locator('div.ant-select-dropdown.nc-dropdown-toolbar-field-list') + .last() + .locator(`div[label="${title}"]:visible`); + await fieldDropdown.waitFor({ state: 'visible' }); + await fieldDropdown.click(); + + await selectOperation.waitFor({ state: 'visible' }); + await selectOperation.click(); + const operationDropdown = await this.rootPage + .locator('div.ant-select-dropdown.nc-dropdown-filter-comp-op') + .last() + .locator(`.ant-select-item:has-text("${operation}")`); + await operationDropdown.waitFor({ state: 'visible' }); + await operationDropdown.click(); + + await selectValue.waitFor({ state: 'visible' }); + await selectValue.fill(value); + + if (filterGroupIndex) { + if (filterLogicalOperator === 'OR') { + const logicalButton = await this.rootPage.locator('div.flex.bob').nth(filterGroupIndex - 1); + await logicalButton.waitFor({ state: 'visible' }); + await logicalButton.click(); + + const logicalDropdown = await this.rootPage.locator( + 'div.ant-select-dropdown.nc-dropdown-filter-logical-op-group' + ); + await logicalDropdown.waitFor({ state: 'visible' }); + await logicalDropdown.locator(`.ant-select-item:has-text("${filterLogicalOperator}")`).click(); + } + } + } + async add({ title, operation, diff --git a/tests/playwright/tests/db/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts index 247eaa9210..528fdffd5b 100644 --- a/tests/playwright/tests/db/filters.spec.ts +++ b/tests/playwright/tests/db/filters.spec.ts @@ -1339,3 +1339,52 @@ test.describe('Filter Tests: Toggle button', () => { await dashboard.settings.toggleNullEmptyFilters(); }); }); + +test.describe('Filter Tests: Filter groups', () => { + /** + * Steps + * + * 1. Open table + * 2. Verify filter options : should not include NULL & EMPTY options + * 3. Enable `Show NULL & EMPTY in Filter` in Project Settings + * 4. Verify filter options : should include NULL & EMPTY options + * 5. Add NULL & EMPTY filters + * 6. Disable `Show NULL & EMPTY in Filter` in Project Settings : should not be allowed + * 7. Remove the NULL & EMPTY filters + * 8. Disable `Show NULL & EMPTY in Filter` in Project Settings again : should be allowed + * + */ + + test.beforeEach(async ({ page }) => { + context = await setup({ page, isEmptyProject: false }); + dashboard = new DashboardPage(page, context.project); + toolbar = dashboard.grid.toolbar; + }); + + test('Filter: Empty filters', async () => { + await dashboard.closeTab({ title: 'Team & Auth' }); + await dashboard.treeView.openTable({ title: 'Country', networkResponse: false }); + + await toolbar.clickFilter({ networkValidation: false }); + await toolbar.filter.addFilterGroup({ + title: 'Country', + operation: 'is equal', + value: 'Argentina', + }); + await toolbar.clickFilter({ networkValidation: false }); + + await toolbar.clickFilter({ networkValidation: false }); + await toolbar.filter.addFilterGroup({ + title: 'Country', + operation: 'is equal', + value: 'Indonesia', + filterGroupIndex: 1, + filterLogicalOperator: 'OR', + }); + await toolbar.clickFilter({ networkValidation: false }); + + await validateRowArray({ + rowCount: 2, + }); + }); +}); From dcc7f63c633c9a0b67070661d1990c225065cb97 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 11:41:55 +0530 Subject: [PATCH 06/21] feat: scroll to cell for making it fully visible Signed-off-by: Pranav C --- packages/nc-gui/composables/useMultiSelect/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/nc-gui/composables/useMultiSelect/index.ts b/packages/nc-gui/composables/useMultiSelect/index.ts index b5d5fb4226..10eb259a8d 100644 --- a/packages/nc-gui/composables/useMultiSelect/index.ts +++ b/packages/nc-gui/composables/useMultiSelect/index.ts @@ -208,6 +208,7 @@ export function useMultiSelect( selectedRange.startRange({ row, col }) selectedRange.endRange({ row, col }) makeActive(row, col) + scrollToActiveCell?.() isMouseDown = false } From ba282125299b6789de35814582ae3d9fd0bd728d Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 11:55:02 +0530 Subject: [PATCH 07/21] feat: scroll to new cell on enter key press Signed-off-by: Pranav C --- packages/nc-gui/components/smartsheet/Grid.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue index 134edc59d9..d0de2076d6 100644 --- a/packages/nc-gui/components/smartsheet/Grid.vue +++ b/packages/nc-gui/components/smartsheet/Grid.vue @@ -1,4 +1,5 @@ diff --git a/packages/nc-gui/components/cell/Duration.vue b/packages/nc-gui/components/cell/Duration.vue index 7b374e3b37..f8783d2aba 100644 --- a/packages/nc-gui/components/cell/Duration.vue +++ b/packages/nc-gui/components/cell/Duration.vue @@ -74,7 +74,7 @@ const submitDuration = () => { isEdited.value = false } -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/Email.vue b/packages/nc-gui/components/cell/Email.vue index 49f742ec31..45541ecfac 100644 --- a/packages/nc-gui/components/cell/Email.vue +++ b/packages/nc-gui/components/cell/Email.vue @@ -35,7 +35,7 @@ const vModel = computed({ const validEmail = computed(() => vModel.value && validateEmail(vModel.value)) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/Float.vue b/packages/nc-gui/components/cell/Float.vue index 2854ec3189..13995a58e3 100644 --- a/packages/nc-gui/components/cell/Float.vue +++ b/packages/nc-gui/components/cell/Float.vue @@ -36,7 +36,7 @@ const vModel = computed({ }, }) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/Integer.vue b/packages/nc-gui/components/cell/Integer.vue index 7e643524d0..d539600d87 100644 --- a/packages/nc-gui/components/cell/Integer.vue +++ b/packages/nc-gui/components/cell/Integer.vue @@ -36,7 +36,7 @@ const vModel = computed({ }, }) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/Percent.vue b/packages/nc-gui/components/cell/Percent.vue index 6bf2e1cdb0..574b2d64cc 100644 --- a/packages/nc-gui/components/cell/Percent.vue +++ b/packages/nc-gui/components/cell/Percent.vue @@ -27,7 +27,7 @@ const vModel = computed({ }, }) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/Text.vue b/packages/nc-gui/components/cell/Text.vue index 6c333f878a..b5ff374cad 100644 --- a/packages/nc-gui/components/cell/Text.vue +++ b/packages/nc-gui/components/cell/Text.vue @@ -23,7 +23,7 @@ const readonly = inject(ReadonlyInj, ref(false)) const vModel = useVModel(props, 'modelValue', emits) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() diff --git a/packages/nc-gui/components/cell/TextArea.vue b/packages/nc-gui/components/cell/TextArea.vue index 7407f03eed..36392bf015 100644 --- a/packages/nc-gui/components/cell/TextArea.vue +++ b/packages/nc-gui/components/cell/TextArea.vue @@ -19,7 +19,7 @@ const { showNull } = useGlobal() const vModel = useVModel(props, 'modelValue', emits, { defaultValue: '' }) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLTextAreaElement)?.focus() diff --git a/packages/nc-gui/components/cell/Url.vue b/packages/nc-gui/components/cell/Url.vue index d781d3b28c..9efa16d4cb 100644 --- a/packages/nc-gui/components/cell/Url.vue +++ b/packages/nc-gui/components/cell/Url.vue @@ -63,7 +63,7 @@ const url = computed(() => { const { cellUrlOptions } = useCellUrlConfig(url) -const isExpandedFormOpen = inject(IsExpandedFormOpenInj)! +const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() From 5c5c80d83139835ff1b32d945ed6fa4687c98350 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 14:19:26 +0530 Subject: [PATCH 10/21] fix: handle scenarios in which `dt` is not defined Signed-off-by: Pranav C --- packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/OracleUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/SnowflakeUi.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts index 905695c5d9..16eb82d90f 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts @@ -832,7 +832,7 @@ export class MssqlUi { } static getAbstractType(col): any { - switch ((col.dt || col.dt).toLowerCase()) { + switch (col.dt?.toLowerCase()) { case 'bigint': case 'smallint': case 'bit': diff --git a/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts index 0e0d56b61b..8275d76495 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts @@ -871,7 +871,7 @@ export class MysqlUi { } static getAbstractType(col): any { - switch (col.dt.toLowerCase()) { + switch (col.dt?.toLowerCase()) { case 'int': case 'smallint': case 'mediumint': diff --git a/packages/nocodb-sdk/src/lib/sqlUi/OracleUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/OracleUi.ts index 7038ffa3ad..6f1747fa8c 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/OracleUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/OracleUi.ts @@ -689,7 +689,7 @@ export class OracleUi { } static getAbstractType(col): any { - switch ((col.dt || col.dt).toLowerCase()) { + switch (col.dt?.toLowerCase()) { case 'integer': return 'integer'; case 'bfile': diff --git a/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts index ea958b8030..1a67fc44b2 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts @@ -1358,7 +1358,7 @@ export class PgUi { } static getAbstractType(col): any { - switch ((col.dt || col.dt).toLowerCase()) { + switch (col.dt?.toLowerCase()) { case 'anyenum': return 'enum'; case 'anynonarray': diff --git a/packages/nocodb-sdk/src/lib/sqlUi/SnowflakeUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/SnowflakeUi.ts index 086c4c731c..acee3ab5e4 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/SnowflakeUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/SnowflakeUi.ts @@ -572,7 +572,7 @@ export class SnowflakeUi { } static getAbstractType(col): any { - switch (col.dt.toUpperCase()) { + switch (col.dt?.toUpperCase()) { case 'NUMBER': case 'DECIMAL': case 'NUMERIC': From e1b23687c27c8b0b9edb64503edf4b0c3a1c6a87 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 12:38:07 +0530 Subject: [PATCH 11/21] feat: provide an extra offset to show the prev/next/up/bottom cell Signed-off-by: Pranav C --- .../nc-gui/components/smartsheet/Grid.vue | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue index d0de2076d6..edb98665a0 100644 --- a/packages/nc-gui/components/smartsheet/Grid.vue +++ b/packages/nc-gui/components/smartsheet/Grid.vue @@ -142,11 +142,20 @@ const getContainerScrollForElement = ( ) => { const childPos = el.getBoundingClientRect() const parentPos = container.getBoundingClientRect() + + // provide an extra offset to show the prev/next/up/bottom cell + const extraOffset = 15 + + const numColWidth = container.querySelector('thead th:nth-child(1)')?.getBoundingClientRect().width ?? 0 + const primaryColWidth = container.querySelector('thead th:nth-child(2)')?.getBoundingClientRect().width ?? 0 + + const stickyColsWidth = numColWidth + primaryColWidth + const relativePos = { top: childPos.top - parentPos.top, right: childPos.right - parentPos.right, bottom: childPos.bottom - parentPos.bottom, - left: childPos.left - parentPos.left, + left: childPos.left - parentPos.left - stickyColsWidth, } const scroll = { @@ -160,20 +169,19 @@ const getContainerScrollForElement = ( */ scroll.left = relativePos.right + (offset?.right || 0) > 0 - ? container.scrollLeft + relativePos.right + (offset?.right || 0) + ? container.scrollLeft + relativePos.right + (offset?.right || 0) + extraOffset : relativePos.left - (offset?.left || 0) < 0 - ? container.scrollLeft + relativePos.left - (offset?.left || 0) + ? container.scrollLeft + relativePos.left - (offset?.left || 0) - extraOffset : container.scrollLeft /* * If the element is below the container, scroll down (positive) * If the element is above the container, scroll up (negative) */ - scroll.top = - relativePos.bottom + (offset?.bottom || 0) > 0 - ? container.scrollTop + relativePos.bottom + (offset?.bottom || 0) + scroll.top = relativePos.bottom + (offset?.bottom || 0) > 0 + ? container.scrollTop + relativePos.bottom + (offset?.bottom || 0) + extraOffset : relativePos.top - (offset?.top || 0) < 0 - ? container.scrollTop + relativePos.top - (offset?.top || 0) + ? container.scrollTop + relativePos.top - (offset?.top || 0) - extraOffset : container.scrollTop return scroll From 03e5a995be45f22604684913268ab7cb3e80df69 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 14:57:18 +0530 Subject: [PATCH 12/21] feat: on clicking display cell scroll to the beginning Signed-off-by: Pranav C --- packages/nc-gui/components/smartsheet/Grid.vue | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue index edb98665a0..bfc8996870 100644 --- a/packages/nc-gui/components/smartsheet/Grid.vue +++ b/packages/nc-gui/components/smartsheet/Grid.vue @@ -178,7 +178,8 @@ const getContainerScrollForElement = ( * If the element is below the container, scroll down (positive) * If the element is above the container, scroll up (negative) */ - scroll.top = relativePos.bottom + (offset?.bottom || 0) > 0 + scroll.top = + relativePos.bottom + (offset?.bottom || 0) > 0 ? container.scrollTop + relativePos.bottom + (offset?.bottom || 0) + extraOffset : relativePos.top - (offset?.top || 0) < 0 ? container.scrollTop + relativePos.top - (offset?.top || 0) - extraOffset @@ -351,6 +352,12 @@ function scrollToCell(row?: number | null, col?: number | null) { const { height: headerHeight } = tableHead.value!.getBoundingClientRect() const tdScroll = getContainerScrollForElement(td, gridWrapper.value, { top: headerHeight, bottom: 9, right: 9 }) + // if first column set left to 0 since it's sticky it will be visible and calculated value will be wrong + // setting left to 0 will make it scroll to the left + if (col === 0) { + tdScroll.left = 0 + } + if (rows && row === rows.length - 2) { // if last row make 'Add New Row' visible gridWrapper.value.scrollTo({ From 6cf0de21f86e487761450e28f21d8a4287a3c059 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 19:13:13 +0530 Subject: [PATCH 13/21] fix: make `isUpdatedFromCopyNPaste` optional Signed-off-by: Pranav C --- packages/nc-gui/components/cell/DateTimePicker.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nc-gui/components/cell/DateTimePicker.vue b/packages/nc-gui/components/cell/DateTimePicker.vue index 737056ff3e..0395901bbf 100644 --- a/packages/nc-gui/components/cell/DateTimePicker.vue +++ b/packages/nc-gui/components/cell/DateTimePicker.vue @@ -18,7 +18,7 @@ import { interface Props { modelValue?: string | null isPk?: boolean - isUpdatedFromCopyNPaste: Record + isUpdatedFromCopyNPaste?: Record } const { modelValue, isPk, isUpdatedFromCopyNPaste } = defineProps() From 00979908e62258cd821701aa248c1c010bbc3f61 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 19:13:57 +0530 Subject: [PATCH 14/21] fix: remove `GeoDataOptions` from template since the component doesn't exist Signed-off-by: Pranav C --- packages/nc-gui/components/smartsheet/column/EditOrAdd.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue b/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue index 89e860e045..6e697e0cfa 100644 --- a/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue +++ b/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue @@ -188,7 +188,6 @@ useEventListener('keydown', (e: KeyboardEvent) => { - From 515c6078205a990a1fa71197720e7e72761a625d Mon Sep 17 00:00:00 2001 From: DIWAKAR Date: Thu, 1 Jun 2023 20:47:50 +0530 Subject: [PATCH 15/21] eyeSlash icon --- packages/nc-gui/components/smartsheet/Form.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nc-gui/components/smartsheet/Form.vue b/packages/nc-gui/components/smartsheet/Form.vue index 05a26b2304..68179cdf2d 100644 --- a/packages/nc-gui/components/smartsheet/Form.vue +++ b/packages/nc-gui/components/smartsheet/Form.vue @@ -599,7 +599,7 @@ watch(view, (nextView) => { > From faca1e9f68fa5d74050f4927c5400ece0797b7e0 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 1 Jun 2023 23:17:56 +0530 Subject: [PATCH 16/21] fix: access reactive variable value using `value` prop Signed-off-by: Pranav C --- packages/nc-gui/components/cell/Currency.vue | 2 +- packages/nc-gui/components/cell/Decimal.vue | 2 +- packages/nc-gui/components/cell/Duration.vue | 2 +- packages/nc-gui/components/cell/Email.vue | 2 +- packages/nc-gui/components/cell/Float.vue | 2 +- packages/nc-gui/components/cell/Integer.vue | 2 +- packages/nc-gui/components/cell/Percent.vue | 2 +- packages/nc-gui/components/cell/Text.vue | 2 +- packages/nc-gui/components/cell/TextArea.vue | 2 +- packages/nc-gui/components/cell/Url.vue | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/nc-gui/components/cell/Currency.vue b/packages/nc-gui/components/cell/Currency.vue index 04071a9630..09c605ead3 100644 --- a/packages/nc-gui/components/cell/Currency.vue +++ b/packages/nc-gui/components/cell/Currency.vue @@ -55,7 +55,7 @@ const currency = computed(() => { const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! -const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() +const focus: VNodeRef = (el) => !isExpandedFormOpen.value && (el as HTMLInputElement)?.focus() const submitCurrency = () => { if (lastSaved.value !== vModel.value) { diff --git a/packages/nc-gui/components/cell/Decimal.vue b/packages/nc-gui/components/cell/Decimal.vue index 1034b5ee1a..11392f6d08 100644 --- a/packages/nc-gui/components/cell/Decimal.vue +++ b/packages/nc-gui/components/cell/Decimal.vue @@ -38,7 +38,7 @@ const vModel = computed({ const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))! -const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus() +const focus: VNodeRef = (el) => !isExpandedFormOpen.value && (el as HTMLInputElement)?.focus()