import WIP

This commit is contained in:
SPRINX0\prochazka
2025-02-26 16:43:24 +01:00
parent 9ad612bd78
commit 450ce53dcf
2 changed files with 118 additions and 104 deletions

View File

@@ -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: {

View File

@@ -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>