Updated images in assets and removed some packages.

This commit is contained in:
Patrick Fic
2020-10-07 10:04:22 -07:00
parent 2bd4f17b0b
commit b6f2ad3cf0
20 changed files with 693 additions and 14849 deletions

View File

@@ -0,0 +1,53 @@
####################################################################################################
#### Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
####
#### Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file
#### except in compliance with the License. A copy of the License is located at
####
#### http://aws.amazon.com/apache2.0/
####
#### or in the "license" file accompanying this file. This file is distributed on an "AS IS"
#### BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#### License for the specific language governing permissions and limitations under the License.
####################################################################################################
####################################################################################################
#### This configuration file adds a listener to the Application Load Balancer for port 443, this new listener
#### requires the ARN of a public website certificate create residing in the certificate manager service.
#### The configuration file also modifies the default port 80 listener attached to an Application Load Balancer
#### to automatically redirect incoming connections on HTTP to HTTPS.
#### This will not work with an environment using the load balancer type Classic or Network.
#### Do not use this configuration file if a listener has already been created for port 443 from the console.
####################################################################################################
Resources:
AWSEBV2LoadBalancerListener:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
DefaultActions:
- Type: redirect
RedirectConfig:
Protocol: HTTPS
Port: '443'
Host: '#{host}'
Path: '/#{path}'
Query: '#{query}'
StatusCode: HTTP_301
LoadBalancerArn:
Ref: AWSEBV2LoadBalancer
Port: 80
Protocol: HTTP
AWSEBV2LoadBalancerListenerHTTPS:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
Certificates:
- CertificateArn: arn:aws:acm:ca-central-1:714144183158:certificate/c6a0fcde-b959-4aee-afc6-934e27c4962b
DefaultActions:
- Type: forward
TargetGroupArn:
Ref: AWSEBV2LoadBalancerTargetGroup
LoadBalancerArn:
Ref: AWSEBV2LoadBalancer
Port: 443
Protocol: HTTPS

View File

@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" href="%PUBLIC_URL%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta

439
client/madge-graph.svg Normal file
View File

