import i18next from "i18next";
import { runInAction } from "mobx";
import { ReactElement } from "react";
import ViewState from "../../ReactViewModels/ViewState";
import { RawButton } from "../../Styled/Button";
import Text from "../../Styled/Text";
import CustomComponent, {
DomElement,
ProcessNodeContext
} from "./CustomComponent";
import parseCustomMarkdownToReact from "./parseCustomMarkdownToReact";
function showFeedback(viewState: ViewState) {
runInAction(() => {
viewState.feedbackFormIsVisible = true;
viewState.terria.notificationState.dismissCurrentNotification();
});
}
export const FeedbackLink = (props: {
viewState: ViewState;
/** Override for feedback message */
feedbackMessage?: string;
/** Override for email message - this will be shown if feedback isn't available. NOTE: email will be supportEmail to this string automatically */
emailMessage?: string;
}) =>
// If we have feedbackUrl = show button to open feedback dialog
props.viewState.terria.configParameters.feedbackUrl ? (
showFeedback(props.viewState)}
css={`
text-align: left;
`}
>
{parseCustomMarkdownToReact(
props.feedbackMessage
? props.feedbackMessage
: i18next.t("models.raiseError.notificationFeedback")
)}
) : (
// If we only have supportEmail - show message and the email address
<>
{parseCustomMarkdownToReact(
props.emailMessage
? `${props.emailMessage} ${props.viewState.terria.supportEmail}`
: i18next.t("models.raiseError.notificationFeedbackEmail", {
email: props.viewState.terria.supportEmail
})
)}
>
);
/**
* A `` custom component, which displays a feedback button (if the feature is enabled), or an email address.
*/
export default class FeedbackLinkCustomComponent extends CustomComponent {
static componentName = "feedbacklink";
get name(): string {
return FeedbackLinkCustomComponent.componentName;
}
get attributes(): string[] {
return ["email-message", "feedback-message"];
}
processNode(
context: ProcessNodeContext,
node: DomElement,
_children: ReactElement[]
) {
if (!context.viewState) return undefined;
return (
);
}
}