From f220d81722adc492fa1a615a50dc07ea02de87ec Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sat, 28 Jun 2025 00:17:58 +0100 Subject: [PATCH] Enhanced UI with new view modes for inventory components, added audit log displays, and improved loading states. Updated configuration for production URLs and removed unused components. Refactored styles for better consistency. --- src/App.css | 29 + src/App.jsx | 289 +++--- src/assets/icons/auditlogicon.afdesign | Bin 41829 -> 41476 bytes src/assets/icons/auditlogicon.min.svg | 2 +- src/assets/icons/auditlogicon.svg | 11 +- src/assets/icons/developericon.afdesign | Bin 0 -> 25009 bytes src/assets/icons/developericon.min.svg | 1 + src/assets/icons/developericon.svg | 8 + src/assets/icons/gridicon.afdesign | Bin 0 -> 33350 bytes src/assets/icons/gridicon.min.svg | 1 + src/assets/icons/gridicon.svg | 18 + src/assets/icons/listicon.afdesign | Bin 0 -> 14644 bytes src/assets/icons/listicon.min.svg | 1 + src/assets/icons/listicon.svg | 9 + src/assets/icons/noteicon.afdesign | Bin 0 -> 34067 bytes src/assets/icons/noteicon.min.svg | 1 + src/assets/icons/noteicon.svg | 8 + src/assets/icons/threedotsicon.afdesign | Bin 0 -> 13280 bytes src/assets/icons/threedotsicon.min.svg | 1 + src/assets/icons/threedotsicon.svg | 13 + .../Dashboard/{common => }/Dashboard.jsx | 6 +- .../Dashboard/Developer/AuthContextDebug.jsx | 105 +++ .../Dashboard/Developer/DeveloperSidebar.jsx | 41 + .../Dashboard/Developer/SessionStorage.jsx | 86 ++ .../Developer/SocketContextDebug.jsx | 77 ++ .../Dashboard/Inventory/FilamentStocks.jsx | 27 +- .../FilamentStocks/FilamentStockInfo.jsx | 492 ++++++---- .../Dashboard/Inventory/InventorySidebar.jsx | 73 ++ .../Dashboard/Inventory/StockEvents.jsx | 42 +- .../DashboardLayout.css => Layout.css} | 0 .../DashboardLayout.jsx => Layout.jsx} | 18 +- .../Dashboard/Management/AuditLogs.jsx | 8 +- .../Management/Filaments/FilamentInfo.jsx | 825 +++++++++-------- .../Management/ManagementSidebar.jsx | 109 +++ .../Dashboard/Management/NoteTypes.jsx | 36 +- .../Management/NoteTypes/NewNoteType.jsx | 10 +- .../Management/NoteTypes/NoteTypeInfo.jsx | 45 +- src/components/Dashboard/Management/Parts.jsx | 26 +- .../Dashboard/Management/Parts/PartInfo.jsx | 759 ++++++++++------ .../Dashboard/Management/Products.jsx | 24 +- .../Management/Products/ProductInfo.jsx | 777 ++++++++++------ .../Dashboard/Management/Settings.jsx | 6 +- src/components/Dashboard/Management/Users.jsx | 381 ++++++++ .../Dashboard/Management/Users/NewUser.jsx | 264 ++++++ .../Dashboard/Management/Users/UserInfo.jsx | 510 +++++++++++ .../Dashboard/Management/Vendors.jsx | 20 +- .../Management/Vendors/VendorInfo.jsx | 618 ++++++++----- .../Dashboard/Production/GCodeFiles.jsx | 64 +- .../Production/GCodeFiles/GCodeFileInfo.jsx | 734 +++++++++------ src/components/Dashboard/Production/Jobs.jsx | 56 +- .../Dashboard/Production/Jobs/JobInfo.jsx | 84 +- .../Dashboard/Production/Printers.jsx | 54 +- .../Production/Printers/ControlPrinter.jsx | 357 ++++---- .../Production/Printers/PrinterInfo.jsx | 856 ++++++++++-------- .../Production/ProductionOverview.jsx | 14 +- .../Production/ProductionSidebar.jsx | 56 ++ .../Dashboard/common/AuditLogTable.jsx | 15 +- .../Dashboard/common/BoolDisplay.jsx | 41 + .../Dashboard/common/DashboardBreadcrumb.jsx | 8 +- .../Dashboard/common/DashboardNavigation.jsx | 34 +- .../Dashboard/common/DashboardNotes.jsx | 749 ++++++++++++--- ...uctionSidebar.jsx => DashboardSidebar.jsx} | 83 +- .../Dashboard/common/DashboardTable.jsx | 159 +++- .../Dashboard/common/FilamentSelect.jsx | 201 +--- .../Dashboard/common/FilamentStockState.jsx | 2 +- .../Dashboard/common/GCodeFileSelect.jsx | 206 +---- src/components/Dashboard/common/IdText.jsx | 266 +++--- .../Dashboard/common/MarkdownDisplay.jsx | 54 +- .../Dashboard/common/NoteTypeSelect.jsx | 92 ++ .../Dashboard/common/Notification.jsx | 114 +++ .../Dashboard/common/NotificationCenter.jsx | 241 +++++ .../Dashboard/common/ObjectSelect.jsx | 476 ++++++++++ .../Dashboard/common/PartSelect.jsx | 161 +--- .../Dashboard/common/PrinterPositionPanel.jsx | 21 +- .../Dashboard/common/PrinterSelect.jsx | 148 +-- .../Dashboard/common/PrinterState.jsx | 4 +- .../common/PrinterTemperaturePanel.jsx | 14 +- .../Dashboard/common/RichTextEditor.jsx | 67 -- .../Dashboard/common/SpotlightTooltip.jsx | 256 ++++++ .../Dashboard/common/StockEventTable.jsx | 4 + .../Dashboard/common/SubJobState.jsx | 10 +- .../Dashboard/common/SubJobsTree.jsx | 2 +- .../Dashboard/common/TimeDisplay.jsx | 10 +- .../Dashboard/common/TypeDisplay.jsx | 0 .../Dashboard/common/VendorSelect.jsx | 1 + .../Dashboard/context/AuthContext.js | 2 +- .../Dashboard/context/NotificationContext.js | 212 +++++ .../Dashboard/context/SpotlightContext.js | 454 +++++++--- src/components/Dashboard/hooks/useViewMode.js | 18 + src/components/Dashboard/utils/Utils.js | 178 ++++ src/components/Icons/DeveloperIcon.jsx | 7 + src/components/Icons/GridIcon.jsx | 7 + src/components/Icons/ListIcon.jsx | 7 + src/components/Icons/NoteIcon.jsx | 7 + src/components/Icons/ThreeDotsIcon.jsx | 7 + src/config.js | 4 +- src/index.css | 4 + 97 files changed, 8650 insertions(+), 3748 deletions(-) create mode 100644 src/assets/icons/developericon.afdesign create mode 100644 src/assets/icons/developericon.min.svg create mode 100644 src/assets/icons/developericon.svg create mode 100644 src/assets/icons/gridicon.afdesign create mode 100644 src/assets/icons/gridicon.min.svg create mode 100644 src/assets/icons/gridicon.svg create mode 100644 src/assets/icons/listicon.afdesign create mode 100644 src/assets/icons/listicon.min.svg create mode 100644 src/assets/icons/listicon.svg create mode 100644 src/assets/icons/noteicon.afdesign create mode 100644 src/assets/icons/noteicon.min.svg create mode 100644 src/assets/icons/noteicon.svg create mode 100644 src/assets/icons/threedotsicon.afdesign create mode 100644 src/assets/icons/threedotsicon.min.svg create mode 100644 src/assets/icons/threedotsicon.svg rename src/components/Dashboard/{common => }/Dashboard.jsx (64%) create mode 100644 src/components/Dashboard/Developer/AuthContextDebug.jsx create mode 100644 src/components/Dashboard/Developer/DeveloperSidebar.jsx create mode 100644 src/components/Dashboard/Developer/SessionStorage.jsx create mode 100644 src/components/Dashboard/Developer/SocketContextDebug.jsx create mode 100644 src/components/Dashboard/Inventory/InventorySidebar.jsx rename src/components/Dashboard/{common/DashboardLayout.css => Layout.css} (100%) rename src/components/Dashboard/{common/DashboardLayout.jsx => Layout.jsx} (69%) create mode 100644 src/components/Dashboard/Management/ManagementSidebar.jsx create mode 100644 src/components/Dashboard/Management/Users.jsx create mode 100644 src/components/Dashboard/Management/Users/NewUser.jsx create mode 100644 src/components/Dashboard/Management/Users/UserInfo.jsx create mode 100644 src/components/Dashboard/Production/ProductionSidebar.jsx create mode 100644 src/components/Dashboard/common/BoolDisplay.jsx rename src/components/Dashboard/common/{ProductionSidebar.jsx => DashboardSidebar.jsx} (50%) create mode 100644 src/components/Dashboard/common/NoteTypeSelect.jsx create mode 100644 src/components/Dashboard/common/Notification.jsx create mode 100644 src/components/Dashboard/common/ObjectSelect.jsx delete mode 100644 src/components/Dashboard/common/RichTextEditor.jsx create mode 100644 src/components/Dashboard/common/SpotlightTooltip.jsx create mode 100644 src/components/Dashboard/common/TypeDisplay.jsx create mode 100644 src/components/Dashboard/context/NotificationContext.js create mode 100644 src/components/Dashboard/hooks/useViewMode.js create mode 100644 src/components/Icons/DeveloperIcon.jsx create mode 100644 src/components/Icons/GridIcon.jsx create mode 100644 src/components/Icons/ListIcon.jsx create mode 100644 src/components/Icons/NoteIcon.jsx create mode 100644 src/components/Icons/ThreeDotsIcon.jsx diff --git a/src/App.css b/src/App.css index af348a5..2c18b4d 100644 --- a/src/App.css +++ b/src/App.css @@ -15,6 +15,10 @@ background-color: transparent !important; } +code { + margin: 0; +} + .App { text-align: center; } @@ -53,3 +57,28 @@ transform: rotate(360deg); } } + +.markdown-display > .ant-space-item *:first-child { + margin-top: 0; +} + +.markdown-display > .ant-space-item *:last-child { + margin-bottom: 0; +} + +.markdown-display > .ant-space-item h1, +.markdown-display > .ant-space-item h2, +.markdown-display > .ant-space-item h3, +.markdown-display > .ant-space-item h4, +.markdown-display > .ant-space-item h5, +.markdown-display > .ant-space-item h6 { + margin-bottom: 0.15em; +} + +.idtext .ant-popover-inner { + padding: 0 !important; +} + +.ant-popover-inner:has(.spotlight-tooltip) { + padding: 0 !important; +} diff --git a/src/App.jsx b/src/App.jsx index 63f8563..43b8132 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -41,7 +41,7 @@ import PartStocks from './components/Dashboard/Inventory/PartStocks.jsx' import StockAudits from './components/Dashboard/Inventory/StockAudits.jsx' import StockAuditInfo from './components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx' -import Dashboard from './components/Dashboard/common/Dashboard' +import Dashboard from './components/Dashboard/Dashboard.jsx' import PrivateRoute from './components/PrivateRoute' import './App.css' import { SocketProvider } from './components/Dashboard/context/SocketContext.js' @@ -59,6 +59,12 @@ import { import AppError from './components/App/AppError' import NoteTypes from './components/Dashboard/Management/NoteTypes.jsx' import NoteTypeInfo from './components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx' +import SessionStorage from './components/Dashboard/Developer/SessionStorage.jsx' +import AuthContextDebug from './components/Dashboard/Developer/AuthContextDebug.jsx' +import SocketContextDebug from './components/Dashboard/Developer/SocketContextDebug.jsx' +import { NotificationProvider } from './components/Dashboard/context/NotificationContext.js' +import Users from './components/Dashboard/Management/Users.jsx' +import UserInfo from './components/Dashboard/Management/Users/UserInfo.jsx' const AppContent = () => { const { themeConfig } = useThemeContext() @@ -67,133 +73,164 @@ const AppContent = () => { - - - - - ( - - )} + + + + + + ( + + )} + /> + } + /> + } />} + > + {/* Production Routes */} + } /> - } - /> - } />} - > - {/* Production Routes */} - } - /> - } /> - } - /> - } - /> - } /> - } /> - } - /> - } - /> - - {/* Inventory Routes */} - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - {/* Management Routes */} - } - /> - } - /> - } /> - } - /> - } /> - } - /> - } /> - } - /> - } - /> - } - /> - } - /> - } /> - } - /> - - } /> - } - /> - - - - + } + /> + } + /> + } /> + } + /> + } + /> + } + /> + + {/* Inventory Routes */} + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + + {/* Management Routes */} + } + /> + } + /> + } /> + } + /> + } + /> + } + /> + } /> + } + /> + } + /> + } + /> + } + /> + } /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + + + } + /> + + + + + diff --git a/src/assets/icons/auditlogicon.afdesign b/src/assets/icons/auditlogicon.afdesign index f0e41b5008194f65bdf1884dd64911b8b04339f8..3c5798de657a458a28f2a296d7e993e68e7a1e3b 100644 GIT binary patch literal 41476 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 diff --git a/src/assets/icons/auditlogicon.min.svg b/src/assets/icons/auditlogicon.min.svg index d604a2a..25975ff 100644 --- a/src/assets/icons/auditlogicon.min.svg +++ b/src/assets/icons/auditlogicon.min.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/icons/auditlogicon.svg b/src/assets/icons/auditlogicon.svg index b2ef6c7..932aee0 100644 --- a/src/assets/icons/auditlogicon.svg +++ b/src/assets/icons/auditlogicon.svg @@ -1,9 +1,12 @@ - - - + + + + + + + - diff --git a/src/assets/icons/developericon.afdesign b/src/assets/icons/developericon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..3169269ed5f2f60d2d5ad2e23fe83d8318220bac GIT binary patch literal 25009 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%0Am*gt0%Q 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 z \ No newline at end of file diff --git a/src/assets/icons/developericon.svg b/src/assets/icons/developericon.svg new file mode 100644 index 0000000..bd293fe --- /dev/null +++ b/src/assets/icons/developericon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/gridicon.afdesign b/src/assets/icons/gridicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..f5e26356e9db32728c0b02e071501bbef6bda509 GIT binary patch literal 33350 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

