This commit is contained in:
Jan Prochazka
2021-01-23 07:22:09 +01:00
parent 37cc86f8d2
commit 451af5d09f
141 changed files with 763 additions and 787 deletions

View File

@@ -11,7 +11,7 @@ import { getTableInfo } from '../utility/metadataLoaders';
const Wrapper = styled.div`
flex: 1;
background-color: ${(props) => props.theme.designer_background};
background-color: ${props => props.theme.designer_background};
overflow: scroll;
`;
@@ -27,12 +27,12 @@ const EmptyInfo = styled.div`
`;
function fixPositions(tables) {
const minLeft = _.min(tables.map((x) => x.left));
const minTop = _.min(tables.map((x) => x.top));
const minLeft = _.min(tables.map(x => x.left));
const minTop = _.min(tables.map(x => x.top));
if (minLeft < 0 || minTop < 0) {
const dLeft = minLeft < 0 ? -minLeft : 0;
const dTop = minTop < 0 ? -minTop : 0;
return tables.map((tbl) => ({
return tables.map(tbl => ({
...tbl,
left: tbl.left + dLeft,
top: tbl.top + dTop,
@@ -51,7 +51,7 @@ export default function Designer({ value, onChange, conid, database }) {
const wrapperRef = React.useRef();
const [changeToken, setChangeToken] = React.useState(0);
const handleDrop = (e) => {
const handleDrop = e => {
var data = e.dataTransfer.getData('app_object_drag_data');
e.preventDefault();
if (!data) return;
@@ -63,11 +63,11 @@ export default function Designer({ value, onChange, conid, database }) {
json.left = e.clientX - rect.left;
json.top = e.clientY - rect.top;
onChange((current) => {
onChange(current => {
const foreignKeys = _.compact([
...(json.foreignKeys || []).map((fk) => {
...(json.foreignKeys || []).map(fk => {
const tables = ((current || {}).tables || []).filter(
(tbl) => fk.refTableName == tbl.pureName && fk.refSchemaName == tbl.schemaName
tbl => fk.refTableName == tbl.pureName && fk.refSchemaName == tbl.schemaName
);
if (tables.length == 1)
return {
@@ -78,8 +78,8 @@ export default function Designer({ value, onChange, conid, database }) {
return null;
}),
..._.flatten(
((current || {}).tables || []).map((tbl) =>
(tbl.foreignKeys || []).map((fk) => {
((current || {}).tables || []).map(tbl =>
(tbl.foreignKeys || []).map(fk => {
if (fk.refTableName == json.pureName && fk.refSchemaName == json.schemaName) {
return {
...fk,
@@ -105,7 +105,7 @@ export default function Designer({ value, onChange, conid, database }) {
sourceId: foreignKeys[0].sourceId,
targetId: foreignKeys[0].targetId,
joinType: 'INNER JOIN',
columns: foreignKeys[0].columns.map((col) => ({
columns: foreignKeys[0].columns.map(col => ({
source: col.columnName,
target: col.refColumnName,
})),
@@ -117,21 +117,21 @@ export default function Designer({ value, onChange, conid, database }) {
};
const changeTable = React.useCallback(
(table) => {
onChange((current) => ({
table => {
onChange(current => ({
...current,
tables: fixPositions((current.tables || []).map((x) => (x.designerId == table.designerId ? table : x))),
tables: fixPositions((current.tables || []).map(x => (x.designerId == table.designerId ? table : x))),
}));
},
[onChange]
);
const bringToFront = React.useCallback(
(table) => {
table => {
onChange(
(current) => ({
current => ({
...current,
tables: [...(current.tables || []).filter((x) => x.designerId != table.designerId), table],
tables: [...(current.tables || []).filter(x => x.designerId != table.designerId), table],
}),
true
);
@@ -140,43 +140,43 @@ export default function Designer({ value, onChange, conid, database }) {
);
const removeTable = React.useCallback(
(table) => {
onChange((current) => ({
table => {
onChange(current => ({
...current,
tables: (current.tables || []).filter((x) => x.designerId != table.designerId),
tables: (current.tables || []).filter(x => x.designerId != table.designerId),
references: (current.references || []).filter(
(x) => x.sourceId != table.designerId && x.targetId != table.designerId
x => x.sourceId != table.designerId && x.targetId != table.designerId
),
columns: (current.columns || []).filter((x) => x.designerId != table.designerId),
columns: (current.columns || []).filter(x => x.designerId != table.designerId),
}));
},
[onChange]
);
const changeReference = React.useCallback(
(ref) => {
onChange((current) => ({
ref => {
onChange(current => ({
...current,
references: (current.references || []).map((x) => (x.designerId == ref.designerId ? ref : x)),
references: (current.references || []).map(x => (x.designerId == ref.designerId ? ref : x)),
}));
},
[onChange]
);
const removeReference = React.useCallback(
(ref) => {
onChange((current) => ({
ref => {
onChange(current => ({
...current,
references: (current.references || []).filter((x) => x.designerId != ref.designerId),
references: (current.references || []).filter(x => x.designerId != ref.designerId),
}));
},
[onChange]
);
const handleCreateReference = (source, target) => {
onChange((current) => {
onChange(current => {
const existingReference = (current.references || []).find(
(x) =>
x =>
(x.sourceId == source.designerId && x.targetId == target.designerId) ||
(x.sourceId == target.designerId && x.targetId == source.designerId)
);
@@ -184,7 +184,7 @@ export default function Designer({ value, onChange, conid, database }) {
return {
...current,
references: existingReference
? current.references.map((ref) =>
? current.references.map(ref =>
ref == existingReference
? {
...existingReference,
@@ -230,8 +230,8 @@ export default function Designer({ value, onChange, conid, database }) {
schemaName: foreignKey.refSchemaName,
});
const newTableDesignerId = uuidv1();
onChange((current) => {
const fromTable = (current.tables || []).find((x) => x.designerId == designerId);
onChange(current => {
const fromTable = (current.tables || []).find(x => x.designerId == designerId);
if (!fromTable) return;
return {
...current,
@@ -251,7 +251,7 @@ export default function Designer({ value, onChange, conid, database }) {
sourceId: fromTable.designerId,
targetId: newTableDesignerId,
joinType: 'INNER JOIN',
columns: foreignKey.columns.map((col) => ({
columns: foreignKey.columns.map(col => ({
source: col.columnName,
target: col.refColumnName,
})),
@@ -262,12 +262,12 @@ export default function Designer({ value, onChange, conid, database }) {
};
const handleSelectColumn = React.useCallback(
(column) => {
column => {
onChange(
(current) => ({
current => ({
...current,
columns: (current.columns || []).find(
(x) => x.designerId == column.designerId && x.columnName == column.columnName
x => x.designerId == column.designerId && x.columnName == column.columnName
)
? current.columns
: [...cleanupDesignColumns(current.columns), _.pick(column, ['designerId', 'columnName'])],
@@ -280,15 +280,15 @@ export default function Designer({ value, onChange, conid, database }) {
const handleChangeColumn = React.useCallback(
(column, changeFunc) => {
onChange((current) => {
onChange(current => {
const currentColumns = (current || {}).columns || [];
const existing = currentColumns.find(
(x) => x.designerId == column.designerId && x.columnName == column.columnName
x => x.designerId == column.designerId && x.columnName == column.columnName
);
if (existing) {
return {
...current,
columns: currentColumns.map((x) => (x == existing ? changeFunc(existing) : x)),
columns: currentColumns.map(x => (x == existing ? changeFunc(existing) : x)),
};
} else {
return {
@@ -311,8 +311,8 @@ export default function Designer({ value, onChange, conid, database }) {
return (
<Wrapper theme={theme}>
{(tables || []).length == 0 && <EmptyInfo>Drag &amp; drop tables or views from left panel here</EmptyInfo>}
<Canvas onDragOver={(e) => e.preventDefault()} onDrop={handleDrop} ref={wrapperRef}>
{(references || []).map((ref) => (
<Canvas onDragOver={e => e.preventDefault()} onDrop={handleDrop} ref={wrapperRef}>
{(references || []).map(ref => (
<DesignerReference
key={ref.designerId}
changeToken={changeToken}
@@ -323,7 +323,7 @@ export default function Designer({ value, onChange, conid, database }) {
designer={value}
/>
))}
{(tables || []).map((table) => (
{(tables || []).map(table => (
<DesignerTable
key={table.designerId}
sourceDragColumn={sourceDragColumn}
@@ -340,7 +340,7 @@ export default function Designer({ value, onChange, conid, database }) {
onRemoveTable={removeTable}
setChangeToken={setChangeToken}
wrapperRef={wrapperRef}
onChangeDomTable={(table) => {
onChangeDomTable={table => {
domTablesRef.current[table.designerId] = table;
}}
designer={value}

View File

@@ -28,7 +28,7 @@ export class DesignerComponent {
return this.parentComponent ? this.parentComponent.myAndParentTables : [];
}
get thisAndSubComponentsTables() {
return [...this.tables, ..._.flatten(this.subComponents.map((x) => x.thisAndSubComponentsTables))];
return [...this.tables, ..._.flatten(this.subComponents.map(x => x.thisAndSubComponentsTables))];
}
}
@@ -49,7 +49,7 @@ export class DesignerComponentCreator {
root = findPrimaryTable(this.toAdd);
}
if (!root) return null;
_.remove(this.toAdd, (x) => x == root);
_.remove(this.toAdd, x => x == root);
const res = new DesignerComponent();
res.tables.push(root);
@@ -60,7 +60,7 @@ export class DesignerComponentCreator {
if (ref) {
res.tables.push(test);
res.nonPrimaryReferences.push(ref);
_.remove(this.toAdd, (x) => x == test);
_.remove(this.toAdd, x => x == test);
found = true;
break;
}

View File

@@ -26,7 +26,7 @@ export class DesignerQueryDumper {
constructor(public designer: DesignerInfo, public components: DesignerComponent[]) {}
get topLevelTables(): DesignerTableInfo[] {
return _.flatten(this.components.map((x) => x.tables));
return _.flatten(this.components.map(x => x.tables));
}
dumpComponent(component: DesignerComponent) {
@@ -81,15 +81,15 @@ export class DesignerQueryDumper {
addConditions(select: Select, tables: DesignerTableInfo[]) {
for (const column of this.designer.columns || []) {
if (!column.filter) continue;
const table = (this.designer.tables || []).find((x) => x.designerId == column.designerId);
const table = (this.designer.tables || []).find(x => x.designerId == column.designerId);
if (!table) continue;
if (!tables.find((x) => x.designerId == table.designerId)) continue;
if (!tables.find(x => x.designerId == table.designerId)) continue;
const condition = parseFilter(column.filter, findDesignerFilterType(column, this.designer));
if (condition) {
select.where = mergeConditions(
select.where,
_.cloneDeepWith(condition, (expr) => {
_.cloneDeepWith(condition, expr => {
if (expr.exprType == 'placeholder')
return {
exprType: 'column',
@@ -105,15 +105,15 @@ export class DesignerQueryDumper {
addGroupConditions(select: Select, tables: DesignerTableInfo[], selectIsGrouped: boolean) {
for (const column of this.designer.columns || []) {
if (!column.groupFilter) continue;
const table = (this.designer.tables || []).find((x) => x.designerId == column.designerId);
const table = (this.designer.tables || []).find(x => x.designerId == column.designerId);
if (!table) continue;
if (!tables.find((x) => x.designerId == table.designerId)) continue;
if (!tables.find(x => x.designerId == table.designerId)) continue;
const condition = parseFilter(column.groupFilter, findDesignerFilterType(column, this.designer));
if (condition) {
select.having = mergeConditions(
select.having,
_.cloneDeepWith(condition, (expr) => {
_.cloneDeepWith(condition, expr => {
if (expr.exprType == 'placeholder') {
return this.getColumnOutputExpression(column, selectIsGrouped);
}
@@ -174,20 +174,20 @@ export class DesignerQueryDumper {
}
}
const topLevelColumns = (this.designer.columns || []).filter((col) =>
topLevelTables.find((tbl) => tbl.designerId == col.designerId)
const topLevelColumns = (this.designer.columns || []).filter(col =>
topLevelTables.find(tbl => tbl.designerId == col.designerId)
);
const selectIsGrouped = !!topLevelColumns.find((x) => x.isGrouped || (x.aggregate && x.aggregate != '---'));
const outputColumns = topLevelColumns.filter((x) => x.isOutput);
const selectIsGrouped = !!topLevelColumns.find(x => x.isGrouped || (x.aggregate && x.aggregate != '---'));
const outputColumns = topLevelColumns.filter(x => x.isOutput);
if (outputColumns.length == 0) {
res.selectAll = true;
} else {
res.columns = outputColumns.map((col) => this.getColumnOutputExpression(col, selectIsGrouped));
res.columns = outputColumns.map(col => this.getColumnOutputExpression(col, selectIsGrouped));
}
const groupedColumns = topLevelColumns.filter((x) => x.isGrouped);
const groupedColumns = topLevelColumns.filter(x => x.isGrouped);
if (groupedColumns.length > 0) {
res.groupBy = groupedColumns.map((col) => ({
res.groupBy = groupedColumns.map(col => ({
exprType: 'column',
columnName: col.columnName,
source: findQuerySource(this.designer, col.designerId),
@@ -195,11 +195,11 @@ export class DesignerQueryDumper {
}
const orderColumns = _.sortBy(
topLevelColumns.filter((x) => x.sortOrder),
(x) => Math.abs(x.sortOrder)
topLevelColumns.filter(x => x.sortOrder),
x => Math.abs(x.sortOrder)
);
if (orderColumns.length > 0) {
res.orderBy = orderColumns.map((col) => ({
res.orderBy = orderColumns.map(col => ({
exprType: 'column',
direction: col.sortOrder < 0 ? 'DESC' : 'ASC',
columnName: col.columnName,

View File

@@ -19,8 +19,8 @@ const StyledSvg = styled.svg`
const ReferenceWrapper = styled.div`
position: absolute;
border: 1px solid ${(props) => props.theme.designer_line};
background-color: ${(props) => props.theme.designer_background};
border: 1px solid ${props => props.theme.designer_line};
background-color: ${props => props.theme.designer_background};
z-index: 900;
border-radius: 10px;
width: 32px;
@@ -35,7 +35,7 @@ const ReferenceText = styled.span`
transform: translate(-50%, -50%);
z-index: 900;
white-space: nowrap;
background-color: ${(props) => props.theme.designer_background};
background-color: ${props => props.theme.designer_background};
`;
function ReferenceContextMenu({ remove, setJoinType, isConnected }) {
@@ -88,10 +88,10 @@ export default function DesignerReference({
possibilities.push({ xsrc: sourceRect.right + buswi, dirsrc: 1, xdst: targetRect.left - buswi, dirdst: -1 });
possibilities.push({ xsrc: sourceRect.right + buswi, dirsrc: 1, xdst: targetRect.right + buswi, dirdst: 1 });
let minpos = _.minBy(possibilities, (p) => Math.abs(p.xsrc - p.xdst));
let minpos = _.minBy(possibilities, p => Math.abs(p.xsrc - p.xdst));
let srcY = _.mean(columns.map((x) => sourceTable.getColumnY(x.source)));
let dstY = _.mean(columns.map((x) => targetTable.getColumnY(x.target)));
let srcY = _.mean(columns.map(x => sourceTable.getColumnY(x.source)));
let dstY = _.mean(columns.map(x => targetTable.getColumnY(x.target)));
if (columns.length == 0) {
srcY = sourceTable.getColumnY('');
@@ -103,7 +103,7 @@ export default function DesignerReference({
const lineStyle = { fill: 'none', stroke: theme.designer_line, strokeWidth: 2 };
const handleContextMenu = (event) => {
const handleContextMenu = event => {
event.preventDefault();
showMenu(
event.pageX,
@@ -111,7 +111,7 @@ export default function DesignerReference({
<ReferenceContextMenu
remove={() => onRemoveReference({ designerId })}
isConnected={isConnectedByReference(designer, { designerId: sourceId }, { designerId: targetId }, reference)}
setJoinType={(joinType) => {
setJoinType={joinType => {
onChangeReference({
...reference,
joinType,

View File

@@ -15,20 +15,20 @@ import InputTextModal from '../modals/InputTextModal';
const Wrapper = styled.div`
position: absolute;
// background-color: white;
background-color: ${(props) => props.theme.designtable_background};
border: 1px solid ${(props) => props.theme.border};
background-color: ${props => props.theme.designtable_background};
border: 1px solid ${props => props.theme.border};
`;
const Header = styled.div`
font-weight: bold;
text-align: center;
padding: 2px;
background: ${(props) =>
background: ${props =>
// @ts-ignore
props.objectTypeField == 'views'
? props.theme.designtable_background_magenta[2]
: props.theme.designtable_background_blue[2]};
border-bottom: 1px solid ${(props) => props.theme.border};
border-bottom: 1px solid ${props => props.theme.border};
cursor: pointer;
display: flex;
justify-content: space-between;
@@ -44,7 +44,7 @@ const ColumnsWrapper = styled.div`
const HeaderLabel = styled.div``;
const CloseWrapper = styled.div`
${(props) =>
${props =>
`
background-color: ${props.theme.toolbar_background} ;
@@ -63,7 +63,7 @@ const CloseWrapper = styled.div`
// }
const ColumnLine = styled.div`
${(props) =>
${props =>
// @ts-ignore
!props.isDragSource &&
// @ts-ignore
@@ -74,14 +74,14 @@ const ColumnLine = styled.div`
}
`}
${(props) =>
${props =>
// @ts-ignore
props.isDragSource &&
`
background-color: ${props.theme.designtable_background_cyan[2]};
`}
${(props) =>
${props =>
// @ts-ignore
props.isDragTarget &&
`
@@ -113,7 +113,7 @@ function ColumnContextMenu({ setSortOrder, addReference }) {
function ColumnDesignerIcons({ column, designerId, designer }) {
const designerColumn = (designer.columns || []).find(
(x) => x.designerId == designerId && x.columnName == column.columnName
x => x.designerId == designerId && x.columnName == column.columnName
);
if (!designerColumn) return null;
return (
@@ -155,7 +155,7 @@ export default function DesignerTable({
const moveStartXRef = React.useRef(null);
const moveStartYRef = React.useRef(null);
const handleMove = React.useCallback((e) => {
const handleMove = React.useCallback(e => {
let diffX = e.clientX - moveStartXRef.current;
let diffY = e.clientY - moveStartYRef.current;
moveStartXRef.current = e.clientX;
@@ -180,11 +180,11 @@ export default function DesignerTable({
const changeTokenDebounced = React.useRef(
// @ts-ignore
_.debounce(() => setChangeToken((x) => x + 1), 100)
_.debounce(() => setChangeToken(x => x + 1), 100)
);
const handleMoveEnd = React.useCallback(
(e) => {
e => {
if (movingPositionRef.current) {
onChangeTable({
...table,
@@ -217,7 +217,7 @@ export default function DesignerTable({
}, [movingPosition == null, handleMove, handleMoveEnd]);
const headerMouseDown = React.useCallback(
(e) => {
e => {
e.preventDefault();
moveStartXRef.current = e.clientX;
moveStartYRef.current = e.clientY;
@@ -235,13 +235,13 @@ export default function DesignerTable({
};
const handleSetTableAlias = () => {
showModal((modalState) => (
showModal(modalState => (
<InputTextModal
modalState={modalState}
value={alias || ''}
label="New alias"
header="Set table alias"
onConfirm={(newAlias) => {
onConfirm={newAlias => {
onChangeTable({
...table,
alias: newAlias,
@@ -251,7 +251,7 @@ export default function DesignerTable({
));
};
const handleHeaderContextMenu = (event) => {
const handleHeaderContextMenu = event => {
event.preventDefault();
showMenu(
event.pageX,
@@ -272,20 +272,20 @@ export default function DesignerTable({
);
};
const handleColumnContextMenu = (column) => (event) => {
const handleColumnContextMenu = column => event => {
event.preventDefault();
const foreignKey = findForeignKeyForColumn(table, column);
showMenu(
event.pageX,
event.pageY,
<ColumnContextMenu
setSortOrder={(sortOrder) => {
setSortOrder={sortOrder => {
onChangeColumn(
{
...column,
designerId,
},
(col) => ({ ...col, sortOrder })
col => ({ ...col, sortOrder })
);
}}
addReference={
@@ -307,7 +307,7 @@ export default function DesignerTable({
top: movingPosition ? movingPosition.top : top,
}}
onMouseDown={() => onBringToFront(table)}
ref={(dom) => dispatchDomColumn('', dom)}
ref={dom => dispatchDomColumn('', dom)}
>
<Header
onMouseDown={headerMouseDown}
@@ -322,13 +322,13 @@ export default function DesignerTable({
</CloseWrapper>
</Header>
<ColumnsWrapper>
{(columns || []).map((column) => (
{(columns || []).map(column => (
<ColumnLine
onContextMenu={handleColumnContextMenu(column)}
key={column.columnName}
theme={theme}
draggable
ref={(dom) => dispatchDomColumn(column.columnName, dom)}
ref={dom => dispatchDomColumn(column.columnName, dom)}
// @ts-ignore
isDragSource={
sourceDragColumn &&
@@ -341,7 +341,7 @@ export default function DesignerTable({
targetDragColumn.designerId == designerId &&
targetDragColumn.columnName == column.columnName
}
onDragStart={(e) => {
onDragStart={e => {
const dragData = {
...column,
designerId,
@@ -349,11 +349,11 @@ export default function DesignerTable({
setSourceDragColumn(dragData);
e.dataTransfer.setData('designer_column_drag_data', JSON.stringify(dragData));
}}
onDragEnd={(e) => {
onDragEnd={e => {
setTargetDragColumn(null);
setSourceDragColumn(null);
}}
onDragOver={(e) => {
onDragOver={e => {
if (sourceDragColumn) {
e.preventDefault();
setTargetDragColumn({
@@ -362,7 +362,7 @@ export default function DesignerTable({
});
}
}}
onDrop={(e) => {
onDrop={e => {
var data = e.dataTransfer.getData('designer_column_drag_data');
e.preventDefault();
if (!data) return;
@@ -370,7 +370,7 @@ export default function DesignerTable({
setTargetDragColumn(null);
setSourceDragColumn(null);
}}
onMouseDown={(e) =>
onMouseDown={e =>
onSelectColumn({
...column,
designerId,
@@ -380,17 +380,17 @@ export default function DesignerTable({
<CheckboxField
checked={
!!(designer.columns || []).find(
(x) => x.designerId == designerId && x.columnName == column.columnName && x.isOutput
x => x.designerId == designerId && x.columnName == column.columnName && x.isOutput
)
}
onChange={(e) => {
onChange={e => {
if (e.target.checked) {
onChangeColumn(
{
...column,
designerId,
},
(col) => ({ ...col, isOutput: true })
col => ({ ...col, isOutput: true })
);
} else {
onChangeColumn(
@@ -398,7 +398,7 @@ export default function DesignerTable({
...column,
designerId,
},
(col) => ({ ...col, isOutput: false })
col => ({ ...col, isOutput: false })
);
}
}}

View File

@@ -1,4 +1,4 @@
import { DesignerTableInfo } from "./types";
import { DesignerTableInfo } from './types';
export default class DomTableRef {
domTable: Element;

View File

@@ -6,7 +6,7 @@ import InlineButton from '../widgets/InlineButton';
import { findDesignerFilterType } from './designerTools';
function getTableDisplayName(column, tables) {
const table = (tables || []).find((x) => x.designerId == column.designerId);
const table = (tables || []).find(x => x.designerId == column.designerId);
if (table) return table.alias || table.pureName;
return '';
}
@@ -15,10 +15,10 @@ export default function QueryDesignColumns({ value, onChange }) {
const { columns, tables } = value || {};
const changeColumn = React.useCallback(
(col) => {
onChange((current) => ({
col => {
onChange(current => ({
...current,
columns: (current.columns || []).map((x) =>
columns: (current.columns || []).map(x =>
x.designerId == col.designerId && x.columnName == col.columnName ? col : x
),
}));
@@ -27,30 +27,28 @@ export default function QueryDesignColumns({ value, onChange }) {
);
const removeColumn = React.useCallback(
(col) => {
onChange((current) => ({
col => {
onChange(current => ({
...current,
columns: (current.columns || []).filter(
(x) => x.designerId != col.designerId || x.columnName != col.columnName
),
columns: (current.columns || []).filter(x => x.designerId != col.designerId || x.columnName != col.columnName),
}));
},
[onChange]
);
const hasGroupedColumn = !!(columns || []).find((x) => x.isGrouped);
const hasGroupedColumn = !!(columns || []).find(x => x.isGrouped);
return (
<TableControl rows={columns || []}>
<TableColumn fieldName="columnName" header="Column/Expression" />
<TableColumn fieldName="tableDisplayName" header="Table" formatter={(row) => getTableDisplayName(row, tables)} />
<TableColumn fieldName="tableDisplayName" header="Table" formatter={row => getTableDisplayName(row, tables)} />
<TableColumn
fieldName="isOutput"
header="Output"
formatter={(row) => (
formatter={row => (
<CheckboxField
checked={row.isOutput}
onChange={(e) => {
onChange={e => {
if (e.target.checked) changeColumn({ ...row, isOutput: true });
else changeColumn({ ...row, isOutput: false });
}}
@@ -60,10 +58,10 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="alias"
header="Alias"
formatter={(row) => (
formatter={row => (
<TextField
value={row.alias}
onChange={(e) => {
onChange={e => {
changeColumn({ ...row, alias: e.target.value });
}}
/>
@@ -73,10 +71,10 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="isGrouped"
header="Group by"
formatter={(row) => (
formatter={row => (
<CheckboxField
checked={row.isGrouped}
onChange={(e) => {
onChange={e => {
if (e.target.checked) changeColumn({ ...row, isGrouped: true });
else changeColumn({ ...row, isGrouped: false });
}}
@@ -86,11 +84,11 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="aggregate"
header="Aggregate"
formatter={(row) =>
formatter={row =>
!row.isGrouped && (
<SelectField
value={row.aggregate}
onChange={(e) => {
onChange={e => {
changeColumn({ ...row, aggregate: e.target.value });
}}
>
@@ -108,10 +106,10 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="sortOrder"
header="Sort order"
formatter={(row) => (
formatter={row => (
<SelectField
value={row.sortOrder}
onChange={(e) => {
onChange={e => {
changeColumn({ ...row, sortOrder: parseInt(e.target.value) });
}}
>
@@ -128,11 +126,11 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="filter"
header="Filter"
formatter={(row) => (
formatter={row => (
<DataFilterControl
filterType={findDesignerFilterType(row, value)}
filter={row.filter}
setFilter={(filter) => {
setFilter={filter => {
changeColumn({ ...row, filter });
}}
/>
@@ -142,11 +140,11 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="groupFilter"
header="Group filter"
formatter={(row) => (
formatter={row => (
<DataFilterControl
filterType={findDesignerFilterType(row, value)}
filter={row.groupFilter}
setFilter={(groupFilter) => {
setFilter={groupFilter => {
changeColumn({ ...row, groupFilter });
}}
/>
@@ -156,7 +154,7 @@ export default function QueryDesignColumns({ value, onChange }) {
<TableColumn
fieldName="actions"
header=""
formatter={(row) => (
formatter={row => (
<>
<InlineButton onClick={() => removeColumn(row)}>Remove</InlineButton>
</>

View File

@@ -1,5 +1,5 @@
export default function cleanupDesignColumns(columns) {
return (columns || []).filter(
(x) => x.isOutput || x.isGrouped || x.alias || (x.aggregate && x.aggregate != '---') || x.sortOrder || x.filter
x => x.isOutput || x.isGrouped || x.alias || (x.aggregate && x.aggregate != '---') || x.sortOrder || x.filter
);
}

View File

@@ -12,9 +12,8 @@ export function referenceIsConnecting(
tables2: DesignerTableInfo[]
) {
return (
(tables1.find((x) => x.designerId == reference.sourceId) &&
tables2.find((x) => x.designerId == reference.targetId)) ||
(tables1.find((x) => x.designerId == reference.targetId) && tables2.find((x) => x.designerId == reference.sourceId))
(tables1.find(x => x.designerId == reference.sourceId) && tables2.find(x => x.designerId == reference.targetId)) ||
(tables1.find(x => x.designerId == reference.targetId) && tables2.find(x => x.designerId == reference.sourceId))
);
}
@@ -43,7 +42,7 @@ export function findConnectingReference(
}
export function findQuerySource(designer: DesignerInfo, designerId: string): Source {
const table = designer.tables.find((x) => x.designerId == designerId);
const table = designer.tables.find(x => x.designerId == designerId);
if (!table) return null;
return {
name: table,
@@ -71,14 +70,14 @@ export function mergeSelectsFromDesigner(select1: Select, select2: Select): Sele
}
export function findPrimaryTable(tables: DesignerTableInfo[]) {
return _.minBy(tables, (x) => x.top);
return _.minBy(tables, x => x.top);
}
export function getReferenceConditions(reference: DesignerReferenceInfo, designer: DesignerInfo): Condition[] {
const sourceTable = designer.tables.find((x) => x.designerId == reference.sourceId);
const targetTable = designer.tables.find((x) => x.designerId == reference.targetId);
const sourceTable = designer.tables.find(x => x.designerId == reference.sourceId);
const targetTable = designer.tables.find(x => x.designerId == reference.targetId);
return reference.columns.map((col) => ({
return reference.columns.map(col => ({
conditionType: 'binary',
operator: '=',
left: {
@@ -123,19 +122,19 @@ export function isConnectedByReference(
const creator = new DesignerComponentCreator({
...designer,
references: withoutRef
? designer.references.filter((x) => x.designerId != withoutRef.designerId)
? designer.references.filter(x => x.designerId != withoutRef.designerId)
: designer.references,
});
const arrays = creator.components.map((x) => x.thisAndSubComponentsTables);
const array1 = arrays.find((a) => a.find((x) => x.designerId == table1.designerId));
const array2 = arrays.find((a) => a.find((x) => x.designerId == table2.designerId));
const arrays = creator.components.map(x => x.thisAndSubComponentsTables);
const array1 = arrays.find(a => a.find(x => x.designerId == table1.designerId));
const array2 = arrays.find(a => a.find(x => x.designerId == table2.designerId));
return array1 == array2;
}
export function findDesignerFilterType({ designerId, columnName }, designer) {
const table = (designer.tables || []).find((x) => x.designerId == designerId);
const table = (designer.tables || []).find(x => x.designerId == designerId);
if (table) {
const column = (table.columns || []).find((x) => x.columnName == columnName);
const column = (table.columns || []).find(x => x.columnName == columnName);
if (column) {
const { dataType } = column;
return getFilterType(dataType);