@@ -0,0 +1,439 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.44.1 (20200629.0846)
-->
<!-- Title: G Pages: 1 -->
<svg width="4434pt" height="577pt"
viewBox="0.00 0.00 4434.20 577.36" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(21.6 555.76)">
<title>G</title>
<polygon fill="#111111" stroke="transparent" points="-21.6,21.6 -21.6,-555.76 4412.6,-555.76 4412.6,21.6 -21.6,21.6"/>
<!-- src/App/App.container.jsx -->
<g id="node1" class="node">
<title>src/App/App.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M161.33,-329.32C161.33,-329.32 7.67,-329.32 7.67,-329.32 3.83,-329.32 0,-325.49 0,-321.66 0,-321.66 0,-313.99 0,-313.99 0,-310.16 3.83,-306.32 7.67,-306.32 7.67,-306.32 161.33,-306.32 161.33,-306.32 165.17,-306.32 169,-310.16 169,-313.99 169,-313.99 169,-321.66 169,-321.66 169,-325.49 165.17,-329.32 161.33,-329.32"/>
<text text-anchor="middle" x="84.5" y="-314.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/App/App.container.jsx</text>
</g>
<!-- src/App/App.jsx -->
<g id="node2" class="node">
<title>src/App/App.jsx</title>
<path fill="none" stroke="#ff6c60" d="M307.33,-309.32C307.33,-309.32 212.67,-309.32 212.67,-309.32 208.83,-309.32 205,-305.49 205,-301.66 205,-301.66 205,-293.99 205,-293.99 205,-290.16 208.83,-286.32 212.67,-286.32 212.67,-286.32 307.33,-286.32 307.33,-286.32 311.17,-286.32 315,-290.16 315,-293.99 315,-293.99 315,-301.66 315,-301.66 315,-305.49 311.17,-309.32 307.33,-309.32"/>
<text text-anchor="middle" x="260" y="-294.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/App/App.jsx</text>
</g>
<!-- src/App/App.container.jsx&#45;&gt;src/App/App.jsx -->
<g id="edge1" class="edge">
<title>src/App/App.container.jsx&#45;&gt;src/App/App.jsx</title>
<path fill="none" stroke="#757575" d="M169.2,-308.17C177.83,-307.18 186.49,-306.18 194.85,-305.22"/>
<polygon fill="#757575" stroke="#757575" points="195.35,-308.68 204.88,-304.06 194.55,-301.73 195.35,-308.68"/>
</g>
<!-- src/firebase/firebase.utils.js -->
<g id="node3" class="node">
<title>src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#ff6c60" d="M3745.33,-328.32C3745.33,-328.32 3581.67,-328.32 3581.67,-328.32 3577.83,-328.32 3574,-324.49 3574,-320.66 3574,-320.66 3574,-312.99 3574,-312.99 3574,-309.16 3577.83,-305.32 3581.67,-305.32 3581.67,-305.32 3745.33,-305.32 3745.33,-305.32 3749.17,-305.32 3753,-309.16 3753,-312.99 3753,-312.99 3753,-320.66 3753,-320.66 3753,-324.49 3749.17,-328.32 3745.33,-328.32"/>
<text text-anchor="middle" x="3663.5" y="-313.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/firebase/firebase.utils.js</text>
</g>
<!-- src/App/App.container.jsx&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge2" class="edge">
<title>src/App/App.container.jsx&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M95.01,-329.65C113.67,-352.07 157.45,-400.83 205,-426.82 322.01,-490.78 363.65,-495.82 497,-495.82 497,-495.82 497,-495.82 2709.5,-495.82 3080.78,-495.82 3186.32,-507.86 3538,-388.82 3575.7,-376.06 3614.73,-351.27 3638.81,-334.38"/>
<polygon fill="#757575" stroke="#757575" points="3640.87,-337.21 3646.98,-328.56 3636.8,-331.52 3640.87,-337.21"/>
</g>
<!-- src/components/error&#45;boundary/error&#45;boundary.component.jsx -->
<g id="node4" class="node">
<title>src/components/error&#45;boundary/error&#45;boundary.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1405.33,-269.32C1405.33,-269.32 1031.67,-269.32 1031.67,-269.32 1027.83,-269.32 1024,-265.49 1024,-261.66 1024,-261.66 1024,-253.99 1024,-253.99 1024,-250.16 1027.83,-246.32 1031.67,-246.32 1031.67,-246.32 1405.33,-246.32 1405.33,-246.32 1409.17,-246.32 1413,-250.16 1413,-253.99 1413,-253.99 1413,-261.66 1413,-261.66 1413,-265.49 1409.17,-269.32 1405.33,-269.32"/>
<text text-anchor="middle" x="1218.5" y="-254.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/error&#45;boundary/error&#45;boundary.component.jsx</text>
</g>
<!-- src/App/App.jsx&#45;&gt;src/components/error&#45;boundary/error&#45;boundary.component.jsx -->
<g id="edge3" class="edge">
<title>src/App/App.jsx&#45;&gt;src/components/error&#45;boundary/error&#45;boundary.component.jsx</title>
<path fill="none" stroke="#757575" d="M302.35,-286.28C317.52,-282.55 334.92,-278.85 351,-276.82 576.52,-248.35 837.62,-246.87 1013.77,-250.43"/>
<polygon fill="#757575" stroke="#757575" points="1013.86,-253.93 1023.93,-250.64 1014.01,-246.94 1013.86,-253.93"/>
</g>
<!-- src/pages/manage/manage.page.container.jsx -->
<g id="node5" class="node">
<title>src/pages/manage/manage.page.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M637.33,-309.32C637.33,-309.32 358.67,-309.32 358.67,-309.32 354.83,-309.32 351,-305.49 351,-301.66 351,-301.66 351,-293.99 351,-293.99 351,-290.16 354.83,-286.32 358.67,-286.32 358.67,-286.32 637.33,-286.32 637.33,-286.32 641.17,-286.32 645,-290.16 645,-293.99 645,-293.99 645,-301.66 645,-301.66 645,-305.49 641.17,-309.32 637.33,-309.32"/>
<text text-anchor="middle" x="498" y="-294.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/pages/manage/manage.page.container.jsx</text>
</g>
<!-- src/App/App.jsx&#45;&gt;src/pages/manage/manage.page.container.jsx -->
<g id="edge4" class="edge">
<title>src/App/App.jsx&#45;&gt;src/pages/manage/manage.page.container.jsx</title>
<path fill="none" stroke="#757575" d="M315.14,-297.82C323.15,-297.82 331.72,-297.82 340.62,-297.82"/>
<polygon fill="#757575" stroke="#757575" points="340.79,-301.32 350.79,-297.82 340.79,-294.32 340.79,-301.32"/>
</g>
<!-- src/redux/store.js -->
<g id="node19" class="node">
<title>src/redux/store.js</title>
<path fill="none" stroke="#ff6c60" d="M3900.33,-348.32C3900.33,-348.32 3796.67,-348.32 3796.67,-348.32 3792.83,-348.32 3789,-344.49 3789,-340.66 3789,-340.66 3789,-332.99 3789,-332.99 3789,-329.16 3792.83,-325.32 3796.67,-325.32 3796.67,-325.32 3900.33,-325.32 3900.33,-325.32 3904.17,-325.32 3908,-329.16 3908,-332.99 3908,-332.99 3908,-340.66 3908,-340.66 3908,-344.49 3904.17,-348.32 3900.33,-348.32"/>
<text text-anchor="middle" x="3848.5" y="-333.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/store.js</text>
</g>
<!-- src/firebase/firebase.utils.js&#45;&gt;src/redux/store.js -->
<g id="edge23" class="edge">
<title>src/firebase/firebase.utils.js&#45;&gt;src/redux/store.js</title>
<path fill="none" stroke="#757575" d="M3753.05,-326.5C3761.68,-327.44 3770.34,-328.39 3778.73,-329.31"/>
<polygon fill="#757575" stroke="#757575" points="3778.49,-332.8 3788.81,-330.41 3779.25,-325.84 3778.49,-332.8"/>
</g>
<!-- src/components/error&#45;boundary/error&#45;boundary.component.jsx&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge11" class="edge">
<title>src/components/error&#45;boundary/error&#45;boundary.component.jsx&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M1413.02,-257.5C1605.18,-257.21 1908.19,-256.82 2170.5,-256.82 2170.5,-256.82 2170.5,-256.82 2709.5,-256.82 3078.22,-256.82 3170.9,-265.29 3538,-299.82 3550.17,-300.97 3562.97,-302.42 3575.55,-304"/>
<polygon fill="#757575" stroke="#757575" points="3575.21,-307.49 3585.58,-305.29 3576.1,-300.55 3575.21,-307.49"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx -->
<g id="node21" class="node">
<title>src/pages/manage/manage.page.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M980.33,-309.32C980.33,-309.32 688.67,-309.32 688.67,-309.32 684.83,-309.32 681,-305.49 681,-301.66 681,-301.66 681,-293.99 681,-293.99 681,-290.16 684.83,-286.32 688.67,-286.32 688.67,-286.32 980.33,-286.32 980.33,-286.32 984.17,-286.32 988,-290.16 988,-293.99 988,-293.99 988,-301.66 988,-301.66 988,-305.49 984.17,-309.32 980.33,-309.32"/>
<text text-anchor="middle" x="834.5" y="-294.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/pages/manage/manage.page.component.jsx</text>
</g>
<!-- src/pages/manage/manage.page.container.jsx&#45;&gt;src/pages/manage/manage.page.component.jsx -->
<g id="edge31" class="edge">
<title>src/pages/manage/manage.page.container.jsx&#45;&gt;src/pages/manage/manage.page.component.jsx</title>
<path fill="none" stroke="#757575" d="M645.23,-297.82C653.6,-297.82 662.05,-297.82 670.48,-297.82"/>
<polygon fill="#757575" stroke="#757575" points="670.75,-301.32 680.75,-297.82 670.75,-294.32 670.75,-301.32"/>
</g>
<!-- src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx -->
<g id="node6" class="node">
<title>src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1843.83,-349.32C1843.83,-349.32 1501.17,-349.32 1501.17,-349.32 1497.33,-349.32 1493.5,-345.49 1493.5,-341.66 1493.5,-341.66 1493.5,-333.99 1493.5,-333.99 1493.5,-330.16 1497.33,-326.32 1501.17,-326.32 1501.17,-326.32 1843.83,-326.32 1843.83,-326.32 1847.67,-326.32 1851.5,-330.16 1851.5,-333.99 1851.5,-333.99 1851.5,-341.66 1851.5,-341.66 1851.5,-345.49 1847.67,-349.32 1843.83,-349.32"/>
<text text-anchor="middle" x="1672.5" y="-334.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx</text>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx -->
<g id="node7" class="node">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2403.33,-349.32C2403.33,-349.32 1939.67,-349.32 1939.67,-349.32 1935.83,-349.32 1932,-345.49 1932,-341.66 1932,-341.66 1932,-333.99 1932,-333.99 1932,-330.16 1935.83,-326.32 1939.67,-326.32 1939.67,-326.32 2403.33,-326.32 2403.33,-326.32 2407.17,-326.32 2411,-330.16 2411,-333.99 2411,-333.99 2411,-341.66 2411,-341.66 2411,-345.49 2407.17,-349.32 2403.33,-349.32"/>
<text text-anchor="middle" x="2171.5" y="-334.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx</text>
</g>
<!-- src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx -->
<g id="edge5" class="edge">
<title>src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx</title>
<path fill="none" stroke="#757575" d="M1851.52,-337.82C1874.31,-337.82 1897.96,-337.82 1921.62,-337.82"/>
<polygon fill="#757575" stroke="#757575" points="1921.75,-341.32 1931.75,-337.82 1921.75,-334.32 1921.75,-341.32"/>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx -->
<g id="node12" class="node">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2946.33,-349.32C2946.33,-349.32 2470.67,-349.32 2470.67,-349.32 2466.83,-349.32 2463,-345.49 2463,-341.66 2463,-341.66 2463,-333.99 2463,-333.99 2463,-330.16 2466.83,-326.32 2470.67,-326.32 2470.67,-326.32 2946.33,-326.32 2946.33,-326.32 2950.17,-326.32 2954,-330.16 2954,-333.99 2954,-333.99 2954,-341.66 2954,-341.66 2954,-345.49 2950.17,-349.32 2946.33,-349.32"/>
<text text-anchor="middle" x="2708.5" y="-334.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx</text>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx -->
<g id="edge13" class="edge">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.container.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx</title>
<path fill="none" stroke="#757575" d="M2411.05,-337.82C2424.84,-337.82 2438.74,-337.82 2452.59,-337.82"/>
<polygon fill="#757575" stroke="#757575" points="2452.66,-341.32 2462.66,-337.82 2452.66,-334.32 2452.66,-341.32"/>
</g>
<!-- src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx -->
<g id="node8" class="node">
<title>src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1403.83,-429.32C1403.83,-429.32 1033.17,-429.32 1033.17,-429.32 1029.33,-429.32 1025.5,-425.49 1025.5,-421.66 1025.5,-421.66 1025.5,-413.99 1025.5,-413.99 1025.5,-410.16 1029.33,-406.32 1033.17,-406.32 1033.17,-406.32 1403.83,-406.32 1403.83,-406.32 1407.67,-406.32 1411.5,-410.16 1411.5,-413.99 1411.5,-413.99 1411.5,-421.66 1411.5,-421.66 1411.5,-425.49 1407.67,-429.32 1403.83,-429.32"/>
<text text-anchor="middle" x="1218.5" y="-414.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx</text>
</g>
<!-- src/components/documents&#45;upload/documents&#45;upload.utility.js -->
<g id="node9" class="node">
<title>src/components/documents&#45;upload/documents&#45;upload.utility.js</title>
<path fill="none" stroke="#ff6c60" d="M1860.33,-429.32C1860.33,-429.32 1484.67,-429.32 1484.67,-429.32 1480.83,-429.32 1477,-425.49 1477,-421.66 1477,-421.66 1477,-413.99 1477,-413.99 1477,-410.16 1480.83,-406.32 1484.67,-406.32 1484.67,-406.32 1860.33,-406.32 1860.33,-406.32 1864.17,-406.32 1868,-410.16 1868,-413.99 1868,-413.99 1868,-421.66 1868,-421.66 1868,-425.49 1864.17,-429.32 1860.33,-429.32"/>
<text text-anchor="middle" x="1672.5" y="-414.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/documents&#45;upload/documents&#45;upload.utility.js</text>
</g>
<!-- src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx&#45;&gt;src/components/documents&#45;upload/documents&#45;upload.utility.js -->
<g id="edge6" class="edge">
<title>src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx&#45;&gt;src/components/documents&#45;upload/documents&#45;upload.utility.js</title>
<path fill="none" stroke="#757575" d="M1411.52,-417.82C1429.78,-417.82 1448.34,-417.82 1466.71,-417.82"/>
<polygon fill="#757575" stroke="#757575" points="1466.89,-421.32 1476.89,-417.82 1466.89,-414.32 1466.89,-421.32"/>
</g>
<!-- src/components/documents&#45;upload/documents&#45;upload.utility.js&#45;&gt;src/App/App.container.jsx -->
<g id="edge7" class="edge">
<title>src/components/documents&#45;upload/documents&#45;upload.utility.js&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M1536.74,-429.34C1496.92,-432.45 1453.22,-435.57 1413,-437.82 1156.58,-452.18 1092.32,-457.82 835.5,-457.82 497,-457.82 497,-457.82 497,-457.82 363.95,-457.82 328.14,-442.21 205,-391.82 169.15,-377.15 131.82,-352.23 108.62,-335.4"/>
<polygon fill="#757575" stroke="#757575" points="110.59,-332.5 100.46,-329.39 106.43,-338.14 110.59,-332.5"/>
</g>
<!-- src/components/documents&#45;upload/documents&#45;upload.utility.js&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge8" class="edge">
<title>src/components/documents&#45;upload/documents&#45;upload.utility.js&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M1868.24,-416.33C2121.94,-413.83 2579.29,-407.43 2970,-391.82 3222.69,-381.73 3289.61,-405.33 3538,-357.82 3567.86,-352.11 3600.46,-341.2 3624.81,-332.06"/>
<polygon fill="#757575" stroke="#757575" points="3626.28,-335.25 3634.37,-328.41 3623.78,-328.71 3626.28,-335.25"/>
</g>
<!-- src/components/email&#45;overlay/email&#45;overlay.container.jsx -->
<g id="node10" class="node">
<title>src/components/email&#45;overlay/email&#45;overlay.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2880.83,-308.32C2880.83,-308.32 2536.17,-308.32 2536.17,-308.32 2532.33,-308.32 2528.5,-304.49 2528.5,-300.66 2528.5,-300.66 2528.5,-292.99 2528.5,-292.99 2528.5,-289.16 2532.33,-285.32 2536.17,-285.32 2536.17,-285.32 2880.83,-285.32 2880.83,-285.32 2884.67,-285.32 2888.5,-289.16 2888.5,-292.99 2888.5,-292.99 2888.5,-300.66 2888.5,-300.66 2888.5,-304.49 2884.67,-308.32 2880.83,-308.32"/>
<text text-anchor="middle" x="2708.5" y="-293.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/email&#45;overlay/email&#45;overlay.container.jsx</text>
</g>
<!-- src/components/email&#45;overlay/email&#45;overlay.container.jsx&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge9" class="edge">
<title>src/components/email&#45;overlay/email&#45;overlay.container.jsx&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M2888.75,-300.58C3088.45,-304.77 3404.11,-311.4 3563.48,-314.74"/>
<polygon fill="#757575" stroke="#757575" points="3563.67,-318.25 3573.74,-314.96 3563.82,-311.25 3563.67,-318.25"/>
</g>
<!-- src/utils/RenderTemplate.js -->
<g id="node11" class="node">
<title>src/utils/RenderTemplate.js</title>
<path fill="none" stroke="#ff6c60" d="M3353.83,-208.32C3353.83,-208.32 3190.17,-208.32 3190.17,-208.32 3186.33,-208.32 3182.5,-204.49 3182.5,-200.66 3182.5,-200.66 3182.5,-192.99 3182.5,-192.99 3182.5,-189.16 3186.33,-185.32 3190.17,-185.32 3190.17,-185.32 3353.83,-185.32 3353.83,-185.32 3357.67,-185.32 3361.5,-189.16 3361.5,-192.99 3361.5,-192.99 3361.5,-200.66 3361.5,-200.66 3361.5,-204.49 3357.67,-208.32 3353.83,-208.32"/>
<text text-anchor="middle" x="3272" y="-193.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/utils/RenderTemplate.js</text>
</g>
<!-- src/components/email&#45;overlay/email&#45;overlay.container.jsx&#45;&gt;src/utils/RenderTemplate.js -->
<g id="edge10" class="edge">
<title>src/components/email&#45;overlay/email&#45;overlay.container.jsx&#45;&gt;src/utils/RenderTemplate.js</title>
<path fill="none" stroke="#757575" d="M2774.19,-285.3C2878.91,-266.65 3085.02,-229.94 3196.01,-210.18"/>
<polygon fill="#757575" stroke="#757575" points="3196.89,-213.58 3206.12,-208.38 3195.66,-206.68 3196.89,-213.58"/>
</g>
<!-- src/utils/RenderTemplate.js&#45;&gt;src/App/App.container.jsx -->
<g id="edge44" class="edge">
<title>src/utils/RenderTemplate.js&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M3182.35,-189.41C2897.55,-166.25 1980.14,-96.82 1219.5,-96.82 497,-96.82 497,-96.82 497,-96.82 358.16,-96.82 323.1,-134.82 205,-207.82 163.59,-233.42 123.68,-274.52 102.09,-298.57"/>
<polygon fill="#757575" stroke="#757575" points="99.24,-296.5 95.24,-306.31 104.49,-301.14 99.24,-296.5"/>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx -->
<g id="node13" class="node">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M3530.33,-349.32C3530.33,-349.32 3013.67,-349.32 3013.67,-349.32 3009.83,-349.32 3006,-345.49 3006,-341.66 3006,-341.66 3006,-333.99 3006,-333.99 3006,-330.16 3009.83,-326.32 3013.67,-326.32 3013.67,-326.32 3530.33,-326.32 3530.33,-326.32 3534.17,-326.32 3538,-330.16 3538,-333.99 3538,-333.99 3538,-341.66 3538,-341.66 3538,-345.49 3534.17,-349.32 3530.33,-349.32"/>
<text text-anchor="middle" x="3272" y="-334.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx</text>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx -->
<g id="edge12" class="edge">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.component.jsx&#45;&gt;src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx</title>
<path fill="none" stroke="#757575" d="M2954.15,-337.82C2967.94,-337.82 2981.85,-337.82 2995.75,-337.82"/>
<polygon fill="#757575" stroke="#757575" points="2995.86,-341.32 3005.86,-337.82 2995.86,-334.32 2995.86,-341.32"/>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx&#45;&gt;src/App/App.container.jsx -->
<g id="edge14" class="edge">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M3063.7,-349.33C3044.18,-350.72 3024.71,-352.22 3006,-353.82 2989.96,-355.2 2986.06,-356.73 2970,-357.82 2616.26,-381.87 2527.06,-377.82 2172.5,-377.82 497,-377.82 497,-377.82 497,-377.82 369.61,-377.82 222.33,-349.32 143.1,-331.6"/>
<polygon fill="#757575" stroke="#757575" points="143.84,-328.18 133.32,-329.39 142.3,-335.01 143.84,-328.18"/>
</g>
<!-- src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge15" class="edge">
<title>src/components/jobs&#45;documents&#45;gallery/jobs&#45;documents&#45;gallery.delete.component.jsx&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M3486.55,-326.31C3513.37,-324.86 3539.72,-323.44 3563.52,-322.16"/>
<polygon fill="#757575" stroke="#757575" points="3563.76,-325.65 3573.56,-321.62 3563.38,-318.66 3563.76,-325.65"/>
</g>
<!-- src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx -->
<g id="node14" class="node">
<title>src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2382.83,-71.32C2382.83,-71.32 1960.17,-71.32 1960.17,-71.32 1956.33,-71.32 1952.5,-67.49 1952.5,-63.66 1952.5,-63.66 1952.5,-55.99 1952.5,-55.99 1952.5,-52.16 1956.33,-48.32 1960.17,-48.32 1960.17,-48.32 2382.83,-48.32 2382.83,-48.32 2386.67,-48.32 2390.5,-52.16 2390.5,-55.99 2390.5,-55.99 2390.5,-63.66 2390.5,-63.66 2390.5,-67.49 2386.67,-71.32 2382.83,-71.32"/>
<text text-anchor="middle" x="2171.5" y="-56.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx</text>
</g>
<!-- src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx&#45;&gt;src/App/App.container.jsx -->
<g id="edge16" class="edge">
<title>src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M1952.37,-59.46C1759.62,-59.18 1470.87,-58.82 1219.5,-58.82 497,-58.82 497,-58.82 497,-58.82 366.78,-58.82 313.12,-10.25 205,-82.82 129.02,-133.82 98.83,-248.49 89.25,-296.28"/>
<polygon fill="#757575" stroke="#757575" points="85.8,-295.69 87.38,-306.17 92.68,-296.99 85.8,-295.69"/>
</g>
<!-- src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge17" class="edge">
<title>src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M2390.6,-57.18C2725.09,-56.63 3346.22,-70.48 3538,-175.82 3590.66,-204.75 3631.93,-264.91 3650.98,-296.48"/>
<polygon fill="#757575" stroke="#757575" points="3648.08,-298.46 3656.17,-305.3 3654.11,-294.9 3648.08,-298.46"/>
</g>
<!-- src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx -->
<g id="node15" class="node">
<title>src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2393.83,-228.32C2393.83,-228.32 1949.17,-228.32 1949.17,-228.32 1945.33,-228.32 1941.5,-224.49 1941.5,-220.66 1941.5,-220.66 1941.5,-212.99 1941.5,-212.99 1941.5,-209.16 1945.33,-205.32 1949.17,-205.32 1949.17,-205.32 2393.83,-205.32 2393.83,-205.32 2397.67,-205.32 2401.5,-209.16 2401.5,-212.99 2401.5,-212.99 2401.5,-220.66 2401.5,-220.66 2401.5,-224.49 2397.67,-228.32 2393.83,-228.32"/>
<text text-anchor="middle" x="2171.5" y="-213.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx</text>
</g>
<!-- src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx -->
<g id="node16" class="node">
<title>src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx</title>
<path fill="none" stroke="#ff6c60" d="M2962.33,-208.32C2962.33,-208.32 2454.67,-208.32 2454.67,-208.32 2450.83,-208.32 2447,-204.49 2447,-200.66 2447,-200.66 2447,-192.99 2447,-192.99 2447,-189.16 2450.83,-185.32 2454.67,-185.32 2454.67,-185.32 2962.33,-185.32 2962.33,-185.32 2966.17,-185.32 2970,-189.16 2970,-192.99 2970,-192.99 2970,-200.66 2970,-200.66 2970,-204.49 2966.17,-208.32 2962.33,-208.32"/>
<text text-anchor="middle" x="2708.5" y="-193.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx</text>
</g>
<!-- src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx&#45;&gt;src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx -->
<g id="edge18" class="edge">
<title>src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx&#45;&gt;src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx</title>
<path fill="none" stroke="#757575" d="M2401.72,-208.25C2413.23,-207.82 2424.85,-207.39 2436.47,-206.95"/>
<polygon fill="#757575" stroke="#757575" points="2436.82,-210.44 2446.68,-206.57 2436.56,-203.45 2436.82,-210.44"/>
</g>
<!-- src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx&#45;&gt;src/App/App.container.jsx -->
<g id="edge20" class="edge">
<title>src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M2446.98,-189C2237.91,-183.39 1936.87,-176.82 1673.5,-176.82 497,-176.82 497,-176.82 497,-176.82 345.13,-176.82 177.92,-263.84 113.2,-301.15"/>
<polygon fill="#757575" stroke="#757575" points="111.28,-298.22 104.4,-306.28 114.81,-304.27 111.28,-298.22"/>
</g>
<!-- src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx&#45;&gt;src/utils/RenderTemplate.js -->
<g id="edge21" class="edge">
<title>src/components/shop&#45;template&#45;test&#45;render/shop&#45;template&#45;test&#45;render.component.jsx&#45;&gt;src/utils/RenderTemplate.js</title>
<path fill="none" stroke="#757575" d="M2970.11,-196.82C3042.03,-196.82 3115.71,-196.82 3172.16,-196.82"/>
<polygon fill="#757575" stroke="#757575" points="3172.49,-200.32 3182.49,-196.82 3172.49,-193.32 3172.49,-200.32"/>
</g>
<!-- src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx -->
<g id="node17" class="node">
<title>src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1888.33,-228.32C1888.33,-228.32 1456.67,-228.32 1456.67,-228.32 1452.83,-228.32 1449,-224.49 1449,-220.66 1449,-220.66 1449,-212.99 1449,-212.99 1449,-209.16 1452.83,-205.32 1456.67,-205.32 1456.67,-205.32 1888.33,-205.32 1888.33,-205.32 1892.17,-205.32 1896,-209.16 1896,-212.99 1896,-212.99 1896,-220.66 1896,-220.66 1896,-224.49 1892.17,-228.32 1888.33,-228.32"/>
<text text-anchor="middle" x="1672.5" y="-213.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx</text>
</g>
<!-- src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx&#45;&gt;src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx -->
<g id="edge19" class="edge">
<title>src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx&#45;&gt;src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.component.jsx</title>
<path fill="none" stroke="#757575" d="M1896.2,-216.82C1907.78,-216.82 1919.44,-216.82 1931.08,-216.82"/>
<polygon fill="#757575" stroke="#757575" points="1931.29,-220.32 1941.29,-216.82 1931.29,-213.32 1931.29,-220.32"/>
</g>
<!-- src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx -->
<g id="node18" class="node">
<title>src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1878.33,-148.32C1878.33,-148.32 1466.67,-148.32 1466.67,-148.32 1462.83,-148.32 1459,-144.49 1459,-140.66 1459,-140.66 1459,-132.99 1459,-132.99 1459,-129.16 1462.83,-125.32 1466.67,-125.32 1466.67,-125.32 1878.33,-125.32 1878.33,-125.32 1882.17,-125.32 1886,-129.16 1886,-132.99 1886,-132.99 1886,-140.66 1886,-140.66 1886,-144.49 1882.17,-148.32 1878.33,-148.32"/>
<text text-anchor="middle" x="1672.5" y="-133.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx</text>
</g>
<!-- src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx&#45;&gt;src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx -->
<g id="edge22" class="edge">
<title>src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx&#45;&gt;src/components/shop&#45;template&#45;add/shop&#45;template&#45;add.component.jsx</title>
<path fill="none" stroke="#757575" d="M1747.91,-125.29C1838.44,-111.27 1990.92,-87.64 2085.85,-72.94"/>
<polygon fill="#757575" stroke="#757575" points="2086.65,-76.36 2095.99,-71.37 2085.57,-69.44 2086.65,-76.36"/>
</g>
<!-- src/redux/root.saga.js -->
<g id="node25" class="node">
<title>src/redux/root.saga.js</title>
<path fill="none" stroke="#ff6c60" d="M4082.33,-348.32C4082.33,-348.32 3951.67,-348.32 3951.67,-348.32 3947.83,-348.32 3944,-344.49 3944,-340.66 3944,-340.66 3944,-332.99 3944,-332.99 3944,-329.16 3947.83,-325.32 3951.67,-325.32 3951.67,-325.32 4082.33,-325.32 4082.33,-325.32 4086.17,-325.32 4090,-329.16 4090,-332.99 4090,-332.99 4090,-340.66 4090,-340.66 4090,-344.49 4086.17,-348.32 4082.33,-348.32"/>
<text text-anchor="middle" x="4017" y="-333.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/root.saga.js</text>
</g>
<!-- src/redux/store.js&#45;&gt;src/redux/root.saga.js -->
<g id="edge41" class="edge">
<title>src/redux/store.js&#45;&gt;src/redux/root.saga.js</title>
<path fill="none" stroke="#757575" d="M3908.2,-336.82C3916.48,-336.82 3925.11,-336.82 3933.73,-336.82"/>
<polygon fill="#757575" stroke="#757575" points="3933.82,-340.32 3943.82,-336.82 3933.82,-333.32 3933.82,-340.32"/>
</g>
<!-- src/pages/bills/bills.page.container.jsx -->
<g id="node20" class="node">
<title>src/pages/bills/bills.page.container.jsx</title>
<path fill="none" stroke="#ff6c60" d="M1331.83,-349.32C1331.83,-349.32 1105.17,-349.32 1105.17,-349.32 1101.33,-349.32 1097.5,-345.49 1097.5,-341.66 1097.5,-341.66 1097.5,-333.99 1097.5,-333.99 1097.5,-330.16 1101.33,-326.32 1105.17,-326.32 1105.17,-326.32 1331.83,-326.32 1331.83,-326.32 1335.67,-326.32 1339.5,-330.16 1339.5,-333.99 1339.5,-333.99 1339.5,-341.66 1339.5,-341.66 1339.5,-345.49 1335.67,-349.32 1331.83,-349.32"/>
<text text-anchor="middle" x="1218.5" y="-334.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/pages/bills/bills.page.container.jsx</text>
</g>
<!-- src/pages/bills/bills.page.container.jsx&#45;&gt;src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx -->
<g id="edge24" class="edge">
<title>src/pages/bills/bills.page.container.jsx&#45;&gt;src/components/bill&#45;detail&#45;edit/bill&#45;detail&#45;edit.container.jsx</title>
<path fill="none" stroke="#757575" d="M1339.74,-337.82C1383.69,-337.82 1434.53,-337.82 1483,-337.82"/>
<polygon fill="#757575" stroke="#757575" points="1483.3,-341.32 1493.3,-337.82 1483.3,-334.32 1483.3,-341.32"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/App/App.container.jsx -->
<g id="edge25" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M743.53,-309.33C712.38,-312.79 677.21,-316.12 645,-317.82 481.57,-326.47 290.9,-323.73 179.65,-320.85"/>
<polygon fill="#757575" stroke="#757575" points="179.55,-317.35 169.46,-320.58 179.36,-324.35 179.55,-317.35"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/error&#45;boundary/error&#45;boundary.component.jsx -->
<g id="edge28" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/error&#45;boundary/error&#45;boundary.component.jsx</title>
<path fill="none" stroke="#757575" d="M945.48,-286.31C993.11,-281.32 1049,-275.47 1097.68,-270.37"/>
<polygon fill="#757575" stroke="#757575" points="1098.06,-273.85 1107.64,-269.33 1097.33,-266.89 1098.06,-273.85"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx -->
<g id="edge26" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/bill&#45;enter&#45;modal/bill&#45;enter&#45;modal.container.jsx</title>
<path fill="none" stroke="#757575" d="M871.61,-309.4C909.54,-321.55 970.92,-341.15 1024,-357.82 1073.96,-373.52 1131.25,-391.25 1170.46,-403.34"/>
<polygon fill="#757575" stroke="#757575" points="1169.43,-406.69 1180.02,-406.29 1171.49,-400 1169.43,-406.69"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/email&#45;overlay/email&#45;overlay.container.jsx -->
<g id="edge27" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/components/email&#45;overlay/email&#45;overlay.container.jsx</title>
<path fill="none" stroke="#757575" d="M988.3,-297.74C1328.32,-297.56 2146.7,-297.12 2518.28,-296.92"/>
<polygon fill="#757575" stroke="#757575" points="2518.33,-300.42 2528.33,-296.92 2518.33,-293.42 2518.33,-300.42"/>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/pages/bills/bills.page.container.jsx -->
<g id="edge29" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/pages/bills/bills.page.container.jsx</title>
<path fill="none" stroke="#757575" d="M945.48,-309.34C993.11,-314.33 1049,-320.18 1097.68,-325.28"/>
<polygon fill="#757575" stroke="#757575" points="1097.33,-328.76 1107.64,-326.32 1098.06,-321.8 1097.33,-328.76"/>
</g>
<!-- src/pages/shop&#45;templates/shop&#45;templates.container.js -->
<g id="node22" class="node">
<title>src/pages/shop&#45;templates/shop&#45;templates.container.js</title>
<path fill="none" stroke="#ff6c60" d="M1381.33,-228.32C1381.33,-228.32 1055.67,-228.32 1055.67,-228.32 1051.83,-228.32 1048,-224.49 1048,-220.66 1048,-220.66 1048,-212.99 1048,-212.99 1048,-209.16 1051.83,-205.32 1055.67,-205.32 1055.67,-205.32 1381.33,-205.32 1381.33,-205.32 1385.17,-205.32 1389,-209.16 1389,-212.99 1389,-212.99 1389,-220.66 1389,-220.66 1389,-224.49 1385.17,-228.32 1381.33,-228.32"/>
<text text-anchor="middle" x="1218.5" y="-213.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/pages/shop&#45;templates/shop&#45;templates.container.js</text>
</g>
<!-- src/pages/manage/manage.page.component.jsx&#45;&gt;src/pages/shop&#45;templates/shop&#45;templates.container.js -->
<g id="edge30" class="edge">
<title>src/pages/manage/manage.page.component.jsx&#45;&gt;src/pages/shop&#45;templates/shop&#45;templates.container.js</title>
<path fill="none" stroke="#757575" d="M864.69,-286.25C901.3,-272.24 966.28,-249 1024,-236.82 1036.64,-234.15 1049.82,-231.84 1063.1,-229.83"/>
<polygon fill="#757575" stroke="#757575" points="1063.88,-233.25 1073.27,-228.35 1062.87,-226.32 1063.88,-233.25"/>
</g>
<!-- src/pages/shop&#45;templates/shop&#45;templates.container.js&#45;&gt;src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx -->
<g id="edge32" class="edge">
<title>src/pages/shop&#45;templates/shop&#45;templates.container.js&#45;&gt;src/components/shop&#45;template&#45;editor/shop&#45;template&#45;editor.container.jsx</title>
<path fill="none" stroke="#757575" d="M1389.09,-216.82C1405.27,-216.82 1421.87,-216.82 1438.51,-216.82"/>
<polygon fill="#757575" stroke="#757575" points="1438.88,-220.32 1448.88,-216.82 1438.88,-213.32 1438.88,-220.32"/>
</g>
<!-- src/pages/shop&#45;templates/shop&#45;templates.container.js&#45;&gt;src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx -->
<g id="edge33" class="edge">
<title>src/pages/shop&#45;templates/shop&#45;templates.container.js&#45;&gt;src/components/shop&#45;templates&#45;list/shop&#45;templates&#45;list.container.jsx</title>
<path fill="none" stroke="#757575" d="M1284.74,-205.27C1367.29,-190.67 1509.15,-165.56 1596.2,-150.15"/>
<polygon fill="#757575" stroke="#757575" points="1597.04,-153.56 1606.28,-148.37 1595.82,-146.66 1597.04,-153.56"/>
</g>
<!-- src/redux/application/application.sagas.js -->
<g id="node23" class="node">
<title>src/redux/application/application.sagas.js</title>
<path fill="none" stroke="#ff6c60" d="M4381.83,-502.32C4381.83,-502.32 4135.17,-502.32 4135.17,-502.32 4131.33,-502.32 4127.5,-498.49 4127.5,-494.66 4127.5,-494.66 4127.5,-486.99 4127.5,-486.99 4127.5,-483.16 4131.33,-479.32 4135.17,-479.32 4135.17,-479.32 4381.83,-479.32 4381.83,-479.32 4385.67,-479.32 4389.5,-483.16 4389.5,-486.99 4389.5,-486.99 4389.5,-494.66 4389.5,-494.66 4389.5,-498.49 4385.67,-502.32 4381.83,-502.32"/>
<text text-anchor="middle" x="4258.5" y="-487.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/application/application.sagas.js</text>
</g>
<!-- src/redux/application/application.sagas.js&#45;&gt;src/App/App.container.jsx -->
<g id="edge34" class="edge">
<title>src/redux/application/application.sagas.js&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M4189.87,-502.35C4109.12,-515.08 3969.87,-533.82 3849.5,-533.82 497,-533.82 497,-533.82 497,-533.82 363.85,-533.82 316.76,-539.2 205,-466.82 153.8,-433.66 114.47,-371.21 96.4,-338.7"/>
<polygon fill="#757575" stroke="#757575" points="99.32,-336.75 91.48,-329.63 93.17,-340.09 99.32,-336.75"/>
</g>
<!-- src/redux/messaging/messaging.sagas.js -->
<g id="node24" class="node">
<title>src/redux/messaging/messaging.sagas.js</title>
<path fill="none" stroke="#ff6c60" d="M4383.33,-270.32C4383.33,-270.32 4133.67,-270.32 4133.67,-270.32 4129.83,-270.32 4126,-266.49 4126,-262.66 4126,-262.66 4126,-254.99 4126,-254.99 4126,-251.16 4129.83,-247.32 4133.67,-247.32 4133.67,-247.32 4383.33,-247.32 4383.33,-247.32 4387.17,-247.32 4391,-251.16 4391,-254.99 4391,-254.99 4391,-262.66 4391,-262.66 4391,-266.49 4387.17,-270.32 4383.33,-270.32"/>
<text text-anchor="middle" x="4258.5" y="-255.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/messaging/messaging.sagas.js</text>
</g>
<!-- src/redux/messaging/messaging.sagas.js&#45;&gt;src/App/App.container.jsx -->
<g id="edge35" class="edge">
<title>src/redux/messaging/messaging.sagas.js&#45;&gt;src/App/App.container.jsx</title>
<path fill="none" stroke="#757575" d="M4247.47,-247.29C4204.73,-199.55 4031.74,-19.82 3849.5,-19.82 497,-19.82 497,-19.82 497,-19.82 366.92,-19.82 311.13,35.4 205,-39.82 117.37,-101.93 93.49,-242.16 87.43,-296.11"/>
<polygon fill="#757575" stroke="#757575" points="83.92,-295.94 86.39,-306.25 90.89,-296.66 83.92,-295.94"/>
</g>
<!-- src/redux/messaging/messaging.sagas.js&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge36" class="edge">
<title>src/redux/messaging/messaging.sagas.js&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M4139.71,-270.34C4029.58,-281.11 3866.99,-297.02 3763.42,-307.15"/>
<polygon fill="#757575" stroke="#757575" points="3762.89,-303.68 3753.28,-308.14 3763.57,-310.65 3762.89,-303.68"/>
</g>
<!-- src/redux/root.saga.js&#45;&gt;src/redux/application/application.sagas.js -->
<g id="edge37" class="edge">
<title>src/redux/root.saga.js&#45;&gt;src/redux/application/application.sagas.js</title>
<path fill="none" stroke="#757575" d="M4036,-348.4C4077.79,-375.26 4181.53,-441.97 4230.76,-473.63"/>
<polygon fill="#757575" stroke="#757575" points="4228.99,-476.65 4239.29,-479.11 4232.77,-470.76 4228.99,-476.65"/>
</g>
<!-- src/redux/root.saga.js&#45;&gt;src/redux/messaging/messaging.sagas.js -->
<g id="edge38" class="edge">
<title>src/redux/root.saga.js&#45;&gt;src/redux/messaging/messaging.sagas.js</title>
<path fill="none" stroke="#757575" d="M4047.59,-325.19C4069.18,-316.88 4099.22,-305.64 4126,-296.82 4151.79,-288.33 4180.75,-279.85 4204.92,-273.06"/>
<polygon fill="#757575" stroke="#757575" points="4205.93,-276.42 4214.62,-270.36 4204.04,-269.67 4205.93,-276.42"/>
</g>
<!-- src/redux/tech/tech.sagas.js -->
<g id="node26" class="node">
<title>src/redux/tech/tech.sagas.js</title>
<path fill="none" stroke="#ff6c60" d="M4342.83,-379.32C4342.83,-379.32 4174.17,-379.32 4174.17,-379.32 4170.33,-379.32 4166.5,-375.49 4166.5,-371.66 4166.5,-371.66 4166.5,-363.99 4166.5,-363.99 4166.5,-360.16 4170.33,-356.32 4174.17,-356.32 4174.17,-356.32 4342.83,-356.32 4342.83,-356.32 4346.67,-356.32 4350.5,-360.16 4350.5,-363.99 4350.5,-363.99 4350.5,-371.66 4350.5,-371.66 4350.5,-375.49 4346.67,-379.32 4342.83,-379.32"/>
<text text-anchor="middle" x="4258.5" y="-364.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/tech/tech.sagas.js</text>
</g>
<!-- src/redux/root.saga.js&#45;&gt;src/redux/tech/tech.sagas.js -->
<g id="edge39" class="edge">
<title>src/redux/root.saga.js&#45;&gt;src/redux/tech/tech.sagas.js</title>
<path fill="none" stroke="#757575" d="M4090.18,-346.17C4111.66,-348.94 4135.57,-352.04 4158.45,-355"/>
<polygon fill="#757575" stroke="#757575" points="4158.16,-358.49 4168.52,-356.3 4159.05,-351.55 4158.16,-358.49"/>
</g>
<!-- src/redux/user/user.sagas.js -->
<g id="node27" class="node">
<title>src/redux/user/user.sagas.js</title>
<path fill="none" stroke="#ff6c60" d="M4343.33,-329.32C4343.33,-329.32 4173.67,-329.32 4173.67,-329.32 4169.83,-329.32 4166,-325.49 4166,-321.66 4166,-321.66 4166,-313.99 4166,-313.99 4166,-310.16 4169.83,-306.32 4173.67,-306.32 4173.67,-306.32 4343.33,-306.32 4343.33,-306.32 4347.17,-306.32 4351,-310.16 4351,-313.99 4351,-313.99 4351,-321.66 4351,-321.66 4351,-325.49 4347.17,-329.32 4343.33,-329.32"/>
<text text-anchor="middle" x="4258.5" y="-314.12" font-family="Arial" font-size="14.00" fill="#ff6c60">src/redux/user/user.sagas.js</text>
</g>
<!-- src/redux/root.saga.js&#45;&gt;src/redux/user/user.sagas.js -->
<g id="edge40" class="edge">
<title>src/redux/root.saga.js&#45;&gt;src/redux/user/user.sagas.js</title>
<path fill="none" stroke="#757575" d="M4090.18,-331.1C4110.85,-329.46 4133.77,-327.64 4155.84,-325.89"/>
<polygon fill="#757575" stroke="#757575" points="4156.23,-329.37 4165.92,-325.09 4155.67,-322.39 4156.23,-329.37"/>
</g>
<!-- src/redux/tech/tech.sagas.js&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge42" class="edge">
<title>src/redux/tech/tech.sagas.js&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M4166.08,-373.37C4071.11,-377.34 3918.56,-378.69 3789,-356.82 3759.09,-351.78 3726.5,-341.1 3702.16,-332.05"/>
<polygon fill="#757575" stroke="#757575" points="3703.19,-328.7 3692.6,-328.42 3700.71,-335.24 3703.19,-328.7"/>
</g>
<!-- src/redux/user/user.sagas.js&#45;&gt;src/firebase/firebase.utils.js -->
<g id="edge43" class="edge">
<title>src/redux/user/user.sagas.js&#45;&gt;src/firebase/firebase.utils.js</title>
<path fill="none" stroke="#757575" d="M4165.79,-316.53C4141.17,-316.24 4114.57,-315.97 4090,-315.82 3956.22,-315.02 3922.78,-315.28 3789,-315.82 3780.69,-315.86 3772.06,-315.9 3763.41,-315.96"/>
<polygon fill="#757575" stroke="#757575" points="3763.23,-312.46 3753.25,-316.02 3763.28,-319.46 3763.23,-312.46"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -11,11 +11,7 @@
"@tinymce/tinymce-react": "^3.7.0",
"antd": "^4.6.6",
"apollo-boost": "^0.4.9",
"apollo-link-context": "^1.0.20",
"apollo-link-error": "^1.1.13",
"apollo-link-logger": "^2.0.0",
"apollo-link-retry": "^2.2.16",
"apollo-link-ws": "^1.0.20",
"axios": "^0.20.0",
"codemirror": "^5.58.1",
"codemirror-graphql": "^0.12.2",
@@ -45,7 +41,6 @@
"react-email-editor": "^1.1.1",
"react-ga": "^3.1.2",
"react-grid-gallery": "^0.5.5",
"react-grid-layout": "^1.1.1",
"react-i18next": "^11.7.3",
"react-icons": "^3.11.0",
"react-moment": "^1.0.0",
@@ -70,7 +65,8 @@
"start": "react-scripts start",
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
"eject": "react-scripts eject",
"madge": "madge --image ./madge-graph.svg --extensions js,jsx,ts,tsx --circular ."
},
"eslintConfig": {
"extends": "react-app"

BIN
client/public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" href="%PUBLIC_URL%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#002366" />
<meta
@@ -10,7 +10,7 @@
content="Web site created using create-react-app"
/>
<!-- <link rel="apple-touch-icon" href="logo192.png" /> -->
<link rel="apple-touch-icon" href="logo240.png" />
<link rel="apple-touch-icon" href="logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a

View File

@@ -9,7 +9,7 @@
"type": "image/x-icon"
},
{
"src": "logo240.png",
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},