Oh#wb&8qz3El zhHtnmGo=N}OKnt2l)p@C*UWa&erlXufls>8nwqcj8Ppx)*^eK5D#M=UXTs)RU-{9L z+FKH+nEKYTuv}c~+vuw7MTg9jLFmt@`-je~%S@m5fHj(=D@LD3t?u1hD6moG{kF%7 z6{q9|!p9`0y=>TrH%F>9O|yh(v8mN0+m z0p6hf#ca(Lfui?(`iV=*uKmFU^avYH1-u`Xp7#T@xA*s84oO3P=kXsFMr`6r`ASwL zxoa*WBqwIJYGT{tAnNSYYofDdMXHzc-tw_SZt_sC=|3R&S1gzRQsP!ox}t}{P*sek zg4K;@?hUzRV||n!dDYPml>t}s0uJN)6)h>Qj&vV?$$2;uo>=i3XTU7Ev}#f9>#YM< z0C?#IB9eO|*LA~=7aYRXJC&DMoa+q~jze!yRDaX{BTiFfneG!5yVU+PQS-S^{ zmHj4Msr#xxzJ7I?{@oGS5mvk^)%sbRL*fbKN75K@uUEdMzb3!i_@1!S+1H9VDdz?} zpGORHw&3+u)frx?3&XV0eD*a1=x)D`^hz<^YIiocu>h!z1UZd{7^H-P^0|*U@L4d_ zty-q)4x;Oj>So?P;@eH^_dXliqQ;Z0dK_+`Pues+=;-*j^9KHZ0U$i60T+Es1l{b& zl4S&6GKhHn(ShfPHG`Ym>HK3mMI*gB+w)s zsC*fDoL=N(eS-pbD4_moCY0Hs|Xqoje9Go zxYH=~bWD&#IEOc!!u*wB>)56^=i1?JIMpsy$7<*4_30fEVL*=DEB7bW1L#@=_eO1` z^jqgf^$>47PvaRwUIZvlEVR^^(ITB0?`n+!edZKp96n)%Rn0JPuH&&da*0w-X%2^!NZc5_tB z@BQ;K%p>t!IZC1W$6pvLb zQb!l3Vo}ou_}OCHj4}h*hEwgM6q^CL4n?znPKSy}gmW$fNlR5To*y6;{+g69Ue6nI z7o#5)PKt_%^rvtLC~BcF>#qlu6tf7U=JrBWjSdCMBG(Ahl^?(<8A3pH;`F@R_36LK z&8Flgaf7(j%A*j-KViEG`8|sq`dRU>9NrY_aKMjLL_5^-07lg0{ld8Om0xh4l9_n+<=?$MWH8ktMGVvmd_FzVd+iSlVrX|Ba z)iNUCD-^P@_gP^TGk!l1g7&^*IDKJAw)qAB<=KD$0L%JflJI!PSNQY|dmz157Fpnz z8!a?Qprvdt4145S+a`o}yU&;9J8=5kw1tez9p1B=8oSvnFHec=3Hba3WHL#XQRbUG zz!1yiZGLa6d`_V7T7&V>oxyXyj9*qK!F@|*?_I3pfQV(T&>N7+zrJ_dhmI2tZtcKO z`hUok`VLI^Qo?T7eSwhm9vc5*F;S9Y6|>5MINX*Ls4V3rw7kD8D>Px%6?X((#B7jb57Hd;^tvh6wFN z4h5{uL?q1f+V|l?xPhhXTb?WqbtcaTn2|;-QzwlJnK$14q?y5zTXQc!e!nHt%VI}u zSiG4U3KqXlcRFWl?_k8p>5$Ry7noh&eTbaBPFZxWZkv5+h{`1TT4)>Ef@W2BkZR1& zWS!IF&Rrk93@z|Jwf1bC9iCgg^`Ghb?r@tOZw@uw9$6UEadog|NLgMIG><{|9FIKP=DxugE6LaUfVVY0E}! zHb3zbdQnc59SjiwLuD|E(vAbf;Px^JR~!qPeeGGY;*`>A;_%cSNf%E&xo431WU=^c zKjiJ~YeOq=NjhSTXX+M2R`?N;g4B3cwm$?5~e<@ zLtY0Ll5j=YS&C+ku9-q+dUfIl!dTGs-p5Q-ssA^MDMdFNZj%eK4D#C}(dm~|a%e`Q zRDCT)lN#b3KRuyd`ZW`U1)ad2%kJ5$7EWEBvJ{gy^vmq5rI#_sJWO>GXn*oaX=0f4 z8_II?A=VUi;IdKCZ^O~MWUh{XOwW!>7mYS7x|UkIXUXPrgEGg?^G7od!AjM#iquwV zRpt0C|4j2=l7+qb?$Td+2AyjZJ{~^js|$@_Jyu0JFLu|q8x`AZw5=Q)^@K76s_ld_ zanht%5L&{u1ez^DW-x*yrMI(5E$j^z)mt?~w&37P`5%ykaxS$qh@g_RH6MKYdBE>c6q8}zrubQhrkvKo(4>r;ICawH4_#aP zAasRnsR6#US((a<$guI%)%l=F79|5~sc$4R4qPpo7dgmk zvJZT=BjPT5)v;+UpDoWFH;7;ID=Z`bn)G ziEM6wxWI>3vsyj+Z|izL4K1Ayp&GC7BfTiTXJJ+#pRdUS8crr8rnsF1EDE(~nxenQ z{hfW~X{OE)apY^0V=9NEca#Wtt`*=m6{j{(g_e#5d}O60q%PugyHVbvt5akGMfTnw z7dD%g9}i*4MB~~L8V5=643U-lRcFgXmU475iQaxduQ=I`A9(_Lc7JE*-=H-RR^_4{ zQ><&M=y~r#5t{Hwi``;xCe?@R!Q7g&lgy7a2g9>UZhzs$S;(7&JQtY&f?oyZ#ChI} zAANFY zKw%>|ZhMFvYb*0F2@d=#OSF+S2U7&3!%Cg5d~ypxrBiaWQLCo|o~*Zhsb1U87DSG} z%!M*naCQc3IS?=kVAQJNoYyB zPmTKs?{p{hjgH_!Pt#@NZZh;8&73e+6<%|hV?U@)%@n^0qV7CE3-Mq6&KPla00=gW z_x0zrYN0Q3nRn5ex=9IV0vG{9xJ0*v8-m5$lx_vBMDx*{9~$&OL`L`Q-_L*Bpp8V8of)PO!QqW8%U zurhjH?7PWq4~BVUY-is^)-d=nN@;OHHr&QsG>E)L90ineCm7ILG%t3|^DrP$bDa#C zhJ=wo-0STyu&aD1^U085&ckyU(A6( z@gO*BTp_>a3H*V^VxHys;+X9djgV6}zH;L_lly7n6C7`P0N5wAKVS zl&aDVLE`%nJUg;)cr+XofF_o{Oaxj8j@|<*m(TJAW!d^RIv-J%zdjYvi5Xsv)rsV? z3Gw3G(FgTG*<`}QzXO`fvlZC5iEkbyH)aiA0FN`ERO?*H8V(RfsM>&Pcv`irP^Jm~ zyKOnv4*fer+gi^Iu*CE2C<{lt;mF1F%|eRKt5ojb(Qg@c!GQypBJlZpITyfS>R~i$ zyo9>L&2tA#ohZ)&#^ar(jJ;^z%aSYE{4N-crM@S{Sqd&wGh5>JMHUtP~+d+J$o_-k`hkbCdXBPwQR(jon$N=)YL;*HrL6Zz3P zjcYZ+|24=wywBnwkAGxF{j+M2pWltPHw@_!o@EY5%Ujo}2`<|NEPAd9PjB2F6*x9_ zO6mWl1_a_7siAY%w+?m!hwnGS(CX$=UAubyqqSg%k9D0Heh$=a6lP~>fYe!fnD0OQ zpOt3?q^(R!illFdRjsU=9fqNwJc6IEGXt>P?C&$qHvYW{m27P`UwTCHOmc)`b6@?D zAFF;(FmCSIx|x&N{fGLE>?>7bx!n8Mj@NZAv~Xc5r7?#_$(GsEQmLRXoPmEQ%yT}T zI+N(Q#}!^*qj#b1P^VtTdM=$S%Axs8>`S-q^Eu+&S!eDy^|xoP@8dD_C3}zghljDjFxSAVWB2x z$j?5xL2XSj&V$�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 \ No newline at end of file diff --git a/src/assets/icons/gridicon.svg b/src/assets/icons/gridicon.svg new file mode 100644 index 0000000..e64bb4f --- /dev/null +++ b/src/assets/icons/gridicon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/listicon.afdesign b/src/assets/icons/listicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..ec500f950aad5dc87b68c9d95d7885800429f477 GIT binary patch literal 14644 zcmdVBXH*kW*ET!}gkGdb?@f_j6{JcPM0$}HI!H$Zr3XQZbOfY`fJ#x2-USns-faW{ z0R;i+MFfXXsAgI0Dyn+Jrlv3{vOoq z&;?Y&{(F4S_Mhwj{a)a(@j5?;|Mz2ZFW^22bS|iS*Y|RZ6amoB?E_9z9~+th_6$K6 z01`W6ngQ+AF7#ieH8l?^7eez<$>6aYS*O;;WQ`^1OZwR~&WU4^3|7LURkf2;+V5&8 ze!Qjr^w{}=mYjkU@^$cWR9SU~dFz1h4tQO{k1TVRI;_QPY;BXQ^)IYG28==)C1`77uf}~vk`^!&=N*3I6QtSm z>*Xtid*8o58YhA6s1ifNH;<`UCux`-Ci5j|(OZsImBn9_uxK{@J>y*nqI%zz_zYi^-g3QJimTX@zBVSNP6wG zqF-=*Z0F*#nRaQz!K7Q7Q~eQG;LWx6&R$DoU7{-95{ zZ;ka!J{|bS(0822EzO-u2evE=A>O z@8_mx8#VZei(tt7cXXcL6QSEh@&* zSN@a$q`iZ8^H!*Rwf zUHh){#X_eN7{)>Bu;M>$gjVQgOzQc~Jjw%|cuwKHarUj?q1U47yeZ`+v^lwzgo}x( z^)VCCNqGj_Qxs35SdhXgoWjnZ`>_KSh1HXnf}j6t<%OP$F?BUMrFR9hT^(;vqstOm z!c1@2Y8aK%YR{A=%4fQyE|(&%WY#kx82M!Gx5lr(4$~}Ckbmmw;rqoOe7t8OEJ`Fi zW7bZJQDqh{|M(TQvU^*}Dsb&`M`^yzZOO}GlI1MSx!HFS#3%C1N61DnT+1N;c3N?9aYNFm z_zBKJ)>^;+{!HLdl7i5OThq*Zg;S!E1$A|J&W-7uobqw)d_AJ(jY?Mv14*rzvrR6dw*I?UEk@0_Q zbS~fhGHA9>^8M{-PM=G8Owt8a=a&nnDdH~SL^hE-lm}-exue>uV6E;YlZhj{mwm6L z#1gdMBl|hCy-r1B8-kanW9*#ntS7bnNF7HuhP~yOk;tnM=`=2oV8=c4ecO-_3cgV` z3~5DXi4TE!huV#s#Oy6npYPjXfQVJGCitYB?ZW4RJmCvBpTy9Z3K9a;i9RnF|+&InCXII*wrQLZm~ z;e-)J_Y$N@zps0$sTh#OHq)!on&?pIb`<5pyF@-{*AB9cW4d5 zUVc|W%H2;b&$(nf_O+-?Fh6^W^>1%-g6L(XWlJ9q4^N|;rm~N3p7aFPXlaY2i3>Y7 z?DeaY+I$$*2A}A3tt-{IWYzT_^TOi+&)vzoey=Q@QOi*aChLmAC-PsVgd1;P;w=2D zmqr#YZmfUH3qFB05XuvkCIyA-g^w@;Yow}wVRAzm8O%Jqyo=b=WBp%Q9|a#L*32=) zm5Hj19tc;zsreUVHc}{~`_aVrcKBqzYsahSKTvM&5{7Pf+(QPa`$B zr-~2du!=t>Qw_-RqTND}#A@(O4&BVK4IWRu?jp_X_M*|?X<1#)8B{$mkPJ6t>hq}a zkkCo)G0Dlz&AFJ%%*y&q^1OLHTZeORQdUk5ce8Ec^M6S_Cc8dc&^Hg?g|($6?LTDc zoYypj!oy1g5zDX1vkZ!UY}UhyU#I3i-_jrBULK|7G!CEM)E~R&LBb)X^lHpEbb9yr zn5`IN@2KtXSo@4KOFJNXFd>u2ue|XifAAL)5t8C-Jygoi|4F;cFVj?IYdZ>#dGs!| z(P>!yx&(z=>^k21$An$fPZ`Uaxwj@YbBkhJ9a19mLVI9?tt9)-ri$~9xG6W-Ivk#$ zPdEMJyfEBd+A#lo%1-w9WBV31{)RIsIs!R__YGyzi%dv&>wC&6SwVlrYi^!Z%2`V^ z*Ij#64(5$}{mlZK3cO6}@JMmwo7)?fX~%9)WjjDhanx%V+A3|<_QvKTuB+2%Ul zb~F%Hi|q?Qom)qp_weZnYk+;r z9(d>Y@@ke-*LcN6@#Z%|&U5H@_jReeIefN`*lSYMqWU1A@~6#C;Yj#wYp^*;F{wyBuw^kXbX zXtbZG*lT5rLtXsSVJl$d7Ik)EDuoL_%1 z`UZJ=Ek>h^F8<^M#anmFE}Csnf^ju$ldIw*^rB>XA%*h1W;E&EHI2sE?vbwCWygkH zO}A8IZf?kDhtGev@w2K3naXv(#W6!jT>DE!pxCt%WtcENy(x0Xh&}eeC;NLILxA1o zZQdGz%MYIP3xCSeua~Up5@#o7h~HZo7=}^O9=j`iCW=+a%aT!18E#dDU6xV%GA0>v% zJ*CAh$QFM;2zbY0ba*B#fxUTfW@mV@nup2C@9a_$HTT$drhMNv@2|)V$nqY9Dk5b#hxQJdrt<6Tn(G#d<+01-T%1b|uKW7Gb{S(|t~16zi-gG_ya+ z@p*od!(*MMo6w5P6_D*UBO;I_~DF`zXd63|GC5 z84zzSqIPNuVqNga3k(|UyKD+zFrCM`C5aI z^>8=|sBvv05HBa^5P9p>&ERd?OyW7XPbOInr<4LqR|p~wiyvvPU^KJgTtb)8o;lh& z{p*RatM>vkdjaxfMtO{;ED4v;CG>@=MqQ?@k(aqH>Aq-j+c*D8W{`Q*%%DzVp;cDvyBKqf(m-QZgEE&jmUo5irrD-e(b1WL zn@uh{$${GTzgHKmwC$@Wt8blHi^Vj}9`j=WyruBOIqnBQan1(cr?*ZSKcTj;dxqd3qgp|`O2tjcp`{r9xsc6jb zUc$9VAX!KrmYBuiuj`qKVGK)xQwd1V{QeqO5htPcO7a$rvV=#T+gH=IIgV4lG~R@i zOqZu!lf-~R$H_@3QM_?bAVs{9t(*VSdGYK`un}iT>C?UId#AaYHj9I zs4(^EQ!1SoQz54WPpeG5*SRai*FOzjZYInb)IICCC-!edk3{JkMvD|XigEkcIdP>R z`5wKXhq(D=2r-KdHW8jQe>vlQr!O`p>ERw;2G+624YU0^vzBvp>!KuhQ|DD?<@RNd zCfg;bB>$9kQw>TH{yJv_z%Ss=|h;YfQW6nv@l<-S$1xGhdfn4PWd z*%OgA(F5|-*=PrmtV3i%Nb==sl12h&ktNgg>7`Gdm^;;+DkEm{2@;ql@xBXWCbZI# zn$#Qz+SSLOcHtS4fzGp!SdMa4Q;Pq&JG(lSEmLtP_2=~H?higwiNK-m2=OFmo9xAQVd>L=!~H|F+6Gp6?0Jn^j)c1kwm>UgG+wW*{KQ{4qgu z`sTaLC&jM?p9_%QxU6#=H%abHe`K1SNlxED!hhdHa8&aGKiyFb-$%|(P*u?PCn3_>jWCNrXOw@KO*S)ac|%gU8LB1o(Nn> zUWlP^K{v$}1fqlA!jLgH{iC6e!uD2@8 z*NH96wD)zzYyZE*5z;$Mzcq6|1jO9G^p|a zFCZ^D*ti`~dYlC|6YlWdsZgE;p|N7GtM7wz8R9-|*Oui!5{jyI1-0Ci3!|Bsp4s?- zD@2)ITQSIK*}Gf>JvSJA-bI+Y=zu!5PgVwr?rYxP3CX@mU%LEVRV--Rte?pHyK37G zbsN!)ER!1v5C2i>w|Lo(F0j7Gxzq^ja5cG{I?HBGxuoc!@N!P3ii5pPro3_4s?6JM zuJA@cKcPsrnq662Gvm6pYKGkeiRau4C*g~@C<*C*@cx?GpOiAl{8LQ4^Li8EWADQi zG!r$`Qo&E&8MWQsbr)?=T&j<8tP$>duP%}0gs3I2ozeA+JYml6gUe-H08La`S&S*i z>HgWPI=PjTtN$R>K->z+lcP5>dRMZAv+HpI8wnoBng}$#xaOTZJSXZfEic83HhDjd zn_?RqA#f8dlP-S%$`{i7({z5r5Ho}n81^3o&NN&3X2J3=G>igS`mdX3s(NlSC5e0L zVnND2Tc*$A5c`(Y{pcv?iikJigL6Wc;|i{DTnR=p7Gl;@gs;;A^`$l9@3*i}HOODD zPQyfH7~*|Lu77X`*9CEnWBVSo(jYkiO61gH5Cd5AE*g}uL%ca$%Una8h+sJC6 zxgWi#j=!({q@OvCvFf8U_a`owel|D>KqAQZ4rrvwG^LU4A6H@2h-J&ym!Z3%8J8*> z5B!gY1{(xOD7=9FoAYss6=9n4F1OZorP2qoW!8`4iv%kqzESK;_~-wAJmvZskb7RO zFoE|eY**%aDzE&){)Rn{i%N5|S z=Gwdu`{bn1Sa8}BH}4CI3p=LntE^8IYW4OGeJQKodh1S<8c5j{>y5RdyPP@NvFg-Sf1BKL z-mZrcr>$cT=;1}czua8v(@H_JE8Z@)yXybmmpKQH^z0VK?vuKr$fdahG+bAP%I z6J8=Zm9%YAmJ{=}Hs?+j3XRA~8nn6p5zbU>Zvr9K*WOA<|LjyNy@5({O^6!i9l9w* ztw2q&JlK3%{g^tG%X4a}e&Xt-z+f3p;l+nHeCCrxZZ=eEd^`Df*+#!1>ig!UkaFx+ z)kNC1m&qXq(d5N5N|WK9CVvYb(USDs@JA<|ik{it0&p3#loL%M^#d;N2Xpu}?Gd&o zm3eO_FgKrPCbQ17edHAD;w}&ktQqxY2pPFH@CfS?BY9>0x1jK2iuE^a&oZy{w1^+3 zKOE&Z3DM;EcF1(=&L_G-fyYY4ujE=U; z=~jmso|x~e*zB@~r%laYZA;Z>tTNeeeesuz;q7rY-^-AzbLGWit*laFAah&rLz?O24Aa)CR^&LS4`?caP9Efq}uUc3d5cS=DMF*0$( zgl<@D@4HT-q1oRR>H{0X#b>s*mer{8MJ=}%vL^2QGwh##eJs-HRAe_g)MlYO5j?n5 z+urE|Q?F~N{ez#@nk({ip}I&l_c2EOMma_9;;K&<$9M+m)Kut z(^?dm6=A1TuKote)BulO8`MoLP)$U52cNO)?TXSD%z9?k7w|FZ*=xZERvaWZ){3e4 zsw2zItZ0OjtYfhE6d&m^3j`qP8;T`KQ76AU*eX^VeyX;Rz2+7!7C+tAxJito@2v+| z>=zedBz!uiZu#q*fzOxC6JFnas}@YZDdzhsPGdItuFODHfO+$gy0k&fvBzE^7k^J) zV7oBi1heQoWt$*J*)0X3JzNAIkT9P`YmsOI3pdT#9~6>fRbg_@JnK z;nLb)j<@EDIbgaTWEn5nlnT?D1-BH1mmXD4X}xFt{)NXayn4(_@3H!nd&_=`wvnpC`SXQxiH@`_hi{SPDW8uI2Vzi=wg z_b-gUeahn6$a+UjGI9D(q1)GQ2rBvL(wsk5S(_RWJT!cwi*C7h^xqVy%|$zGEtum% zquo5qO<$Ki0*E_9!Y2{W5fM_~a)0t0797}Id`_0_7+pm+MlD=OYCFr&_1&`^tGp6% zfr+Z`$#T|5d@cHF*+D2OR;lvijQm#pNN1nD6jmUl%-)NFR`Hq^@5)JBMmf`nIU==3 z4QF=clQ~`TqxoL3#$^7aYn>OGEy!mNjMmG(WLi41=suhhs`J(g zi6RHw0$e5CobR9aXyN7Oa^AF>7XY~b+xi7`4ofz&E1sPQH z@8P#o=s+2$eY{B_Iv zM_x@7Pj-+j& z5k`wSa)D-8hhxT7^{WGS4wMImhVcV?owk!!RDe_bk?4o?%A|+l*iaRnUaeKat1$(2 zG$Bl{7zeuItAOSnB@%oXyJs=JDHs1VpDFp(c()LMV(_ky@voJVLF^@tweQSfeY)#P z9O4M|i@Y+5u%tEhGEc;!ih!iR?|Z?1J5s~gZ&{Y8rTwr&M>v3?@LP=Wcl6XiM4A0XZJgdB^n&VLj|c6LMz7B?g+;Y!%Q-SOSw z{e&nbGVnQb#(uo(GA$TVo&0J!F9PSur=;0(o`w6!m9}i5fO;Rl-3bix{qY~{x5bhm>4+cy9>w?) zw<1P^Bwgr;*E9SCD}hFMAp6KY;%YuTDt(~{i{0y_H1Q+LNx2+Oi`rMG0Ycwxc^4Uj zQh(H3?i|G=iPFsvZ1`;|9HVn~eB!_fUxu?0U2DJ_o|$qSo#Kv}*u#w-UTJM3ouXnx zwPjcD%Q<1UQ789HdO(%Dcd=3~5iOl+gHz*=v{>4ATxm5#fRL6L&VL(+vZoPe8)~4R zCoS~qw_q9}4w&FkdW_$z(#m`$l%iFO54Cp;3V*GXl<)T;v&Qz}jw%7{W`EWYosO9? z|A3*#s1b6PPzNDt0b96la%4QN{-XAkq@mtOb3g&+g*)}cp*v@If%&EwTu&1ZsYM&! zT?)l<7U24VNZR^#{z-H;yQUZ&Dc7}j=B4&m? z(8iam09bY=D;WB=DMA7U(GW>si`;MM2Nl$!Az$#WH;a(Ab$XMej!C@)T~AFqj`6h93Gb+VuE zPQECj0eHtULSfAVr1VkxJeIIQbxE*PWqwzrVqBNuU>*EAhHdd<5L1N%*Mz!lrqq}{ zeMgTUGJU;?deBfq!F3BVQBK+8Ro){7sKI~?L55+ZHEC7GQ~M;~aAuwa6LDZxD>WA3 zw}?*ryIWFMw70qv-gJV)L*`e^SpcZ??+>ZtIac4q_)+&BjN#lyKDCl$FVbW9AKqd2 zgJ+51!bYeu+0B-Qf7st=s!N`4d>Yta1tp>Yhj?gH- zi@+2ZstAEIqNrQvyO)#P7UtFTJbY%sRNR=VYcA4(m=#j{>IDU7;yj|sRM~Gi{VucK^x2(0kjyLES)4Q=^`6Q>XM4}AI-%}0yj8(yr8{drg4uT9X8cHqrvz1DQ-dFcZ}d~P!Su`*R?BE z{c9`dShEC?3B4jvr~-_i+bKB^=y2Lqu5c<@Y7YB(MCnBiq&Bt=pe0dA&Z{!21Z44`IbY zl7?UyD3MnT(tUvMe(S2m^9MU4InU}`9a%GB;LDB`c?~kc(SIUiT*0zta1guavWJ_EEn5;`x;)eldHtS*9U1<;L|w#^ z^T;Z1FSAB3*V%!3wOZM#OA_8ja(l$bpTVB9gKn`scnk)-x2kN5z|PILDb6s)IPlrD z;SVcVL;b&f-EXx#?QV?X_LO-?G8puuYn-%{TY&*UIrvonXn9LuK2QPuM$@9#H}Gr5 z{NHc_c`)=(zj`@AEbz^z+K6I3!n46%-gMP?+eOXvJo2hRHgW1G0xVe9W;8@`{&Gw+ z0EkaIFH6^*l$>0s8#!%h(+IeN;Q#>L!DEZK=wkT8B=-liiTfdUzGRFa8g(U-^0}~| zZFmnWTW0Q*^ljWFNdaJN@38Z2s+*NowZYNo@g;Q8)KNe&@XegK|6!}hJ}$-z(fUph z!YJXY#M$|)N{=1HfDlt8p=O>i-(?A(q&^EP5zcFkH4!0gVOrc9Rs}X~-^-#M-j!IQ zlxMont^j+=yI7puqFxsr(GQCb<%dK?=-0MlHt@5dl+71Wrv(AORY^yV9#k10_;7>! z8(d_h7_}BnbX0&}xYH~%rs!b?>_AVIG#p6{;9HNhLI2j%|3%gRkAl#Er8Vxexp{&q zdpEXw=jRa*a8~IU{k!{_?35$!LmTdgR`E8Tyk9mS*B``wsTl9*a-moZ*fitpjff>G z3A|9m9ubxDD0^C$o!Z;<0fEyVwK)9H3hwQz57tjnEs)W*vUK_E#>}Nw-a{^o)Kv?r zN7T*B!m5l955qYaJQ;#MbhP3s8*cH1;~?~*Fp1md75wciw|yN~KN0{8S|G`#NNY``uTo?a_ylC|lT|5-}y85w($Y%*;?yw4ozj zN#iY>dESbBt)vjo^*~1Tb*nK^!L+Kx5)0o{rDV$md}jw@7!M+eVZq%=e}~Yl$1#eq zdNRns9Dff`YDik`I7qoTvIe3%rlxb>leQi*OcyXvYP|o5{)vrYAt({Uw{nRa%$ONE z`1w{S|GB#0xU+O<5vqon@9k1^+B&^ZhbQ|sv2d4B`U=d8755#VVng=Ncu#o{s}r+z z19Jj1p;Z}qA$eEJA!0!zYd%s%tvkX@QMsE<+Y3H=s z;P;IKRR}c4o+%4NOD(mn99q^~g$;89vxUI_z|^f%?ELC&REvj38^hkJhnvoONw!h% zup_#p{f_Hb!)YP6I3la2*Sny&v{Sqh@^2P~P0;L~LNh|{Vy0E2PV$1U9pHHr6j>47 zQan~4cuv~X^w->O!v>*=S1WRQ347>dQ*1fBRTXAPgk|MdKT&BPH)NAk8V z0P-$AC8)^ZI(P7v2;CJ}RRq2Xo=GhbopN#)EMeF~jps zHn&vr__`=aWd17O6MW$KLPFXt1;3^MC?QPRZbYVwQrd80qFBRDF`{aTWmVn!f8Bn3Kp%p^!Vq(J{{yWL-qr12&cC*qJuQ0sxLL*7OauEUL?^rPl)g zDuBilWzjTZoh4`Ap+50r?EP}oQ zexcz5HD4uA`}>dsIER4_X&Hw}i%a=Mh^Q1S0Uqkl>jQ+R0JDzZC!z-M@RE1r=p|5D zVwd?q3HIs15aipvuP^#8Ma-wF2zG4kk^{V^Qfd&tU_!b~?0q)B3Yg62Y<4FDJ^ zedv!Y(R@%h|KCb4ZC=!~u|YvvURO2jHNEY-D#;y8X3@Mrq&5UB58N;VY+Ss0E%4~{ zzt1Mj(;D0MuwxUEsT~C8tyEG7xAGhxTre*MdCVh6_k=4HF>Nw^;}8amjnfChW1Nl@ ziHzp;b=?`Wtx3=;{X?=JHA+9Y;F6xT;PRwk!Sy!q;(f_KUWhK&5Mr(WcutvTNxDb| zLoYFhevqAagJd5&27wMEfUXv90zw-}(nakXU&)!2OBjzVG{h~EdubU+mpiaQQB)$^ zKUCKQ6~;*1Sn+Ko!Xx>dPwIWYorR?eGXm7K5sUmQG?lbORv83X7Q+X0F&)B`mRubK zAM8?UXrtkQ90xDaG(>Behgl@h&Dn}UbZ-|~>1`NIbtc4pFb<=}5NnM2;I87Qwt6|w zldrAL?z*}dJD?oib6jpei;s+AI(QmQb`}mQtZ)MlWN;+c1|5JOA#?ai)c6@dO^O7|kg<(MIH?reXN5B1pxej!45}1|*ieY1PdQ0}gsTX^WU{x^H zk~6^-agl|MLz?#aGslqU@;IMd7_^;Vb)7l6ZEmDh=0C!t6_+wr)J8xhiAgJfP6Sq! z0%R27kmr%yqQ?kAt6{gO5fj5vj>fKZ{|3bVwlKNO59+9 z{M^GzT`9PVWZl6{^`|Ju>%G1#_Z!@w_i^n8f5QUO!@=xQV;ckcBo71J49}k9!I`e{ zT#(+KYncNz8oypf9!95uUxp~8`7KI~^pTbDi{|jaF83;EH{amgomCE<1>idjl+gjp~KKE^1td_HYPIcCwM1b-=&cV9z}52oa6c%)PC!KjFM1 zsCiC^a2|$8oV4BS?-2qD-u+`)|1+mc{Op$uDpwd_R%K<6)%)gdx04Z-A?r`gq{Pg$ zr??w~bz>XK0}Gt&Yi)kQbLX-^E1~g(d@2N{bTN=;q$v}c9pvcdKcb6(WrCkLE9Lyv zx)PTRU131oj0v@r504<*wjIx~@vm;r5WTr}NPbTG^c6z=ir`+Wr@?keheaIQ$USi0 z?iX4IZo+D+(syrT-teHamVfYWT#F9s+>O44cJ!;;0d3Sk@Rj$pM6F@G`jV;zkY0#e z$Nmc!@nr1@#Ur;600bF%oo2aVQZf(F4x9?d*ef5Uo&w)0DD`9rp8pEPmQPXkoS9>& z^{3IZfW9CfpnLZ{u?5%R@lFwZgFRhd5CPEVsC54>dh4addx}nsva0P?N9;ln?or~x{=o@s$iCR9|czb9oDr#y#NCBeJ;O_R`gE983A@2(skbvEe}pPEZn7qLf9&Gl6w7+7$&z)2>!?P`0C*lrG}IfuTJmHTRp_ra-4(H zr7L1r$D%lQBX+j>?5qK^>xfKau#zE&hr!eRdH;rJtg-{No15JU;UF6WeNoolWpqXH zTcUd=K|bBG`Ozy7e$A?5#3dO^k$nL3X$9=gwHf8$esU z>DBWc^%T)Hq;J2wI1}pWxFzHRDcDC#u48Wj`(dh-h{u#o|!?j3{x7lJAR1B)W4$YB&Siq1RjQ~GL|I%h4@tGABKFD7x!1EM6|EVG{WnrMptD8 z)Sm6x1(zJ0h0G$0wf=^X_#z>=+u{I*I{-UHdnVffg1>#VBY)USxorDAO@TLsnQXCU z`jCWryCL{WjyIx-P5JP%%A{je0pb)pws_~wt5CST4H&0*u+@j=f_iPfp4UIC5t}rU0l-fs>hjYFoBsctSQOpOHaD)0CS4>yF`HWuNkWL z4@8!c#Tc&OU35l=vx$7kj}K@j{B7VK|H3K+i(|BVq1X|l*9-dAmbl(g_1eiODj@*^ z%Ew1M>!a;Ej)sZskcMW!vM<;4Qrg#V7K)pY(5v`iLPqt^>hqY}h~*X$pgTeRks73V zkZrXDF^(LVGF@V=9f-h1C>*mo8Kc&`4 z0xz$_4?DxrTmBK;=HjCgkECRbX|+cwF<_xX0DycP&PmwB@3+WVuTDC351 z_#}k90x4z|k>5p8)iy8wJ!lRqHYP5(K>tKAzEw@H5doN}{;K1l+?3`8)E+sCkIXCn zm?5gHuwbNQ#_*n%m{89-O$#8r5;mpY`tx9cXPX4z{cIZAq$=Phwf&j>L+)3gM_jX@tu4LevS zDTK+sOKh<(%0XDZQTfHj?}WaA&lgcGg0VQo0T{5Ok4HW40fp5jIZ$Y2PznYtzS>ab zTeZR{BcvnK=F}>H@QbKOKPcIRexi5`xz<*!!#%A+YF{_IPcyUE27<*$cn;gOf#WLg z(UEBzSGTmZ7SqY`G$_kKNZoPy@uSKLE~&Wilv+Rt21HtHIje6SvzX%-W^Gv`3=ZrvxJQmQ#=Oh)L_isd z`d~pZKxyD}5xlBL9nVMaun7PGzVG0fdkyb^$RtSKgjH1{9OEG_mr>V7#<#SDedqvd z&meIiZC6BO;yHt_Y7k?mpfP3-&Gm%v-xAjk-I2-zRO?8DE8HVNv>QvP9m!45;7v@ zBaMq$s-Up7V?V)p%^OlOFSk67iYN)j)61xnV)3^CVygRMKnXFx)sbA z7^Rlgrke4pYhgUgt-_*+cNxv=ccKQcy-}-aRXv;CZu5&P36LQtiW5L~NP9hd(Rm?I zUmX=y153&WpEl-XA#q%FtNPonw&a19AJo9LS7SKttFJ_4D_{T{|B@Z&`+MIW@BEm@ zDdt`OMVyoM|9yA@KtlU&eV9W8{JDRvPmlW3_>G4Sh$>-lKIn;GE)>+>Ja~lcZjHdt z?kQAgfbM_7IS)Ex6K!hw&zGlUU+%c1w~MFL2$+#Iu-hKIMBL;ysbq8fefSj(Ei^+o z{kxFmk2u>SkfW{*{~d!Iz}Xl}(g{E#Hat?W8?MCB%xo#go*DZ!l^lhCjs$PYor6vj z?`_D=<`r=G)r}gu<$18Pz25PGzXd$gJB+AQfpRD!jmmJJj82YD=?#!EqP8Ds z7A(c`E?zrtZ;l0;zi-%+Oo|cO#$sAq@IPk-a9NZX!&Nn~30h%0(gXEY$(QZPcQu_L zIU!XEX2W?7FV~Ea*u4uQIx&Yc+cbkXpEh)hkW&(bb!{hPCMK{{8WLceF~ot|$ZG|Q zU@g?}4FOGHx}{Ydoa-7V5Fe<^Oq~(}IIk;&Q$d*^fx*(l^)sd$iW_NpFMXzQb0_8z(F*>wP)5A@IlaE>}HSR9XWrzYaxxE z-Vf;R0G)4Q22o+n_ZIBh+qSyrH%<$>KgB}%w|RaIb!7;GqK|gAChqP$@Ib \ No newline at end of file diff --git a/src/assets/icons/listicon.svg b/src/assets/icons/listicon.svg new file mode 100644 index 0000000..344c644 --- /dev/null +++ b/src/assets/icons/listicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/icons/noteicon.afdesign b/src/assets/icons/noteicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..ac70b3329d95ca7e9516e76c503f47b5ff662e0d GIT binary patch literal 34067 zcmeGDRa9J0&^HS283uQk;I6?5?!g^`CO~ivP6##w1os385HxsjjUWR-gS#haf?I-x zv5)`rKJUeMajwqoskOSRyH{8D-o0v9SJ$sMfYDVU1n__t0sclD+Amye9{~SD8FHV%_sPiLClKeJb7;7G@wN-2047b%OJp%eQb-q zo-rjOI$A!w+T8AH>+kQLS`TSM~uOo#2 zAu}m6KhNZ^#}%>hOBB(zq*;&zGG71-Can1M8_oGIL^GDzKg+MQ)GUnm9T^F4Yr=oj z4934)jZ(wbT;BKS0#CXJ>kzrP$9<8FXRnl9WO$vVe&mp{7T`sZWn#1kf;@hwT+X^Xrl~k zYWrga55cWLLXsby?E_mNLuF&I$njZ+bh**D2eM?Z3xI)=%RyQx6Ecw4cQBs&=VrL# zCObZp-sX1f3fP4(SIEA@cLiV?l~cf)*^%`;DBs^4pPS_iqs-GZ) zLs<3UdboM5Lkak)gmyKTlsBhq51G?g5Dp!&3s>w@PhpJfA(yAblwMvd59+HyB6kZ~)D5lvH zCFP@FKaxQNgp6{}yDB-V@xUo&K!`|$T)A|NHjVXhPBpLbbJ>3K&m|x-p^#4~q3?jp zd~6zV@LN7&d4qZ1*Hjy0>1k|kO?{p^Y;1TUCZNsdYvo`V!B?Ygbyw>ONX-+FhMUC- zUO$nJv+uXgit?tv{Zzbk-+C&k`EaTB+3*SUSPtg5%3kNh+~Q`$FrnUmCw!B=ev!06 z?yGdEHTvgeGZYPB(~=*HDULI1or1!n=C06_T`ONqs_&M zab-#xFMD2?L{fxPOX?d`h;Qvfr>|%9vIw1jf5xN|_lfPQibR}X)ZFg6KAOE0zq5$q zz_-TEVISl74NokW^&fAof)k>SA!*0Pc$g7S(@CiT5wcQh)pgUx( z35&;{cL{D$gbK%+;>MH6M_GA0(Ek~|V}nf34pWL+B2=5(+aOe$FCUmwef0w^ab1?j zYeAt#L}Tz6HMJ~!frMt#PC!0w(2O3TRS@@2Xu~=AF4NfkyXN}^)t6PN^mmqm#NMUj z@+W5@YTwY#$H{K4Y1W*2G@;>nb;j=awHiIDMXwr66bqdu+z@JcukL6cZXN=YeLUzX(_P)v6)0~O9LStZkj|uNtNN~C*ls{42ds@~93SUy zW4~O1I-5%sQg^C)e`WC6E1aCEv)2DY$56Mv(H!>;t$)37HuU-*^8D{#HRjAhZcMSx zZ=KQ$H<_mrj{5X=JjY37`bX3+_Xu}!zU%mR$}Z&36xp}CT(XQBh!#^!#n-JSYb5Sj zN&b24=;~DC)t21$Pr6CZj&o-0A|X^pCb)EK+>MqY=`pf%`c&^+xtYGmiC-d)T6cnJ3{ zhr~)B4hkh)pO!-V`cV|=OU-JnmG*2jP%Jd6&GK>u-Cw)G! z8$OtwoSZaB)hBx}FEL6bGlq%Jj5D8AA`DsxM?Y(~IBZ2#8d#E~>lZdLp5~j*2}l{f zzf3xL6iDul`sB4g>h5<&L_v-$Cil$W#gG*)WMSz1&EKF?Yw(SyF_xwxZ%=5;yN94T zC|bs`cj**VWN9shZ!zyFNk*Iezq^Q|H47NHwGOnyzMIclSMq)NqdG@TpO&PpcBCCP zVIOMYr6h^`8nPtJL$6dxG80u5eIS9f3M0MeOU6@7L1tAe=Pxc4uJ zkA3||tmUu&;BgAqS8?@V)5!LPv?rttS*#*?colf6Ay_&YrY@$72_Ejdj~D%Qlq0v4 zow%aQPiVvId!aA-e6ane=9|;Z6CIhDder?PLqmn^XchCZ$2-L=9LO2H`Cl73R_=V< zxXAyZ6v;o-3>@slg#5${E!Kpjs%9u z&Lw~MacgCnvwEw4r(2rbny{M0Gg&?iktk0=#c>{&*QJj@;ev^6X1jk_e*K}FVQZGO z>{SH&Cu(=e!eG zPs9){-{K}~U@p&j>BiZHDKTP*%Z)P+>2PyR5{%0-fau-c3^@KQ(EG;hTZ29hSdgAi@tL~Iy z6X(?<{Dd>WcO8w3_u&%a*eGrxhBs7~4I}xj5<=F_R=?{?*Wn4XPx+LL_g+wY?c@tlB)IS}QY}OIl`wMsE`oe9}#5g(J&L1?SjQOr(Zc`y>ng7ELZ~xJ& zRtDnzcjO;h^IK5SvOkaE30F=*L+!Ik=;BF>qm3s5^_aB!Hnf1fjgzdu+@g^MB9{G2 zu>h4-a76V(@beLrwwF+|z&CFpJTIk*>nShz_;vakcX0bDOBD9t!`(Veo@UF!!ING8TfZE59UX+PAs@|J28IHVVzo3dbYW43+n4g{sp`pPGn9@Su^$B z(s+fsLZ+mtx0!N?j9*WPO_{+!pUMZC!aBf7L)FQ?4%M0r)WX!C*9k&fyw^GkN2;4q zr3{7EQWr_P+BTW;?t)Mv2Kr;1z>jZ!@4qC-pRJ5`c)hC^ziXXWPIMBPp`|NuKDH}M&XryZ zs>Q_7aH+uI!jJ8u>gsVBWSkH`xA%^ZelwVe>1b3d)~Kzo|0u28ldV3+zj!HsM8?MG=w+s&JB2TFF1P&Fur}yxQy|{Md_)t3Ic# zlSKE(9;MaKP$Uhb(XK94k1I5xW1oh}u&O}Fc%#S(OlrX?MhApk02@`gIX0a_mP->Q z&b^0C!|QF&LqtU*EokHrLu(td6-#TIH9I}`ADN1&3DP7FI#h_Z{SRdgG+_(;PwAXj zrnKsw;*(6sLjR*`E#=g+I`(Nx@hOyHXHc0})%w?^Bd0If{(5*=N+Uoy)=pEe-1Dby z*~jXd!j5qgbG+yixmvt7RGQ>pB<{<)Jf26bvhXaZk!xJJ@%AgDy@JvUW`aX6x7my) z`Cy5v8Hr!+yOn%L?w8B21g4(On7k$`iBD?QcmW+#^Fw>L%U@z_=13?TZKh3A*Bc!P zpKy$1=Xh1fRu6q_g}dt#e$>cVi&SY!!M7qK(m%cT|EfnhY78^&xZC+G&`Nn!BRka3 zM4K?IYaeF#Z+t|>_@DFROc?~gIpvP;oq-o0*y{* zF5he_26Z@6M#+$*)g{j{q2?xCfGA6Py&VGAu6NVKKFi9}#dAi_23x~A6S zC(HV*)WJh*WIZBzV4fBkXOR}hKXV!1Qm0>6ln`q+r9{)#2y*#&w9YAE5y*<~2@exqHJX3A92?_0T42xCP9F#hAgb(x0wm~Y%PPpSALO*=HoHJnHhnAZ`PRS+KZg_?&jxq*md-L8Bx)6 zJkp|lqva4qFV1Dm!ccQBO0x;`G1V~&V|t9?W?vSCl#?TI`-u3iq0_id>dlyYUuNLE zR~uKaWLdhYgz7Vfl29iK^Wad}wzamvDy(ik`9j7p9EjH5 zS-pr37QuySn)U#!<-mtrOHNu>BBCWl3Hiu|65jTQE~Bv#22_zBoR!H{N7`o)$NLI4xe3 z$Ur=)7|L=c-AJS6_Stk5cRf1jQz&8tnk&^^t()Yqx(YQRV8?orU9xbtHP zq(<`oP3kq`+lrfElYu0-&pekx?RQ;6H=cM&F2VN%2mUtH=y>=Z)Z5vm=PkliN<_Z- zGySa6k#4irr>2pDvKzH@7>1qygSIU>(cp|{kHh}{2Hl;iDf+SJKH+70kDKT;yi|gd zZ-2v9A^@kQuST*B6)j+ST->oql;S6h7w5t&KEa7ulXiX2FQI>0e1FK5_@ZB7@8$II zAI4gro1nBQFkxf&5xuiq1sNP7h3|!V`MX9v>ARCyg=9QQ%I`#-*0?|vn_r!5`AVGF z+^!yn-pC6thhIH?+)c6f^{0}ypD~^r-gA<*U|s4eb_+>!rc=z2R1~pu<#%s*1A{P9 zxCKr`8e5^bFu>->bsOU_Vx_$r`ApL8RyYdf9$uMu?*}&IH=%`_8}faJPUtu)HGFi` z$L>$($r5T9=DeH|%!Tt;4CLYLaJxfEH$TR_#V(sj9f+q#nuZa>8sJin!0}wiP%)i*QOiypn+dB_QO4#EAu=j>6Sf?CoeEvcVBBjqA&jZ{iJub^*mdW+X%4K7Q2`Kd%Vvg`NvK;U^U=DUGgFVqpX)j!lX1FBArmn4-_9#iQxC%%CLwrY`!?fngpniNL61-@>-sTuzp}#H5W1=ihR%25t|Si= zU)E1Mocv2~K{(Eyduz&)dMN8*W6QHh1A%EAMn;y)1Q;2G};J7Q$EMS%h0p#!){c} z>c|?~6q8GN3}bZh^TIl1H`(LmcWh`op#?D^XH~J3YiUtu?=D&}LmyVQ=lw^SG*0Lro;?m=HP}%sbytIBK=W<2%T-&rNz(8&8 z$UVg9Dw?f>sy_Td-`)ikj>^9pnrcq+Ryq+HYbCABq)MG(Mr$ z2FodG791kK=DmEWXZ^ahaa4t{fNsNC-)o+ZEY&`?fZh7HzV`(%2q@G%kZ`LN#$|ytR8m>r}lr%+BpQu*a6Ae?48ZMoWJY z3zwcs6?j$ohIqpA)xvN3N;w=0##sMcHd4%v^vrnG?%krbT($Nmmx2gmAr{{Vz0==0 z2)3^&LRtk{A)r}34`y7(gr4|vmQeSKqQQyD7dukgN&dF4Zz*xYFQt)1pY;UWNAO#d zW!-+@quBmDY4Yu@cxMHpBwdX{GLG#TP-v{j=G{peKcnbRd-;hvRD-&I&) zfv41E_;~EwD^wQaQ$ITJ0|rnOOp{I-_m6X+<7 z2S3w1p5|Kp@hq1CqVdLgg4aVFx|z56nvN>kRc^>}c{qsQ`Ipt>r1|ZYtcidtMJFrY zzjC^>vP7&TxfR>1f6HktJqf^rF6R5H>+zT>Ru0bmbE~AE>hk;6Af`My{8vP&@ZD3S z@b=T!xPRTgII>5dE+Pgh4EUMZeOT)2HdXa(w0q!EXX^5!U1x`$&DmUX3*%|4IcwCd zMdk-#giY-c7Ai^E9^w>T9#>!e7uTGdbu6+|TkSeO7DE?21h*^93XN$NtW714PCOdJ zpGa0rDQu#yuels+>(hReK5wu3)qXFKJ=j0`TemeJC#hQYyUUtc^5N2^@A6!Q@8biv zXTDLNA5M3GZ_xu?F}J*kq9frT3-fI=aV`(67Z$yt))i+$y^Gh+u=xyRNf9FmYKESL zG2AC%g28;AA6MTmn)Qb^uYPt}(|M$;`xMrWl1}2z4eesj>d(j16MLli>cJ8JO8vFW z-q%~Lmq}^1Qh{Hzp7QKV$sHoF`PUu2rl5=*IY^3B!DeM&eY%!)rG27!uAng#D>sdh zfNf}nEw(FRc}V@14F0c-fDa!tGLAK^PKmR$`5bd1U^=N{>c{XgJyU%8UpCp_b|KaF zp>#=n{;O%O-@Agkl;7#nggi@6_T5!F;@Di2khR=FyK6bJ$YZVZ2KvcqJXbe>xUbIq ztorQ0os_fYC>O(}MeNkwq|pu8!o!!!m`zf9M26>m^?IJOvSnipp0I7O9?5q0=k~2Y z8JDn|b{MhsW+}s9&kc0Xix;vAu0w4F~>2j_6ycigwSmVUhVBrd&Qg zt_KwxMYbkmylfp3_;4`y#Gzp(aSx9D5B*={?EeW_1O0D5@&DoA|EX&IZyWmQ|0(=m zG)|icdmM~^-zL1^Gl~m1`8YmwdLH=SjAm}$4*!What8pW|CQ#yFM|?|3^a)e7zpm$ zh_$uUP5uvj2L|x|L+>s_=I`zqzOR;50058-{Fgx40{>0N3TUgVn1vLabbG#B(`hMZ znxAOt?nD&i-C!`^UQGp_b$jbB#{P{WV#^rkS8hqOd4Ef7y%?U!I_A zKNIj1#WYUV(0fW;-;e;oc%D4XFBO*jvgIGS`rEH&;P_^ppe0|CeE;IDxK(*Yc*~>* z!PLGilB1mF@#vb_*G<2YzEeP;B3#lOgrrFc6ha$kJ)uYRg8uB)`AWc zHU#hDW!OHgNuLi+{?lXe{1A_4ofQvlQK6McT@@w8Ga_XrCsmjMEDBR`{#l}p*507i zxTgPhcVF9THsGS630Zd6R`v=bxJr|@sbYfj? zLjT}X5^U*nn@o`4}2JNMW)HTEi_z2^x}Uz$NqLYFKb=U!EOPX?P#f-u8hcIk{bvuwpUhe#a!3D`Ueu*H_O@g?j5KSWXH$8l>zfF~*R2kAJ2ecBAU~*XlM)dzHsw z2IosDD)P{8H780AO((7?F&G=@41)!I+c+TNYx-}l_Y7FK7%D`1)tF_-#L?~QI^*^9 z%pOUN8Hts?L-7%hgm8!7iTQC3J^J}y?KyOUsmUH$tB`jsIhX5SG z$OA}%jC3vxujulE#}B4zR$fh@>3f3)h&Bv~t_}LWZyH9G!f$jUZw~h#1M8!oanFBA zD~`zw^X%qfF;!gJPJr|l(E4E>6Eb(<^#;WY*MaijThJ!L57|o=xE%!f*S+$mU&u5c z)e7nDjZBXz3^2mW8WO5(g$A53egAS0WAc{S=yZo~rBiV+P!X#~F|xPs^i`qz`4YF< zpQJ4Y>q0y?D{w+zF+nkSQvjxvrZ#1TlMtk)AS{XNGW6mKuISMkV;xW|8?~%3{udY6 z5OI1xPo5!oYuBgVqWnM{;Qs@65QLn*{cDqg1zl9Gh6;%tH11jg9jr8B9oZpkwO9fwMf$UT7XCwtMkn{ANO_@SvL8kNYv_srKq+Z!9+c-7Z zxFLcvcnkqK;P9b7kjQOq3B;fiMvv63)f|uF9dNIm`N?+_-e;|E&{L9{l-Rw_j3P^|e?Gn#Xgx7i5bl31_?Q_i# zB<0TJ_OknWA!Ud#`=2P&&bhjxoZG-f!_LVe+7wfa7m<^-R8msDWh?2jRP)U)_0G@c z<*wlsR4uX~r}osZ>E$y%vZ*gRo8>H}!%x6_RKTa$KB!auB<%ytKGi&V)*{Z*A=2f& z+j)As8;Ut{Lt)53dCaWXkKqM3wfGyDKR|by5frQ(IJSBvxwv$3ux5 z2x+f?lAz;6N{+q|04T+Xv?%Kbi_0Y+RqU{!Im97E@V8+&Pr*p&;12Q7HIhpv{kow? z*%j&c&#q&X=jft&!sngIiox7%f&3o?y;5MJdmCa(+NnBn4iHpk+nRH<9%CDA23&)%gA`u;yE1W)Yo(C_?- zhxC$2&~P1rSD&*!&10FZ5mk4L4)<+14IHV6L-X;whS+?MK8iid9_2#& z1rLx!ycT2w_VEIpp7qH4=WWaz*sl-`fHpD&&ySY2L;V(y0;PIAEiDLqi(#`yRRGbm z0jro*>%=~#7d!fW1KIMjJs-NpTm>(j5#jSL=%I|7mW)c2ooE&|ovY&Wr$al6pbZc* zR{qv=iVS1Egm_(G1GpW&euiBA^*+^*uC`@XtoVyK>=b?ABHEJm9w&VAGHUK}laK_& zcSy&Y+Q82&rGymd@3LU`C4-bv`rh+FTkim4edozyz zhvc?W;~>@lBXF!FKan&^PRDZrjlE?jxf$Op<(iHg4VRg)I=l8g7=XmEIv+ASH!!?Oa_$ZQM560FmDrN&hHoM3Det;BO48 z-Iy3Kq2Al*0!Sm43OidSA{=m7r9fXG_KVRtVG-jMF=1IT7+Rt*Vkh0$Mc8W3i_40a zXXSLf&VWvBSjs`79;6yrj^E?;bv$2sg0<4#GfD(|h?wz)wh}3OfeWm6JoTnT@P@nq z)7y$o3~a7V=?LSA|Jn*4h6r~W3wI<{eoB!obR}NNCCkz13~cX&F*f*AqF8*FMMX~S z-{T-@9ueMU69F5arPTLl;klq`VwlcR*a@I_cD{-`G*mZia_-ts1~){27TBo&zn%J-gP@0NeHngjPM;Cjj zE^oC`;%mFm$u~0&QMx#y$kKZdwjjrG7&b2i*9}7i;5d!1PCLV%o>tNK z(lR#ub=`f`u>;BL#CCC{uD#!x+Tt0Y9T2Ve(3CHMVu;P(Y)Dy=pDJ~P2(1@44?3@Q zP9k=G$o=b*LIrhF=8Lj$uHw!7zV;HA&p{QvEjv~GiU)rK8Zm)=#kmz2I!J%WSRm@k zy^1@B_9B~KQHp{3fURE2%=@Lz`P*?ra@i7&(5YV_I(;nCKX_POMm`rxlx#P5^=ZkYz^v>GT5bdfNug;d{rh+G^Hz4h$gpa%jHvmm`B zb6hP7BvQrRv|ZBonl?>UB?UT2gMM8}XM%kR+!mAh!K>~=Ue^cbK}@f}A1?j!vi*cw z*lgUp*ed{uyu&$Be|L3g-n)YGW&RbmZQl1))=gBAAK2Dl^DXq>~lQkj{sEvP>NKO)-*#eW)MP!VD9ZhF~;_qCxj&jhnuA z!x%hW*vkui2-tUza~zjRye4PCQaj&c*eW_!GkyPcmFM)v*aO`4t~g!O@gepzrm~5! z3Zh<)IBO+nTtzRBLBr*_ zPV!9<3F$t*B6nV?NJ&_&y=S~#6Y|+N4=Y#*hcNX&M$g`0xIt*k&2hU^bLK^6A%+U# z7f=@|2EebLA5U)(kKIHc$PVR;w&E>0k6Dkps zwC<;N$}-PnsF4dZew3x=eVA^NItz~q*zcE4;v6CM!zd23#>z@NfrEN> z^Z*;-Pf@H4nZ)<{twHKR2le~x}~b@6T_hM+8^)2mAUVPfIBvvOS;R} zioFVyYYW%G9`~w|`NOI0y=^^bpwflE8yjlx3r?pCemeV?XE$28Fy;YhEwf_kiq5s- zqQGYH=l9I8^P7xPa3vE&M1shF@oQT|wn?7VwU0X@T|q8?XwN%Gd~NB(QdhNC0JKUG z6FI)^{Hxl;oxe!fuP{e!&-9`dKMxq0#h4OQ;#TS8f^HN0i;iTOeSPs{IYJ21cLaO; zps#c!18vir6E#>iwtRgEx;eN+5@HtT86g|#lWsQB3Hew@DiF8nB`U=mi>i915t($u zYFCigj`#P`;LxHUZ&l-yz*oPz;@*8Q(->=^`r!<~uI@h#n%?&f$O!q!{!NH~Gn%J#9#a(o`ZahF+E`|-*-)x93 zE3o{{se1^z)RqD*41c0aMj(7AA9zK4+Z+qpZn}?dSVP9$!Q(EN3fherM`s*Z+NKWx z1>YWpAk((uhz!5~)BS_cliQZ8n2_)bV35T{G14RRet=e!VdE-p8ftShLJ#P|Xh8XY zmM&m1shHH5iD4Cx(I|NN=b9-2T8@amr_q16KKKdV;dt@&f&-toPlxz6hXT;;15oG! z8@?h)4B_U6v@}jPhbf~mFtFi0X?PO)0r;$Di;GO^%M`!e*zwgL@HePE3jX-r0L%2K zS7|A#oeanamB5yWdW!)x$IixZ<6s5UPo~6Oljznj{M**zUq&Kye%}lVG+&u>xsjI& z|8Q@jjzGCbKqw_hj~G4hTuNE<+y}rY#aStPQEXrQyR^tp`#f};)8>bij@+P*Tl0HPW`2AYi(S{h-*RwA3vS6p#a8_s0Y26O%c#73u6mb#pW3^?0Ubw2p<*( zV0yR2)B2Rq%my?s-ZmB|o7@#IS(1Y9QfruDHHxqtaEV!&D+d{NFKLQtG?e{}ED~}a z@Mα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
c?~@Y=Fuc?{ogAU*V>({ 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 \ No newline at end of file diff --git a/src/assets/icons/noteicon.svg b/src/assets/icons/noteicon.svg new file mode 100644 index 0000000..77e1396 --- /dev/null +++ b/src/assets/icons/noteicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/threedotsicon.afdesign b/src/assets/icons/threedotsicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..1586befd7dd1e64b9350d3f3b982f48e62d65ba9 GIT binary patch literal 13280 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 YFb>vJmdw*4RsXbUsOTs+D%wW=AJyo;;Q#;t literal 0 HcmV?d00001 diff --git a/src/assets/icons/threedotsicon.min.svg b/src/assets/icons/threedotsicon.min.svg new file mode 100644 index 0000000..59c3f60 --- /dev/null +++ b/src/assets/icons/threedotsicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/threedotsicon.svg b/src/assets/icons/threedotsicon.svg new file mode 100644 index 0000000..cfbdaee --- /dev/null +++ b/src/assets/icons/threedotsicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/components/Dashboard/common/Dashboard.jsx b/src/components/Dashboard/Dashboard.jsx similarity index 64% rename from src/components/Dashboard/common/Dashboard.jsx rename to src/components/Dashboard/Dashboard.jsx index 4dfe03f..cb3404e 100644 --- a/src/components/Dashboard/common/Dashboard.jsx +++ b/src/components/Dashboard/Dashboard.jsx @@ -1,13 +1,13 @@ // Dashboard.js import React from 'react' -import DashboardLayout from './DashboardLayout' +import Layout from './Layout' import { Outlet } from 'react-router-dom' const Dashboard = () => { return ( - + - + ) } diff --git a/src/components/Dashboard/Developer/AuthContextDebug.jsx b/src/components/Dashboard/Developer/AuthContextDebug.jsx new file mode 100644 index 0000000..2bd3651 --- /dev/null +++ b/src/components/Dashboard/Developer/AuthContextDebug.jsx @@ -0,0 +1,105 @@ +import React, { useContext } from 'react' +import { + Descriptions, + Button, + Typography, + Flex, + Space, + Dropdown, + message +} from 'antd' +import ReloadIcon from '../../Icons/ReloadIcon.jsx' +import { AuthContext } from '../context/AuthContext.js' +import BoolDisplay from '../common/BoolDisplay.jsx' + +const { Text, Paragraph } = Typography + +const AuthContextDebug = () => { + const { authenticated, userProfile, token, loading, loginWithSSO, logout } = + useContext(AuthContext) + const [msgApi, contextHolder] = message.useMessage() + + const handleLogin = () => { + loginWithSSO() + } + + const handleLogout = () => { + logout() + } + + const actionItems = { + items: [ + { + label: 'Log In', + key: 'login', + disabled: authenticated + }, + { + label: 'Log Out', + key: 'logout', + disabled: !authenticated + }, + { + label: 'Reload', + key: 'reload', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'login') handleLogin() + if (key === 'logout') handleLogout() + if (key === 'reload') { + msgApi.info('Reloading Auth State...') + window.location.reload() + } + } + } + + return ( + + {contextHolder} + + + + + + + +

+ + + + + + + + + +
{token || None}
+
+
+ +
+              {userProfile ? (
+                
+                  
+                    {JSON.stringify(
+                      // eslint-disable-next-line
+                      { ...userProfile, access_token: '...' },
+                      null,
+                      2
+                    )}
+                  
+
+ ) : ( + n/a + )} +
+
+
+
+ + ) +} + +export default AuthContextDebug diff --git a/src/components/Dashboard/Developer/DeveloperSidebar.jsx b/src/components/Dashboard/Developer/DeveloperSidebar.jsx new file mode 100644 index 0000000..1e359f8 --- /dev/null +++ b/src/components/Dashboard/Developer/DeveloperSidebar.jsx @@ -0,0 +1,41 @@ +import React from 'react' +import { useLocation } from 'react-router-dom' +import DashboardSidebar from '../common/DashboardSidebar' + +const items = [ + { + key: 'sessionstorage', + label: 'Session Storage', + path: '/dashboard/developer/sessionstorage' + }, + { + key: 'authcontextdebug', + label: 'Auth Context Debug', + path: '/dashboard/developer/authcontextdebug' + }, + { + key: 'socketcontextdebug', + label: 'Socket Context Debug', + path: '/dashboard/developer/socketcontextdebug' + } +] + +const routeKeyMap = { + '/dashboard/developer/sessionstorage': 'sessionstorage', + '/dashboard/developer/authcontext': 'authcontextdebug', + '/dashboard/developer/socketcontext': 'socketcontextdebug' +} + +const DeveloperSidebar = (props) => { + const location = useLocation() + const selectedKey = (() => { + const match = Object.keys(routeKeyMap).find((path) => + location.pathname.startsWith(path) + ) + return match ? routeKeyMap[match] : 'sessionstorage' + })() + + return +} + +export default DeveloperSidebar diff --git a/src/components/Dashboard/Developer/SessionStorage.jsx b/src/components/Dashboard/Developer/SessionStorage.jsx new file mode 100644 index 0000000..ceab359 --- /dev/null +++ b/src/components/Dashboard/Developer/SessionStorage.jsx @@ -0,0 +1,86 @@ +import React, { useState } from 'react' +import { Descriptions, Button, Typography, Flex, Space, Dropdown } from 'antd' +import ReloadIcon from '../../Icons/ReloadIcon' +import BoolDisplay from '../common/BoolDisplay' + +const { Text } = Typography + +const getSessionStorageItems = () => { + const items = [] + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i) + items.push({ key, value: sessionStorage.getItem(key) }) + } + return items +} + +const SessionStorage = () => { + const [items, setItems] = useState(getSessionStorageItems()) + + const reload = () => { + setItems(getSessionStorageItems()) + } + + const actionItems = { + items: [ + { + label: 'Reload', + key: 'reload', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reload') reload() + } + } + + return ( + + + + + + + + +
+ + {items.length === 0 ? ( + + Empty + + ) : ( + items.map(({ key, value }) => { + // Try to detect boolean values (true/false or 'true'/'false') + let isBool = false + let boolValue = false + if (typeof value === 'boolean') { + isBool = true + boolValue = value + } else if (value === 'true' || value === 'false') { + isBool = true + boolValue = value === 'true' + } + return ( + + {isBool ? ( + + ) : ( + + {value} + + )} + + ) + }) + )} + +
+
+ ) +} + +export default SessionStorage diff --git a/src/components/Dashboard/Developer/SocketContextDebug.jsx b/src/components/Dashboard/Developer/SocketContextDebug.jsx new file mode 100644 index 0000000..54b0b53 --- /dev/null +++ b/src/components/Dashboard/Developer/SocketContextDebug.jsx @@ -0,0 +1,77 @@ +import React, { useContext } from 'react' +import { + Descriptions, + Button, + Typography, + Flex, + Space, + Dropdown, + message +} from 'antd' +import ReloadIcon from '../../Icons/ReloadIcon.jsx' +import { SocketContext } from '../context/SocketContext.js' +import BoolDisplay from '../common/BoolDisplay.jsx' + +const { Text, Paragraph } = Typography + +const SocketContextDebug = () => { + const { socket, error, connecting } = useContext(SocketContext) + const [msgApi, contextHolder] = message.useMessage() + + const actionItems = { + items: [ + { + label: 'Reload', + key: 'reload', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reload') { + msgApi.info('Reloading Page...') + window.location.reload() + } + } + } + + // Helper to display socket info safely + const getSocketInfo = () => { + if (!socket) return 'n/a' + // Only show safe properties + const { id, connected, disconnected, nsp } = socket + return JSON.stringify({ id, connected, disconnected, nsp }, null, 2) + } + + return ( + + {contextHolder} + + + + + + + +
+ + + + + + + + + {error ? {error} : n/a} + + + +
{getSocketInfo()}
+
+
+
+
+
+ ) +} + +export default SocketContextDebug diff --git a/src/components/Dashboard/Inventory/FilamentStocks.jsx b/src/components/Dashboard/Inventory/FilamentStocks.jsx index 276bd16..5be217f 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks.jsx @@ -30,6 +30,9 @@ import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import DashboardTable from '../common/DashboardTable' +import ListIcon from '../../Icons/ListIcon' +import GridIcon from '../../Icons/GridIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' @@ -46,6 +49,8 @@ const FilamentStocks = () => { const { authenticated } = useContext(AuthContext) + const [viewMode, setViewMode] = useViewMode('FilamentStocks') + const getFilterDropdown = ({ setSelectedKeys, selectedKeys, @@ -85,12 +90,11 @@ const FilamentStocks = () => { // Column definitions const columns = [ { - title: '', - dataIndex: '', + title: , key: 'icon', width: 40, fixed: 'left', - render: () => + render: () => }, { title: 'Filament Name', @@ -112,7 +116,7 @@ const FilamentStocks = () => { clearFilters, propertyName: 'filament name' }), - render: (filament) => {filament.name} + render: (filament) => {filament?.name} }, { title: 'ID', @@ -136,7 +140,7 @@ const FilamentStocks = () => { width: 140, sorter: true, render: (currentNetWeight) => ( - {currentNetWeight.toFixed(2) + 'g'} + {currentNetWeight?.toFixed(2) + 'g'} ) }, { @@ -146,7 +150,7 @@ const FilamentStocks = () => { width: 140, sorter: true, render: (startingNetWeight) => ( - {startingNetWeight.toFixed(2) + 'g'} + {startingNetWeight?.toFixed(2) + 'g'} ) }, { @@ -183,7 +187,7 @@ const FilamentStocks = () => { key: 'actions', fixed: 'right', width: 150, - render: (text, record) => { + render: (record) => { return ( + + + + - View + + + + + {error ? ( + +

{error || 'FilamentStock not found'}

+ +
+ ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' > - {/* Read-only fields */} - - {filamentStockData.id ? ( - - ) : ( - 'n/a' - )} - - - - - - - - - - - - - - - {filamentStockData.filament ? ( - - - - - ) : ( - 'n/a' - )} - - - - {filamentStockData.filament ? ( - - ) : ( - 'n/a' - )} - - - {filamentStockData.currentGrossWeight ? ( - - - {filamentStockData.currentNetWeight.toFixed(2) + 'g'} - - - {filamentStockData.currentGrossWeight.toFixed(2) + 'g'} - - - ) : ( - 'n/a' - )} - - - {filamentStockData.startingGrossWeight ? ( - - - - {filamentStockData.startingNetWeight.toFixed(2) + 'g'} + + + + Filament Stock Information + + + } + key='1' + > + + } + spinning={fetchLoading} + > + + {/* Read-only fields */} + + {filamentStockData?.id ? ( + + ) : ( + n/a + )} - - {filamentStockData.startingGrossWeight.toFixed(2) + - 'g'} + + {filamentStockData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {filamentStockData ? ( + + ) : ( + n/a + )} + + + + {filamentStockData?.updatedAt ? ( + + ) : ( + n/a + )} + + + + {filamentStockData?.filament ? ( + + + + + ) : ( + n/a + )} + + + + {filamentStockData?.filament ? ( + + ) : ( + n/a + )} + + + {filamentStockData?.currentGrossWeight ? ( + + + {filamentStockData.currentNetWeight.toFixed(2) + + 'g'} + + + {filamentStockData.currentGrossWeight.toFixed( + 2 + ) + 'g'} + + + ) : ( + n/a + )} + + + {filamentStockData?.startingGrossWeight ? ( + + + + {filamentStockData.startingNetWeight.toFixed( + 2 + ) + 'g'} + + + {filamentStockData.startingGrossWeight.toFixed( + 2 + ) + 'g'} + + + + ) : ( + n/a + )} - - ) : ( - 'n/a' - )} - - - - - + + + + - updateCollapseState('events', keys.length > 0)} - expandIcon={({ isActive }) => ( - - )} - className='no-h-padding-collapse' - > - - Filament Stock Events - - } - key='2' - > - - - + + updateCollapseState('events', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Filament Stock Events + + + } + key='2' + > + } spinning={fetchLoading}> + + + + + + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Logs + + + } + key='auditLogs' + > + + + + +
+ )} - + ) } diff --git a/src/components/Dashboard/Inventory/InventorySidebar.jsx b/src/components/Dashboard/Inventory/InventorySidebar.jsx new file mode 100644 index 0000000..bcf0688 --- /dev/null +++ b/src/components/Dashboard/Inventory/InventorySidebar.jsx @@ -0,0 +1,73 @@ +import React from 'react' +import { useLocation } from 'react-router-dom' +import DashboardSidebar from '../common/DashboardSidebar' +import { DashboardOutlined } from '@ant-design/icons' +import FilamentStockIcon from '../../Icons/FilamentStockIcon' +import PartStockIcon from '../../Icons/PartStockIcon' +import ProductStockIcon from '../../Icons/ProductStockIcon' +import StockEventIcon from '../../Icons/StockEventIcon' +import StockAuditIcon from '../../Icons/StockAuditIcon' + +const items = [ + { + key: 'overview', + label: 'Overview', + icon: , + path: '/dashboard/inventory/overview' + }, + { type: 'divider' }, + { + key: 'filamentstocks', + label: 'Filament Stocks', + icon: , + path: '/dashboard/inventory/filamentstocks' + }, + { + key: 'partstocks', + label: 'Part Stocks', + icon: , + path: '/dashboard/inventory/partstocks' + }, + { + key: 'productstocks', + label: 'Product Stocks', + icon: , + path: '/dashboard/inventory/productstocks' + }, + { type: 'divider' }, + { + key: 'stockevents', + label: 'Stock Events', + icon: , + path: '/dashboard/inventory/stockevents' + }, + { + key: 'stockaudits', + label: 'Stock Audits', + icon: , + path: '/dashboard/inventory/stockaudits' + } +] + +const routeKeyMap = { + '/dashboard/inventory/overview': 'overview', + '/dashboard/inventory/filamentstocks': 'filamentstocks', + '/dashboard/inventory/partstocks': 'partstocks', + '/dashboard/inventory/productstocks': 'productstocks', + '/dashboard/inventory/stockevents': 'stockevents', + '/dashboard/inventory/stockaudits': 'stockaudits' +} + +const InventorySidebar = (props) => { + const location = useLocation() + const selectedKey = (() => { + const match = Object.keys(routeKeyMap).find((path) => + location.pathname.startsWith(path) + ) + return match ? routeKeyMap[match] : 'filaments' + })() + + return +} + +export default InventorySidebar diff --git a/src/components/Dashboard/Inventory/StockEvents.jsx b/src/components/Dashboard/Inventory/StockEvents.jsx index 36605d7..3431206 100644 --- a/src/components/Dashboard/Inventory/StockEvents.jsx +++ b/src/components/Dashboard/Inventory/StockEvents.jsx @@ -9,7 +9,6 @@ import { Typography, Input } from 'antd' -import { AuditOutlined } from '@ant-design/icons' import { AuthContext } from '../context/AuthContext' import { SocketContext } from '../context/SocketContext' @@ -17,14 +16,17 @@ import IdText from '../common/IdText' import TimeDisplay from '../common/TimeDisplay' import ReloadIcon from '../../Icons/ReloadIcon' import PlusMinusIcon from '../../Icons/PlusMinusIcon' -import SubJobIcon from '../../Icons/SubJobIcon' -import PlayCircleIcon from '../../Icons/PlayCircleIcon' import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import DashboardTable from '../common/DashboardTable' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' +import { getTypeMeta } from '../utils/Utils' +import StockEventIcon from '../../Icons/StockEventIcon' const { Text } = Typography @@ -32,26 +34,16 @@ const StockEvents = () => { const { socket } = useContext(SocketContext) const [initialized, setInitialized] = useState(false) const tableRef = useRef() + const [viewMode, setViewMode] = useViewMode('StockEvents') // Column definitions for visibility const columns = [ { - title: '', + title: , key: 'icon', width: 40, fixed: 'left', - render: (record) => { - switch (record.type.toLowerCase()) { - case 'subjob': - return - case 'audit': - return - case 'initial': - return - default: - return null - } - } + render: () => }, { title: 'Type', @@ -60,6 +52,9 @@ const StockEvents = () => { width: 200, fixed: 'left', sorter: true, + render: (type) => { + return {getTypeMeta(type?.toLowerCase()).title} + }, filterDropdown: ({ setSelectedKeys, selectedKeys, @@ -90,7 +85,7 @@ const StockEvents = () => { width: 100, sorter: true, render: (value, record) => { - const formattedValue = value.toFixed(2) + record.unit + const formattedValue = value?.toFixed(2) + record?.unit return ( {value > 0 ? '+' + formattedValue : formattedValue} @@ -122,7 +117,7 @@ const StockEvents = () => { width: 170 * 2, render: (record) => { const ids = ( - + {record.job ? ( { showHyperlink={true} /> ) : null} - + ) if (!record.stockAudit && !record.job && !record.subJob) { return 'n/a' @@ -307,6 +302,14 @@ const StockEvents = () => { + + + + - View + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' > - - {filamentData.id ? ( - - ) : ( - 'n/a' - )} - - - - - - - - {isEditing ? ( - - - - ) : ( - filamentData.name || 'n/a' - )} - - - - - - - - - - {isEditing ? ( - - - - ) : filamentData.vendor.name ? ( - {filamentData.vendor.name} - ) : ( - n/a - )} - - - - - - - - - - {isEditing ? ( - - - - ) : ( - filamentData.type || 'n/a' - )} - - - - - - {isEditing ? ( - - - - ) : filamentData.cost ? ( - `£${filamentData.cost}/kg` - ) : ( - 'n/a' - )} - - - - - - {isEditing ? ( - { - return '#' + color.toHex() + + + + Filament Information + + + } + key='1' + > + + } + spinning={fetchLoading} + > + - - - ) : ( - - )} - - + + {filamentData?._id ? ( + + ) : ( + n/a + )} + + + {filamentData?.createdAt ? ( + + ) : ( + n/a + )} + - - - {isEditing ? ( - - - - ) : filamentData.diameter ? ( - `${filamentData.diameter}mm` - ) : ( - 'n/a' - )} - - + + {isEditing ? ( + + + + ) : filamentData?.name ? ( + {filamentData.name} + ) : ( + n/a + )} + - - - {isEditing ? ( - - - - ) : filamentData.density ? ( - `${filamentData.density}g/cm³` - ) : ( - 'n/a' - )} - - + + {filamentData?.updatedAt ? ( + + ) : ( + n/a + )} + - - - {isEditing ? ( - - - - ) : filamentData.url ? ( - - {filamentData.url} - - ) : ( - 'n/a' - )} - - + + {isEditing ? ( + + + + ) : filamentData?.vendor?.name ? ( + {filamentData.vendor.name} + ) : ( + n/a + )} + - - - {isEditing ? ( - - - - ) : ( - filamentData.barcode || 'n/a' - )} - - - - - - + + {filamentData?.vendor?.id ? ( + + ) : ( + n/a + )} + - updateCollapseState('details', keys.length > 0)} - expandIcon={({ isActive }) => ( - - )} - className='no-h-padding-collapse' - > - - Additional Details - - } - key='2' - > - {/* Add any additional details sections here */} - - + + {isEditing ? ( + + + + ) : filamentData?.type ? ( + {filamentData.type} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : filamentData?.cost ? ( + {`£${filamentData.cost}/kg`} + ) : ( + n/a + )} + + + + + {isEditing ? ( + { + return '#' + color.toHex() + }} + > + + + ) : filamentData?.color ? ( + + ) : ( + n/a + )} + + + + + {isEditing ? ( + + + + ) : filamentData?.diameter ? ( + {`${filamentData.diameter}mm`} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : filamentData?.density ? ( + {`${filamentData.density}g/cm³`} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : filamentData?.url ? ( + + {filamentData.url} + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : filamentData?.barcode ? ( + {filamentData.barcode} + ) : ( + n/a + )} + + + + + + + + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Logs + + + } + key='auditLogs' + > + + + + +
+ )} - - setIsDeleteModalOpen(false)} - confirmLoading={loading} - > -

Are you sure you want to delete this filament?

-
- + ) } diff --git a/src/components/Dashboard/Management/ManagementSidebar.jsx b/src/components/Dashboard/Management/ManagementSidebar.jsx new file mode 100644 index 0000000..e25a2ef --- /dev/null +++ b/src/components/Dashboard/Management/ManagementSidebar.jsx @@ -0,0 +1,109 @@ +import React from 'react' +import { useLocation } from 'react-router-dom' +import DashboardSidebar from '../common/DashboardSidebar' +import FilamentIcon from '../../Icons/FilamentIcon' +import PartIcon from '../../Icons/PartIcon' +import ProductIcon from '../../Icons/ProductIcon' +import VendorIcon from '../../Icons/VendorIcon' +import MaterialIcon from '../../Icons/MaterialIcon' +import NoteTypeIcon from '../../Icons/NoteTypeIcon' +import SettingsIcon from '../../Icons/SettingsIcon' +import AuditLogIcon from '../../Icons/AuditLogIcon' +import DeveloperIcon from '../../Icons/DeveloperIcon' +import PersonIcon from '../../Icons/PersonIcon' + +const items = [ + { + key: 'filaments', + icon: , + label: 'Filaments', + path: '/dashboard/management/filaments' + }, + { + key: 'parts', + icon: , + label: 'Parts', + path: '/dashboard/management/parts' + }, + { + key: 'products', + icon: , + label: 'Products', + path: '/dashboard/management/products' + }, + { + key: 'vendors', + icon: , + label: 'Vendors', + path: '/dashboard/management/vendors' + }, + { + key: 'materials', + icon: , + label: 'Materials', + path: '/dashboard/management/materials' + }, + { type: 'divider' }, + { + key: 'notetypes', + icon: , + label: 'Note Types', + path: '/dashboard/management/notetypes' + }, + { + key: 'users', + icon: , + label: 'Users', + path: '/dashboard/management/users' + }, + { + key: 'settings', + icon: , + label: 'Settings', + path: '/dashboard/management/settings' + }, + { + key: 'auditlogs', + icon: , + label: 'Audit Logs', + path: '/dashboard/management/auditlogs' + } +] + +if (process.env.NODE_ENV === 'development') { + items.push( + { type: 'divider' }, + { + key: 'developer', + icon: , + label: 'Developer', + path: '/dashboard/developer/sessionstorage' + } + ) +} + +const routeKeyMap = { + '/dashboard/management/filaments': 'filaments', + '/dashboard/management/parts': 'parts', + '/dashboard/management/users': 'users', + '/dashboard/management/products': 'products', + '/dashboard/management/vendors': 'vendors', + '/dashboard/management/materials': 'materials', + '/dashboard/management/notetypes': 'notetypes', + '/dashboard/management/settings': 'settings', + '/dashboard/management/auditlogs': 'auditlogs' +} + +const ManagementSidebar = (props) => { + const location = useLocation() + const selectedKey = (() => { + const match = Object.keys(routeKeyMap).find((path) => + location.pathname.startsWith(path) + ) + return match ? routeKeyMap[match] : 'filaments' + })() + + return +} + +export default ManagementSidebar diff --git a/src/components/Dashboard/Management/NoteTypes.jsx b/src/components/Dashboard/Management/NoteTypes.jsx index 055a797..50e6bcc 100644 --- a/src/components/Dashboard/Management/NoteTypes.jsx +++ b/src/components/Dashboard/Management/NoteTypes.jsx @@ -11,7 +11,7 @@ import { Popover, Input, Badge, - Tag + Typography } from 'antd' import { AuthContext } from '../context/AuthContext' import IdText from '../common/IdText' @@ -24,9 +24,15 @@ import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import InfoCircleIcon from '../../Icons/InfoCircleIcon' import useColumnVisibility from '../hooks/useColumnVisibility' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' import NoteTypeIcon from '../../Icons/NoteTypeIcon' +import BoolDisplay from '../common/BoolDisplay' + +const { Text } = Typography const NoteTypes = () => { const [messageApi, contextHolder] = message.useMessage() @@ -34,6 +40,7 @@ const NoteTypes = () => { const [newNoteTypeOpen, setNewNoteTypeOpen] = useState(false) const tableRef = useRef() const { authenticated } = useContext(AuthContext) + const [viewMode, setViewMode] = useViewMode('NoteTypes') const getFilterDropdown = ({ setSelectedKeys, @@ -114,8 +121,7 @@ const NoteTypes = () => { const columns = [ { - title: '', - dataIndex: '', + title: , key: 'icon', width: 40, fixed: 'left', @@ -172,18 +178,15 @@ const NoteTypes = () => { dataIndex: 'color', key: 'color', width: 120, - render: (color) => + render: (color) => + color ? : n/a }, { title: 'Active', - dataIndex: 'isActive', - key: 'isActive', + dataIndex: 'active', + key: 'active', width: 100, - render: (isActive) => ( - - {isActive ? 'Yes' : 'No'} - - ), + render: (active) => , sorter: true }, { @@ -221,7 +224,7 @@ const NoteTypes = () => { key: 'actions', fixed: 'right', width: 150, - render: (text, record) => { + render: (record) => { return ( + + + + + + - - - {partData.id ? ( - - ) : ( - 'n/a' - )} - - - - + + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' + > + + + + Part Information + + + } + key='1' > - - - - {stlLoadError} - - -
- ) : ( - partFileObjectId && ( - + setPartFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={{ + name: partData?.name || '', + version: partData?.version || '', + tags: partData?.tags || [] }} - > - ) - )} - - - + > + } + spinning={fetchLoading} + > + + + {partData?.id ? ( + + ) : ( + n/a + )} + + + {partData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : partData?.name ? ( + {partData.name} + ) : ( + n/a + )} + + + + {partData?.updatedAt ? ( + + ) : ( + n/a + )} + + + + {partData?.product?.name ? ( + {partData.product.name} + ) : ( + n/a + )} + + + {partData?.product?._id ? ( + + ) : ( + n/a + )} + + + {isEditing && useGlobalPricing == false ? ( + + {marginOrPrice == false ? ( + + + + ) : ( + + + + )} + + Price + + + ) : partData?.margin && + marginOrPrice == false && + partData?.useGlobalPricing == false ? ( + {partData.margin + '%'} + ) : partData?.price && + marginOrPrice == true && + partData?.useGlobalPricing == false ? ( + {'£' + partData.price} + ) : ( + n/a + )} + + + {isEditing ? ( + + + + ) : partData ? ( + + ) : ( + n/a + )} + + + {partData?.version ? ( + {partData.version} + ) : ( + n/a + )} + + + {partData?.tags && partData.tags.length > 0 ? ( + partData.tags.map((tag, index) => ( + {tag} + )) + ) : ( + n/a + )} + + + + + + + + + updateCollapseState('preview', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Part Preview + + + } + key='2' + > + + {stlLoadError ? ( +
+ + + + {stlLoadError} + + +
+ ) : ( + partFileObjectId && ( + + ) + )} +
+
+
+ + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Logs + + + } + key='auditLogs' + > + + + + + + )} - + ) } diff --git a/src/components/Dashboard/Management/Products.jsx b/src/components/Dashboard/Management/Products.jsx index 170f79e..7459d50 100644 --- a/src/components/Dashboard/Management/Products.jsx +++ b/src/components/Dashboard/Management/Products.jsx @@ -28,6 +28,9 @@ import ReloadIcon from '../../Icons/ReloadIcon' import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' @@ -37,6 +40,7 @@ const Products = () => { const [newProductOpen, setNewProductOpen] = useState(false) const tableRef = useRef() const { authenticated } = useContext(AuthContext) + const [viewMode, setViewMode] = useViewMode('Products') const getProductActionItems = (id) => { return { @@ -63,12 +67,11 @@ const Products = () => { // Column definitions const columns = [ { - title: '', - dataIndex: '', - key: '', + title: , + key: 'icon', width: 40, fixed: 'left', - render: () => + render: () => }, { title: 'Name', @@ -114,7 +117,7 @@ const Products = () => { propertyName: 'ID' }), onFilter: (value, record) => - record._id.toLowerCase().includes(value.toLowerCase()), + record?._id.toLowerCase().includes(value.toLowerCase()), sorter: true }, { @@ -212,7 +215,7 @@ const Products = () => { key: 'actions', fixed: 'right', width: 150, - render: (text, record) => { + render: (record) => { return ( + + + + - - - {productData.id ? ( - - ) : ( - 'n/a' - )} - + + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' + > + + + + Product Information + + + } + key='1' + > +
+ setProductFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={{ + name: productData?.name || '', + vendor: productData?.vendor || { id: null, name: '' }, + version: productData?.version || '', + tags: productData?.tags || [] + }} + > + } + spinning={fetchLoading} + > + + + {productData?.id ? ( + + ) : ( + n/a + )} + + + + {productData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : productData?.name ? ( + {productData.name} + ) : ( + n/a + )} + + + + {productData?.updatedAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : productData?.vendor?.name ? ( + {productData.vendor.name} + ) : ( + n/a + )} + + + + {productData?.vendor?.id ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + {marginOrPrice == false ? ( + + + + ) : ( + + + + )} + + Price + + + ) : productData?.margin && marginOrPrice == false ? ( + {productData.margin + '%'} + ) : productData?.price && marginOrPrice == true ? ( + {'£' + productData.price} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : productData?.version ? ( + {productData.version} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + {productData?.tags?.map((tag) => ( + handleTagClose(tag)} + style={{ marginBottom: 12 }} + > + {tag} + + ))} + + + + + +
+ )} - + ) } diff --git a/src/components/Dashboard/Management/Settings.jsx b/src/components/Dashboard/Management/Settings.jsx index 00f5b79..faaa9c0 100644 --- a/src/components/Dashboard/Management/Settings.jsx +++ b/src/components/Dashboard/Management/Settings.jsx @@ -1,6 +1,6 @@ import React from 'react' import { Select, Typography, Descriptions, Collapse, Flex } from 'antd' -import { CaretRightOutlined } from '@ant-design/icons' +import { CaretLeftOutlined } from '@ant-design/icons' import { useThemeContext } from '../context/ThemeContext' import useCollapseState from '../hooks/useCollapseState' @@ -53,13 +53,13 @@ const Settings = () => { updateCollapseState('appearance', keys.length > 0) } expandIcon={({ isActive }) => ( - diff --git a/src/components/Dashboard/Management/Users.jsx b/src/components/Dashboard/Management/Users.jsx new file mode 100644 index 0000000..b148e46 --- /dev/null +++ b/src/components/Dashboard/Management/Users.jsx @@ -0,0 +1,381 @@ +import React, { useContext, useRef } from 'react' +import { useNavigate } from 'react-router-dom' +import { + Button, + Flex, + Space, + Dropdown, + Typography, + Checkbox, + Popover, + Input +} from 'antd' +import { ExportOutlined } from '@ant-design/icons' +import { AuthContext } from '../context/AuthContext' +import IdText from '../common/IdText' +import TimeDisplay from '../common/TimeDisplay' +import DashboardTable from '../common/DashboardTable' +import PersonIcon from '../../Icons/PersonIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import XMarkIcon from '../../Icons/XMarkIcon' +import CheckIcon from '../../Icons/CheckIcon' +import useColumnVisibility from '../hooks/useColumnVisibility' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' + +import config from '../../../config' + +const { Link, Text } = Typography + +const Users = () => { + const navigate = useNavigate() + const tableRef = useRef() + const { authenticated } = useContext(AuthContext) + const [viewMode, setViewMode] = useViewMode('Users') + + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } + + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') + .map((col) => ( + { + updateColumnVisibility(col.key, e.target.checked) + }} + > + {col.title} + + )) + + return ( + + + {columnItems} + + + ) + } + + const getUserActionItems = (id) => { + return { + items: [ + { + label: 'Info', + key: 'info', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'info') { + navigate(`/dashboard/management/users/info?userId=${id}`) + } + } + } + } + + const columns = [ + { + title: , + key: 'icon', + width: 40, + fixed: 'left', + render: () => + }, + + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 200, + render: (text) => (text ? text : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name?.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'Username', + dataIndex: 'username', + key: 'username', + width: 150, + fixed: 'left', + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'username' + }), + onFilter: (value, record) => + record.username.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'First Name', + dataIndex: 'firstName', + key: 'firstName', + width: 150, + render: (text) => (text ? text : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'first name' + }), + onFilter: (value, record) => + record.firstName?.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'Last Name', + dataIndex: 'lastName', + key: 'lastName', + width: 150, + render: (text) => (text ? text : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'last name' + }), + onFilter: (value, record) => + record.lastName?.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'Email', + dataIndex: 'email', + key: 'email', + width: 250, + render: (email) => + email ? ( + + {email} + + ) : ( + n/a + ), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'email' + }), + onFilter: (value, record) => + record.email?.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 180, + render: (text) => , + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'ID' + }), + onFilter: (value, record) => + record._id.toLowerCase().includes(value.toLowerCase()), + sorter: true + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + return + } else { + return 'n/a' + } + }, + sorter: true, + defaultSortOrder: 'descend' + }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + return + } else { + return 'n/a' + } + }, + sorter: true, + defaultSortOrder: 'descend' + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (record) => { + return ( + + + + + ) + } + } + ] + + const [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'Users', + columns + ) + + const visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) + + const actionItems = { + items: [ + { + label: 'Reload List', + key: 'reloadList', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reloadList') { + tableRef.current?.reload() + } + } + } + + return ( + + + + + + + + + + + + + + {currentStep < steps.length - 1 ? ( + + ) : ( + + )} + + +
+ ) +} + +NewUser.propTypes = { + onOk: PropTypes.func.isRequired, + reset: PropTypes.bool +} + +export default NewUser diff --git a/src/components/Dashboard/Management/Users/UserInfo.jsx b/src/components/Dashboard/Management/Users/UserInfo.jsx new file mode 100644 index 0000000..f35daa4 --- /dev/null +++ b/src/components/Dashboard/Management/Users/UserInfo.jsx @@ -0,0 +1,510 @@ +import React, { useState, useEffect } from 'react' +import { useLocation } from 'react-router-dom' +import axios from 'axios' +import { + Descriptions, + Spin, + Space, + Button, + message, + Typography, + Flex, + Form, + Input, + Collapse, + Dropdown, + Popover, + Card, + Checkbox +} from 'antd' +import { + LoadingOutlined, + ExportOutlined, + CaretLeftOutlined +} from '@ant-design/icons' +import IdText from '../../common/IdText' +import TimeDisplay from '../../common/TimeDisplay' +import ReloadIcon from '../../../Icons/ReloadIcon' +import EditIcon from '../../../Icons/EditIcon.jsx' +import XMarkIcon from '../../../Icons/XMarkIcon.jsx' +import CheckIcon from '../../../Icons/CheckIcon.jsx' +import useCollapseState from '../../hooks/useCollapseState' +import AuditLogTable from '../../common/AuditLogTable' +import DashboardNotes from '../../common/DashboardNotes' +import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' +import NoteIcon from '../../../Icons/NoteIcon.jsx' +import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' + +import config from '../../../../config.js' + +const { Title, Link, Text } = Typography + +const UserInfo = () => { + const [userData, setUserData] = useState(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + const location = useLocation() + const [messageApi, contextHolder] = message.useMessage() + const userId = new URLSearchParams(location.search).get('userId') + const [isEditing, setIsEditing] = useState(false) + const [form] = Form.useForm() + const [fetchLoading, setFetchLoading] = useState(true) + const [collapseState, updateCollapseState] = useCollapseState('UserInfo', { + info: true, + notes: true, + auditLogs: true + }) + + useEffect(() => { + if (userId) { + fetchUserDetails() + } + }, [userId]) + + useEffect(() => { + if (userData) { + form.setFieldsValue({ + username: userData.username || '', + name: userData.name || '', + firstName: userData.firstName || '', + lastName: userData.lastName || '', + email: userData.email || '' + }) + } + }, [userData, form]) + + const fetchUserDetails = async () => { + try { + setFetchLoading(true) + const response = await axios.get(`${config.backendUrl}/users/${userId}`, { + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + setUserData(response.data) + setError(null) + } catch (err) { + setError('Failed to fetch user details') + messageApi.error('Failed to fetch user details') + } finally { + setFetchLoading(false) + } + } + + const startEditing = () => { + updateCollapseState('info', true) + setIsEditing(true) + } + + const cancelEditing = () => { + // Reset form values to original data + if (userData) { + form.setFieldsValue({ + username: userData.username || '', + name: userData.name || '', + firstName: userData.firstName || '', + lastName: userData.lastName || '', + email: userData.email || '' + }) + } + setIsEditing(false) + } + + const updateInfo = async () => { + try { + const values = await form.validateFields() + setLoading(true) + + await axios.put(`${config.backendUrl}/users/${userId}`, values, { + headers: { + 'Content-Type': 'application/json' + }, + withCredentials: true + }) + + setUserData({ ...userData, ...values }) + setIsEditing(false) + messageApi.success('User information updated successfully') + } catch (err) { + if (err.errorFields) { + return + } + console.error('Failed to update user information:', err) + messageApi.error('Failed to update user information') + } finally { + fetchUserDetails() + setLoading(false) + } + } + + const actionItems = { + items: [ + { + label: 'Reload User', + key: 'reload', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reload') { + fetchUserDetails() + } + } + } + + const getViewDropdownItems = () => { + const sections = [ + { key: 'info', label: 'User Information' }, + { key: 'notes', label: 'Notes' }, + { key: 'auditLogs', label: 'Audit Logs' } + ] + + return ( + + + {sections.map((section) => ( + { + updateCollapseState(section.key, e.target.checked) + }} + > + {section.label} + + ))} + + + ) + } + + if (error) { + return ( + +

{error || 'User not found'}

+ +
+ ) + } + + return ( + <> + {contextHolder} + + + + + + + + + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' + > + + + + User Information + + + } + key='1' + > +
+ } + spinning={fetchLoading} + > + + + {userData?._id ? ( + + ) : ( + n/a + )} + + + + {userData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : userData?.name ? ( + {userData.name} + ) : ( + n/a + )} + + + + {userData?.updatedAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : userData?.username ? ( + {userData.username} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : userData?.firstName ? ( + {userData.firstName} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : userData?.email ? ( + + {userData.email + ' '} + + + ) : ( + n/a + )} + + + {isEditing ? ( + + + + ) : userData?.lastName ? ( + {userData.lastName} + ) : ( + n/a + )} + + + +
+ + + + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Logs + + + } + key='auditLogs' + > + + + + +
+ )} +
+ + ) +} + +export default UserInfo diff --git a/src/components/Dashboard/Management/Vendors.jsx b/src/components/Dashboard/Management/Vendors.jsx index 5aa49dc..2c4fa61 100644 --- a/src/components/Dashboard/Management/Vendors.jsx +++ b/src/components/Dashboard/Management/Vendors.jsx @@ -26,6 +26,9 @@ import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' @@ -37,6 +40,7 @@ const Vendors = () => { const [newVendorOpen, setNewVendorOpen] = useState(false) const tableRef = useRef() const { authenticated } = useContext(AuthContext) + const [viewMode, setViewMode] = useViewMode('Vendors') const getFilterDropdown = ({ setSelectedKeys, @@ -117,9 +121,8 @@ const Vendors = () => { const columns = [ { - title: '', - dataIndex: '', - key: '', + title: , + key: 'icon', width: 40, fixed: 'left', render: () => @@ -282,7 +285,7 @@ const Vendors = () => { key: 'actions', fixed: 'right', width: 150, - render: (text, record) => { + render: (record) => { return ( + + + + + + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' > - - - - - + + + Vendor Information + + + } + key='1' + > + + } + spinning={fetchLoading} + > + + + {vendorData?._id ? ( + + ) : ( + n/a + )} + + + {vendorData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.name ? ( + {vendorData.name} + ) : ( + n/a + )} + + + + {vendorData?.updatedAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.website ? ( + + {new URL(vendorData.website).hostname + ' '} + + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.country ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.contact ? ( + {vendorData.contact} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.phone ? ( + {vendorData.phone} + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : vendorData?.email ? ( + + {vendorData.email + ' '} + + + ) : ( + n/a + )} + + + + + + + + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Logs + + + } + key='auditLogs' + > + - - - - {isEditing ? ( - - - - ) : ( - vendorData.name - )} - - - - - - - - {isEditing ? ( - - - - ) : vendorData.website ? ( - - {new URL(vendorData.website).hostname + ' '} - - - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : vendorData.country ? ( - - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : vendorData.contact ? ( - vendorData.contact - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : vendorData.phone ? ( - vendorData.phone - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : vendorData.email ? ( - - {vendorData.email + ' '} - - - ) : ( - 'n/a' - )} - - - - - + + + +
+ )}
- + ) } diff --git a/src/components/Dashboard/Production/GCodeFiles.jsx b/src/components/Dashboard/Production/GCodeFiles.jsx index 2f60a6a..c6287c9 100644 --- a/src/components/Dashboard/Production/GCodeFiles.jsx +++ b/src/components/Dashboard/Production/GCodeFiles.jsx @@ -31,6 +31,9 @@ import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import TimeDisplay from '../common/TimeDisplay' import DashboardTable from '../common/DashboardTable' +import ListIcon from '../../Icons/ListIcon' +import GridIcon from '../../Icons/GridIcon' +import useViewMode from '../hooks/useViewMode' import config from '../../../config' @@ -42,6 +45,7 @@ const GCodeFiles = () => { const [newGCodeFileOpen, setNewGCodeFileOpen] = useState(false) const [showDeleted, setShowDeleted] = useState(false) const tableRef = useRef() + const [viewMode, setViewMode] = useViewMode('GCodeFiles') const getFilterDropdown = ({ setSelectedKeys, @@ -82,12 +86,11 @@ const GCodeFiles = () => { // Column definitions const columns = [ { - title: '', - dataIndex: '', - key: '', + title: , + key: 'icon', width: 40, fixed: 'left', - render: () => + render: () => }, { title: 'Name', @@ -121,12 +124,14 @@ const GCodeFiles = () => { }, { title: 'Filament', - dataIndex: ['filament', 'name'], key: 'filament', width: 200, - render: (text, record) => { + render: (record) => { return ( - + ) }, filterDropdown: ({ @@ -151,17 +156,16 @@ const GCodeFiles = () => { key: 'cost', width: 120, render: (cost) => { - return '£' + cost.toFixed(2) + return '£' + cost?.toFixed(2) }, sorter: true }, { title: 'Print Time', key: 'estimatedPrintingTimeNormalMode', - dataIndex: ['gcodeFileInfo', 'estimatedPrintingTimeNormalMode'], width: 140, - render: (text, record) => { - return `${record.gcodeFileInfo.estimatedPrintingTimeNormalMode}` + render: (record) => { + return `${record?.gcodeFileInfo?.estimatedPrintingTimeNormalMode}` }, sorter: true }, @@ -198,7 +202,7 @@ const GCodeFiles = () => { key: 'actions', fixed: 'right', width: 150, - render: (text, record) => { + render: (record) => { return ( - - - - - - + + + + + + + + + + + - - ) + const actionItems = { + items: [ + { + label: 'Edit GCode File', + key: 'edit', + icon: + }, + { + label: 'Delete GCode File', + key: 'delete', + icon: , + danger: true + }, + { type: 'divider' }, + { + label: 'Reload GCode File', + key: 'reload', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reload') { + fetchGCodeFileDetails() + } + } } - if (fetchLoading) { + const getViewDropdownItems = () => { + const sections = [ + { key: 'info', label: 'GCode File Information' }, + { key: 'preview', label: 'GCode File Preview' }, + { key: 'notes', label: 'Notes' }, + { key: 'auditLogs', label: 'Audit Logs' } + ] + return ( -
- } /> -
+ + + {sections.map((section) => ( + { + updateCollapseState(section.key, e.target.checked) + }} + > + {section.label} + + ))} + + ) } return ( -
+ <> {contextHolder} - - updateCollapseState('info', keys.length > 0)} - expandIcon={({ isActive }) => ( - - )} - className='no-h-padding-collapse no-t-padding-collapse' - > - - - GCode File Information - - - {isEditing ? ( - <> - + + + + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' + > + + + + GCode File Information + + + } + key='info' + > +
+ } + > + + + {gcodeFileData?._id ? ( + + ) : ( + n/a + )} + + + {gcodeFileData?.createdAt ? ( + + ) : ( + n/a + )} + + + + {isEditing ? ( + + + + ) : gcodeFileData?.name ? ( + {gcodeFileData.name} + ) : ( + n/a + )} + + + + {gcodeFileData?.updatedAt ? ( + + ) : ( + n/a + )} + + + {isEditing ? ( + + + + ) : gcodeFileData?.filament ? ( + + + + + ) : ( + n/a + )} + + + {gcodeFileData?.filament ? ( + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo + ?.estimatedPrintingTimeNormalMode ? ( + + { + gcodeFileData.gcodeFileInfo + .estimatedPrintingTimeNormalMode + } + + ) : ( + n/a + )} + + + {gcodeFileData?.cost ? ( + {'£' + gcodeFileData.cost.toFixed(2)} + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.sparseInfillDensity ? ( + + {gcodeFileData.gcodeFileInfo.sparseInfillDensity} + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.sparseInfillPattern ? ( + + {capitalizeFirstLetter( + gcodeFileData.gcodeFileInfo.sparseInfillPattern + )} + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.filamentUsedMm ? ( + + {gcodeFileData.gcodeFileInfo.filamentUsedMm}mm + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.filamentUsedG ? ( + + {gcodeFileData.gcodeFileInfo.filamentUsedG}g + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.nozzleTemperature ? ( + + {gcodeFileData.gcodeFileInfo.nozzleTemperature}° + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.hotPlateTemp ? ( + + {gcodeFileData.gcodeFileInfo.hotPlateTemp}° + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.filamentSettingsId ? ( + + {gcodeFileData.gcodeFileInfo.filamentSettingsId.replaceAll( + '"', + '' + )} + + ) : ( + n/a + )} + + + {gcodeFileData?.gcodeFileInfo?.printSettingsId ? ( + + {gcodeFileData.gcodeFileInfo.printSettingsId.replaceAll( + '"', + '' + )} + + ) : ( + n/a + )} + + + +
+ + + + + updateCollapseState('preview', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + GCode File Preview + + + } + key='preview' + > + }> + + {gcodeFileData?.gcodeFileInfo?.thumbnail ? ( + GCodeFile + ) : ( + n/a + )} + + + + + + + updateCollapseState('notes', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Notes + + + } + key='notes' + > + + + + + + + + updateCollapseState('auditLogs', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse' + > + + + + Audit Log + + + } + key='auditLogs' + > + + + + +
+ )}
-
+ ) } diff --git a/src/components/Dashboard/Production/Jobs.jsx b/src/components/Dashboard/Production/Jobs.jsx index 4de127f..be54fc8 100644 --- a/src/components/Dashboard/Production/Jobs.jsx +++ b/src/components/Dashboard/Production/Jobs.jsx @@ -37,6 +37,9 @@ import PauseCircleIcon from '../../Icons/PauseCircleIcon.jsx' import XMarkCircleIcon from '../../Icons/XMarkCircleIcon.jsx' import QuestionCircleIcon from '../../Icons/QuestionCircleIcon.jsx' import DashboardTable from '../common/DashboardTable' +import ListIcon from '../../Icons/ListIcon.jsx' +import GridIcon from '../../Icons/GridIcon.jsx' +import useViewMode from '../hooks/useViewMode.js' import config from '../../../config.js' @@ -49,6 +52,7 @@ const Jobs = () => { const navigate = useNavigate() const [newJobOpen, setNewJobOpen] = useState(false) const tableRef = useRef() + const [viewMode, setViewMode] = useViewMode('Jobs') const getFilterDropdown = ({ setSelectedKeys, @@ -89,20 +93,18 @@ const Jobs = () => { // Column definitions const columns = [ { - title: '', - dataIndex: '', - key: '', + title: , + key: 'icon', width: 40, fixed: 'left', render: () => }, { title: 'GCode File Name', - dataIndex: 'gcodeFile', key: 'gcodeFileName', width: 200, fixed: 'left', - render: (gcodeFile) => {gcodeFile.name}, + render: (record) => {record?.gcodeFile?.name}, filterDropdown: ({ setSelectedKeys, selectedKeys, @@ -162,7 +164,7 @@ const Jobs = () => { propertyName: 'state' }), onFilter: (value, record) => - record.state.type.toLowerCase().includes(value.toLowerCase()) + record?.state?.type?.toLowerCase().includes(value.toLowerCase()) }, { title: , @@ -226,13 +228,13 @@ const Jobs = () => { }, { title: 'Actions', - key: 'operation', + key: 'actions', fixed: 'right', width: 150, render: (record) => { return ( - {record.state.type === 'draft' ? ( + {record?.state?.type === 'draft' ? ( - - - - - + + + + + + + + + + + @@ -284,24 +289,35 @@ const Printers = () => { <> {contextHolder} - - - - - - - - + + + + + + + + + + + - + + + {sections.map((section) => ( + { + updateCollapseState(section.key, e.target.checked) + }} + > + {section.label} + + ))} + + ) } return ( -
+ <> {contextHolder} - - updateCollapseState('info', keys.length > 0)} - expandIcon={({ isActive }) => ( - - )} - className='no-h-padding-collapse no-t-padding-collapse' - > - - - Printer Information - - - {isEditing ? ( - <> - + + - View + + + + {isEditing ? ( + <> + + + ) : ( +
+ + + updateCollapseState('info', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} + className='no-h-padding-collapse no-t-padding-collapse' > - {/* Read-only fields */} - - - - - - - - {/* Editable fields */} - - {isEditing ? ( - + + + Printer Information + + + } + key='info' + > + + } > - - - ) : ( - printerData.name || 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - printerData.moonraker?.host || 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - - - {printerData?.vendor?.name || 'n/a'} - - )} - - - - {printerData?.vendor ? ( - - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - printerData.moonraker.port - )} - - - - {isEditing ? ( - - - -
+ )}
-
+ ) } diff --git a/src/components/Dashboard/Production/ProductionOverview.jsx b/src/components/Dashboard/Production/ProductionOverview.jsx index 8cd9f91..4c32241 100644 --- a/src/components/Dashboard/Production/ProductionOverview.jsx +++ b/src/components/Dashboard/Production/ProductionOverview.jsx @@ -12,7 +12,7 @@ import { Segmented, Card } from 'antd' -import { LoadingOutlined, CaretRightOutlined } from '@ant-design/icons' +import { LoadingOutlined, CaretLeftOutlined } from '@ant-design/icons' import { Line } from '@ant-design/charts' import axios from 'axios' import PrinterIcon from '../../Icons/PrinterIcon' @@ -151,11 +151,11 @@ const ProductionOverview = () => { updateCollapseState('overview', keys.length > 0)} expandIcon={({ isActive }) => ( - @@ -275,13 +275,13 @@ const ProductionOverview = () => { updateCollapseState('printerStats', keys.length > 0) } expandIcon={({ isActive }) => ( - @@ -357,13 +357,13 @@ const ProductionOverview = () => { updateCollapseState('jobStats', keys.length > 0) } expandIcon={({ isActive }) => ( - diff --git a/src/components/Dashboard/Production/ProductionSidebar.jsx b/src/components/Dashboard/Production/ProductionSidebar.jsx new file mode 100644 index 0000000..65b3d50 --- /dev/null +++ b/src/components/Dashboard/Production/ProductionSidebar.jsx @@ -0,0 +1,56 @@ +import React from 'react' +import { useLocation } from 'react-router-dom' +import DashboardSidebar from '../common/DashboardSidebar' +import ProductionIcon from '../../Icons/ProductionIcon' +import PrinterIcon from '../../Icons/PrinterIcon' +import JobIcon from '../../Icons/JobIcon' +import GCodeFileIcon from '../../Icons/GCodeFileIcon' + +const items = [ + { + key: 'overview', + icon: , + label: 'Overview', + path: '/dashboard/production/overview' + }, + { type: 'divider' }, + { + key: 'printers', + icon: , + label: 'Printers', + path: '/dashboard/production/printers' + }, + { + key: 'jobs', + icon: , + label: 'Jobs', + path: '/dashboard/production/jobs' + }, + { + key: 'gcodefiles', + icon: , + label: 'GCode Files', + path: '/dashboard/production/gcodefiles' + } +] + +const routeKeyMap = { + '/dashboard/production/overview': 'overview', + '/dashboard/production/printers': 'printers', + '/dashboard/production/jobs': 'jobs', + '/dashboard/production/gcodefiles': 'gcodefiles' +} + +const ProductionSidebar = (props) => { + const location = useLocation() + const selectedKey = (() => { + const match = Object.keys(routeKeyMap).find((path) => + location.pathname.startsWith(path) + ) + return match ? routeKeyMap[match] : 'overview' + })() + + return +} + +export default ProductionSidebar diff --git a/src/components/Dashboard/common/AuditLogTable.jsx b/src/components/Dashboard/common/AuditLogTable.jsx index e77a32e..5a22f06 100644 --- a/src/components/Dashboard/common/AuditLogTable.jsx +++ b/src/components/Dashboard/common/AuditLogTable.jsx @@ -1,9 +1,10 @@ import React, { forwardRef, useState } from 'react' -import { Typography, Space, Descriptions, Badge, Tag, Table } from 'antd' +import { Typography, Space, Descriptions, Badge, Table } from 'antd' import PropTypes from 'prop-types' import IdText from './IdText' import { AuditOutlined, LoadingOutlined } from '@ant-design/icons' import TimeDisplay from '../common/TimeDisplay' +import BoolDisplay from './BoolDisplay' const { Text } = Typography @@ -19,7 +20,11 @@ const isObjectId = (value) => { const formatValue = (value, propertyName) => { if (value === null || value === undefined || value === '') { - return n/a + return ( +
+ n/a +
+ ) } // Handle colors specifically @@ -42,11 +47,7 @@ const formatValue = (value, propertyName) => { } if (typeof value === 'boolean' || value === true || value === false) { - return ( - - {value ? 'Yes' : 'No'} - - ) + return } if (isObjectId(value)) { diff --git a/src/components/Dashboard/common/BoolDisplay.jsx b/src/components/Dashboard/common/BoolDisplay.jsx new file mode 100644 index 0000000..3653503 --- /dev/null +++ b/src/components/Dashboard/common/BoolDisplay.jsx @@ -0,0 +1,41 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { Space, Tag } from 'antd' +import CheckIcon from '../../Icons/CheckIcon' +import XMarkIcon from '../../Icons/XMarkIcon' + +const BoolDisplay = ({ + value, + yesNo, + showIcon = true, + showText = true, + showColor = true +}) => { + var falseText = 'False' + var trueText = 'True' + if (yesNo) { + falseText = 'No' + trueText = 'Yes' + } + return ( + + : : undefined} + > + {showText ? (value === true ? trueText : falseText) : null} + + + ) +} + +BoolDisplay.propTypes = { + value: PropTypes.bool.isRequired, + yesNo: PropTypes.bool, + showIcon: PropTypes.bool, + showText: PropTypes.bool, + showColor: PropTypes.bool +} + +export default BoolDisplay diff --git a/src/components/Dashboard/common/DashboardBreadcrumb.jsx b/src/components/Dashboard/common/DashboardBreadcrumb.jsx index 175e036..01db842 100644 --- a/src/components/Dashboard/common/DashboardBreadcrumb.jsx +++ b/src/components/Dashboard/common/DashboardBreadcrumb.jsx @@ -9,6 +9,7 @@ const breadcrumbNameMap = { '/dashboard/production': 'Production', '/dashboard/inventory': 'Inventory', '/dashboard/management': 'Management', + '/dashboard/developer': 'Developer', '/dashboard/production/overview': 'Overview', '/dashboard/production/printers': 'Printers', '/dashboard/production/printers/control': 'Control', @@ -29,6 +30,8 @@ const breadcrumbNameMap = { '/dashboard/management/materials/info': 'Info', '/dashboard/management/notetypes': 'Note Types', '/dashboard/management/notetypes/info': 'Info', + '/dashboard/management/users': 'Users', + '/dashboard/management/users/info': 'Info', '/dashboard/management/settings': 'Settings', '/dashboard/management/auditlogs': 'Audit Logs', '/dashboard/inventory/filamentstocks': 'Filament Stocks', @@ -40,7 +43,10 @@ const breadcrumbNameMap = { '/dashboard/inventory/stockevents': 'Stock Events', '/dashboard/inventory/stockevents/info': 'Info', '/dashboard/inventory/stockaudits': 'Stock Audits', - '/dashboard/inventory/stockaudits/info': 'Info' + '/dashboard/inventory/stockaudits/info': 'Info', + '/dashboard/developer/sessionstorage': 'Session Storage', + '/dashboard/developer/authcontextdebug': 'Auth Context Debug', + '/dashboard/developer/socketcontextdebug': 'Socket Context Debug' } const DashboardBreadcrumb = () => { diff --git a/src/components/Dashboard/common/DashboardNavigation.jsx b/src/components/Dashboard/common/DashboardNavigation.jsx index 889f234..19acece 100644 --- a/src/components/Dashboard/common/DashboardNavigation.jsx +++ b/src/components/Dashboard/common/DashboardNavigation.jsx @@ -9,7 +9,8 @@ import { Button, Tooltip, Typography, - Divider + Divider, + Badge } from 'antd' import { LogoutOutlined, @@ -20,6 +21,7 @@ import { import { AuthContext } from '../context/AuthContext' import { SocketContext } from '../context/SocketContext' import { SpotlightContext } from '../context/SpotlightContext' +import { NotificationContext } from '../context/NotificationContext' import { useNavigate, useLocation } from 'react-router-dom' import { Header } from 'antd/es/layout/layout' import { useMediaQuery } from 'react-responsive' @@ -33,12 +35,15 @@ import CloudIcon from '../../Icons/CloudIcon' import BellIcon from '../../Icons/BellIcon' import SearchIcon from '../../Icons/SearchIcon' import SettingsIcon from '../../Icons/SettingsIcon' +import DeveloperIcon from '../../Icons/DeveloperIcon' const { Text } = Typography const DashboardNavigation = () => { const { logout, userProfile } = useContext(AuthContext) const { showSpotlight } = useContext(SpotlightContext) + const { toggleNotificationCenter, unreadCount } = + useContext(NotificationContext) const { socket } = useContext(SocketContext) const [socketState, setSocketState] = useState('disconnected') const navigate = useNavigate() @@ -168,12 +173,14 @@ const DashboardNavigation = () => { onClick={() => showSpotlight()} > - + + + {socketState === 'connected' ? ( @@ -206,10 +213,15 @@ const DashboardNavigation = () => { {process.env.NODE_ENV === 'development' && ( - - - Dev - + + } + onClick={() => { + navigate('/dashboard/developer/sessionstorage') + }} + /> )} diff --git a/src/components/Dashboard/common/DashboardNotes.jsx b/src/components/Dashboard/common/DashboardNotes.jsx index e879e23..f160ce4 100644 --- a/src/components/Dashboard/common/DashboardNotes.jsx +++ b/src/components/Dashboard/common/DashboardNotes.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React, { useCallback, useContext, useEffect, useState } from 'react' import PropTypes from 'prop-types' import { Card, @@ -9,31 +9,464 @@ import { Modal, Form, Input, - Select, - Switch + Switch, + Spin, + Alert, + message, + Divider, + Tag, + Dropdown } from 'antd' +import { CaretLeftFilled, LoadingOutlined } from '@ant-design/icons' import PlusIcon from '../../Icons/PlusIcon' +import BinIcon from '../../Icons/BinIcon' +import PersonIcon from '../../Icons/PersonIcon' import TimeDisplay from './TimeDisplay' import MarkdownDisplay from './MarkdownDisplay' +import axios from 'axios' +import config from '../../../config' +import { AuthContext } from '../context/AuthContext' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import NoteTypeSelect from './NoteTypeSelect' +import IdText from './IdText' +import ReloadIcon from '../../Icons/ReloadIcon' +import ExclamationOctagonIcon from '../../Icons/ExclamationOctagonIcon' -const { Text } = Typography +const { Text, Title } = Typography const { TextArea } = Input -const DashboardNotes = ({ notes = [], onNewNote }) => { - const [isModalOpen, setIsModalOpen] = useState(false) - const [showMarkdown, setShowMarkdown] = useState(false) - const [form] = Form.useForm() +const NoteItem = ({ + note, + expandedNotes, + setExpandedNotes, + fetchData, + onNewNote, + onDeleteNote, + userProfile, + onChildNoteAdded +}) => { + const [childNotes, setChildNotes] = useState({}) + const [loadingChildNotes, setLoadingChildNotes] = useState(null) - const handleNewNote = () => { - setIsModalOpen(true) + const isExpanded = expandedNotes[note._id] + const hasChildNotes = childNotes[note._id] && childNotes[note._id].length > 0 + const isThisNoteLoading = loadingChildNotes === note._id + + let transformValue = 'rotate(0deg)' + if (isExpanded) { + transformValue = 'rotate(-90deg)' } + const handleNoteExpand = async (noteId) => { + const newExpandedState = !expandedNotes[noteId] + + setExpandedNotes((prev) => ({ + ...prev, + [noteId]: newExpandedState + })) + + if (newExpandedState && !childNotes[noteId]) { + setLoadingChildNotes(noteId) + try { + const childNotesData = await fetchData(noteId) + setChildNotes((prev) => ({ + ...prev, + [noteId]: childNotesData + })) + } catch (error) { + console.error('Error fetching child notes:', error) + } finally { + setLoadingChildNotes(null) + } + } + } + + const handleNewChildNote = () => { + if (onNewNote) { + onNewNote(note._id) + } + } + + const handleDeleteNote = () => { + if (onDeleteNote) { + onDeleteNote(note._id) + } + } + + // Reload child notes when a new child note is added + const reloadChildNotes = async () => { + // Always fetch child notes when this function is called + // This ensures child notes are loaded even if the parent wasn't expanded before + setLoadingChildNotes(note._id) + try { + const childNotesData = await fetchData(note._id) + setChildNotes((prev) => ({ + ...prev, + [note._id]: childNotesData + })) + } catch (error) { + console.error('Error fetching child notes:', error) + } finally { + setLoadingChildNotes(null) + } + } + + // Listen for child note additions + useEffect(() => { + if (onChildNoteAdded) { + onChildNoteAdded(note._id, reloadChildNotes) + } + }, [note._id, onChildNoteAdded]) + + // Check if the current user can delete this note + const canDeleteNote = userProfile && userProfile._id === note.user._id + + const dropdownItems = [ + { + key: 'new', + icon: , + label: 'New Note', + onClick: handleNewChildNote + } + ] + + // Only add delete option if user owns the note + if (canDeleteNote) { + dropdownItems.push({ + key: 'delete', + label: 'Delete Note', + icon: , + onClick: handleDeleteNote, + danger: true + }) + } + + return ( + + + + + + {note.user.name}: + +
+ +
+
+ + + + + + + Type: + + {note.noteType.name} + + + + User ID: + + + + Created At: + + + + + + + + -