From cf461b05361735ccdeaaee9c95517e9dca9f6547 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 20 Feb 2020 16:48:25 -0800 Subject: [PATCH] Refactord email popup screen to use Redx + implement all email redux/saga scaffolding. --- .../src/components/_test/test.component.jsx | 37 +++++++ .../email-overlay.component.jsx} | 13 ++- .../email-overlay/email-overlay.container.jsx | 100 ++++++++++++++++++ .../send-email-button.container.jsx | 72 ------------- .../manage-root.page.component.jsx | 39 ++++--- client/src/pages/manage/manage.page.jsx | 15 ++- client/src/redux/email/email.actions.js | 24 +++++ client/src/redux/email/email.reducer.js | 35 ++++++ client/src/redux/email/email.sagas.js | 50 +++++++++ client/src/redux/email/email.selectors.js | 25 +++++ client/src/redux/email/email.types.js | 8 ++ client/src/redux/root.reducer.js | 14 +-- client/src/redux/root.saga.js | 8 +- 13 files changed, 322 insertions(+), 118 deletions(-) create mode 100644 client/src/components/_test/test.component.jsx rename client/src/components/{send-email-button/send-email-button.component.jsx => email-overlay/email-overlay.component.jsx} (75%) create mode 100644 client/src/components/email-overlay/email-overlay.container.jsx delete mode 100644 client/src/components/send-email-button/send-email-button.container.jsx create mode 100644 client/src/redux/email/email.actions.js create mode 100644 client/src/redux/email/email.reducer.js create mode 100644 client/src/redux/email/email.sagas.js create mode 100644 client/src/redux/email/email.selectors.js create mode 100644 client/src/redux/email/email.types.js diff --git a/client/src/components/_test/test.component.jsx b/client/src/components/_test/test.component.jsx new file mode 100644 index 000000000..033f0ed3f --- /dev/null +++ b/client/src/components/_test/test.component.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { setEmailOptions } from "../../redux/email/email.actions"; +import T from "../../emails/parts-order/parts-order.email"; +import { REPORT_QUERY_PARTS_ORDER_BY_PK } from "../../emails/parts-order/parts-order.query"; + +const mapStateToProps = createStructuredSelector({ + //currentUser: selectCurrentUser +}); +const mapDispatchToProps = dispatch => ({ + setEmailOptions: e => dispatch(setEmailOptions(e)) +}); +export default connect( + mapStateToProps, + mapDispatchToProps +)(function Test({ setEmailOptions }) { + return ( + + ); +}); diff --git a/client/src/components/send-email-button/send-email-button.component.jsx b/client/src/components/email-overlay/email-overlay.component.jsx similarity index 75% rename from client/src/components/send-email-button/send-email-button.component.jsx rename to client/src/components/email-overlay/email-overlay.component.jsx index 86187363d..635a86e56 100644 --- a/client/src/components/send-email-button/send-email-button.component.jsx +++ b/client/src/components/email-overlay/email-overlay.component.jsx @@ -4,35 +4,34 @@ import CKEditor from "@ckeditor/ckeditor5-react"; import ClassicEditor from "@ckeditor/ckeditor5-build-classic"; export default function SendEmailButtonComponent({ - emailConfig, + messageOptions, handleConfigChange, handleHtmlChange }) { return (
- THis is where the text editing will happen To CC Subject { - // You can store the "editor" and use when it is needed. + //You can store the "editor" and use when it is needed. console.log("Editor is ready to use!", editor); }} onChange={(event, editor) => { diff --git a/client/src/components/email-overlay/email-overlay.container.jsx b/client/src/components/email-overlay/email-overlay.container.jsx new file mode 100644 index 000000000..9e758c0b8 --- /dev/null +++ b/client/src/components/email-overlay/email-overlay.container.jsx @@ -0,0 +1,100 @@ +import { Button, Modal } from "antd"; +import React, { useEffect, useState } from "react"; +import { useLazyQuery } from "react-apollo"; +import { renderEmail } from "react-html-email"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { + sendEmail, + toggleEmailOverlayVisible +} from "../../redux/email/email.actions"; +import { + selectEmailConfig, + selectEmailVisible +} from "../../redux/email/email.selectors.js"; +import LoadingSpinner from "../loading-spinner/loading-spinner.component"; +import EmailOverlayComponent from "./email-overlay.component"; + +const mapStateToProps = createStructuredSelector({ + modalVisible: selectEmailVisible, + emailConfig: selectEmailConfig +}); +const mapDispatchToProps = dispatch => ({ + toggleEmailOverlayVisible: () => dispatch(toggleEmailOverlayVisible()), + sendEmail: email => dispatch(sendEmail(email)) +}); +export default connect( + mapStateToProps, + mapDispatchToProps +)(function SendEmail({ + emailConfig, + modalVisible, + sendEmail, + toggleEmailOverlayVisible +}) { + const [messageOptions, setMessageOptions] = useState( + emailConfig.messageOptions + ); + useEffect(() => { + setMessageOptions(emailConfig.messageOptions); + }, [setMessageOptions, emailConfig.messageOptions]); + + const [executeQuery, { called, loading, data }] = useLazyQuery( + emailConfig.queryConfig[0], + { + ...emailConfig.queryConfig[1], + fetchPolicy: "network-only" + } + ); + + if ( + emailConfig.queryConfig[0] && + emailConfig.queryConfig[1] && + modalVisible && + !called + ) { + executeQuery(); + } + + if (data && !messageOptions.html && emailConfig.template) { + //console.log(ReactDOMServer.renderToStaticMarkup(