Skip to content

Commit

Permalink
Merge pull request #5767 from TouK/1.14-staging-ports
Browse files Browse the repository at this point in the history
1.14 staging ports
  • Loading branch information
arkadius committed Mar 20, 2024
2 parents f4a5517 + 3d865e3 commit 7f1b46a
Show file tree
Hide file tree
Showing 49 changed files with 464 additions and 252 deletions.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,12 @@ export function calculateProcessAfterChange(
if (after.id !== before.id) {
dispatch({ type: "PROCESS_RENAME", name: after.id });
}

const { id, ...properties } = after;

return {
processName: after.id,
scenarioGraph: { ...processWithNewFragmentSchema, properties: after },
scenarioGraph: { ...processWithNewFragmentSchema, properties },
};
}

Expand Down
4 changes: 2 additions & 2 deletions designer/client/src/components/graph/NodeUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class NodeUtils {
return !isEmpty(obj) && has(obj, "id") && has(obj, "type");
};

nodeType = (node: NodeType) => {
nodeType = (node: UINodeType) => {
return node.type ? node.type : "Properties";
};

Expand All @@ -31,7 +31,7 @@ class NodeUtils {
return type === "Properties";
};

nodeIsFragment = (node): node is FragmentNodeType => {
nodeIsFragment = (node: UINodeType): node is FragmentNodeType => {
return this.nodeType(node) === "FragmentInput";
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
import { NodeField } from "./NodeField";
import { FieldType } from "./editors/field/Field";
import React from "react";
import { NodeType, NodeValidationError } from "../../../types";
import { NodeType, NodeValidationError, UINodeType } from "../../../types";

interface DescriptionFieldProps {
autoFocus?: boolean;
defaultValue?: string;
isEditMode?: boolean;
node: NodeType;
node: UINodeType;
readonly?: boolean;
renderFieldLabel: (paramName: string) => React.ReactNode;
setProperty: <K extends keyof NodeType>(property: K, newValue: NodeType[K], defaultValue?: NodeType[K]) => void;
Expand Down
4 changes: 2 additions & 2 deletions designer/client/src/components/graph/node-modal/IdField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { extendErrors, getValidationErrorsForField, uniqueScenarioValueValidator
import Field, { FieldType } from "./editors/field/Field";
import React, { useMemo, useState } from "react";
import { useDiffMark } from "./PathsToMark";
import { NodeType, NodeValidationError } from "../../../types";
import { NodeType, NodeValidationError, UINodeType } from "../../../types";
import { useSelector } from "react-redux";
import { getProcessNodesIds } from "../../../reducers/selectors/graph";
import NodeUtils from "../NodeUtils";
import { isEmpty } from "lodash";

interface IdFieldProps {
isEditMode?: boolean;
node: NodeType;
node: UINodeType;
renderFieldLabel: (paramName: string) => React.ReactNode;
setProperty?: <K extends keyof NodeType>(property: K, newValue: NodeType[K], defaultValue?: NodeType[K]) => void;
showValidation?: boolean;
Expand Down
4 changes: 2 additions & 2 deletions designer/client/src/components/graph/node-modal/NodeField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { getValidationErrorsForField } from "./editors/Validators";
import { get, isEmpty } from "lodash";
import React from "react";
import { useDiffMark } from "./PathsToMark";
import { NodeType, NodeValidationError } from "../../../types";
import { NodeType, NodeValidationError, UINodeType } from "../../../types";

type NodeFieldProps<N extends string, V> = {
autoFocus?: boolean;
Expand All @@ -12,7 +12,7 @@ type NodeFieldProps<N extends string, V> = {
fieldName: N;
fieldType: FieldType;
isEditMode?: boolean;
node: NodeType;
node: UINodeType;
readonly?: boolean;
renderFieldLabel: (paramName: string) => React.ReactNode;
setProperty: <K extends keyof NodeType>(property: K, newValue: NodeType[K], defaultValue?: NodeType[K]) => void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ interface Props {
propertyName: string;
propertyConfig: ScenarioPropertyConfig;
editedNode: PropertiesType;
onChange: <K extends keyof PropertiesType>(property: K, newValue: PropertiesType[K], defaultValue?: PropertiesType[K]) => void;
onChange: <K extends keyof PropertiesType["additionalFields"]["properties"]>(
property: K,
newValue: PropertiesType["additionalFields"]["properties"][K],
defaultValue?: PropertiesType["additionalFields"]["properties"][K],
) => void;
renderFieldLabel: (paramName: string) => JSX.Element;
readOnly: boolean;
errors: NodeValidationError[];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { EditorProps, ExtendedEditor } from "../Editor";
import "@glideapps/glide-data-grid/dist/index.css";
import { css } from "@emotion/css";
import DataEditor, {
CompactSelection,
DataEditorProps,
Expand All @@ -13,22 +12,23 @@ import DataEditor, {
Item,
Rectangle,
} from "@glideapps/glide-data-grid";
import { Box } from "@mui/material";
import { PopoverPosition } from "@mui/material/Popover/Popover";
import i18next from "i18next";
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
import ErrorBoundary from "../../../../../common/ErrorBoundary";
import { Sizer } from "./Sizer";
import { css } from "@emotion/css";
import { useTypeOptions } from "../../../fragment-input-definition/FragmentInputDefinition";
import { PopoverPosition } from "@mui/material/Popover/Popover";
import ValidationLabels from "../../../../../modals/ValidationLabels";
import { useTableState } from "./state/tableState";
import { TypesMenu } from "./TypesMenu";
import { useTypeOptions } from "../../../fragment-input-definition/FragmentInputDefinition";
import { EditorProps, ExtendedEditor } from "../Editor";
import "@glideapps/glide-data-grid/dist/index.css";
import { CellMenu, DeleteColumnMenuItem, DeleteRowMenuItem, ResetColumnWidthMenuItem } from "./CellMenu";
import { useTableTheme } from "./tableTheme";
import i18next from "i18next";
import { Box } from "@mui/material";
import { useErrorHighlights } from "./errorHighlights";
import { Sizer } from "./Sizer";
import { ActionTypes } from "./state/action";
import { longestRow } from "./state/helpers";
import { useErrorHighlights } from "./errorHighlights";
import { useTableState } from "./state/tableState";
import { useTableTheme } from "./tableTheme";
import { TypesMenu } from "./TypesMenu";

const SUPPORTED_TYPES = [
"java.lang.String",
Expand Down Expand Up @@ -78,6 +78,11 @@ const RightElement = ({ onColumnAppend }: { onColumnAppend: () => void }) => {
);
};

const emptySelection = {
columns: CompactSelection.empty(),
rows: CompactSelection.empty(),
};

export const Table = ({ expressionObj, onValueChange, className, fieldErrors }: EditorProps) => {
const tableDateContext = useTableState(expressionObj);
const [{ rows, columns }, dispatch, rawExpression] = tableDateContext;
Expand Down Expand Up @@ -155,10 +160,7 @@ export const Table = ({ expressionObj, onValueChange, className, fieldErrors }:
[dispatch],
);

const [selection, setSelection] = useState<GridSelection>({
columns: CompactSelection.empty(),
rows: CompactSelection.empty(),
});
const [selection, setSelection] = useState<GridSelection>(emptySelection);

const pasteWithExpand: DataEditorProps["onPaste"] = useCallback<(target: Item, values: readonly (readonly string[])[]) => boolean>(
([column, row], input) => {
Expand Down Expand Up @@ -352,6 +354,7 @@ export const Table = ({ expressionObj, onValueChange, className, fieldErrors }:

const rightElement = useMemo<DataEditorProps["rightElement"]>(() => <RightElement onColumnAppend={onColumnAppend} />, [onColumnAppend]);

const [hasFocus, setHasFocus] = useState(false);
return (
<>
<Sizer
Expand All @@ -363,6 +366,13 @@ export const Table = ({ expressionObj, onValueChange, className, fieldErrors }:
border: "1px solid",
borderColor: tableTheme.borderColor,
}}
onFocus={() => setHasFocus(true)}
onBlur={(e) => {
if (e.currentTarget.contains(e.relatedTarget)) {
return;
}
setHasFocus(false);
}}
>
<DataEditor
getRowThemeOverride={(row) => ({
Expand All @@ -387,7 +397,7 @@ export const Table = ({ expressionObj, onValueChange, className, fieldErrors }:
theme={tableTheme}
width="100%"
trailingRowOptions={trailingRowOptions}
gridSelection={selection}
gridSelection={hasFocus ? selection : emptySelection}
onGridSelectionChange={(selection) => {
setSelection(selection);
toggleTooltip(selection);
Expand All @@ -402,67 +412,67 @@ export const Table = ({ expressionObj, onValueChange, className, fieldErrors }:
onItemHovered={toggleTooltip}
drawCell={drawCell}
/>
<TypesMenu
anchorPosition={typesMenuData?.position}
currentValue={columns[typesMenuData?.column]?.[1]}
onChange={onTypesMenuChange}
options={supportedTypes}
/>
<CellMenu anchorPosition={cellMenuData?.position} onClose={closeCellMenu}>
{cellMenuData?.column >= 0 && cellMenuData?.row < 0 ? (
<ResetColumnWidthMenuItem
disabled={!columns[cellMenuData.column]?.size}
indexes={selection.columns.toArray().length > 0 ? selection.columns.toArray() : [cellMenuData?.column]}
onClick={(indexes) => {
dispatch({
type: ActionTypes.resetColumnsSize,
columns: indexes,
});
closeCellMenu();
}}
/>
) : null}
{cellMenuData?.column >= 0 ? (
<DeleteColumnMenuItem
indexes={
selection.columns.toArray().length > 0
? selection.columns.toArray()
: selection.current?.range
? Array.from({ length: selection.current.range.width }, (_, i) => selection.current.range.x + i)
: [cellMenuData?.column]
}
onClick={(indexes) => {
dispatch({
type: ActionTypes.deleteColumns,
columns: indexes,
});
clearSelection();
closeCellMenu();
}}
/>
) : null}
{cellMenuData?.row >= 0 ? (
<DeleteRowMenuItem
indexes={
selection.rows.toArray().length > 0
? selection.rows.toArray()
: selection.current?.range
? Array.from({ length: selection.current.range.height }, (_, i) => selection.current.range.y + i)
: [cellMenuData?.row]
}
onClick={(indexes) => {
dispatch({
type: ActionTypes.deleteRows,
rows: indexes,
});
clearSelection();
closeCellMenu();
}}
/>
) : null}
</CellMenu>
</Sizer>
{tooltipElement}
<TypesMenu
anchorPosition={typesMenuData?.position}
currentValue={columns[typesMenuData?.column]?.[1]}
onChange={onTypesMenuChange}
options={supportedTypes}
/>
<CellMenu anchorPosition={cellMenuData?.position} onClose={closeCellMenu}>
{cellMenuData?.column >= 0 && cellMenuData?.row < 0 ? (
<ResetColumnWidthMenuItem
disabled={!columns[cellMenuData.column]?.size}
indexes={selection.columns.toArray().length > 0 ? selection.columns.toArray() : [cellMenuData?.column]}
onClick={(indexes) => {
dispatch({
type: ActionTypes.resetColumnsSize,
columns: indexes,
});
closeCellMenu();
}}
/>
) : null}
{cellMenuData?.column >= 0 ? (
<DeleteColumnMenuItem
indexes={
selection.columns.toArray().length > 0
? selection.columns.toArray()
: selection.current?.range
? Array.from({ length: selection.current.range.width }, (_, i) => selection.current.range.x + i)
: [cellMenuData?.column]
}
onClick={(indexes) => {
dispatch({
type: ActionTypes.deleteColumns,
columns: indexes,
});
clearSelection();
closeCellMenu();
}}
/>
) : null}
{cellMenuData?.row >= 0 ? (
<DeleteRowMenuItem
indexes={
selection.rows.toArray().length > 0
? selection.rows.toArray()
: selection.current?.range
? Array.from({ length: selection.current.range.height }, (_, i) => selection.current.range.y + i)
: [cellMenuData?.row]
}
onClick={(indexes) => {
dispatch({
type: ActionTypes.deleteRows,
rows: indexes,
});
clearSelection();
closeCellMenu();
}}
/>
) : null}
</CellMenu>
</>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,13 @@ export function useErrorHighlights(fieldErrors: FieldError[], columns: DataColum
);

const toggleTooltip = useCallback(
(selection: GridMouseEventArgs | GridSelection) => {
const { cell, rect } = getSelectedCell(selection);
const error = getErrorForCell(cell);
(selection?: GridMouseEventArgs | GridSelection) => {
const selected = getSelectedCell(selection);
const error = getErrorForCell(selected?.cell);

setTooltipOpen(() => {
if (rect && error) {
positionRef.current = rect;
if (selected?.rect && error) {
positionRef.current = selected.rect;
setTooltipMessage(error.errorMessage);
return true;
} else {
Expand Down
9 changes: 5 additions & 4 deletions designer/client/src/types/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export type NodeType<F extends Field = Field> = {
id: string;
parameters?: $TodoType[];
};
nodeType: string;
nodeType?: string;
[key: string]: any;
};

Expand All @@ -59,12 +59,13 @@ export interface Expression {
expression: string;
}

//TODO: Add other process properties...
export type PropertiesType = NodeType & {
export type PropertiesType = {
// FE applies fake id as name, but it's not send by/to BE
id?: string;
type: "Properties";
additionalFields: ProcessAdditionalFields;
};

export type NodeId = NodeType["id"];

export type UINodeType = NodeType;
export type UINodeType = NodeType | PropertiesType;
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class UserApiHttpService(
.serverLogic { user: LoggedUser => _ =>
Future(
success(
DisplayableUser(user, categories.all(user).values)
DisplayableUser(user, categories.all(user).values.toList.distinct.sorted)
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include "../common-designer.conf"

authentication: {
method: "BasicAuth"
usersFile: "designer/server/src/test/resources/config/rich/basicauth-users.conf"
usersFile: "designer/server/src/test/resources/config/access-control-checking/basicauth-users.conf"
anonymousUserRole: "Demo"
}

Expand Down

0 comments on commit 7f1b46a

Please sign in to comment.