Skip to content

Commit

Permalink
fix(report-add): make to add error toast message when already attache…
Browse files Browse the repository at this point in the history
…d report is added again into dashboard or chart (#19122)

* fix(report-add): make to add error toast message when already attached report is added again into dashboard or chart

* fix(export-add): make to setup the default error message

* fix(report-add): make to allow the errorMessage undefined in LabeledErrorBoundInput component
  • Loading branch information
prosdev0107 authored Mar 24, 2022
1 parent 8947eb9 commit cb03570
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export interface LabeledErrorBoundInputProps {
validationMethods:
| { onBlur: (value: any) => void }
| { onChange: (value: any) => void };
errorMessage: string | null;
errorMessage?: string | null;
helpText?: string;
required?: boolean;
hasTooltip?: boolean;
Expand Down
33 changes: 22 additions & 11 deletions superset-frontend/src/components/ReportModal/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ import { connect, useDispatch, useSelector } from 'react-redux';
import { addReport, editReport } from 'src/reports/actions/reports';
import { AlertObject } from 'src/views/CRUD/alert/types';

import Alert from 'src/components/Alert';
import TimezoneSelector from 'src/components/TimezoneSelector';
import LabeledErrorBoundInput from 'src/components/Form/LabeledErrorBoundInput';
import Icons from 'src/components/Icons';
import withToasts from 'src/components/MessageToasts/withToasts';
import { CronError } from 'src/components/CronPicker';
import { RadioChangeEvent } from 'src/components';
import {
antDErrorAlertStyles,
StyledModal,
StyledTopSection,
StyledBottomSection,
Expand Down Expand Up @@ -73,7 +75,7 @@ export interface ReportObject {
working_timeout: number;
creation_method: string;
force_screenshot: boolean;
error?: string;
error: string;
}

interface ChartObject {
Expand All @@ -93,6 +95,7 @@ interface ReportProps {
addReport: (report?: ReportObject) => {};
onHide: () => {};
onReportAdd: (report?: ReportObject) => {};
addDangerToast: (msg: string) => void;
show: boolean;
userId: number;
userEmail: string;
Expand Down Expand Up @@ -128,9 +131,7 @@ type ReportActionType =
}
| {
type: ActionType.error;
payload: {
name: string[];
};
payload: { name: string[] };
};

const TEXT_BASED_VISUALIZATION_TYPES = [
Expand All @@ -146,6 +147,10 @@ const NOTIFICATION_FORMATS = {
CSV: 'CSV',
};

const defaultErrorMsg = t(
'We were unable to create your report. Please try again.',
);

const reportReducer = (
state: Partial<ReportObject> | null,
action: ReportActionType,
Expand All @@ -171,7 +176,7 @@ const reportReducer = (
case ActionType.error:
return {
...state,
error: action.payload.name[0],
error: action.payload?.name[0] || defaultErrorMsg,
};
default:
return state;
Expand Down Expand Up @@ -250,9 +255,8 @@ const ReportModal: FunctionComponent<ReportProps> = ({
await dispatch(addReport(newReportValues as ReportObject));
onHide();
} catch (e) {
const parsedError = await getClientErrorObject(e);
const errorMessage = parsedError.message;
onReducerChange(ActionType.error, errorMessage);
const { message } = await getClientErrorObject(e);
onReducerChange(ActionType.error, message);
}
}

Expand Down Expand Up @@ -315,6 +319,15 @@ const ReportModal: FunctionComponent<ReportProps> = ({
</>
);

const errorAlert = () => (
<Alert
type="error"
css={(theme: SupersetTheme) => antDErrorAlertStyles(theme)}
message={t('Report Creation Error')}
description={currentReport?.error}
/>
);

return (
<StyledModal
show={show}
Expand All @@ -338,11 +351,9 @@ const ReportModal: FunctionComponent<ReportProps> = ({
value: target.value,
}),
}}
errorMessage={currentReport?.error || ''}
label="Report Name"
data-test="report-name-test"
/>

<LabeledErrorBoundInput
id="description"
name="description"
Expand All @@ -354,7 +365,6 @@ const ReportModal: FunctionComponent<ReportProps> = ({
value: target.value,
}),
}}
errorMessage=""
label={t('Description')}
placeholder={t(
'Include a description that will be sent with your report',
Expand Down Expand Up @@ -401,6 +411,7 @@ const ReportModal: FunctionComponent<ReportProps> = ({
/>
{isChart && renderMessageContentSection}
</StyledBottomSection>
{currentReport?.error && errorAlert()}
</StyledModal>
);
};
Expand Down
21 changes: 21 additions & 0 deletions superset-frontend/src/components/ReportModal/styles.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,24 @@ export const StyledRadio = styled(Radio)`
export const StyledRadioGroup = styled(Radio.Group)`
margin-left: ${({ theme }) => theme.gridUnit * 0.5}px;
`;

export const antDErrorAlertStyles = (theme: SupersetTheme) => css`
border: ${theme.colors.error.base} 1px solid;
padding: ${theme.gridUnit * 4}px;
margin: ${theme.gridUnit * 8}px ${theme.gridUnit * 4}px;
color: ${theme.colors.error.dark2};
.ant-alert-message {
font-size: ${theme.typography.sizes.s + 1}px;
font-weight: bold;
}
.ant-alert-description {
font-size: ${theme.typography.sizes.s + 1}px;
line-height: ${theme.gridUnit * 4}px;
.ant-alert-icon {
margin-right: ${theme.gridUnit * 2.5}px;
font-size: ${theme.typography.sizes.l + 1}px;
position: relative;
top: ${theme.gridUnit / 4}px;
}
}
`;

0 comments on commit cb03570

Please sign in to comment.