mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-23 03:26:00 +00:00
import WIP
This commit is contained in:
@@ -694,7 +694,9 @@
|
|||||||
targetConnectionId: conid,
|
targetConnectionId: conid,
|
||||||
targetDatabaseName: extractDbNameFromComposite(database),
|
targetDatabaseName: extractDbNameFromComposite(database),
|
||||||
targetSchemaName: data.schemaName,
|
targetSchemaName: data.schemaName,
|
||||||
fixedTargetPureName: data.pureName,
|
sourceList: ['__TEMPLATE__'],
|
||||||
|
targetName___TEMPLATE__: data.pureName,
|
||||||
|
// fixedTargetPureName: data.pureName,
|
||||||
});
|
});
|
||||||
// showModal(ImportExportModal, {
|
// showModal(ImportExportModal, {
|
||||||
// initialValues: {
|
// initialValues: {
|
||||||
|
|||||||
@@ -25,7 +25,10 @@
|
|||||||
await (format.addFileToSourceList || addFileToSourceListDefault)(file, newSources, newValues, apiCall);
|
await (format.addFileToSourceList || addFileToSourceListDefault)(file, newSources, newValues, apiCall);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newValues['sourceList'] = [...(values.sourceList || []).filter(x => !newSources.includes(x)), ...newSources];
|
newValues['sourceList'] = [
|
||||||
|
...(values.sourceList || []).filter(x => !newSources.includes(x) && x != '__TEMPLATE__'),
|
||||||
|
...newSources,
|
||||||
|
];
|
||||||
if (preferedStorageType && preferedStorageType != values.sourceStorageType) {
|
if (preferedStorageType && preferedStorageType != values.sourceStorageType) {
|
||||||
newValues['sourceStorageType'] = preferedStorageType;
|
newValues['sourceStorageType'] = preferedStorageType;
|
||||||
}
|
}
|
||||||
@@ -91,6 +94,8 @@
|
|||||||
$: sourceEngine = $sourceConnectionInfo?.engine;
|
$: sourceEngine = $sourceConnectionInfo?.engine;
|
||||||
$: sourceList = $values.sourceList;
|
$: sourceList = $values.sourceList;
|
||||||
|
|
||||||
|
let targetEditKey = 0;
|
||||||
|
|
||||||
const previewSource = writable(null);
|
const previewSource = writable(null);
|
||||||
|
|
||||||
$: supportsPreview =
|
$: supportsPreview =
|
||||||
@@ -125,6 +130,7 @@
|
|||||||
previewSource.set
|
previewSource.set
|
||||||
);
|
);
|
||||||
// setFieldValue('sourceList', [...(sourceList || []), file.originalName]);
|
// setFieldValue('sourceList', [...(sourceList || []), file.originalName]);
|
||||||
|
targetEditKey += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$: effectActiveTab = useEffect(() => {
|
$: effectActiveTab = useEffect(() => {
|
||||||
@@ -138,30 +144,30 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const lastSourcesRef = createRef(null);
|
// const lastSourcesRef = createRef(null);
|
||||||
function setFixedTargetForNewSources(values, valuesStore) {
|
// function setFixedTargetForNewSources(values, valuesStore) {
|
||||||
if (lastSourcesRef.get() && values.fixedTargetPureName) {
|
// if (lastSourcesRef.get() && values.fixedTargetPureName) {
|
||||||
const newSources = values.sourceList.filter(x => !lastSourcesRef.get()?.includes(x));
|
// const newSources = values.sourceList.filter(x => !lastSourcesRef.get()?.includes(x));
|
||||||
const newValues = {};
|
// const newValues = {};
|
||||||
for (const source of newSources) {
|
// for (const source of newSources) {
|
||||||
if (values.fixedTargetPureName) {
|
// if (values.fixedTargetPureName) {
|
||||||
if (!values[`targetName_${source}`]) {
|
// if (!values[`targetName_${source}`]) {
|
||||||
newValues[`targetName_${source}`] = values.fixedTargetPureName;
|
// newValues[`targetName_${source}`] = values.fixedTargetPureName;
|
||||||
}
|
// }
|
||||||
if (!values[`actionType_${source}`]) {
|
// if (!values[`actionType_${source}`]) {
|
||||||
newValues[`actionType_${source}`] = 'appendData';
|
// newValues[`actionType_${source}`] = 'appendData';
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
valuesStore.set({
|
// valuesStore.set({
|
||||||
...values,
|
// ...values,
|
||||||
...newValues,
|
// ...newValues,
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
lastSourcesRef.set(values.sourceList);
|
// lastSourcesRef.set(values.sourceList);
|
||||||
}
|
// }
|
||||||
|
|
||||||
$: setFixedTargetForNewSources($values, values);
|
// $: setFixedTargetForNewSources($values, values);
|
||||||
|
|
||||||
$effectActiveTab;
|
$effectActiveTab;
|
||||||
</script>
|
</script>
|
||||||
@@ -195,89 +201,95 @@
|
|||||||
<div class="m-2">
|
<div class="m-2">
|
||||||
<div class="title"><FontIcon icon="icon tables" /> Map source tables/files</div>
|
<div class="title"><FontIcon icon="icon tables" /> Map source tables/files</div>
|
||||||
|
|
||||||
<TableControl
|
{#key targetEditKey}
|
||||||
rows={$values.sourceList || []}
|
<TableControl
|
||||||
columns={[
|
rows={$values.sourceList || []}
|
||||||
{
|
passProps={{ targetEditKeyValue: targetEditKey }}
|
||||||
fieldName: 'source',
|
columns={[
|
||||||
header: 'Source',
|
{
|
||||||
component: SourceName,
|
fieldName: 'source',
|
||||||
getProps: row => ({ name: row }),
|
header: 'Source',
|
||||||
},
|
component: SourceName,
|
||||||
{
|
getProps: row => ({ name: row }),
|
||||||
fieldName: 'action',
|
},
|
||||||
header: 'Action',
|
{
|
||||||
component: SourceAction,
|
fieldName: 'action',
|
||||||
getProps: row => ({ name: row, targetDbinfo }),
|
header: 'Action',
|
||||||
},
|
component: SourceAction,
|
||||||
{
|
getProps: row => ({ name: row, targetDbinfo }),
|
||||||
fieldName: 'target',
|
},
|
||||||
header: 'Target',
|
{
|
||||||
slot: 1,
|
fieldName: 'target',
|
||||||
},
|
header: 'Target',
|
||||||
{
|
slot: 1,
|
||||||
fieldName: 'preview',
|
},
|
||||||
header: 'Preview',
|
{
|
||||||
slot: 0,
|
fieldName: 'preview',
|
||||||
},
|
header: 'Preview',
|
||||||
{
|
slot: 0,
|
||||||
fieldName: 'columns',
|
},
|
||||||
header: 'Columns',
|
{
|
||||||
slot: 2,
|
fieldName: 'columns',
|
||||||
},
|
header: 'Columns',
|
||||||
]}
|
slot: 2,
|
||||||
>
|
},
|
||||||
<svelte:fragment slot="0" let:row>
|
]}
|
||||||
{#if supportsPreview}
|
>
|
||||||
<CheckboxField
|
<svelte:fragment slot="0" let:row>
|
||||||
checked={$previewSource == row}
|
{#if supportsPreview}
|
||||||
on:change={e => {
|
<CheckboxField
|
||||||
// @ts-ignore
|
checked={$previewSource == row}
|
||||||
if (e.target.checked) $previewSource = row;
|
on:change={e => {
|
||||||
else $previewSource = null;
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
{/if}
|
|
||||||
</svelte:fragment>
|
|
||||||
<svelte:fragment slot="1" let:row>
|
|
||||||
<div class="flex">
|
|
||||||
<TextField
|
|
||||||
value={getTargetName($extensions, row, $values)}
|
|
||||||
on:input={e =>
|
|
||||||
setFieldValue(
|
|
||||||
`targetName_${row}`,
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
e.target.value
|
if (e.target.checked) $previewSource = row;
|
||||||
)}
|
else $previewSource = null;
|
||||||
/>
|
|
||||||
{#if $targetDbinfo}
|
|
||||||
<DropDownButton
|
|
||||||
menu={() => {
|
|
||||||
return $targetDbinfo.tables.map(opt => ({
|
|
||||||
text: opt.pureName,
|
|
||||||
onClick: () => setFieldValue(`targetName_${row}`, opt.pureName),
|
|
||||||
}));
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</svelte:fragment>
|
||||||
</svelte:fragment>
|
<svelte:fragment slot="1" let:row>
|
||||||
<svelte:fragment slot="2" let:row>
|
<div class="flex">
|
||||||
{@const columnCount = ($values[`columns_${row}`] || []).filter(x => !x.skip).length}
|
<TextField
|
||||||
<Link
|
value={getTargetName($extensions, row, $values)}
|
||||||
onClick={() => {
|
on:input={e =>
|
||||||
const targetNameLower = ($values[`targetName_${row}`] || row)?.toLowerCase();
|
setFieldValue(
|
||||||
showModal(ColumnMapModal, {
|
`targetName_${row}`,
|
||||||
initialValue: $values[`columns_${row}`],
|
// @ts-ignore
|
||||||
sourceTableInfo: $sourceDbinfo?.tables?.find(x => x.pureName?.toLowerCase() == row?.toLowerCase()),
|
e.target.value
|
||||||
targetTableInfo: $targetDbinfo?.tables?.find(x => x.pureName?.toLowerCase() == targetNameLower),
|
)}
|
||||||
onConfirm: value => setFieldValue(`columns_${row}`, value),
|
/>
|
||||||
});
|
{#if $targetDbinfo}
|
||||||
}}
|
<DropDownButton
|
||||||
>{columnCount > 0 ? `(${columnCount} columns)` : '(copy from source)'}
|
menu={() => {
|
||||||
</Link>
|
return $targetDbinfo.tables.map(opt => ({
|
||||||
</svelte:fragment>
|
text: opt.pureName,
|
||||||
</TableControl>
|
onClick: () => {
|
||||||
|
setFieldValue(`targetName_${row}`, opt.pureName);
|
||||||
|
targetEditKey += 1;
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</svelte:fragment>
|
||||||
|
<svelte:fragment slot="2" let:row>
|
||||||
|
{@const columnCount = ($values[`columns_${row}`] || []).filter(x => !x.skip).length}
|
||||||
|
<Link
|
||||||
|
onClick={() => {
|
||||||
|
const targetNameLower = ($values[`targetName_${row}`] || row)?.toLowerCase();
|
||||||
|
showModal(ColumnMapModal, {
|
||||||
|
initialValue: $values[`columns_${row}`],
|
||||||
|
sourceTableInfo: $sourceDbinfo?.tables?.find(x => x.pureName?.toLowerCase() == row?.toLowerCase()),
|
||||||
|
targetTableInfo: $targetDbinfo?.tables?.find(x => x.pureName?.toLowerCase() == targetNameLower),
|
||||||
|
onConfirm: value => setFieldValue(`columns_${row}`, value),
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>{columnCount > 0 ? `(${columnCount} columns)` : '(copy from source)'}
|
||||||
|
</Link>
|
||||||
|
</svelte:fragment>
|
||||||
|
</TableControl>
|
||||||
|
{/key}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user