diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts
index e0470b9aa..fb914c0c2 100644
--- a/packages/web/src/commands/stdCommands.ts
+++ b/packages/web/src/commands/stdCommands.ts
@@ -70,7 +70,7 @@ registerCommand({
category: 'Theme',
name: 'Change',
toolbarName: 'Change theme',
- onClick: () => showModal(SettingsModal, { selectedTab: 2 }),
+ onClick: () => showModal(SettingsModal, { selectedTab: 'theme' }),
// getSubCommands: () => get(extensions).themes.map(themeCommand),
});
@@ -692,8 +692,8 @@ if (isProApp()) {
icon: 'icon compare',
testEnabled: () =>
getCurrentDatabase() != null &&
- findEngineDriver(getCurrentDatabase()?.connection, getExtensions())?.databaseEngineTypes?.includes('sql')
- && hasPermission(`dbops/export`),
+ findEngineDriver(getCurrentDatabase()?.connection, getExtensions())?.databaseEngineTypes?.includes('sql') &&
+ hasPermission(`dbops/export`),
onClick: () => {
openNewTab(
{
@@ -754,6 +754,7 @@ if (hasPermission('settings/change')) {
props: {},
});
},
+ testEnabled: () => hasPermission('settings/change'),
});
registerCommand({
@@ -762,6 +763,7 @@ if (hasPermission('settings/change')) {
name: 'Change',
toolbarName: 'Settings',
onClick: () => showModal(SettingsModal),
+ testEnabled: () => hasPermission('settings/change'),
});
}
diff --git a/packages/web/src/elements/TabControl.svelte b/packages/web/src/elements/TabControl.svelte
index 87cc6dff6..146558cd3 100644
--- a/packages/web/src/elements/TabControl.svelte
+++ b/packages/web/src/elements/TabControl.svelte
@@ -8,10 +8,11 @@
component?: any;
props?: any;
testid?: string;
+ identifier?: string;
}
export let tabs: TabDef[];
- export let value = 0;
+ export let value: string | number = 0;
export let menu = null;
export let isInline = false;
export let containerMaxWidth = undefined;
@@ -36,10 +37,10 @@
{#each _.compact(tabs) as tab, index}
{
- value = index;
- onUserChange?.(index);
+ value = tab.identifier ?? index;
+ onUserChange?.(tab.identifier ?? index);
}}
data-testid={tab.testid}
>
@@ -60,14 +61,14 @@
class:flexColContainer
class:maxHeight100
class:isInline
- class:tabVisible={index == value}
+ class:tabVisible={(tab.identifier ?? index) == value}
style:max-width={containerMaxWidth}
>
{#if tab.slot != null}
{#if tab.slot == 0}
diff --git a/packages/web/src/settings/SettingsModal.svelte b/packages/web/src/settings/SettingsModal.svelte
index 1ba6b85c0..a6fb08844 100644
--- a/packages/web/src/settings/SettingsModal.svelte
+++ b/packages/web/src/settings/SettingsModal.svelte
@@ -41,15 +41,14 @@
import { derived } from 'svelte/store';
import { safeFormatDate } from 'dbgate-tools';
import FormDefaultActionField from './FormDefaultActionField.svelte';
- import { _t, getSelectedLanguage } from '../translations';
- import { internalRedirectTo } from '../clientAuth';
- import ConfirmModal from '../modals/ConfirmModal.svelte';
+ import { _t } from '../translations';
+ import hasPermission from '../utility/hasPermission';
const electron = getElectron();
let restartWarning = false;
let licenseKeyCheckResult = null;
- export let selectedTab = 0;
+ export let selectedTab = 'general';
const sqlPreview = `-- example query
SELECT
@@ -100,14 +99,14 @@ ORDER BY
bind:value={selectedTab}
isInline
tabs={[
- { label: 'General', slot: 1 },
- isProApp() && electron && { label: 'License', slot: 7 },
- { label: 'Connection', slot: 2 },
- { label: 'Themes', slot: 3 },
- { label: 'Default Actions', slot: 4 },
- { label: 'Behaviour', slot: 5 },
- { label: 'External tools', slot: 8 },
- { label: 'Other', slot: 6 },
+ hasPermission('settings/change') && { identifier: 'general', label: 'General', slot: 1 },
+ isProApp() && electron && { identifier: 'license', label: 'License', slot: 7 },
+ hasPermission('settings/change') && { identifier: 'connection', label: 'Connection', slot: 2 },
+ { identifier: 'theme', label: 'Themes', slot: 3 },
+ hasPermission('settings/change') && { identifier: 'default-actions', label: 'Default Actions', slot: 4 },
+ hasPermission('settings/change') && { identifier: 'behaviour', label: 'Behaviour', slot: 5 },
+ hasPermission('settings/change') && { identifier: 'external-tools', label: 'External tools', slot: 8 },
+ hasPermission('settings/change') && { identifier: 'other', label: 'Other', slot: 6 },
]}
>
diff --git a/packages/web/src/widgets/WidgetIconPanel.svelte b/packages/web/src/widgets/WidgetIconPanel.svelte
index 6ed7b60f4..1ffc8ecfd 100644
--- a/packages/web/src/widgets/WidgetIconPanel.svelte
+++ b/packages/web/src/widgets/WidgetIconPanel.svelte
@@ -107,9 +107,9 @@
const left = rect.right;
const top = rect.bottom;
const items = [
- { command: 'settings.show' },
+ hasPermission('settings/change') && { command: 'settings.show' },
{ command: 'theme.changeTheme' },
- { command: 'settings.commands' },
+ hasPermission('settings/change') && { command: 'settings.commands' },
hasPermission('widgets/app') && {
text: 'View applications',
onClick: () => {