View File

@@ -5,11 +5,11 @@ import { ApolloLink } from "apollo-boost";
import { InMemoryCache } from "apollo-cache-inmemory";
import ApolloClient from "apollo-client";
import { split } from "apollo-link";
import { setContext } from "apollo-link-context";
import { HttpLink } from "apollo-link-http";
import { setContext } from "@apollo/client/link/context";
import { HttpLink } from "@apollo/client/link/http"; //"apollo-link-http";
import apolloLogger from "apollo-link-logger";
import { RetryLink } from "apollo-link-retry";
import { WebSocketLink } from "apollo-link-ws";
import { RetryLink } from "@apollo/client/link/retry";
import { WebSocketLink } from "@apollo/client/link/ws";
import { getMainDefinition } from "apollo-utilities";
import axios from "axios";
import LogRocket from "logrocket";

View File

@@ -1,4 +1,5 @@
//Global Styles.
@import "react-big-calendar/lib/sass/styles";
.imex-table-header {
display: flex;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -1,185 +1,185 @@
import Icon from "@ant-design/icons";
import { Button, Dropdown, Menu, notification } from "antd";
import React, { useState } from "react";
import { useMutation, useQuery } from "react-apollo";
import { Responsive, WidthProvider } from "react-grid-layout";
import { useTranslation } from "react-i18next";
import { MdClose } from "react-icons/md";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { QUERY_DASHBOARD_DETAILS } from "../../graphql/bodyshop.queries";
import { UPDATE_DASHBOARD_LAYOUT } from "../../graphql/user.queries";
import {
selectBodyshop,
selectCurrentUser,
} from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";
import DashboardMonthlyRevenueGraph from "../dashboard-components/monthly-revenue-graph/monthly-revenue-graph.component";
import DashboardProjectedMonthlySales from "../dashboard-components/pojected-monthly-sales/projected-monthly-sales.component";
import DashboardTotalProductionDollars from "../dashboard-components/total-production-dollars/total-production-dollars.component";
import DashboardTotalProductionHours from "../dashboard-components/total-production-hours/total-production-hours.component";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
//Combination of the following:
// /node_modules/react-grid-layout/css/styles.css
// /node_modules/react-resizable/css/styles.css
import "./dashboard-grid.styles.css";
import "./dashboard-grid.styles.scss";
// import Icon from "@ant-design/icons";
// import { Button, Dropdown, Menu, notification } from "antd";
// import React, { useState } from "react";
// import { useMutation, useQuery } from "react-apollo";
// import { Responsive, WidthProvider } from "react-grid-layout";
// import { useTranslation } from "react-i18next";
// import { MdClose } from "react-icons/md";
// import { connect } from "react-redux";
// import { createStructuredSelector } from "reselect";
// import { logImEXEvent } from "../../firebase/firebase.utils";
// import { QUERY_DASHBOARD_DETAILS } from "../../graphql/bodyshop.queries";
// import { UPDATE_DASHBOARD_LAYOUT } from "../../graphql/user.queries";
// import {
// selectBodyshop,
// selectCurrentUser,
// } from "../../redux/user/user.selectors";
// import AlertComponent from "../alert/alert.component";
// import DashboardMonthlyRevenueGraph from "../dashboard-components/monthly-revenue-graph/monthly-revenue-graph.component";
// import DashboardProjectedMonthlySales from "../dashboard-components/pojected-monthly-sales/projected-monthly-sales.component";
// import DashboardTotalProductionDollars from "../dashboard-components/total-production-dollars/total-production-dollars.component";
// import DashboardTotalProductionHours from "../dashboard-components/total-production-hours/total-production-hours.component";
// import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
// //Combination of the following:
// // /node_modules/react-grid-layout/css/styles.css
// // /node_modules/react-resizable/css/styles.css
// import "./dashboard-grid.styles.css";
// import "./dashboard-grid.styles.scss";
const ResponsiveReactGridLayout = WidthProvider(Responsive);
// const ResponsiveReactGridLayout = WidthProvider(Responsive);
const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser,
bodyshop: selectBodyshop,
});
const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
// const mapStateToProps = createStructuredSelector({
// currentUser: selectCurrentUser,
// bodyshop: selectBodyshop,
// });
// const mapDispatchToProps = (dispatch) => ({
// //setUserLanguage: language => dispatch(setUserLanguage(language))
// });
export function DashboardGridComponent({ currentUser, bodyshop }) {
const { loading, error, data } = useQuery(QUERY_DASHBOARD_DETAILS);
const { t } = useTranslation();
const [state, setState] = useState({
layout: bodyshop.associations[0].user.dashboardlayout || [
{ i: "ProductionDollars", x: 0, y: 0, w: 2, h: 2 },
// { i: "ProductionHours", x: 2, y: 0, w: 2, h: 2 },
],
});
const [updateLayout] = useMutation(UPDATE_DASHBOARD_LAYOUT);
// export function DashboardGridComponent({ currentUser, bodyshop }) {
// const { loading, error, data } = useQuery(QUERY_DASHBOARD_DETAILS);
// const { t } = useTranslation();
// const [state, setState] = useState({
// layout: bodyshop.associations[0].user.dashboardlayout || [
// { i: "ProductionDollars", x: 0, y: 0, w: 2, h: 2 },
// // { i: "ProductionHours", x: 2, y: 0, w: 2, h: 2 },
// ],
// });
// const [updateLayout] = useMutation(UPDATE_DASHBOARD_LAYOUT);
const handleLayoutChange = async (newLayout) => {
logImEXEvent("dashboard_change_layout");
setState({ ...state, layout: newLayout });
const result = await updateLayout({
variables: { email: currentUser.email, layout: newLayout },
});
// const handleLayoutChange = async (newLayout) => {
// logImEXEvent("dashboard_change_layout");
// setState({ ...state, layout: newLayout });
// const result = await updateLayout({
// variables: { email: currentUser.email, layout: newLayout },
// });
if (!!result.errors) {
notification["error"]({
message: t("dashboard.errors.updatinglayout", {
message: JSON.stringify(result.errors),
}),
});
}
};
// if (!!result.errors) {
// notification["error"]({
// message: t("dashboard.errors.updatinglayout", {
// message: JSON.stringify(result.errors),
// }),
// });
// }
// };
const handleRemoveComponent = (key) => {
logImEXEvent("dashboard_remove_component", { name: key });
// const handleRemoveComponent = (key) => {
// logImEXEvent("dashboard_remove_component", { name: key });
const idxToRemove = state.layout.findIndex((i) => i.i === key);
const newLayout = state.layout;
newLayout.splice(idxToRemove, 1);
handleLayoutChange(newLayout);
};
// const idxToRemove = state.layout.findIndex((i) => i.i === key);
// const newLayout = state.layout;
// newLayout.splice(idxToRemove, 1);
// handleLayoutChange(newLayout);
// };
const handleAddComponent = (e) => {
logImEXEvent("dashboard_add_component", { name: e });
// const handleAddComponent = (e) => {
// logImEXEvent("dashboard_add_component", { name: e });
handleLayoutChange([
...state.layout,
{
i: e.key,
x: (state.layout.length * 2) % (state.cols || 12),
y: Infinity, // puts it at the bottom
w: componentList[e.key].w || 2,
h: componentList[e.key].h || 2,
},
]);
};
// handleLayoutChange([
// ...state.layout,
// {
// i: e.key,
// x: (state.layout.length * 2) % (state.cols || 12),
// y: Infinity, // puts it at the bottom
// w: componentList[e.key].w || 2,
// h: componentList[e.key].h || 2,
// },
// ]);
// };
const onBreakpointChange = (breakpoint, cols) => {
setState({ ...state, breakpoint: breakpoint, cols: cols });
};
// const onBreakpointChange = (breakpoint, cols) => {
// setState({ ...state, breakpoint: breakpoint, cols: cols });
// };
const existingLayoutKeys = state.layout.map((i) => i.i);
const addComponentOverlay = (
<Menu onClick={handleAddComponent}>
{Object.keys(componentList).map((key) => (
<Menu.Item
key={key}
value={key}
disabled={existingLayoutKeys.includes(key)}
>
{componentList[key].label}
</Menu.Item>
))}
</Menu>
);
// const existingLayoutKeys = state.layout.map((i) => i.i);
// const addComponentOverlay = (
// <Menu onClick={handleAddComponent}>
// {Object.keys(componentList).map((key) => (
// <Menu.Item
// key={key}
// value={key}
// disabled={existingLayoutKeys.includes(key)}
// >
// {componentList[key].label}
// </Menu.Item>
// ))}
// </Menu>
// );
if (error) return <AlertComponent message={error.message} type="error" />;
// if (error) return <AlertComponent message={error.message} type="error" />;
return (
<div>
<Dropdown overlay={addComponentOverlay} trigger={["click"]}>
<Button>{t("dashboard.actions.addcomponent")}</Button>
</Dropdown>
<ResponsiveReactGridLayout
className="layout"
breakpoints={{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}
cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}
width="100%"
onLayoutChange={handleLayoutChange}
onBreakpointChange={onBreakpointChange}
>
{state.layout.map((item, index) => {
const TheComponent = componentList[item.i].component;
return (
<div key={item.i} data-grid={item}>
<LoadingSkeleton loading={loading}>
<Icon
component={MdClose}
key={item.i}
style={{
position: "absolute",
zIndex: "2",
right: ".25rem",
top: ".25rem",
cursor: "pointer",
}}
onClick={() => handleRemoveComponent(item.i)}
/>
<TheComponent
className="dashboard-card"
size="small"
style={{ height: "100%", width: "100%" }}
/>
</LoadingSkeleton>
</div>
);
})}
</ResponsiveReactGridLayout>
</div>
);
}
// return (
// <div>
// <Dropdown overlay={addComponentOverlay} trigger={["click"]}>
// <Button>{t("dashboard.actions.addcomponent")}</Button>
// </Dropdown>
// <ResponsiveReactGridLayout
// className="layout"
// breakpoints={{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}
// cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}
// width="100%"
// onLayoutChange={handleLayoutChange}
// onBreakpointChange={onBreakpointChange}
// >
// {state.layout.map((item, index) => {
// const TheComponent = componentList[item.i].component;
// return (
// <div key={item.i} data-grid={item}>
// <LoadingSkeleton loading={loading}>
// <Icon
// component={MdClose}
// key={item.i}
// style={{
// position: "absolute",
// zIndex: "2",
// right: ".25rem",
// top: ".25rem",
// cursor: "pointer",
// }}
// onClick={() => handleRemoveComponent(item.i)}
// />
// <TheComponent
// className="dashboard-card"
// size="small"
// style={{ height: "100%", width: "100%" }}
// />
// </LoadingSkeleton>
// </div>
// );
// })}
// </ResponsiveReactGridLayout>
// </div>
// );
// }
export default connect(
mapStateToProps,
mapDispatchToProps
)(DashboardGridComponent);
// export default connect(
// mapStateToProps,
// mapDispatchToProps
// )(DashboardGridComponent);
const componentList = {
ProductionDollars: {
label: "Production Dollars",
component: DashboardTotalProductionDollars,
w: 2,
h: 1,
},
ProductionHours: {
label: "Production Hours",
component: DashboardTotalProductionHours,
w: 2,
h: 1,
},
ProjectedMonthlySales: {
label: "Projected Monthly Sales",
component: DashboardProjectedMonthlySales,
w: 2,
h: 1,
},
MonthlyRevenueGraph: {
label: "Monthly Sales Graph",
component: DashboardMonthlyRevenueGraph,
w: 2,
h: 2,
},
};
// const componentList = {
// ProductionDollars: {
// label: "Production Dollars",
// component: DashboardTotalProductionDollars,
// w: 2,
// h: 1,
// },
// ProductionHours: {
// label: "Production Hours",
// component: DashboardTotalProductionHours,
// w: 2,
// h: 1,
// },
// ProjectedMonthlySales: {
// label: "Projected Monthly Sales",
// component: DashboardProjectedMonthlySales,
// w: 2,
// h: 1,
// },
// MonthlyRevenueGraph: {
// label: "Monthly Sales Graph",
// component: DashboardMonthlyRevenueGraph,
// w: 2,
// h: 2,
// },
// };

