option to skip table save confirmation #329

This commit is contained in:
Jan Prochazka
2022-08-07 11:21:08 +02:00
parent 04c37c2b4f
commit f3a7e3af74
7 changed files with 109 additions and 26 deletions

View File

@@ -105,19 +105,13 @@
</script>
<script lang="ts">
import { changeSetToSql, createChangeSet } from 'dbgate-datalib';
import { parseFilter } from 'dbgate-filterparser';
import { scriptToSql } from 'dbgate-sqltree';
import _ from 'lodash';
import { registerQuickExportHandler } from '../buttons/ToolStripExportButton.svelte';
import registerCommand from '../commands/registerCommand';
import ErrorInfo from '../elements/ErrorInfo.svelte';
import { extractShellConnection } from '../impexp/createImpExpScript';
import ConfirmNoSqlModal from '../modals/ConfirmNoSqlModal.svelte';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
import ImportExportModal from '../modals/ImportExportModal.svelte';
import { showModal } from '../modals/modalTools';
import { extensions } from '../stores';
import { apiCall } from '../utility/api';
import { registerMenu } from '../utility/contextMenu';

View File

@@ -0,0 +1,36 @@
<script lang="ts">
import { getFormContext } from './FormProviderCore.svelte';
import { createEventDispatcher } from 'svelte';
export let label;
export let name;
export let disabled = false;
export let templateProps = {};
export let checked: boolean;
let refInput;
const { template, setFieldValue, values } = getFormContext();
const dispatch = createEventDispatcher();
function handleChange() {
dispatch('change', refInput.checked);
}
</script>
<svelte:component
this={template}
type="checkbox"
{label}
{disabled}
{...templateProps}
labelProps={disabled
? { disabled: true }
: {
onClick: () => {
dispatch('change', !refInput.checked);
},
}}
>
<input bind:this={refInput} {checked} type="checkbox" {...$$restProps} on:change={handleChange} />
</svelte:component>

View File

@@ -2,15 +2,19 @@
import FormStyledButton from '../buttons/FormStyledButton.svelte';
import FormProvider from '../forms/FormProvider.svelte';
import FormSubmit from '../forms/FormSubmit.svelte';
import JSONTree from '../jsontree/JSONTree.svelte';
import TemplatedCheckboxField from '../forms/TemplatedCheckboxField.svelte';
import AceEditor from '../query/AceEditor.svelte';
import newQuery from '../query/newQuery';
import newQuery from '../query/newQuery';
import { apiCall } from '../utility/api';
import ModalBase from './ModalBase.svelte';
import { closeCurrentModal } from './modalTools';
export let script;
export let onConfirm;
export let skipConfirmSettingKey = null;
let dontAskAgain;
</script>
<FormProvider>
@@ -21,6 +25,20 @@ import newQuery from '../query/newQuery';
<AceEditor mode="javascript" readOnly value={script} />
</div>
{#if skipConfirmSettingKey}
<div class="mt-2">
<TemplatedCheckboxField
label="Don't ask again"
templateProps={{ noMargin: true }}
checked={dontAskAgain}
on:change={e => {
dontAskAgain = e.detail;
apiCall('config/update-settings', { [skipConfirmSettingKey]: e.detail });
}}
/>
</div>
{/if}
<div slot="footer">
<FormSubmit
value="OK"

View File

@@ -17,12 +17,13 @@
</script>
<script>
import _, { startsWith } from 'lodash';
import _ from 'lodash';
import { writable } from 'svelte/store';
import FormStyledButton from '../buttons/FormStyledButton.svelte';
import FormCheckboxField from '../forms/FormCheckboxField.svelte';
import FormProviderCore from '../forms/FormProviderCore.svelte';
import FormSubmit from '../forms/FormSubmit.svelte';
import TemplatedCheckboxField from '../forms/TemplatedCheckboxField.svelte';
import FontIcon from '../icons/FontIcon.svelte';
import newQuery from '../query/newQuery';
import SqlEditor from '../query/SqlEditor.svelte';
@@ -38,6 +39,9 @@
export let engine;
export let recreates;
export let deleteCascadesScripts;
export let skipConfirmSettingKey = null;
let dontAskAgain;
$: isRecreated = _.sum(_.values(recreates || {})) > 0;
const values = writable({});
@@ -122,6 +126,20 @@
</div>
{/if}
{#if skipConfirmSettingKey}
<div class="mt-2">
<TemplatedCheckboxField
label="Don't ask again"
templateProps={{ noMargin: true }}
checked={dontAskAgain}
on:change={e => {
dontAskAgain = e.detail;
apiCall('config/update-settings', { [skipConfirmSettingKey]: e.detail });
}}
/>
</div>
{/if}
<div slot="footer">
<FormSubmit
value="OK"

View File

@@ -60,7 +60,8 @@ ORDER BY
tabs={[
{ label: 'General', slot: 1 },
{ label: 'Themes', slot: 2 },
{ label: 'Actions', slot: 3 },
{ label: 'Default Actions', slot: 3 },
{ label: 'Confirmations', slot: 4 },
]}
>
<svelte:fragment slot="1">
@@ -224,6 +225,15 @@ ORDER BY
]}
/>
</svelte:fragment>
<svelte:fragment slot="4">
<div class="heading">Confirmations</div>
<FormCheckboxField name="skipConfirm.tableDataSave" label="Skip confirmation when saving table data (SQL)" />
<FormCheckboxField
name="skipConfirm.collectionDataSave"
label="Skip confirmation when saving collection data (NoSQL)"
/>
</svelte:fragment>
</TabControl>
</FormValues>

