mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 10:23:57 +00:00
refactor: joined FreeTableGrid and DataGrid into one component
This commit is contained in:
@@ -1,3 +1,14 @@
|
|||||||
|
<script lang="ts" context="module">
|
||||||
|
function extractMacroValuesForMacro(macroValues, macro) {
|
||||||
|
// return {};
|
||||||
|
if (!macro) return {};
|
||||||
|
return {
|
||||||
|
..._.fromPairs((macro.args || []).filter(x => x.default != null).map(x => [x.name, x.default])),
|
||||||
|
..._.mapKeys(macroValues, (v, k) => k.replace(/^.*#/, '')),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { setContext } from 'svelte';
|
import { setContext } from 'svelte';
|
||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
@@ -6,7 +17,6 @@
|
|||||||
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
||||||
import VerticalSplitter from '../elements/VerticalSplitter.svelte';
|
import VerticalSplitter from '../elements/VerticalSplitter.svelte';
|
||||||
import FormViewFilters from '../formview/FormViewFilters.svelte';
|
import FormViewFilters from '../formview/FormViewFilters.svelte';
|
||||||
import { extractMacroValuesForMacro } from '../freetable/FreeTableGrid.svelte';
|
|
||||||
import MacroDetail from '../freetable/MacroDetail.svelte';
|
import MacroDetail from '../freetable/MacroDetail.svelte';
|
||||||
import MacroManager from '../freetable/MacroManager.svelte';
|
import MacroManager from '../freetable/MacroManager.svelte';
|
||||||
import createRef from '../utility/createRef';
|
import createRef from '../utility/createRef';
|
||||||
@@ -14,6 +24,7 @@
|
|||||||
import WidgetColumnBarItem from '../widgets/WidgetColumnBarItem.svelte';
|
import WidgetColumnBarItem from '../widgets/WidgetColumnBarItem.svelte';
|
||||||
import ColumnManager from './ColumnManager.svelte';
|
import ColumnManager from './ColumnManager.svelte';
|
||||||
import ReferenceManager from './ReferenceManager.svelte';
|
import ReferenceManager from './ReferenceManager.svelte';
|
||||||
|
import FreeTableColumnEditor from '../freetable/FreeTableColumnEditor.svelte';
|
||||||
|
|
||||||
export let config;
|
export let config;
|
||||||
export let gridCoreComponent;
|
export let gridCoreComponent;
|
||||||
@@ -26,6 +37,9 @@
|
|||||||
export let isDetailView = false;
|
export let isDetailView = false;
|
||||||
export let showReferences = false;
|
export let showReferences = false;
|
||||||
export let showMacros;
|
export let showMacros;
|
||||||
|
export let freeTableColumn = false;
|
||||||
|
export let macroCondition;
|
||||||
|
export let onRunMacro;
|
||||||
|
|
||||||
export let loadedRows;
|
export let loadedRows;
|
||||||
|
|
||||||
@@ -41,27 +55,39 @@
|
|||||||
$: isFormView = !!(formDisplay && formDisplay.config && formDisplay.config.isFormView);
|
$: isFormView = !!(formDisplay && formDisplay.config && formDisplay.config.isFormView);
|
||||||
|
|
||||||
const handleExecuteMacro = () => {
|
const handleExecuteMacro = () => {
|
||||||
const newChangeSet = runMacroOnChangeSet(
|
onRunMacro($selectedMacro, extractMacroValuesForMacro($macroValues, $selectedMacro), selectedCellsPublished);
|
||||||
$selectedMacro,
|
|
||||||
extractMacroValuesForMacro($macroValues, $selectedMacro),
|
|
||||||
selectedCellsPublished,
|
|
||||||
changeSetState?.value,
|
|
||||||
display
|
|
||||||
);
|
|
||||||
if (newChangeSet) {
|
|
||||||
dispatchChangeSet({ type: 'set', value: newChangeSet });
|
|
||||||
}
|
|
||||||
$selectedMacro = null;
|
$selectedMacro = null;
|
||||||
|
|
||||||
|
// const newChangeSet = runMacroOnChangeSet(
|
||||||
|
// $selectedMacro,
|
||||||
|
// extractMacroValuesForMacro($macroValues, $selectedMacro),
|
||||||
|
// selectedCellsPublished,
|
||||||
|
// changeSetState?.value,
|
||||||
|
// display
|
||||||
|
// );
|
||||||
|
// if (newChangeSet) {
|
||||||
|
// dispatchChangeSet({ type: 'set', value: newChangeSet });
|
||||||
|
// }
|
||||||
|
// $selectedMacro = null;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<HorizontalSplitter initialValue="300px" bind:size={managerSize}>
|
<HorizontalSplitter initialValue="300px" bind:size={managerSize}>
|
||||||
<div class="left" slot="1">
|
<div class="left" slot="1">
|
||||||
<WidgetColumnBar>
|
<WidgetColumnBar>
|
||||||
<WidgetColumnBarItem title="Columns" name="columns" height={showReferences ? '40%' : '60%'} skip={isFormView}>
|
<WidgetColumnBarItem
|
||||||
|
title="Columns"
|
||||||
|
name="columns"
|
||||||
|
height={showReferences ? '40%' : '60%'}
|
||||||
|
skip={freeTableColumn || isFormView}
|
||||||
|
>
|
||||||
<ColumnManager {...$$props} {managerSize} />
|
<ColumnManager {...$$props} {managerSize} />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
|
<WidgetColumnBarItem title="Columns" name="freeColumns" height="40%" skip={!freeTableColumn}>
|
||||||
|
<FreeTableColumnEditor {...$$props} {managerSize} />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
<WidgetColumnBarItem title="Filters" name="filters" height="30%" skip={!isFormView}>
|
<WidgetColumnBarItem title="Filters" name="filters" height="30%" skip={!isFormView}>
|
||||||
<FormViewFilters {...$$props} {managerSize} />
|
<FormViewFilters {...$$props} {managerSize} />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
@@ -77,7 +103,7 @@
|
|||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
|
|
||||||
<WidgetColumnBarItem title="Macros" name="macros" skip={!showMacros} collapsed={isDetailView}>
|
<WidgetColumnBarItem title="Macros" name="macros" skip={!showMacros} collapsed={isDetailView}>
|
||||||
<MacroManager {...$$props} {managerSize} macroCondition={macro => macro.type == 'transformValue'} />
|
<MacroManager {...$$props} {managerSize} />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
</WidgetColumnBar>
|
</WidgetColumnBar>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { createGridCache, createGridConfig, TableFormViewDisplay, TableGridDisplay } from 'dbgate-datalib';
|
import {
|
||||||
|
createGridCache,
|
||||||
|
createGridConfig,
|
||||||
|
runMacroOnChangeSet,
|
||||||
|
TableFormViewDisplay,
|
||||||
|
TableGridDisplay,
|
||||||
|
} from 'dbgate-datalib';
|
||||||
import { getFilterValueExpression } from 'dbgate-filterparser';
|
import { getFilterValueExpression } from 'dbgate-filterparser';
|
||||||
import { findEngineDriver } from 'dbgate-tools';
|
import { findEngineDriver } from 'dbgate-tools';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
@@ -20,6 +26,9 @@
|
|||||||
export let schemaName;
|
export let schemaName;
|
||||||
export let pureName;
|
export let pureName;
|
||||||
|
|
||||||
|
export let changeSetState;
|
||||||
|
export let dispatchChangeSet;
|
||||||
|
|
||||||
export let config;
|
export let config;
|
||||||
export let setConfig;
|
export let setConfig;
|
||||||
|
|
||||||
@@ -106,6 +115,13 @@
|
|||||||
setChildConfig(null, null);
|
setChildConfig(null, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function handleRunMacro(macro, params, cells) {
|
||||||
|
const newChangeSet = runMacroOnChangeSet(macro, params, cells, changeSetState?.value, display);
|
||||||
|
if (newChangeSet) {
|
||||||
|
dispatchChangeSet({ type: 'set', value: newChangeSet });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$: reference = config.reference;
|
$: reference = config.reference;
|
||||||
$: childConfig = config.childConfig;
|
$: childConfig = config.childConfig;
|
||||||
</script>
|
</script>
|
||||||
@@ -120,6 +136,8 @@
|
|||||||
{formDisplay}
|
{formDisplay}
|
||||||
showReferences
|
showReferences
|
||||||
showMacros
|
showMacros
|
||||||
|
onRunMacro={handleRunMacro}
|
||||||
|
macroCondition={macro => macro.type == 'transformValue'}
|
||||||
onReferenceSourceChanged={reference ? handleReferenceSourceChanged : null}
|
onReferenceSourceChanged={reference ? handleReferenceSourceChanged : null}
|
||||||
onReferenceClick={value => {
|
onReferenceClick={value => {
|
||||||
if (value && value.referenceId && reference && reference.referenceId == value.referenceId) {
|
if (value && value.referenceId && reference && reference.referenceId == value.referenceId) {
|
||||||
|
|||||||
@@ -1,101 +0,0 @@
|
|||||||
<script lang="ts" context="module">
|
|
||||||
export function extractMacroValuesForMacro(macroValues, macro) {
|
|
||||||
// return {};
|
|
||||||
if (!macro) return {};
|
|
||||||
return {
|
|
||||||
..._.fromPairs((macro.args || []).filter(x => x.default != null).map(x => [x.name, x.default])),
|
|
||||||
..._.mapKeys(macroValues, (v, k) => k.replace(/^.*#/, '')),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
|
||||||
import VerticalSplitter from '../elements/VerticalSplitter.svelte';
|
|
||||||
import WidgetColumnBar from '../widgets/WidgetColumnBar.svelte';
|
|
||||||
import WidgetColumnBarItem from '../widgets/WidgetColumnBarItem.svelte';
|
|
||||||
import ColumnManager from '../datagrid/ColumnManager.svelte';
|
|
||||||
import ReferenceManager from '../datagrid/ReferenceManager.svelte';
|
|
||||||
import FreeTableGridCore from './FreeTableGridCore.svelte';
|
|
||||||
import FreeTableColumnEditor from './FreeTableColumnEditor.svelte';
|
|
||||||
import MacroManager from './MacroManager.svelte';
|
|
||||||
import { setContext } from 'svelte';
|
|
||||||
import { writable } from 'svelte/store';
|
|
||||||
import MacroDetail from './MacroDetail.svelte';
|
|
||||||
import { runMacro } from 'dbgate-datalib';
|
|
||||||
import _ from 'lodash';
|
|
||||||
|
|
||||||
export let modelState;
|
|
||||||
export let dispatchModel;
|
|
||||||
|
|
||||||
let managerSize;
|
|
||||||
let selectedCellsPublished = [];
|
|
||||||
|
|
||||||
const selectedMacro = writable(null);
|
|
||||||
setContext('selectedMacro', selectedMacro);
|
|
||||||
const macroValues = writable({});
|
|
||||||
setContext('macroValues', macroValues);
|
|
||||||
|
|
||||||
const handleExecuteMacro = () => {
|
|
||||||
const newModel = runMacro(
|
|
||||||
$selectedMacro,
|
|
||||||
extractMacroValuesForMacro($macroValues, $selectedMacro),
|
|
||||||
modelState.value,
|
|
||||||
false,
|
|
||||||
selectedCellsPublished
|
|
||||||
);
|
|
||||||
dispatchModel({ type: 'set', value: newModel });
|
|
||||||
$selectedMacro = null;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<HorizontalSplitter initialValue="300px" bind:size={managerSize}>
|
|
||||||
<div class="left" slot="1">
|
|
||||||
<WidgetColumnBar>
|
|
||||||
<WidgetColumnBarItem title="Columns" name="columns" height="40%">
|
|
||||||
<FreeTableColumnEditor {...$$props} {managerSize} />
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
|
|
||||||
<WidgetColumnBarItem title="Macros" name="macros">
|
|
||||||
<MacroManager {...$$props} {managerSize} />
|
|
||||||
</WidgetColumnBarItem>
|
|
||||||
</WidgetColumnBar>
|
|
||||||
</div>
|
|
||||||
<div class="grid" slot="2">
|
|
||||||
<VerticalSplitter initialValue="70%" isSplitter={!!$selectedMacro}>
|
|
||||||
<svelte:fragment slot="1">
|
|
||||||
<FreeTableGridCore
|
|
||||||
{...$$props}
|
|
||||||
onSelectionChanged={value => (selectedCellsPublished = value)}
|
|
||||||
macroValues={extractMacroValuesForMacro($macroValues, $selectedMacro)}
|
|
||||||
{selectedCellsPublished}
|
|
||||||
macroPreview={$selectedMacro}
|
|
||||||
/>
|
|
||||||
</svelte:fragment>
|
|
||||||
|
|
||||||
<!-- macroPreview={selectedMacro}
|
|
||||||
macroValues={extractMacroValuesForMacro(macroValues, selectedMacro)}
|
|
||||||
onSelectionChanged={setSelectedCells}
|
|
||||||
{setSelectedMacro} -->
|
|
||||||
|
|
||||||
<svelte:fragment slot="2">
|
|
||||||
{#if $selectedMacro}
|
|
||||||
<MacroDetail onExecute={handleExecuteMacro} />
|
|
||||||
{/if}
|
|
||||||
</svelte:fragment>
|
|
||||||
</VerticalSplitter>
|
|
||||||
</div>
|
|
||||||
</HorizontalSplitter>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.left {
|
|
||||||
display: flex;
|
|
||||||
flex: 1;
|
|
||||||
background-color: var(--theme-bg-0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid {
|
|
||||||
position: relative;
|
|
||||||
flex-grow: 1;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { createFreeTableModel } from 'dbgate-datalib';
|
import { createFreeTableModel, runMacro } from 'dbgate-datalib';
|
||||||
|
import DataGrid from '../datagrid/DataGrid.svelte';
|
||||||
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
||||||
import LoadingInfo from '../elements/LoadingInfo.svelte';
|
import LoadingInfo from '../elements/LoadingInfo.svelte';
|
||||||
|
|
||||||
import FreeTableGrid from '../freetable/FreeTableGrid.svelte';
|
import FreeTableGrid from '../freetable/FreeTableGrid.svelte';
|
||||||
|
import FreeTableGridCore from '../freetable/FreeTableGridCore.svelte';
|
||||||
import { showModal } from '../modals/modalTools';
|
import { showModal } from '../modals/modalTools';
|
||||||
import SaveArchiveModal from '../modals/SaveArchiveModal.svelte';
|
import SaveArchiveModal from '../modals/SaveArchiveModal.svelte';
|
||||||
import useEditorData from '../query/useEditorData';
|
import useEditorData from '../query/useEditorData';
|
||||||
@@ -52,6 +54,11 @@
|
|||||||
props: { archiveFile: file, archiveFolder: folder },
|
props: { archiveFile: file, archiveFolder: folder },
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function handleRunMacro(macro, params, cells) {
|
||||||
|
const newModel = runMacro(macro, params, $modelState.value, false, cells);
|
||||||
|
dispatchModel({ type: 'set', value: newModel });
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if isLoading}
|
{#if isLoading}
|
||||||
@@ -59,12 +66,16 @@
|
|||||||
{:else if errorMessage}
|
{:else if errorMessage}
|
||||||
<ErrorInfo message={errorMessage} />
|
<ErrorInfo message={errorMessage} />
|
||||||
{:else}
|
{:else}
|
||||||
<FreeTableGrid
|
<DataGrid
|
||||||
config={$config}
|
config={$config}
|
||||||
setConfig={config.update}
|
setConfig={config.update}
|
||||||
modelState={$modelState}
|
modelState={$modelState}
|
||||||
{dispatchModel}
|
{dispatchModel}
|
||||||
onSave={handleSave}
|
onSave={handleSave}
|
||||||
focusOnVisible
|
focusOnVisible
|
||||||
|
gridCoreComponent={FreeTableGridCore}
|
||||||
|
freeTableColumn
|
||||||
|
showMacros
|
||||||
|
onRunMacro={handleRunMacro}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user