diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index eda276430..7470ea1e8 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -11360,6 +11360,58 @@ printcenter + + errors + + + nocontexttype + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + + + jobs + + + repairorder + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + labels diff --git a/client/src/components/_test/test.component.jsx b/client/src/components/_test/test.component.jsx index 60f72bb3c..a686e3147 100644 --- a/client/src/components/_test/test.component.jsx +++ b/client/src/components/_test/test.component.jsx @@ -19,6 +19,7 @@ const mapDispatchToProps = (dispatch) => ({ load: () => dispatch(startLoading()), endload: () => dispatch(endLoading()), }); + export default connect( mapStateToProps, mapDispatchToProps @@ -48,13 +49,12 @@ export default connect( ); newWin.document.write(r.data); }); - }} - > + }}> TinyMCE setEmailOptions({ messageOptions: { - from: { - name: bodyshop.shopname || EmailSettings.fromNameDefault, - address: EmailSettings.fromAddress, - }, to: "patrickwf@gmail.com", - replyTo: bodyshop.email, Subject: "TODO FIX ME", }, template: { @@ -89,8 +84,7 @@ export default connect( variables: { id: "2b42336f-b8de-4f04-a053-d6bff034d384" }, }, }) - } - > + }> Set email config. diff --git a/client/src/components/email-overlay/email-overlay.container.jsx b/client/src/components/email-overlay/email-overlay.container.jsx index 3048bcad4..df660895e 100644 --- a/client/src/components/email-overlay/email-overlay.container.jsx +++ b/client/src/components/email-overlay/email-overlay.container.jsx @@ -15,6 +15,7 @@ import { import { selectBodyshop } from "../../redux/user/user.selectors"; import LoadingSpinner from "../loading-spinner/loading-spinner.component"; import EmailOverlayComponent from "./email-overlay.component"; +import { EmailSettings } from "../../emails/constants"; const mapStateToProps = createStructuredSelector({ modalVisible: selectEmailVisible, @@ -31,10 +32,16 @@ export function EmailOverlayContainer({ bodyshop, }) { const { t } = useTranslation(); - - const [messageOptions, setMessageOptions] = useState( - emailConfig.messageOptions - ); + const defaultEmailFrom = { + from: { + name: bodyshop.shopname || EmailSettings.fromNameDefault, + address: EmailSettings.fromAddress, + }, + replyTo: bodyshop.email, + }; + const [messageOptions, setMessageOptions] = useState({ + ...defaultEmailFrom, + }); const client = useApolloClient(); const renderEmail = () => { @@ -78,7 +85,11 @@ export function EmailOverlayContainer({ context: { ...contextData, bodyshop: bodyshop }, }) .then((r) => { - setMessageOptions({ ...messageOptions, html: r.data }); + setMessageOptions({ + ...emailConfig.messageOptions, + ...defaultEmailFrom, + html: r.data, + }); }); }; @@ -119,8 +130,7 @@ export function EmailOverlayContainer({ onOk={handleOk} onCancel={() => { toggleEmailOverlayVisible(); - }} - > + }}> { console.log(messageOptions.html); navigator.clipboard.writeText(messageOptions.html); - }} - > + }}> Get HTML diff --git a/client/src/components/print-center-item/print-center-item.component.jsx b/client/src/components/print-center-item/print-center-item.component.jsx new file mode 100644 index 000000000..27bdc35e7 --- /dev/null +++ b/client/src/components/print-center-item/print-center-item.component.jsx @@ -0,0 +1,24 @@ +import React from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { setEmailOptions } from "../../redux/email/email.actions"; +import { selectPrintCenter } from "../../redux/modals/modals.selectors"; + +const mapStateToProps = createStructuredSelector({ + printCenterModal: selectPrintCenter, +}); +const mapDispatchToProps = (dispatch) => ({ + setEmailOptions: (e) => dispatch(setEmailOptions(e)), +}); + +export function PrintCenterItemComponent({ + printCenterModal, + setEmailOptions, + item, +}) { + return
  • {item.title}
  • ; +} +export default connect( + mapStateToProps, + mapDispatchToProps +)(PrintCenterItemComponent); diff --git a/client/src/components/print-center-jobs/print-center-jobs.component.jsx b/client/src/components/print-center-jobs/print-center-jobs.component.jsx new file mode 100644 index 000000000..cea8a3917 --- /dev/null +++ b/client/src/components/print-center-jobs/print-center-jobs.component.jsx @@ -0,0 +1,51 @@ +import { Collapse } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { setEmailOptions } from "../../redux/email/email.actions"; +import { toggleModalVisible } from "../../redux/modals/modals.actions"; +import { selectPrintCenter } from "../../redux/modals/modals.selectors"; +import { + selectBodyshop, + selectCurrentUser, +} from "../../redux/user/user.selectors"; +import JobsReports from "./print-center-jobs.list"; +import PrintCenterItem from "../print-center-item/print-center-item.component"; + +const mapStateToProps = createStructuredSelector({ + currentUser: selectCurrentUser, + bodyshop: selectBodyshop, + printCenterModal: selectPrintCenter, +}); +const mapDispatchToProps = (dispatch) => ({ + setEmailOptions: (e) => dispatch(setEmailOptions(e)), + toggleModalVisible: () => dispatch(toggleModalVisible("printCenter")), +}); +export function PrintCenterJobsComponent({ printCenterModal }) { + const { t } = useTranslation(); + const { id: jobid } = printCenterModal.context; + + const JobsReportsList = JobsReports(null); + + return ( +
    + Print Center Jobs COmponetn + + {JobsReportsList.map((section) => ( + +
      + {section.items.map((item) => ( + + ))} +
    +
    + ))} +
    +
    + ); +} +export default connect( + mapStateToProps, + mapDispatchToProps +)(PrintCenterJobsComponent); diff --git a/client/src/components/print-center-jobs/print-center-jobs.list.js b/client/src/components/print-center-jobs/print-center-jobs.list.js new file mode 100644 index 000000000..e97f6df58 --- /dev/null +++ b/client/src/components/print-center-jobs/print-center-jobs.list.js @@ -0,0 +1,50 @@ +import i18n from "i18next"; + +export default function JobsReports(job) { + return [ + { + title: i18n.t("printcenter.jobs.repairorder"), + key: "printcenter.jobs.repairorder", + disabled: false, + items: [ + { + key: "appointment_reminder", + title: "Appointment Reminder", + disabled: false, + }, + { + key: "appointment_reminder2", + title: "Appointment Reminder2", + disabled: false, + }, + { + key: "appointment_reminder3", + title: "Appointment Reminder3", + disabled: false, + }, + { + key: "appointment_reminder4", + title: "Appointment Reminder4", + disabled: false, + }, + { + key: "appointment_reminder5", + title: "Appointment Reminder5", + disabled: false, + }, + ], + }, + { + title: "Section 2", + key: "Section2", + disabled: false, + items: [ + { + key: "appointment_reminder12", + title: "Appointment Reminder12", + disabled: false, + }, + ], + }, + ]; +} diff --git a/client/src/components/print-center-modal/print-center-modal.component.jsx b/client/src/components/print-center-modal/print-center-modal.component.jsx index b926de642..926a0f7fc 100644 --- a/client/src/components/print-center-modal/print-center-modal.component.jsx +++ b/client/src/components/print-center-modal/print-center-modal.component.jsx @@ -1,8 +1,23 @@ import React from "react"; import { useTranslation } from "react-i18next"; +import PrintCenterJobs from "../print-center-jobs/print-center-jobs.component"; export default function PrintCenterModalComponent({ context }) { const { t } = useTranslation(); - const { type, id } = context; - return
    {`${type} - ${id}`}
    ; + const { type } = context; + + let ModalContent; + + switch (type) { + case "job": + ModalContent = PrintCenterJobs; + break; + default: + break; + } + return ( +
    + {ModalContent ? : t("printcenter.errors.nocontexttype")} +
    + ); } diff --git a/client/src/components/print-center-modal/print-center-modal.container.jsx b/client/src/components/print-center-modal/print-center-modal.container.jsx index 77826e76f..66736d3fc 100644 --- a/client/src/components/print-center-modal/print-center-modal.container.jsx +++ b/client/src/components/print-center-modal/print-center-modal.container.jsx @@ -32,8 +32,8 @@ export function PrintCenterModalContainer({ }) { const { t } = useTranslation(); - const { visible, context, actions } = printCenterModal; - // const { jobId, linesToOrder } = context; + const { visible, context } = printCenterModal; + const { type, id } = context; // const { refetch } = actions; return ( @@ -41,7 +41,7 @@ export function PrintCenterModalContainer({ visible={visible} onCancel={() => toggleModalVisible()} width='90%' - title={t("printcenter.labels.title")} + title={` ${t("printcenter.labels.title")} ${type} - ${id}`} destroyOnClose> diff --git a/client/src/redux/application/application.sagas.js b/client/src/redux/application/application.sagas.js new file mode 100644 index 000000000..ec20c8a97 --- /dev/null +++ b/client/src/redux/application/application.sagas.js @@ -0,0 +1,51 @@ +import { all, call, put, takeLatest } from "redux-saga/effects"; +// import { sendEmailFailure, sendEmailSuccess } from "./email.actions"; +// import EmailActionTypes from "./email.types"; +import axios from "axios"; + +// export function* onSendEmail() { +// yield takeLatest(EmailActionTypes.SEND_EMAIL, sendEmail); +// } +// export function* sendEmail(payload) { +// try { +// console.log("Sending thta email", payload); +// axios.post("/sendemail", payload).then(response => { +// console.log(JSON.stringify(response)); +// put(sendEmailSuccess()); +// }); +// } catch (error) { +// console.log("Error in sendEmail saga."); +// yield put(sendEmailFailure(error.message)); +// } +// } + +// export function* onSendEmailSuccess() { +// yield takeLatest(EmailActionTypes.SEND_EMAIL_SUCCESS, sendEmailSuccessSaga); +// } +// export function* sendEmailSuccessSaga() { +// try { +// console.log("Send email success."); +// } catch (error) { +// console.log("Error in sendEmailSuccess saga."); +// yield put(sendEmailFailure(error.message)); +// } +// } + +// export function* onSendEmailFailure() { +// yield takeLatest(EmailActionTypes.SEND_EMAIL_FAILURE, sendEmailFailureSaga); +// } +// export function* sendEmailFailureSaga(error) { +// try { +// yield console.log(error); +// } catch (error) { +// console.log("Error in sendEmailFailure saga.", error.message); +// } +// } + +export function* applicationSagas() { + yield all([ + // call(onSendEmail), + // call(onSendEmailFailure), + // call(onSendEmailSuccess) + ]); +} diff --git a/client/src/redux/root.saga.js b/client/src/redux/root.saga.js index ce288b568..02d46530f 100644 --- a/client/src/redux/root.saga.js +++ b/client/src/redux/root.saga.js @@ -4,7 +4,13 @@ import { userSagas } from "./user/user.sagas"; import { messagingSagas } from "./messaging/messaging.sagas"; import { emailSagas } from "./email/email.sagas"; import { modalsSagas } from "./modals/modals.sagas"; +import { applicationSagas } from "./application/application.sagas"; export default function* rootSaga() { - yield all([call(userSagas), call(messagingSagas), call(emailSagas), - call(modalsSagas)]); + yield all([ + call(userSagas), + call(messagingSagas), + call(emailSagas), + call(modalsSagas), + call(applicationSagas), + ]); } diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 7b5f502f9..fc7789eb0 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -733,6 +733,12 @@ } }, "printcenter": { + "errors": { + "nocontexttype": "No context type set." + }, + "jobs": { + "repairorder": "Repair Order Related" + }, "labels": { "title": "Print Center" } diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index d17fd6ef8..f539b1138 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -733,6 +733,12 @@ } }, "printcenter": { + "errors": { + "nocontexttype": "" + }, + "jobs": { + "repairorder": "" + }, "labels": { "title": "" } diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 29a4a84bb..2a0141fa2 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -733,6 +733,12 @@ } }, "printcenter": { + "errors": { + "nocontexttype": "" + }, + "jobs": { + "repairorder": "" + }, "labels": { "title": "" }