From 7a0f65ab52d4529c5a778d74b44ac5f57f0b767d Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 22 Nov 2021 20:22:14 +0530 Subject: [PATCH] fix: bug fix and refactoring re #755 , #747 , #732 , #767 , #739 Signed-off-by: Pranav C --- packages/nc-cli/package.json | 2 +- packages/nc-cli/src/lib/mgr/NewMgr.ts | 6 +- packages/nc-cli/src/lib/util/Util.ts | 4 + packages/nc-cli/webpack.config.js | 7 +- .../nc-gui/components/ProjectTreeView.vue | 5 +- .../nc-gui/components/auth/userManagement.vue | 39 +++++--- .../nc-gui/components/import/excelImport.vue | 8 +- .../spreadsheet/components/editColumn.vue | 5 +- .../components/editVirtualColumn.vue | 11 ++- .../project/spreadsheet/components/extras.vue | 44 ++++----- .../project/spreadsheet/rowsXcDataTable.vue | 40 ++++++++- packages/nc-gui/components/project/table.vue | 3 +- packages/nc-gui/components/projectTabs.vue | 8 +- .../createProjectFromTemplateBtn.vue | 9 +- .../nc-gui/components/templates/editor.vue | 22 +++-- .../components/utils/dlgTableCreate.vue | 13 ++- .../components/utils/dlgTextSubmitCancel.vue | 5 +- packages/nc-gui/helpers/index.js | 34 +++++++ packages/nc-gui/helpers/rightClickOptions.js | 18 ++-- packages/nc-gui/layouts/default.vue | 13 --- packages/nc-gui/pages/projects/index.vue | 4 +- .../user/authentication/signup/_token.vue | 20 ++--- .../user/authentication/signup/index.vue | 29 ++---- packages/nc-gui/store/project.js | 1 + packages/nc-gui/store/tabs.js | 21 ++++- .../lib/dataMapper/lib/sql/BaseModelSql.ts | 4 +- .../nocodb/src/lib/noco/NcProjectBuilder.ts | 1 + .../nocodb/src/lib/noco/meta/NcMetaIOImpl.ts | 89 +++++++++++-------- .../nocodb/src/lib/noco/meta/NcMetaMgr.ts | 48 ++++++++-- .../nocodb/src/lib/noco/rest/RestAuthCtrl.ts | 26 ++++-- .../src/lib/noco/rest/RestAuthCtrlEE.ts | 2 + packages/nocodb/src/lib/sqlMgr/SqlMgr.ts | 2 + 32 files changed, 359 insertions(+), 184 deletions(-) diff --git a/packages/nc-cli/package.json b/packages/nc-cli/package.json index c894e77b08..73217f665e 100644 --- a/packages/nc-cli/package.json +++ b/packages/nc-cli/package.json @@ -1,6 +1,6 @@ { "name": "create-nocodb-app", - "version": "0.1.21", + "version": "0.1.22", "description": "nc-cli", "main": "dist/bundle.js", "module": "dist/bundle.js", diff --git a/packages/nc-cli/src/lib/mgr/NewMgr.ts b/packages/nc-cli/src/lib/mgr/NewMgr.ts index db8216ce64..c09d7415da 100644 --- a/packages/nc-cli/src/lib/mgr/NewMgr.ts +++ b/packages/nc-cli/src/lib/mgr/NewMgr.ts @@ -231,7 +231,7 @@ class NewMgr { args.folder = path.join(args.folder, args._[1]); mkdirp.sync(args.folder); process.chdir(args.folder); - await Util.runCmd(`cd ${args.folder}`); + await Util.runCmd(`cd ${Util.escapeShellArg(args.folder)}`); await promisify(download)('direct:https://github.com/nocodb/nocodb-seed/archive/refs/heads/main.zip', args.folder); if (answers.type !== 'sqlite3') { @@ -239,7 +239,7 @@ class NewMgr { } if (os.type() === 'Windows_NT') { - console.log(boxen(`# Project created successfully\n\n# Please run the following commands\n\n${('cd ' + args.folder + '\nnpm install \nnpm start\n').green.bold}`, { + console.log(boxen(`# Project created successfully\n\n# Please run the following commands\n\n${('cd ' + Util.escapeShellArg(args.folder) + '\nnpm install \nnpm start\n').green.bold}`, { borderColor: 'green', borderStyle: 'round', margin: 1, @@ -490,7 +490,7 @@ class NewMgr { args.folder = path.join(args.folder, args._[1]); mkdirp.sync(args.folder); process.chdir(args.folder); - await Util.runCmd(`cd ${args.folder}`); + await Util.runCmd(`cd ${Util.escapeShellArg(args.folder)}`); await promisify(download)('gitlab:xc-public/test10', args.folder); const config = { diff --git a/packages/nc-cli/src/lib/util/Util.ts b/packages/nc-cli/src/lib/util/Util.ts index 69087ff94e..825abcb4b5 100644 --- a/packages/nc-cli/src/lib/util/Util.ts +++ b/packages/nc-cli/src/lib/util/Util.ts @@ -889,6 +889,10 @@ ${'VARIATIONS :'.bold} } } + public static escapeShellArg(cmd) { + return '"' + cmd.replace(/(["'$`\\])/g, '\\$1') + '"'; + }; + public async play(sound) { switch (sound) { diff --git a/packages/nc-cli/webpack.config.js b/packages/nc-cli/webpack.config.js index 948913a7c0..e8c78a7a87 100644 --- a/packages/nc-cli/webpack.config.js +++ b/packages/nc-cli/webpack.config.js @@ -3,7 +3,7 @@ const nodeExternals = require('webpack-node-externals'); // // const TerserPlugin = require('terser-webpack-plugin'); const webpack = require('webpack'); -const JavaScriptObfuscator = require('webpack-obfuscator'); +// const JavaScriptObfuscator = require('webpack-obfuscator'); const path = require('path'); module.exports = { entry: './src/index.ts', @@ -43,11 +43,6 @@ module.exports = { // }, plugins: [ - new JavaScriptObfuscator({ - rotateStringArray: true, - splitStrings: true, - splitStringsChunkLength: 6 - }, []), new webpack.BannerPlugin({banner: "#! /usr/bin/env node", raw: true}), // new CopyPlugin({ diff --git a/packages/nc-gui/components/ProjectTreeView.vue b/packages/nc-gui/components/ProjectTreeView.vue index 14189ba654..8c7a5acf76 100644 --- a/packages/nc-gui/components/ProjectTreeView.vue +++ b/packages/nc-gui/components/ProjectTreeView.vue @@ -599,6 +599,7 @@ ({ + validateTableName, roleIcon: { owner: 'mdi-account-star', creator: 'mdi-account-hard-hat', @@ -1299,7 +1302,7 @@ export default { env: this.menuItem._nodes.env, dbAlias: this.menuItem._nodes.dbAlias, tn: this.menuItem._nodes.tn, - _tn:_tn, + _tn: _tn, dbConnection: this.menuItem._nodes.dbConnection, type: 'table', diff --git a/packages/nc-gui/components/auth/userManagement.vue b/packages/nc-gui/components/auth/userManagement.vue index 6d1da0abb0..14429f2304 100644 --- a/packages/nc-gui/components/auth/userManagement.vue +++ b/packages/nc-gui/components/auth/userManagement.vue @@ -120,12 +120,11 @@ - {{ role }} + {{ getRole(item.roles) }} @@ -411,7 +410,6 @@ hide-details="auto" :items="roles" label="Select User roles" - multiple dense deletable-chips @change="edited = true" @@ -421,6 +419,14 @@ {{ item }} + @@ -490,10 +496,13 @@ export default { return !invalidEmails.length || `"${invalidEmails.join(', ')}" - invalid email` } ], - userList: [] + userList: [], + roleDescriptions: {} }), computed: { - + roleNames() { + return this.roles.map(r => r.title) + }, inviteUrl() { return this.invite_token ? `${location.origin}${location.pathname}#/user/authentication/signup/${this.invite_token.invite_token}` : null }, @@ -506,11 +515,11 @@ export default { }, selectedRoles: { get() { - return this.selectedUser && this.selectedUser.roles ? this.selectedUser.roles.split(',') : [] + return (this.selectedUser && this.selectedUser.roles ? this.selectedUser.roles.split(',') : []).sort((a, b) => this.roleNames.indexOf(a) - this.roleNames.indexOf(a))[0] }, set(roles) { if (this.selectedUser) { - this.selectedUser.roles = roles.filter(Boolean).join(',') + this.selectedUser.roles = roles // .filter(Boolean).join(',') } } }, @@ -524,9 +533,6 @@ export default { } }, watch: { - userEditDialog(v) { - if (!v) { this.validate = false } - }, options: { async handler() { await this.loadUsers() @@ -534,6 +540,7 @@ export default { deep: true }, userEditDialog(v) { + // if (!v) { this.validate = false } if (v && (this.selectedUser && !this.selectedUser.id)) { this.$nextTick(() => { setTimeout(() => { @@ -552,6 +559,9 @@ export default { this.$eventBus.$off('show-add-user', this.addUser) }, methods: { + getRole(roles) { + return (roles ? roles.split(',') : []).sort((a, b) => this.roleNames.indexOf(a) - this.roleNames.indexOf(a))[0] + }, simpleAnim() { const count = 30 const defaults = { @@ -651,7 +661,10 @@ export default { params: { project_id: this.$route.params.project_id } - })).data.map(role => role.title).filter(role => role !== 'guest') + })).data.map((role) => { + this.roleDescriptions[role.title] = role.description + return role.title + }).filter(role => role !== 'guest') } catch (e) { console.log(e) } diff --git a/packages/nc-gui/components/import/excelImport.vue b/packages/nc-gui/components/import/excelImport.vue index b57a2df2d7..487cd73d7d 100644 --- a/packages/nc-gui/components/import/excelImport.vue +++ b/packages/nc-gui/components/import/excelImport.vue @@ -128,15 +128,17 @@