diff --git a/packages/web/package.json b/packages/web/package.json index 30d679055..7cf6a3472 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -23,6 +23,7 @@ "react-scripts": "3.3.0", "resize-observer-polyfill": "^1.5.1", "socket.io-client": "^2.3.0", + "sql-formatter": "^2.3.3", "styled-components": "^4.4.1", "uuid": "^3.4.0" }, diff --git a/packages/web/src/query/QueryToolbar.js b/packages/web/src/query/QueryToolbar.js index 80bc23996..0aee8e781 100644 --- a/packages/web/src/query/QueryToolbar.js +++ b/packages/web/src/query/QueryToolbar.js @@ -1,7 +1,7 @@ import React from 'react'; import ToolbarButton from '../widgets/ToolbarButton'; -export default function QueryToolbar({ execute, cancel, isDatabaseDefined, busy, save }) { +export default function QueryToolbar({ execute, cancel, isDatabaseDefined, busy, save, format }) { return ( <> @@ -13,6 +13,9 @@ export default function QueryToolbar({ execute, cancel, isDatabaseDefined, busy, Save + + Format + ); } diff --git a/packages/web/src/tabs/QueryTab.js b/packages/web/src/tabs/QueryTab.js index cbc11f28b..0cc776e51 100644 --- a/packages/web/src/tabs/QueryTab.js +++ b/packages/web/src/tabs/QueryTab.js @@ -15,6 +15,7 @@ import { changeTab } from '../utility/common'; import useSocket from '../utility/SocketProvider'; import SaveSqlFileModal from '../modals/SaveSqlFileModal'; import useModalState from '../modals/useModalState'; +import sqlFormatter from 'sql-formatter'; export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPortalRef, initialScript, storageKey }) { const localStorageKey = storageKey || `sql_${tabid}`; @@ -121,6 +122,11 @@ export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPo } }; + const handleFormatCode = () => { + editorRef.current.editor.setValue(sqlFormatter.format(editorRef.current.editor.getValue())); + editorRef.current.editor.clearSelection(); + }; + return ( <> @@ -151,6 +157,7 @@ export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPo execute={handleExecute} busy={busy} cancel={handleCancel} + format={handleFormatCode} save={saveSqlFileModalState.open} />, toolbarPortalRef.current diff --git a/yarn.lock b/yarn.lock index b1279a03b..2807db942 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7115,7 +7115,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5: +"lodash@>=3.5 <5", lodash@^4.16.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -10584,6 +10584,13 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sql-formatter@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sql-formatter/-/sql-formatter-2.3.3.tgz#910ef484fbb988a5e510bea4161157e3b80b2f62" + integrity sha512-m6pqVXwsm9GkCHC/+gdPvNowI7PNoVTT6OZMWKwXJoP2MvfntfhcfyliIf4/QX6t+DirSJ6XDSiSS70YvZ87Lw== + dependencies: + lodash "^4.16.0" + sqlstring@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"