This commit is contained in:
+2
-2
@@ -2,9 +2,9 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="/fav.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>dpage-editor</title>
|
<title>کاتالوگ دیجیتال | داناک</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_13784_19054)">
|
||||||
|
<path d="M4 14.1001V10.0001C4.4 10.0001 4.9 9.90006 5.3 9.90006H17.7C23.9 9.90006 28.2 14.3001 28.1 20.2001C28.1 25.9001 23.6 30.2001 17.6 30.3001H8.3V33.8001C13.4 33.4001 19.7 34.9001 24.6 31.9001C29.3 29.0001 32.7 22.3001 31.3 17.2001C29.8 11.5001 24 6.70006 18.2 6.60006H4V2.00006H13.3C16.1425 1.91726 18.9868 2.08457 21.8 2.50006C25.8647 3.32115 29.5123 5.54253 32.1072 8.77703C34.7021 12.0115 36.0798 16.0541 36 20.2001C35.7 29.0001 29.5 36.5001 20.9 37.5001C15.4 38.1001 9.8 37.6001 4.1 37.6001V17.4001H8.2V25.6001C11.8 25.6001 16.2 25.9001 19.6 25.6001C21.9 25.3001 24.1 21.8001 23.8 19.2001C23.5353 17.8626 22.8484 16.6454 21.8403 15.7273C20.8323 14.8093 19.5563 14.2389 18.2 14.1001H4Z" fill="black"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_13784_19054">
|
||||||
|
<rect width="32" height="35.8" fill="white" transform="translate(4 2)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 993 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB |
+33
-91
@@ -1,91 +1,33 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 229.9 36.8">
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<defs>
|
||||||
viewBox="0 0 961.6 222.5" style="enable-background:new 0 0 961.6 222.5;" xml:space="preserve">
|
<style>
|
||||||
<style type="text/css">
|
.cls-1 {
|
||||||
.st0{fill:#1D1D1B;}
|
fill: #000;
|
||||||
</style>
|
}
|
||||||
<g>
|
|
||||||
<g>
|
.cls-1, .cls-2 {
|
||||||
<g>
|
stroke-width: 0px;
|
||||||
<g>
|
}
|
||||||
<path class="st0" d="M246,180.4h-8.7v24.3h-3.6v-24.3H225v-2.9h21V180.4z"/>
|
|
||||||
<path class="st0" d="M279.1,205c-2.7,0-5-0.9-6.7-2.7s-2.6-4.2-2.6-7.2v-0.6c0-2,0.4-3.8,1.1-5.4s1.8-2.8,3.2-3.7
|
.cls-2 {
|
||||||
s2.9-1.3,4.5-1.3c2.6,0,4.7,0.9,6.1,2.6c1.5,1.7,2.2,4.2,2.2,7.4v1.4h-13.7c0,2,0.6,3.6,1.7,4.8s2.5,1.8,4.2,1.8
|
fill: #231f20;
|
||||||
c1.2,0,2.3-0.2,3.1-0.7s1.6-1.2,2.2-2l2.1,1.6C285,203.7,282.5,205,279.1,205z M278.7,186.9c-1.4,0-2.6,0.5-3.5,1.5
|
}
|
||||||
s-1.5,2.4-1.8,4.3h10.1v-0.3c-0.1-1.8-0.6-3.1-1.4-4.1C281.3,187.4,280.1,186.9,278.7,186.9z"/>
|
</style>
|
||||||
<path class="st0" d="M320.4,202.2c1.2,0,2.3-0.4,3.2-1.1c0.9-0.7,1.4-1.7,1.5-2.8h3.3c-0.1,1.2-0.5,2.3-1.2,3.3
|
</defs>
|
||||||
s-1.7,1.9-2.9,2.5c-1.2,0.6-2.5,0.9-3.9,0.9c-2.8,0-4.9-0.9-6.6-2.8c-1.6-1.8-2.4-4.3-2.4-7.5v-0.6c0-2,0.4-3.7,1.1-5.2
|
<polygon class="cls-2" points="129.6 6.2 140.6 36.2 145.4 36.2 131.7 .4 127.6 .4 113.9 36.2 118.8 36.2 129.6 6.2"/>
|
||||||
s1.8-2.7,3.1-3.6c1.4-0.8,2.9-1.3,4.8-1.3c2.3,0,4.1,0.7,5.6,2c1.5,1.4,2.3,3.1,2.4,5.3h-3.3c-0.1-1.3-0.6-2.4-1.5-3.2
|
<path class="cls-2" d="M64.8,20.1h-12.1v-3.8h12.1v3.8Z"/>
|
||||||
s-2-1.3-3.3-1.3c-1.8,0-3.1,0.6-4.1,1.9s-1.4,3.1-1.4,5.5v0.7c0,2.3,0.5,4.1,1.4,5.4C317.2,201.6,318.6,202.2,320.4,202.2z"/>
|
<path class="cls-1" d="M10.1,12.5v-4.1c.4,0,.9-.1,1.3-.1,4.1,0,8.3,0,12.4,0,6.2,0,10.5,4.4,10.4,10.3,0,5.7-4.5,10-10.5,10.1-2.7,0-6.5,0-9.3,0v3.5c5.1-.4,11.4,1.1,16.3-1.9,4.7-2.9,8.1-9.6,6.7-14.7-1.5-5.7-7.3-10.5-13.1-10.6-4.1,0-8.2,0-12.2,0-.6,0-1.3,0-2,0V.4c3.1,0,6.2,0,9.3,0,2.8,0,5.7,0,8.5.5,8.4,1.6,14.4,9.3,14.2,17.7-.3,8.8-6.5,16.3-15.1,17.3-5.5.6-11.1.1-16.8.1V15.8h4.1v8.2c3.6,0,8,.3,11.4,0,2.3-.3,4.5-3.8,4.2-6.4s-3.1-5-5.6-5.1c-4,0-8,0-12.1,0-.6,0-1.3,0-2,0Z"/>
|
||||||
<path class="st0" d="M357,186.9c1.5-1.9,3.5-2.8,6-2.8c4.3,0,6.4,2.4,6.5,7.2v13.4H366v-13.4c0-1.5-0.3-2.5-1-3.2s-1.7-1-3.1-1
|
<path class="cls-1" d="M5.2,36.1H.1v-1.7c0-.6.1-1,.3-1.2.2-.3.6-.4,1-.4s.4,0,.6.2c.2.1.3.3.4.6,0-.3.2-.5.4-.7.2-.2.5-.2.8-.2.5,0,.8.1,1.1.4s.4.7.4,1.3v1.8ZM2.3,35.5v-1c0-.3,0-.5-.2-.7-.1-.2-.3-.3-.6-.3s-.5,0-.6.2c-.1.2-.2.4-.2.7v1h1.6ZM2.8,35.5h1.8v-1.1c0-.3,0-.6-.2-.7-.2-.2-.4-.3-.7-.3-.6,0-.9.3-.9,1v1.1Z"/>
|
||||||
c-1.1,0-2.1,0.3-3,0.9s-1.5,1.4-2,2.4v14.4h-3.4v-28.7h3.5V186.9z"/>
|
<path class="cls-1" d="M2.7,29.9l-2.6-1.3v-.8l3.2,1.8h1.9v.7h-1.9l-3.2,1.8v-.8l2.6-1.3Z"/>
|
||||||
<path class="st0" d="M399.1,184.5l0.1,2.5c1.5-1.9,3.6-2.9,6.1-2.9c4.3,0,6.4,2.4,6.5,7.2v13.4h-3.5v-13.4c0-1.5-0.3-2.5-1-3.2
|
<path class="cls-1" d="M5.1,24.7H0v-1.4c0-.4,0-.8.3-1.2.2-.3.5-.6.8-.8.4-.2.8-.3,1.2-.3h.3c.5,0,.9,0,1.3.3s.6.5.8.8c.2.3.3.7.3,1.2v1.4ZM.6,24h4v-.7c0-.5-.2-.9-.5-1.2-.3-.3-.8-.4-1.4-.4h-.3c-.6,0-1,.1-1.4.4-.3.3-.5.7-.5,1.2v.8Z"/>
|
||||||
s-1.7-1-3.1-1c-1.1,0-2.1,0.3-3,0.9s-1.5,1.4-2,2.4v14.4h-3.5v-20.2h3.4V184.5z"/>
|
<path class="cls-1" d="M5.1,10.6v.7l-3.9,2.6h3.9v.7H0v-.7l4-2.6H0v-.7h5.1Z"/>
|
||||||
<path class="st0" d="M437.3,194.4c0-2,0.4-3.8,1.2-5.3c0.8-1.6,1.9-2.8,3.2-3.7s3-1.3,4.8-1.3c2.8,0,5,1,6.7,2.9
|
<path class="cls-1" d="M2.7,2.6l.6.6h1.7v.7H0v-.7h2.5L0,1V.2l2.3,2L5.1,0v.8l-2.4,1.8Z"/>
|
||||||
s2.5,4.4,2.5,7.6v0.2c0,2-0.4,3.7-1.1,5.3s-1.8,2.8-3.2,3.7c-1.4,0.9-3,1.3-4.8,1.3c-2.7,0-5-1-6.7-2.9s-2.5-4.4-2.5-7.6v-0.2
|
<polygon class="cls-1" points=".8 17.9 5.1 16.3 5.1 15.6 0 17.6 0 18.2 5.1 20.1 5.1 19.4 .8 17.9"/>
|
||||||
H437.3z M440.8,194.8c0,2.2,0.5,4,1.6,5.4c1,1.4,2.4,2,4.2,2c1.8,0,3.1-0.7,4.2-2.1s1.6-3.3,1.6-5.8c0-2.2-0.5-4-1.6-5.4
|
<polygon class="cls-1" points=".8 7.3 5.1 5.8 5.1 5.1 0 7 0 7.6 5.1 9.6 5.1 8.9 .8 7.3"/>
|
||||||
s-2.5-2.1-4.2-2.1s-3.1,0.7-4.1,2C441.3,190.3,440.8,192.3,440.8,194.8z"/>
|
<g>
|
||||||
<path class="st0" d="M485.1,204.7h-3.5V176h3.5V204.7z"/>
|
<path class="cls-2" d="M82.1,22.3v14h-4.7V.5h13.2c3.9,0,7,1,9.2,3,2.2,2,3.3,4.6,3.3,7.9s-1.1,6.1-3.3,8c-2.2,1.9-5.3,2.8-9.3,2.8h-8.4ZM82.1,18.4h8.5c2.5,0,4.5-.6,5.8-1.8,1.3-1.2,2-2.9,2-5.2s-.7-3.8-2-5.1c-1.3-1.3-3.2-1.9-5.5-2h-8.7v14.1Z"/>
|
||||||
<path class="st0" d="M511,194.4c0-2,0.4-3.8,1.2-5.3c0.8-1.5,1.9-2.8,3.2-3.7c1.4-0.9,3-1.3,4.8-1.3c2.8,0,5,1,6.7,2.9
|
<path class="cls-2" d="M187.8,31.6c-1.2,1.7-2.9,3-5.1,3.9-2.2.9-4.7,1.3-7.6,1.3s-5.5-.7-7.8-2.1c-2.3-1.4-4-3.3-5.2-5.8s-1.9-5.4-1.9-8.8v-3.1c0-5.4,1.3-9.6,3.8-12.5,2.5-3,6-4.4,10.6-4.4s6.7,1,9,2.9c2.3,1.9,3.7,4.6,4.2,8.1h-4.7c-.9-4.8-3.7-7.1-8.5-7.1s-5.6,1.1-7.2,3.3c-1.6,2.2-2.5,5.4-2.5,9.7v2.9c0,4,.9,7.2,2.8,9.6,1.8,2.4,4.3,3.6,7.4,3.6s3.3-.2,4.6-.6c1.3-.4,2.4-1.1,3.3-2v-8h-8.3v-3.9h13v13.1Z"/>
|
||||||
s2.5,4.4,2.5,7.6v0.2c0,2-0.4,3.7-1.1,5.3s-1.8,2.8-3.2,3.7s-3,1.3-4.8,1.3c-2.7,0-5-1-6.7-2.9c-1.7-1.9-2.5-4.4-2.5-7.6v-0.2
|
<path class="cls-2" d="M227.4,19.7h-15.5v12.7h18v3.9h-22.7V.5h22.5v3.9h-17.8v11.5h15.5v3.9Z"/>
|
||||||
H511z M514.4,194.8c0,2.2,0.5,4,1.6,5.4c1,1.4,2.4,2,4.2,2s3.2-0.7,4.2-2.1c1-1.4,1.5-3.3,1.5-5.8c0-2.2-0.5-4-1.6-5.4
|
</g>
|
||||||
s-2.5-2.1-4.2-2.1s-3.1,0.7-4.1,2C515,190.3,514.4,192.3,514.4,194.8z"/>
|
</svg>
|
||||||
<path class="st0" d="M554.1,194.4c0-3.2,0.7-5.7,2.2-7.5s3.4-2.8,5.8-2.8c2.5,0,4.4,0.9,5.8,2.6l0.2-2.2h3.2v19.7
|
|
||||||
c0,2.6-0.8,4.7-2.3,6.2c-1.6,1.5-3.6,2.3-6.2,2.3c-1.5,0-2.9-0.3-4.3-0.9c-1.4-0.6-2.5-1.5-3.2-2.6l1.8-2.1
|
|
||||||
c1.5,1.8,3.3,2.7,5.4,2.7c1.7,0,3-0.5,3.9-1.4s1.4-2.3,1.4-4v-1.7c-1.4,1.6-3.3,2.4-5.7,2.4s-4.3-1-5.7-2.9
|
|
||||||
S554.1,197.7,554.1,194.4z M557.6,194.8c0,2.3,0.5,4.1,1.4,5.4c0.9,1.3,2.2,2,3.9,2c2.2,0,3.8-1,4.8-3V190
|
|
||||||
c-1.1-1.9-2.6-2.9-4.8-2.9c-1.7,0-3,0.7-3.9,2C558.1,190.3,557.6,192.2,557.6,194.8z"/>
|
|
||||||
<path class="st0" d="M604.3,199.6l4.7-15.1h3.7l-8.1,23.3c-1.3,3.4-3.3,5-6,5l-0.7-0.1l-1.3-0.2v-2.8l0.9,0.1
|
|
||||||
c1.2,0,2.1-0.2,2.7-0.7c0.7-0.5,1.2-1.3,1.6-2.6l0.8-2.1l-7.2-20h3.8L604.3,199.6z"/>
|
|
||||||
<path class="st0" d="M688.3,196c-0.3,2.9-1.4,5.1-3.2,6.7c-1.8,1.6-4.2,2.3-7.1,2.3c-3.2,0-5.8-1.2-7.7-3.5s-2.9-5.4-2.9-9.2
|
|
||||||
v-2.6c0-2.5,0.5-4.8,1.4-6.7s2.2-3.4,3.8-4.4s3.6-1.5,5.8-1.5c2.9,0,5.2,0.8,6.9,2.4c1.7,1.6,2.8,3.8,3,6.7h-3.6
|
|
||||||
c-0.3-2.2-1-3.7-2-4.7s-2.5-1.5-4.4-1.5c-2.3,0-4.1,0.8-5.4,2.5c-1.3,1.7-2,4.1-2,7.2v2.6c0,3,0.6,5.3,1.8,7s3,2.6,5.2,2.6
|
|
||||||
c2,0,3.5-0.5,4.6-1.4s1.8-2.5,2.1-4.7h3.7V196z"/>
|
|
||||||
<path class="st0" d="M713,194.4c0-2,0.4-3.8,1.2-5.3s1.9-2.8,3.2-3.7c1.4-0.9,3-1.3,4.8-1.3c2.8,0,5,1,6.7,2.9s2.5,4.4,2.5,7.6
|
|
||||||
v0.2c0,2-0.4,3.7-1.1,5.3s-1.8,2.8-3.2,3.7s-3,1.3-4.8,1.3c-2.7,0-5-1-6.7-2.9s-2.5-4.4-2.5-7.6v-0.2H713z M716.5,194.8
|
|
||||||
c0,2.2,0.5,4,1.6,5.4c1,1.4,2.4,2,4.2,2s3.2-0.7,4.2-2.1c1-1.4,1.5-3.3,1.5-5.8c0-2.2-0.5-4-1.6-5.4s-2.5-2.1-4.2-2.1
|
|
||||||
s-3.1,0.7-4.1,2C717,190.3,716.5,192.3,716.5,194.8z"/>
|
|
||||||
<path class="st0" d="M760.3,184.5l0.1,2.2c1.5-1.7,3.5-2.6,6-2.6c2.8,0,4.8,1.1,5.8,3.2c0.7-1,1.5-1.8,2.6-2.4
|
|
||||||
c1.1-0.6,2.4-0.9,3.8-0.9c4.4,0,6.7,2.3,6.8,7v13.5h-3.5v-13.3c0-1.4-0.3-2.5-1-3.2s-1.8-1.1-3.3-1.1c-1.3,0-2.3,0.4-3.2,1.1
|
|
||||||
c-0.8,0.8-1.3,1.8-1.5,3.1v13.4h-3.5v-13.2c0-2.9-1.4-4.4-4.3-4.4c-2.3,0-3.8,1-4.7,2.9v14.8h-3.5v-20.2h3.4V184.5z"/>
|
|
||||||
<path class="st0" d="M828.9,194.8c0,3.1-0.7,5.6-2.1,7.4c-1.4,1.9-3.3,2.8-5.7,2.8c-2.5,0-4.4-0.8-5.8-2.3v9.7h-3.5v-28h3.2
|
|
||||||
l0.2,2.2c1.4-1.7,3.4-2.6,5.9-2.6c2.4,0,4.3,0.9,5.8,2.7c1.4,1.8,2.1,4.4,2.1,7.6v0.5H828.9z M825.5,194.4
|
|
||||||
c0-2.3-0.5-4.1-1.5-5.4c-1-1.3-2.3-2-4-2c-2.1,0-3.7,0.9-4.7,2.8v9.7c1,1.8,2.6,2.8,4.7,2.8c1.7,0,3-0.7,4-2
|
|
||||||
S825.5,197,825.5,194.4z"/>
|
|
||||||
<path class="st0" d="M867,204.7c-0.2-0.4-0.4-1.1-0.5-2.1c-1.6,1.7-3.5,2.5-5.8,2.5c-2,0-3.6-0.6-4.9-1.7s-1.9-2.6-1.9-4.3
|
|
||||||
c0-2.1,0.8-3.7,2.4-4.9c1.6-1.2,3.9-1.7,6.8-1.7h3.4v-1.7c0-1.2-0.4-2.2-1.1-2.9c-0.7-0.7-1.8-1.1-3.2-1.1
|
|
||||||
c-1.2,0-2.3,0.3-3.1,0.9c-0.8,0.6-1.3,1.4-1.3,2.3h-3.5c0-1,0.4-2,1.1-2.9c0.7-0.9,1.7-1.7,2.9-2.2s2.6-0.8,4-0.8
|
|
||||||
c2.3,0,4.2,0.6,5.5,1.7c1.3,1.2,2,2.8,2.1,4.8v9.3c0,1.9,0.2,3.3,0.7,4.4v0.3H867V204.7z M861.3,202c1.1,0,2.1-0.3,3.1-0.8
|
|
||||||
c1-0.6,1.7-1.3,2.1-2.2v-4.1h-2.7c-4.2,0-6.4,1.2-6.4,3.7c0,1.1,0.4,1.9,1.1,2.5C859.2,201.7,860.2,202,861.3,202z"/>
|
|
||||||
<path class="st0" d="M899.9,184.5l0.1,2.5c1.5-1.9,3.6-2.9,6.1-2.9c4.3,0,6.4,2.4,6.5,7.2v13.4h-3.5v-13.4c0-1.5-0.3-2.5-1-3.2
|
|
||||||
s-1.7-1-3.1-1c-1.1,0-2.1,0.3-3,0.9s-1.5,1.4-2,2.4v14.4h-3.5v-20.2h3.4V184.5z"/>
|
|
||||||
<path class="st0" d="M945.6,199.6l4.7-15.1h3.7l-8.1,23.3c-1.3,3.4-3.3,5-6,5l-0.7-0.1l-1.3-0.2v-2.8l0.9,0.1
|
|
||||||
c1.2,0,2.1-0.2,2.7-0.7c0.7-0.5,1.2-1.3,1.6-2.6l0.8-2.1l-7.2-20h3.8L945.6,199.6z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path class="st0" d="M221.6,148.7V44.1h29.5c9.1,0,17.1,2,24.1,6s12.4,9.7,16.2,17.2c3.8,7.4,5.7,15.9,5.8,25.6v6.7
|
|
||||||
c0,9.9-1.9,18.5-5.7,25.9c-3.8,7.4-9.2,13.1-16.3,17.1c-7.1,4-15.3,6-24.7,6.1L221.6,148.7L221.6,148.7z M235.4,55.4v82h14.5
|
|
||||||
c10.6,0,18.9-3.3,24.8-9.9c5.9-6.6,8.9-16,8.9-28.3v-6.1c0-11.9-2.8-21.1-8.4-27.7s-13.5-9.9-23.7-10L235.4,55.4L235.4,55.4z"/>
|
|
||||||
<path class="st0" d="M627.1,148.7h-13.9l-52.7-80.6v80.6h-13.9V44.1h13.9l52.8,81v-81H627v104.6H627.1z"/>
|
|
||||||
<path class="st0" d="M900.9,100.1l-12.8,13.3v35.3h-13.8V44.1h13.8v51.7l46.5-51.7h16.7l-41.2,46.2l44.4,58.4H938L900.9,100.1z"/>
|
|
||||||
<polygon class="st0" points="423.2,61.1 455.1,148.7 469.2,148.7 429.2,44.1 417.1,44.1 377.2,148.7 391.4,148.7 "/>
|
|
||||||
<polygon class="st0" points="750.6,61.1 782.6,148.7 796.7,148.7 756.7,44.1 744.6,44.1 704.7,148.7 718.9,148.7 "/>
|
|
||||||
</g>
|
|
||||||
<path class="st0" d="M132.1,140.4c0,0-26.1,25.2-48,46.5v28.9c-2.2,1.7,77.6-75.4,77.6-75.4L84.1,59v31L132.1,140.4z"/>
|
|
||||||
<g>
|
|
||||||
<polygon class="st0" points="83.7,157.5 6.5,75.1 7.5,74.2 84.7,156.6 "/>
|
|
||||||
<polygon class="st0" points="83.7,149.8 13.6,75.2 14.6,74.3 84.6,148.9 "/>
|
|
||||||
<polygon class="st0" points="83.7,142.1 20.7,75.4 21.7,74.4 84.6,141.1 "/>
|
|
||||||
<polygon class="st0" points="83.6,134.3 27.8,75.5 28.7,74.6 84.6,133.4 "/>
|
|
||||||
<polygon class="st0" points="83.6,126.6 34.9,75.6 35.8,74.7 84.6,125.7 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon class="st0" points="8,75.5 7.1,74.5 83.7,0 84.6,0.9 "/>
|
|
||||||
<polygon class="st0" points="15.2,75.5 14.3,74.6 83.6,7 84.5,7.9 "/>
|
|
||||||
<polygon class="st0" points="22.4,75.6 21.4,74.7 83.6,14 84.5,14.9 "/>
|
|
||||||
<polygon class="st0" points="29.5,75.6 28.6,74.7 83.5,21 84.4,22 "/>
|
|
||||||
<polygon class="st0" points="36.7,75.7 35.7,74.8 83.5,28 84.4,29 "/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
import { useEffect } from 'react'
|
||||||
|
|
||||||
|
export const DEFAULT_PAGE_TITLE = 'کاتالوگ دیجیتال | داناک'
|
||||||
|
const BRAND_SUFFIX = ' | داناک'
|
||||||
|
|
||||||
|
export function formatPageTitle(pageTitle: string): string {
|
||||||
|
return `${pageTitle}${BRAND_SUFFIX}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export function usePageTitle(pageTitle: string) {
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = formatPageTitle(pageTitle)
|
||||||
|
}, [pageTitle])
|
||||||
|
}
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
import GridWrapper from "@/components/GridWrapper";
|
import GridWrapper from "@/components/GridWrapper";
|
||||||
|
import { usePageTitle } from "@/hooks/usePageTitle";
|
||||||
import { type FC } from "react";
|
import { type FC } from "react";
|
||||||
import { useGetCatalog } from "../home/hooks/useHomeData";
|
import { useGetCatalog } from "../home/hooks/useHomeData";
|
||||||
import ButtonAddCatalogue from "./components/ButtonAddCatalogue";
|
import ButtonAddCatalogue from "./components/ButtonAddCatalogue";
|
||||||
import CatalogueItem from "./components/CatalogueItem";
|
import CatalogueItem from "./components/CatalogueItem";
|
||||||
|
|
||||||
const CatalogueList: FC = () => {
|
const CatalogueList: FC = () => {
|
||||||
|
usePageTitle("لیست کاتالوگها");
|
||||||
const { data, refetch } = useGetCatalog();
|
const { data, refetch } = useGetCatalog();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { usePageTitle } from '@/hooks/usePageTitle'
|
||||||
import { useMemo, useState, type FC } from 'react'
|
import { useMemo, useState, type FC } from 'react'
|
||||||
import Button from '@/components/Button'
|
import Button from '@/components/Button'
|
||||||
import DatePicker from '@/components/DatePicker'
|
import DatePicker from '@/components/DatePicker'
|
||||||
@@ -17,6 +18,7 @@ const pageCountOptions = Array.from({ length: 20 }, (_, index) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const DesignerRequest: FC = () => {
|
const DesignerRequest: FC = () => {
|
||||||
|
usePageTitle('درخواست طراحی')
|
||||||
const [catalogTitle, setCatalogTitle] = useState('')
|
const [catalogTitle, setCatalogTitle] = useState('')
|
||||||
const [, setDeliveryDate] = useState('')
|
const [, setDeliveryDate] = useState('')
|
||||||
const [pageCount, setPageCount] = useState('1')
|
const [pageCount, setPageCount] = useState('1')
|
||||||
|
|||||||
+126
-103
@@ -1,118 +1,141 @@
|
|||||||
import { type FC, useEffect, useRef, useState } from 'react'
|
import { clx } from "@/helpers/utils";
|
||||||
import Konva from 'konva'
|
import { usePageTitle } from "@/hooks/usePageTitle";
|
||||||
import { clx } from '@/helpers/utils'
|
import Konva from "konva";
|
||||||
import EditorSidebar from './components/EditorSidebar'
|
import { type FC, useEffect, useRef, useState } from "react";
|
||||||
import EditorCanvas from './components/EditorCanvas'
|
import { useParams } from "react-router-dom";
|
||||||
import LayersPanel from './components/LayersPanel'
|
import { useGetCatalogById, useUpdateCatalog } from "../home/hooks/useHomeData";
|
||||||
import { useGetCatalogById, useUpdateCatalog } from '../home/hooks/useHomeData'
|
import EditorCanvas from "./components/EditorCanvas";
|
||||||
import { useParams } from 'react-router-dom'
|
import EditorSidebar from "./components/EditorSidebar";
|
||||||
import { useEditorStore } from './store/editorStore'
|
import LayersPanel from "./components/LayersPanel";
|
||||||
|
import { useEditorStore } from "./store/editorStore";
|
||||||
|
|
||||||
const Editor: FC = () => {
|
const Editor: FC = () => {
|
||||||
|
const { id } = useParams();
|
||||||
|
|
||||||
const { id } = useParams()
|
// Konva 10 با legacyTextRendering=false متن را با baseline جدید میکشد ولی getWidth/getHeight
|
||||||
|
// و کادر ترنسفورمر هنوز بر اساس جعبهٔ قدیمیاند؛ نتیجه: متن از کادر آبی بیرون میزند.
|
||||||
|
useEffect(() => {
|
||||||
|
const prev = Konva.legacyTextRendering;
|
||||||
|
Konva.legacyTextRendering = true;
|
||||||
|
return () => {
|
||||||
|
Konva.legacyTextRendering = prev;
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
const [isLayersPanelOpen, setIsLayersPanelOpen] = useState(false);
|
||||||
|
const [isInitialContentReady, setIsInitialContentReady] = useState(false);
|
||||||
|
const loadedCatalogIdRef = useRef<string | null>(null);
|
||||||
|
const skipNextAutosaveRef = useRef(true);
|
||||||
|
const {
|
||||||
|
loadPages,
|
||||||
|
resetEditor,
|
||||||
|
pages,
|
||||||
|
documentSettings,
|
||||||
|
gallery,
|
||||||
|
objects,
|
||||||
|
currentPageId,
|
||||||
|
} = useEditorStore();
|
||||||
|
const { data, isFetched } = useGetCatalogById(id!);
|
||||||
|
const catalogName = data?.data?.name;
|
||||||
|
usePageTitle(
|
||||||
|
catalogName ? `ویرایش کاتالوگ ${catalogName}` : "ویرایش کاتالوگ",
|
||||||
|
);
|
||||||
|
const { scheduleUpdate, cancelPendingUpdate, isSaving } = useUpdateCatalog();
|
||||||
|
|
||||||
// Konva 10 با legacyTextRendering=false متن را با baseline جدید میکشد ولی getWidth/getHeight
|
// هنگام تعویض کاتالوگ: لغو ذخیرهٔ معلق، پاکسازی store، و منتظر بارگذاری مجدد بمان
|
||||||
// و کادر ترنسفورمر هنوز بر اساس جعبهٔ قدیمیاند؛ نتیجه: متن از کادر آبی بیرون میزند.
|
useEffect(() => {
|
||||||
useEffect(() => {
|
cancelPendingUpdate();
|
||||||
const prev = Konva.legacyTextRendering
|
loadedCatalogIdRef.current = null;
|
||||||
Konva.legacyTextRendering = true
|
skipNextAutosaveRef.current = true;
|
||||||
return () => {
|
setIsInitialContentReady(false);
|
||||||
Konva.legacyTextRendering = prev
|
resetEditor();
|
||||||
}
|
}, [id, cancelPendingUpdate, resetEditor]);
|
||||||
}, [])
|
|
||||||
const [isLayersPanelOpen, setIsLayersPanelOpen] = useState(false)
|
|
||||||
const [isInitialContentReady, setIsInitialContentReady] = useState(false)
|
|
||||||
const loadedCatalogIdRef = useRef<string | null>(null)
|
|
||||||
const skipNextAutosaveRef = useRef(true)
|
|
||||||
const { loadPages, resetEditor, pages, documentSettings, gallery, objects, currentPageId } = useEditorStore()
|
|
||||||
const { data, isFetched } = useGetCatalogById(id!)
|
|
||||||
const { scheduleUpdate, cancelPendingUpdate, isSaving } = useUpdateCatalog()
|
|
||||||
|
|
||||||
// هنگام تعویض کاتالوگ: لغو ذخیرهٔ معلق، پاکسازی store، و منتظر بارگذاری مجدد بمان
|
// بارگذاری محتوا فقط یکبار برای هر id (نه در هر refetch)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
cancelPendingUpdate()
|
if (!id || !isFetched) return;
|
||||||
loadedCatalogIdRef.current = null
|
if (loadedCatalogIdRef.current === id) return;
|
||||||
skipNextAutosaveRef.current = true
|
|
||||||
setIsInitialContentReady(false)
|
|
||||||
resetEditor()
|
|
||||||
}, [id, cancelPendingUpdate, resetEditor])
|
|
||||||
|
|
||||||
// بارگذاری محتوا فقط یکبار برای هر id (نه در هر refetch)
|
const rawContent = data?.data?.content;
|
||||||
useEffect(() => {
|
if (rawContent) {
|
||||||
if (!id || !isFetched) return
|
try {
|
||||||
if (loadedCatalogIdRef.current === id) return
|
const json = JSON.parse(rawContent);
|
||||||
|
if (Array.isArray(json)) {
|
||||||
const rawContent = data?.data?.content
|
loadPages(json);
|
||||||
if (rawContent) {
|
} else if (json?.pages) {
|
||||||
try {
|
loadPages(json.pages, json.documentSettings, json.gallery);
|
||||||
const json = JSON.parse(rawContent)
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
loadPages(json)
|
|
||||||
} else if (json?.pages) {
|
|
||||||
loadPages(json.pages, json.documentSettings, json.gallery)
|
|
||||||
} else {
|
|
||||||
console.error('Invalid catalog content JSON: missing pages')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Invalid catalog content JSON:', error)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
resetEditor()
|
console.error("Invalid catalog content JSON: missing pages");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Invalid catalog content JSON:", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resetEditor();
|
||||||
|
}
|
||||||
|
|
||||||
loadedCatalogIdRef.current = id
|
loadedCatalogIdRef.current = id;
|
||||||
skipNextAutosaveRef.current = true
|
skipNextAutosaveRef.current = true;
|
||||||
setIsInitialContentReady(true)
|
setIsInitialContentReady(true);
|
||||||
}, [id, isFetched, data?.data?.content, loadPages, resetEditor])
|
}, [id, isFetched, data?.data?.content, loadPages, resetEditor]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!id) return
|
if (!id) return;
|
||||||
if (!isInitialContentReady) return
|
if (!isInitialContentReady) return;
|
||||||
if (!pages || pages.length === 0) return
|
if (!pages || pages.length === 0) return;
|
||||||
if (skipNextAutosaveRef.current) {
|
if (skipNextAutosaveRef.current) {
|
||||||
skipNextAutosaveRef.current = false
|
skipNextAutosaveRef.current = false;
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const pagesToSave = currentPageId
|
const pagesToSave = currentPageId
|
||||||
? pages.map((p) =>
|
? pages.map((p) => (p.id === currentPageId ? { ...p, objects } : p))
|
||||||
p.id === currentPageId ? { ...p, objects } : p,
|
: pages;
|
||||||
)
|
|
||||||
: pages
|
|
||||||
|
|
||||||
scheduleUpdate({
|
scheduleUpdate({
|
||||||
id,
|
id,
|
||||||
content: JSON.stringify({ pages: pagesToSave, documentSettings, gallery }),
|
content: JSON.stringify({
|
||||||
})
|
pages: pagesToSave,
|
||||||
// عمداً scheduleUpdate را در وابستگیها نیاوردیم تا از لوپ ذخیرهسازی جلوگیری شود
|
documentSettings,
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
gallery,
|
||||||
}, [id, isInitialContentReady, pages, documentSettings, gallery, objects, currentPageId])
|
}),
|
||||||
|
});
|
||||||
|
// عمداً scheduleUpdate را در وابستگیها نیاوردیم تا از لوپ ذخیرهسازی جلوگیری شود
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [
|
||||||
|
id,
|
||||||
|
isInitialContentReady,
|
||||||
|
pages,
|
||||||
|
documentSettings,
|
||||||
|
gallery,
|
||||||
|
objects,
|
||||||
|
currentPageId,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return (
|
||||||
return (
|
<div
|
||||||
<div className={clx(
|
className={clx(
|
||||||
"flex h-full w-full",
|
"flex h-full w-full",
|
||||||
isLayersPanelOpen ? "xl:pl-[296px]" : "xl:pl-[80px]"
|
isLayersPanelOpen ? "xl:pl-[296px]" : "xl:pl-[80px]",
|
||||||
)}>
|
)}
|
||||||
{isSaving ? (
|
>
|
||||||
<div className="fixed bottom-10 left-10 z-50 rounded-full shadow-sm">
|
{isSaving ? (
|
||||||
<div className="flex items-center gap-2 text-sm text-gray-700">
|
<div className="fixed bottom-10 left-10 z-50 rounded-full shadow-sm">
|
||||||
<span className="h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-black" />
|
<div className="flex items-center gap-2 text-sm text-gray-700">
|
||||||
</div>
|
<span className="h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-black" />
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
|
||||||
<LayersPanel
|
|
||||||
isOpen={isLayersPanelOpen}
|
|
||||||
setIsOpen={setIsLayersPanelOpen}
|
|
||||||
catalogSize={data?.data?.size}
|
|
||||||
/>
|
|
||||||
<EditorCanvas catalogSize={data?.data?.size} />
|
|
||||||
<EditorSidebar catalogSize={data?.data?.size} />
|
|
||||||
</div>
|
</div>
|
||||||
)
|
) : null}
|
||||||
}
|
<LayersPanel
|
||||||
|
isOpen={isLayersPanelOpen}
|
||||||
|
setIsOpen={setIsLayersPanelOpen}
|
||||||
|
catalogSize={data?.data?.size}
|
||||||
|
/>
|
||||||
|
<EditorCanvas catalogSize={data?.data?.size} />
|
||||||
|
<EditorSidebar catalogSize={data?.data?.size} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export default Editor
|
export default Editor;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import Divider from '@/components/Divider'
|
import Divider from '@/components/Divider'
|
||||||
|
import { usePageTitle } from '@/hooks/usePageTitle'
|
||||||
import { ArrowLeft, DocumentText } from 'iconsax-react'
|
import { ArrowLeft, DocumentText } from 'iconsax-react'
|
||||||
import { useState, type FC } from 'react'
|
import { useState, type FC } from 'react'
|
||||||
import PdfIcon from '@/assets/images/PDF.svg'
|
import PdfIcon from '@/assets/images/PDF.svg'
|
||||||
@@ -18,6 +19,7 @@ const CATALOG_SIZES = [
|
|||||||
] as const
|
] as const
|
||||||
|
|
||||||
const Home: FC = () => {
|
const Home: FC = () => {
|
||||||
|
usePageTitle('ساخت کاتالوگ')
|
||||||
|
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const [active, setActive] = useState<string>('a4')
|
const [active, setActive] = useState<string>('a4')
|
||||||
|
|||||||
+79
-71
@@ -1,81 +1,89 @@
|
|||||||
import { type FC, useEffect, useState } from 'react';
|
import { usePageTitle } from "@/hooks/usePageTitle";
|
||||||
import BookViewer from './components/BookViewer';
|
import type { DocumentSettings } from "@/pages/editor/store/editorStore";
|
||||||
import ViewerLoading from './components/ViewerLoading';
|
import { useGetCatalogById } from "@/pages/home/hooks/useHomeData";
|
||||||
import { transformViewerDataToPages } from './utils/dataTransformer';
|
import { type FC, useEffect, useState } from "react";
|
||||||
import type { PageData } from './types';
|
import { useParams } from "react-router-dom";
|
||||||
import type { DocumentSettings } from '@/pages/editor/store/editorStore';
|
import BookViewer from "./components/BookViewer";
|
||||||
import { useParams } from 'react-router-dom';
|
import ViewerLoading from "./components/ViewerLoading";
|
||||||
import { useGetCatalogById } from '@/pages/home/hooks/useHomeData';
|
import { useBrowserFullscreen } from "./hooks/useBrowserFullscreen";
|
||||||
import { useBrowserFullscreen } from './hooks/useBrowserFullscreen';
|
import { useInitialPagesPreload } from "./hooks/useInitialPagesPreload";
|
||||||
import { useInitialPagesPreload } from './hooks/useInitialPagesPreload';
|
import type { PageData } from "./types";
|
||||||
|
import { transformViewerDataToPages } from "./utils/dataTransformer";
|
||||||
|
|
||||||
const Viewer: FC = () => {
|
const Viewer: FC = () => {
|
||||||
const { id } = useParams<{ id: string }>();
|
const { id } = useParams<{ id: string }>();
|
||||||
const { data, isLoading, error: queryError } = useGetCatalogById(id ?? '');
|
const { data, isLoading, error: queryError } = useGetCatalogById(id ?? "");
|
||||||
const [pages, setPages] = useState<PageData[]>([]);
|
usePageTitle(`کاتالوگ ${data?.data?.name}`);
|
||||||
const [documentSettings, setDocumentSettings] = useState<Partial<DocumentSettings> | undefined>(undefined);
|
const [pages, setPages] = useState<PageData[]>([]);
|
||||||
|
const [documentSettings, setDocumentSettings] = useState<
|
||||||
|
Partial<DocumentSettings> | undefined
|
||||||
|
>(undefined);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!data?.data?.content || !id) return;
|
if (!data?.data?.content || !id) return;
|
||||||
try {
|
try {
|
||||||
const parsed = JSON.parse(data.data.content);
|
const parsed = JSON.parse(data.data.content);
|
||||||
const pagesArray = Array.isArray(parsed) ? parsed : (parsed.pages ?? []);
|
const pagesArray = Array.isArray(parsed) ? parsed : (parsed.pages ?? []);
|
||||||
const settings: Partial<DocumentSettings> | undefined = Array.isArray(parsed)
|
const settings: Partial<DocumentSettings> | undefined = Array.isArray(
|
||||||
? undefined
|
parsed,
|
||||||
: parsed.documentSettings;
|
)
|
||||||
const transformedPages = transformViewerDataToPages(
|
? undefined
|
||||||
{ pages: pagesArray } as Parameters<typeof transformViewerDataToPages>[0]
|
: parsed.documentSettings;
|
||||||
);
|
const transformedPages = transformViewerDataToPages({
|
||||||
setPages(transformedPages);
|
pages: pagesArray,
|
||||||
setDocumentSettings(settings);
|
} as Parameters<typeof transformViewerDataToPages>[0]);
|
||||||
} catch (err) {
|
setPages(transformedPages);
|
||||||
console.error('خطا در پردازش محتوای کاتالوگ:', err);
|
setDocumentSettings(settings);
|
||||||
}
|
} catch (err) {
|
||||||
}, [data?.data?.content, id]);
|
console.error("خطا در پردازش محتوای کاتالوگ:", err);
|
||||||
|
|
||||||
useBrowserFullscreen({ enabled: Boolean(id) });
|
|
||||||
const { isReady: areInitialPagesReady, progress: preloadProgress } = useInitialPagesPreload(
|
|
||||||
pages,
|
|
||||||
documentSettings,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!id) {
|
|
||||||
return (
|
|
||||||
<div className="w-full h-full flex items-center justify-center">
|
|
||||||
<div className="text-gray-600">شناسه کاتالوگ مشخص نیست</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
}, [data?.data?.content, id]);
|
||||||
|
|
||||||
if (isLoading) {
|
useBrowserFullscreen({ enabled: Boolean(id) });
|
||||||
return <ViewerLoading />;
|
const { isReady: areInitialPagesReady, progress: preloadProgress } =
|
||||||
}
|
useInitialPagesPreload(pages, documentSettings);
|
||||||
|
|
||||||
if (queryError) {
|
|
||||||
return (
|
|
||||||
<div className="w-full h-full flex items-center justify-center">
|
|
||||||
<div className="text-red-600">خطا: {queryError.message}</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pages.length === 0) {
|
|
||||||
return (
|
|
||||||
<div className="w-full h-full flex items-center justify-center">
|
|
||||||
<div className="text-gray-600">هیچ صفحهای یافت نشد</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!areInitialPagesReady) {
|
|
||||||
return <ViewerLoading progress={preloadProgress} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!id) {
|
||||||
return (
|
return (
|
||||||
<div className="w-full h-full min-h-0 flex flex-col">
|
<div className="w-full h-full flex items-center justify-center">
|
||||||
<BookViewer pages={pages} catalogSize={data?.data?.size} documentSettings={documentSettings} />
|
<div className="text-gray-600">شناسه کاتالوگ مشخص نیست</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLoading) {
|
||||||
|
return <ViewerLoading />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queryError) {
|
||||||
|
return (
|
||||||
|
<div className="w-full h-full flex items-center justify-center">
|
||||||
|
<div className="text-red-600">خطا: {queryError.message}</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pages.length === 0) {
|
||||||
|
return (
|
||||||
|
<div className="w-full h-full flex items-center justify-center">
|
||||||
|
<div className="text-gray-600">هیچ صفحهای یافت نشد</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areInitialPagesReady) {
|
||||||
|
return <ViewerLoading progress={preloadProgress} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="w-full h-full min-h-0 flex flex-col">
|
||||||
|
<BookViewer
|
||||||
|
pages={pages}
|
||||||
|
catalogSize={data?.data?.size}
|
||||||
|
documentSettings={documentSettings}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Viewer;
|
export default Viewer;
|
||||||
|
|||||||
Reference in New Issue
Block a user