delete cascade

This commit is contained in:
Jan Prochazka
2021-09-28 19:17:38 +02:00
parent 571be4b3f9
commit 2ef81942db
3 changed files with 74 additions and 59 deletions

View File

@@ -45,6 +45,7 @@ function processDependencies(
conditionType: 'exists', conditionType: 'exists',
subQuery: { subQuery: {
commandType: 'select', commandType: 'select',
selectAll: true,
from: { from: {
name: { name: {
pureName: fk.pureName, pureName: fk.pureName,

View File

@@ -1,11 +1,10 @@
<script> <script>
import { keys } from 'localforage'; import _, { startsWith } from 'lodash';
import _, { isEmpty } from 'lodash'; import { writable } from 'svelte/store';
import FormStyledButton from '../elements/FormStyledButton.svelte'; import FormStyledButton from '../elements/FormStyledButton.svelte';
import FormCheckboxField from '../forms/FormCheckboxField.svelte'; import FormCheckboxField from '../forms/FormCheckboxField.svelte';
import FormProvider from '../forms/FormProvider.svelte'; import FormProviderCore from '../forms/FormProviderCore.svelte';
import FormSubmit from '../forms/FormSubmit.svelte'; import FormSubmit from '../forms/FormSubmit.svelte';
import FormValues from '../forms/FormValues.svelte';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import SqlEditor from '../query/SqlEditor.svelte'; import SqlEditor from '../query/SqlEditor.svelte';
@@ -19,29 +18,28 @@
export let deleteCascadesScripts; export let deleteCascadesScripts;
$: isRecreated = _.sum(_.values(recreates || {})) > 0; $: isRecreated = _.sum(_.values(recreates || {})) > 0;
const values = writable({});
// $: console.log('recreates', recreates); // $: console.log('recreates', recreates);
</script> </script>
<FormProvider> <FormProviderCore {values}>
<ModalBase {...$$restProps}> <ModalBase {...$$restProps}>
<div slot="header">Save changes</div> <div slot="header">Save changes</div>
<div class="editor"> <div class="editor">
<FormValues let:values>
<SqlEditor <SqlEditor
{engine} {engine}
value={values.deleteReferencesCascade value={$values.deleteReferencesCascade
? [ ? [
...deleteCascadesScripts ...deleteCascadesScripts
.filter(({ script, title }) => values[`deleteReferences_${title}`] !== false) .filter(({ script, title }) => $values[`deleteReferencesFor_${title}`] !== false)
.map(({ script, title }) => script), .map(({ script, title }) => script),
sql, sql,
].join('\n') ].join('\n')
: sql} : sql}
readOnly readOnly
/> />
</FormValues>
</div> </div>
{#if !_.isEmpty(deleteCascadesScripts)} {#if !_.isEmpty(deleteCascadesScripts)}
@@ -54,25 +52,39 @@
</div> </div>
{/if} {/if}
<FormValues let:values> {#if $values.deleteReferencesCascade}
{#if values.deleteReferencesCascade}
<!-- <div class="form-margin flex">
</div> -->
<div class="form-margin flex"> <div class="form-margin flex">
<FormStyledButton
value="Check all"
on:click={() => {
$values = _.omitBy($values, (v, k) => k.startsWith('deleteReferencesFor_'));
}}
/>
<FormStyledButton
value="Uncheck all"
on:click={() => {
const newValues = { ...$values };
for (const item of deleteCascadesScripts) {
newValues[`deleteReferencesFor_${item.title}`] = false;
}
$values = newValues;
}}
/>
</div>
<div class="form-margin flex flex-wrap">
{#each _.sortBy(deleteCascadesScripts, 'title') as deleteTable} {#each _.sortBy(deleteCascadesScripts, 'title') as deleteTable}
<div class="mr-1"> <div class="mr-1 nowrap">
<FormCheckboxField <FormCheckboxField
defaultValue={true} defaultValue={true}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
label={deleteTable.title} label={deleteTable.title}
name={`deleteReferences_${deleteTable.title}`} name={`deleteReferencesFor_${deleteTable.title}`}
/> />
</div> </div>
{/each} {/each}
</div> </div>
{/if} {/if}
</FormValues>
{#if isRecreated} {#if isRecreated}
<div class="form-margin"> <div class="form-margin">
@@ -89,17 +101,16 @@
{/if} {/if}
<div slot="footer"> <div slot="footer">
<FormValues let:values>
<FormSubmit <FormSubmit
value="OK" value="OK"
disabled={isRecreated && !values.allowRecreate} disabled={isRecreated && !$values.allowRecreate}
on:click={e => { on:click={e => {
closeCurrentModal(); closeCurrentModal();
onConfirm( onConfirm(
e.detail.deleteReferencesCascade e.detail.deleteReferencesCascade
? [ ? [
...deleteCascadesScripts ...deleteCascadesScripts
.filter(({ script, title }) => e.detail[`deleteReferences_${title}`] !== false) .filter(({ script, title }) => e.detail[`deleteReferencesFor_${title}`] !== false)
.map(({ script, title }) => script), .map(({ script, title }) => script),
sql, sql,
].join('\n') ].join('\n')
@@ -108,10 +119,9 @@
}} }}
/> />
<FormStyledButton type="button" value="Close" on:click={closeCurrentModal} /> <FormStyledButton type="button" value="Close" on:click={closeCurrentModal} />
</FormValues>
</div> </div>
</ModalBase> </ModalBase>
</FormProvider> </FormProviderCore>
<style> <style>
.editor { .editor {
@@ -123,4 +133,8 @@
.form-margin { .form-margin {
margin: var(--dim-large-form-margin); margin: var(--dim-large-form-margin);
} }
.flex-wrap {
flex-wrap: wrap;
}
</style> </style>

View File

@@ -97,7 +97,7 @@
console.log('deleteCascadesScripts', deleteCascadesScripts); console.log('deleteCascadesScripts', deleteCascadesScripts);
showModal(ConfirmSqlModal, { showModal(ConfirmSqlModal, {
sql, sql,
onConfirm: () => handleConfirmSql(sql), onConfirm: sqlOverride => handleConfirmSql(sqlOverride || sql),
engine: driver.engine, engine: driver.engine,
deleteCascadesScripts, deleteCascadesScripts,
}); });