\r\n \r\n \r\n );\r\n}","import * as React from 'react';\r\nimport { Theme } from '@mui/material/styles';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport Paper from '@mui/material/Paper';\r\nimport Typography from '@mui/material/Typography';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n paper: {\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n minHeight: '300px',\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\"\r\n },\r\n notes: {\r\n whiteSpace: 'pre-wrap'\r\n }\r\n })\r\n);\r\n\r\ninterface IWoodpeckerNoInfoProps {\r\n}\r\n\r\nexport default function WoodpeckerNoInfo(props: IWoodpeckerNoInfoProps) {\r\n const classes = useStyles();\r\n // const { user, clientNote, clientId } = props;\r\n\r\n \r\n return (\r\n \r\n \r\n Woodpecker Campaign not found\r\n \r\n \r\n );\r\n}","export default class WoodpeckerViewModel {\r\n id: number = -1;\r\n name: string = '';\r\n status: string = '';\r\n folder_name: string = '';\r\n from_name: string = '';\r\n gdpr_unsubscribe: boolean = false;\r\n created: string = '';\r\n per_day: number = -1;\r\n from_email: string = '';\r\n bcc: string = '';\r\n cc: string = '';\r\n folder_id: number = -1;\r\n stats: Stats = new Stats();\r\n error: string = '';\r\n timestamp: string = '';\r\n}\r\nclass Stats {\r\n public prospects: number = -1;\r\n public delivery: number = -1;\r\n public invalid: number = -1;\r\n public bounced: number = -1;\r\n public queue: number = -1;\r\n public sent: number = -1;\r\n public check: number = -1;\r\n public autoreplied: number = -1;\r\n public opened: number = -1;\r\n public optout: number = -1;\r\n public clicked: number = -1;\r\n public replied: number = -1;\r\n public interested: number = -1;\r\n public maybe_later: number = -1;\r\n public not_interested: number = -1;\r\n public emails: Email[] = [];\r\n public emailsCurrentWeek: Email[] = [];\r\n}\r\nexport class Email {\r\n public subject: string = '';\r\n public msg: string = '';\r\n public timezone: string = '';\r\n public use_prospect_timezone: boolean = false;\r\n public sunFrom: number = -1;\r\n public sunTo: number = -1;\r\n public monFrom: number = -1;\r\n public monTo: number = -1;\r\n public tueFrom: number = -1;\r\n public tueTo: number = -1;\r\n public wedFrom: number = -1;\r\n public wedTo: number = -1;\r\n public thuFrom: number = -1;\r\n public thuTo: number = -1;\r\n public friFrom: number = -1;\r\n public friTo: number = -1;\r\n public satFrom: number = -1;\r\n public satTo: number = -1;\r\n public sunday: Sunday[] = [];\r\n public monday: Monday[] = [];\r\n public tuesday: Tuesday[] = [];\r\n public wednesday: Wednesday[] = [];\r\n public thursday: Thursday[] = [];\r\n public friday: Friday[] = [];\r\n public saturday: Saturday[] = [];\r\n public track_open: boolean = false;\r\n public track_click: boolean = false;\r\n public attach_follow: boolean = false;\r\n public follow_up: number = -1;\r\n public number: number = -1;\r\n public step: number = -1;\r\n // public object condition { get; set; }\r\n public emailSend: number = -1;\r\n public toSend: number = -1;\r\n public delivery: number = -1;\r\n public open_: string = '';\r\n public open: number = -1;\r\n public reply_: string = '';\r\n public reply: number = -1;\r\n public invalid_: string = '';\r\n public invalid: number = -1;\r\n public bounce_: string = '';\r\n public bounce: number = -1;\r\n}\r\nclass Sunday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Saturday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Friday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Thursday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Wednesday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Tuesday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Monday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}","// import * as React from 'react';\r\n//import { Theme } from '@mui/material/styles';\r\n//import createStyles from '@mui/styles/createStyles';\r\n//import makeStyles from '@mui/styles/makeStyles';\r\nimport Typography from '@mui/material/Typography';\r\nimport WoodpeckerViewModel from './WoodpeckerViewModel';\r\nimport Grid from '@mui/material/Grid';\r\n\r\n//const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// paper: {\r\n// padding: theme.spacing(2),\r\n// marginBottom: theme.spacing(2),\r\n// minHeight: '300px',\r\n// display: \"flex\",\r\n// flexDirection: \"column\",\r\n// justifyContent: \"center\"\r\n// },\r\n// notes: {\r\n// whiteSpace: 'pre-wrap'\r\n// }\r\n// })\r\n//);\r\n\r\ninterface IGeneralInfoProps {\r\n woodpeckerDetails: WoodpeckerViewModel;\r\n}\r\n\r\nexport default function GeneralInfo(props: IGeneralInfoProps) {\r\n // const classes = useStyles();\r\n // const { user, clientNote, clientId } = props;\r\n\r\n \r\n return (\r\n \r\n \r\n From Name: {props.woodpeckerDetails.from_name}\r\n \r\n \r\n From Email: {props.woodpeckerDetails.from_email}\r\n \r\n \r\n Status: {props.woodpeckerDetails.status}\r\n \r\n \r\n Per Day: {props.woodpeckerDetails.per_day}\r\n \r\n \r\n Timezone: {props.woodpeckerDetails.stats.emails.length > 0 ? props.woodpeckerDetails.stats.emails[0].timezone : \"Not Found\"}\r\n \r\n \r\n );\r\n}","import * as React from 'react';\r\n//import { Theme } from '@mui/material/styles';\r\n//import createStyles from '@mui/styles/createStyles';\r\n//import makeStyles from '@mui/styles/makeStyles';\r\n//import Paper from '@mui/material/Paper';\r\nimport Typography from '@mui/material/Typography';\r\nimport Grid from '@mui/material/Grid';\r\nimport WoodpeckerViewModel from './WoodpeckerViewModel';\r\nimport SentimentNeutralIcon from '@mui/icons-material/SentimentNeutral';\r\nimport SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt';\r\nimport SentimentVeryDissatisfiedIcon from '@mui/icons-material/SentimentVeryDissatisfied';\r\n\r\n//const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// paper: {\r\n// padding: theme.spacing(2),\r\n// marginBottom: theme.spacing(2),\r\n// minHeight: '300px',\r\n// display: \"flex\",\r\n// flexDirection: \"column\",\r\n// justifyContent: \"center\"\r\n// },\r\n// notes: {\r\n// whiteSpace: 'pre-wrap'\r\n// }\r\n// })\r\n//);\r\n\r\ninterface IStatsProps {\r\n woodpeckerDetails: WoodpeckerViewModel;\r\n}\r\n\r\nexport default function Stats(props: IStatsProps) {\r\n // const classes = useStyles();\r\n // const { user, clientNote, clientId } = props;\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n Prospects: {props.woodpeckerDetails.stats.prospects}\r\n \r\n \r\n Delivered: {props.woodpeckerDetails.stats.delivery}\r\n \r\n \r\n Opened: {Math.round(props.woodpeckerDetails.stats.opened * 1000 / props.woodpeckerDetails.stats.delivery) / 10}%\r\n \r\n \r\n Interest Level\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.woodpeckerDetails.stats.interested}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.woodpeckerDetails.stats.maybe_later}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.woodpeckerDetails.stats.not_interested}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","//import * as React from 'react';\r\n//import { Theme } from '@mui/material/styles';\r\n//import createStyles from '@mui/styles/createStyles';\r\n//import makeStyles from '@mui/styles/makeStyles';\r\nimport { Email } from './WoodpeckerViewModel';\r\nimport { styled } from '@mui/material/styles';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell, { tableCellClasses } from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Paper from '@mui/material/Paper';\r\n\r\n//const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// paper: {\r\n// padding: theme.spacing(2),\r\n// marginBottom: theme.spacing(2),\r\n// },\r\n// notes: {\r\n// whiteSpace: 'pre-wrap'\r\n// }\r\n// })\r\n//);\r\n\r\ninterface IEmailStatsProps {\r\n email: Email[];\r\n}\r\nconst StyledTableCell = styled(TableCell)(({ theme }) => ({\r\n [`&.${tableCellClasses.head}`]: {\r\n backgroundColor: theme.palette.common.black,\r\n color: theme.palette.common.white,\r\n },\r\n [`&.${tableCellClasses.body}`]: {\r\n fontSize: 14,\r\n },\r\n}));\r\n\r\nconst StyledTableRow = styled(TableRow)(({ theme }) => ({\r\n '&:nth-of-type(odd)': {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n // hide last border\r\n '&:last-child td, &:last-child th': {\r\n border: 0,\r\n },\r\n}));\r\nexport default function EmailStats(props: IEmailStatsProps) {\r\n // const classes = useStyles();\r\n // const { user, clientNote, clientId } = props;\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n );\r\n}","export default class WoodpeckerViewModel {\r\n id: number = -1;\r\n name: string = '';\r\n status: string = '';\r\n folder_name: string = '';\r\n from_name: string = '';\r\n gdpr_unsubscribe: boolean = false;\r\n created: string = '';\r\n per_day: number = -1;\r\n from_email: string = '';\r\n bcc: string = '';\r\n cc: string = '';\r\n folder_id: number = -1;\r\n stats: Stats = new Stats();\r\n error: string = '';\r\n timestamp: string = '';\r\n}\r\nclass Stats {\r\n public prospects: number = -1;\r\n public delivery: number = -1;\r\n public invalid: number = -1;\r\n public bounced: number = -1;\r\n public queue: number = -1;\r\n public sent: number = -1;\r\n public check: number = -1;\r\n public autoreplied: number = -1;\r\n public opened: number = -1;\r\n public optout: number = -1;\r\n public clicked: number = -1;\r\n public replied: number = -1;\r\n public interested: number = -1;\r\n public maybe_later: number = -1;\r\n public not_interested: number = -1;\r\n public emails: Email[] = [];\r\n public emailsCurrentWeek: Email[] = [];\r\n public interestedCurrentWeek: number = -1;\r\n public maybe_laterCurrentWeek: number = -1;\r\n}\r\nexport class Email {\r\n public subject: string = '';\r\n public msg: string = '';\r\n public timezone: string = '';\r\n public use_prospect_timezone: boolean = false;\r\n public sunFrom: number = -1;\r\n public sunTo: number = -1;\r\n public monFrom: number = -1;\r\n public monTo: number = -1;\r\n public tueFrom: number = -1;\r\n public tueTo: number = -1;\r\n public wedFrom: number = -1;\r\n public wedTo: number = -1;\r\n public thuFrom: number = -1;\r\n public thuTo: number = -1;\r\n public friFrom: number = -1;\r\n public friTo: number = -1;\r\n public satFrom: number = -1;\r\n public satTo: number = -1;\r\n public sunday: Sunday[] = [];\r\n public monday: Monday[] = [];\r\n public tuesday: Tuesday[] = [];\r\n public wednesday: Wednesday[] = [];\r\n public thursday: Thursday[] = [];\r\n public friday: Friday[] = [];\r\n public saturday: Saturday[] = [];\r\n public track_open: boolean = false;\r\n public track_click: boolean = false;\r\n public attach_follow: boolean = false;\r\n public follow_up: number = -1;\r\n public number: number = -1;\r\n public step: number = -1;\r\n // public object condition { get; set; }\r\n public emailSend: number = -1;\r\n public toSend: number = -1;\r\n public delivery: number = -1;\r\n public open_: string = '';\r\n public open: number = -1;\r\n public reply_: string = '';\r\n public reply: number = -1;\r\n public invalid_: string = '';\r\n public invalid: number = -1;\r\n public bounce_: string = '';\r\n public bounce: number = -1;\r\n}\r\nclass Sunday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Saturday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Friday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Thursday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Wednesday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Tuesday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}\r\nclass Monday {\r\n public from: number = -1;\r\n public to: number = -1;\r\n}","import LeadEmailViewModel from \"./LeadEmailViewModel\";\r\nimport WoodpeckerViewModel from \"./WoodpeckerViewModel\";\r\nexport default class EmailStatsViewModel {\r\n woodpeckerViewModel: WoodpeckerViewModel = new WoodpeckerViewModel();\r\n interestedLeadEmailViewModel: LeadEmailViewModel[] = [];\r\n maybeLeadEmailViewModel: LeadEmailViewModel[] = [];\r\n}\r\n","import React, { useRef, useState } from \"react\";\r\nimport EmailStats from \"./EmailStats\";\r\nimport LeadEmailTable from \"./LeadEmailTable\";\r\nimport { useLocation } from 'react-router';\r\nimport authService from \"../api-authorization/AuthorizeService\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Button from \"@mui/material/Button\";\r\nimport EmailStatsViewModel from \"./ViewModels/EmailStatsViewModel\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\ninterface LocationState {\r\n woodPeckerId: number;\r\n startDate: Date;\r\n endDate: Date;\r\n}\r\n\r\ninterface IStatEmailTemplateProps {\r\n}\r\n\r\nexport default function StatEmailTemplate(props: IStatEmailTemplateProps) {\r\n const [emailStatsViewModel, setEmailStatsViewModel] = useState(new EmailStatsViewModel());\r\n const toCopy = useRef(null);\r\n const location = useLocation();\r\n const [loaded, setLoaded] = useState(false);\r\n const { woodPeckerId, startDate, endDate } = location.state || {\r\n woodPeckerId: 0,\r\n startDate: null,\r\n endDate: null\r\n };\r\n React.useEffect(() => {\r\n getWoodpeckerData();\r\n }, []);\r\n const getWoodpeckerData = async () => {\r\n setLoaded(false);\r\n const token = await authService.getAccessToken();\r\n const url = (startDate === null || endDate === null) ? `WoodPecker/GetWoodpeckerEmailTemplate?woodpeckerId=${woodPeckerId}` : `WoodPecker/GetWoodpeckerEmailTemplateHistorical?woodpeckerId=${woodPeckerId}&startDate=${startDate.toISOString()}&endDate=${endDate.toISOString()}`\r\n\r\n fetch(url, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` },\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n setEmailStatsViewModel(data);\r\n setLoaded(true);\r\n })\r\n .catch(error => {\r\n setLoaded(true);\r\n });\r\n }\r\n const copy = () => {\r\n if (toCopy && toCopy.current) {\r\n console.log(\"Copying Content\");\r\n //const code = toCopy.current.innerHTML;\r\n //copyFormatted(code);\r\n window.getSelection()!.removeAllRanges();\r\n var range = document.createRange();\r\n range.selectNode(toCopy.current);\r\n window.getSelection()!.addRange(range);\r\n document.execCommand('copy');\r\n window.getSelection()!.removeAllRanges();\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {\r\n loaded ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n \r\n \r\n );\r\n}","import { Route, Switch } from 'react-router';\r\nimport Layout from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport AuthorizeRoute from './components/api-authorization/AuthorizeRoute';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport { createTheme, responsiveFontSizes, adaptV4Theme } from '@mui/material/styles';\r\nimport { ThemeProvider, Theme, StyledEngineProvider } from '@mui/material/styles';\r\nimport RegisterConfirmation from './components/Admin/RegisterConfirmation';\r\nimport ClientList from './components/Clients/ClientList';\r\nimport TeamList from './components/Teams/TeamList';\r\nimport Campaign from './components/Campaigns/CampaignPage/Campaign';\r\nimport UpdateUser from './components/Admin/UpdateUser';\r\nimport AdminDashboard from './components/Admin/AdminDashboard';\r\nimport PowerBI from './components/PowerBITest/PowerBI';\r\nimport Client from './components/Clients/ClientPage/Client';\r\nimport CustomerSatisfactionSurvey from './components/CustomerSatisfactionSurvey/CustomerSatisfactionSurvey';\r\nimport Profile from './components/Profile/Profile';\r\nimport SuperAdminPowerBI from './components/PowerBITest/SuperAdminPowerBI';\r\nimport EmailReportContainer from './components/Reports/Woodpecker/EmailReportContainer';\r\nimport CreateClient from './components/Clients/CreateClient';\r\nimport StatEmailTemplate from './components/EmailTemplate/StatEmailTemplate';\r\n\r\n\r\ndeclare module '@mui/styles/defaultTheme' {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\r\n interface DefaultTheme extends Theme {}\r\n}\r\n\r\n\r\nconst theme = createTheme(adaptV4Theme({\r\n palette: {\r\n primary: { main: /*'#0077B5'*/ '#000000' },\r\n secondary: {\r\n main: /*'#FF7052'*/'#000000',\r\n contrastText: '#ffffff'\r\n },\r\n background: {default: '#ffffff'}\r\n }\r\n}));\r\n\r\nexport default function App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/**/}\r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n"," import * as ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n {() => { document.body.style.backgroundColor = \"#ffffff\"; }}\r\n ,\r\n rootElement);\r\n\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar TableCell_1 = require(\"@mui/material/TableCell\");\r\nvar createStyles_1 = require(\"@mui/styles/createStyles\");\r\nvar makeStyles_1 = require(\"@mui/styles/makeStyles\");\r\nvar useStyles = (0, makeStyles_1.default)(function (theme) {\r\n return (0, createStyles_1.default)({\r\n root: {\r\n padding: \"6px 8px\"\r\n }\r\n });\r\n});\r\nfunction DenseTableCell(props) {\r\n var classes = useStyles();\r\n var cell = props.children ?\r\n React.createElement(TableCell_1.default, __assign({}, props, { classes: {\r\n root: classes.root\r\n } }), props.children)\r\n :\r\n React.createElement(TableCell_1.default, __assign({}, props, { classes: {\r\n root: classes.root\r\n } }));\r\n return (React.createElement(React.Fragment, null, cell));\r\n}\r\nexports.default = DenseTableCell;\r\n//# sourceMappingURL=DenseTableCell.js.map"],"sourceRoot":""}