mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-09 22:57:21 +00:00
push garage door schedule
This commit is contained in:
135
assets/icons/closed_door.svg
Normal file
135
assets/icons/closed_door.svg
Normal file
@ -0,0 +1,135 @@
|
||||
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.39648 12.4951H35.6037V37.8285H2.39648V12.4951Z" fill="url(#paint0_linear_3415_983)"/>
|
||||
<path d="M2.40332 20.3789H14.3054V38.0005H2.40332V20.3789Z" fill="url(#paint1_linear_3415_983)"/>
|
||||
<g clip-path="url(#clip0_3415_983)">
|
||||
<path d="M2.40332 19.1719H35.5958V29.3425H2.40332V19.1719Z" fill="url(#paint2_linear_3415_983)"/>
|
||||
<path d="M2.45801 11.9824H35.6149V15.9314H2.45801V11.9824Z" fill="url(#paint3_linear_3415_983)"/>
|
||||
<path d="M2.45801 15.1123H35.6149V19.0613H2.45801V15.1123Z" fill="url(#paint4_linear_3415_983)"/>
|
||||
<path d="M2.45801 18.3154H35.6149V22.2644H2.45801V18.3154Z" fill="url(#paint5_linear_3415_983)"/>
|
||||
<path d="M2.45801 21.3965H35.6149V25.3455H2.45801V21.3965Z" fill="url(#paint6_linear_3415_983)"/>
|
||||
<path d="M2.45801 24.5264H35.6149V28.4754H2.45801V24.5264Z" fill="url(#paint7_linear_3415_983)"/>
|
||||
<path d="M2.45801 27.7305H35.6149V31.6795H2.45801V27.7305Z" fill="url(#paint8_linear_3415_983)"/>
|
||||
<path d="M2.45801 30.8594H35.6149V34.8084H2.45801V30.8594Z" fill="url(#paint9_linear_3415_983)"/>
|
||||
<path d="M2.45801 33.9893H35.6149V37.9383H2.45801V33.9893Z" fill="url(#paint10_linear_3415_983)"/>
|
||||
</g>
|
||||
<path d="M36.3054 9.43704L22.7255 0.961176C21.6987 0.320392 20.3494 0 19 0C17.6506 0 16.3013 0.320392 15.2745 0.961176L1.69458 9.43704C0.640486 10.095 0 11.2497 0 12.4923V35.6368C0 36.942 1.05804 38 2.36323 38C3.03367 38 3.57722 37.4565 3.57722 36.786V15.833C3.57722 14.4546 4.69464 13.3373 6.07292 13.3373H31.9271C33.3054 13.3373 34.4228 14.4546 34.4228 15.833V36.786C34.4228 37.4565 34.9663 38 35.6368 38C36.942 38 38 36.942 38 35.6368V12.4923C38 11.2497 37.3595 10.095 36.3054 9.43704Z" fill="url(#paint11_linear_3415_983)"/>
|
||||
<path d="M36.3054 9.43704L22.7255 0.961177C21.6987 0.320392 20.3494 0 19 0C17.6506 0 16.3013 0.320392 15.2745 0.961177L1.69458 9.43704C0.640486 10.095 0 11.2497 0 12.4923V16.0686C0 14.8261 0.640486 13.6713 1.69458 13.0134L15.2745 4.53743C16.3013 3.89664 17.6506 3.57625 19 3.57625C20.3494 3.57625 21.6987 3.89664 22.7255 4.53743L36.3054 13.0133C37.3595 13.6712 38 14.826 38 16.0686V12.4923C38 11.2497 37.3595 10.095 36.3054 9.43704Z" fill="url(#paint12_linear_3415_983)"/>
|
||||
<path d="M14.7543 8.44803H23.2456C23.7264 8.44803 24.1161 8.05827 24.1161 7.57753C24.1161 7.09672 23.7264 6.70703 23.2456 6.70703H14.7543C14.2735 6.70703 13.8838 7.09679 13.8838 7.57753C13.8838 8.05827 14.2735 8.44803 14.7543 8.44803Z" fill="url(#paint13_linear_3415_983)"/>
|
||||
<path d="M14.7543 11.6512H23.2456C23.7264 11.6512 24.1161 11.2614 24.1161 10.7807C24.1161 10.2998 23.7264 9.91016 23.2456 9.91016H14.7543C14.2735 9.91016 13.8838 10.2999 13.8838 10.7807C13.8838 11.2614 14.2735 11.6512 14.7543 11.6512Z" fill="url(#paint14_linear_3415_983)"/>
|
||||
<path d="M38 16.0685V35.6363C38 36.289 37.7355 36.8798 37.3078 37.3075C36.8801 37.7352 36.2893 37.9997 35.6366 37.9997C34.966 37.9997 34.4228 37.4565 34.4228 36.7859V15.8323C34.4228 14.4546 33.3051 13.337 31.9267 13.337H6.07329C4.69486 13.337 3.57722 14.4546 3.57722 15.8323V36.7859C3.57722 37.1212 3.44161 37.4245 3.2218 37.6443C3.002 37.8641 2.69875 37.9997 2.36345 37.9997C1.05804 37.9997 0 36.9417 0 35.6363V16.0685C0 14.8257 0.640784 13.6708 1.69435 13.0128L15.2745 4.53735C16.3013 3.89656 17.6506 3.57617 19 3.57617C20.3494 3.57617 21.6987 3.89656 22.7255 4.53735L36.3056 13.0128C37.3592 13.6708 38 14.8257 38 16.0685Z" fill="url(#paint15_linear_3415_983)"/>
|
||||
<path d="M19.0745 1.49121C16.8994 1.49121 14.7908 2.11724 12.9767 3.30173C12.4945 3.61653 12.3588 4.2626 12.6736 4.74476L14.39 6.46646C14.3263 6.69416 14.3564 6.94682 14.4952 7.16066L16.0917 8.77879C16.0317 8.96194 16.0515 9.16945 16.1637 9.34417L17.8679 11.0139C17.7547 11.4323 17.8613 11.8978 18.1898 12.2264L19.3006 13.3372H31.927C33.3054 13.3372 34.4227 14.4546 34.4227 15.8329V28.4594L38 32.0366V16.1358L25.1723 3.30173C23.3583 2.11732 21.2496 1.49121 19.0745 1.49121Z" fill="url(#paint16_linear_3415_983)"/>
|
||||
<path d="M21.7117 8.35279C20.9031 7.83324 19.9655 7.55859 19.0005 7.55859C18.0355 7.55859 17.0981 7.83324 16.2893 8.35272C15.981 8.55084 15.8917 8.96132 16.0897 9.26956C16.2878 9.57781 16.6982 9.66715 17.0066 9.46917C17.6009 9.08739 18.2904 8.88554 19.0005 8.88554C19.7107 8.88554 20.4002 9.08739 20.9945 9.46917C21.1055 9.54048 21.2296 9.57453 21.3525 9.57453C21.5708 9.57453 21.7846 9.46686 21.9113 9.26956C22.1094 8.96139 22.02 8.55084 21.7117 8.35279Z" fill="url(#paint17_linear_3415_983)"/>
|
||||
<path d="M23.3287 5.90666C22.0398 5.06947 20.543 4.62695 19.0002 4.62695C17.4574 4.62695 15.9607 5.06947 14.6717 5.90658C14.2766 6.1632 14.1643 6.69155 14.421 7.08667C14.6776 7.4818 15.206 7.59401 15.6011 7.3374C16.6127 6.68037 17.7881 6.33308 19.0002 6.33308C20.2123 6.33308 21.3878 6.68037 22.3994 7.3374C22.5429 7.43061 22.704 7.47517 22.8632 7.47517C23.1424 7.47517 23.416 7.33822 23.5794 7.08667C23.8361 6.69155 23.7238 6.16327 23.3287 5.90666Z" fill="url(#paint18_linear_3415_983)"/>
|
||||
<path d="M25.0982 3.22758C23.2841 2.0431 21.1755 1.41699 19.0003 1.41699C16.8252 1.41699 14.7166 2.04302 12.9024 3.22751C12.4203 3.54231 12.2846 4.18838 12.5994 4.67054C12.9142 5.15269 13.5603 5.28837 14.0424 4.97357C15.5167 4.01105 17.2311 3.5023 19.0003 3.5023C20.7696 3.5023 22.484 4.01105 23.9582 4.97364C24.134 5.08846 24.3317 5.14338 24.5272 5.14338C24.8676 5.14338 25.2013 4.97692 25.4012 4.67061C25.716 4.18846 25.5804 3.54238 25.0982 3.22758Z" fill="url(#paint19_linear_3415_983)"/>
|
||||
<path d="M19.0002 12.5189C19.6912 12.5189 20.2514 11.9588 20.2514 11.2678C20.2514 10.5768 19.6912 10.0166 19.0002 10.0166C18.3092 10.0166 17.749 10.5768 17.749 11.2678C17.749 11.9588 18.3092 12.5189 19.0002 12.5189Z" fill="url(#paint20_linear_3415_983)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_3415_983" x1="19.0001" y1="22.0548" x2="19.0001" y2="35.447" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#62DBFB"/>
|
||||
<stop offset="0.1912" stop-color="#57D5FA"/>
|
||||
<stop offset="0.5232" stop-color="#3BC5F7"/>
|
||||
<stop offset="0.954" stop-color="#0DABF2"/>
|
||||
<stop offset="1" stop-color="#08A9F1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_3415_983" x1="6.55642" y1="29.1897" x2="2.75642" y2="29.1897" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#0593FC" stop-opacity="0"/>
|
||||
<stop offset="0.6831" stop-color="#0389FC" stop-opacity="0.683"/>
|
||||
<stop offset="1" stop-color="#0182FC"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_3415_983" x1="18.9996" y1="25.2444" x2="18.9996" y2="20.1772" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#0593FC" stop-opacity="0"/>
|
||||
<stop offset="0.6831" stop-color="#0389FC" stop-opacity="0.683"/>
|
||||
<stop offset="1" stop-color="#0182FC"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_3415_983" x1="19.0364" y1="13.4726" x2="19.0364" y2="15.5602" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_3415_983" x1="19.0364" y1="16.6025" x2="19.0364" y2="18.6901" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_3415_983" x1="19.0364" y1="19.8056" x2="19.0364" y2="21.8932" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_3415_983" x1="19.0364" y1="22.8867" x2="19.0364" y2="24.9743" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_3415_983" x1="19.0364" y1="26.0166" x2="19.0364" y2="28.1042" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_3415_983" x1="19.0364" y1="29.2207" x2="19.0364" y2="31.3083" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_3415_983" x1="19.0364" y1="32.3496" x2="19.0364" y2="34.4372" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint10_linear_3415_983" x1="19.0364" y1="35.4795" x2="19.0364" y2="37.5671" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint11_linear_3415_983" x1="8.5956" y1="5.36746" x2="26.3289" y2="36.9596" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint12_linear_3415_983" x1="19" y1="-5.51269" x2="19" y2="16.7501" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint13_linear_3415_983" x1="18.9999" y1="8.21578" x2="18.9999" y2="6.61255" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint14_linear_3415_983" x1="18.9999" y1="11.4189" x2="18.9999" y2="9.81568" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint15_linear_3415_983" x1="13.1332" y1="14.0993" x2="9.70572" y2="7.31888" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint16_linear_3415_983" x1="28.616" y1="14.9578" x2="17.9611" y2="0.279385" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint17_linear_3415_983" x1="18.4669" y1="7.38439" x2="19.3768" y2="9.98784" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint18_linear_3415_983" x1="18.2352" y1="3.84222" x2="19.2715" y2="7.60831" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint19_linear_3415_983" x1="18.1995" y1="1.17089" x2="19.3116" y2="5.24031" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint20_linear_3415_983" x1="17.7869" y1="10.0545" x2="19.7964" y2="12.064" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_3415_983">
|
||||
<rect width="33.2119" height="25.9556" fill="white" transform="translate(2.40332 11.9824)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
29
assets/icons/door_delay.svg
Normal file
29
assets/icons/door_delay.svg
Normal file
@ -0,0 +1,29 @@
|
||||
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.5355 9.24578H10.4576C10.1702 9.24578 9.93727 9.01288 9.93727 8.72543C9.93727 8.43798 10.1702 8.20508 10.4576 8.20508H17.5355C17.8229 8.20508 18.0559 8.43798 18.0559 8.72543C18.0559 9.01288 17.8229 9.24578 17.5355 9.24578ZM6.9905 9.24578H0.520352C0.232969 9.24578 0 9.01288 0 8.72543C0 8.43798 0.2329 8.20508 0.520352 8.20508H6.9905C7.27788 8.20508 7.51085 8.43798 7.51085 8.72543C7.51085 9.01288 7.27788 9.24578 6.9905 9.24578Z" fill="#D9EEFF"/>
|
||||
<path d="M7.49238 12.8874H2.60141C2.31402 12.8874 2.08105 12.6545 2.08105 12.367C2.08105 12.0796 2.31396 11.8467 2.60141 11.8467H7.49238C7.77977 11.8467 8.01273 12.0796 8.01273 12.367C8.01267 12.6545 7.77977 12.8874 7.49238 12.8874Z" fill="#D9EEFF"/>
|
||||
<path d="M4.18018 20.1706H0.520352C0.232969 20.1706 0 19.9377 0 19.6502C0 19.3628 0.2329 19.1299 0.520352 19.1299H4.18018C4.46756 19.1299 4.70053 19.3628 4.70053 19.6502C4.70053 19.9377 4.46756 20.1706 4.18018 20.1706Z" fill="#D9EEFF"/>
|
||||
<path d="M8.2021 23.8132H2.20199C1.91461 23.8132 1.68164 23.5803 1.68164 23.2928C1.68164 23.0054 1.91454 22.7725 2.20199 22.7725H8.2021C8.48948 22.7725 8.72245 23.0054 8.72245 23.2928C8.72245 23.5802 8.48955 23.8132 8.2021 23.8132Z" fill="#D9EEFF"/>
|
||||
<path d="M6.26145 27.4548H3.71273C3.42535 27.4548 3.19238 27.2219 3.19238 26.9344C3.19238 26.647 3.42528 26.4141 3.71273 26.4141H6.26145C6.54883 26.4141 6.7818 26.647 6.7818 26.9344C6.78173 27.2219 6.54883 27.4548 6.26145 27.4548Z" fill="#D9EEFF"/>
|
||||
<path d="M14.4701 31.0964H6.78207C6.49469 31.0964 6.26172 30.8635 6.26172 30.576C6.26172 30.2886 6.49462 30.0557 6.78207 30.0557H14.4701C14.7575 30.0557 14.9905 30.2886 14.9905 30.576C14.9905 30.8634 14.7576 31.0964 14.4701 31.0964Z" fill="#D9EEFF"/>
|
||||
<path d="M8.83613 16.529H4.79281C4.50543 16.529 4.27246 16.2961 4.27246 16.0086C4.27246 15.7212 4.50536 15.4883 4.79281 15.4883H8.83613C9.12352 15.4883 9.35648 15.7212 9.35648 16.0086C9.35648 16.2961 9.12352 16.529 8.83613 16.529Z" fill="#D9EEFF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.5953 3.04199L22.9434 7.74231C23.7969 7.84854 24.6523 8.03927 25.4999 8.31852C26.3475 8.59776 27.1499 8.95378 27.8992 9.3746L29.5512 4.67428L24.5953 3.04199Z" fill="#EFF6FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.2115 0.527932L22.5999 2.38444C22.4682 2.78564 22.6864 3.22225 23.0876 3.35398L24.2637 3.73945L29.2176 5.37181L30.3916 5.75927C30.7928 5.89107 31.2294 5.67074 31.3612 5.26954L31.9728 3.41304C32.1045 3.01184 31.8843 2.57523 31.4831 2.4435L24.1811 0.0382052C23.7799 -0.0935917 23.3432 0.126731 23.2115 0.527932Z" fill="#375E7D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.3903 5.75932C30.7915 5.89111 31.2281 5.67079 31.3599 5.26959L31.9715 3.41309C32.1032 3.01188 31.8829 2.57527 31.4818 2.44354L29.6725 1.84766C30.0738 1.97945 30.294 2.416 30.1622 2.8172L29.5506 4.6737C29.4189 5.0749 28.9823 5.29516 28.5811 5.16343H28.585L29.2163 5.37192L30.3903 5.75932Z" fill="#2B4D66"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.3254 33.1402C24.3875 35.4648 31.9963 31.6259 34.3208 24.5655C36.368 18.3528 33.6404 11.7153 28.1456 8.62577C27.3964 8.20488 26.594 7.84893 25.7464 7.56968C24.8987 7.29043 24.0433 7.09964 23.1898 6.99348C20.2104 6.62181 17.2585 7.27075 14.7609 8.72414C12.0175 10.3211 9.82274 12.8915 8.75291 16.1443C6.42644 23.2046 10.2652 30.8156 17.3254 33.1402Z" fill="#375E7D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.8179 10.3919C19.3153 8.57866 13.386 11.5719 11.5728 17.0746C9.76154 22.5774 12.7527 28.5069 18.2553 30.3182C23.7579 32.1314 29.6872 29.1401 31.5004 23.6374L31.5063 23.6177C33.3057 18.1209 30.3145 12.2012 24.8179 10.3919Z" fill="#EFF6FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.8169 10.3926L22.0833 18.6919C21.7666 19.6517 22.3763 20.5563 23.1865 20.8788L31.5053 23.6184C33.3047 18.1216 30.3135 12.2019 24.8169 10.3926Z" fill="#EB5468"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.5064 23.6184C33.0836 18.8001 30.9793 13.6573 26.7354 11.2422C27.4807 13.4665 27.8917 15.913 27.8917 18.4814C27.8917 19.7991 27.7836 21.0853 27.5771 22.3243L31.5064 23.6184Z" fill="#E5384F"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.3205 24.5668C36.3677 18.3541 33.64 11.7166 28.1453 8.62706C27.5947 8.3163 27.0145 8.04293 26.4088 7.80894C26.1905 7.72437 25.9703 7.64569 25.746 7.57098C25.4825 7.48443 25.219 7.40575 24.9535 7.33691C25.6654 8.53266 26.2671 9.8444 26.7352 11.2427C30.9792 13.6578 33.0834 18.8006 31.5062 23.6189C31.5042 23.6248 31.5022 23.6307 31.5003 23.6386C30.3735 27.0566 27.6596 29.5051 24.4461 30.4353C23.5828 31.7294 22.5837 32.8701 21.4746 33.8199C27.1522 33.8475 32.4483 30.2524 34.3205 24.5668Z" fill="#2B4D66"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.4453 30.4347C27.6588 29.5045 30.3727 27.056 31.4995 23.6379L31.5054 23.6183L27.5761 22.3242C27.2103 24.5249 26.5377 26.5801 25.6173 28.415C25.2615 29.123 24.8701 29.7975 24.4453 30.4347Z" fill="#D9EEFF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.1457 8.62614L29.2175 5.37135L28.5823 5.16285L27.4083 4.77539L26.4092 7.80802C27.0149 8.04208 27.5951 8.31545 28.1457 8.62614Z" fill="#D9EEFF"/>
|
||||
<path d="M18.2667 30.8037C18.2127 30.8037 18.1578 30.7952 18.1038 30.7774C17.8308 30.6875 17.6824 30.3934 17.7724 30.1204L18.3329 28.4192C18.4227 28.1462 18.7166 27.9978 18.9899 28.0879C19.2629 28.1778 19.4113 28.4719 19.3212 28.7449L18.7608 30.4461C18.6886 30.665 18.4852 30.8037 18.2667 30.8037Z" fill="#375E7D"/>
|
||||
<path d="M13.2968 18.1426C13.2428 18.1426 13.1879 18.1341 13.1337 18.1162L11.4346 17.5557C11.1617 17.4657 11.0134 17.1715 11.1035 16.8985C11.1935 16.6257 11.4874 16.4771 11.7607 16.5675L13.4598 17.128C13.7327 17.218 13.881 17.5122 13.7909 17.7852C13.7187 18.0039 13.5153 18.1426 13.2968 18.1426Z" fill="#375E7D"/>
|
||||
<path d="M17.6349 13.1075C17.4448 13.1075 17.2617 13.003 17.1701 12.8218L16.3617 11.2229C16.2321 10.9665 16.3349 10.6534 16.5914 10.5238C16.8478 10.3943 17.1609 10.497 17.2905 10.7534L18.0988 12.3523C18.2285 12.6087 18.1256 12.9217 17.8692 13.0514C17.7939 13.0894 17.7138 13.1075 17.6349 13.1075Z" fill="#375E7D"/>
|
||||
<path d="M26.2598 30.2062C26.0695 30.2062 25.8862 30.1015 25.7948 29.9201L24.9885 28.3211C24.8591 28.0646 24.9622 27.7516 25.2188 27.6223C25.4753 27.4928 25.7882 27.5959 25.9176 27.8526L26.7239 29.4515C26.8533 29.7081 26.7502 30.021 26.4936 30.1504C26.4185 30.1882 26.3385 30.2062 26.2598 30.2062Z" fill="#375E7D"/>
|
||||
<path d="M12.1947 25.5749C12.0044 25.5749 11.8211 25.4701 11.7297 25.2887C11.6003 25.0321 11.7034 24.7193 11.96 24.5899L13.5589 23.7835C13.8154 23.6539 14.1284 23.7571 14.2577 24.0138C14.3872 24.2704 14.2841 24.5832 14.0274 24.7126L12.4285 25.519C12.3534 25.5569 12.2735 25.5749 12.1947 25.5749Z" fill="#375E7D"/>
|
||||
<path d="M20.1233 19.7372C19.9981 19.7372 19.8727 19.6924 19.7729 19.6015L15.995 16.1578C15.7826 15.9641 15.7674 15.6351 15.9609 15.4227C16.1545 15.2103 16.4835 15.1952 16.696 15.3887L20.4739 18.8324C20.6862 19.026 20.7014 19.355 20.5079 19.5674C20.4053 19.68 20.2646 19.7372 20.1233 19.7372Z" fill="#375E7D"/>
|
||||
<path d="M21.9851 24.5472C21.7247 24.5472 21.5 24.3522 21.469 24.0872L21.2409 22.1344C21.2075 21.849 21.4118 21.5906 21.6973 21.5572C21.9817 21.5243 22.2411 21.7281 22.2745 22.0136L22.5026 23.9665C22.5359 24.2519 22.3316 24.5103 22.0461 24.5437C22.0257 24.546 22.0053 24.5472 21.9851 24.5472Z" fill="#375E7D"/>
|
||||
<path d="M21.5489 31.3714C20.3897 31.3714 19.2254 31.1861 18.0923 30.8128C12.3267 28.9149 9.18023 22.6793 11.0784 16.9125C11.999 14.1188 13.9519 11.8507 16.5773 10.5258C19.2032 9.2007 22.1875 8.97792 24.9806 9.89831C30.7348 11.7925 33.8839 18.0161 32.0028 23.7739L31.9987 23.7875C31.9974 23.7919 31.996 23.7964 31.9946 23.8008C31.0741 26.5942 29.1212 28.862 26.4957 30.1864C24.9349 30.9734 23.2474 31.3714 21.5489 31.3714ZM21.5263 10.3809C19.9878 10.3809 18.4597 10.7414 17.0461 11.4547C14.6687 12.6544 12.9004 14.7083 12.0668 17.2379C10.3481 22.4595 13.1971 28.1058 18.4178 29.8243C20.9472 30.6578 23.6495 30.4564 26.0269 29.2571C28.4023 28.0589 30.1696 26.008 31.004 23.4815L31.0079 23.4687C31.0091 23.4646 31.0104 23.4604 31.0117 23.4564C32.7189 18.2411 29.8674 12.6024 24.6551 10.8866C24.655 10.8866 24.6549 10.8865 24.6549 10.8865C23.6295 10.5486 22.5755 10.3809 21.5263 10.3809Z" fill="#FFC250"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0847 18.6918C21.1762 18.3928 20.1968 18.8865 19.8978 19.7951C19.5989 20.7037 20.0925 21.6831 21.0011 21.982C21.9096 22.281 22.889 21.7874 23.188 20.8787C23.4869 19.9702 22.9933 18.9907 22.0847 18.6918Z" fill="#FFE07D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.1879 20.8785C23.4868 19.97 22.9932 18.9905 22.0846 18.6916C21.6107 18.5362 21.117 18.5952 20.71 18.8174C21.5497 19.1557 21.9942 20.0938 21.7071 20.967C21.5635 21.3996 21.2665 21.7398 20.8949 21.9444C20.9303 21.9581 20.9657 21.9699 21.001 21.9818C21.9096 22.2808 22.889 21.7872 23.1879 20.8785Z" fill="#FFE07D"/>
|
||||
</svg>
|
After Width: | Height: | Size: 8.7 KiB |
104
assets/icons/opened_door.svg
Normal file
104
assets/icons/opened_door.svg
Normal file
@ -0,0 +1,104 @@
|
||||
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.39648 12.4951H35.6037V37.8285H2.39648V12.4951Z" fill="url(#paint0_linear_3415_1104)"/>
|
||||
<path d="M2.40332 20.3789H14.3054V38.0005H2.40332V20.3789Z" fill="url(#paint1_linear_3415_1104)"/>
|
||||
<g clip-path="url(#clip0_3415_1104)">
|
||||
<path d="M2.45801 10.3135H35.6149V14.2625H2.45801V10.3135Z" fill="url(#paint2_linear_3415_1104)"/>
|
||||
<path d="M2.45801 13.4424H35.6149V17.3914H2.45801V13.4424Z" fill="url(#paint3_linear_3415_1104)"/>
|
||||
<path d="M2.45801 16.5723H35.6149V20.5213H2.45801V16.5723Z" fill="url(#paint4_linear_3415_1104)"/>
|
||||
</g>
|
||||
<path d="M36.3054 9.43704L22.7255 0.961176C21.6987 0.320392 20.3494 0 19 0C17.6506 0 16.3013 0.320392 15.2745 0.961176L1.69458 9.43704C0.640486 10.095 0 11.2497 0 12.4923V35.6368C0 36.942 1.05804 38 2.36323 38C3.03367 38 3.57722 37.4565 3.57722 36.786V15.833C3.57722 14.4546 4.69464 13.3373 6.07292 13.3373H31.9271C33.3054 13.3373 34.4228 14.4546 34.4228 15.833V36.786C34.4228 37.4565 34.9663 38 35.6368 38C36.942 38 38 36.942 38 35.6368V12.4923C38 11.2497 37.3595 10.095 36.3054 9.43704Z" fill="url(#paint5_linear_3415_1104)"/>
|
||||
<path d="M36.3054 9.43704L22.7255 0.961177C21.6987 0.320392 20.3494 0 19 0C17.6506 0 16.3013 0.320392 15.2745 0.961177L1.69458 9.43704C0.640486 10.095 0 11.2497 0 12.4923V16.0686C0 14.8261 0.640486 13.6713 1.69458 13.0134L15.2745 4.53743C16.3013 3.89664 17.6506 3.57625 19 3.57625C20.3494 3.57625 21.6987 3.89664 22.7255 4.53743L36.3054 13.0133C37.3595 13.6712 38 14.826 38 16.0686V12.4923C38 11.2497 37.3595 10.095 36.3054 9.43704Z" fill="url(#paint6_linear_3415_1104)"/>
|
||||
<path d="M14.7543 8.44803H23.2456C23.7264 8.44803 24.1161 8.05827 24.1161 7.57753C24.1161 7.09672 23.7264 6.70703 23.2456 6.70703H14.7543C14.2735 6.70703 13.8838 7.09679 13.8838 7.57753C13.8838 8.05827 14.2735 8.44803 14.7543 8.44803Z" fill="url(#paint7_linear_3415_1104)"/>
|
||||
<path d="M14.7543 11.6512H23.2456C23.7264 11.6512 24.1161 11.2614 24.1161 10.7807C24.1161 10.2998 23.7264 9.91016 23.2456 9.91016H14.7543C14.2735 9.91016 13.8838 10.2999 13.8838 10.7807C13.8838 11.2614 14.2735 11.6512 14.7543 11.6512Z" fill="url(#paint8_linear_3415_1104)"/>
|
||||
<path d="M38 16.0685V35.6363C38 36.289 37.7355 36.8798 37.3078 37.3075C36.8801 37.7352 36.2893 37.9997 35.6366 37.9997C34.966 37.9997 34.4228 37.4565 34.4228 36.7859V15.8323C34.4228 14.4546 33.3051 13.337 31.9267 13.337H6.07329C4.69486 13.337 3.57722 14.4546 3.57722 15.8323V36.7859C3.57722 37.1212 3.44161 37.4245 3.2218 37.6443C3.002 37.8641 2.69875 37.9997 2.36345 37.9997C1.05804 37.9997 0 36.9417 0 35.6363V16.0685C0 14.8257 0.640784 13.6708 1.69435 13.0128L15.2745 4.53735C16.3013 3.89656 17.6506 3.57617 19 3.57617C20.3494 3.57617 21.6987 3.89656 22.7255 4.53735L36.3056 13.0128C37.3592 13.6708 38 14.8257 38 16.0685Z" fill="url(#paint9_linear_3415_1104)"/>
|
||||
<path d="M19.0745 1.49121C16.8994 1.49121 14.7908 2.11724 12.9767 3.30173C12.4945 3.61653 12.3588 4.2626 12.6736 4.74476L14.39 6.46646C14.3263 6.69416 14.3564 6.94682 14.4952 7.16066L16.0917 8.77879C16.0317 8.96194 16.0515 9.16945 16.1637 9.34417L17.8679 11.0139C17.7547 11.4323 17.8613 11.8978 18.1898 12.2264L19.3006 13.3372H31.927C33.3054 13.3372 34.4227 14.4546 34.4227 15.8329V28.4594L38 32.0366V16.1358L25.1723 3.30173C23.3583 2.11732 21.2496 1.49121 19.0745 1.49121Z" fill="url(#paint10_linear_3415_1104)"/>
|
||||
<path d="M21.7117 8.35279C20.9031 7.83324 19.9655 7.55859 19.0005 7.55859C18.0355 7.55859 17.0981 7.83324 16.2893 8.35272C15.981 8.55084 15.8917 8.96132 16.0897 9.26956C16.2878 9.57781 16.6982 9.66715 17.0066 9.46917C17.6009 9.08739 18.2904 8.88554 19.0005 8.88554C19.7107 8.88554 20.4002 9.08739 20.9945 9.46917C21.1055 9.54048 21.2296 9.57453 21.3525 9.57453C21.5708 9.57453 21.7846 9.46686 21.9113 9.26956C22.1094 8.96139 22.02 8.55084 21.7117 8.35279Z" fill="url(#paint11_linear_3415_1104)"/>
|
||||
<path d="M23.3287 5.90666C22.0398 5.06947 20.543 4.62695 19.0002 4.62695C17.4574 4.62695 15.9607 5.06947 14.6717 5.90658C14.2766 6.1632 14.1643 6.69155 14.421 7.08667C14.6776 7.4818 15.206 7.59401 15.6011 7.3374C16.6127 6.68037 17.7881 6.33308 19.0002 6.33308C20.2123 6.33308 21.3878 6.68037 22.3994 7.3374C22.5429 7.43061 22.704 7.47517 22.8632 7.47517C23.1424 7.47517 23.416 7.33822 23.5794 7.08667C23.8361 6.69155 23.7238 6.16327 23.3287 5.90666Z" fill="url(#paint12_linear_3415_1104)"/>
|
||||
<path d="M25.0982 3.22758C23.2841 2.0431 21.1755 1.41699 19.0003 1.41699C16.8252 1.41699 14.7166 2.04302 12.9024 3.22751C12.4203 3.54231 12.2846 4.18838 12.5994 4.67054C12.9142 5.15269 13.5603 5.28837 14.0424 4.97357C15.5167 4.01105 17.2311 3.5023 19.0003 3.5023C20.7696 3.5023 22.484 4.01105 23.9582 4.97364C24.134 5.08846 24.3317 5.14338 24.5272 5.14338C24.8676 5.14338 25.2013 4.97692 25.4012 4.67061C25.716 4.18846 25.5804 3.54238 25.0982 3.22758Z" fill="url(#paint13_linear_3415_1104)"/>
|
||||
<path d="M19.0002 12.5189C19.6912 12.5189 20.2514 11.9588 20.2514 11.2678C20.2514 10.5768 19.6912 10.0166 19.0002 10.0166C18.3092 10.0166 17.749 10.5768 17.749 11.2678C17.749 11.9588 18.3092 12.5189 19.0002 12.5189Z" fill="url(#paint14_linear_3415_1104)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_3415_1104" x1="19.0001" y1="22.0548" x2="19.0001" y2="35.447" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#62DBFB"/>
|
||||
<stop offset="0.1912" stop-color="#57D5FA"/>
|
||||
<stop offset="0.5232" stop-color="#3BC5F7"/>
|
||||
<stop offset="0.954" stop-color="#0DABF2"/>
|
||||
<stop offset="1" stop-color="#08A9F1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_3415_1104" x1="6.55642" y1="29.1897" x2="2.75642" y2="29.1897" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#0593FC" stop-opacity="0"/>
|
||||
<stop offset="0.6831" stop-color="#0389FC" stop-opacity="0.683"/>
|
||||
<stop offset="1" stop-color="#0182FC"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_3415_1104" x1="19.0364" y1="11.8037" x2="19.0364" y2="13.8913" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_3415_1104" x1="19.0364" y1="14.9326" x2="19.0364" y2="17.0202" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_3415_1104" x1="19.0364" y1="18.0625" x2="19.0364" y2="20.1501" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#017297"/>
|
||||
<stop offset="1" stop-color="#024C67"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_3415_1104" x1="8.5956" y1="5.36746" x2="26.3289" y2="36.9596" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_3415_1104" x1="19" y1="-5.51269" x2="19" y2="16.7501" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_3415_1104" x1="18.9999" y1="8.21578" x2="18.9999" y2="6.61255" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_3415_1104" x1="18.9999" y1="11.4189" x2="18.9999" y2="9.81568" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#EAF9FA"/>
|
||||
<stop offset="1" stop-color="#B3DAFE"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_3415_1104" x1="13.1332" y1="14.0993" x2="9.70572" y2="7.31888" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint10_linear_3415_1104" x1="28.616" y1="14.9578" x2="17.9611" y2="0.279385" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7BACDF" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#7BACDF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint11_linear_3415_1104" x1="18.4669" y1="7.38439" x2="19.3768" y2="9.98784" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint12_linear_3415_1104" x1="18.2352" y1="3.84222" x2="19.2715" y2="7.60831" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint13_linear_3415_1104" x1="18.1995" y1="1.17089" x2="19.3116" y2="5.24031" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint14_linear_3415_1104" x1="17.7869" y1="10.0545" x2="19.7964" y2="12.064" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#AEFFD1"/>
|
||||
<stop offset="0.1201" stop-color="#A3F9CB"/>
|
||||
<stop offset="0.3288" stop-color="#87EAB9"/>
|
||||
<stop offset="0.6012" stop-color="#59D19D"/>
|
||||
<stop offset="0.9235" stop-color="#19AF77"/>
|
||||
<stop offset="1" stop-color="#09A76D"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_3415_1104">
|
||||
<rect width="33.2119" height="25.9556" fill="white" transform="translate(2.40332 11.9824)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 9.3 KiB |
18
assets/icons/records.svg
Normal file
18
assets/icons/records.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.62771 22.7853L0.0206433 9.9747C-0.0455284 9.78815 0.0527038 9.5815 0.239256 9.51335C6.29643 7.33481 13.1218 5.30864 18.9563 2.81914C19.2171 2.65467 19.4217 2.81716 19.534 3.12805L26.7725 21.7863L28.7381 27.2528C28.8043 27.4393 28.7081 27.6479 28.5215 27.7142L14.6702 32.6952L9.27087 34.6371C9.08432 34.7053 8.87774 34.607 8.80958 34.4204L4.62771 22.7853Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46894 18.5343L6.16844 5.11787C6.13433 4.92127 6.26674 4.73472 6.46129 4.70061L22.3042 1.98442L25.9325 1.38662C26.1311 1.30035 26.454 1.40063 26.5302 1.84401L30.4493 21.415L31.4301 27.1403C31.4642 27.3349 31.3318 27.5235 31.1372 27.5576L16.6301 30.0451L10.974 31.016C10.7795 31.0481 10.5909 30.9157 10.5568 30.7211L8.46894 18.5343Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9063 14.5779V27.4768C12.9063 27.6835 13.0748 27.854 13.2814 27.854H19.2684H28.1315H29.4051H34.624C34.8305 27.854 34.999 27.6835 34.999 27.4768V21.4166V4.67611V4.50159H31.1882C30.8212 4.50159 30.059 4.55375 30.059 3.72127L30.0509 0H13.2813C13.0748 0 12.9062 0.168505 12.9062 0.375155V3.59487V4.957V14.5779H12.9063Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.54915 7.3418C4.40308 8.06401 2.27704 8.78014 0.239256 9.51234C0.0527037 9.58056 -0.0455284 9.78714 0.0206433 9.97369L4.62771 22.7843L8.80958 34.4194C8.87781 34.606 9.08439 34.7043 9.27087 34.636L14.6702 32.6942L26.9732 28.2709L6.54915 7.3418Z" fill="#B5C4CF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9076 3.59473L6.46129 4.70003C6.26674 4.73414 6.13433 4.92069 6.16844 5.11729L6.54955 7.34197L8.469 18.5337L10.5569 30.7205C10.591 30.9151 10.7795 31.0474 10.9741 31.0154L16.6301 30.0445L26.9735 28.2711L29.4064 27.8538H28.1328L12.9076 3.59473Z" fill="#D7E7EC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.999 21.4166V4.67611V4.50159V4.44342C34.999 4.33507 34.9528 4.31702 34.7864 4.15453L30.6727 0.230712C30.4782 0.0461424 30.4461 0 30.3318 0H30.0509H13.2813C13.0748 0 12.9062 0.168505 12.9062 0.375155V27.4768C12.9062 27.6835 13.0748 27.854 13.2813 27.854H34.6239C34.8305 27.854 34.999 27.6835 34.999 27.4768V21.4166Z" fill="#EDF3F4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9077 3.59473L11.3975 3.85353V28.8629C11.3975 29.0716 11.566 29.2401 11.7725 29.2401H17.7595H21.3216L26.9736 28.2712L29.4065 27.8539H28.1329H26.5665H19.2698H13.2828C13.0762 27.8539 12.9077 27.6834 12.9077 27.4768C12.9077 19.5167 12.9077 11.5547 12.9077 3.59473Z" fill="#B5C4CF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46896 18.5336L6.54951 7.3418C6.03005 7.51632 5.51257 7.69084 4.99707 7.86536L5.23578 9.25558L7.15524 20.4473L9.24518 32.6341C9.27724 32.8286 9.46578 32.961 9.66033 32.929L15.3164 31.9581L18 31.4987L26.0829 28.59L25.9867 28.4395L21.3214 29.2399L16.6302 30.0444L10.9741 31.0153C10.7796 31.0474 10.591 30.915 10.5569 30.7204L8.46896 18.5336Z" fill="#9AAFB7"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.9998 21.4166V4.67611V4.50159C34.9998 4.29897 34.9337 4.29699 34.7873 4.15453L30.6736 0.230712C30.4791 0.0461424 30.447 0 30.3326 0H30.0518H25.8779C30.9784 6.8286 31.2692 19.1377 27.4845 26.8209C27.31 27.178 27.1275 27.521 26.937 27.854H28.1323H29.4059H34.6248C34.8313 27.854 34.9998 27.6835 34.9998 27.4768V21.4166Z" fill="#D7E7EC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.0607 3.72127C30.0607 4.55375 30.8229 4.50159 31.19 4.50159H35.0008V4.44342C35.0008 4.33507 34.9546 4.31702 34.7882 4.15453L30.6745 0.230712C30.48 0.0461424 30.4479 0 30.3336 0H30.0527L30.0607 3.72127Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.7882 4.15453L30.6745 0.230712C30.48 0.0461424 30.4479 0 30.3336 0H30.0527L30.0607 3.7212C30.0607 4.55368 30.8229 4.50152 31.19 4.50152H35.0008V4.44335C35.0008 4.33507 34.9546 4.31702 34.7882 4.15453Z" fill="#B5C4CF"/>
|
||||
<path d="M31.6094 8.20318H16.5086C16.2169 8.20318 15.9805 7.96666 15.9805 7.67483C15.9805 7.38301 16.2169 7.14648 16.5086 7.14648H31.6094C31.9011 7.14648 32.1376 7.38301 32.1376 7.67483C32.1376 7.96666 31.9012 8.20318 31.6094 8.20318Z" fill="#9AAFB7"/>
|
||||
<path d="M31.6094 11.9571H16.5086C16.2169 11.9571 15.9805 11.7206 15.9805 11.4287C15.9805 11.1369 16.2169 10.9004 16.5086 10.9004H31.6094C31.9011 10.9004 32.1376 11.1369 32.1376 11.4287C32.1376 11.7206 31.9012 11.9571 31.6094 11.9571Z" fill="#9AAFB7"/>
|
||||
<path d="M31.6094 15.71H16.5086C16.2169 15.71 15.9805 15.4735 15.9805 15.1817C15.9805 14.8898 16.2169 14.6533 16.5086 14.6533H31.6094C31.9011 14.6533 32.1376 14.8898 32.1376 15.1817C32.1376 15.4735 31.9012 15.71 31.6094 15.71Z" fill="#9AAFB7"/>
|
||||
<path d="M31.6094 19.4639H16.5086C16.2169 19.4639 15.9805 19.2274 15.9805 18.9356C15.9805 18.6437 16.2169 18.4072 16.5086 18.4072H31.6094C31.9011 18.4072 32.1376 18.6437 32.1376 18.9356C32.1376 19.2274 31.9012 19.4639 31.6094 19.4639Z" fill="#9AAFB7"/>
|
||||
<path d="M31.6094 23.2169H16.5086C16.2169 23.2169 15.9805 22.9803 15.9805 22.6885C15.9805 22.3967 16.2169 22.1602 16.5086 22.1602H31.6094C31.9011 22.1602 32.1376 22.3967 32.1376 22.6885C32.1376 22.9803 31.9012 23.2169 31.6094 23.2169Z" fill="#9AAFB7"/>
|
||||
</svg>
|
After Width: | Height: | Size: 5.1 KiB |
@ -8,6 +8,7 @@ import 'package:syncrow_web/pages/device_managment/garage_door/bloc/garage_door_
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/models/garage_door_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/schedule_entry.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/schedule_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/water_heater_status_model.dart';
|
||||
import 'package:syncrow_web/services/devices_mang_api.dart';
|
||||
import 'package:syncrow_web/utils/format_date_time.dart';
|
||||
|
||||
@ -39,27 +40,29 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
var response = await DevicesManagementApi().getDeviceStatus(event.deviceId);
|
||||
deviceStatus = GarageDoorStatusModel.fromJson(deviceId, response.status);
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
// _listenToChanges();
|
||||
} catch (e) {
|
||||
emit(GarageDoorErrorState(message: e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
void _toggleGarageDoor(ToggleGarageDoorEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingNewState(garageDoorModel: deviceStatus));
|
||||
deviceStatus = deviceStatus.copyWith(isOpen: event.isOpen);
|
||||
final oldValue = deviceStatus.switch1;
|
||||
_updateLocalValue('switch_1', event.isOpen);
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
await _runDeBouncer(
|
||||
final success = await _runDeBouncer(
|
||||
deviceId: event.deviceId,
|
||||
code: event.code,
|
||||
code: 'switch_1',
|
||||
value: event.isOpen,
|
||||
oldValue: oldValue,
|
||||
emit: emit,
|
||||
isBatch: false,
|
||||
);
|
||||
if (!success) {
|
||||
_revertValue('switch_1', oldValue, emit);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _addSchedule(AddGarageDoorScheduleEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingState());
|
||||
try {
|
||||
ScheduleEntry newSchedule = ScheduleEntry(
|
||||
category: event.category,
|
||||
@ -67,23 +70,20 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
function: Status(code: 'switch_1', value: event.functionOn),
|
||||
days: ScheduleModel.convertSelectedDaysToStrings(event.selectedDays),
|
||||
);
|
||||
|
||||
bool success = await DevicesManagementApi().addScheduleRecord(newSchedule, deviceId);
|
||||
|
||||
if (success) {
|
||||
add(FetchGarageDoorSchedulesEvent(deviceId: deviceId, category: event.category));
|
||||
add(FetchGarageDoorSchedulesEvent(deviceId: deviceId, category: 'switch_1'));
|
||||
} else {
|
||||
emit(GarageDoorErrorState(message: 'Failed to add schedule.'));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(GarageDoorErrorState(message: e.toString()));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _updateSchedule(UpdateGarageDoorScheduleEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingState());
|
||||
try {
|
||||
final updatedSchedules = deviceStatus.schedules.map((schedule) {
|
||||
final updatedSchedules = deviceStatus.schedules?.map((schedule) {
|
||||
if (schedule.scheduleId == event.scheduleId) {
|
||||
return schedule.copyWith(
|
||||
function: Status(code: 'switch_1', value: event.functionOn),
|
||||
@ -92,57 +92,61 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
}
|
||||
return schedule;
|
||||
}).toList();
|
||||
|
||||
bool success = await DevicesManagementApi().updateScheduleRecord(
|
||||
enable: event.enable,
|
||||
uuid: deviceStatus.uuid,
|
||||
scheduleId: event.scheduleId,
|
||||
);
|
||||
|
||||
if (success) {
|
||||
deviceStatus = deviceStatus.copyWith(schedules: updatedSchedules);
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
} else {
|
||||
emit(GarageDoorErrorState(message: 'Failed to update schedule.'));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(GarageDoorErrorState(message: e.toString()));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _deleteSchedule(DeleteGarageDoorScheduleEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingState());
|
||||
try {
|
||||
bool success = await DevicesManagementApi().deleteScheduleRecord(deviceStatus.uuid, event.scheduleId);
|
||||
|
||||
if (success) {
|
||||
final updatedSchedules =
|
||||
deviceStatus.schedules.where((schedule) => schedule.scheduleId != event.scheduleId).toList();
|
||||
deviceStatus.schedules?.where((schedule) => schedule.scheduleId != event.scheduleId).toList();
|
||||
deviceStatus = deviceStatus.copyWith(schedules: updatedSchedules);
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
} else {
|
||||
emit(GarageDoorErrorState(message: 'Failed to delete schedule.'));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(GarageDoorErrorState(message: e.toString()));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _fetchSchedules(FetchGarageDoorSchedulesEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingState());
|
||||
emit(ScheduleGarageLoadingState());
|
||||
try {
|
||||
List<ScheduleModel> schedules =
|
||||
await DevicesManagementApi().getDeviceSchedules(deviceStatus.uuid, event.category);
|
||||
|
||||
deviceStatus = deviceStatus.copyWith(schedules: schedules);
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
emit(
|
||||
GarageDoorLoadedState(
|
||||
status: deviceStatus,
|
||||
scheduleMode: ScheduleModes.schedule,
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
emit(GarageDoorErrorState(message: 'Failed to fetch schedules.'));
|
||||
emit(
|
||||
GarageDoorLoadedState(
|
||||
status: deviceStatus,
|
||||
scheduleMode: ScheduleModes.schedule,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _increaseDelay(IncreaseGarageDoorDelayEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingNewState(garageDoorModel: deviceStatus));
|
||||
try {
|
||||
deviceStatus = deviceStatus.copyWith(delay: deviceStatus.delay + Duration(minutes: 10));
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
@ -152,7 +156,6 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
}
|
||||
|
||||
void _decreaseDelay(DecreaseGarageDoorDelayEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorLoadingNewState(garageDoorModel: deviceStatus));
|
||||
try {
|
||||
if (deviceStatus.delay.inMinutes > 10) {
|
||||
deviceStatus = deviceStatus.copyWith(delay: deviceStatus.delay - Duration(minutes: 10));
|
||||
@ -175,14 +178,14 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
if (currentState is GarageDoorLoadedState) {
|
||||
List<bool> updatedDays = List.from(currentState.selectedDays);
|
||||
updatedDays[event.dayIndex] = event.isSelected;
|
||||
emit(currentState.copyWith(selectedDays: updatedDays));
|
||||
emit(currentState.copyWith(selectedDays: updatedDays, selectedTime: currentState.selectedTime));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _updateFunctionOn(UpdateFunctionOnEvent event, Emitter<GarageDoorState> emit) async {
|
||||
final currentState = state;
|
||||
if (currentState is GarageDoorLoadedState) {
|
||||
emit(currentState.copyWith(functionOn: event.functionOn));
|
||||
emit(currentState.copyWith(functionOn: event.functionOn, selectedTime: currentState.selectedTime));
|
||||
}
|
||||
}
|
||||
|
||||
@ -201,7 +204,7 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
Future<void> _fetchRecords(FetchGarageDoorRecordsEvent event, Emitter<GarageDoorState> emit) async {
|
||||
emit(GarageDoorReportsLoadingState());
|
||||
try {
|
||||
final DeviceReport records = await DevicesManagementApi.getDeviceReports(event.deviceId, 'code_for_records');
|
||||
final DeviceReport records = await DevicesManagementApi.getDeviceReports(event.deviceId, 'switch_1');
|
||||
emit(GarageDoorReportsState(deviceReport: records));
|
||||
} catch (e) {
|
||||
emit(GarageDoorReportsFailedState(error: e.toString()));
|
||||
@ -212,43 +215,68 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorState> {
|
||||
emit(GarageDoorLoadedState(status: deviceStatus));
|
||||
}
|
||||
|
||||
Future<void> _runDeBouncer({
|
||||
Future<bool> _runDeBouncer({
|
||||
required dynamic deviceId,
|
||||
required String code,
|
||||
required dynamic value,
|
||||
required dynamic oldValue,
|
||||
required Emitter<GarageDoorState> emit,
|
||||
required bool isBatch,
|
||||
}) async {
|
||||
late String id;
|
||||
if (deviceId is List) {
|
||||
id = deviceId.first;
|
||||
} else {
|
||||
id = deviceId;
|
||||
}
|
||||
|
||||
if (_timer != null) {
|
||||
_timer!.cancel();
|
||||
}
|
||||
_timer = Timer(const Duration(seconds: 1), () async {
|
||||
try {
|
||||
late bool response;
|
||||
if (isBatch) {
|
||||
response = await DevicesManagementApi().deviceBatchControl(deviceId, code, value);
|
||||
} else {
|
||||
response = await DevicesManagementApi().deviceControl(deviceId, Status(code: code, value: value));
|
||||
}
|
||||
|
||||
if (!response) {
|
||||
add(GarageDoorInitialEvent(id));
|
||||
} else if (response == true && code == 'scene') {
|
||||
emit(GarageDoorLoadingState());
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
add(GarageDoorInitialEvent(id));
|
||||
}
|
||||
} catch (_) {
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
add(GarageDoorInitialEvent(id));
|
||||
try {
|
||||
late bool status;
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
if (isBatch) {
|
||||
status = await DevicesManagementApi().deviceBatchControl(deviceId, code, value);
|
||||
} else {
|
||||
status = await DevicesManagementApi().deviceControl(deviceId, Status(code: code, value: value));
|
||||
}
|
||||
});
|
||||
|
||||
if (!status) {
|
||||
_revertValue(code, oldValue, emit);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} catch (e) {
|
||||
_revertValue(code, oldValue, emit);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void _revertValue(String code, dynamic oldValue, Emitter<GarageDoorState> emit) {
|
||||
switch (code) {
|
||||
case 'switch_1':
|
||||
if (oldValue is bool) {
|
||||
deviceStatus = deviceStatus.copyWith(switch1: oldValue);
|
||||
}
|
||||
break;
|
||||
// Add other cases if needed
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (state is GarageDoorLoadedState) {
|
||||
final currentState = state as GarageDoorLoadedState;
|
||||
emit(currentState.copyWith(status: deviceStatus));
|
||||
}
|
||||
}
|
||||
|
||||
void _updateLocalValue(String code, dynamic value) {
|
||||
switch (code) {
|
||||
case 'switch_1':
|
||||
if (value is bool) {
|
||||
deviceStatus = deviceStatus.copyWith(switch1: value);
|
||||
}
|
||||
break;
|
||||
// Add other cases if needed
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> close() {
|
||||
_timer?.cancel();
|
||||
return super.close();
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/models/garage_door_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/schedule_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/water_heater_status_model.dart';
|
||||
|
||||
abstract class GarageDoorState extends Equatable {
|
||||
@ -20,7 +19,6 @@ class GarageDoorLoadingState extends GarageDoorState {}
|
||||
|
||||
class GarageDoorLoadedState extends GarageDoorState {
|
||||
final GarageDoorStatusModel status;
|
||||
final List<ScheduleModel>? schedules;
|
||||
final Duration? delay;
|
||||
final DeviceReport? records;
|
||||
final List<bool> selectedDays;
|
||||
@ -31,7 +29,6 @@ class GarageDoorLoadedState extends GarageDoorState {
|
||||
|
||||
const GarageDoorLoadedState({
|
||||
required this.status,
|
||||
this.schedules,
|
||||
this.delay,
|
||||
this.records,
|
||||
this.selectedDays = const [false, false, false, false, false, false, false],
|
||||
@ -44,7 +41,6 @@ class GarageDoorLoadedState extends GarageDoorState {
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
status,
|
||||
schedules,
|
||||
delay,
|
||||
records,
|
||||
selectedDays,
|
||||
@ -56,7 +52,6 @@ class GarageDoorLoadedState extends GarageDoorState {
|
||||
|
||||
GarageDoorLoadedState copyWith({
|
||||
GarageDoorStatusModel? status,
|
||||
List<ScheduleModel>? schedules,
|
||||
Duration? delay,
|
||||
DeviceReport? records,
|
||||
List<bool>? selectedDays,
|
||||
@ -67,7 +62,6 @@ class GarageDoorLoadedState extends GarageDoorState {
|
||||
}) {
|
||||
return GarageDoorLoadedState(
|
||||
status: status ?? this.status,
|
||||
schedules: schedules ?? this.schedules,
|
||||
delay: delay ?? this.delay,
|
||||
records: records ?? this.records,
|
||||
selectedDays: selectedDays ?? this.selectedDays,
|
||||
|
@ -11,9 +11,9 @@ class GarageDoorStatusModel {
|
||||
final String doorControl1;
|
||||
final bool voiceControl1;
|
||||
final String doorState1;
|
||||
final bool isOpen;
|
||||
// final bool isOpen;
|
||||
final Duration delay;
|
||||
final List<ScheduleModel> schedules; // Add schedules field
|
||||
final List<ScheduleModel>? schedules; // Add schedules field
|
||||
|
||||
GarageDoorStatusModel({
|
||||
required this.uuid,
|
||||
@ -25,7 +25,7 @@ class GarageDoorStatusModel {
|
||||
required this.doorControl1,
|
||||
required this.voiceControl1,
|
||||
required this.doorState1,
|
||||
required this.isOpen,
|
||||
// required this.isOpen,
|
||||
required this.delay,
|
||||
required this.schedules, // Initialize schedules
|
||||
});
|
||||
@ -80,7 +80,7 @@ class GarageDoorStatusModel {
|
||||
doorControl1: doorControl1,
|
||||
voiceControl1: voiceControl1,
|
||||
doorState1: doorState1,
|
||||
isOpen: doorState1 == 'open' ? true : false,
|
||||
// isOpen: doorState1 == 'open' ? true : false,
|
||||
delay: Duration(seconds: countdown1),
|
||||
schedules: schedules, // Assign schedules
|
||||
);
|
||||
@ -96,7 +96,7 @@ class GarageDoorStatusModel {
|
||||
String? doorControl1,
|
||||
bool? voiceControl1,
|
||||
String? doorState1,
|
||||
bool? isOpen,
|
||||
// bool? isOpen,
|
||||
Duration? delay,
|
||||
List<ScheduleModel>? schedules, // Add schedules to copyWith
|
||||
}) {
|
||||
@ -110,7 +110,7 @@ class GarageDoorStatusModel {
|
||||
doorControl1: doorControl1 ?? this.doorControl1,
|
||||
voiceControl1: voiceControl1 ?? this.voiceControl1,
|
||||
doorState1: doorState1 ?? this.doorState1,
|
||||
isOpen: isOpen ?? this.isOpen,
|
||||
// isOpen: isOpen ?? this.isOpen,
|
||||
delay: delay ?? this.delay,
|
||||
schedules: schedules ?? this.schedules, // Copy schedules
|
||||
);
|
||||
@ -118,6 +118,6 @@ class GarageDoorStatusModel {
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'GarageDoorStatusModel(uuid: $uuid, switch1: $switch1, countdown1: $countdown1, doorContactState: $doorContactState, trTimeCon: $trTimeCon, countdownAlarm: $countdownAlarm, doorControl1: $doorControl1, voiceControl1: $voiceControl1, doorState1: $doorState1, isOpen: $isOpen, delay: $delay, schedules: $schedules)';
|
||||
return 'GarageDoorStatusModel(uuid: $uuid, switch1: $switch1, countdown1: $countdown1, doorContactState: $doorContactState, trTimeCon: $trTimeCon, countdownAlarm: $countdownAlarm, doorControl1: $doorControl1, voiceControl1: $voiceControl1, doorState1: $doorState1, delay: $delay, schedules: $schedules)';
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/bloc/garage_door_bloc.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/bloc/garage_door_event.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/bloc/garage_door_state.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/models/garage_door_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_view.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/shared/toggle_widget.dart';
|
||||
import 'package:syncrow_web/utils/color_manager.dart';
|
||||
import 'package:syncrow_web/utils/constants/assets.dart';
|
||||
@ -22,22 +20,19 @@ class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Garage Door Control')),
|
||||
body: BlocProvider(
|
||||
create: (context) => GarageDoorBloc(deviceId: deviceId)..add(GarageDoorInitialEvent(deviceId)),
|
||||
child: BlocBuilder<GarageDoorBloc, GarageDoorState>(
|
||||
builder: (context, state) {
|
||||
if (state is GarageDoorLoadingState || state is GarageDoorLoadingNewState) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (state is GarageDoorLoadedState) {
|
||||
return _buildControlView(context, state.status);
|
||||
} else if (state is GarageDoorErrorState) {
|
||||
return Center(child: Text('Error: ${state.message}'));
|
||||
}
|
||||
return const Center(child: Text('Unknown state'));
|
||||
},
|
||||
),
|
||||
return BlocProvider(
|
||||
create: (context) => GarageDoorBloc(deviceId: deviceId)..add(GarageDoorInitialEvent(deviceId)),
|
||||
child: BlocBuilder<GarageDoorBloc, GarageDoorState>(
|
||||
builder: (context, state) {
|
||||
if (state is GarageDoorLoadingState) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (state is GarageDoorLoadedState) {
|
||||
return _buildControlView(context, state.status);
|
||||
} else if (state is GarageDoorErrorState) {
|
||||
return Center(child: Text('Error: ${state.message}'));
|
||||
}
|
||||
return const Center(child: Text('Unknown state'));
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -50,6 +45,7 @@ class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout
|
||||
return GridView(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 50),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: isLarge || isExtraLarge
|
||||
? 3
|
||||
@ -57,25 +53,29 @@ class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout
|
||||
? 2
|
||||
: 1,
|
||||
childAspectRatio: 1.5,
|
||||
mainAxisExtent: 170,
|
||||
crossAxisSpacing: 12,
|
||||
mainAxisSpacing: 12,
|
||||
),
|
||||
children: [
|
||||
IconNameStatusContainer(
|
||||
isFullIcon: true,
|
||||
name: status.doorContactState ? 'Open' : 'Close',
|
||||
icon: Assets.openCloseDoor,
|
||||
isFullIcon: false,
|
||||
name: status.switch1 ? 'Opened' : 'Closed',
|
||||
icon: status.switch1 ? Assets.openedDoor : Assets.closedDoor,
|
||||
onTap: () {
|
||||
context.read<GarageDoorBloc>().add(
|
||||
ToggleGarageDoorEvent(deviceId: status.uuid, isOpen: !status.isOpen, code: 'switch_1'),
|
||||
ToggleGarageDoorEvent(deviceId: status.uuid, isOpen: !status.switch1, code: 'switch_1'),
|
||||
);
|
||||
},
|
||||
status: status.doorContactState,
|
||||
textColor: status.doorContactState ? ColorsManager.red : ColorsManager.blackColor,
|
||||
paddingAmount: 8,
|
||||
status: status.switch1,
|
||||
textColor: ColorsManager.blackColor,
|
||||
//paddingAmount: 6,
|
||||
),
|
||||
GestureDetector(
|
||||
IconNameStatusContainer(
|
||||
onTap: () {
|
||||
context.read<GarageDoorBloc>().add(
|
||||
FetchGarageDoorSchedulesEvent(deviceId: deviceId, category: 'switch_1'),
|
||||
);
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => BlocProvider.value(
|
||||
@ -83,43 +83,18 @@ class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout
|
||||
child: BuildGarageDoorScheduleView(status: status),
|
||||
));
|
||||
},
|
||||
child: DeviceControlsContainer(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
width: 60,
|
||||
height: 60,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: ColorsManager.whiteColors,
|
||||
),
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: ClipOval(
|
||||
child: SvgPicture.asset(
|
||||
Assets.scheduling,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Scheduling',
|
||||
textAlign: TextAlign.center,
|
||||
style: context.textTheme.titleMedium!.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
color: ColorsManager.blackColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
name: 'Scheduling',
|
||||
icon: Assets.acSchedule,
|
||||
status: false,
|
||||
textColor: ColorsManager.blackColor,
|
||||
isFullIcon: false,
|
||||
//paddingAmount: 15,
|
||||
),
|
||||
ToggleWidget(
|
||||
label: '',
|
||||
labelWidget: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
@ -168,9 +143,35 @@ class GarageDoorControlView extends StatelessWidget with HelperResponsiveLayout
|
||||
value: false,
|
||||
code: 'switch_1',
|
||||
deviceId: status.uuid,
|
||||
icon: Assets.acSchedule,
|
||||
icon: Assets.doorDelay,
|
||||
onChange: (value) {},
|
||||
),
|
||||
IconNameStatusContainer(
|
||||
isFullIcon: false,
|
||||
name: 'Records',
|
||||
icon: Assets.records,
|
||||
onTap: () {
|
||||
// context.read<GarageDoorBloc>().add(
|
||||
// (deviceId: status.uuid, isOpen: !status.isOpen, code: 'switch_1'),
|
||||
// );
|
||||
},
|
||||
status: false,
|
||||
textColor: ColorsManager.blackColor,
|
||||
//paddingAmount: 6,
|
||||
),
|
||||
IconNameStatusContainer(
|
||||
isFullIcon: false,
|
||||
name: 'Preferences',
|
||||
icon: Assets.preferences,
|
||||
onTap: () {
|
||||
// context.read<GarageDoorBloc>().add(
|
||||
// (deviceId: status.uuid, isOpen: !status.isOpen, code: 'switch_1'),
|
||||
// );
|
||||
},
|
||||
status: false,
|
||||
textColor: ColorsManager.blackColor,
|
||||
// paddingAmount: 6,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
|
||||
if (state is ScheduleGarageLoadingState) {
|
||||
return const SizedBox(height: 200, child: Center(child: CircularProgressIndicator()));
|
||||
}
|
||||
if (state is GarageDoorLoadedState && state.schedules?.isEmpty == true) {
|
||||
if (state is GarageDoorLoadedState && state.status.schedules == null) {
|
||||
return _buildEmptyState(context);
|
||||
} else if (state is GarageDoorLoadedState) {
|
||||
return Container(
|
||||
@ -110,9 +110,9 @@ class ScheduleGarageTableWidget extends StatelessWidget {
|
||||
border: TableBorder.all(color: ColorsManager.graysColor),
|
||||
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
|
||||
children: [
|
||||
if (state.schedules != null)
|
||||
for (int i = 0; i < state.schedules!.length; i++)
|
||||
_buildScheduleRow(state.schedules![i], i, context, state),
|
||||
if (state.status.schedules != null)
|
||||
for (int i = 0; i < state.status.schedules!.length; i++)
|
||||
_buildScheduleRow(state.status.schedules![i], i, context, state),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -3,10 +3,10 @@ import 'package:syncrow_web/pages/common/buttons/default_button.dart';
|
||||
import 'package:syncrow_web/utils/color_manager.dart';
|
||||
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||
|
||||
class ScheduleModeButtons extends StatelessWidget {
|
||||
class ScheduleGarageModeButtons extends StatelessWidget {
|
||||
final VoidCallback onSave;
|
||||
|
||||
const ScheduleModeButtons({
|
||||
const ScheduleGarageModeButtons({
|
||||
super.key,
|
||||
required this.onSave,
|
||||
});
|
||||
|
@ -6,7 +6,7 @@ import 'package:syncrow_web/pages/device_managment/garage_door/helper/garage_doo
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/models/garage_door_model.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_header.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_managment_ui.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_mode_selector.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/garage_door/widgets/schedule_garage_mode_buttons.dart';
|
||||
|
||||
class BuildGarageDoorScheduleView extends StatefulWidget {
|
||||
const BuildGarageDoorScheduleView({super.key, required this.status});
|
||||
@ -43,8 +43,6 @@ class _BuildScheduleViewState extends State<BuildGarageDoorScheduleView> {
|
||||
children: [
|
||||
const ScheduleGarageHeader(),
|
||||
const SizedBox(height: 20),
|
||||
ScheduleGarageDoorModeSelector(state: state),
|
||||
const SizedBox(height: 20),
|
||||
ScheduleGarageManagementUI(
|
||||
state: state,
|
||||
onAddSchedule: () {
|
||||
@ -52,20 +50,32 @@ class _BuildScheduleViewState extends State<BuildGarageDoorScheduleView> {
|
||||
schedule: null, index: null, isEdit: false);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
ScheduleGarageModeButtons(
|
||||
onSave: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is GarageDoorLoadingState) {
|
||||
return const SizedBox(
|
||||
if (state is ScheduleGarageLoadingState) {
|
||||
return SizedBox(
|
||||
height: 200,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
ScheduleGarageHeader(),
|
||||
SizedBox(
|
||||
const ScheduleGarageHeader(),
|
||||
const SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
const Center(child: CircularProgressIndicator()),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
Center(child: CircularProgressIndicator()),
|
||||
ScheduleGarageModeButtons(
|
||||
onSave: () {},
|
||||
),
|
||||
],
|
||||
));
|
||||
}
|
||||
|
@ -14,8 +14,7 @@ import 'package:syncrow_web/utils/constants/assets.dart';
|
||||
import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
|
||||
|
||||
class MainDoorSensorControlView extends StatelessWidget
|
||||
with HelperResponsiveLayout {
|
||||
class MainDoorSensorControlView extends StatelessWidget with HelperResponsiveLayout {
|
||||
const MainDoorSensorControlView({super.key, required this.device});
|
||||
|
||||
final AllDevicesModel device;
|
||||
@ -23,12 +22,10 @@ class MainDoorSensorControlView extends StatelessWidget
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocProvider(
|
||||
create: (context) => MainDoorSensorBloc()
|
||||
..add(MainDoorSensorFetchDeviceEvent(device.uuid!)),
|
||||
create: (context) => MainDoorSensorBloc()..add(MainDoorSensorFetchDeviceEvent(device.uuid!)),
|
||||
child: BlocBuilder<MainDoorSensorBloc, MainDoorSensorState>(
|
||||
builder: (context, state) {
|
||||
if (state is MainDoorSensorLoadingState ||
|
||||
state is MainDoorSensorReportsLoadingState) {
|
||||
if (state is MainDoorSensorLoadingState || state is MainDoorSensorReportsLoadingState) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (state is MainDoorSensorDeviceStatusLoaded) {
|
||||
return _buildStatusControls(context, state.status);
|
||||
@ -37,15 +34,12 @@ class MainDoorSensorControlView extends StatelessWidget
|
||||
report: state.deviceReport,
|
||||
onRowTap: (index) {},
|
||||
onClose: () {
|
||||
context
|
||||
.read<MainDoorSensorBloc>()
|
||||
.add(MainDoorSensorFetchDeviceEvent(device.uuid!));
|
||||
context.read<MainDoorSensorBloc>().add(MainDoorSensorFetchDeviceEvent(device.uuid!));
|
||||
},
|
||||
hideValueShowDescription: true,
|
||||
mainDoorSensor: true,
|
||||
);
|
||||
} else if (state is MainDoorSensorFailedState ||
|
||||
state is MainDoorSensorBatchFailedState) {
|
||||
} else if (state is MainDoorSensorFailedState || state is MainDoorSensorBatchFailedState) {
|
||||
return const Center(child: Text('Error fetching status'));
|
||||
} else {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
@ -54,8 +48,7 @@ class MainDoorSensorControlView extends StatelessWidget
|
||||
));
|
||||
}
|
||||
|
||||
Widget _buildStatusControls(
|
||||
BuildContext context, MainDoorSensorStatusModel status) {
|
||||
Widget _buildStatusControls(BuildContext context, MainDoorSensorStatusModel status) {
|
||||
final isExtraLarge = isExtraLargeScreenSize(context);
|
||||
final isLarge = isLargeScreenSize(context);
|
||||
final isMedium = isMediumScreenSize(context);
|
||||
@ -80,9 +73,7 @@ class MainDoorSensorControlView extends StatelessWidget
|
||||
icon: Assets.openCloseDoor,
|
||||
onTap: () {},
|
||||
status: status.doorContactState,
|
||||
textColor: status.doorContactState
|
||||
? ColorsManager.red
|
||||
: ColorsManager.blackColor,
|
||||
textColor: status.doorContactState ? ColorsManager.red : ColorsManager.blackColor,
|
||||
paddingAmount: 8,
|
||||
),
|
||||
IconNameStatusContainer(
|
||||
@ -90,9 +81,7 @@ class MainDoorSensorControlView extends StatelessWidget
|
||||
name: 'Open/Close\nRecord',
|
||||
icon: Assets.openCloseRecords,
|
||||
onTap: () {
|
||||
final from = DateTime.now()
|
||||
.subtract(const Duration(days: 30))
|
||||
.millisecondsSinceEpoch;
|
||||
final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
|
||||
final to = DateTime.now().millisecondsSinceEpoch;
|
||||
context.read<MainDoorSensorBloc>().add(
|
||||
MainDoorSensorReportsEvent(
|
||||
@ -161,22 +150,19 @@ class IconNameStatusContainer extends StatelessWidget {
|
||||
),
|
||||
)
|
||||
else
|
||||
Container(
|
||||
width: 60,
|
||||
ClipOval(
|
||||
child: Container(
|
||||
height: 60,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: ColorsManager.whiteColors,
|
||||
width: 60,
|
||||
padding: EdgeInsets.all(paddingAmount ?? 8),
|
||||
color: ColorsManager.whiteColors,
|
||||
child: SvgPicture.asset(
|
||||
icon,
|
||||
width: 35,
|
||||
height: 35,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
//margin: const EdgeInsets.symmetric(horizontal: 4),
|
||||
padding: EdgeInsets.all(paddingAmount ?? 12),
|
||||
child: ClipOval(
|
||||
child: SvgPicture.asset(
|
||||
icon,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
),
|
||||
)),
|
||||
const Spacer(),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 6),
|
||||
|
@ -1,8 +1,5 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:syncrow_web/pages/device_managment/all_devices/helper/route_controls_based_code.dart';
|
||||
|
||||
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
|
||||
import 'package:syncrow_web/utils/color_manager.dart';
|
||||
import 'package:syncrow_web/utils/format_date_time.dart';
|
||||
@ -22,7 +19,7 @@ class DeviceControlDialog extends StatelessWidget with RouteControlsBasedCode {
|
||||
),
|
||||
child: SizedBox(
|
||||
width: 798,
|
||||
// height: context.screenHeight * 0.7,
|
||||
//height: context.screenHeight * 0.7,
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
@ -113,13 +110,9 @@ class DeviceControlDialog extends StatelessWidget with RouteControlsBasedCode {
|
||||
),
|
||||
_buildInfoRow(
|
||||
'Battery Level:',
|
||||
device.batteryLevel != null
|
||||
? '${device.batteryLevel ?? 0}%'
|
||||
: "-",
|
||||
device.batteryLevel != null ? '${device.batteryLevel ?? 0}%' : "-",
|
||||
statusColor: device.batteryLevel != null
|
||||
? (device.batteryLevel! < 20
|
||||
? ColorsManager.red
|
||||
: ColorsManager.green)
|
||||
? (device.batteryLevel! < 20 ? ColorsManager.red : ColorsManager.green)
|
||||
: null,
|
||||
),
|
||||
],
|
||||
|
@ -150,4 +150,9 @@ class Assets {
|
||||
|
||||
//assets/icons/preferences.svg
|
||||
static const String preferences = 'assets/icons/preferences.svg';
|
||||
|
||||
static const String openedDoor = 'assets/icons/opened_door.svg';
|
||||
static const String closedDoor = 'assets/icons/closed_door.svg';
|
||||
static const String doorDelay = 'assets/icons/door_delay.svg';
|
||||
static const String records = 'assets/icons/records.svg';
|
||||
}
|
||||
|
Reference in New Issue
Block a user