feat: add no data alert in test substep and execution

This commit is contained in:
Ali BARIN
2022-09-01 22:22:18 +02:00
parent 91f5f1d628
commit dc79d623be
6 changed files with 47 additions and 8 deletions

View File

@@ -8,7 +8,7 @@ class Execution extends Base {
id!: string;
flowId!: string;
testRun = false;
internalId!: string;
internalId: string;
executionSteps: ExecutionStep[] = [];
static tableName = 'executions';

View File

@@ -38,11 +38,16 @@ class Processor {
if (initialTriggerData.length === 0) {
const lastInternalId = await this.flow.lastInternalId();
await Execution.query().insert({
const executionData: Partial<Execution> = {
flowId: this.flow.id,
testRun: this.testRun,
internalId: lastInternalId,
});
};
if (lastInternalId) {
executionData.internalId = lastInternalId;
}
await Execution.query().insert(executionData);
return;
}

View File

@@ -109,7 +109,7 @@ export default function EditorLayout(): React.ReactElement {
<Snackbar
open={!!flow?.active}
message={formatMessage('flowEditor.publishFlowCannotBeUpdated')}
message={formatMessage('flowEditor.publishedFlowCannotBeUpdated')}
anchorOrigin={{ horizontal: 'center', vertical: 'bottom' }}
ContentProps={{ sx: { fontWeight: 300 }}}
action={(

View File

@@ -4,9 +4,11 @@ import Box from '@mui/material/Box';
import Collapse from '@mui/material/Collapse';
import ListItem from '@mui/material/ListItem';
import Alert from '@mui/material/Alert';
import AlertTitle from '@mui/material/AlertTitle';
import LoadingButton from '@mui/lab/LoadingButton';
import { EditorContext } from 'contexts/Editor';
import useFormatMessage from 'hooks/useFormatMessage';
import JSONViewer from 'components/JSONViewer';
import { EXECUTE_FLOW } from 'graphql/mutations/execute-flow';
import FlowSubstepTitle from 'components/FlowSubstepTitle';
@@ -32,14 +34,21 @@ function TestSubstep(props: TestSubstepProps): React.ReactElement {
step,
} = props;
const formatMessage = useFormatMessage();
const editorContext = React.useContext(EditorContext);
const [executeFlow, { data, error, loading }] = useMutation(EXECUTE_FLOW, { context: { autoSnackbar: false }});
const [executeFlow, { data, error, loading, called, reset }] = useMutation(EXECUTE_FLOW, { context: { autoSnackbar: false }});
const response = data?.executeFlow?.data;
const {
name,
} = substep;
React.useEffect(function resetTestDataOnSubstepToggle() {
if (!expanded) {
reset();
}
}, [expanded, reset])
const handleSubmit = React.useCallback(() => {
executeFlow({
variables: {
@@ -64,6 +73,14 @@ function TestSubstep(props: TestSubstepProps): React.ReactElement {
{error?.graphQLErrors.map((error) => (<>{error.message}<br /></>))}
</Alert>}
{called && !response && (
<Alert severity="warning" sx={{ mb: 1, width: '100%' }}>
<AlertTitle sx={{ fontWeight: 700 }}>{formatMessage('flowEditor.noTestDataTitle')}</AlertTitle>
<Box sx={{ fontWeight: 400 }}>{formatMessage('flowEditor.noTestDataMessage')}</Box>
</Alert>
)}
{response && (
<Box sx={{ maxHeight: 400, overflowY: 'auto', width: '100%' }}>
<JSONViewer data={response} />

View File

@@ -44,7 +44,9 @@
"flow.draft": "Draft",
"flowEditor.publish": "PUBLISH",
"flowEditor.unpublish": "UNPUBLISH",
"flowEditor.publishFlowCannotBeUpdated": "To edit this flow, you must first unpublish it.",
"flowEditor.publishedFlowCannotBeUpdated": "To edit this flow, you must first unpublish it.",
"flowEditor.noTestDataTitle": "We couldn't find matching data",
"flowEditor.noTestDataMessage": "Create a sample in the associated service and test the step again.",
"flow.createdAt": "created {datetime}",
"flow.updatedAt": "updated {datetime}",
"flow.view": "View",
@@ -59,6 +61,8 @@
"executions.noExecutions": "There is no execution data point to show.",
"execution.executedAt": "executed {datetime}",
"execution.test": "Test run",
"execution.noDataTitle": "No data",
"execution.noDataMessage": "We successfully ran the execution, but there was no new data to process.",
"profileSettings.title": "My Profile",
"profileSettings.email": "Email",
"profileSettings.updateEmail": "Update email",

View File

@@ -2,8 +2,12 @@ import * as React from 'react';
import { useParams } from 'react-router-dom';
import { useQuery } from '@apollo/client';
import Grid from '@mui/material/Grid';
import Box from '@mui/material/Box';
import AlertTitle from '@mui/material/AlertTitle';
import Alert from '@mui/material/Alert';
import type { IExecutionStep } from '@automatisch/types';
import useFormatMessage from 'hooks/useFormatMessage';
import ExecutionHeader from 'components/ExecutionHeader';
import ExecutionStep from 'components/ExecutionStep';
import Container from 'components/Container';
@@ -23,8 +27,9 @@ const getLimitAndOffset = (page: number) => ({
export default function Execution(): React.ReactElement {
const { executionId } = useParams() as ExecutionParams;
const formatMessage = useFormatMessage();
const { data: execution } = useQuery(GET_EXECUTION, { variables: { executionId } });
const { data } = useQuery(GET_EXECUTION_STEPS, { variables: { executionId, ...getLimitAndOffset(1) } });
const { data, loading } = useQuery(GET_EXECUTION_STEPS, { variables: { executionId, ...getLimitAndOffset(1) } });
const { edges } = data?.getExecutionSteps || {};
const executionSteps: IExecutionStep[] = edges?.map((edge: { node: IExecutionStep }) => edge.node);
@@ -36,6 +41,14 @@ export default function Execution(): React.ReactElement {
/>
<Grid container item sx={{ mt: 2, mb: [2, 5] }} rowGap={3}>
{!loading && !executionSteps?.length && (
<Alert severity="warning" sx={{ flex: 1 }}>
<AlertTitle sx={{ fontWeight: 700 }}>{formatMessage('execution.noDataTitle')}</AlertTitle>
<Box sx={{ fontWeight: 400 }}>{formatMessage('execution.noDataMessage')}</Box>
</Alert>
)}
{executionSteps?.map((executionStep) => (
<ExecutionStep key={executionStep.id} executionStep={executionStep} step={executionStep.step} />
))}