View File

@@ -1,6 +1,4 @@
@import "react-big-calendar/lib/sass/styles";
.rbc-time-header-cell-single-day {
Ø.rbc-time-header-cell-single-day {
display: unset;
}
.rbc-time-view .rbc-allday-cell {

View File

@@ -7,15 +7,15 @@ import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link, Redirect, useLocation } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import ImEXOnlineLogo from "../../assets/logo240.png";
import ImEXOnlineLogo from "../../assets/logo192.png";
import { UPSERT_USER } from "../../graphql/user.queries";
import {
emailSignInStart,
sendPasswordReset
sendPasswordReset,
} from "../../redux/user/user.actions";
import {
selectCurrentUser,
selectSignInError
selectSignInError,
} from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";
import "./sign-in-form.styles.scss";
@@ -66,37 +66,39 @@ export function SignInComponent({
return <Redirect to={redirect || "/manage"} />;
return (
<div className='login-container'>
<div className='login-logo-container'>
<img src={ImEXOnlineLogo} height='100' width='100' alt='ImEX Online' />
<div className="login-container">
<div className="login-logo-container">
<img src={ImEXOnlineLogo} height="100" width="100" alt="ImEX Online" />
<Typography.Title>{t("titles.app")}</Typography.Title>
</div>
<Form onFinish={handleFinish} form={form} size='large'>
<Form onFinish={handleFinish} form={form} size="large">
<Form.Item
name='email'
name="email"
rules={[
{ required: true, message: t("general.validation.required") },
]}>
]}
>
<Input
prefix={<UserOutlined />}
placeholder={t("general.labels.username")}
/>
</Form.Item>
<Form.Item
name='password'
name="password"
rules={[
{ required: true, message: t("general.validation.required") },
]}>
]}
>
<Input
prefix={<LockOutlined />}
type='password'
type="password"
placeholder={t("general.labels.password")}
/>
</Form.Item>
{signInError ? (
<AlertComponent type='error' message={signInError.message} />
<AlertComponent type="error" message={signInError.message} />
) : null}
<Button className='login-btn' type='primary' htmlType='submit'>
<Button className="login-btn" type="primary" htmlType="submit">
{t("general.actions.login")}
</Button>
</Form>

View File

@@ -3,7 +3,7 @@ import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import ImEXOnlineLogo from "../../assets/logo240.png";
import ImEXOnlineLogo from "../../assets/logo192.png";
import { sendPasswordReset } from "../../redux/user/user.actions";
import { selectPasswordReset } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";

View File

@@ -5,7 +5,7 @@ import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import ImEXOnlineLogo from "../../assets/logo240.png";
import ImEXOnlineLogo from "../../assets/logo192.png";
import { validatePasswordResetStart } from "../../redux/user/user.actions";
import { selectPasswordReset } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";

File diff suppressed because it is too large Load Diff

View File

@@ -47,7 +47,7 @@ exports.testResponse = async (req, res) => {
// renotify: true,
//tag: "1234", image: "/logo192.png",
badge: "/logo240.png",
badge: "/logo192.png",
//badge: "/badge-icon.png",
},
},