Removed circular dependencies from project.

This commit is contained in:
Patrick Fic
2020-10-07 10:25:51 -07:00
parent b6f2ad3cf0
commit ac86659202
14 changed files with 169 additions and 764 deletions

View File

@@ -4,436 +4,10 @@
<!-- 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)">
<svg width="43pt" height="43pt"
viewBox="0.00 0.00 43.20 43.20" 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 21.6)">
<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>
<polygon fill="#111111" stroke="transparent" points="-21.6,21.6 -21.6,-21.6 21.6,-21.6 21.6,21.6 -21.6,21.6"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 613 B

View File

@@ -1,160 +1,16 @@
import { ApolloProvider } from "@apollo/react-common";
import { ConfigProvider } from "antd";
import enLocale from "antd/es/locale/en_US";
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/client/link/context";
import { HttpLink } from "@apollo/client/link/http"; //"apollo-link-http";
import apolloLogger from "apollo-link-logger";
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";
import moment from "moment";
import React from "react";
import GlobalLoadingBar from "../components/global-loading-bar/global-loading-bar.component";
import { auth } from "../firebase/firebase.utils";
import errorLink from "../graphql/apollo-error-handling";
import client from "../utils/GraphQLClient";
import App from "./App";
moment.locale("en-US");
//if (process.env.NODE_ENV === "prodution")
axios.defaults.baseURL =
process.env.REACT_APP_AXIOS_BASE_API_URL || "https://api.imex.online/";
console.log(
" process.env.REACT_APP_AXIOS_BASE_API_URL ",
process.env.REACT_APP_AXIOS_BASE_API_URL
);
export const axiosAuthInterceptorId = axios.interceptors.request.use(
async (config) => {
if (!config.headers.Authorization) {
const token =
auth.currentUser && (await auth.currentUser.getIdToken(true));
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
}
return config;
},
(error) => Promise.reject(error)
);
export const cleanAxios = axios.create();
cleanAxios.interceptors.request.eject(axiosAuthInterceptorId);
if (process.env.NODE_ENV === "production") LogRocket.init("gvfvfw/bodyshopapp");
const httpLink = new HttpLink({
uri: process.env.REACT_APP_GRAPHQL_ENDPOINT,
});
const wsLink = new WebSocketLink({
uri: process.env.REACT_APP_GRAPHQL_ENDPOINT_WS,
options: {
lazy: true,
reconnect: true,
connectionParams: async () => {
const token =
auth.currentUser && (await auth.currentUser.getIdToken(true));
if (token) {
return {
headers: {
authorization: token ? `Bearer ${token}` : "",
},
};
}
},
},
});
const subscriptionMiddleware = {
applyMiddleware: async (options, next) => {
options.authToken =
auth.currentUser && (await auth.currentUser.getIdToken(true));
next();
},
};
wsLink.subscriptionClient.use([subscriptionMiddleware]);
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
// console.log(
// "##Intercepted GQL Transaction : " +
// definition.operation +
// "|" +
// definition.name.value +
// "##",
// query
// );
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
httpLink
);
const authLink = setContext((_, { headers }) => {
return (
auth.currentUser &&
auth.currentUser.getIdToken().then((token) => {
if (token) {
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : "",
},
};
} else {
return { headers };
}
})
);
});
const retryLink = new RetryLink({
delay: {
initial: 500,
max: 5,
jitter: true,
},
attempts: {
max: 5,
retryIf: (error, _operation) => !!error,
},
});
const middlewares = [];
if (process.env.NODE_ENV === "development") {
middlewares.push(apolloLogger);
}
middlewares.push(retryLink.concat(errorLink.concat(authLink.concat(link))));
const cache = new InMemoryCache({});
export const client = new ApolloClient({
link: ApolloLink.from(middlewares),
cache,
connectToDevTools: process.env.NODE_ENV !== "production",
defaultOptions: {
query: {
fetchPolicy: "network-only",
},
watchQuery: {
fetchPolicy: "network-only",
},
},
});
export default function AppContainer() {
return (
<ApolloProvider client={client}>

View File

@@ -1,7 +1,7 @@
import { notification } from "antd";
import axios from "axios";
import i18n from "i18next";
import { axiosAuthInterceptorId, client } from "../../App/App.container";
import client, { axiosAuthInterceptorId } from "../../utils/CleanAxios";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { INSERT_NEW_DOCUMENT } from "../../graphql/documents.queries";
//Context: currentUserEmail, bodyshop, jobid, invoiceid

View File

@@ -4,9 +4,9 @@ import { Button, notification, Popconfirm } from "antd";
import axios from "axios";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { cleanAxios } from "../../App/App.container";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { DELETE_DOCUMENT } from "../../graphql/documents.queries";
import cleanAxios from "../../utils/CleanAxios";
//Context: currentUserEmail, bodyshop, jobid, invoiceid
export default function JobsDocumentsDeleteButton({

View File

@@ -14,7 +14,7 @@ import {
import { selectBodyshop } from "../../redux/user/user.selectors";
import { TemplateList } from "../../utils/TemplateConstants";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { client } from "../../App/App.container";
import client from "../../utils/GraphQLClient";
const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser

View File

@@ -8,7 +8,7 @@ import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { client } from "../../App/App.container";
import client from "../../utils/GraphQLClient";
import { selectBodyshop } from "../../redux/user/user.selectors";
import { displayTemplateInWindowNoprint } from "../../utils/RenderTemplate";

View File

@@ -1,10 +1,10 @@
import "firebase/analytics";
import firebase from "firebase/app";
import "firebase/firestore";
import "firebase/auth";
import "firebase/database";
import "firebase/analytics";
import "firebase/firestore";
import "firebase/messaging";
import { store } from "../redux/store";
//import { store } from "../redux/store";
const config = JSON.parse(process.env.REACT_APP_FIREBASE_CONFIG);
firebase.initializeApp(config);
@@ -48,14 +48,14 @@ try {
export { messaging };
export const logImEXEvent = (eventName, additionalParams, stateProp = null) => {
const state = stateProp || store.getState();
// const state = stateProp || store.getState();
const eventParams = {
shop:
(state.user && state.user.bodyshop && state.user.bodyshop.shopname) ||
null,
user:
(state.user && state.user.currentUser && state.user.currentUser.email) ||
null,
// shop:
// (state.user && state.user.bodyshop && state.user.bodyshop.shopname) ||
// null,
// user:
// (state.user && state.user.currentUser && state.user.currentUser.email) ||
// null,
...additionalParams,
};
analytics.logEvent(eventName, eventParams);

View File

@@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Route, Switch } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import { client } from "../../App/App.container";
import client from "../../utils/GraphQLClient";
import BreadCrumbs from "../../components/breadcrumbs/breadcrumbs.component";
import ChatAffixContainer from "../../components/chat-affix/chat-affix.container";
import ConflictComponent from "../../components/conflict/conflict.component";

View File

@@ -1,6 +1,6 @@
import { all, takeLatest, call, put } from "redux-saga/effects";
import ApplicationActionTypes from "./application.types";
import { client } from "../../App/App.container";
import client from "../../utils/GraphQLClient";
import { QUERY_SCHEDULE_LOAD_DATA } from "../../graphql/appointments.queries";
import {
scheduleLoadFailure,

View File

@@ -1,7 +1,7 @@
import axios from "axios";
import phone from "phone";
import { all, call, put, select, takeLatest } from "redux-saga/effects";
import { client } from "../../App/App.container";
import client from "../../utils/GraphQLClient";
import { logImEXEvent } from "../../firebase/firebase.utils";
import {
CONVERSATION_ID_BY_PHONE,

View File

@@ -0,0 +1,27 @@
import axios from "axios";
import { auth } from "../firebase/firebase.utils";
if (process.env.NODE_ENV === "prodution") {
axios.defaults.baseURL =
process.env.REACT_APP_AXIOS_BASE_API_URL || "https://api.imex.online/";
}
export const axiosAuthInterceptorId = axios.interceptors.request.use(
async (config) => {
if (!config.headers.Authorization) {
const token =
auth.currentUser && (await auth.currentUser.getIdToken(true));
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
}
return config;
},
(error) => Promise.reject(error)
);
const cleanAxios = axios.create();
cleanAxios.interceptors.request.eject(axiosAuthInterceptorId);
export default cleanAxios;

View File

@@ -0,0 +1,118 @@
import { setContext } from "@apollo/client/link/context";
import { HttpLink } from "@apollo/client/link/http"; //"apollo-link-http";
import { RetryLink } from "@apollo/client/link/retry";
import { WebSocketLink } from "@apollo/client/link/ws";
import { ApolloLink } from "apollo-boost";
import { InMemoryCache } from "apollo-cache-inmemory";
import ApolloClient from "apollo-client";
import { split } from "apollo-link";
import apolloLogger from "apollo-link-logger";
import { getMainDefinition } from "apollo-utilities";
import { auth } from "../firebase/firebase.utils";
import errorLink from "../graphql/apollo-error-handling";
const httpLink = new HttpLink({
uri: process.env.REACT_APP_GRAPHQL_ENDPOINT,
});
const wsLink = new WebSocketLink({
uri: process.env.REACT_APP_GRAPHQL_ENDPOINT_WS,
options: {
lazy: true,
reconnect: true,
connectionParams: async () => {
const token =
auth.currentUser && (await auth.currentUser.getIdToken(true));
if (token) {
return {
headers: {
authorization: token ? `Bearer ${token}` : "",
},
};
}
},
},
});
const subscriptionMiddleware = {
applyMiddleware: async (options, next) => {
options.authToken =
auth.currentUser && (await auth.currentUser.getIdToken(true));
next();
},
};
wsLink.subscriptionClient.use([subscriptionMiddleware]);
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
// console.log(
// "##Intercepted GQL Transaction : " +
// definition.operation +
// "|" +
// definition.name.value +
// "##",
// query
// );
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
httpLink
);
const authLink = setContext((_, { headers }) => {
return (
auth.currentUser &&
auth.currentUser.getIdToken().then((token) => {
if (token) {
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : "",
},
};
} else {
return { headers };
}
})
);
});
const retryLink = new RetryLink({
delay: {
initial: 500,
max: 5,
jitter: true,
},
attempts: {
max: 5,
retryIf: (error, _operation) => !!error,
},
});
const middlewares = [];
if (process.env.NODE_ENV === "development") {
middlewares.push(apolloLogger);
}
middlewares.push(retryLink.concat(errorLink.concat(authLink.concat(link))));
const cache = new InMemoryCache({});
export default new ApolloClient({
link: ApolloLink.from(middlewares),
cache,
connectToDevTools: process.env.NODE_ENV !== "production",
defaultOptions: {
query: {
fetchPolicy: "network-only",
},
watchQuery: {
fetchPolicy: "network-only",
},
},
});

View File

@@ -1,7 +1,7 @@
import axios from "axios";
import gql from "graphql-tag";
import { QUERY_TEMPLATES_BY_NAME } from "../graphql/templates.queries";
import axios from "axios";
import { client } from "../App/App.container";
import client from "../utils/GraphQLClient";
export default async function RenderTemplate(templateObject, bodyshop) {
const { data: templateRecords } = await client.query({

View File

@@ -1,170 +0,0 @@
/* eslint no-fallthrough: off */
import * as dates from "date-arithmetic";
export {
milliseconds,
seconds,
minutes,
hours,
month,
startOf,
endOf,
add,
eq,
gte,
gt,
lte,
lt,
inRange,
min,
max
} from "date-arithmetic";
const MILLI = {
seconds: 1000,
minutes: 1000 * 60,
hours: 1000 * 60 * 60,
day: 1000 * 60 * 60 * 24
};
const MONTHS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
export function monthsInYear(year) {
let date = new Date(year, 0, 1);
return MONTHS.map(i => dates.month(date, i));
}
export function firstVisibleDay(date, localizer) {
let firstOfMonth = dates.startOf(date, "month");
return dates.startOf(firstOfMonth, "week", localizer.startOfWeek());
}
export function lastVisibleDay(date, localizer) {
let endOfMonth = dates.endOf(date, "month");
return dates.endOf(endOfMonth, "week", localizer.startOfWeek());
}
export function visibleDays(date, localizer) {
let current = firstVisibleDay(date, localizer),
last = lastVisibleDay(date, localizer),
days = [];
while (dates.lte(current, last, "day")) {
days.push(current);
current = dates.add(current, 1, "day");
}
return days;
}
export function ceil(date, unit) {
let floor = dates.startOf(date, unit);
return dates.eq(floor, date) ? floor : dates.add(floor, 1, unit);
}
export function range(start, end, unit = "day") {
let current = start,
days = [];
while (dates.lte(current, end, unit)) {
days.push(current);
current = dates.add(current, 1, unit);
}
return days;
}
export function merge(date, time) {
if (time == null && date == null) return null;
if (time == null) time = new Date();
if (date == null) date = new Date();
date = dates.startOf(date, "day");
date = dates.hours(date, dates.hours(time));
date = dates.minutes(date, dates.minutes(time));
date = dates.seconds(date, dates.seconds(time));
return dates.milliseconds(date, dates.milliseconds(time));
}
export function eqTime(dateA, dateB) {
return (
dates.hours(dateA) === dates.hours(dateB) &&
dates.minutes(dateA) === dates.minutes(dateB) &&
dates.seconds(dateA) === dates.seconds(dateB)
);
}
export function isJustDate(date) {
return (
dates.hours(date) === 0 &&
dates.minutes(date) === 0 &&
dates.seconds(date) === 0 &&
dates.milliseconds(date) === 0
);
}
export function duration(start, end, unit, firstOfWeek) {
if (unit === "day") unit = "date";
return Math.abs(
dates[unit](start, undefined, firstOfWeek) -
dates[unit](end, undefined, firstOfWeek)
);
}
export function diff(dateA, dateB, unit) {
if (!unit || unit === "milliseconds") return Math.abs(+dateA - +dateB);
// the .round() handles an edge case
// with DST where the total won't be exact
// since one day in the range may be shorter/longer by an hour
return Math.round(
Math.abs(
+dates.startOf(dateA, unit) / MILLI[unit] -
+dates.startOf(dateB, unit) / MILLI[unit]
)
);
}
export function total(date, unit) {
let ms = date.getTime(),
div = 1;
switch (unit) {
case "week":
div *= 7;
case "day":
div *= 24;
case "hours":
div *= 60;
case "minutes":
div *= 60;
case "seconds":
div *= 1000;
}
return ms / div;
}
export function week(date) {
var d = new Date(date);
d.setHours(0, 0, 0);
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
return Math.ceil(((d - new Date(d.getFullYear(), 0, 1)) / 8.64e7 + 1) / 7);
}
export function today() {
return dates.startOf(new Date(), "day");
}
export function yesterday() {
return dates.add(dates.startOf(new Date(), "day"), -1, "day");
}
export function tomorrow() {
return dates.add(dates.startOf(new Date(), "day"), 1, "day");
}