mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 10:13:57 +00:00
designer customization
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
import Designer from './Designer.svelte';
|
import Designer from './Designer.svelte';
|
||||||
|
import { isConnectedByReference, referenceIsConnecting } from './designerTools';
|
||||||
import QueryDesignerReference from './QueryDesignerReference.svelte';
|
import QueryDesignerReference from './QueryDesignerReference.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -12,6 +15,38 @@
|
|||||||
allowTableAlias: true,
|
allowTableAlias: true,
|
||||||
allowScrollColumns: true,
|
allowScrollColumns: true,
|
||||||
canSelectColumns: true,
|
canSelectColumns: true,
|
||||||
|
referenceMenu: ({ designer, reference, onChangeReference, onRemoveReference }) => {
|
||||||
|
const isConnected = isConnectedByReference(
|
||||||
|
designer,
|
||||||
|
{ designerId: reference?.sourceId },
|
||||||
|
{ designerId: reference?.targetId },
|
||||||
|
reference
|
||||||
|
);
|
||||||
|
const setJoinType = joinType => {
|
||||||
|
onChangeReference({
|
||||||
|
...reference,
|
||||||
|
joinType,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return [
|
||||||
|
{ text: 'Remove', onClick: () => onRemoveReference(reference) },
|
||||||
|
!isConnected && [
|
||||||
|
{ divider: true },
|
||||||
|
{ onClick: () => setJoinType('INNER JOIN'), text: 'Set INNER JOIN' },
|
||||||
|
{ onClick: () => setJoinType('LEFT JOIN'), text: 'Set LEFT JOIN' },
|
||||||
|
{ onClick: () => setJoinType('RIGHT JOIN'), text: 'Set RIGHT JOIN' },
|
||||||
|
{ onClick: () => setJoinType('FULL OUTER JOIN'), text: 'Set FULL OUTER JOIN' },
|
||||||
|
{ onClick: () => setJoinType('CROSS JOIN'), text: 'Set CROSS JOIN' },
|
||||||
|
{ onClick: () => setJoinType('WHERE EXISTS'), text: 'Set WHERE EXISTS' },
|
||||||
|
{ onClick: () => setJoinType('WHERE NOT EXISTS'), text: 'Set WHERE NOT EXISTS' },
|
||||||
|
],
|
||||||
|
];
|
||||||
|
},
|
||||||
|
createReferenceText: reference =>
|
||||||
|
_.snakeCase(reference?.joinType || 'CROSS JOIN')
|
||||||
|
.replace('_', '\xa0')
|
||||||
|
.replace('_', '\xa0'),
|
||||||
}}
|
}}
|
||||||
referenceComponent={QueryDesignerReference}
|
referenceComponent={QueryDesignerReference}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -63,32 +63,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createMenu() {
|
function createMenu() {
|
||||||
const isConnected = isConnectedByReference(
|
if (settings?.referenceMenu) {
|
||||||
|
return settings?.referenceMenu({
|
||||||
designer,
|
designer,
|
||||||
{ designerId: reference?.sourceId },
|
reference,
|
||||||
{ designerId: reference?.targetId },
|
onChangeReference,
|
||||||
reference
|
onRemoveReference,
|
||||||
);
|
|
||||||
const setJoinType = joinType => {
|
|
||||||
onChangeReference({
|
|
||||||
...reference,
|
|
||||||
joinType,
|
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
return [
|
|
||||||
{ text: 'Remove', onClick: () => onRemoveReference(reference) },
|
|
||||||
!isConnected && [
|
|
||||||
{ divider: true },
|
|
||||||
{ onClick: () => setJoinType('INNER JOIN'), text: 'Set INNER JOIN' },
|
|
||||||
{ onClick: () => setJoinType('LEFT JOIN'), text: 'Set LEFT JOIN' },
|
|
||||||
{ onClick: () => setJoinType('RIGHT JOIN'), text: 'Set RIGHT JOIN' },
|
|
||||||
{ onClick: () => setJoinType('FULL OUTER JOIN'), text: 'Set FULL OUTER JOIN' },
|
|
||||||
{ onClick: () => setJoinType('CROSS JOIN'), text: 'Set CROSS JOIN' },
|
|
||||||
{ onClick: () => setJoinType('WHERE EXISTS'), text: 'Set WHERE EXISTS' },
|
|
||||||
{ onClick: () => setJoinType('WHERE NOT EXISTS'), text: 'Set WHERE NOT EXISTS' },
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -127,9 +109,7 @@
|
|||||||
top: ${(src.y + dst.y) / 2 - 16}px`}
|
top: ${(src.y + dst.y) / 2 - 16}px`}
|
||||||
>
|
>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
{_.snakeCase(reference?.joinType || 'CROSS JOIN')
|
{settings?.createReferenceText ? settings?.createReferenceText(reference) : ''}
|
||||||
.replace('_', '\xa0')
|
|
||||||
.replace('_', '\xa0')}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -86,6 +86,10 @@
|
|||||||
canSelectColumns: true,
|
canSelectColumns: true,
|
||||||
canCheckTables: true,
|
canCheckTables: true,
|
||||||
arrangeAlg: 'tree',
|
arrangeAlg: 'tree',
|
||||||
|
referenceMenu: ({ designer, reference, onChangeReference, onRemoveReference }) => {
|
||||||
|
return [{ text: 'Remove', onClick: () => onRemoveReference(reference) }];
|
||||||
|
},
|
||||||
|
createReferenceText: reference => (reference.isAutoGenerated ? 'FK' : 'Custom'),
|
||||||
}}
|
}}
|
||||||
referenceComponent={QueryDesignerReference}
|
referenceComponent={QueryDesignerReference}
|
||||||
value={createDesignerModel(config, dbInfos)}
|
value={createDesignerModel(config, dbInfos)}
|
||||||
|
|||||||
Reference in New Issue
Block a user