Merge branch 'dev' into feature/front-services

This commit is contained in:
Maxime Lalo 2023-04-27 14:37:50 +02:00
commit 692f5caac8
40 changed files with 613 additions and 268 deletions

View File

@ -1,37 +1,37 @@
<svg width="174" height="39" viewBox="0 0 174 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2800_16209)">
<path d="M25.5273 5.84731C25.5401 5.51025 25.3462 5.16586 24.929 4.98634L14.1634 0.368254C13.2979 -0.0036107 12.2788 -0.0036107 11.4116 0.368254L0.706259 4.96069C0.281779 5.14204 0.0823469 5.4901 0.0933248 5.83448V26.9282L2.49932 28.0621L3.93743 27.3733L10.7474 30.1852V31.6159L12.8332 32.5978L14.9391 31.5902V30.1999L21.7381 27.3916L23.1689 28.0621L25.5328 26.93V5.84731H25.5273Z" fill="#C5B2D4"/>
<path d="M12.8314 32.7L10.6541 31.676V30.249L3.93741 27.4756L2.49748 28.1644L0 26.9865L0.00365931 5.74256C0.0311041 5.3707 0.279937 5.04463 0.669653 4.8761L11.3768 0.283662C12.2605 -0.0955304 13.3162 -0.0955304 14.1999 0.283662L24.9656 4.90175C25.3517 5.06661 25.5932 5.38902 25.6188 5.75539H25.6206V26.9883L23.1671 28.1625L21.7344 27.4921L15.0306 30.2618V31.6485L12.8332 32.7H12.8314ZM10.837 31.5588L12.8314 32.4967L14.8458 31.5331V30.1391L14.9025 30.1153L21.7381 27.2924L23.1652 27.961L25.4377 26.8729V5.93857H25.434V5.84331C25.4486 5.50992 25.2456 5.22232 24.8924 5.07028L14.1267 0.452192C13.2888 0.0931497 12.2861 0.0931497 11.4481 0.452192L0.741009 5.04463C0.382398 5.1985 0.173817 5.4916 0.182965 5.83049V5.92392V26.8692L2.49748 27.9592L3.93192 27.2723L3.97035 27.2869L10.837 30.1226V31.5551V31.5588Z" fill="#4E1480"/>
<path d="M10.5187 28.7051C10.1985 28.7051 9.87462 28.641 9.56907 28.5109L2.57614 25.5305C1.68144 25.1495 1.10327 24.2739 1.10327 23.3011L1.09778 10.187C1.09778 9.36812 1.50579 8.61157 2.18825 8.16094C2.87071 7.7103 3.72699 7.6352 4.47898 7.96127L11.4774 10.9856C12.3648 11.3685 12.9393 12.2423 12.9393 13.2113V26.2816C12.9393 27.0967 12.5331 27.8533 11.8543 28.3039C11.4518 28.5714 10.9871 28.7069 10.5205 28.7069L10.5187 28.7051ZM9.78497 28.0053C10.365 28.2526 11.0255 28.1922 11.5506 27.8441C12.0757 27.4961 12.3904 26.9117 12.3904 26.2797V13.2095C12.3904 12.4603 11.9476 11.7862 11.2597 11.4894L4.26125 8.46502C3.68125 8.21406 3.01891 8.27268 2.49014 8.62073C1.96137 8.96878 1.64667 9.55497 1.64667 10.187L1.65216 23.3011C1.65216 24.054 2.0986 24.73 2.79021 25.0249L9.78314 28.0053H9.78497Z" fill="white"/>
<path d="M13.0509 15.5434V14.8564C13.0509 14.8381 13.0399 14.8235 13.0235 14.8161L12.1763 14.4498C12.1471 14.4369 12.1141 14.4589 12.1141 14.4901V15.177C12.1141 15.1953 12.1251 15.21 12.1416 15.2173L12.9887 15.5837C13.018 15.5965 13.0509 15.5745 13.0509 15.5434Z" fill="white"/>
<path d="M13.007 15.862C12.9631 15.862 12.921 15.8529 12.879 15.8345L12.0337 15.4682C11.9166 15.4187 11.8416 15.3033 11.8416 15.1751V14.4881C11.8416 14.38 11.8946 14.2811 11.9843 14.2207C12.0739 14.1621 12.1874 14.1529 12.2862 14.195L13.1333 14.5614C13.2504 14.6109 13.3254 14.7263 13.3254 14.8545V15.5414C13.3254 15.6495 13.2723 15.7484 13.1809 15.8089C13.1278 15.8437 13.0674 15.862 13.007 15.862ZM12.3904 15.0249L12.7765 15.1916V15.0084L12.3904 14.8417V15.0249Z" fill="white"/>
<path d="M13.0819 26.2944V25.6074C13.0819 25.5891 13.0709 25.5744 13.0545 25.5671L12.2074 25.2007C12.1781 25.1879 12.1451 25.2099 12.1451 25.241V25.928C12.1451 25.9463 12.1561 25.961 12.1726 25.9683L13.0197 26.3347C13.049 26.3475 13.0819 26.3255 13.0819 26.2944Z" fill="white"/>
<path d="M13.038 26.6149C12.996 26.6149 12.9539 26.6057 12.9118 26.5892L12.0647 26.2229C11.9476 26.1716 11.8726 26.0562 11.8726 25.9298V25.2428C11.8726 25.1348 11.9256 25.0358 12.0153 24.9754C12.1049 24.9149 12.2184 24.9076 12.3172 24.9497L13.1643 25.3161C13.2814 25.3656 13.3564 25.481 13.3564 25.6092V26.2961C13.3564 26.4042 13.3033 26.5031 13.2137 26.5618C13.1606 26.5966 13.1003 26.6149 13.038 26.6149ZM12.4215 25.7777L12.8075 25.9444V25.7594L12.4215 25.5927V25.7777Z" fill="white"/>
<path d="M4.94739 14.1675C3.52575 14.7207 3.18726 17.2596 4.18808 19.8352C5.1889 22.4126 7.15395 24.0521 8.57559 23.4971C9.99723 22.942 10.3357 20.4049 9.33489 17.8293C8.33407 15.2538 6.36903 13.6124 4.94739 14.1675ZM7.34606 18.8845C7.32959 18.824 7.30947 18.7636 7.28568 18.7031C7.23811 18.5786 7.17773 18.465 7.11187 18.3642L7.45218 15.818C7.99925 16.3529 8.50057 17.1167 8.8537 18.0235C9.19584 18.9028 9.34221 19.7766 9.31294 20.5258L7.34423 18.8826L7.34606 18.8845ZM5.31515 15.0706C5.79269 14.8837 6.34707 15.0065 6.89048 15.3618L6.5465 17.9228C6.48612 17.9154 6.42758 17.9209 6.37269 17.9411C6.33975 17.9539 6.30865 17.9722 6.2812 17.996L4.3436 16.3785C4.50095 15.7355 4.82846 15.2592 5.31332 15.0706H5.31515ZM4.70221 19.6447C4.35458 18.7489 4.20821 17.8605 4.2448 17.1021L6.10373 18.6537C6.11836 18.802 6.15496 18.9614 6.21717 19.1208C6.25559 19.2197 6.30133 19.3113 6.35073 19.3956L6.03237 21.7751C5.51275 21.2439 5.0407 20.5093 4.70404 19.6429L4.70221 19.6447ZM6.59224 22.2587L6.90877 19.8938C6.98562 19.9121 7.06064 19.9121 7.12833 19.8847C7.21616 19.8499 7.28385 19.7784 7.33142 19.6813L9.22146 21.2585C9.06776 21.918 8.7366 22.4089 8.24259 22.6013C7.74127 22.7955 7.15761 22.6544 6.59224 22.2587Z" fill="white"/>
<path d="M6.96733 18.639C7.22714 19.0585 7.22531 19.5293 6.9783 19.6795C6.7313 19.8297 6.31048 19.6099 6.07995 19.1739C5.83477 18.7104 5.82928 18.2928 6.05799 18.1462C6.32512 17.9777 6.7002 18.2104 6.96733 18.639Z" fill="#3FA79E"/>
<path d="M92.3262 11.9142C92.4908 11.2914 92.7653 10.7015 93.1495 10.1428C93.5337 9.58411 94.0003 9.095 94.5492 8.67185C95.0981 8.25052 95.7165 7.92079 96.4008 7.68265C97.0869 7.44451 97.8151 7.32544 98.5818 7.32544H102.589L102.04 9.60609H100.283C99.3685 9.60609 98.6092 9.8314 98.0054 10.2784C97.4016 10.7272 97.0266 11.2731 96.8802 11.9124L96.3038 14.193H99.7893L99.213 16.4737H95.7275L92.9007 27.9319H88.3448L92.3243 11.9124L92.3262 11.9142Z" fill="#4E1480"/>
<path d="M102.838 11.9142C103.002 11.2914 103.277 10.7015 103.661 10.1428C104.045 9.58411 104.512 9.095 105.061 8.67185C105.609 8.25052 106.228 7.92079 106.912 7.68265C107.598 7.44451 108.326 7.32544 109.093 7.32544H113.1L112.551 9.60609H110.795C109.88 9.60609 109.121 9.8314 108.517 10.2784C107.913 10.7272 107.538 11.2731 107.392 11.9124L106.815 14.193H110.301L109.724 16.4737H106.239L103.412 27.9319H98.8562L102.836 11.9124L102.838 11.9142Z" fill="#4E1480"/>
<path d="M122.872 11.9143L122.296 14.195H120.567C119.652 14.195 118.893 14.4203 118.289 14.8672C117.685 15.316 117.301 15.8619 117.136 16.5013L114.309 27.932H109.726L112.553 16.5287C112.699 15.9242 112.959 15.3435 113.336 14.783C113.711 14.2243 114.174 13.7297 114.723 13.2992C115.272 12.8687 115.894 12.5298 116.589 12.2825C117.284 12.0352 118.035 11.9106 118.84 11.9106H122.874L122.872 11.9143Z" fill="#4E1480"/>
<path d="M126.33 27.9338C124.976 27.9338 123.946 27.6041 123.242 26.9446C122.537 26.2851 122.184 25.4516 122.184 24.4441C122.184 24.1327 122.23 23.7663 122.322 23.345L124.023 16.4756C124.188 15.8528 124.462 15.2629 124.846 14.7042C125.231 14.1455 125.697 13.6601 126.246 13.2479C126.795 12.8357 127.417 12.5115 128.112 12.2715C128.808 12.0334 129.54 11.9143 130.308 11.9143H133.766C135.12 11.9143 136.145 12.2404 136.84 12.8907C137.535 13.541 137.883 14.3708 137.883 15.3783C137.883 15.7081 137.837 16.0836 137.746 16.5049L136.62 21.0662H127.481L126.905 23.3743C126.74 24.0155 126.844 24.5559 127.221 24.9955C127.596 25.4352 128.24 25.655 129.157 25.655H133.768L133.219 27.9356H126.33V27.9338ZM128.059 18.7837H132.643L133.192 16.4903C133.338 15.8528 133.246 15.3105 132.917 14.8654C132.588 14.4184 132.103 14.1968 131.463 14.1968C131.151 14.1968 130.84 14.2554 130.529 14.3745C130.218 14.4935 129.935 14.6566 129.679 14.8654C129.422 15.0742 129.199 15.3197 129.007 15.6018C128.815 15.8839 128.681 16.1807 128.61 16.4903L128.061 18.7837H128.059Z" fill="#4E1480"/>
<path d="M140.684 27.9337V23.345H145.267V27.9337H140.684Z" fill="#4E1480"/>
<path d="M152.099 11.9142H156.682L152.703 27.9337H148.12L152.099 11.9142ZM153.224 7.32544H157.808L157.259 9.60609H152.675L153.224 7.32544Z" fill="#3FA79E"/>
<path d="M162.446 27.9338C161.092 27.9338 160.062 27.6041 159.357 26.9446C158.653 26.2851 158.3 25.4516 158.3 24.4441C158.3 24.1327 158.346 23.7664 158.437 23.345L160.139 16.4756C160.303 15.8528 160.578 15.2629 160.962 14.7042C161.346 14.1455 161.813 13.6601 162.362 13.2479C162.911 12.8357 163.533 12.5115 164.228 12.2715C164.923 12.0334 165.655 11.9143 166.423 11.9143H169.882C171.235 11.9143 172.26 12.244 172.955 12.9035C173.651 13.563 173.998 14.3873 173.998 15.3765C173.998 15.6879 173.952 16.0543 173.861 16.4756L172.159 23.345C171.995 23.9862 171.72 24.5815 171.336 25.1311C170.952 25.6806 170.485 26.1661 169.936 26.5874C169.387 27.0087 168.769 27.3384 168.085 27.5766C167.399 27.8147 166.67 27.9338 165.902 27.9338H162.444H162.446ZM169.28 16.5031C169.444 15.8619 169.362 15.3179 169.033 14.8691C168.703 14.4203 168.218 14.1968 167.578 14.1968C166.938 14.1968 166.343 14.4221 165.794 14.8691C165.245 15.3179 164.888 15.8638 164.724 16.5031L163.022 23.345C162.857 23.9862 162.94 24.5321 163.269 24.979C163.598 25.4278 164.083 25.6513 164.724 25.6513C165.035 25.6513 165.346 25.5927 165.657 25.4736C165.968 25.3546 166.251 25.1897 166.508 24.979C166.764 24.7684 166.983 24.5266 167.166 24.2518C167.349 23.977 167.486 23.6748 167.578 23.345L169.28 16.5031Z" fill="#3FA79E"/>
<path d="M83.5749 13.4C80.0821 12.5042 76.4393 14.9497 75.4385 18.8607C74.4376 22.7717 76.4576 26.6699 79.9522 27.5657C83.445 28.4614 87.0879 26.0159 88.0887 22.1049C89.0895 18.1939 87.0696 14.2958 83.5749 13.4ZM82.876 21.1597C82.9126 21.0754 82.9437 20.9875 82.9675 20.8959C83.015 20.7072 83.0297 20.5185 83.0132 20.3372L86.667 17.8844C87.1391 19.0567 87.2507 20.4325 86.8994 21.81C86.5573 23.1454 85.8345 24.2665 84.8996 25.0652L82.8742 21.1597H82.876ZM83.2584 14.7867C84.433 15.0871 85.4009 15.8107 86.0724 16.7797L82.3966 19.2472C82.285 19.174 82.1624 19.119 82.027 19.0842C81.9447 19.0622 81.8624 19.0512 81.78 19.0476L79.7875 15.2025C80.8524 14.6585 82.0655 14.4808 83.2584 14.7867ZM76.6918 19.1941C77.0394 17.8349 77.7822 16.6973 78.741 15.8968L80.653 19.5843C80.5084 19.762 80.3968 19.9782 80.3346 20.22C80.2962 20.3702 80.2797 20.5204 80.2815 20.6669L76.8638 22.9604C76.4429 21.8228 76.3551 20.5094 76.6918 19.1941ZM77.4273 24.0888L80.8231 21.81C80.9549 21.9126 81.1067 21.9914 81.2751 22.0335C81.4928 22.0884 81.7123 22.0811 81.9191 22.0243L83.8622 25.7741C82.7845 26.342 81.5477 26.5307 80.3346 26.2193C79.1051 25.9042 78.1006 25.1275 77.4273 24.0888Z" fill="#3FA79E"/>
<path d="M81.4104 27.8405C80.9183 27.8405 80.4224 27.78 79.9303 27.6536C78.2159 27.214 76.7942 26.0526 75.9306 24.3856C75.0689 22.7223 74.8621 20.7512 75.3525 18.837C75.841 16.9227 76.9681 15.2942 78.5233 14.25C80.0821 13.204 81.8843 12.8706 83.6005 13.3103C87.1373 14.217 89.1901 18.172 88.1802 22.127C87.3093 25.5305 84.4477 27.8405 81.4123 27.8405H81.4104ZM82.1075 13.3048C80.9055 13.3048 79.7052 13.6785 78.6257 14.4039C77.1071 15.4224 76.0075 17.0143 75.5299 18.8846C75.0524 20.7549 75.2518 22.6783 76.0935 24.3032C76.9333 25.9244 78.3128 27.051 79.976 27.4778C83.4139 28.3607 87.0147 25.939 88.0009 22.083C88.987 18.227 86.9927 14.3709 83.553 13.4898C83.0754 13.3671 82.5906 13.3066 82.1057 13.3066L82.1075 13.3048ZM81.5074 26.4574C81.1049 26.4574 80.7042 26.408 80.3127 26.3072C79.1106 25.9995 78.0585 25.2283 77.3504 24.1383L77.301 24.0632L80.8268 21.6965L80.8798 21.7368C81.0079 21.8357 81.147 21.9053 81.2988 21.9438C81.4946 21.9932 81.694 21.9914 81.8953 21.9346L81.9667 21.9145L83.9866 25.8108L83.9061 25.8529C83.1468 26.2523 82.3253 26.4556 81.5074 26.4556V26.4574ZM77.5535 24.1145C78.236 25.1257 79.2277 25.8401 80.3584 26.1314C81.4855 26.4208 82.6528 26.2834 83.7396 25.7357L81.8715 22.1324C81.6629 22.1782 81.4562 22.1764 81.2531 22.1251C81.0994 22.0867 80.9549 22.0189 80.8213 21.9236L77.5554 24.1163L77.5535 24.1145ZM84.874 25.2099L82.7754 21.1634L82.7937 21.1231C82.8303 21.0388 82.8595 20.9564 82.8815 20.874C82.9254 20.7018 82.94 20.5241 82.9254 20.3464L82.9199 20.2933L86.7128 17.747L86.7549 17.8514C87.2489 19.0806 87.333 20.4948 86.9909 21.8339C86.6542 23.1473 85.9535 24.2904 84.9618 25.1348L84.874 25.2099ZM82.9785 21.1561L84.9307 24.9205C85.8474 24.1072 86.4969 23.0264 86.8134 21.7881C87.1373 20.5241 87.0696 19.1923 86.6268 18.0236L83.1102 20.383C83.1193 20.5644 83.1029 20.7439 83.0571 20.9179C83.037 20.9967 83.0114 21.0755 82.9785 21.1542V21.1561ZM76.818 23.1015L76.7778 22.9934C76.3332 21.7881 76.2728 20.4673 76.6021 19.1722C76.9388 17.8533 77.678 16.6644 78.6806 15.8272L78.7684 15.754L80.7609 19.5953L80.7225 19.6411C80.5798 19.817 80.4792 20.0185 80.4224 20.242C80.3877 20.3812 80.3694 20.5223 80.373 20.6633V20.7128L76.8198 23.0997L76.818 23.1015ZM76.6918 19.1942L76.7796 19.2161C76.4686 20.4362 76.5125 21.6781 76.9095 22.8194L80.1882 20.6193C80.1882 20.4783 80.2084 20.3372 80.2431 20.1998C80.3017 19.9709 80.4023 19.762 80.5414 19.577L78.7099 16.0434C77.7804 16.8512 77.0961 17.9742 76.7778 19.218L76.6899 19.196L76.6918 19.1942ZM82.3985 19.3572L82.3472 19.3242C82.2411 19.2546 82.1277 19.2033 82.0051 19.1722C81.9337 19.1539 81.8587 19.1429 81.7764 19.1392H81.7233L79.6631 15.1641L79.7455 15.122C80.8798 14.5431 82.1021 14.3966 83.2804 14.6988C84.4422 14.9956 85.432 15.699 86.1474 16.7285L86.2005 16.8054L82.3966 19.359L82.3985 19.3572ZM81.8386 18.9597C81.9136 18.9652 81.9831 18.978 82.0508 18.9945C82.1716 19.0256 82.2868 19.0733 82.3948 19.1374L85.9425 16.756C85.2582 15.8034 84.3233 15.1549 83.2346 14.8747C82.1277 14.5907 80.9805 14.719 79.9101 15.2429L81.8368 18.9597H81.8386Z" fill="#3FA79E"/>
<path d="M34.8329 7.37695H39.4162L34.8603 25.7046H41.7215L41.1726 27.9852H29.7281L34.8329 7.37695Z" fill="#4E1480"/>
<path d="M49.1572 7.37695H60.6017L60.0528 9.6576H53.1916L51.4626 16.5545H57.72L57.1711 18.8351H50.9137L49.1847 25.7046H56.0459L55.497 27.9852H44.0525L49.1572 7.37695Z" fill="#4E1480"/>
<path d="M65.7887 23.3964C65.6241 24.0376 65.7064 24.5835 66.0357 25.0304C66.3651 25.4792 66.8499 25.7027 67.4903 25.7027C68.826 25.7027 69.7865 24.9333 70.372 23.3946H72.6499C72.1742 24.9333 71.4424 26.0837 70.4544 26.844C69.4663 27.6042 68.1124 27.9834 66.3925 27.9834H65.2124C63.8585 27.9834 62.8284 27.6536 62.1239 26.9942C61.4195 26.3347 61.0664 25.5012 61.0664 24.4937C61.0664 24.1823 61.1121 23.8159 61.2036 23.3946L62.9052 16.5252C63.0699 15.9023 63.3443 15.3125 63.7285 14.7538C64.1128 14.1951 64.5793 13.7096 65.1282 13.2975C65.6771 12.8853 66.2992 12.561 66.9945 12.3211C67.6897 12.0829 68.4216 11.9639 69.1901 11.9639H70.3702C71.8522 11.9639 72.9134 12.2258 73.5538 12.7479C74.1942 13.27 74.5144 14.0522 74.5144 15.0982C74.5144 15.5378 74.4595 16.0141 74.3497 16.527H72.0718C72.273 15.0066 71.6967 14.2463 70.3427 14.2463C69.7024 14.2463 69.1077 14.4717 68.5588 14.9186C68.0099 15.3674 67.6532 15.9133 67.4885 16.5526L65.7869 23.3946L65.7887 23.3964Z" fill="#4E1480"/>
<path d="M134.897 37.6811C134.613 37.6811 134.251 37.5895 134.081 37.3844V37.5749H133.599V32.6948H134.093V34.6128C134.331 34.2574 134.666 33.9863 135.134 33.9863C135.925 33.9863 136.424 34.7502 136.424 35.7595C136.424 36.7689 135.905 37.6774 134.897 37.6774V37.6811ZM134.97 34.4571C134.62 34.4571 134.397 34.6476 134.245 34.8454C134.121 35.0103 134.093 35.0836 134.093 35.2612V36.778C134.093 37.0619 134.344 37.2799 134.818 37.2799C135.542 37.2799 135.91 36.6461 135.91 35.8694C135.91 35.0927 135.601 34.4589 134.968 34.4589L134.97 34.4571Z" fill="#320756"/>
<path d="M138.481 37.8203C138.283 38.4065 137.954 38.9341 137.085 39L137.045 38.5586C137.584 38.5512 137.921 38.2087 138.066 37.6884L136.794 34.0889H137.334L138.033 36.212C138.164 36.6077 138.276 36.9832 138.316 37.1096H138.329C138.375 36.9246 138.481 36.582 138.6 36.1937L139.246 34.0907H139.714L138.483 37.8222L138.481 37.8203Z" fill="#320756"/>
<path d="M144.455 37.5766V33.6637C144.455 32.8504 143.983 32.3778 143.137 32.3778C142.599 32.3778 142.127 32.6196 141.798 33.0482C141.589 33.301 141.556 33.4219 141.556 33.7517V37.5766H140.733V31.7623H141.502V32.6855C141.941 32.0371 142.555 31.5974 143.401 31.5974C144.51 31.5974 145.278 32.2789 145.278 33.5318V37.5766H144.455Z" fill="#059C8C"/>
<path d="M149.219 37.7854C147.408 37.7854 146.65 36.2247 146.65 34.6529C146.65 33.0812 147.485 31.5645 149.263 31.5645C151.041 31.5645 151.832 33.0812 151.832 34.6639C151.832 36.2467 150.998 37.7854 149.219 37.7854ZM149.263 32.2789C147.957 32.2789 147.507 33.5868 147.507 34.6529C147.507 35.7191 147.891 37.06 149.219 37.06C150.547 37.06 150.976 35.6971 150.976 34.6639C150.976 33.6308 150.591 32.2789 149.263 32.2789Z" fill="#059C8C"/>
<path d="M154.873 37.7635C153.841 37.7635 153.391 37.0491 153.391 36.1808V32.5647H152.414V31.8723H153.391V30.5973L154.214 30.3005V31.8723H155.795V32.5647H154.214V36.0818C154.214 36.7193 154.532 37.0491 155.136 37.0491C155.389 37.0491 155.608 36.9721 155.773 36.8842L155.927 37.5656C155.663 37.6755 155.257 37.7635 154.873 37.7635Z" fill="#059C8C"/>
<path d="M157.661 37.6426C157.321 37.6426 157.09 37.4008 157.09 37.0601C157.09 36.7193 157.31 36.4775 157.65 36.4775C157.991 36.4775 158.221 36.7193 158.221 37.0601C158.221 37.4008 158.001 37.6426 157.661 37.6426Z" fill="#25124B"/>
<path d="M159.418 37.5766V29.8169H160.318V37.5766H159.418Z" fill="#25124B"/>
<path d="M164.127 30.6412V37.5766H163.216V30.6412H160.658V29.8169H166.718V30.6412H164.127Z" fill="#25124B"/>
<g clip-path="url(#clip0_3896_98053)">
<path d="M25.5282 5.84779C25.541 5.51073 25.347 5.16635 24.9299 4.98683L14.1642 0.368742C13.2988 -0.00312242 12.2797 -0.00312242 11.4124 0.368742L0.707113 4.96118C0.282634 5.14253 0.0832014 5.49058 0.0941793 5.83497V26.9287L2.50017 28.0626L3.93828 27.3738L10.7483 30.1857V31.6164L12.8341 32.5982L14.94 31.5907V30.2004L21.739 27.3921L23.1698 28.0626L25.5337 26.9305V5.84779H25.5282Z" fill="#C5B2D4"/>
<path d="M12.8314 32.7007L10.6541 31.6767V30.2497L3.93741 27.4763L2.49748 28.1651L0 26.9872L0.00365931 5.7433C0.0311041 5.37143 0.279937 5.04536 0.669653 4.87683L11.3768 0.284394C12.2605 -0.094798 13.3162 -0.094798 14.1999 0.284394L24.9656 4.90248C25.3517 5.06734 25.5932 5.38975 25.6188 5.75612H25.6206V26.989L23.1671 28.1633L21.7344 27.4928L15.0306 30.2626V31.6493L12.8332 32.7007H12.8314ZM10.837 31.5595L12.8314 32.4974L14.8458 31.5339V30.1398L14.9025 30.116L21.7381 27.2931L23.1652 27.9618L25.4377 26.8736V5.9393H25.434V5.84405C25.4486 5.51065 25.2456 5.22305 24.8924 5.07101L14.1267 0.452924C13.2888 0.0938821 12.2861 0.0938821 11.4481 0.452924L0.741009 5.04536C0.382398 5.19924 0.173817 5.49233 0.182965 5.83122V5.92465V26.87L2.49748 27.9599L3.93192 27.273L3.97035 27.2876L10.837 30.1233V31.5558V31.5595Z" fill="#4E1480"/>
<path d="M10.5185 28.7041C10.1984 28.7041 9.8745 28.64 9.56895 28.5099L2.57602 25.5295C1.68132 25.1485 1.10315 24.2729 1.10315 23.3002L1.09766 10.186C1.09766 9.36715 1.50567 8.61059 2.18813 8.15996C2.87059 7.70933 3.72687 7.63422 4.47886 7.96029L11.4773 10.9847C12.3647 11.3675 12.9392 12.2413 12.9392 13.2104V26.2806C12.9392 27.0958 12.533 27.8523 11.8542 28.3029C11.4517 28.5704 10.9869 28.7059 10.5204 28.7059L10.5185 28.7041ZM9.78485 28.0043C10.3648 28.2516 11.0254 28.1912 11.5505 27.8431C12.0756 27.4951 12.3903 26.9107 12.3903 26.2787V13.2085C12.3903 12.4593 11.9475 11.7852 11.2596 11.4884L4.26113 8.46405C3.68113 8.21308 3.01879 8.2717 2.49002 8.61975C1.96125 8.9678 1.64655 9.554 1.64655 10.186L1.65204 23.3002C1.65204 24.0531 2.09848 24.729 2.79009 25.0239L9.78302 28.0043H9.78485Z" fill="white"/>
<path d="M13.052 15.5426V14.8557C13.052 14.8374 13.041 14.8227 13.0246 14.8154L12.1774 14.449C12.1482 14.4362 12.1152 14.4582 12.1152 14.4893V15.1763C12.1152 15.1946 12.1262 15.2093 12.1427 15.2166L12.9898 15.5829C13.0191 15.5958 13.052 15.5738 13.052 15.5426Z" fill="white"/>
<path d="M13.0073 15.861C12.9634 15.861 12.9213 15.8519 12.8792 15.8336L12.0339 15.4672C11.9168 15.4177 11.8418 15.3023 11.8418 15.1741V14.4871C11.8418 14.3791 11.8949 14.2802 11.9845 14.2197C12.0742 14.1611 12.1876 14.1519 12.2864 14.1941L13.1335 14.5604C13.2506 14.6099 13.3256 14.7253 13.3256 14.8535V15.5405C13.3256 15.6485 13.2726 15.7475 13.1811 15.8079C13.128 15.8427 13.0677 15.861 13.0073 15.861ZM12.3907 15.0239L12.7767 15.1906V15.0074L12.3907 14.8407V15.0239Z" fill="white"/>
<path d="M13.0833 26.2946V25.6077C13.0833 25.5893 13.0723 25.5747 13.0558 25.5674L12.2087 25.201C12.1794 25.1882 12.1465 25.2101 12.1465 25.2413V25.9282C12.1465 25.9465 12.1575 25.9612 12.1739 25.9685L13.0211 26.3349C13.0503 26.3477 13.0833 26.3257 13.0833 26.2946Z" fill="white"/>
<path d="M13.0385 26.6156C12.9965 26.6156 12.9544 26.6065 12.9123 26.59L12.0652 26.2236C11.9481 26.1723 11.873 26.0569 11.873 25.9305V25.2436C11.873 25.1355 11.9261 25.0366 12.0158 24.9761C12.1054 24.9157 12.2189 24.9083 12.3177 24.9505L13.1648 25.3168C13.2819 25.3663 13.3569 25.4817 13.3569 25.6099V26.2969C13.3569 26.405 13.3038 26.5039 13.2142 26.5625C13.1611 26.5973 13.1007 26.6156 13.0385 26.6156ZM12.4219 25.7785L12.808 25.9452V25.7601L12.4219 25.5934V25.7785Z" fill="white"/>
<path d="M4.94763 14.1684C3.52599 14.7217 3.1875 17.2606 4.18832 19.8362C5.18914 22.4136 7.15419 24.0531 8.57583 23.498C9.99747 22.943 10.336 20.4059 9.33514 17.8303C8.33432 15.2547 6.36927 13.6134 4.94763 14.1684ZM7.34631 18.8854C7.32984 18.825 7.30971 18.7645 7.28593 18.7041C7.23836 18.5795 7.17798 18.466 7.11211 18.3652L7.45243 15.8189C7.99949 16.3538 8.50082 17.1177 8.85394 18.0245C9.19608 18.9038 9.34246 19.7776 9.31318 20.5268L7.34448 18.8836L7.34631 18.8854ZM5.31539 15.0715C5.79293 14.8847 6.34731 15.0074 6.89072 15.3628L6.54675 17.9237C6.48637 17.9164 6.42782 17.9219 6.37293 17.942C6.34 17.9549 6.30889 17.9732 6.28145 17.997L4.34385 16.3795C4.5012 15.7365 4.8287 15.2602 5.31356 15.0715H5.31539ZM4.70246 19.6457C4.35482 18.7499 4.20845 17.8614 4.24504 17.1031L6.10397 18.6546C6.11861 18.803 6.1552 18.9624 6.21741 19.1218C6.25583 19.2207 6.30157 19.3123 6.35097 19.3965L6.03261 21.7761C5.51299 21.2449 5.04094 20.5103 4.70429 19.6438L4.70246 19.6457ZM6.59249 22.2597L6.90902 19.8948C6.98586 19.9131 7.06088 19.9131 7.12858 19.8856C7.2164 19.8508 7.2841 19.7794 7.33167 19.6823L9.2217 21.2595C9.06801 21.919 8.73684 22.4099 8.24284 22.6023C7.74151 22.7964 7.15785 22.6554 6.59249 22.2597Z" fill="white"/>
<path d="M6.96684 18.6397C7.22665 19.0592 7.22482 19.53 6.97782 19.6802C6.73081 19.8304 6.30999 19.6106 6.07946 19.1746C5.83428 18.7112 5.82879 18.2935 6.0575 18.147C6.32463 17.9784 6.69971 18.2111 6.96684 18.6397Z" fill="#3FA79E"/>
<path d="M92.327 11.9149C92.4917 11.2921 92.7661 10.7023 93.1504 10.1436C93.5346 9.58484 94.0012 9.09573 94.5501 8.67258C95.099 8.25125 95.7174 7.92152 96.4017 7.68338C97.0878 7.44524 97.816 7.32617 98.5826 7.32617H102.59L102.041 9.60682H100.284C99.3694 9.60682 98.6101 9.83214 98.0063 10.2791C97.4025 10.7279 97.0274 11.2738 96.881 11.9131L96.3047 14.1938H99.7902L99.2138 16.4744H95.7284L92.9015 27.9326H88.3457L92.3252 11.9131L92.327 11.9149Z" fill="#4E1480"/>
<path d="M102.839 11.9149C103.003 11.2921 103.278 10.7023 103.662 10.1436C104.046 9.58484 104.513 9.09573 105.062 8.67258C105.611 8.25125 106.229 7.92152 106.913 7.68338C107.6 7.44524 108.328 7.32617 109.094 7.32617H113.101L112.552 9.60682H110.796C109.881 9.60682 109.122 9.83214 108.518 10.2791C107.914 10.7279 107.539 11.2738 107.393 11.9131L106.816 14.1938H110.302L109.726 16.4744H106.24L103.413 27.9326H98.8574L102.837 11.9131L102.839 11.9149Z" fill="#4E1480"/>
<path d="M122.873 11.9158L122.296 14.1964H120.567C119.652 14.1964 118.893 14.4217 118.289 14.8687C117.686 15.3175 117.301 15.8634 117.137 16.5027L114.31 27.9334H109.727L112.553 16.5302C112.7 15.9257 112.96 15.345 113.336 14.7844C113.712 14.2257 114.174 13.7311 114.723 13.3006C115.272 12.8702 115.894 12.5313 116.59 12.284C117.285 12.0367 118.035 11.9121 118.84 11.9121H122.874L122.873 11.9158Z" fill="#4E1480"/>
<path d="M126.332 27.9336C124.978 27.9336 123.948 27.6038 123.243 26.9444C122.539 26.2849 122.186 25.4514 122.186 24.4439C122.186 24.1325 122.231 23.7661 122.323 23.3448L124.024 16.4754C124.189 15.8525 124.463 15.2627 124.848 14.704C125.232 14.1453 125.698 13.6598 126.247 13.2476C126.796 12.8355 127.418 12.5112 128.114 12.2713C128.809 12.0331 129.541 11.9141 130.309 11.9141H133.767C135.121 11.9141 136.146 12.2401 136.841 12.8904C137.536 13.5407 137.884 14.3706 137.884 15.3781C137.884 15.7078 137.838 16.0833 137.747 16.5047L136.622 21.066H127.482L126.906 23.3741C126.741 24.0152 126.846 24.5556 127.223 24.9953C127.598 25.4349 128.242 25.6547 129.158 25.6547H133.769L133.22 27.9354H126.332V27.9336ZM128.061 18.7835H132.644L133.193 16.49C133.339 15.8525 133.248 15.3103 132.918 14.8652C132.589 14.4182 132.104 14.1965 131.464 14.1965C131.153 14.1965 130.842 14.2552 130.531 14.3742C130.22 14.4933 129.936 14.6563 129.68 14.8652C129.424 15.074 129.2 15.3195 129.008 15.6016C128.816 15.8837 128.683 16.1804 128.611 16.49L128.062 18.7835H128.061Z" fill="#4E1480"/>
<path d="M140.686 27.9345V23.3457H145.269V27.9345H140.686Z" fill="#4E1480"/>
<path d="M152.101 11.9149H156.684L152.704 27.9344H148.121L152.101 11.9149ZM153.226 7.32617H157.809L157.26 9.60682H152.677L153.226 7.32617Z" fill="#3FA79E"/>
<path d="M162.447 27.9336C161.093 27.9336 160.063 27.6038 159.358 26.9444C158.654 26.2849 158.301 25.4514 158.301 24.4439C158.301 24.1325 158.347 23.7661 158.438 23.3448L160.14 16.4754C160.304 15.8525 160.579 15.2627 160.963 14.704C161.347 14.1453 161.814 13.6598 162.363 13.2476C162.912 12.8355 163.534 12.5112 164.229 12.2713C164.924 12.0331 165.656 11.9141 166.424 11.9141H169.882C171.236 11.9141 172.261 12.2438 172.956 12.9033C173.652 13.5627 173.999 14.3871 173.999 15.3763C173.999 15.6877 173.953 16.054 173.862 16.4754L172.16 23.3448C171.996 23.9859 171.721 24.5813 171.337 25.1308C170.953 25.6804 170.486 26.1658 169.937 26.5871C169.388 27.0085 168.77 27.3382 168.086 27.5763C167.4 27.8145 166.671 27.9336 165.903 27.9336H162.445H162.447ZM169.281 16.5028C169.445 15.8617 169.363 15.3176 169.034 14.8688C168.704 14.42 168.219 14.1965 167.579 14.1965C166.939 14.1965 166.344 14.4219 165.795 14.8688C165.246 15.3176 164.889 15.8635 164.725 16.5028L163.023 23.3448C162.858 23.9859 162.941 24.5318 163.27 24.9788C163.599 25.4276 164.084 25.6511 164.725 25.6511C165.036 25.6511 165.347 25.5925 165.658 25.4734C165.969 25.3543 166.252 25.1895 166.509 24.9788C166.765 24.7681 166.984 24.5263 167.167 24.2515C167.35 23.9768 167.487 23.6745 167.579 23.3448L169.281 16.5028Z" fill="#3FA79E"/>
<path d="M83.5743 13.3998C80.0815 12.504 76.4387 14.9495 75.4378 18.8605C74.437 22.7715 76.457 26.6696 79.9516 27.5654C83.4444 28.4612 87.0873 26.0157 88.0881 22.1047C89.0889 18.1937 87.069 14.2955 83.5743 13.3998ZM82.8754 21.1594C82.912 21.0752 82.9431 20.9873 82.9669 20.8957C83.0144 20.707 83.0291 20.5183 83.0126 20.3369L86.6664 17.8841C87.1385 19.0565 87.2501 20.4322 86.8988 21.8098C86.5567 23.1452 85.8339 24.2663 84.899 25.0649L82.8736 21.1594H82.8754ZM83.2578 14.7865C84.4324 15.0869 85.4003 15.8105 86.0718 16.7795L82.396 19.247C82.2844 19.1737 82.1618 19.1188 82.0264 19.084C81.9441 19.062 81.8618 19.051 81.7794 19.0473L79.7869 15.2023C80.8518 14.6582 82.0648 14.4805 83.2578 14.7865ZM76.6912 19.1939C77.0388 17.8346 77.7816 16.6971 78.7404 15.8966L80.6524 19.5841C80.5078 19.7618 80.3962 19.9779 80.334 20.2197C80.2956 20.3699 80.2791 20.5201 80.2809 20.6667L76.8631 22.9602C76.4423 21.8226 76.3545 20.5091 76.6912 19.1939ZM77.4267 24.0886L80.8225 21.8098C80.9543 21.9123 81.1061 21.9911 81.2744 22.0332C81.4922 22.0882 81.7117 22.0809 81.9185 22.0241L83.8616 25.7739C82.7839 26.3417 81.5471 26.5304 80.334 26.219C79.1045 25.9039 78.1 25.1272 77.4267 24.0886Z" fill="#3FA79E"/>
<path d="M81.4103 27.8402C80.9182 27.8402 80.4223 27.7798 79.9301 27.6534C78.2157 27.2137 76.7941 26.0524 75.9305 24.3854C75.0687 22.7221 74.862 20.751 75.3523 18.8367C75.8409 16.9224 76.9679 15.2939 78.5231 14.2498C80.082 13.2038 81.8842 12.8704 83.6004 13.31C87.1371 14.2168 89.19 18.1718 88.18 22.1267C87.3091 25.5303 84.4475 27.8402 81.4122 27.8402H81.4103ZM82.1074 13.3045C80.9053 13.3045 79.7051 13.6782 78.6256 14.4036C77.107 15.4222 76.0074 17.014 75.5298 18.8843C75.0523 20.7547 75.2517 22.6781 76.0934 24.3029C76.9332 25.9241 78.3127 27.0507 79.9759 27.4775C83.4138 28.3605 87.0146 25.9388 88.0007 22.0827C88.9869 18.2267 86.9926 14.3707 83.5528 13.4896C83.0753 13.3668 82.5905 13.3064 82.1056 13.3064L82.1074 13.3045ZM81.5073 26.4572C81.1048 26.4572 80.7041 26.4077 80.3125 26.307C79.1105 25.9992 78.0584 25.228 77.3503 24.1381L77.3009 24.063L80.8267 21.6962L80.8797 21.7365C81.0078 21.8354 81.1469 21.9051 81.2987 21.9435C81.4945 21.993 81.6939 21.9912 81.8952 21.9344L81.9665 21.9142L83.9865 25.8105L83.906 25.8527C83.1467 26.252 82.3252 26.4554 81.5073 26.4554V26.4572ZM77.5534 24.1143C78.2359 25.1254 79.2276 25.8399 80.3583 26.1311C81.4853 26.4206 82.6527 26.2832 83.7395 25.7354L81.8714 22.1322C81.6628 22.178 81.4561 22.1762 81.253 22.1249C81.0993 22.0864 80.9547 22.0186 80.8212 21.9234L77.5552 24.1161L77.5534 24.1143ZM84.8739 25.2097L82.7752 21.1632L82.7935 21.1229C82.8301 21.0386 82.8594 20.9562 82.8814 20.8737C82.9253 20.7015 82.9399 20.5238 82.9253 20.3462L82.9198 20.293L86.7127 17.7468L86.7547 17.8512C87.2487 19.0803 87.3329 20.4945 86.9908 21.8336C86.6541 23.147 85.9534 24.2901 84.9617 25.1346L84.8739 25.2097ZM82.9783 21.1558L84.9306 24.9203C85.8472 24.1069 86.4968 23.0261 86.8133 21.7878C87.1371 20.5238 87.0694 19.1921 86.6267 18.0234L83.1101 20.3828C83.1192 20.5641 83.1028 20.7437 83.057 20.9177C83.0369 20.9965 83.0113 21.0752 82.9783 21.154V21.1558ZM76.8179 23.1012L76.7776 22.9932C76.333 21.7878 76.2727 20.4671 76.602 19.1719C76.9387 17.853 77.6778 16.6641 78.6805 15.827L78.7683 15.7537L80.7608 19.5951L80.7224 19.6409C80.5797 19.8167 80.479 20.0183 80.4223 20.2417C80.3875 20.381 80.3693 20.522 80.3729 20.6631V20.7125L76.8197 23.0994L76.8179 23.1012ZM76.6917 19.1939L76.7795 19.2159C76.4684 20.4359 76.5123 21.6779 76.9094 22.8191L80.1881 20.6191C80.1881 20.478 80.2082 20.337 80.243 20.1996C80.3016 19.9706 80.4022 19.7618 80.5412 19.5768L78.7098 16.0431C77.7803 16.851 77.096 17.9739 76.7776 19.2177L76.6898 19.1958L76.6917 19.1939ZM82.3983 19.357L82.3471 19.324C82.241 19.2544 82.1276 19.2031 82.005 19.1719C81.9336 19.1536 81.8586 19.1426 81.7763 19.139H81.7232L79.663 15.1639L79.7453 15.1217C80.8797 14.5429 82.1019 14.3963 83.2802 14.6986C84.4421 14.9953 85.4319 15.6988 86.1473 16.7283L86.2004 16.8052L82.3965 19.3588L82.3983 19.357ZM81.8385 18.9594C81.9135 18.9649 81.983 18.9778 82.0507 18.9943C82.1715 19.0254 82.2867 19.073 82.3947 19.1371L85.9424 16.7557C85.2581 15.8032 84.3231 15.1547 83.2345 14.8744C82.1276 14.5905 80.9804 14.7187 79.91 15.2426L81.8366 18.9594H81.8385Z" fill="#3FA79E"/>
<path d="M34.8332 7.37695H39.4165L34.8607 25.7046H41.7219L41.173 27.9852H29.7285L34.8332 7.37695Z" fill="#4E1480"/>
<path d="M49.1575 7.37695H60.6019L60.053 9.6576H53.1919L51.4628 16.5545H57.7202L57.1713 18.8351H50.9139L49.1849 25.7046H56.0461L55.4972 27.9852H44.0527L49.1575 7.37695Z" fill="#4E1480"/>
<path d="M65.7887 23.3974C65.6241 24.0385 65.7064 24.5844 66.0357 25.0314C66.3651 25.4802 66.8499 25.7037 67.4903 25.7037C68.826 25.7037 69.7865 24.9343 70.372 23.3956H72.6499C72.1742 24.9343 71.4424 26.0847 70.4544 26.8449C69.4663 27.6051 68.1124 27.9843 66.3925 27.9843H65.2124C63.8585 27.9843 62.8284 27.6546 62.1239 26.9951C61.4195 26.3357 61.0664 25.5022 61.0664 24.4947C61.0664 24.1833 61.1121 23.8169 61.2036 23.3956L62.9052 16.5261C63.0699 15.9033 63.3443 15.3135 63.7285 14.7547C64.1128 14.196 64.5793 13.7106 65.1282 13.2984C65.6771 12.8863 66.2992 12.562 66.9945 12.3221C67.6897 12.0839 68.4216 11.9648 69.1901 11.9648H70.3702C71.8522 11.9648 72.9134 12.2268 73.5538 12.7489C74.1942 13.2709 74.5144 14.0531 74.5144 15.0991C74.5144 15.5388 74.4595 16.0151 74.3497 16.528H72.0718C72.273 15.0075 71.6967 14.2473 70.3427 14.2473C69.7024 14.2473 69.1077 14.4726 68.5588 14.9196C68.0099 15.3684 67.6532 15.9143 67.4885 16.5536L65.7869 23.3956L65.7887 23.3974Z" fill="#4E1480"/>
<path d="M134.897 37.6796C134.613 37.6796 134.251 37.5881 134.081 37.3829V37.5734H133.6V32.6934H134.094V34.6113C134.331 34.2559 134.666 33.9848 135.135 33.9848C135.925 33.9848 136.425 34.7487 136.425 35.758C136.425 36.7674 135.905 37.676 134.897 37.676V37.6796ZM134.97 34.4556C134.621 34.4556 134.397 34.6461 134.245 34.8439C134.121 35.0088 134.094 35.0821 134.094 35.2598V36.7765C134.094 37.0605 134.344 37.2785 134.818 37.2785C135.543 37.2785 135.91 36.6447 135.91 35.8679C135.91 35.0912 135.601 34.4574 134.968 34.4574L134.97 34.4556Z" fill="#320756"/>
<path d="M138.482 37.8194C138.284 38.4056 137.955 38.9331 137.086 38.9991L137.046 38.5576C137.585 38.5503 137.922 38.2077 138.067 37.6875L136.795 34.0879H137.335L138.034 36.211C138.165 36.6067 138.277 36.9822 138.317 37.1086H138.33C138.376 36.9236 138.482 36.581 138.601 36.1927L139.247 34.0897H139.715L138.484 37.8212L138.482 37.8194Z" fill="#320756"/>
<path d="M144.456 37.5768V33.664C144.456 32.8506 143.984 32.378 143.139 32.378C142.601 32.378 142.129 32.6198 141.799 33.0485C141.591 33.3013 141.558 33.4222 141.558 33.7519V37.5768H140.734V31.7625H141.503V32.6858C141.942 32.0373 142.557 31.5977 143.402 31.5977C144.511 31.5977 145.279 32.2791 145.279 33.5321V37.5768H144.456Z" fill="#3FA79E"/>
<path d="M149.219 37.7854C147.408 37.7854 146.65 36.2247 146.65 34.6529C146.65 33.0812 147.485 31.5645 149.263 31.5645C151.042 31.5645 151.832 33.0812 151.832 34.6639C151.832 36.2467 150.998 37.7854 149.219 37.7854ZM149.263 32.2789C147.957 32.2789 147.507 33.5868 147.507 34.6529C147.507 35.7191 147.891 37.06 149.219 37.06C150.548 37.06 150.976 35.6971 150.976 34.6639C150.976 33.6308 150.591 32.2789 149.263 32.2789Z" fill="#3FA79E"/>
<path d="M154.873 37.7637C153.841 37.7637 153.391 37.0493 153.391 36.181V32.5649H152.414V31.8725H153.391V30.5975L154.214 30.3008V31.8725H155.795V32.5649H154.214V36.0821C154.214 36.7196 154.533 37.0493 155.137 37.0493C155.389 37.0493 155.609 36.9724 155.773 36.8844L155.927 37.5659C155.664 37.6758 155.257 37.7637 154.873 37.7637Z" fill="#3FA79E"/>
<path d="M157.661 37.6416C157.32 37.6416 157.09 37.3998 157.09 37.0591C157.09 36.7184 157.309 36.4766 157.65 36.4766C157.99 36.4766 158.221 36.7184 158.221 37.0591C158.221 37.3998 158.001 37.6416 157.661 37.6416Z" fill="#4E1480"/>
<path d="M159.418 37.5761V29.8164H160.318V37.5761H159.418Z" fill="#4E1480"/>
<path d="M164.127 30.6407V37.5761H163.216V30.6407H160.658V29.8164H166.718V30.6407H164.127Z" fill="#4E1480"/>
</g>
<defs>
<clipPath id="clip0_2800_16209">
<clipPath id="clip0_3896_98053">
<rect width="174" height="39" fill="white"/>
</clipPath>
</defs>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -16,6 +16,7 @@ type IProps = {
document_type: Document["document_type"];
document_status: Document["document_status"];
folder: Document["folder"];
files?: Document["files"];
};
openDeletionModal?: (uid: Document["uid"]) => void;
};
@ -37,13 +38,31 @@ class DocumentNotaryClass extends React.Component<IPropsClass, IState> {
<div className={classNames(classes["root"], classes[this.props.document.document_status])} onClick={this.onClick}>
<div>
<Typography typo={ITypo.P_SB_16}>{this.props.document?.document_type?.name}</Typography>
<Typography typo={ITypo.CAPTION_14}>Aucun document déposé</Typography>
<Typography typo={ITypo.CAPTION_14}>{this.getDocumentsTitle()}</Typography>
</div>
{this.renderIcon()}
</div>
);
}
private getDocumentsTitle(){
const documentFiles = this.props.document.files;
if(documentFiles){
if(documentFiles.length === 1){
const fileName = documentFiles[0]?.file_path?.split("/").pop();
if(fileName && fileName.length > 20){
return `${fileName.substr(0, 7)}...${fileName.substr(fileName.length - 7, fileName.length)}`;
}else{
return fileName;
}
}else{
return `${documentFiles.length} documents déposés`;
}
}else{
return "Aucun document déposé";
}
}
private onClick() {
if (this.props.document.document_status !== "VALIDATED" && this.props.document.document_status !== "PENDING") return;
this.props.router.push(`/folders/${this.props.document.folder.uid}/documents/${this.props.document.uid}`);

View File

@ -28,7 +28,7 @@ export default function FolderBoxInformation(props: IProps) {
.modules.pages.Folder.pages.EditDescription.props.path.replace("[folderUid]", props.folder.uid);
const editInformationsPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.EditDescription.props.path.replace("[folderUid]", props.folder.uid);
.modules.pages.Folder.pages.EditInformations.props.path.replace("[folderUid]", props.folder.uid);
const path = type === EFolderBoxInformationType.DESCRIPTION ? editDescriptionPath : editInformationsPath;
return (
@ -70,7 +70,7 @@ export default function FolderBoxInformation(props: IProps) {
<Typography typo={ITypo.P_18}>{folder.folder_number ?? ""}</Typography>
</div>
<div className={classes["text-container"]}>
<Typography typo={ITypo.NAV_INPUT_16}>Type dacte</Typography>
<Typography typo={ITypo.NAV_INPUT_16}>Type d'acte</Typography>
<Typography typo={ITypo.P_18}>{folder.deed.deed_type.name ?? ""}</Typography>
</div>
<div className={classes["text-container"]}>

View File

@ -27,7 +27,10 @@ class FolderListClass extends React.Component<IPropsClass, IState> {
: Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path;
return (
<div className={classes["root"]}>
{this.props.folders.map((folder) => {
{this.props.folders.sort((folder) => {
const pendingDocuments = folder.documents!.filter((document) => document.document_status === "PENDING");
return pendingDocuments.length >= 1 ? -1 : 1;
}).map((folder) => {
return (
<div
onClick={this.props.onCloseLeftSide}

View File

@ -25,6 +25,15 @@
height: 70px;
border: 1px solid $grey-medium;
&:disabled {
~ .fake-placeholder {
/**
TODO
* 1. Add styles so the placeholder has the same color as the background when disabled
*/
background: transparent;
}
}
&:focus {
~ .fake-placeholder {
transform: translateY(-35px);

View File

@ -12,6 +12,11 @@ export type IProps = IBaseFieldProps & {
// @ts-ignore TODO: typing error on IProps (validator class?? cf Massi 22/02/23)
export default class InputField extends BaseField<IProps> {
static override defaultProps: Partial<IBaseFieldProps> = {
...BaseField.defaultProps,
required: true
}
public override render(): ReactNode {
let pattern;
@ -46,8 +51,9 @@ export default class InputField extends BaseField<IProps> {
className={
this.props.className ? [classes["textarea"], classes[this.props.className]].join(" ") : classes["textarea"]
}
value={value}
/>
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder}</div>
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder} {!this.props.required && " (Facultatif)"}</div>
</div>
</Typography>
);
@ -66,14 +72,21 @@ export default class InputField extends BaseField<IProps> {
className={
this.props.className ? [classes["input"], classes[this.props.className]].join(" ") : classes["input"]
}
value={value}
/>
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder}</div>
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder} {!this.props.required && " (Facultatif)"}</div>
</div>
</Typography>
);
}
}
public override componentDidMount() {
this.setState({
value: this.props.defaultValue ?? "",
})
}
// We filter the props we'll pass to the primitive input as they're useless for it
// It also avoids the console warning because of passing useless props to a primitive DOM element
private getHtmlAttributes() {

View File

@ -1,9 +1,9 @@
import LogOutButton from "@Front/Components/DesignSystem/LogOutButton";
import Module from "@Front/Config/Module";
import React from "react";
import NavigationLink from "../../NavigationLink";
import classes from "./classes.module.scss";
import Module from "@Front/Config/Module";
type IProps = {
isOpen: boolean;
@ -19,8 +19,16 @@ export default class BurgerModal extends React.Component<IProps, IState> {
<>
<div className={classes["background"]} onClick={this.props.closeModal} />
<div className={classes["root"]}>
<NavigationLink path={Module.getInstance().get().modules.pages.Folder.props.path} text="Dossiers en cours" />
<NavigationLink text="Dossiers archivés" />
<NavigationLink
path={Module.getInstance().get().modules.pages.Folder.props.path}
text="Dossiers en cours"
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path]}
/>
<NavigationLink
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path}
text="Dossiers archivés"
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]}
/>
<div className={classes["separator"]} />
<LogOutButton />
</div>

View File

@ -6,12 +6,15 @@ import React from "react";
import Typography, { ITypo } from "../../Typography";
import classes from "./classes.module.scss";
type IPropsClass = {
type IProps = {
text: string | JSX.Element;
path?: string;
path: string;
isActive?: boolean;
routesActive?: string[];
};
type IPropsClass = IProps;
type IStateClass = {};
class HeaderLinkClass extends React.Component<IPropsClass, IStateClass> {
@ -37,14 +40,15 @@ class HeaderLinkClass extends React.Component<IPropsClass, IStateClass> {
}
}
export default function HeaderLink(props: IPropsClass) {
/**
* TODO: We need to fix the check and include subPathName
* BUT
* `/folder/archived` and `/folder/xxx` should be differenciated
*/
export default function HeaderLink(props: IProps) {
const router = useRouter();
const { pathname } = router;
const isActive = pathname === props.path;
let isActive = props.path === pathname;
if(props.routesActive){
for (const routeActive of props.routesActive) {
if (isActive) break;
isActive = pathname.includes(routeActive);
}
}
return <HeaderLinkClass {...props} isActive={isActive} />;
}

View File

@ -1,8 +1,8 @@
import Module from "@Front/Config/Module";
import React from "react";
import HeaderLink from "../HeaderLink";
import classes from "./classes.module.scss";
import Module from "@Front/Config/Module";
type IProps = {};
type IState = {};
@ -11,10 +11,15 @@ export default class Navigation extends React.Component<IProps, IState> {
public override render(): JSX.Element {
return (
<div className={classes["root"]}>
<HeaderLink text={"Dossiers en cours"} path={Module.getInstance().get().modules.pages.Folder.props.path} />
<HeaderLink
text={"Dossiers en cours"}
path={Module.getInstance().get().modules.pages.Folder.props.path}
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path]}
/>
<HeaderLink
text={"Dossiers archivés"}
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path}
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]}
/>
</div>
);

View File

@ -2,18 +2,19 @@ import React from "react";
import classes from "./classes.module.scss";
import Link from "next/link";
import classNames from "classnames";
import router from "next/router";
import { useEffect, useState } from "react";
import { useRouter } from "next/router";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
type IPropsClass = {
type IProps = {
text: string | JSX.Element;
path?: string;
onClick?: () => void;
isEnabled?: boolean;
isActive?: boolean;
routesActive?: string[];
};
type IPropsClass = IProps;
type IStateClass = {};
class NavigationLinkClass extends React.Component<IPropsClass, IStateClass> {
@ -33,9 +34,15 @@ class NavigationLinkClass extends React.Component<IPropsClass, IStateClass> {
}
}
export default function NavigationLink(props: IPropsClass) {
const [url, setUrl] = useState("");
useEffect(() => setUrl(router?.asPath), []);
const isActive = url === props.path;
export default function NavigationLink(props: IProps) {
const router = useRouter();
const { pathname } = router;
let isActive = props.path === pathname;
if(props.routesActive){
for (const routeActive of props.routesActive) {
if (isActive) break;
isActive = pathname.includes(routeActive);
}
}
return <NavigationLinkClass {...props} isActive={isActive} />;
}

View File

@ -2,6 +2,7 @@ import React from "react";
import classes from "./classes.module.scss";
import NavigationLink from "../../NavigationLink";
import LogOutButton from "@Front/Components/DesignSystem/LogOutButton";
import Module from "@Front/Config/Module";
type IProps = {
isOpen: boolean;
@ -17,12 +18,9 @@ export default class ProfileModal extends React.Component<IProps, IState> {
<>
<div className={classes["background"]} onClick={this.props.closeModal} />
<div className={classes["root"]}>
<NavigationLink text="Mon compte" />
<NavigationLink text="Gestion des utilisateurs" />
<NavigationLink text="Gestion des offices" />
<NavigationLink path={Module.getInstance().get().modules.pages.MyAccount.props.path} text="Mon compte" />
<NavigationLink text="CGU" />
<NavigationLink path={"/design-system"} text="Design System" />
<NavigationLink path={"/"} text="Home" />
<NavigationLink path={Module.getInstance().get().modules.pages.Home.props.path} text="Home" />
<div className={classes["separator"]} />
<LogOutButton />
</div>

View File

@ -8,7 +8,8 @@ import Notifications from "./Notifications";
import Profile from "./Profile";
import BurgerMenu from "./BurgerMenu";
import WindowStore from "@Front/Stores/WindowStore";
import Module from "@Front/Config/Module";
import Head from "next/head";
enum EHeaderOpeningState {
OPEN = "open",
CLOSED = "closed",
@ -48,8 +49,11 @@ export default class Header extends React.Component<IProps, IState> {
public override render(): JSX.Element {
return (
<div className={classes["root"]} data-open={this.state.open}>
<Head>
<link rel="shortcut icon" href={"/favicon.svg"} />
</Head>
<div className={classes["logo-container"]}>
<Link href="/">
<Link href={Module.getInstance().get().modules.pages.Home.props.path}>
<Image src={LogoIcon} alt="logo" className={classes["logo"]} />
</Link>
</div>

View File

@ -11,7 +11,7 @@
background-color: transparent;
width: 16px;
height: 16px;
border: 1px solid $green-flash;
border: 1px solid $turquoise-flash;
border-radius: 100px;
margin-right: 16px;
display: grid;
@ -24,7 +24,7 @@
content: "";
width: 10px;
height: 10px;
background-color: $green-flash;
background-color: $turquoise-flash;
border-radius: 100px;
transform: scale(0);
}

View File

@ -129,4 +129,16 @@
&.purple-flash {
color: var(--purple-flash);
}
&.green-flash {
color: var(--green-flash);
}
&.red-flash {
color: var(--red-flash);
}
&.orange-flash {
color: var(--orange-flash);
}
}

View File

@ -35,6 +35,9 @@ export enum ITypoColor {
GREY = "grey",
BLACK = "black",
PURPLE_FLASH = "purple-flash",
GREEN_FLASH = "green-flash",
ORANGE_FLASH = "orange-flash",
RED_FLASH = "red-flash",
}
export default class Typography extends React.Component<IProps, IState> {

View File

@ -7,6 +7,7 @@ import PenIcon from "@Assets/Icons/pen.svg";
import WarningBadge from "../../WarningBadge";
import Link from "next/link";
import Module from "@Front/Config/Module";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
type IProps = {
contact: {
@ -17,7 +18,7 @@ type IProps = {
cell_phone_number: Contact["cell_phone_number"];
email: Contact["email"];
};
selectedFolderUid: string;
folder: IDashBoardFolder;
isArchived?: boolean;
};
type IState = {};
@ -29,7 +30,7 @@ export default class UserFolderHeader extends React.Component<IProps, IState> {
public override render(): JSX.Element {
const redirectPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.EditClient.props.path.replace("[folderUid]", this.props.selectedFolderUid)
.modules.pages.Folder.pages.EditClient.props.path.replace("[folderUid]", this.props.folder.uid)
.replace("[clientUid]", this.props.contact.uid);
return (
<div className={classes["root"]}>
@ -59,7 +60,7 @@ export default class UserFolderHeader extends React.Component<IProps, IState> {
</div>
{!this.props.isArchived && (
<div className={classes["icons"]}>
<WarningBadge />
{this.hasPendingFiles() && <WarningBadge />}
<Link href={redirectPath}>
<Image src={PenIcon} alt="edit" className={classes["edit-icon"]} onClick={this.onEditClick} />
</Link>
@ -69,6 +70,14 @@ export default class UserFolderHeader extends React.Component<IProps, IState> {
);
}
private hasPendingFiles(){
const documents = this.props.folder.documents?.filter((document) => document.depositor.contact.uid === this.props.contact.uid) ?? [];
const notAskedDocuments = documents.filter((document) => document.document_status === "PENDING") ?? [];
console.log(this.props.contact.uid);
console.log(notAskedDocuments.length);
return notAskedDocuments.length > 0;
}
private formatPhoneNumber(phoneNumber: string): string {
if (!phoneNumber) return "";
const output = phoneNumber.split("").map((char, index) => {

View File

@ -68,7 +68,7 @@ export default class UserFolder extends React.Component<IProps, IState> {
<div className={classes["header"]} onClick={this.toggleOpen}>
<UserFolderHeader
contact={this.props.customer.contact}
selectedFolderUid={this.props.folder.uid}
folder={this.props.folder}
isArchived={this.props.isArchived}
/>
<Image

View File

@ -94,6 +94,7 @@
}
@media(max-width: $screen-s){
padding: 40px 16px 64px 16px;
flex: 1;
min-width: unset;
}
@ -102,6 +103,7 @@
display: none;
@media (max-width: $screen-s) {
display: block;
margin-bottom: 24px;
}
}

View File

@ -84,21 +84,21 @@ export default class DefaultNotaryDashboard extends React.Component<IProps, ISta
<div className={classes["right-side"]}>
{this.props.hasBackArrow && (
<>
<div className={classes["back-arrow-desktop"]}>
<BackArrow url={this.props.backArrowUrl ?? ""} />
</div>
<div className={classes["back-arrow-mobile"]}>
<Button
icon={ChevronIcon}
iconposition={"left"}
iconstyle={{ transform: "rotate(180deg)", width: "22px", height: "22px" }}
variant={EButtonVariant.LINE}
onClick={this.onOpenLeftSide}>
{this.props.mobileBackText ?? "Retour"}
</Button>
</div>
</>
<div className={classes["back-arrow-desktop"]}>
<BackArrow url={this.props.backArrowUrl ?? ""} />
</div>
)}
{this.props.mobileBackText && (
<div className={classes["back-arrow-mobile"]}>
<Button
icon={ChevronIcon}
iconposition={"left"}
iconstyle={{ transform: "rotate(180deg)", width: "22px", height: "22px" }}
variant={EButtonVariant.LINE}
onClick={this.onOpenLeftSide}>
{this.props.mobileBackText ?? "Retour"}
</Button>
</div>
)}
{this.props.children}
</div>

View File

@ -39,7 +39,7 @@ export const deed: Deed = {
};
export const contact: Contact = {
uid: "g('yeh(grgrezg",
uid: "contact_1_uid",
first_name: "John",
last_name: "Doe",
email: "johnDoe@gmail.com",
@ -52,7 +52,7 @@ export const contact: Contact = {
};
export const contact2: Contact = {
uid: "g('yeh(grgrezg",
uid: "contact_2_uid",
first_name: "Customer2",
last_name: "Doe",
email: "johnDoe@gmail.com",
@ -73,6 +73,17 @@ export const docType: DocumentType = {
private_description: "Acte de naissance private description",
archived_at: new Date(),
};
export const identityDocType: DocumentType = {
name: "Carte d'identité",
uid: "fezezfazegezrgrezg",
created_at: new Date(),
updated_at: new Date(),
public_description: "Carte d'identité public description",
private_description: "Carte d'identité private description",
archived_at: new Date(),
};
export const customer: Customer = {
uid: "erhtgerfzeare",
contact: contact,
@ -80,6 +91,15 @@ export const customer: Customer = {
updated_at: new Date(),
status: ECustomerStatus.VALIDATED,
};
export const customer2_mock: Customer = {
uid: "yregrgetergrt",
contact: contact2,
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.VALIDATED,
};
export const folder: OfficeFolder = {
uid: "mkovrijvrezviev",
folder_number: "12331",
@ -97,7 +117,7 @@ export const folder: OfficeFolder = {
export const document: Document = {
uid: "fzeafergreztyzgrf",
depositor: customer,
depositor: customer2_mock,
document_status: "ASKED",
folder: folder,
document_type: docType,
@ -123,20 +143,39 @@ export const fileMock2: File = {
"https://minteed-prod-euwest3-s3.s3.eu-west-3.amazonaws.com/Qm_Wq_En1_DCA_8yt_RX_Qx_QFA_9_Fm_ZKZH_Qqb_VH_1_Q_Mnv_G_Jtt1_FS_Xp_2a35a36e19",
};
export const identityFile: File = {
uid: "identity_file_uid",
created_at: new Date(),
updated_at: new Date(),
document: document,
file_path: "https://minteed-stg-euwest3-s3.s3.eu-west-3.amazonaws.com/cni_fake_c7259d4923.png"
};
export const documentIdentity: Document = {
uid: "ethrthbkjtrbporjbh",
depositor: customer2_mock,
document_status: "PENDING",
folder: folder,
document_type: identityDocType,
updated_at: new Date(),
created_at: new Date(),
files: [identityFile],
};
export const documentPending: Document = {
uid: "fzefeazdagrtetrury",
depositor: customer,
depositor: customer2_mock,
document_status: "PENDING",
folder: folder,
document_type: docType,
updated_at: new Date(),
created_at: new Date(),
files: [fileMock2],
files: [fileMock,fileMock2],
};
export const documentDeposited: Document = {
uid: "uè§u§htfgrthytrgr",
depositor: customer,
depositor: customer2_mock,
document_status: "VALIDATED",
folder: folder,
document_type: docType,
@ -151,7 +190,7 @@ export const customer2: Customer = {
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.VALIDATED,
documents: [document, documentPending, documentDeposited],
documents: [document, documentPending, documentDeposited, documentIdentity],
};
export const folderWithPendingDocument: OfficeFolder = {
@ -165,7 +204,7 @@ export const folderWithPendingDocument: OfficeFolder = {
updated_at: new Date(),
description: "Description",
archived_description: "Archived description",
documents: [document, documentPending, documentDeposited],
documents: [],
};
export const folderWithPendingDocument1: OfficeFolder = {
uid: "gtrtyutyhretgytu",
@ -221,7 +260,7 @@ export const folderWithPendingDocument3: OfficeFolder = {
updated_at: new Date(),
description: "Description",
archived_description: "Archived description",
documents: [document, documentDeposited, documentPending],
documents: [document, documentDeposited, documentPending, documentIdentity],
office_folder_has_customers: [officeFolderHasCustomer1, officeFolderHasCustomer2],
};

View File

@ -4,7 +4,7 @@ import CheckBox from "@Front/Components/DesignSystem/CheckBox";
import Form, { IApiFormErrors } from "@Front/Components/DesignSystem/Form";
import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Select, { IOption } from "@Front/Components/DesignSystem/Select";
import { IOption } from "@Front/Components/DesignSystem/Select";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
@ -15,19 +15,12 @@ import classes from "./classes.module.scss";
type IProps = {};
type IState = {
actType: IOption | null;
isCreateDocumentModalVisible: boolean;
documentName: string;
visibleDescription: string;
};
export default class AskDocuments extends BasePage<IProps, IState> {
private actsOptions: IOption[] = [
{ label: "Divorce", value: "divorce" },
{ label: "Succession", value: "succession" },
{ label: "Vente immobilière", value: "vente_immobiliere" },
];
private documentsType: IOption[] = [
{ label: "Carte d'identité", value: "carte_identite" },
{ label: "Diagnostic État Risques et Pollution", value: "diagnostic_erep" },
@ -46,13 +39,11 @@ export default class AskDocuments extends BasePage<IProps, IState> {
super(props);
this.state = {
actType: null,
isCreateDocumentModalVisible: false,
documentName: "",
visibleDescription: "",
};
this.onActTypeChange = this.onActTypeChange.bind(this);
this.onFormSubmit = this.onFormSubmit.bind(this);
this.closeModal = this.closeModal.bind(this);
this.openModal = this.openModal.bind(this);
@ -73,38 +64,27 @@ export default class AskDocuments extends BasePage<IProps, IState> {
</Typography>
<Form onSubmit={this.onFormSubmit}>
<div className={classes["form-container"]}>
{!this.state.actType && (
<Select options={this.actsOptions} placeholder={"Type dacte"} onChange={this.onActTypeChange} />
)}
{this.state.actType && (
<>
<div className={classes["checkbox-container"]}>
{this.documentsType.map((documentType) => (
<CheckBox
toolTip="Checkbox with tooltip"
option={documentType}
key={documentType.value as string}
/>
))}
</div>
<div className={classes["add-document-container"]}>
<Button
icon={PlusIcon}
iconposition={"right"}
iconstyle={{ transform: "rotate(180deg)", width: "22px", height: "22px" }}
variant={EButtonVariant.LINE}
onClick={this.openModal}>
Ajouter un document
</Button>
</div>
<div className={classes["buttons-container"]}>
<Button variant={EButtonVariant.GHOST} onClick={this.cancel}>
Annuler
</Button>
<Button type="submit">Valider</Button>
</div>
</>
)}
<div className={classes["checkbox-container"]}>
{this.documentsType.map((documentType) => (
<CheckBox toolTip="Checkbox with tooltip" option={documentType} key={documentType.value as string} />
))}
</div>
<div className={classes["add-document-container"]}>
<Button
icon={PlusIcon}
iconposition={"right"}
iconstyle={{ transform: "rotate(180deg)", width: "22px", height: "22px" }}
variant={EButtonVariant.LINE}
onClick={this.openModal}>
Ajouter un document
</Button>
</div>
<div className={classes["buttons-container"]}>
<Button variant={EButtonVariant.GHOST} onClick={this.cancel}>
Annuler
</Button>
<Button type="submit">Valider</Button>
</div>
</div>
</Form>
<Confirm
@ -166,7 +146,6 @@ export default class AskDocuments extends BasePage<IProps, IState> {
private cancel() {
this.setState({
actType: null,
visibleDescription: "",
documentName: "",
});
@ -188,12 +167,6 @@ export default class AskDocuments extends BasePage<IProps, IState> {
});
}
private onActTypeChange(selectedOption: IOption) {
this.setState({
actType: selectedOption,
});
}
private onFormSubmit(
e: React.FormEvent<HTMLFormElement> | null,
values: {

View File

@ -14,6 +14,7 @@ import { NextRouter, useRouter } from "next/router";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import ClientSection from "./ClientSection";
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
import { OfficeFolder } from "le-coffre-resources/dist/Customer";
@ -39,6 +40,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
this.openArchivedModal = this.openArchivedModal.bind(this);
this.closeArchivedModal = this.closeArchivedModal.bind(this);
this.onArchivedModalAccepted = this.onArchivedModalAccepted.bind(this);
this.getCompletionNumber = this.getCompletionNumber.bind(this);
}
// TODO: Message if the user has not created any folder yet
@ -48,7 +50,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
.get()
.modules.pages.Folder.pages.EditCollaborators.props.path.replace("[folderUid]", this.props.selectedFolderUid);
return (
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder} isArchived={false}>
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder} isArchived={false} mobileBackText="Retour aux dossiers">
<div className={classes["root"]}>
{this.state.selectedFolder ? (
<div className={classes["folder-informations"]}>
@ -68,7 +70,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
<FolderBoxInformation folder={this.state.selectedFolder} type={EFolderBoxInformationType.DESCRIPTION} />
</div>
<div className={classes["progress-bar"]}>
<QuantityProgressBar title="Complétion du dossier" total={100} currentNumber={0} />
<QuantityProgressBar title="Complétion du dossier" total={100} currentNumber={this.getCompletionNumber()} />
</div>
{this.doesFolderHaveCustomer() && <ClientSection folder={this.state.selectedFolder} />}
</div>
@ -119,6 +121,16 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
});
}
private getCompletionNumber(){
const documents = this.state.selectedFolder?.documents;
if(!documents) return 0;
const totalDocuments = documents.length;
const askedDocuments = documents.filter((document) => document.document_status === EDocumentStatus.ASKED).length;
const depositedDocuments = totalDocuments - askedDocuments;
const percentage = (depositedDocuments / totalDocuments) * 100;
return isNaN(percentage) ? 0 : percentage;
}
private doesFolderHaveCustomer(): boolean {
if (!this.state.selectedFolder?.office_folder_has_customers) return false;
return this.state.selectedFolder?.office_folder_has_customers!.length > 0;

View File

@ -1,20 +1,28 @@
import "reflect-metadata";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form";
import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow";
import { folders } from "@Front/Components/Layouts/DesignSystem/dummyData";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import { useRouter } from "next/router";
import Module from "@Front/Config/Module";
import { Contact } from "le-coffre-resources/dist/Customer";
import Link from "next/link";
import { NextRouter, useRouter } from "next/router";
import { ChangeEvent } from "react";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import Link from "next/link";
import { ChangeEvent } from "react";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Module from "@Front/Config/Module";
type IProps = {
type IProps = {};
type IPropsClass = IProps & {
selectedFolderUid: string;
router: NextRouter;
client: Contact | null;
};
type IState = {
selectedFolder: IDashBoardFolder | null;
@ -24,9 +32,11 @@ type IState = {
inputPhoneNumberValue: string;
isOpenLeavingModal: boolean;
doesInputHaveValues: boolean;
inputBirthdate: Date | null;
inputAddress: string;
};
class UpdateClientClass extends BasePage<IProps, IState> {
constructor(props: IProps) {
class UpdateClientClass extends BasePage<IPropsClass, IState> {
constructor(props: IPropsClass) {
super(props);
this.state = {
selectedFolder: null,
@ -36,6 +46,8 @@ class UpdateClientClass extends BasePage<IProps, IState> {
inputPhoneNumberValue: "",
isOpenLeavingModal: false,
doesInputHaveValues: false,
inputBirthdate: null,
inputAddress: "",
};
this.onSelectedFolder = this.onSelectedFolder.bind(this);
this.onChangeNameInput = this.onChangeNameInput.bind(this);
@ -44,34 +56,54 @@ class UpdateClientClass extends BasePage<IProps, IState> {
this.onChangePhoneNumberInput = this.onChangePhoneNumberInput.bind(this);
this.openLeavingModal = this.openLeavingModal.bind(this);
this.closeLeavingModal = this.closeLeavingModal.bind(this);
this.leavePage = this.leavePage.bind(this);
this.onChangeBirthDateInput = this.onChangeBirthDateInput.bind(this);
this.onChangeAddressInput = this.onChangeAddressInput.bind(this);
}
private backwardPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.selectedFolderUid);
public override render(): JSX.Element {
const backwardPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.selectedFolderUid);
return (
<DefaultNotaryDashboard title={"Ajouter client(s)"} onSelectedFolder={this.onSelectedFolder}>
<div className={classes["root"]}>
<div className={classes["back-arrow"]}>
<BackArrow url={backwardPath} />
<BackArrow url={this.backwardPath} />
</div>
<Typography typo={ITypo.H1Bis}>Modifier les informations du client</Typography>
<Form className={classes["form"]}>
<div className={classes["content"]}>
<InputField name="input field" fakeplaceholder="Nom" onChange={this.onChangeNameInput} />
<InputField name="input field" fakeplaceholder="Prénom" onChange={this.onChangeFirstNameInput} />
<InputField name="input field" fakeplaceholder="E-mail" isEmail onChange={this.onChangeEmailInput} />
<InputField name="input field" fakeplaceholder="Nom" onChange={this.onChangeNameInput} defaultValue={this.props.client?.first_name}/>
<InputField name="input field" fakeplaceholder="Prénom" onChange={this.onChangeFirstNameInput} defaultValue={this.props.client?.last_name}/>
<InputField name="input field" fakeplaceholder="E-mail" isEmail onChange={this.onChangeEmailInput} defaultValue={this.props.client?.email}/>
<InputField
name="input field"
fakeplaceholder="Numéro de téléphone"
isPositiveNumber
onChange={this.onChangePhoneNumberInput}
defaultValue={this.props.client?.phone_number}
/>
<InputField
name="birthdate"
type="date"
fakeplaceholder="Date de naissance"
required={false}
onChange={this.onChangeBirthDateInput}
/>
<InputField
name="address"
type="text"
fakeplaceholder="Adresse"
required={false}
onChange={this.onChangeAddressInput}
/>
</div>
<div className={classes["button-container"]}>
{!this.doesInputsHaveValues() ? (
<Link href={backwardPath} className={classes["cancel-button"]}>
<Link href={this.backwardPath} className={classes["cancel-button"]}>
<Button variant={EButtonVariant.GHOST}>Annuler</Button>
</Link>
) : (
@ -89,13 +121,18 @@ class UpdateClientClass extends BasePage<IProps, IState> {
header={"Êtes-vous sur de vouloir quitter sans enregistrer ?"}
cancelText={"Annuler"}
confirmText={"Quitter"}
cancelPath={backwardPath}>
onAccept={this.leavePage}>
Si vous quittez, toutes les modifications que vous avez effectuées ne seront pas enregistrées.{" "}
</Confirm>
</div>
</DefaultNotaryDashboard>
);
}
private leavePage() {
this.props.router.push(this.backwardPath);
}
private openLeavingModal(): void {
this.setState({ isOpenLeavingModal: true });
}
@ -104,6 +141,14 @@ class UpdateClientClass extends BasePage<IProps, IState> {
this.setState({ isOpenLeavingModal: false });
}
private onChangeBirthDateInput(event: ChangeEvent<HTMLInputElement & HTMLSelectElement & HTMLTextAreaElement>) {
this.setState({ inputBirthdate: new Date(event.target.value) });
}
private onChangeAddressInput(event: ChangeEvent<HTMLInputElement & HTMLSelectElement & HTMLTextAreaElement>) {
this.setState({ inputAddress: event.target.value });
}
private onChangeNameInput(event: ChangeEvent<HTMLInputElement & HTMLSelectElement & HTMLTextAreaElement>) {
this.setState({ inputNameValue: event.target.value });
}
@ -132,9 +177,15 @@ class UpdateClientClass extends BasePage<IProps, IState> {
}
}
export default function UpdateClient() {
export default function UpdateClient(props: IProps) {
const router = useRouter();
let { folderUid } = router.query;
let { folderUid, clientUid } = router.query;
folderUid = folderUid as string;
return <UpdateClientClass selectedFolderUid={folderUid} />;
let client = null;
const folder = folders.find((folder) => folder.uid === folderUid) ?? null;
if (folder && folder.office_folder_has_customers) {
client = folder.office_folder_has_customers.find((client) => client.customer.contact.uid === clientUid) ?? null;
}
return <UpdateClientClass {...props} router={router} selectedFolderUid={folderUid} client={client?.customer.contact ?? null} />;
}

View File

@ -10,6 +10,7 @@ import Link from "next/link";
import { useRouter } from "next/router";
import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import MultiSelect from "@Front/Components/DesignSystem/MultiSelect";
import Module from "@Front/Config/Module";
type IPropsClass = {
selectedFolderUid: string;
@ -35,7 +36,8 @@ class UpdateFolderCollaboratorsClass extends BasePage<IPropsClass, IState> {
this.onSelectedOptionSpecific = this.onSelectedOptionSpecific.bind(this);
}
public override render(): JSX.Element {
const backwardPath = "/folder/".concat(this.props.selectedFolderUid);
const foldersInformationPath = Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path;
const backwardPath = foldersInformationPath.replace("[folderUid]", this.props.selectedFolderUid);
const selectOptions = [
{ value: "adazzdsqaad", label: "John Doe" },
{ value: "azdzafzad", label: "Jahn Doe" },

View File

@ -3,16 +3,17 @@ import Form from "@Front/Components/DesignSystem/Form";
import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow";
import { folders } from "@Front/Components/Layouts/DesignSystem/dummyData";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module";
import Link from "next/link";
import { useRouter } from "next/router";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import Link from "next/link";
import Module from "@Front/Config/Module";
type IProps = {
selectedFolderUid: string;
folder: IDashBoardFolder | null;
};
type IState = {
selectedFolder: IDashBoardFolder | null;
@ -28,7 +29,7 @@ class UpdateFolderDescriptionClass extends BasePage<IProps, IState> {
public override render(): JSX.Element {
const backwardPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.selectedFolderUid);
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folder?.uid ?? "");
return (
<DefaultNotaryDashboard title={"Ajouter client(s)"} onSelectedFolder={this.onSelectedFolder}>
<div className={classes["root"]}>
@ -39,7 +40,7 @@ class UpdateFolderDescriptionClass extends BasePage<IProps, IState> {
<Form className={classes["form"]}>
<div className={classes["content"]}>
<InputField name="input field" fakeplaceholder="Note du dossier" textarea />
<InputField name="input field" fakeplaceholder="Note du dossier" textarea defaultValue={this.props.folder?.description ?? ""} />
</div>
<div className={classes["button-container"]}>
@ -63,5 +64,6 @@ export default function UpdateFolderDescription() {
const router = useRouter();
let { folderUid } = router.query;
folderUid = folderUid as string;
return <UpdateFolderDescriptionClass selectedFolderUid={folderUid} />;
const folder = folders.find((folder) => folder.uid === folderUid) ?? null;
return <UpdateFolderDescriptionClass folder={folder} />;
}

View File

@ -4,16 +4,17 @@ import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField"
import Select, { IOption } from "@Front/Components/DesignSystem/Select";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow";
import { folders } from "@Front/Components/Layouts/DesignSystem/dummyData";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module";
import Link from "next/link";
import { useRouter } from "next/router";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import Link from "next/link";
import Module from "@Front/Config/Module";
type IProps = {
selectedFolderUid: string;
folder: IDashBoardFolder | null;
};
type IState = {
selectedFolder: IDashBoardFolder | null;
@ -36,7 +37,7 @@ class UpdateFolderMetadataClass extends BasePage<IProps, IState> {
];
const backwardPath = Module.getInstance()
.get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.selectedFolderUid);
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folder?.uid!);
return (
<DefaultNotaryDashboard title={"Ajouter client(s)"} onSelectedFolder={this.onSelectedFolder}>
<div className={classes["root"]}>
@ -47,15 +48,23 @@ class UpdateFolderMetadataClass extends BasePage<IProps, IState> {
<Form className={classes["form"]}>
<div className={classes["content"]}>
<InputField name="input field" fakeplaceholder="Intitulé du dossier" />
<InputField name="input field" fakeplaceholder="Numéro de dossier" />
<InputField name="input field" fakeplaceholder="Intitulé du dossier" defaultValue={this.props.folder?.name} />
<InputField
name="input field"
fakeplaceholder="Numéro de dossier"
defaultValue={this.props.folder?.folder_number}
/>
<Select
options={selectOptions}
onChange={this.onSelectedOption}
placeholder={"Type dacte"}
selectedOption={this.state.selectedOption}
/>
<InputField name="input field" fakeplaceholder="Ouverture du dossier" />
<InputField
name="input field"
fakeplaceholder="Ouverture du dossier"
defaultValue={formatDate(this.props.folder?.created_at!)}
/>
</div>
<div className={classes["button-container"]}>
@ -70,6 +79,15 @@ class UpdateFolderMetadataClass extends BasePage<IProps, IState> {
);
}
public override componentDidMount(): void {
this.setState({
selectedOption: {
label: this.props.folder?.deed.deed_type?.name ?? "",
value: this.props.folder?.deed.deed_type?.uid ?? "",
},
});
}
private onSelectedOption(option: IOption) {
this.setState({
selectedOption: option,
@ -85,5 +103,15 @@ export default function UpdateFolderMetadata() {
const router = useRouter();
let { folderUid } = router.query;
folderUid = folderUid as string;
return <UpdateFolderMetadataClass selectedFolderUid={folderUid} />;
const folder = folders.find((folder) => folder.uid === folderUid) ?? null;
return <UpdateFolderMetadataClass folder={folder} />;
}
function formatDate(date: Date | null): string {
if (!date) return "...";
return date.toLocaleDateString("fr-FR", {
year: "numeric",
month: "long",
day: "numeric",
});
}

View File

@ -0,0 +1,37 @@
@import "@Themes/constants.scss";
.root{
background-color: var(--grey-soft);
padding: 24px;
.result-text{
color: rgba(0, 0, 0, 0.4);
}
.result-container{
display: flex;
.percentage-container{
display: flex;
align-items: center;
gap: 8px;
.dot{
width: 11px;
height: 11px;
border-radius: 50px;
&[data-color="green-flash"]{
background-color: var(--green-flash);
}
&[data-color="orange-flash"]{
background-color: var(--orange-flash);
}
&[data-color="red-flash"]{
background-color: var(--red-flash);
}
}
}
}
}

View File

@ -0,0 +1,41 @@
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import React from "react";
import classes from "./classes.module.scss";
type IProps = {
percentage: number;
};
type IState = {};
export default class OcrResult extends React.Component<IProps, IState> {
public override render(): JSX.Element | null {
return (
<div className={classes["root"]}>
<Typography typo={ITypo.P_16} className={classes["result-text"]}>
Résultat de l'analyse :
</Typography>
<div className={classes["result-container"]}>
<Typography typo={ITypo.P_18} color={ITypoColor.BLACK}>
Document conforme à :&nbsp;
</Typography>
<div className={classes["percentage-container"]}>
<Typography typo={ITypo.P_18} color={this.getColor()}>
{this.props.percentage}%
</Typography>
<div className={classes["dot"]} data-color={this.getColor()} />
</div>
</div>
</div>
);
}
private getColor() {
if (this.props.percentage > 75) {
return ITypoColor.GREEN_FLASH;
} else {
return ITypoColor.RED_FLASH;
}
}
}

View File

@ -26,18 +26,27 @@
}
.file-container{
max-width: 1000px;
margin: auto;
min-height: 700px;
flex: 1;
}
}
.buttons-container {
display: flex;
gap: 24px;
justify-content: center;
margin-top: 32px;
@media (max-width: $screen-s) {
flex-direction: column-reverse;
.footer{
width: fit-content;
margin: auto;
.ocr-container{
margin-top: 42px;
}
.buttons-container {
display: flex;
gap: 24px;
justify-content: center;
margin-top: 32px;
@media (max-width: $screen-s) {
flex-direction: column-reverse;
}
}
}

View File

@ -1,4 +1,5 @@
import "reflect-metadata";
import LeftArrowIcon from "@Assets/Icons/left-arrow.svg";
import RightArrowIcon from "@Assets/Icons/right-arrow.svg";
import ValidateAnchoringGif from "@Front/Assets/images/validate_anchoring.gif";
@ -10,18 +11,18 @@ import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import { folders } from "@Front/Components/Layouts/DesignSystem/dummyData";
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import { Document } from "le-coffre-resources/dist/Customer";
import { Document, File } from "le-coffre-resources/dist/Customer";
import Image from "next/image";
import { NextRouter, useRouter } from "next/router";
import React from "react";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import OcrResult from "./OcrResult";
type IProps = {};
type IPropsClass = {
documentsList: Document[];
selectedDocument: Document | null;
router: NextRouter;
folderUid: string;
@ -32,8 +33,8 @@ type IState = {
isValidateModalVisible: boolean;
refuseText: string;
hasValidateAnchoring: boolean;
selectedDocument: Document | null;
selectedDocumentIndex: number;
selectedFileIndex: number;
selectedFile: File | null;
};
class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
@ -45,8 +46,8 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
isRefuseModalVisible: false,
refuseText: "",
hasValidateAnchoring: false,
selectedDocument: null,
selectedDocumentIndex: -1,
selectedFileIndex: 0,
selectedFile: null,
};
this.closeModals = this.closeModals.bind(this);
@ -64,37 +65,58 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
public override render(): JSX.Element | null {
return (
<DefaultNotaryDashboard title={"Demander des documents"} hasBackArrow mobileBackText="Retour aux documents">
{this.state.selectedDocument && (
{this.props.selectedDocument && this.props.selectedDocument.files && this.state.selectedFile && (
<div className={classes["root"]}>
<Typography typo={ITypo.H1} color={ITypoColor.BLACK} className={classes["title"]}>
App 23 rue Torus Toulon
</Typography>
<Typography typo={ITypo.H3} color={ITypoColor.PURPLE_FLASH} className={classes["subtitle"]}>
{this.state.selectedDocument.document_type.name}
<Typography typo={ITypo.H3} color={ITypoColor.BLACK} className={classes["subtitle"]}>
{this.props.selectedDocument.document_type.name}
</Typography>
<div className={classes["document-container"]}>
{this.props.documentsList.length > 1 && (
<div className={classes["arrow-container"]} onClick={this.goToPrevious} data-disabled={(!this.hasPrevious()).toString()}>
{this.props.selectedDocument.files.length > 1 && (
<div
className={classes["arrow-container"]}
onClick={this.goToPrevious}
data-disabled={(!this.hasPrevious()).toString()}>
<Image src={LeftArrowIcon} alt="left arrow" />
</div>
)}
<div className={classes["file-container"]}>
{this.state.selectedDocument.files?.map((file) => (
<FilePreview href={file.file_path as string} key={file.uid} />
))}
<FilePreview href={this.state.selectedFile.file_path as string} key={this.state.selectedFile.uid} />
</div>
{this.props.documentsList.length > 1 && (
<div className={classes["arrow-container"]} onClick={this.goToNext} data-disabled={(!this.hasNext()).toString()}>
{this.props.selectedDocument.files.length > 1 && (
<div
className={classes["arrow-container"]}
onClick={this.goToNext}
data-disabled={(!this.hasNext()).toString()}>
<Image src={RightArrowIcon} alt="right arrow" />
</div>
)}
</div>
<div className={classes["buttons-container"]}>
<Button variant={EButtonVariant.GHOST} onClick={this.openRefuseModal}>
Refuser
</Button>
<Button onClick={this.openValidateModal}>Valider et ancrer</Button>
<Button disabled>Télécharger</Button>
<div className={classes["footer"]}>
{this.props.selectedDocument?.document_type.name === "Carte d'identité" && (
<div className={classes["ocr-container"]}>
<OcrResult percentage={this.getRandomPercentageForOcr()} />
</div>
)}
<div className={classes["buttons-container"]}>
{this.props.selectedDocument?.document_status === "PENDING" && (
<>
<Button variant={EButtonVariant.GHOST} onClick={this.openRefuseModal}>
Refuser
</Button>
<Button onClick={this.openValidateModal}>Valider et ancrer</Button>
<Button disabled>Télécharger</Button>
</>
)}
{this.props.selectedDocument?.document_status === "VALIDATED" && (
<a href={this.state.selectedFile.file_path!} download>
<Button>Télécharger</Button>
</a>
)}
</div>
</div>
<Confirm
isOpen={this.state.isValidateModalVisible}
@ -132,8 +154,7 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
closeBtn
header={"Refuser le document ?"}
cancelText={"Annuler"}
confirmText={"Refuser"}
canConfirm={this.state.refuseText !== ""}>
confirmText={"Refuser"}>
<div className={classes["refuse-document-container"]}>
<Typography typo={ITypo.P_16} color={ITypoColor.BLACK} className={classes["refuse-text"]}>
Veuillez indiquer au client le motif du refus de son document afin qu'il puisse vous renvoyer une bonne
@ -144,7 +165,7 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
</Confirm>
</div>
)}
{!this.state.selectedDocument && (
{(!this.state.selectedFile || !this.props.selectedDocument) && (
<div className={classes["root"]}>
<Typography typo={ITypo.P_16} color={ITypoColor.BLACK} className={classes["refuse-text"]}>
Document non trouvé
@ -156,52 +177,76 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
}
override componentDidMount(): void {
if (!this.props.selectedDocument) return;
if (!this.props.selectedDocument || !this.props.selectedDocument.files || !this.props.selectedDocument.files[0]) return;
this.setState({
selectedDocument: this.props.selectedDocument,
selectedDocumentIndex: this.props.documentsList.findIndex((doc) => doc.uid === this.props.selectedDocument!.uid),
selectedFile: this.props.selectedDocument.files[0],
selectedFileIndex: 0,
});
}
override componentDidUpdate(prevProps: Readonly<IPropsClass>, prevState: Readonly<IState>, snapshot?: any): void {
if (prevProps.selectedDocument !== this.props.selectedDocument) {
this.setState({
selectedDocument: this.props.selectedDocument,
selectedDocumentIndex: this.props.documentsList.findIndex((doc) => doc.uid === this.props.selectedDocument!.uid),
});
}
private getRandomPercentageForOcr() {
// find diff
let difference = 100 - 90;
// generate random number
let rand = Math.random();
// multiply with difference
rand = Math.floor(rand * difference);
// add with min value
rand = rand + 90;
return rand;
}
private goToPrevious() {
const index = this.state.selectedFileIndex - 1;
if (this.hasPrevious()) {
this.props.router.push(
`/folders/${this.props.folderUid}/documents/${this.props.documentsList[this.state.selectedDocumentIndex - 1]!.uid}`,
);
this.setState({
selectedFile: this.props.selectedDocument!.files![index]!,
selectedFileIndex: index,
});
}
}
private goToNext() {
if (this.hasNext()) {
this.props.router.push(
`/folders/${this.props.folderUid}/documents/${this.props.documentsList[this.state.selectedDocumentIndex + 1]!.uid}`,
);
const index = this.state.selectedFileIndex + 1;
this.setState({
selectedFile: this.props.selectedDocument!.files![index]!,
selectedFileIndex: index,
});
}
}
private hasPrevious() {
const index = this.state.selectedDocumentIndex - 1;
const index = this.state.selectedFileIndex - 1;
return index >= 0;
}
private hasNext() {
const index = this.state.selectedDocumentIndex + 1;
return index < this.props.documentsList.length;
const index = this.state.selectedFileIndex + 1;
return index < this.props.selectedDocument!.files!.length;
}
private validateAnchoring() {
this.setState({
hasValidateAnchoring: true,
});
const timeoutDelay = 9800;
setTimeout(() => {
this.setState({
isValidateModalVisible: false,
});
}, timeoutDelay);
setTimeout(() => {
this.setState({
hasValidateAnchoring: false,
});
}, timeoutDelay + 1000);
}
private onRefuseTextChange(e: React.ChangeEvent<HTMLInputElement>) {
@ -234,16 +279,9 @@ export default function ViewDocuments(props: IProps) {
const router = useRouter();
let { folderUid, documentUid } = router.query;
const folder = folders[0]!;
const documents = folder.documents!.filter((document) => document.document_status !== "ASKED");
const folder = folders.find((folder) => folder.uid === folderUid) ?? null;
console.log(folder);
const documents = folder?.documents!.filter((document) => document.document_status !== "ASKED") ?? [];
const selectedDocument = documents.find((document) => document.uid === documentUid) ?? null;
return (
<ViewDocumentsClass
{...props}
documentsList={documents}
selectedDocument={selectedDocument}
router={router}
folderUid={folderUid as string}
/>
);
return <ViewDocumentsClass {...props} selectedDocument={selectedDocument} router={router} folderUid={folderUid as string} />;
}

View File

@ -22,7 +22,7 @@ export default class Folder extends BasePage<IProps, IState> {
// TODO: Message if the user has not created any folder yet
public override render(): JSX.Element {
return (
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder}>
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder} mobileBackText={"Liste des dossiers"}>
<div className={classes["root"]}>
<div className={classes["no-folder-selected"]}>
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>

View File

@ -21,7 +21,7 @@ export default class Folder extends BasePage<IProps, IState> {
// TODO: Message if the user has not created any folder yet
public override render(): JSX.Element {
return (
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder} isArchived>
<DefaultNotaryDashboard title={"Dossier"} onSelectedFolder={this.onSelectedFolder} isArchived mobileBackText={"Liste des dossiers"}>
<div className={classes["root"]}>
<div className={classes["no-folder-selected"]}>
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>

View File

@ -25,10 +25,10 @@ export default class MyAccount extends Base<IProps, IState> {
</Typography>
<Form onSubmit={this.onFormSubmit}>
<div className={classes["form-container"]}>
<InputField name="name" fakeplaceholder="Nom" type="text" />
<InputField name="surname" fakeplaceholder="Prénom" type="text" />
<InputField name="email" fakeplaceholder="E-mail" type="email" />
<InputField name="phone" fakeplaceholder="Numéro de téléphone" type="tel" />
<InputField name="name" fakeplaceholder="Nom" type="text" disabled />
<InputField name="surname" fakeplaceholder="Prénom" type="text" disabled />
<InputField name="email" fakeplaceholder="E-mail" type="email" disabled />
<InputField name="phone" fakeplaceholder="Numéro de téléphone" type="tel" disabled />
</div>
</Form>
</div>
@ -38,10 +38,15 @@ export default class MyAccount extends Base<IProps, IState> {
</Typography>
<Form onSubmit={this.onFormSubmit}>
<div className={classes["form-container"]}>
<InputField name="office_denomination" fakeplaceholder="Dénomination de l'office" type="text" />
<InputField name="crpcen" fakeplaceholder="CRPCEN" type="number" />
<InputField name="cp_address" fakeplaceholder="Adresse CP" type="text" />
<InputField name="city" fakeplaceholder="Ville" type="text" />
<InputField
name="office_denomination"
fakeplaceholder="Dénomination de l'office"
type="text"
disabled
/>
<InputField name="crpcen" fakeplaceholder="CRPCEN" type="number" disabled />
<InputField name="cp_address" fakeplaceholder="Adresse CP" type="text" disabled />
<InputField name="city" fakeplaceholder="Ville" type="text" disabled />
</div>
</Form>
</div>

View File

@ -6,4 +6,13 @@
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
.buttons-container{
margin-top: 32px;
}
@media(max-width: $screen-s){
margin-top: 32px;
}
}

View File

@ -1,20 +1,23 @@
import Button from "@Front/Components/DesignSystem/Button";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate";
import Module from "@Front/Config/Module";
import Link from "next/link";
import BasePage from "../Base";
import classes from "./classes.module.scss";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import Button from "@Front/Components/DesignSystem/Button";
import Module from "@Front/Config/Module";
export default class PageNotFound extends BasePage {
public override render(): JSX.Element {
return (
<DefaultTemplate title={"Project Not Found"}>
<div className={classes["root"]}>
<Typography typo={ITypo.H3}>Il n'y a rien ici, la page que vous avez demandé n'existe pas</Typography>
<Link href={Module.getInstance().get().modules.pages.Home.props.path}>
<Button>Retourner à la page d'accueil</Button>
</Link>
<Typography typo={ITypo.H3}>Il n'y a rien ici, la page que vous avez demandée n'existe pas</Typography>
<div className={classes["buttons-container"]}>
<Link href={Module.getInstance().get().modules.pages.Home.props.path}>
<Button>Retourner à la page d'accueil</Button>
</Link>
</div>
</div>
</DefaultTemplate>
);

View File

@ -6,7 +6,7 @@
"Home": {
"enabled": true,
"props": {
"path": "/",
"path": "/folders",
"labelKey": "homepage"
}
},

View File

@ -6,7 +6,7 @@
"Home": {
"enabled": true,
"props": {
"path": "/",
"path": "/folders",
"labelKey": "homepage"
}
},

View File

@ -6,7 +6,7 @@
"Home": {
"enabled": true,
"props": {
"path": "/",
"path": "/folders",
"labelKey": "homepage"
}
},

View File

@ -6,7 +6,7 @@
"Home": {
"enabled": true,
"props": {
"path": "/",
"path": "/folders",
"labelKey": "homepage"
}
},

View File

@ -1,6 +1,6 @@
// $screen-xl: 2559px;
$screen-l: 1440px;
$screen-ls: 1300px;
$screen-ls: 1280px;
$screen-m: 1023px;
$screen-s: 767px;
// $screen-xs: 424px;