View File

@@ -25,8 +25,6 @@
import {
createChangeSet,
createGridCache,
createGridConfig,
TableFormViewDisplay,
CollectionGridDisplay,
changeSetContainsChanges,
runMacroOnChangeSet,
@@ -45,8 +43,6 @@
import ConfirmNoSqlModal from '../modals/ConfirmNoSqlModal.svelte';
import registerCommand from '../commands/registerCommand';
import { registerMenu } from '../utility/contextMenu';
import EditJsonModal from '../modals/EditJsonModal.svelte';
import ChangeSetGrider from '../datagrid/ChangeSetGrider';
import { setContext } from 'svelte';
import _ from 'lodash';
import { apiCall } from '../utility/api';
@@ -54,6 +50,7 @@
import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte';
import { getBoolSettingsValue } from '../settings/settingsTools';
export let tabid;
export let conid;
@@ -119,11 +116,16 @@
const driver = findEngineDriver($connection, $extensions);
const script = driver.getCollectionUpdateScript ? driver.getCollectionUpdateScript(json) : null;
if (script) {
showModal(ConfirmNoSqlModal, {
script,
onConfirm: () => handleConfirmChange(json),
engine: display.engine,
});
if (getBoolSettingsValue('skipConfirm.collectionDataSave', false)) {
handleConfirmChange(json);
} else {
showModal(ConfirmNoSqlModal, {
script,
onConfirm: () => handleConfirmChange(json),
engine: display.engine,
skipConfirmSettingKey: 'skipConfirm.collectionDataSave',
});
}
} else {
handleConfirmChange(json);
}

View File

@@ -98,7 +98,7 @@
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte';
import ToolStripCommandSplitButton from '../buttons/ToolStripCommandSplitButton.svelte';
import { getIntSettingsValue } from '../settings/settingsTools';
import { getBoolSettingsValue, getIntSettingsValue } from '../settings/settingsTools';
export let tabid;
export let conid;
@@ -142,12 +142,17 @@
script: scriptToSql(driver, commands),
}));
// console.log('deleteCascadesScripts', deleteCascadesScripts);
showModal(ConfirmSqlModal, {
sql,
onConfirm: sqlOverride => handleConfirmSql(sqlOverride || sql),
engine: driver.engine,
deleteCascadesScripts,
});
if (getBoolSettingsValue('skipConfirm.tableDataSave', false) && !deleteCascadesScripts?.length) {
handleConfirmSql(sql);
} else {
showModal(ConfirmSqlModal, {
sql,
onConfirm: sqlOverride => handleConfirmSql(sqlOverride || sql),
engine: driver.engine,
deleteCascadesScripts,
skipConfirmSettingKey: deleteCascadesScripts?.length ? null : 'skipConfirm.tableDataSave',
});
}
}
export function canSave() {