Merge pull request #122 from toriphes/master

feat(UI): ctrl|cmd+t, ctrl|cmd+w shortcut to open/close workspace tabs
This commit is contained in:
Fabio Di Stasio 2021-10-16 18:50:51 +02:00 committed by GitHub
commit adf407c1ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 77 additions and 23 deletions

View File

@ -41,18 +41,18 @@ async function createMainWindow () {
remoteMain.enable(window.webContents);
try {
if (isDevelopment) { //
if (isDevelopment) {
//
await window.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`);
// const { default: installExtension, VUEJS3_DEVTOOLS } = require('electron-devtools-installer');
// const oldDevToolsID = session.defaultSession.getAllExtensions().find(ext => ext.name === 'Vue.js devtools').id;
// session.defaultSession.removeExtension(oldDevToolsID);
// const toolName = await installExtension(VUEJS3_DEVTOOLS);
// console.log(toolName, 'installed');
// const oldDevToolsID = session.defaultSession.getAllExtensions().find(ext => ext.name === 'Vue.js devtools').id;
// session.defaultSession.removeExtension(oldDevToolsID);
// const toolName = await installExtension(VUEJS3_DEVTOOLS);
// console.log(toolName, 'installed');
}
else
await window.loadURL(new URL(`file:///${path.join(__dirname, 'index.html')}`).href);
else await window.loadURL(new URL(`file:///${path.join(__dirname, 'index.html')}`).href);
}
catch (err) {
console.log(err);
@ -70,10 +70,9 @@ async function createMainWindow () {
});
return window;
};
}
if (!gotTheLock)
app.quit();
if (!gotTheLock) app.quit();
else {
require('@electron/remote/main').initialize();
@ -83,33 +82,53 @@ else {
// quit application when all windows are closed
app.on('window-all-closed', () => {
// on macOS it is common for applications to stay open until the user explicitly quits
if (process.platform !== 'darwin')
app.quit();
if (process.platform !== 'darwin') app.quit();
});
app.on('activate', async () => {
// on macOS it is common to re-create a window even after all windows have been closed
if (mainWindow === null) {
mainWindow = await createMainWindow();
if (isDevelopment)
mainWindow.webContents.openDevTools();
if (isDevelopment) mainWindow.webContents.openDevTools();
}
});
// create main BrowserWindow when electron is ready
app.on('ready', async () => {
mainWindow = await createMainWindow();
Menu.setApplicationMenu(null);
createAppMenu();
if (isDevelopment)
mainWindow.webContents.openDevTools();
if (isDevelopment) mainWindow.webContents.openDevTools();
process.on('uncaughtException', error => {
process.on('uncaughtException', (error) => {
mainWindow.webContents.send('unhandled-exception', error);
});
process.on('unhandledRejection', error => {
process.on('unhandledRejection', (error) => {
mainWindow.webContents.send('unhandled-exception', error);
});
});
}
function createAppMenu () {
let menu = null;
if (process.platform === 'darwin') {
menu = Menu.buildFromTemplate([
{
label: app.name,
submenu: [
{
role: 'about'
},
{ type: 'separator' },
{
role: 'quit'
}
]
}
]);
}
Menu.setApplicationMenu(menu);
}

View File

@ -586,11 +586,15 @@ export default {
}
},
async created () {
window.addEventListener('keydown', this.onKey);
await this.addWorkspace(this.connection.uid);
const isInitiated = await Connection.checkConnection(this.connection.uid);
if (isInitiated)
this.connectWorkspace(this.connection);
},
beforeDestroy () {
window.removeEventListener('keydown', this.onKey);
},
methods: {
...mapActions({
addWorkspace: 'workspaces/addWorkspace',
@ -604,6 +608,25 @@ export default {
addQueryTab () {
this.newTab({ uid: this.connection.uid, type: 'query' });
},
getSelectedTab () {
return this.workspace.tabs.find(tab => tab.uid === this.selectedTab);
},
onKey (e) {
e.stopPropagation();
if (!this.isSelected)
return;
if ((e.ctrlKey || e.metaKey) && e.keyCode === 84 && !e.altKey) { // CTRL|Command + t
this.addQueryTab();
}
if ((e.ctrlKey || e.metaKey) && e.keyCode === 87 && !e.altKey) { // CTRL|Command + w
const currentTab = this.getSelectedTab();
if (currentTab)
this.closeTab(currentTab);
}
},
openAsPermanentTab (tab) {
const permanentTabs = {
table: 'data',

View File

@ -4,7 +4,7 @@
class="workspace-query-tab column col-12 columns col-gapless no-outline p-0"
tabindex="0"
@keydown.116="runQuery(query)"
@keydown.ctrl.87="clear"
@keydown.ctrl.alt.87="clear"
@keydown.ctrl.66="beautify"
@keydown.ctrl.71="openHistoryModal"
>

View File

@ -14,6 +14,12 @@
<div class="mb-4">
{{ $t('word.history') }}
</div>
<div class="mb-4">
{{ $t('message.openNewTab') }}
</div>
<div class="mb-4">
{{ $t('message.closeTab') }}
</div>
</div>
<div class="column col-16">
<div class="mb-4">
@ -23,11 +29,17 @@
<code>CTRL</code> + <code>B</code>
</div>
<div class="mb-4">
<code>CTRL</code> + <code>W</code>
<code>CTRL</code> + <code>ALT</code> + <code>W</code>
</div>
<div class="mb-4">
<code>CTRL</code> + <code>G</code>
</div>
<div class="mb-4">
<code>CTRL</code> + <code>T</code>
</div>
<div class="mb-4">
<code>CTRL</code> + <code>W</code>
</div>
</div>
</div>
</div>

View File

@ -451,7 +451,6 @@ export default {
this.selectedRows = [row];
},
selectAllRows () {
console.log('select all');
this.selectedRows = this.localResults.reduce((acc, curr) => {
acc.push(curr._id);
return acc;

View File

@ -244,7 +244,8 @@ module.exports = {
newTriggerFunction: 'New trigger function',
thereIsNoQueriesYet: 'There is no queries yet',
searchForQueries: 'Search for queries',
killProcess: 'Kill process'
killProcess: 'Kill process',
closeTab: 'Close tab'
},
faker: {
address: 'Address',