From 635f73c1be41195a77676c95e97f24d7b5fce53d Mon Sep 17 00:00:00 2001 From: Mann Patel <130435633+MannPatel0@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:09:06 -0600 Subject: [PATCH] update to listingspage --- frontend/public/icon/apple-touch-icon.png | Bin 3064 -> 0 bytes frontend/public/icon/favicon.ico | Bin 5238 -> 5238 bytes frontend/public/icon/icon-192-maskable.png | Bin 3420 -> 0 bytes frontend/public/icon/icon-192.png | Bin 7250 -> 0 bytes frontend/public/icon/icon-512-maskable.png | Bin 12773 -> 0 bytes frontend/public/icon/icon-512.png | Bin 24247 -> 23574 bytes frontend/src/App.jsx | 22 - frontend/src/components/Navbar.jsx | 2 +- frontend/src/components/ProductForm.jsx | 240 +++++++-- frontend/src/pages/Favorites.jsx | 2 +- frontend/src/pages/MyListings.jsx | 550 --------------------- frontend/src/pages/SearchPage.jsx | 4 +- frontend/src/pages/Selling.jsx | 323 +++++++----- frontend/src/pages/Transactions.jsx | 13 +- 14 files changed, 400 insertions(+), 756 deletions(-) delete mode 100644 frontend/public/icon/apple-touch-icon.png delete mode 100644 frontend/public/icon/icon-192-maskable.png delete mode 100644 frontend/public/icon/icon-192.png delete mode 100644 frontend/public/icon/icon-512-maskable.png delete mode 100644 frontend/src/pages/MyListings.jsx diff --git a/frontend/public/icon/apple-touch-icon.png b/frontend/public/icon/apple-touch-icon.png deleted file mode 100644 index b69ea23198f7e583f1daa400087a29f61ac3e979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3064 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 diff --git a/frontend/public/icon/icon-512-maskable.png b/frontend/public/icon/icon-512-maskable.png deleted file mode 100644 index 4066f483fbf8feb09c1d6111bec7ce66b9b40b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12773 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%0ApB&EVKzU)6l66ulZfUuRGe+h2n=roprq!Zoeh?b z+>fGvyN^Z@@9uKFe@(`#Zq&|@{MSX2Cw*X#YWgHW-gNkuZF_o;BAhP!GXI%VYNl4T z7!f}P7kgMG+`NN_%;gQ}EY6Yzm$mi}N) znID*N8S>WAt$Lhx*h{6tzKpPwGv-^(#TWW~CSdB1Aeu}7d$LL|x(9X9%1S=6=G&79 z15;CJMe_pR*G)&6)6u*m#VunRp2GI{TTh<{0I2}jXfR314~*t85(0DK&}C(X3hT$2 z8V?q9vQn`gW$>w?wI`(J>*umDBkenAO1XvPa1rNlG3QSMx&w8k_2%X2tyEBqlG=)n zry>}7VTLF;?PZU3!6{RbK{YF^@wuadCV37d&z#|kmd}qig8Vm@{JCh`{p;h~^@Om- zrD_W(;+QFjnMvmJny*+btt4H0x!4g{*6a2~N}A@8k@3_vb@SL!<&S%aWaEUOXV4m#h2RhDTTfP~x}>H1z`e{$F8R7!aa0<7GNF>Ibok-QYmJ=(;=du_XP{@Q`$oqp;y);>e*ORe literal 24247 zcmZ5|cRbba`~T}42j`$1gd{n3vMDnhdxmTwmAxgBeU20&duE0*BU^SQd(VuJy|VZG zy-4rR@A3VEbG%;nxbEw|?(2G9;})Q%B6o@48UX+RmlWis)d2tseuV;XJn&=dMc)DV z0ePk_Ckff^>9G#|d)5Lr4Un{%0*V`>bhAzo+1&ST9!+gy?_WMm_?pol=e zyb6O#^YQ;ObRHj*>9$Jod$;mQ#3N(SP|I^^^x4kI^Tgr9q-QHa(R303w1)X}=HvU~ zB9Dnxeg@E~e7iBN+kuYwjQ^m4$YELf%arc%jHmd0$q-&4MGZMx*FU!G88J_DA8yp> z5;t3mG}KR5SKVWl8>^o&kUX)zcO&|lcAgO1YW$2KL*qiVXJO<*K#^;#*iCUjjGVXtg|vfCj><8S?p(F>Ppc0L zq3{#yd7eu$SuE#|bAz+PIkxI@#Hl;}8(-r)fo*=$`BEEhYECc29}BH2)j6P{ex9j= zULz{YQK-k>DO-}da9@7_g7yyzxOKwt*<;`FaE5Ixmc7GHa@3Le%`@87*!ma7dQ&pP z1&%=x4B3CwCV?Wk;N769<{D!HZSH@Pu*7&2M%buxYqkG(ovSv4VhIphY|Ii}m@^eHbjhj5zx93zlKRLVW zN_$FEZP{Y-g3R?f2f+=PgUgT5gP(E8@@GH7H^yXa`F=>Whc21P$Lu({_8TiQ&x8tC zLsy%k^i7&f0;}wzX$#uhZDs7mYn)6q2ACY_VD$1B0OcbqH?xIkbG1^rUz_$aFFbF7 z%~q&>!H7=Bh_f+vONlN6AGV`NW8X|X9FJ&plY0GNOps@Oeu;Y4&SEpgE*pbJA&>y9 z#|Hj~0=qc8_?YAQMv4#{zUxbLx|;k{q) zC$g~hNC!Uvf)O!by@P^<7p>7)M++Y6(Qi0!xFre(bwfyKdHCoibPwxG8)BFPLiQ}aV%z~iEu2Tn@p#?`|sWgQf9-Y=b&#!;6h@V-3KETde1tczHVx#1II zQa-_ifIk%OeQ-p-3IAqgwY3-oZmqedAmuHnV~n@$-N)lM`L@hkiBI09juxx2`t$D7 zf7bFsdUL5>tGZf5RvR;h)!ESEo}tw^2sF zyf<<_=n9zA_IJwZ7Z1G{lkJzBcfM?I4$`XbKG~2!!NJZxkC;rB!|JNE?ijyWuIC6} zr*OTyY_`x-o!uDN1Yn&If&)t%<#W%%kB3TqkCzXAlpORy5Kt^L8bDfX%INRm=1`~> zKCvxpzP44?{OjbCr16vDfRt)E*z*?RIle-c@4YHj^9v<`I@L?}t2J@3Rir4OiA{yz zSv*?Hu-})zHI6M}Z&uOp*>u;8lLGSQ73^;MH7*!06B-C* z<=JpoK{Kykim^Kusb3i9bU7#s1js}weF*5f_#l6%Ua0$ESxn0(5OLBkKF=vNL9pLQ zP{7UW?p7oWe6UNFy-Xcf&5W}SFwucg|vQ@4T)(mu8pcDeBeVb z=qL-y0ouui27YhG?)0GC_!raEflEML8Lp&-uP=HRmK41Ytqo|VtA=v9BuA;zP0&D~ zz^bl>1|`gC-;ipsR)1wnoK;O`z)Z~ZQG-7Y^mDS8w=fW z%ur|e@hjSoo)rp3&L`CM_7rK4Fym8`I$!oLS|CFK^2y{vT=b!%L5;!V3`VKfzAPns zb~hdoLg3}n=;6`8o>{9z>E-+U42}p#*c&Fm9}~9uY4V#Kr4ch(ks07OqNik!ntE5v#mE3^SAML{ z2Osi6mj*>WyFHpRwzMM$Bnp80(HQnWImv#vzVY2LUo$m0nf%b;!@b|grT|PHcex~V zTW)|O?^mLRg28n+khAXvp6(DZ56%mi#VN1oGk+M3^i(iFK;SQwCvfA~_Z-4_h>PYh zjng=qG!Qfv7puPKxMkr(kxe34mT9>YosTz9avI(=^ty5- zLUHba`nGGfwRVlrDkr9?VtQAp`G8#BD_)iEer)qUI3{UG{(XJa^0hO?H_aco`l97?? z2irDtld84eo*D7N?{ZbI0GOma+G~rrsVXU%C1`)BBKx&~WG4Ns4+CQcW99u%V^&UvdVZbiQQ>ROjkDBer(Og1 zmI}+qD=?A4%f3cNMe%~CNU51d6J)+bi2$}y@TtlRg^9vhH^PxJW@bn0N5xC zN&++L;NflSTx}<=OmGtv70fl2A94rgVs%z1VHgUDhECpn82uQ#DxiJm zh#ND>PMkqMSKJ8N#_xLVPlOFcT9Ap>nE#j>x30=q{}eiZh3XC* zfSOqi<+;S=&hBOu#x;I|kkLE^cO#TEw7otlObd2uSW4|Bn11WEItNHZ?DmS*9frUs z>-q9hhlT!kxlvCTm_agVptLP-n_WgG3;b^A8@Qu{t?+d;pcvq%-DAUk8s33Zaw_|r z%b0S1I0P;ohcWJNw(pm+&R$CP=Y5TuR{^NO=5)81^U-ES#}Ae>7DFW-RSUjbZBqZXghOZR>&pnN z#T956o*0o8aBjv~_~Sr8dDn-Id=QuzAwrl0b|x;tfzjXZo@PaDM;T8AZ<{;57e3W( zz;%GYPyoc6%s=qOc(7ha?H$cKRde?D)97d*7~JFX0=g8!%4!7$1h{$W+Vnv3-_PuHuXK#iY7Vv zP|Fw?eH#Yg7VhS*dKbK?Uwdg3^UCwYK>F%K6i+4v6f_F&;nyQyy*$}Ie)+w&WF32I z!4ZkPpBDq900YUj*=8PXDn~L_AH5-rDT;7V$(*22D)S=izQ^8Y`tc8OKq>=nMEl)R zXHej&O%KOrHcU?E?&iH)1Xl>(3#+q1KpT|xg*U5h+4xtt(=d;t6v`v2=+*A)8?qWc z^k&`m9L*6vQ;irj8h)hmTKe=u!N)v0)CS%|WjEk1@B6#sr?_!jg$CJ`18KLi@Xi{B z!h<4`y7e?x6T7SagmJ|CFuqVT{eWL*+S+~wSjRtZ)J8Y$Pf z(rZ)GwO8Cew(>p4e9NAm7ZjlUq+zHpn%nPqBAdNe5!kPG8{8QzH|d^sf$_1%864%l zHHV*g73$DTP#D))TyDH%Qp;7TiTeXI#7Hj-lHfor>+ZdglH=c>4pZM3yF4HTrsK9#hZj}l!@Rlh zMfPXnIDUYNB8-vy7wB7{!MZOJOL%Sent)w^USI>42x#wSZbN_9% z+i*2saI3LTzPHmmm!UH(7;WIUWFnP}f8AK2toF{A@0Mp!1LXBXgsxP2xnA!|{Bv11 zDF1B9Je)!n2u;f^huC-~xW5u|%|Pr;&=V>cp!dKq;dH$D zL+i}V_Ch!(c&foYSw?JyE7?b&>g17Y$~!-#cNL)+BHLQf1*=@P#@XVjopHQk`a)=k z4iq~y${W__*B*tctMG0pH0QVZiK@(v=wYf;uUiNY_o&G89x6!R9IW&Py{|JV^{W$5 zxh%MYI>b-6N4fz$CU=$&jo5E!_LUk?q}T0dGzZz7QG1us!Fqk@VZq5Wd-t8XcW)8I zOP6f4V1Q+;%IZ->$9TaB|J!8~(1d{GLXn}=#rmx+D#K~CSNGfUl2_>A^I!2`fGE(z zbNU@8`03m@4vX09v%`%Ky#|ZCy<2LkQrFvtm>;8u0lzkRvJl>)!PETag&D`sO{y#&g1Bd#L&5qQf8CU* zvqV63`S!ixI?yW2~ zHi*$=uAQruIt1hH<a7rzx#a5NVu+)Ng}4XcQvuVdWk`Q z>}~jL;=;9k;E|W-j143${%~}Z3e|CDX))+bc#tDIpIeJ(Z>gR4i=`Sh%joyK&tLCL zMS0%;o@!ZYd@P>Y_vgJjk?ENXpi@MkWlQ$82bdM!SI0$7ctC$i|98-0jQeAAzS)^< z{gpx`xMmiynvp{@3yBa(Gk_M@wJb@f4MWf+2l^-8Cp#BvPG*!C+7o-=8z}zf+i4gP zaKImRT5@%F={`5N@ZUpK2CGThK>RWznDPrF1Skfyy}vr<))J)gbc3i5lr&zJ6fp@; zsaYMo!#DD{0C`D&RL`IM4sZ15_Saiy4N#$SP@FyiMo;M*gxl`-!w|qN?f%hu-43HS z5}ccr_d`M0b0)DY4si$YZStf+gA@V=5}?gUi|--PA?3HdDcnirlJk)!yrHx@M(@SG zpQg@oKAy+H=#8H~c?xR%S5B*=5h9$5XVU>#H8LdFNXk<#bNkASBrOnh)oX1jn8)Z+ zC0+O5$u^|Wp05vrk0NKs)g@_wrh%H>*5wZIT`n)ibLK(BN!7;Ri`9n|&M1BC!UG5w z+3b1d5>D4VzNTJ3S56?__`N6PD)V$^_@be?|hIS)X#^2Ujp4?tG*0h+4q;<_;LcF{RuVn2cDl^2A|>G zvz?xnoUmpc4_Bh9spQv$pk)mE@4AkvCVIEIq?4STBhXkVqCVCzEg1V`ORzZlF$1BV zi5c^0)Ts5}C~3smOEG3t4Kw>D1WF6A=jK#MHJCX~CeKXe6Q%wgS`e_0t-?QDUSZo+js-f8rP!UpUFz zTUM^=gB@#5NvY>lz=J-wVhir|=`JT)ub8ZiB| zYNmXDZJ8%6KbS!yRUYYo3-V>1y^zd4@W7i=6Ndc*(N)v0ZYxY!CD_ACyb2jbHbtYy zCu_`JEI9BLuEP0ponotKqdjOw%|oe1-9uT~Se3>W%=Nt*mx|3NOj;G5rSE47InHJZ zIUR%w-Sn%uA-G*rC4Lj~Ju5h7?FRHd-P-#pU89Hk8oLfi^2;WG+PcM$nFh{-yyX!O zYvg+dK3E}Lip#q3;oCbAEi7?QH-sx}BB{n)%BhCU{aFjE|Fl^v6~_^GT<6DErMZ2m zvLfKFQe{47>o!=$l0WQ@_CagHn?6c(#!8RGP_J5guvrMZALfLy2&=H~Fc~|XxPDXM z5o1o7+II8v{t?>Rz9pg2{Esd zaNk&TJdwhwrLop`;+N^hDNxLrlVLKpv1_tOQh9{Cp#M78lB{cJKLStrwo7oOsOzA( zbj7Z7l~E@?>w*TZFxSLqA~Fm6x+(Xh+p9N5;yi{?@@^#yNpfcU)1Yi~PDFPpR2-h&uUx=Fq#gQRRu-Q_{ij)3*?|ins z1V6MIVt&eXlX=vZLgiiZ@+?{;DAQ$q*qN8C> zzi$|(n=cf*x6vA%$Tc_aJC%BChA(D6qc#gE{~Fnn_O>!)HChW_KQ&d%?R9e9O=Fe> zTVi{|B^NEvaU9ekm$x>ah8GI;lF#Vts4@sBS-p9*T>=Pu6?X+FP_*UPNmKOrffoKa9?-LG#1x{= zPU+xzL_qun)kOv|ESIZ1vgXX;cL|EOKDe^(yz)km%k|)K3#OS@{0Tv5=YnQ5*S4{s^kp(sT28-poHL55%DI$%<5j3WB}q@60{H7j#N2M}qn{cn$mo=g zyCj+N2e*xD;xaZiw1ZaNfZ0Kvj_9F?R+;bbU3?o9jBe2!3P&N;pnU2z?K+c(+4yMY6OJfc z?`XpJPmJzMUWKPipeyrMuX|VOF}s|6SMtkvimTT{mm&orYh__{hd$^3qc}&pfv)p| z<+hqiPCSo8?nN83dE1y7SKOi#Y>_T#>cEGT4_K&8NDxjpRA}Ax{#(AL+K+$#?3tCySDjg|)ax1xh`z z`beB$raLUa;G}1&-O%zNj?JAE29=+97um^HK98G>^Z9e$;^l=geNM&$@&r668ifO` zDCnHb>YwG;8?V*L)xpyVze5QkeIizx@MYT}M-w({*fcc4nott$F_xay`my#F8PtVB z8l(B))hfgxSGD=gI0GR9TR|7f3Nf6YGmG1DX`K&=?@8@Z=3?;OTK@LKK@FdV%!~pudJB&C!efW{uN!yva>gC3GOp4 z0%IJjb}VMECY`wLy}tn$hc18$IgWY|{jBz;T6hkr0WpLNK@{0;<@BMp6@RlnJ7!cQ zN69v&R4qOfh2(}ZE#mZ3QYfzY-~wk+&YOl>H-BVNLWhty!)TWBsGlc(xj(Q!*zP6& ziYbL(O+WKqA3q};7KGMnp`?&r_JN(_YZD@A9025_6uL65afg~A;>3VW8S&?pVA ztx_?QPM@`~`>4lH4|dmicSCz4al$9+=R*hXwwL#2>7YhW(+M3~|FVzZp4O|y`#^^dv;KuSmB{qU1qb+Was+ZK>GFdb~Vt#Ao zi)wBNE8BwgLDW_R=Qf!A6x0@V!=FIlmjn#Yb}bNxyO~)V=e&h9tP zq4Zb*=`{f4##QJdqqFFNe&gs9MVnJQt?qD(JMN}gqcn|U_c-GYPqJQS0Ta4CJlRvL zRyv}FwyHSTXOKEf`X()1>$Q+20e+!wyP&EAEte=I+s%eBfp&eraXVr==q9dImpqvR zyLsGR!)xb2YZrIKw@sj~lx+8nkAQ0yqq77`2WrY>Iy=x^78_=IlCbTqy|QC;II%tb zo_hAWpmW`I5qIT^?J3KgJS;Z)*-o3@v%R**MaMrycsuFL@S0$iVV-i#I4L=P4^6k$ zrYi8Qs7tz6rrec#hdvf>Gc&+E&=Vgc?T^g4OxL#{!!nlwKQ{6Ddvg&4Z>TFQ`k*;s zTPxlTDGO$x9ZMIfa^aMjIUWX)CpEDhFI(v+Ue)TduT{_Ix6?Ppe?4ztyiR4<#$!qK zVBmePUl1O}s=V6gdU?qB2 zlMki`{K{@P=lBG+ZWrUD!am3N14Wz^KBsgO=FsXuHsBQ*~4-5XxX7A?Tj*6g+<2jZ!*GOO+%zV3Y)unRi;5YxX z?CnT4XSJI!1A1<@8HUpsr5PjjTys%?kk-&6t{`!S9xHyR#wGC`0l)es<8Ik}XNLLc zYJB6#R^Dk`b?3X}s$-*OPVYa9osGY|Ds~1cREiUn@o?;Eeo~{uY!G@Sr+?a<%%g6#>QnrrkD;&H7ZStCuso%G zH3)1&866YXk1&0u?B?e=F?~4un}e;b=+J9!X>P>X&IcSMyY1D=d$o}QgJ*QL)qRN^ zknOldk)mp`UrPqWz#H}q*&DL&67$d?D~;guvU~@b`tQTXWV}(GQv%Btw>y{JWtk6{ z2$&Ryx3hz8<+S7$QWmnHZ5v2Lp?1id9JlTaUS=DWVyiG&ZC$nJU3z{}k-~ReWSXN2&s@%axu~9*&abHt z+FUfW?1M+9b!sIAaF%fob29$?E8qHK+9Lsk0l$OdSF+sh7imZ%y z)1?F0`4GPeJxS5F3g;G#Sj%WJdN~glFugakctlyjBse2kcMm#9R9*2%zjbk-D&)_> zy$vdN0q3n$8$%Yf^Zi7EFemp%B}@n?gy}Q)jFKVAcnMJFn5(G6_)!fG`r3nK$wDt= zCA3R><2LiX*Iv8YjT3TOFBq<82QF&*XFv%ol~&;z8nKA-1tmiSKyjP>9h)H~n1esj zeyv+3QH>w>+tZIJ2D0;@oo}75nQH4*h4FJKqkfrW0<~XNDix7M!|Jw*=hSm)B`>~S z&VvEWH*%1V55LfHn@ZN%Ldgz8xPCq_6SlM)@f-Q2-MzV?#nS%?sZhqL9e<8jj@8BP ztWM5}o&^jNEcH85tCSS6$Tk1Ey^ZxkjBT(|X?a@L%yhZ~NSEAKJ*GTD<38#)U{&I8zUm2( zz}=$NA+@pNWb;qez(r@R5s>^xP(lqce*0U~cYt|~oq1{165VRT z;}wa2j_cN)>~twF5GO0|AiwT%(ZIA-RdL6&$n{yLBya(V{V$sQ| zV$5c9AN0~c1#|?9_jnYeI-4>$Opb?v>}=PIsygaXXq;hr z7VQf~P2fPQP5TA)PpXtz^i|&tNdGQv+g8{4q~xrXSgrh*;K!&?uH^Vlu3uojXpm6t z4+M0$*I;jqev5(RX7J)NQ zIWAo;ZsotFK=XUF;8|*_oy1lj#?IsPX>%G9I^Rp&jHxm+_xUm)$&F_EfY7k>?w zn`hw3O%2oA1)AQ~yU4#1JhjR6JGw^my;gR`BKspduLhnnzvmNA`u-2Jj+?1Tfw0@? z0j9tbKeQja-Ss;oeYHiyRc`Yo)7PPtIUnaAk(SfX1bWB4-2*9YD6s4ND4B;4fY1yY z-Tv~;!||J8bHVY=w=;etg%)#65L*FZf!UU?I*fDeM{a}mZHqK-oA;p)TO7o4s(p_0G;R76zXNJ)-L|uQ)xbI2{T4BY;N_ zrZWOz#cwV3d->&%6ZG>baHpZUJ`7uvHyFA)u0vR9XbgVGL71-J6nyZ{o&$*{|B(Go%=wfZ{OVv5<`) zUKA~rfg+HoYlLknKy2NI@$^)`H@@CbDK20gPq_a!4j%~q(c(=-ciDV4?xk6*_?O8d zvq!6t-*X9+0q8f}SZcWr{vx>(EbDKcbhtO6+AmdD zF^5%rU#Y^IyVxKPr(wu>Nm^_8O98nX_P&syThwu*pQQ))&I%Gv=u&Le1;~2%72j|| zw!0T|dYM9>18PpCgY6BDd5UF^HeLl{OxZV|4*fI_x0z~vE%v*RV;GinE- zSf-O`KTH-#;(76IVVv#H`w#G5NoV+#U`*+K+nn6a`-0SaDYNnFVwH0DdkBC@#Gx!} zmTJg{FuF+C$4J%axga^d(yNL~shY9y`MugwE!(2>CerzcjUiE}JR1#sbu6eX{p`_0Im>y!yb zl`RCLq}brTk(g3F+e(m@*yxR4zo7Fx0C%vnR2kFS<4nZ-K$^`qwG~;K0UXg~CuPy6 ztflzf1sso&-48%%tkJa?Jyho$Iqr$NN*|G`2!mV1_m?VxEOzp6DT83{Dsn3hMA8HP z^DgqcRI57bpoShYVN5lG^j*FQu`L>YUUDfSRRQf;cCfZmyt*?I=8&uB__PeyNk=dl zHy&MJ!<#A+RIp|L`H%lrH$#f8_DEjoV|5cmkmCLtC&Y;wXxgjA1JeCTZw8RZKa{Da z&la_kLj8ml|FNQGmWf3Zi&Y&0b+JqIL7W@eBaW2!Z75}uZ~zoi8hSoA{k;@@+Oe5@ zcW2w}&)RZOKq=`aqf9u4BM^|WC0gIbe|TFz*zS&P0Dq^ASb8UNvpK*eeyqS^tMqnb z=R2cSkGAV#&wlbX$V?Jt5Wh3CyH1sOr~P7bjIm)xO;z5<6*coK6-2;;<@%Cn%Q2^q;2D*cAN%?s>aQ}C^DBFFx6kZDj>iML0eb-sCqF`+b(iX~gysuDN_+l|%p|pT45AY|yj!%qcD>i%0PzRfIqX zbH_Eglhklco&F)EhL(ZWhl!a#Nkwra(4MXt5cJ?P;QG=cI`ehtc@pk#8kE{-%o5<9 z%Mz05c`8keo)Z)T>*K(L5fToAY|kwAijbA|0x9F&5;_XAREdUlLgz2Rj1^Ssk!(wb z5xqkO1jA1EVundb2=ccl20a0Hn&}m}1lT|^byQce=lOB4h>&EyCBx+!(Bv`ACd}sh z>>m}dK(vn7aX2v1L9XOPnAQ67!;PNvoF$k%>%zshYSbM2gm57MH_DRs$m_l#%T8);vQK2d@K3%4HaoZ|ZLoz-=KJ&`uh#Qh!c`TZ~e^%E>4_)B=*4;bhApBNYr zJ)>N^ck9FtY#ym;v(`^c@OvCR9q1mIASX`AiA z`{7t)?2Jk06X8KM)WvEHV+f(ZzT8=C>3l!{O2^<(5K@Z*xSvlJhAspO|0DV)Hqhhf z6$E2U0#*>7r|uze->^Cvu@fHvokW&!T{iI|Cwo?DL3y~h13cQ_nA!P3D@#Lha9;BO zz`jYMJ*y55HV=wxUH9JzFzYuc3!Xyq|IOj+hdFq$y*+owiWsmF;rV@}@bF?6kZ@XT za7~RU;IH3Nzn1kz_FtC-magu>GJK%a_^o&{R_EV7f0Ii|%eN;6u1A0cTgjig|K=-E zT`GSc2gwklMdT(gbA&!TN8SR zL|Fg&7pO;VuF2k79?hh}`4tW|4=$I6hO^vM$`%y za@WCAz`bt>;-ofp`{CyL=7~*hL6S>=d-jA(l;v(M2-DT$vu(k3V0h*{Pri&?Zlwbz z^dS&B?)RrJG_*%mg{P|*!nsNV+ovHBcUPTnrWb7688~bIs+I@c!>r+G7z7T-Ms|u* z0)hh$=W}hbEts2KPFjfruX6~dI+eGH_;(;Ni`l|CD-Rhj-M&~73Z^b5zMnI7m5=Bq z5>qDx6$m+r1*42h!ol=$QDW}XwDN|gd4n@$1e)gkhE(N=#hho}C{j>vqN=mZR088g zdI_v*ZO5SB)CFOC+xw;RpC9LWNS-2Qhu;sziphA=H$DXEjKan%xKrnm=x5&pSBZXu z+4I;wF1+(uRJQ@=h1hF*JeWFc%XK}QmE26)XjitOSmYr1>9h8xLXxC*fwc&%v%y1W z9Xz||?Kzj>2Qn0pe7&dIYLykD3E7AyO#%M^63^G9O$ibL%;I z1cDQ6?XEtpW}BHad=x{VS=xfuyBXoZ!eL~aS;`1v3raBCZ!dyy?|PN74;BchLCb<` zey}G!NE~d0I=3AT{~nBWC0pT_IwX2~*TOV~JyJnz4rkuj+e)Ma%+?^wBQXaj^o@>q zE!Qzh;xj}rdX*GLZTgOdh-S_Mtr6?96tfUX_t5;{rOF2On%rS!_T-6!>n{_0x96YG zr0Gz!NJq1r1=_40kbM&B9|JSiEjc{Nk#&-`@?hN*CsRsIZ4=`%mKT4bM^y+c-D}!& ziW3a4Y{NX9G3(zEE?S*F$<5s2Sh2RF@+{KhwoIbZ=a1%DxO~Og5R-+&$(Nku>g`xk zW4&KSDiGc1ekq;F0?W5h-@1O>5U<)^u9`HI z{CJ?Iat!pd9}knR7c**@d-pcQw;4{Y-X?2loOAxk%mD#2BN!63aU(`+XbhMz;clhN zn}aziyDrwXnjl7a%*N^~+q`Q}3x}N6$cqm5ZuDNauaQnV3%QcN%;y$(`_9&k=$)P7 z2mRrks8vo9W)#b9?rUAvnEmptNCSc82Sxky6r0~pDBI)Z#%}wmcsm48RD9{&JDF;8 z{+@rw8x?_&+op-~NDl{=NHr5Mbxg3nUCQP>^l==-0YR;To*;!T>h^`H-r&}2_{73& z9$Qwg-xfBTHv6LWX@mpmM=%ag^*~s9WBU%zkga}W`BV9rl;s^?JjEH_X zM)s4;k5yVj>+my(@9#?$d>|gL*j05fq6#- z)R(dQY5Ia&P^@>)&!{2 z97>5L6uQvX`*dm_MS*>zMRxIT_X+-4mKEepCcpuo{lkTsJW@tc0n+wtyyEe&p$qG? zLN=c!3M|9s#VoAO%oM0m_X5!NuJS_*Gb{n2e~aP3r!ffs)iP6ZG!%#t(zyF~hB_Ts z{q7PHU6Ah!=HM<2-6*q~GBCmaq~*dY?uDQWI9efA$g|~~Pl}=knLkoU?!ZoekP4RD zp4n9Z3L2`~v129F|C&j{Ola@@XC}iKQXrTuSm;G_q(2fO#{y|!NaxPJSRTD9ID`sR zSvm;@T(lygPpL8T10FD>^ZjduLe(S#nEdlPSJ0lj!5D$h2}Rw#)Ne0%2?|$@kpK<| zP1jt2{_}?@pT7%z2Gf!={ku?fB;vL;;K1Ah>!P_Z@Dfn-+khaA#E<(_7f(!~83-WN z#>?rP7uZZvc|3q6EnC#>!aCC{PNeSu3I3TInV0_Vt^X}7S;ZA@2wJl}Wb7|)P=GET z+O|3d%c;9Zo)zVR?2-mGkk^Rf&wC{Ov?Uj0hcTWnHCX2VHv1Vs%#bZ^bulFfsXc0K zg(x8C+wCC(e`mOVK7-2jx0xsZ(ZLAWJ}yoCO#FXm6(W^0QF`#t!P z%uH(xi%H1D4snP11o>a00PF;r8f|{fNfq-S2qp;y2!_16z;WnuxWV!i7aRzhu_2DB zu=sC%;b*w>8-RLD2CRwxUoeV?SNiI{xzh#nq!a6YoMF_I;!pB87?;$`h<|j^F|4V8 z06E850{9F@@5((2{|`Xc{|Asomjpox6}j;bF#4#b@Qr&Z04OWF%Qe{+e>Db(De$2& zduQO?Rb?$)nTBA3?yJ8TUFJI;EHv=>SlHDLsu{2ozLMTh|3FIp{LrfMDP`{A7MkN&z& zSiK*Mrz<7zb1EQxgA8zj1ovJ*{$#TG0Y4X7K(|9Sna%IT#Z$PGYzjW@m@V)qx$=d# z`HbU*$ODjZ(x1s2zYPg~+5(@!y9-{fuh%|s=Fj5%T{i&pko)V^!;jp7md%c)$iD0Ks$;1q%M14{L`=|6S=$1auTr)ZUD;`BO?S=6hjK>bPK~ zAHk@?#@1EfE_hiqVwvga&`#;M)PFOAu5IbTN|Nsa56}fAZLr`1{#LVsXF8coe$YIF z9H?LR1y%9-mk$36E`!IBk2U!hgI_TyUy&2!tP8JhC^6vtldxBeYmzPIyEmmCK+xHd zbMEYKiT-isN;rDBM)(haW+qQJw4l3_ak1rSO@zs0PVZ%4*e%ghr4-*wG+V8k`mb0{ zSVJe%B5H*1(Sh#=I*q(X3lrvg*kjJiyU$e53wg9>@xh`~jpNDae)|3zX|MRR;CSZL6 zIUya=p+Qi9<7Yua245DY>fcJrl~B~<39bN=s|T16b;RDS*9CKMgR&;#-xVM6A>R|!nyjO&x@qoLR zCW2X6FSJuACpM8aIl=B^$3qVn*zVu1G->!9@#n+Z+5L+14evx`a%m?g-1`B(Z+>$Y zZK9quxHxf5l-TPYPY1wQgV3ID)2UgFQ_9~0Ua%`K{hC<|rMXl0ej6C1E*xKzSa5rB z#6l!-$5BfkxezV@-g&kOo5A;vaQNFX=I|D|YLi?)3 zriQ;<1SSBiGCWsxe^fbd;kG?E0*9U%qZQzg+xtKeyhZqz`aD?h2M^o48OHohec*Fx z_HS3#r-tW=whINr$^4mf#+pkkx&PFa5Ga1G7xBVYTit==-+uoR5xZ3b05{0b{ucmg zQ&~tm2%bKEkjBB7SN3CwFANv5DYCAJl{S9C*>JYg8d%%wiMprW`;OCk>ObXCNcWj} z#<=K9X|MIhHNfH$nAf`ID*IF}qvR>+KcNqTXR2zAzw4HDTKA@^@BszHlXY2F(XfKs2LG8BIVek;Q1bA)!NajiQXuz}!EvOM z-tB1_NrDUWcLu`Lx3larR~3O2pOz=MFu+bXi1&OcC|=m;)(0@%&C(jb_(Re)xfn^6 zlXml*8=!rB7s=)P>ZLWL?)4Yy;q)cRm;Z|fQIV?AX4l;Q-rCc#@&HI7Ee7wlHn;X# zDoM%yJ9?3Iy{xp0*DmScU>c+I?pg_Hf3oh;;Jy%3Us#_@HnFqD9UUBiyy{+Ls9g}{ zFHN7qf7pQTZ&krT`3)e~$e?nNr@>if6i;UVLXx=PnVp*B3(pPn@PTYhgum!5uJ}>y z*BckzAuOL+!J-SD?-9VGKa*OkZp7_aght*;TE=~GN7Ye- z=z=yI*uy(>9v@iTTq%IuFXsKvyDeU^Jh+dzc>MyVoesVYcc%a{`AZXZS-Gf1yMq)j zHtj3jXPy}b(TJbDz$53GMHgv4H^^N+F7m&X>1cSa{Jwl={q}7@?Gq{Dki^yXE8nH8 zi!juLJ(MfmBP~PS4P3RpL8ZR7pxaLkjx2V3=!Wzy&=$Z^kYPKuppRnrJ<|p^z*d<) zG7T2Mn(ttXx{(=-G}w6S%zOLFfIhqw)Se{2FWrgDDG#XWXt>Bn3m-+z4XZzvg-xo& zTiz=+bGj4@&f*qcZ=mSdxKcgfm*a3@Ni@SdW2e@RGqJ1n>K8TVE#tT}jlqE$!#z=>_ zHiNRd=XV~WAAYS+!_<{3rsnzhJtMm=kV26EDNEn-`V!?U^(41SmWigl)AeXFu<*Tk zg>QouyxGGB9X2aD3x)4To>$tjr@X+u1cbZkcW{{yO`{=HYR&>MFasNB>78 ze~xX;v?^2~nWZMbtB3q9aCVi~*H}oL>o$CGHKFb|pIjS>kUWUW9R9}oH&`Isu8W5R z9EM+U09+J9n|K5zKf$f7viA`O#ED`imy^USuJ1E|Y&~H~vDF&MEj0}1LR7umaK)wU zpoG+&UHWBj-Ou;wMProU^SYDnEIaQaINET^VV7A@6H?G&?FifGFCt>a!90sgeRKN~ zf<_>Vkp;dx(A-U&D<k8x-|qqWT0~J zUO<)2z%Jt{^2KIT{A{A}Y8T-IZ3GGd<3y#noSx^cJmeldYbo1TA5NW^F&*StAAgo@M1l9XCwXv7eJ$<2<)o3EWDOCZiH>8x&qd8-fkbbR zU`1JWVzow=e$v*-@k>Nnkad*^7vHlQVcZYI9B^-&o`f$lSb9(cnf}keou~%bB_GNg zjFGVchQF8lbK^Ab-EZe^~j)6Q~baYiyf|6O}> zU_bJv-7kYHo-Tr=T~f${CU-9|p|WQ_q(h|fdF)xpsD1;nqAj}sN@5HwY3vZZKR!}> z+dM9&mnjYE*=43b@bYco(hV-PV@oZt5*&T!=T1|!PR5vkZKU$0Dlv|?P16W0e@45F z@K$!*-ACbPw-h3TvtZ{}6dPW~x0UgGQO}){ke*f*C7kMN{8|e+A<2BE0DY=s`@>iq zxi0WL4{A;*gI*OrS@_`1Lrq-sExk^X3hTxohh{mpjPEUNOswTk{fmk^ zf=FmU(D?7d;*@ueTJ)4%Ct<@v?RjVor_)}YEMqO!x>K?5^ox>KJo$f}0y|$D4YYn4 zJ?Sz|u>Ldq6QAO5{-%e!SF@TW&IXpa6?`#)j^WLTE#nf+7Rm?IsQlWT`mVu0EyZ;! zOf)Y*mo5=?wZbiDuO-p6U6rp^OS6tY>>HK^h{f8NvAD`}4o0J2oQe4M-DN%BSNlS| z4IQR&Zem(y-VohqtI_sfvmk+X-AVqz%yq8aXx)s3dvm~Bpso;Y%p@Xd#eaAMsPfxX zAsrn;v#e0xqV?yZ>xHil?>ZXsNAK5*7COuL=w02hRL#_?A@anB``by^7L`>~utJ0i z92h!va21Q6=T>=G*iL`+P{sIvpa+{yr7w1Z%T7+9smyAhElEnWk3+OaF_RfKIx*G% z&2sVzA#raty|sJP!#`~WIxR=KX|{*&_Xs|}OnP7(m|AWH?B>$$U-hEq$Gyvy2YnkKK!vhmRo;{+jnT@R&Xp|PXFFwWkiNaS~ZU(j#f@942 zZ1puW+&Yd6NUAB4Ru*wIh{a|_Ciq(oOjtL48WFd0wR&j9cGO|gVf2xE$1mby@RfU< z5fUw7Qfs97j~Cq-PFx$O$)UA}WZH@X<9(>IslQK_1_2LRR4wXTelbX2(>#$v?us+_ z4NY$HrApp3nSWP=z44QFJ5CMpQY*p)hE8D|k>W!p)gH(^{@v|h^XlN?g)|2#wH~gE zVLeMOz!CAplatNg* z`6d3J=Dm%@6gJ+M$5AhH4EIPc!JTgNG`awKj)z7+9nG7AB@t6$=$CUD^) zvg|5LqT-RS4!OY`xVmJ~KeVf!XKabkf@C636)q2f5UrYbxWX=E{7*G?0fQuw-}LT`-MTgT&ow~`ln#`A zHQo(Tp79r=2ms)gKTP-_NF_b}rz#`|IfdJe36Lcv4J74h|H|@|d&$xP!Q{7XM)Y=^ z3?vCVG5ov{4m(P>P_}UT0tWT{xENdRQ3z&rz+hlQ)3DI+zf2Y709%sp56kvdgh+>8 zhUoaz`8)4cZGVk~j8erOC5xF5c)v~Fx)5d{{VvDWhf0{PyIJ>_=J*`xDYoD!$;4zs z2xH!H&K{(ME9cgd{T~vkOZVLW<~(5651+Ec`8M>d z3pC)=F4?8uskva|sk+)3(Lm0bD^MH7@!D-O-^@&z+9772$LSneqIR^IejmyX|Gaiw zPHuY>unXCtTw<;e=f$yy5+!jZ_V4Fo#d6D5+;oM)7mo z=Q$2DYpj0L5steG!B@96^cY#C;Yng7v=@=yxNWKY;3dzQIV!VpXFsL1@zA_akp1*od3Yb==%89sFW^TRW4r<67#8Q^+&PMy9xPOEJ0o~YBM#@Me-rQ=W&QD@=w2J5FG=D z)lw)Ar5@#_IROavdBHZ^KDEZ)`(SAXq^Q(Q9tF~8C&HHBnVO8AA4kA)pO^`3t**|NUDEJ`aec{#+bB2 z;w_m!hTH=?htf?wNX)4Z?uV}WZ%N~0>0%=Ck2;@ZSG{|TIKGzREMQB7DYPu1iG9tG zwY}R{sznR1kIE_RWCT>v=Qoq%eokJtS3<@JT&f_C6|@mwx=Hu&)1D0^MGnG&`zFrM zp}+4_J*Oz=8cMF$f^T_J6D2oh>YuXsySEG31#OGa_gQ=9rspq6A~d?hf5@1lJNky6 z>X?izQijx6M);_qjtw=6=ApOx5~Jeb=7i7*5h`Jpqbkfgb!tq3XAk5P=1YWHvXRtf4xnBHg1rABWv~R~dqAoa$Z1a9`vA&Kv&-Z<~o#9AkJdXfa*vK=j)X4iJC0WC7da4bt`R*_t)xBU6) zMcM|K0g)t~+G?X3L|L-mdc^%GE7eXbW@&7E(NUQ7T?`a-P+KP~54op3(>?}?m2+=8 z`C4|?-T{U%J#Uz+5UM)Oj3H^`IOtuqG8N3_E{~CtOWtp&%K(g4Mb_Zwi(@>KHBS47 zcTC-w+)WoNYAVB4{(&TQS9PUO+wt`KKiD__>h7|pRj5N=Y zdWDl5>Bpy3{5^$!|Dm+jlnMs%*sDxxD68D3*?gTz1x@<+@3(g4E1QrVyfoC`f0#L| zK3RJ$;0(kAYjV5biU9TzU~l|xOAV0R{DIY!at6Sx0L%vj;ik6+4-1~u`OsqHrVkln zwoHT?<%*?M8y0Y(0&zDO3f~Enw;3Y;v_bT}s6(^anHoWYh~+LHFJxo*-Pm3GNqMWq zE>fkK+DPwjtakx<^946hDf+{-5Lwd4mv&Q|31*DQP)H_3b+X~XlRJ%LPQG^p#bKaQGiyHE01F(Aknis(1as#3-$b3(Z^9SO#bmoM^du;xDuT~4?~ zu6G6!ki()qq%$>yEsF2Ow*dj@Y)Y#OpruTliB!i^>HZ6D0i3reJ;6pj04pl7(Q71p z@3spE1h^8?ekvpYf^7GGJ8;2+E|hqyhTyH|+yUwlp(cA}YG6xuW)(-gdxB0-|O1g~Vy z4M-=ojb_X;cu#x8^R2%5r;QSwd&Ki&QrMC*utHCEqVc2b{d(OMqIf6*-VpP|oQ16R z0q<|(7Da1$Lt|x)pT*^o_E~K(65)Uc)3LfSW-d?y)2eY((aPg{gdqbFCfr>(ymw@bIWr-dIh-fTZvW^sToY?K*1gG2U;JezZY8$tB7CM ze%pa6@@9sF^jEM(i>IfTG5epLaPt=xrazhgCJ#&vR&6?uR)pAgbC@*Z*;^pCrgyFV z*;x!kM`)9KK%^e3C#93Ch~sakL6s2@2bt8Vv78|p9kzaGL;Zn`2bp|o!$n|GSVoFt**nT`w>jAQP-cG4 zA2BXq=CzLqZ27K#O55&uu`naSyh9~*8(R9!q0GQj`|2rCr=vmOn65YN1K@6aKS)yL z&Akh2f9i{k8Dk(g)}p3!x}lUM@#cZOZPwfwi6()uO|e|+VAk!a+oFlkksB*`0CSUG zT=VBmk-`dafk*&I#ng`m2KsJcU39zg5fpwJCq>$;F(*M_5>zu)Mt3E$BS{am+zy%j znCZRh1TmoY@x*jUXpBxG*0Je8rA^qB=7saofwyFZT~DgGzus{}{HzleylBW+gW)5= zEeZ`SqZI`XCam^JEN`I_7U+;06oLN&_Cz@F=+zT}F->SN8iEDQl=^MJdb%NVU?MR4 ztWz1A@>CE7184kwMo-0`J6A+GgRU3@r7^GYMryPS*bN?zp~Y75U@1C{h5PVt-Ig16 zI4@>v8H7=!Uie)n0_4wFvL};W8753e3!cZlF4zbXw>7w+;%AWfobMF%#)8=otspqK zrBCa5y$49a1oGbTgveKlT!;eE?BTjwbO&~1Eevm2k7d}wmVCdF3hHfjs7#|R1>2c& zwW0C%wzcf6x79oW;xME&G2O1hY+yz`@pPkFgYrcwbLUDtOa~xaHU5{O_?28G;=Dzh zm&Qxp(x5KYl3RBNfR8ElRI;c6?-j>jpaf5!3e2@~F?C1*;^okqTQS?oC^&ff`s)!+ z{&kabOC9ycb|1%+7f!)w>hlxsp^yle-CS!;L(WI+T6vC0w5pOtylWa*UCYn^)^AG9 z{mGJWF+smQO(O?Rk)V`mx-FC`33m~2R`Sc_%(f~1Vd-_}5XkUz`NmA}O#o#>`HP;* zXNJ+7V(U&oXs}k!i^iFmxd@@sNE<=RKW!9*HZ+-=)brDZJUj0DbDCx+UIoOZn*;){Gif%+ZwdyHE&h%Har)Fp+pWn>npl(t!V>epaa zDzwt)+70GD)`P*$UE=;nJ-Xg7)B6{;!30Cl_xK-3@&Dl}ORcqv!U?ME)Xx9KB?-^t zq=Ts`cel=|{TWh;+WE_FTkZ3L-(VaB*E<-VXJMdkSEt z@`qDx!$c>`pN!`j zYPDLAXw{r8pDHn~so*zW%F_Ca94<{S&I~DfQ-*eCH_1m>Oo%t(R^P5Q#}r0*H}RF- z@zcq;khqn7W64Kp?KcC}9lGqOlOP203@-C|-yP7?diXxInu)fHHQ{HQqzqp{mg;## zo!|o}WG*Q_Vi`?F!iv1MMY;V$m^|}UuA1Xk(W*?cgmVfQps=kLZMbdT4=0#+E-3>1 z!)o)(bZcpDe@>dk8Ue5&UgT6jAOq(@mED!t|Ef_5rEyG@uPB7^DZJfJ3$UmcpV;pW zf8ATjzhX1;ymg)GT7xTirR;0rR|3zTcbcdps@V8Uh}Oe+n45O6>QM@Tw_)ZqTGJ8K z8$n#XozZh!4)r|>Rer?%*=KAo_RqwSPn*4Lb;AZe)GO-JNWm3O2McRW9p}HP<+_uC z&gy0%>=SsJrvxLsB&`MgBwp>Bocn<3XMkP;5rI`ts_<0<>G$Ku%k}_id+n2pV+@sZ zFtuEVN6^_AcKB~i%x>JOfkb=ES52FHFHJ4anMjn~2{Q#F-fdxOyM=^(lRvNFZj!-npS5b*kk6Z7?O3{1Au)M%2x&QEnn3+#-A3x)N!Ba=OL2gO1+x|R+qm+uq7ob zvy-W6INUC0$&T+Y>=8ZLPZg@1)iI8+Pn0LF6Un;6f!t@O`c@o)wf zD5u?hZpp*7PfyC&IcHqbTI>k(ut-t^Kl-7QMsyG7w_?&4atFoK zd5>#Gzg1lL;h)H0((&Ia^6b){BY}fR5Cn+{x|QS00@o7!L2W+?|#}AO)7s zMA|F8X^APOfSOln4zKoItNB%x5>kKPdcjG=L1a|GZn;(7avn6C#85&X83Ba`CkE?G zlBhCmn2Bt!$p0FGoxc%ZviK`XJ>pX0MU$m|tBBTi#sPOBg~^rJ*{id%wPF_QiCKw9 z-0hTwl^Sv*4>kJN9{H!}V7Cr`JPzi!QbJk4+H;Y|jPPttpAQy-sv0rpmDW7fu1kD! z{uT3i&h0f}N`CeejaT6Re=E z+;Kx}C%9hy!H+faI?cG;T(2~G6*ixmVAs=eU@hmWSNA=CHoGo8rcSUqmWMrTl5ah_ zy{t71pq|4L(`1D!xY-P&pFcsL@gg@rYa4T1xv5;DWES*4#GiGy diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 4499afa..a3ec64f 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -12,7 +12,6 @@ import Selling from "./pages/Selling"; import Transactions from "./pages/Transactions"; import Favorites from "./pages/Favorites"; import ProductDetail from "./pages/ProductDetail"; -import ItemForm from "./pages/MyListings"; import SearchPage from "./pages/SearchPage"; // Make sure to import the SearchPage function App() { @@ -712,27 +711,6 @@ function App() { } /> - {/* Add new selling routes */} - -
- -
- - } - /> - -
- -
- - } - /> { alt="Campus Plug" className="h-8 px-2" /> - + Campus Plug diff --git a/frontend/src/components/ProductForm.jsx b/frontend/src/components/ProductForm.jsx index 33c0107..f594d24 100644 --- a/frontend/src/components/ProductForm.jsx +++ b/frontend/src/components/ProductForm.jsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useState } from "react"; const ProductForm = ({ editingProduct, @@ -6,17 +6,60 @@ const ProductForm = ({ onSave, onCancel, }) => { + const [selectedCategory, setSelectedCategory] = useState(""); + + const categories = [ + "Electronics", + "Clothing", + "Home & Garden", + "Toys & Games", + "Books", + "Sports & Outdoors", + "Automotive", + "Beauty & Personal Care", + "Health & Wellness", + "Jewelry", + "Art & Collectibles", + "Food & Beverages", + "Office Supplies", + "Pet Supplies", + "Music & Instruments", + "Other", + ]; + + const addCategory = () => { + if ( + selectedCategory && + !(editingProduct.categories || []).includes(selectedCategory) + ) { + setEditingProduct((prev) => ({ + ...prev, + categories: [...(prev.categories || []), selectedCategory], + })); + setSelectedCategory(""); + } + }; + + const removeCategory = (categoryToRemove) => { + setEditingProduct((prev) => ({ + ...prev, + categories: (prev.categories || []).filter( + (cat) => cat !== categoryToRemove, + ), + })); + }; + return ( -
+
{/* Back Button */} -

+

{editingProduct?.id ? "Edit Your Product" : "List a New Product"}

@@ -32,7 +75,7 @@ const ProductForm = ({ onChange={(e) => setEditingProduct({ ...editingProduct, name: e.target.value }) } - className="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-green-500" + className="w-full px-4 py-2 border-2 border-gray-200 rounded-md focus:ring-2 focus:ring-emerald-500 focus:border-emerald-500" />
@@ -50,11 +93,71 @@ const ProductForm = ({ price: e.target.value, }) } - className="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-green-500" + className="w-full px-4 py-2 border-2 border-gray-200 rounded-md focus:ring-2 focus:ring-emerald-500 focus:border-emerald-500" />
- {/* Status */} + {/* Categories - Dropdown with Add button */} +
+ +
+ + +
+ + {/* Selected Categories */} + {(editingProduct.categories || []).length > 0 ? ( +
+ {(editingProduct.categories || []).map((category) => ( + + {category} + + + ))} +
+ ) : ( +

+ Please select at least one category +

+ )} +
+ + {/* Status - Updated to Unsold/Sold */}
- {/* Images */} + {/* Description - New Field */}
+ +
+ + {/* Simplified Image Upload */} +
+ + + {/* Simple file input */} + -
- {editingProduct.images.length > 0 && - editingProduct.images.map((img, idx) => ( -
- {`Preview - +
+ ))} + {editingProduct.images.length > 0 && ( + -
- ))} -
+ )} + + + )} {/* Actions */} -
+
diff --git a/frontend/src/pages/Favorites.jsx b/frontend/src/pages/Favorites.jsx index 868eaf1..55b191d 100644 --- a/frontend/src/pages/Favorites.jsx +++ b/frontend/src/pages/Favorites.jsx @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { Heart, Tag, Trash2, Filter, ChevronDown } from "lucide-react"; +import { Heart, Tag, Trash2 } from "lucide-react"; const Favorites = () => { const [favorites, setFavorites] = useState([]); diff --git a/frontend/src/pages/MyListings.jsx b/frontend/src/pages/MyListings.jsx deleted file mode 100644 index 6cafcc7..0000000 --- a/frontend/src/pages/MyListings.jsx +++ /dev/null @@ -1,550 +0,0 @@ -import { useState, useEffect } from "react"; -import { Link, useParams, useNavigate } from "react-router-dom"; -import { ArrowLeft, Plus, X, Save, Trash } from "lucide-react"; - -const ItemForm = () => { - const { id } = useParams(); // If id exists, we are editing, otherwise creating - const navigate = useNavigate(); - const isEditing = !!id; - - const [formData, setFormData] = useState({ - title: "", - price: "", - category: "", - condition: "", - shortDescription: "", - description: "", - images: [], - status: "active", - }); - - const [originalData, setOriginalData] = useState(null); - const [errors, setErrors] = useState({}); - const [imagePreviewUrls, setImagePreviewUrls] = useState([]); - const [isLoading, setIsLoading] = useState(isEditing); - const [isSubmitting, setIsSubmitting] = useState(false); - const [showDeleteModal, setShowDeleteModal] = useState(false); - - // Categories with icons - const categories = [ - "Electronics", - "Furniture", - "Books", - "Kitchen", - "Collectibles", - "Clothing", - "Sports & Outdoors", - "Tools", - "Toys & Games", - "Other", - ]; - - // Condition options - const conditions = ["New", "Like New", "Good", "Fair", "Poor"]; - - // Status options - const statuses = ["active", "inactive", "sold", "pending"]; - - // Fetch item data if editing - useEffect(() => { - if (isEditing) { - // This would be an API call in a real app - // Simulating API call with timeout - setTimeout(() => { - // Sample data for item being edited - const itemData = { - id: parseInt(id), - title: "Dell XPS 13 Laptop - 2023 Model", - price: 850, - category: "Electronics", - condition: "Like New", - shortDescription: - "Dell XPS 13 laptop in excellent condition. Intel Core i7, 16GB RAM, 512GB SSD. Includes charger and original box.", - description: - "Selling my Dell XPS 13 laptop. Only 6 months old and in excellent condition. Intel Core i7 processor, 16GB RAM, 512GB SSD. Battery life is still excellent (around 10 hours of regular use). Comes with original charger and box. Selling because I'm upgrading to a MacBook for design work.\n\nSpecs:\n- Intel Core i7 11th Gen\n- 16GB RAM\n- 512GB NVMe SSD\n- 13.4\" FHD+ Display (1920x1200)\n- Windows 11 Pro\n- Backlit Keyboard\n- Thunderbolt 4 ports", - images: ["/image1.avif", "/image2.avif", "/image3.avif"], - status: "active", - datePosted: "2023-03-02", - }; - - setFormData(itemData); - setOriginalData(itemData); - setImagePreviewUrls(itemData.images); - setIsLoading(false); - }, 1000); - } - }, [id, isEditing]); - - const handleChange = (e) => { - const { name, value } = e.target; - setFormData({ - ...formData, - [name]: value, - }); - - // Clear error when field is edited - if (errors[name]) { - setErrors({ - ...errors, - [name]: null, - }); - } - }; - - const handleImageChange = (e) => { - e.preventDefault(); - - const files = Array.from(e.target.files); - - if (formData.images.length + files.length > 5) { - setErrors({ - ...errors, - images: "Maximum 5 images allowed", - }); - return; - } - - // Create preview URLs for the images - const newImagePreviewUrls = [...imagePreviewUrls]; - const newImages = [...formData.images]; - - files.forEach((file) => { - const reader = new FileReader(); - reader.onloadend = () => { - newImagePreviewUrls.push(reader.result); - setImagePreviewUrls(newImagePreviewUrls); - }; - reader.readAsDataURL(file); - newImages.push(file); - }); - - setFormData({ - ...formData, - images: newImages, - }); - - // Clear error if any - if (errors.images) { - setErrors({ - ...errors, - images: null, - }); - } - }; - - const removeImage = (index) => { - const newImages = [...formData.images]; - const newImagePreviewUrls = [...imagePreviewUrls]; - - newImages.splice(index, 1); - newImagePreviewUrls.splice(index, 1); - - setFormData({ - ...formData, - images: newImages, - }); - setImagePreviewUrls(newImagePreviewUrls); - }; - - const validateForm = () => { - const newErrors = {}; - - if (!formData.title.trim()) newErrors.title = "Title is required"; - if (!formData.price) newErrors.price = "Price is required"; - if (isNaN(formData.price) || formData.price <= 0) - newErrors.price = "Price must be a positive number"; - if (!formData.category) newErrors.category = "Category is required"; - if (!formData.condition) newErrors.condition = "Condition is required"; - if (!formData.shortDescription.trim()) - newErrors.shortDescription = "Short description is required"; - if (!formData.description.trim()) - newErrors.description = "Description is required"; - if (formData.images.length === 0) - newErrors.images = "At least one image is required"; - - setErrors(newErrors); - return Object.keys(newErrors).length === 0; - }; - - const handleSubmit = (e) => { - e.preventDefault(); - - if (!validateForm()) { - // Scroll to the first error - const firstErrorField = Object.keys(errors)[0]; - document - .getElementsByName(firstErrorField)[0] - ?.scrollIntoView({ behavior: "smooth" }); - return; - } - - setIsSubmitting(true); - - // Simulate API call to post/update the item - setTimeout(() => { - console.log("Form submitted:", formData); - setIsSubmitting(false); - - // Show success and redirect to listings - alert(`Item successfully ${isEditing ? "updated" : "created"}!`); - navigate("/selling"); - }, 1500); - }; - - const handleDelete = () => { - setIsSubmitting(true); - - // Simulate API call to delete the item - setTimeout(() => { - console.log("Item deleted:", id); - setIsSubmitting(false); - setShowDeleteModal(false); - - // Show success and redirect to listings - alert("Item successfully deleted!"); - navigate("/selling"); - }, 1500); - }; - - // Show loading state if necessary - if (isLoading) { - return ( -
-
- - - Back to listings - -
-
-
-
-
-
-
- ); - } - - return ( -
- {/* Breadcrumb & Back Link */} -
- - - Back to listings - -
- -
-

- {isEditing ? "Edit Item" : "Create New Listing"} -

- - {isEditing && ( - - )} -
- -
- {/* Title */} -
- - - {errors.title && ( -

{errors.title}

- )} -
- - {/* Price, Category, Status (side by side on larger screens) */} -
-
- - - {errors.price && ( -

{errors.price}

- )} -
- -
- - - {errors.category && ( -

{errors.category}

- )} -
- - {isEditing && ( -
- - -
- )} -
- - {/* Condition */} -
- -
- {conditions.map((condition) => ( - - ))} -
- {errors.condition && ( -

{errors.condition}

- )} -
- - {/* Short Description */} -
- - -

- {formData.shortDescription.length}/150 characters -

- {errors.shortDescription && ( -

{errors.shortDescription}

- )} -
- - {/* Full Description */} -
- - -

- Use blank lines to separate paragraphs. -

- {errors.description && ( -

{errors.description}

- )} -
- - {/* Image Upload */} -
- - - {/* Image Preview Area */} -
- {imagePreviewUrls.map((url, index) => ( -
- {`Preview - -
- ))} - - {/* Upload Button (only show if less than 5 images) */} - {formData.images.length < 5 && ( - - )} -
- {errors.images && ( -

{errors.images}

- )} -
- - {/* Submit Button */} -
- -
-
- - {/* Delete Confirmation Modal */} - {showDeleteModal && ( -
-
-

- Delete Listing -

-

- Are you sure you want to delete {formData.title}? - This action cannot be undone. -

-
- - -
-
-
- )} -
- ); -}; - -export default ItemForm; diff --git a/frontend/src/pages/SearchPage.jsx b/frontend/src/pages/SearchPage.jsx index 0bcd006..0885ab1 100644 --- a/frontend/src/pages/SearchPage.jsx +++ b/frontend/src/pages/SearchPage.jsx @@ -1,5 +1,5 @@ -import React, { useState, useEffect } from "react"; -import { Filter, Grid, Heart, Tag, X } from "lucide-react"; +import { useState, useEffect } from "react"; +import { X } from "lucide-react"; import { useLocation, Link } from "react-router-dom"; import axios from "axios"; diff --git a/frontend/src/pages/Selling.jsx b/frontend/src/pages/Selling.jsx index 3495698..99de591 100644 --- a/frontend/src/pages/Selling.jsx +++ b/frontend/src/pages/Selling.jsx @@ -1,152 +1,221 @@ -import { useState } from "react"; -import { Pencil, Trash2, Plus } from "lucide-react"; +import { useState, useEffect } from "react"; import ProductForm from "../components/ProductForm"; const Selling = () => { - const [products, setProducts] = useState([ - { - id: 1, - name: "Green Sofa", - price: 299, - status: "Active", - images: [], - }, - { - id: 2, - name: "Wooden Table", - price: 150, - status: "Inactive", - images: [], - }, - ]); + // State to store user's products + const [products, setProducts] = useState([]); + // State to control when editing form is shown + const [showForm, setShowForm] = useState(false); + // State to store the product being edited (or empty for new product) + const [editingProduct, setEditingProduct] = useState({ + name: "", + price: "", + description: "", + categories: [], + status: "Unsold", + images: [], + }); - const [editingProduct, setEditingProduct] = useState(null); - const [view, setView] = useState("list"); // "list" or "form" + // Simulate fetching products from API/database on component mount + useEffect(() => { + // This would be replaced with a real API call + const fetchProducts = async () => { + // Mock data + const mockProducts = [ + { + id: "1", + name: "Vintage Camera", + price: "299.99", + description: "A beautiful vintage film camera in excellent condition", + categories: ["Electronics", "Art & Collectibles"], + status: "Unsold", + images: ["/public/Pictures/Dell1.jpg"], + }, + { + id: "2", + name: "Leather Jacket", + price: "149.50", + description: "Genuine leather jacket, worn only a few times", + categories: ["Clothing"], + status: "Unsold", + images: [], + }, + ]; - const handleEdit = (product) => { - setEditingProduct({ ...product }); - setView("form"); - }; + setProducts(mockProducts); + }; - const handleAddNew = () => { - setEditingProduct({ - id: null, - name: "", - price: "", - status: "Active", - images: [], - }); - setView("form"); - }; + fetchProducts(); + }, []); - const handleDelete = (id) => { - setProducts((prev) => prev.filter((p) => p.id !== id)); - }; - - const handleSave = () => { - if (!editingProduct.name || !editingProduct.price) { - alert("Please enter a name and price."); - return; - } - if (editingProduct.images.length < 1) { - alert("Please upload at least one image."); - return; - } - - if (editingProduct.id === null) { + // Handle creating or updating a product + const handleSaveProduct = () => { + if (editingProduct.id) { + // Update existing product + setProducts( + products.map((p) => (p.id === editingProduct.id ? editingProduct : p)), + ); + } else { + // Create new product const newProduct = { ...editingProduct, - id: Date.now(), + id: Date.now().toString(), // Generate a temporary ID }; - setProducts((prev) => [newProduct, ...prev]); - } else { - setProducts((prev) => - prev.map((p) => (p.id === editingProduct.id ? editingProduct : p)), - ); + setProducts([...products, newProduct]); } - setEditingProduct(null); - setView("list"); + // Reset form and hide it + setShowForm(false); + setEditingProduct({ + name: "", + price: "", + description: "", + categories: [], + status: "Unsold", + images: [], + }); }; - const handleCancel = () => { - setEditingProduct(null); - setView("list"); + // Handle product deletion + const handleDeleteProduct = (productId) => { + if (window.confirm("Are you sure you want to delete this product?")) { + setProducts(products.filter((p) => p.id !== productId)); + } + }; + + // Handle editing a product + const handleEditProduct = (product) => { + setEditingProduct({ + ...product, + images: product.images || [], // Ensure images array exists + }); + setShowForm(true); + }; + + // Handle adding a new product + const handleAddProduct = () => { + setEditingProduct({ + name: "", + price: "", + description: "", + categories: [], + status: "Unsold", + images: [], + }); + setShowForm(true); }; return ( -
- {view === "list" && ( - <> -
-

My Listings

- -
+
+
+

My Listings

+ {!showForm && ( + + )} +
-
    - {products.map((product) => ( -
  • -
    -
    - {product.images.length > 0 ? ( - Product - ) : ( - No Image - )} -
    -
    -

    {product.name}

    -

    ${product.price}

    -

    - {product.status} -

    -
    -
    -
    - - -
    -
  • - ))} -
- - )} - - {view === "form" && ( + {showForm ? ( setShowForm(false)} /> + ) : ( + <> + {products.length === 0 ? ( +
+

+ You don't have any listings yet +

+ +
+ ) : ( +
+ {products.map((product) => ( +
+
+ {product.images && product.images.length > 0 ? ( + {product.name} + ) : ( +
No image
+ )} +
+ +
+
+

+ {product.name} +

+ + {product.status} + +
+ +

+ ${product.price} +

+ + {product.categories && product.categories.length > 0 && ( +
+ {product.categories.map((category) => ( + + {category} + + ))} +
+ )} + +

+ {product.description} +

+ +
+ + +
+
+
+ ))} +
+ )} + )}
); diff --git a/frontend/src/pages/Transactions.jsx b/frontend/src/pages/Transactions.jsx index 800f0b7..c38b5fc 100644 --- a/frontend/src/pages/Transactions.jsx +++ b/frontend/src/pages/Transactions.jsx @@ -1,13 +1,8 @@ -import { useState } from 'react'; -import { Link } from 'react-router-dom'; -import { Tag, Book, Laptop, Sofa, Utensils, Gift, Heart } from 'lucide-react'; +import { useState } from "react"; +import { Link } from "react-router-dom"; const Transactions = () => { - return ( -
- -
- ); + return
; }; -export default Transactions; \ No newline at end of file +export default Transactions;