From 9ff42c8b0910d562005971e025b4ef8c1333bae8 Mon Sep 17 00:00:00 2001 From: Moon Date: Mon, 12 Aug 2024 20:34:18 -0700 Subject: [PATCH 001/318] Exclude privacy page from the store pages -- it is a core page (#50608) * Exclude privacy page from the store pages -- it is a core page * Add changefile(s) from automation for the following project(s): woocommerce * Remove privacy page deletion in unit test --------- Co-authored-by: github-actions Co-authored-by: Ilyas Foo --- .../50608-update-exlude-privacy-page-from-store-page | 4 ++++ plugins/woocommerce/src/Admin/WCAdminHelper.php | 1 - .../legacy/unit-tests/woocommerce-admin/wc-admin-helper.php | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page diff --git a/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page b/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page new file mode 100644 index 00000000000..776c880a9a8 --- /dev/null +++ b/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page @@ -0,0 +1,4 @@ +Significance: patch +Type: fix +Comment: Removed the privacy page from the store pages list to make it accessible when the 'Coming Soon' mode is enabled with the 'Restrict to store pages only' option. + diff --git a/plugins/woocommerce/src/Admin/WCAdminHelper.php b/plugins/woocommerce/src/Admin/WCAdminHelper.php index 91d3c8ac02f..5c02a93d30b 100644 --- a/plugins/woocommerce/src/Admin/WCAdminHelper.php +++ b/plugins/woocommerce/src/Admin/WCAdminHelper.php @@ -155,7 +155,6 @@ class WCAdminHelper { 'shop' => wc_get_page_id( 'shop' ), 'cart' => wc_get_page_id( 'cart' ), 'checkout' => wc_get_page_id( 'checkout' ), - 'privacy' => wc_privacy_policy_page_id(), 'terms' => wc_terms_and_conditions_page_id(), 'coming_soon' => wc_get_page_id( 'coming_soon' ), ); diff --git a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/wc-admin-helper.php b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/wc-admin-helper.php index 8c160e59f57..46608767664 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/wc-admin-helper.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/wc-admin-helper.php @@ -44,7 +44,6 @@ class WC_Admin_Tests_Admin_Helper extends WC_Unit_Test_Case { wp_delete_post( get_option( 'woocommerce_cart_page_id' ), true ); wp_delete_post( get_option( 'woocommerce_checkout_page_id' ), true ); wp_delete_post( get_option( 'woocommerce_myaccount_page_id' ), true ); - wp_delete_post( wc_privacy_policy_page_id(), true ); wp_delete_post( wc_terms_and_conditions_page_id(), true ); } From 770730272c57aa21750a0180c038d45a6f2c8819 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Tue, 13 Aug 2024 11:47:50 +0800 Subject: [PATCH 002/318] Clean up unused images in `./assets/image` folder (#50516) * Clean up unused images * Add changelog --- .../filter-by-product-variations-note.svg | 1 - .../woocommerce/assets/images/empty-content.svg | 1 - .../assets/images/icons/credit-cards/amex.png | Bin 1733 -> 0 bytes .../assets/images/icons/credit-cards/diners.png | Bin 1031 -> 0 bytes .../images/icons/credit-cards/discover.png | Bin 1347 -> 0 bytes .../assets/images/icons/credit-cards/jcb.png | Bin 1437 -> 0 bytes .../assets/images/icons/credit-cards/laser.png | Bin 768 -> 0 bytes .../images/icons/credit-cards/maestro.png | Bin 1383 -> 0 bytes .../images/icons/credit-cards/mastercard.png | Bin 885 -> 0 bytes .../images/icons/global-attributes-icon.svg | 8 -------- .../assets/images/paypal-braintree.png | Bin 2011 -> 0 bytes .../assets/images/select2-spinner.gif | Bin 1434 -> 0 bytes plugins/woocommerce/assets/images/select2.png | Bin 525 -> 0 bytes plugins/woocommerce/assets/images/select2x2.png | Bin 755 -> 0 bytes .../task_list/basics-section-illustration.png | Bin 16174 -> 0 bytes .../assets/images/wcpayments-icon-secure.png | Bin 5748 -> 0 bytes plugins/woocommerce/assets/images/wpspin.gif | Bin 2067 -> 0 bytes .../woocommerce/changelog/dev-clean-up-images | 4 ++++ 18 files changed, 4 insertions(+), 10 deletions(-) delete mode 100644 plugins/woocommerce/assets/images/admin_notes/filter-by-product-variations-note.svg delete mode 100644 plugins/woocommerce/assets/images/empty-content.svg delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/amex.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/diners.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/discover.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/jcb.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/laser.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/maestro.png delete mode 100644 plugins/woocommerce/assets/images/icons/credit-cards/mastercard.png delete mode 100644 plugins/woocommerce/assets/images/icons/global-attributes-icon.svg delete mode 100644 plugins/woocommerce/assets/images/paypal-braintree.png delete mode 100644 plugins/woocommerce/assets/images/select2-spinner.gif delete mode 100644 plugins/woocommerce/assets/images/select2.png delete mode 100644 plugins/woocommerce/assets/images/select2x2.png delete mode 100644 plugins/woocommerce/assets/images/task_list/basics-section-illustration.png delete mode 100644 plugins/woocommerce/assets/images/wcpayments-icon-secure.png delete mode 100644 plugins/woocommerce/assets/images/wpspin.gif create mode 100644 plugins/woocommerce/changelog/dev-clean-up-images diff --git a/plugins/woocommerce/assets/images/admin_notes/filter-by-product-variations-note.svg b/plugins/woocommerce/assets/images/admin_notes/filter-by-product-variations-note.svg deleted file mode 100644 index 3d65672d642..00000000000 --- a/plugins/woocommerce/assets/images/admin_notes/filter-by-product-variations-note.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/woocommerce/assets/images/empty-content.svg b/plugins/woocommerce/assets/images/empty-content.svg deleted file mode 100644 index 4c61d2394c5..00000000000 --- a/plugins/woocommerce/assets/images/empty-content.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/woocommerce/assets/images/icons/credit-cards/amex.png b/plugins/woocommerce/assets/images/icons/credit-cards/amex.png deleted file mode 100644 index 643153e54fbc5160ea8d195c89c9c4dd1803b327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1733 zcmV;$20HnPP)V8-T_beZwqxy_3`Rvf=f5 z%J5dd>e21`HKW>?)9<$9_P*x#sowN}%ksJ3@*R%OACc2hz3OSi?gyRRq|)rl>iL$_ z^%$1aAdJi|cf5DV@yzS`qulinr{Rar^PJcAAe7M~dcYi~-=Ej@r`z@rnb$P4<|Ks1 zK9$cDdB7cg!feLxA*0$;Iz@{fX?tdw&$hJ>4VSjcf;r; zi_a#9%UZzeM7Zgn)b2E>+Qj7b9d^AUh{JgLE6?wrspw=9#;wr1(cgpS&hRR#K z=n9n84~or;((={s`Wt$|X20jU+U}Co^4jtHez@P6*z-cP z@F=F(7=y?rb-XyUo*reI< z;_~~Q&+1#6&#u($ipuFPd&8~G=xCMi_5A)B znc7#c-7R^(quKUMyXq)_!!euGP_o-4ozxnQ&Sk{ymDl?dd&VA=)eoZGK&;qGu-iJV z-A%OMN0ZBh%XNzLs@m~WozZou)m*UOgS_Exv)ygD;z+FB zD}2Bgq}_kW>9gGMIIG`>%jVL@U3 zVPQcr1s;p}(~B_EFv;$8BLDycV@X6oRCr!h(PNM#NdSi7z1iD6yKURHhqi6owryi= z+qQYMZ6hvc`nqfPji{(UPkfmbwc=$re;7=P^B)-*35H2)33A?B+2g4ca`~oBs_WMe z^(=Mdh38iM--|%waKR%XAtCpIaZ*f5MKs!cG;Ci|Ql6@`G%+zEBBG~f^|KECHpY)c z^5eMSU@$i>M(-7kj?D=p`x2>e6!P$!jE$S8L77iFxRgX9=mCd;L%0}%*ABqI)_E}r7!H@q^rmNMt=PucL(^{giG#d6DCx88ekE)K>tyR_$PBrV5 zO?>aQwb8nh{E4Z_-!3Pf`o1GxfW?+T{QbNS+tlq%7hQzFLq{V1x>16q#XrV{WHN<95&CG``MM@u`>-rOH#gt#@7b$;X_q@Md?Sb# zi=4mdjhSD9gk@zy^1L=SJq4X!)pl(zV`1XQJN>qcLwzUCB(Ir`kJ=3JEx`MNh?*Q8 zyWw`-?+t?)Kh5<{_W#}e=f%!%zdANs{|Mi{1JOD+d!l_i2^%EKYq&nkk!*|;aw$qJ`Y29c0I+MRh{#Z~Sxc&(T z4+x;c;V3w0e`siEb#-xZF}|jzvU1mSR8(NW-rai(3IYQUKzs~|qSNUp5O}#Gk$A+I z(SuRAI(*xWpYM8lN_NM^#X;O;#JeN$NPBoZ0$?M9Q5bI5pg4&{a^A@ojR>%Zur~&* z2V;5qfn9@n@Id_4cR?o8;&LX_=;&x>W>!|#)~yH5L%sC8gTJ=Y#l>Z%v!|AOdZ|@V buQ>F7-$Pwwk8`K&00000NkvXXu0mjfYb?3| diff --git a/plugins/woocommerce/assets/images/icons/credit-cards/diners.png b/plugins/woocommerce/assets/images/icons/credit-cards/diners.png deleted file mode 100644 index 91164293bde9d719a5204c98099c8a389d1f7f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmV+i1o-=jP)<>oj}POvqVl?x_h z6W0KwORg-LSXP2;(fFT6bK92n0|c7zkCfC8U*ehl+&8)=h}9;kSQ=r;noTTKeEiFD z9)72cr#_j-bDz)8@Y#Ic`Ee<0qqXjPpgwbaHtrW)*O<4WiZ6a!LCUnq3k6&n6@~eI z(Rz-&>P_}L|7G^O_*M41MkFrcPJZVrn z`gUqYX<>*GMehzxxcs>G=iL4=_q|)Le%1*nkyn0L!qL~fO;s$x{u6uBr+s5E z9o$Gj6IiCjgYTAMnzpajF}%d_u}G;T1&vDb`As$Z>=z5jF9>b@Uw(d&Z^~EmMcGP< z3xf1$*AQ%nOaw^bw*Ip^4ict?6y7tvq9MTx_iQ4BOI18cUD8C;w*6lS;rR4VadL^EVxx8p2QKP-oiIDBglj z2O1QH&;&^7F->@zYf^e&ARH+P2Xt0%h|{8BAr~Gtf_xyAvXv;K6U0x7xw z%qd)U^k^){;flw;CK9UyO>C1+T69te?2%J?VmlH)GreNKwo_2H2qEaxsi`^$SGlLd zQT^J$=B+VjR410Nt>%g+zUGM!Dl%q@BM0{^zU@5(a-Zl7B7&&uA*{8aO$Gu4~@nkw{fpabbv}f^bfd zc1b%$)_y?h1=AWLhXfgl*002ovPDHLkV1ju< B^f~|l diff --git a/plugins/woocommerce/assets/images/icons/credit-cards/discover.png b/plugins/woocommerce/assets/images/icons/credit-cards/discover.png deleted file mode 100644 index 2d1b1ad183b493b0682594fa1fdfda0426136387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1347 zcmV-J1-$x+P)L2YUkUFCnP-r$>h8K!laZaUA;^5lcWB9uiSC*EBRVdMbgS4lhywul;0Lx{ zP!Gff6uj`#>r4bJyZ4b%A4EV+_kO2m9d_@zSbzXMYnH0I_Lp$1Ztx!4HVbm|c;tcm zc=6e1SQvb6ZffF(ufL+SsF+a|NyYHg1vWlwA8Du=0kNwkW5t4mb2w(ZGq~lWx%~X&kHjY?u*V*| z@zP5#^Y>pPh>wXOHa3R5++5aNb4}I=tUVbA5FJRyRas)XgNQ`JbhNclR9F~fWnEfZ zTiJY*jd}T%7nwGF23gs;RM%9~+E|P6I&f1`h)#ELQz2?q!Cu87ZR5?@YKzTy?6D^~ z?wDf`H6$e_an;pVu)~hq1CSGd@3PBIq^`Ou_`R(%5Luusu^QszOL*% zx2cB103guO5uvKK9>=zW60U|H4%67w5|lQU#RWyAr=^mfo(jO?{6f5l$NKB7jq5sS zOF4)T^b8n-s?yxt8bHS3dwy_kV^{T(65|mOl9LjHvzrl=#N=cU2QANp$*(Yf)|ftL z6;ZFX3w){3((WmQ@lim;0#$JAZXn<9S?2(N@1X$V0NS+=0O{VV#&mzSZ2&L|Lf7wN zM}cKwYVz@Beu_Wy6I`#Iyq4ttz*_?F4*s_iu$;g)TC*5$&R2oIMjOkJsG!|KapX0I z`k4+@3H-l-?W&RsegspNfj9RX{G8v=rb@((MnZ{z>GJ<~$P$1aSOjgZ!sJiH%lrXT zFa?dYAx)pEQjX1sMseq;HKeETyG-Uwc1?TcNcUYV)Bi zBXBlaxd3ghfwo3K5IfXU0b#Hbln9o$I4pYsQ(1|ehaP+4oGmurdIwf29}M)o;5Su4 zc?N#|6ijV70G1mEb^z%59H@J8D%gO1}HzK7{ zxmzxiK_Qp_6Cn$k0A%epzqcr@h;%xg7XR3bOwrNN4bz2xyVzvWmo6i4?=eK|J%xll=UHTDA3>+o zAUrV!2V5>;xAz5>Jz5qZ6!Y`W0|O5xUdTr)V(uEt)NML5mfEXty>N z?Ki368>NKDvBP-Xt_R*X?gY0+z2Vb*2tpeUL(-rXNQjBXoTnR6@6tdtxH|+5UJOTr z&!f=LeLU8LpMqAV{&6^6XfOeKqc8-Yd*}_SO}fqDO_l|q>B=|;ck_zD(>}fMs8I_B zw{O%9UQPQWq}D(Nclgf{^-l~Iz$-fs!HUqM1Q)DH7LzS-jy4ztpeLtM!k<;F$?-wudzit?p6Wz+4lnA^6AMBPKqFE9 zIGirj833)`C*vh#OEkK#g6wl!9RZq#?87lS*zF$9tXFPQ{mfl3iUXL zQ>(POG8Ju~O`r(i7Hg7)@Ydnq&}y9^X7G|@o-z2PH_@>3m16ldHG@0v+=lQEpAdfk z37;&nr*5$xkBSJz+h98!w7bGWA3uxu#5U)|pe+QqT$AIi!nJx6yFsNj2qKe6&~@o8 zz@v)!r!6ObvjTpNgC}8K41ZjK%!D+Ja%^A^W3SxWDV&6+hPR4*cD_GUP z2D`Ij4DnsX;g)NXg-kZUjbLz%UJy%oz7e0y;8c0FQ3v;(d+;D%3A`;)3C^V&!mn&o z#B?0X;Z*HypD(hR?j7whDnj>r;dCs@qg?xv-j1kxy^ zb|JW6O|p>5(Z$Vr#pwoxS|>Fef`X2r#G zH{y=_^R(dfcuR1>nq(o9O>nwFEY}E<8k~BZHs>9CIih{N!Fs%K9$syf1U-@c8zBps9zT9l rE?xNCMT_d6KXYcnzZ5d1ho<}wBWHnT%N)L600000NkvXXu0mjfb9lpC diff --git a/plugins/woocommerce/assets/images/icons/credit-cards/laser.png b/plugins/woocommerce/assets/images/icons/credit-cards/laser.png deleted file mode 100644 index cf7a656eddecc4e0265ceac43a2205f365daca06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 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 LNkvXXu0mjfDAcCZ diff --git a/plugins/woocommerce/assets/images/icons/global-attributes-icon.svg b/plugins/woocommerce/assets/images/icons/global-attributes-icon.svg deleted file mode 100644 index 7e567300f87..00000000000 --- a/plugins/woocommerce/assets/images/icons/global-attributes-icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/plugins/woocommerce/assets/images/paypal-braintree.png b/plugins/woocommerce/assets/images/paypal-braintree.png deleted file mode 100644 index 465109ac26fb9bc1d3c5ded0b57423a96c3de198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 zcmV<12PF83P)fAcil+YjA%(rQ6{syg-$oGKy2deUXY^QCE8s7GGF@q#vn!T>t? zI!Z^r0Q-XWbLuV08}dWQ&Ov7hsS@&!kOFjcAbmq|5^^KxG;@$2LdP5whmf6v&LQL` zAv1#f6SSPY5-beCIm0AmYv{kkjbHA4vPOn$j(9M zhoG$sZJ!1atv(gv0Js6<#r_OMA@&)_3i%8LPQVxvdIYISXhW1bkQ_lfMQE*|ouGx+ zg%3gT$Dw5i>2HSAF9PwnVW=1(XeHodP$(e#>p>KSDTpfDha|Z}XeGA?ksJS0ogk77 zF9=|Wr>jeALA)-Rm*FKg=PT9;6glJm+N`f(EDwNaTe_iepRglA6okmxjevXtT>!7( zZUpfP-iLVi@&xf#sA`BioVPB-i~BzrwA7G1yO1PEcOVpdz5Y=I{ndjEda2}wixn)O z^oT17%9jV#g0>XeE@&$tS3*k)=>&2&v|rHv4w(YF2(gxs;TiUZG=|y`5$RiYfOHC> zd_8Etpgo0lKwJq#Lq0&7!rFpx8v<9rsT5KKaV6A=9HbDAy@H|bf|e4pfc6HoRS==4 zUE2_@AR7=zO%Y#1q6KBMDLkBz3_7*}#VQNLvrWww*wnkZh$&x9wPTqKF#sLr6S{5fCyPv7^*oRuCsvpeM*uXb1{` zs^vb1Xm$o2EAJbs17U%`mo${XXOOwi9kK&i8hC_Y+Xu)1+7f6(P*BP(gSHBy`wfWB zy_Ap?@)vaA;8b;@p#_~aWJi#{AXh*XwG=Wm%#g1kn?qc4N=OP(#ySx4R6(YMJVBxZ zA@#O^emjBEWk--LAohNzgaC@7gqU3rv^MkyjRCR*#SDsoXrKlCnM01F2*?3q<%SM| z(1E?-U`NU$6c}1NkYmUekSrlzKs1J+0y=&cT9N|m9+Y*W1L$DL6p*^1(1Y|mWP6ZJ zAcgR>p=AhBVgQL6I;S8x39Yk`OrClITM$o1T@qB~P-sC0{Sca?8p6{~kncfz4_X*s zC!hm=J5XTUzeBDCS;9LI7A}S~5|TkX>9P;;Y~6+;AR1quAtU4o2nmrHgmXpNi2}OR z1<;O!8cu9M zxUYYwC5{bfA3*tca14hELM?RF(cl?O?Ty7zhLKEL+f}L@yAm*XUupdL=_I0vk)A2OskS zZT%uCtm(nWyg{ncLylF*!73G+GLrEIcQ@FL4k2VtK7EWC{b*t2hnJ|??V+(%0z6(a z9Q@I-7ZMhZubhwqRSe1rDNs2f1xl2JTnQ*Aq(G&FJS!+C(C^AdCbQZ_VuUjgCsA zV(^ZAaeFBI0|`U?2*k|nYlfyA)DDUXs(Q$=1a*~(@OBWg%-sJDQky6-kjKdJ%g>}L^9z+D~IS|wlBp*OJGU_CCHKm|=DM%d&`~^=LkrwT-G4lWb002ovPDHLkV1nV>Xe|H$ diff --git a/plugins/woocommerce/assets/images/select2-spinner.gif b/plugins/woocommerce/assets/images/select2-spinner.gif deleted file mode 100644 index 2525782bb8d8939f521c2e8744b13ab2439ed12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1434 zcmZvbe^AnQ7{@-Tr(2c_tgYKx1DyYgq_!|Uuc-JhpnCQPQJ#0N3nX9YmCZEqM+6o<3W=&vq8^DP13?OykDT(kKH z?kQN(p_I8qpor8V72@@!Q}opmeYo7J43I!VI#Te}bcc}yYsUiSFtNB}mFvO!lGxw^ z=a#-=4k-wG!JkF}?n!Rw#5L|gD(m3Kktg@Y{6`V-@dG&Dr&#OIvM*~@GG21V4Q@?a zj(jRH6jh{6V#gf}qK*01_vnfk5cH)P^kqe?4KX%?(IdSLSl;ka=hqCA<2DzD$d_0@|D&X>!0bJ;H3&`IjbRM>D#64p`_gOQ%p!AgvGAgJYfZ;jr zw2jzV^N^*hjpo+%SZ9!kAo@;WDOLvGCg>l8@$G>+ss>_M?@BF4>u;qi(a$Vo^nI$`ml%)+N0j*k6YQV7jIwXS{hP@))5XiRKo%}^j^F62 z4adN0p{-@2mZB%fuEsW-#4JT-2v*tQYzCs1;R@YN(3?w{E7kIQXQ;+OChA~{jaXVz z)E2UkB;kC^2Ypyg4al6YNV~){b3QYQ;S*z-MO*o>`h+B=?&pn2yao&!I0vex zoHj$@N4DY9iuw)Il_T-T_$Gm0&&LY^$d{Alq~uK~(JIU4hxuQK@BF%b^d9FNQKJqO zIqeEER-N|vz{1%!yA2gzhZE0KK2oe9?CXgb>bt|FQm*byDOjXJ#7a+F6?l6L-6~3= zwhsO@2)f^_DT4nmCChJ+<5a^?@2=k=ewOK#{y!ZT4rBYoW}f{jmE zjbZ)I^dw>LoJ;p$a~Qtrnx1c9nut3eqe3LaHI>J|Sw2XPnLHL5nL2V2W!+CwCBFm* zd~pA~fzQmWW^8Xs*G&Gxd#8vk!z6VByD&%jd2qrkY35P7{*OS!=ux$k@TW}Y%LaI4 zsZpT68B#ABvWrACNGXwvV&TfT%z4Oayy>8_@-3Fcp z8ga_PtFz2zFS+yaW-Ol|pE8GZ>}m4g14eYn=wiefX_2unH@LY~YAj8qG|kU@Vo(lL zAw}uyaU@_}uXC(|d5T7iS2xhl42534rr)@HuQDDRSfmW~x7JJ^$yxx_bCA0v*7Q Q55DbcS|^Aek^->dFJlhn7ytkO diff --git a/plugins/woocommerce/assets/images/select2.png b/plugins/woocommerce/assets/images/select2.png deleted file mode 100644 index 32c2fc3a22b27657ec7d7e7a07648725073c0a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)k0RwCm?kX_vM1ZO92_QVH7T{b zMACM3q4}|IE{oCBT5_0X_4RUD4)~Vo+ox!chnD{B|_^8#ZgXjDpUNhrn2T)=e^<=bwJf=e_(1+Qt1q@MUmr|e!Gflfh9bK5W zN`+GxQ{p4Wl)0`{*vUO!GR7r(F{Y^WxQa11s8wooGmmLidOV`cX8rIT@^c6V%D+o* P00000NkvXXu0mjf9}Mzg diff --git a/plugins/woocommerce/assets/images/select2x2.png b/plugins/woocommerce/assets/images/select2x2.png deleted file mode 100644 index 44b188fd020108b3add25c0f7de20088b6586cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%o!3-pyx;pL#Qo90tLR{Sod^$Qh+S}WKBoK6V zcJ}x81Gzxp=H>=r0L38;S65eL5wH#r0TisSuLm-EdU_y&$jaK<+90wJ60QKE5uy@E z0=Yny-QC^I&CL+0RjXD(#DQF(INVGi7w9(57kbe^U)Yoc`2{l+G<^6QAnP&@kSvyGKU(>{BheHQxoe5H=T%JMb)lWRj? z|BkTVx#^9?=3T0{SF8_qUd-8f{={Y#wP2~s4ck>t8m;;{M{XYbo^^^Rj~x}+zVrLD zh1zE-8X{$$p0>Yr>9E#vTnUYDr>Z!Pi%C>wtZ_hDFwa%zP0s& zMbG=MPTWjBd)DWM&Q^aWI{U1)>Fn@c`{$hpRBmj1(6=;n?fc}vPlV27F*aWJJa+&D z8oaHUW-Rr4ty?^a;lTW*mv*x>CYfk46lmVj@4WlJe*V5XnePfI)n%3&e{8ina{j)! z!@6D1MPB?@ntZA#tl**=;+pWKLsI16xLqtB`$HPaN-ptKOX_~RW_W!eA-|F~Y%1=;j zJY+AlEtT)!#v#PR$2vB3Ce N@O1TaS?83{1OO14Z2kZM diff --git a/plugins/woocommerce/assets/images/task_list/basics-section-illustration.png b/plugins/woocommerce/assets/images/task_list/basics-section-illustration.png deleted file mode 100644 index 988a281048f1e0f4f41435d605bf6cc027d41c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16174 zcmV+}KheO6P)nr@bK{O@bL8Y_3iKP^Yrx4(a|U`HSO;1>FewE`1s=E z?E-J35ET~o_xJVp_Yf2o@9^;CWqCnu%w^LPI;nutwA8}%} zz0$#+_4fAE#iP=~q21KF0duOjxw>YzzuDQ_0CA_;%CFbX!Rh7S-O#e**uUuH-u>#q zJ)EQ4+uhsL%Rrx|+0n(^&92SCvE<#z?P)B~zMIp_zSYE^xuuKy`S!@UsLH*p=HlGs z;M(Ke*WT94zresrID4F-Pg}*vd+!9l^-7<;M&yw?Wjaa zPSD4>;MvaN+|#t5gjuh)>EqcoB^VJ42LJix{N}h2S$##Ksl~LP{p6MY*Fx0Exh^m< zKQ1Bv`|@hIzPqcIPEl9a*xCN_%1NcHUtnQXKQF<;#8j-aOHEP1v7SjbD7vMBO{cCZ z9TCB=m1}Kq^1-6_&90!JppcM|wxD^Cl$QC{zRI+XfPsKfs<8dkG#wQUvDDrE;&|Sr ze*WEEzptCs=R$S{@PE;%iYk>(4V5C zMoWzT;A^CZXzAtQtdw}eh+)^9U3XMK|Mu6ry}t3qf$O(vw2x^ulDrRltr1#&D=>WB zqH9-LmuW{asHw=8nZ7wagfTfge}S*UtAgK8Nd5BOmTpq$^!54R-(;w)^4O|zb*EQw zZ}s53T7re-b#eUh?(gZ`e89%+fi%P6<(tmZjmFOEmy=(YnoMM3^18XCsi;q&qtBLx zcYJ^Bl0QR@k@WEAouH#ZbayL_xZc2_NA$ff0000bbW%=J00ajM4}_qgz@_11fgz)t zN$~!moZ!I3b2Nt0=fY^PHs3_ZpbpBz&j0{B#7RU!RCwC#+`&%UKoEdok42H15k|nfCF1fG+Vz2t0r;J3ON!owvQaWAjJr&lT_!J-P!l zy3lm!zv#ZF+q!w9bX>VB-~H{hKS$m9KtHeZJ~!Lm9#`y8Sw@|C=;`^HUg775^Lns@ z2aNUCbRG100qC-~kFofF2u0TmyL`YadK(N5=W%;ax9~I4kL&W{{C2U5$6Ks#uYdG= z0Daju2k_FxdKE`_peTy3&X&;9#eEKFz$y5Gdmku@Pbs?IoRbf>mTLZbD|%Qk_2Gt?K+FjskPpck%WTqx<0i9 zfZlAEq+QhMsc|0R)Z!)Ru3Z)y^4=OJ7hmWGP8ccyEq{fRi>`J1CJj%y@5i5z{0ji+ zi*rf1_-Aa`+xzVLI!zex4oe;+n>x?S`tfO0@~@!#H%Vx%J!Hy*O&X?UT~(X9$XuR` zm~vkic2R)&{@&z4?aCy;o~@j#_D;F)>z-Ybmt(#+`Nq`&;zLyyS(X-cGvbNM?7rlB zA(sWnnB+E1Ee2I;wp?xzE4LXn<@(`AA;24(+`1a^(V5qBOWznyt~+))064inoZPw! zgTlPg{Bu?hZr^&!dCM`}KlTsLr1bnmH*+OcQ#j^bH>h=EIn z7k0fJBLs||@;c|@uUTv)E*MD8(e(q)|5h_^%pXW@o$Z2Wp)qL@bSLInf{g_0a%jr`yW}VL zm)~6|U$!H8mE#jOQbTIwlN1{z24V1i^55ZG-!E@Yyd!q}7kx{j(6CvXRNzrFV?xRD4(Ry2gUa^2*N3JoUH6JOt*@(u%!%GsZL6 z!Y7QRUmlptmvba5b6FJeA>_KWh7OXw3X{Fu?`x($-4%I^%pZwGX&AYpJsZOO*eeb+ zC`Ta|Z#I!>IXk!iA`g>YGZaOe>lS$-M<9P4*}nZHzO)~=%67kxzip?EKjwJjb{V

|Z;UyL`Dp;TsVKq)KZm(u2FYHr13d`@AA|h) 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 diff --git a/plugins/woocommerce/assets/images/wpspin.gif b/plugins/woocommerce/assets/images/wpspin.gif deleted file mode 100644 index 547360d127e845f5f5801bf65f96623eddd79db2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 zcmbW1Yfx0@8OP7%J@@Ng;2aKz-2*Zi+E}|HrZ8okWnqzU6*W_IlGKtogh9uJO(?ix zmSr)l?sD1C7U@p7E}(U%Nfo0`Xt=nE8QZO~4oPNOMx*kjosyV3#D1ZNv|8H9r=Iii zdEe*#|DNanJUgE)&dvLY2#L_cRA@1gSYBRUT3YJw?~g{KevfBmWo31Bb#YOTB>aAV zJRYB!nVFuRURzs>#bSwgBBCD+2G>?sr(-capkIzeBGE`B5s!O3o@g}Ual3@T!pD2t}a(ln=3Q-UfVcDUPF(OK*PiZ=Z%=3e?#Bo(ZvtZ%gWo7q!GxUTfs}^I#;u!$|=@SXijpBY9 z+*qM*lJ4-U3Wct#nyc){K{wbHAAPIwNKy6|1IY&o^ob>;Qz4h z*bU`Y` zk3|u~AuI_QCl7tAh-SOD*OZxE~2 z5>_OlNj)3&oLb2Uxl;a3$=@Ow401H@b3f*HILM@Fuy%$0iX(9mbF(pi@H0Qi=;g z!j3L{1Rg`8rG?1o_)qK1(Ac>rb79w8Gc8tdq-p0bRvL3J`<##VDXbdAEYo0iv*;0 zpA|iw#Od~-g%$zJphQ5!6DA46P_ZRNktH0SLl81fp>mahoL?Xr<37i^vkMIH{Hsp- zzQ8u>bkF*BZOeLo3)<_dXMwTfZuR-As>&Dt-J!khrx&)*{t0>3fK@^*N)p3L7*dHD%9xRiG8ma4Ns1aVmQ#~w zDAtQvnW^*T-)f!1`pkbU=8E$#XCt|}Z?O{(ZswP(fw_afWMv-mIWEnJe!L^Qeg}H< z)@uWAQ=e{cn!Q^fe)`o>57oT8f#ZOHAQ0AIe#3x~r}jaLksah524wwxW_++AWrPyP zBMmL=DA)MJG5<9|O}c`vTook6U0F6+;0fRP=Tq3sv4xT>i1v94yl@sdO58zO0MZq8 z4PWsZk39NfUi$i>fBmS3NpyjR_l$>K$YU+Ts|i=g^k6_F^!M72yl_m_6>cSrzV zb&kvewYy`vu`+8%;Ob5|Pqs5pAqL$%9+s^pNd-C~LKaOjP{HoruoPii(asZ|hy+?$ wcdMWRuuoy$VKqfb6JkJ>(cc6(VGbOw(zy4z*#&*wD3ZW(097l*0_cbT1lJoo9{>OV diff --git a/plugins/woocommerce/changelog/dev-clean-up-images b/plugins/woocommerce/changelog/dev-clean-up-images new file mode 100644 index 00000000000..182dcf3723f --- /dev/null +++ b/plugins/woocommerce/changelog/dev-clean-up-images @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Clean up unused images From af75166a0713834446a8f7107af28446e6591780 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Tue, 13 Aug 2024 11:48:05 +0800 Subject: [PATCH 003/318] Fix the spacing between the "Set up my store" button and TOS is too tight on small desktop screens (#50579) Fix core profiler set up my store button and TOS are too close to each other --- plugins/woocommerce-admin/client/core-profiler/style.scss | 3 ++- .../woocommerce/changelog/fix-core-profiler-setup-tos-spacing | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/fix-core-profiler-setup-tos-spacing diff --git a/plugins/woocommerce-admin/client/core-profiler/style.scss b/plugins/woocommerce-admin/client/core-profiler/style.scss index 44caf896196..222f4587aae 100644 --- a/plugins/woocommerce-admin/client/core-profiler/style.scss +++ b/plugins/woocommerce-admin/client/core-profiler/style.scss @@ -166,6 +166,7 @@ align-items: center; font-size: 14px; font-weight: normal; + margin-bottom: 16px; @include breakpoint("<782px") { width: 100%; @@ -179,7 +180,7 @@ justify-content: center; @include breakpoint("<782px") { - margin: 16px auto 20px; + margin: 0 auto 20px; } .components-checkbox-control__input-container { diff --git a/plugins/woocommerce/changelog/fix-core-profiler-setup-tos-spacing b/plugins/woocommerce/changelog/fix-core-profiler-setup-tos-spacing new file mode 100644 index 00000000000..13b00bc97e5 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-core-profiler-setup-tos-spacing @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Fix core profiler set up my store button and TOS are too close to each other From 701a5cbb6092899cadccc14a7ea00856d2bb66d1 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Tue, 13 Aug 2024 11:49:07 +0800 Subject: [PATCH 004/318] Update Continue button container on core profiler extension screen (#50582) * Update core profiler continue button container On desktop screens 900px and smaller, add a 140px tall container stuck to the bottom of the viewport Add a transparent to solid white gradient to the container (top to bottom) Vertically center align the continue button and dislaimer text inside the container * Add docs * Update style --- .../client/core-profiler/pages/Plugins.tsx | 88 ++++++++++--------- .../client/core-profiler/style.scss | 14 +++ ...pdate-core-profiler-sticky-continue-button | 4 + 3 files changed, 63 insertions(+), 43 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-core-profiler-sticky-continue-button diff --git a/plugins/woocommerce-admin/client/core-profiler/pages/Plugins.tsx b/plugins/woocommerce-admin/client/core-profiler/pages/Plugins.tsx index 6b746072925..f3c50c28bc3 100644 --- a/plugins/woocommerce-admin/client/core-profiler/pages/Plugins.tsx +++ b/plugins/woocommerce-admin/client/core-profiler/pages/Plugins.tsx @@ -219,51 +219,53 @@ export const Plugins = ( { ); } ) } -

- -
- { pluginsWithAgreement.length > 0 && ( -

- { interpolateComponents( { - mixedString: sprintf( - /* translators: %s: a list of plugins, e.g. Jetpack */ - _n( - 'By installing %s plugin for free you agree to our {{link}}Terms of Service{{/link}}.', - 'By installing %s plugins for free you agree to our {{link}}Terms of Service{{/link}}.', - pluginsWithAgreement.length, - 'woocommerce' - ), - joinWithAnd( - pluginsWithAgreement.map( - ( plugin ) => plugin.name +

+
+ +
+ { pluginsWithAgreement.length > 0 && ( +

+ { interpolateComponents( { + mixedString: sprintf( + /* translators: %s: a list of plugins, e.g. Jetpack */ + _n( + 'By installing %s plugin for free you agree to our {{link}}Terms of Service{{/link}}.', + 'By installing %s plugins for free you agree to our {{link}}Terms of Service{{/link}}.', + pluginsWithAgreement.length, + 'woocommerce' + ), + joinWithAnd( + pluginsWithAgreement.map( + ( plugin ) => plugin.name + ) ) - ) - .map( composeListFormatParts ) - .join( '' ) - ), - components: { - span: , - link: ( - + .map( composeListFormatParts ) + .join( '' ) ), - }, - } ) } -

- ) } + components: { + span: , + link: ( + + ), + }, + } ) } +

+ ) } +
); diff --git a/plugins/woocommerce-admin/client/core-profiler/style.scss b/plugins/woocommerce-admin/client/core-profiler/style.scss index 222f4587aae..1378c8b90d7 100644 --- a/plugins/woocommerce-admin/client/core-profiler/style.scss +++ b/plugins/woocommerce-admin/client/core-profiler/style.scss @@ -386,6 +386,20 @@ } } + .woocommerce-profiler-plugins__footer { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + + @media screen and ( max-height: 900px ) { + background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #fff 44.69%); + height: 140px; + position: fixed; + bottom: 0; + } + } + .woocommerce-profiler-plugins-continue-button-container { @include breakpoint("<782px") { width: 100%; diff --git a/plugins/woocommerce/changelog/update-core-profiler-sticky-continue-button b/plugins/woocommerce/changelog/update-core-profiler-sticky-continue-button new file mode 100644 index 00000000000..25528ca7f07 --- /dev/null +++ b/plugins/woocommerce/changelog/update-core-profiler-sticky-continue-button @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update core profiler continue button container on extension screen From 30e3e3cd6dd72e1492247b0b32257d1fe2b21e78 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Tue, 13 Aug 2024 11:50:12 +0800 Subject: [PATCH 005/318] Fix navigation badge decreases when installing extension in "Grow your business task" (#50584) * Fix update badge logic * Add changelog * Fix lint --- .../client/task-lists/components/task.tsx | 36 +++++++++++-------- .../fix-badge-decrease-marketing-task | 4 +++ 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-badge-decrease-marketing-task diff --git a/plugins/woocommerce-admin/client/task-lists/components/task.tsx b/plugins/woocommerce-admin/client/task-lists/components/task.tsx index 67f12096dbc..ae38fd1267c 100644 --- a/plugins/woocommerce-admin/client/task-lists/components/task.tsx +++ b/plugins/woocommerce-admin/client/task-lists/components/task.tsx @@ -9,7 +9,7 @@ import { WooOnboardingTask } from '@woocommerce/onboarding'; import { getHistory, getNewPath } from '@woocommerce/navigation'; import { ONBOARDING_STORE_NAME, TaskType } from '@woocommerce/data'; import { useCallback } from '@wordpress/element'; -import { useDispatch } from '@wordpress/data'; +import { useDispatch, resolveSelect } from '@wordpress/data'; /** * Internal dependencies */ @@ -31,25 +31,28 @@ export const Task: React.FC< TaskProps > = ( { query, task } ) => { const { invalidateResolutionForStoreSelector, optimisticallyCompleteTask } = useDispatch( ONBOARDING_STORE_NAME ); - const updateBadge = useCallback( () => { - const badgeElements: Array< HTMLElement > | null = Array.from( - document.querySelectorAll( - '#adminmenu .woocommerce-task-list-remaining-tasks-badge' - ) + const updateBadge = useCallback( async () => { + const badgeElements = document.querySelectorAll( + '#adminmenu .woocommerce-task-list-remaining-tasks-badge' ); if ( ! badgeElements?.length ) { return; } - badgeElements.forEach( ( badgeElement ) => { - const currentBadgeCount = Number( badgeElement.innerText ); + const setupTaskList = await resolveSelect( + ONBOARDING_STORE_NAME + ).getTaskList( 'setup' ); + if ( ! setupTaskList ) { + return; + } - if ( currentBadgeCount === 1 ) { - badgeElement.remove(); - } else { - badgeElement.innerHTML = String( currentBadgeCount - 1 ); - } + const remainingTasksCount = setupTaskList.tasks.filter( + ( _task ) => ! _task.isComplete + ).length; + + badgeElements.forEach( ( badge ) => { + badge.textContent = remainingTasksCount.toString(); } ); }, [] ); @@ -64,7 +67,12 @@ export const Task: React.FC< TaskProps > = ( { query, task } ) => { invalidateResolutionForStoreSelector( 'getTaskLists' ); updateBadge(); }, - [ id ] + [ + id, + invalidateResolutionForStoreSelector, + optimisticallyCompleteTask, + updateBadge, + ] ); return ( diff --git a/plugins/woocommerce/changelog/fix-badge-decrease-marketing-task b/plugins/woocommerce/changelog/fix-badge-decrease-marketing-task new file mode 100644 index 00000000000..d58e5d86e9f --- /dev/null +++ b/plugins/woocommerce/changelog/fix-badge-decrease-marketing-task @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Fix navigation badge decreases when installing extension in "Grow your business task" From 49e11aa25b2d485bc4b67e180963d32a62e5b324 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Tue, 13 Aug 2024 13:02:50 +0800 Subject: [PATCH 006/318] Update add product task bottom section UI (#50580) * Update add product task bottom section UI * Add changelog --- .../task-lists/fills/products/constants.tsx | 11 ++++++----- .../task-lists/fills/products/stack.scss | 18 ++++++++++-------- .../woocommerce/changelog/update-product-task | 4 ++++ 3 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-product-task diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx index 1dd3bac2ee5..907c687a17b 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/constants.tsx @@ -82,9 +82,6 @@ export const PrintfulAdvertProductPlacement = { title: ( { __( 'Print-on-demand products', 'woocommerce' ) } -
- { __( 'Promoted', 'woocommerce' ) } -
), content: __( @@ -99,7 +96,11 @@ export const PrintfulAdvertProductPlacement = { src={ PrintfulIcon } /> ), - after: , + after: ( +
+ { __( 'Promoted', 'woocommerce' ) } +
+ ), onClick: () => { recordEvent( 'tasklist_product_printful_advert_click' ); window.open( 'https://woocommerce.com/products/printful', '_blank' ); @@ -116,7 +117,7 @@ export const ImportCSVItem = { content: __( 'Import your products from a CSV file.', 'woocommerce' ), className: 'woocommerce-products-list__item-advert', before: , - after: , + after: null, onClick: () => { recordEvent( 'tasklist_add_product', { method: 'import', diff --git a/plugins/woocommerce-admin/client/task-lists/fills/products/stack.scss b/plugins/woocommerce-admin/client/task-lists/fills/products/stack.scss index 13ad6bd76ff..45cfb87b5cf 100644 --- a/plugins/woocommerce-admin/client/task-lists/fills/products/stack.scss +++ b/plugins/woocommerce-admin/client/task-lists/fills/products/stack.scss @@ -57,17 +57,19 @@ flex-direction: row; align-items: center; gap: 8px; - - .woocommerce-label { - background-color: rgba(var(--wp-admin-theme-color--rgb), 0.1); - color: var(--wp-admin-theme-color, #000); - border-radius: 2px; - padding: 4px 8px; - font-weight: 400; - } } } + + .woocommerce-label { + background-color: rgba(var(--wp-admin-theme-color--rgb), 0.1); + color: var(--wp-admin-theme-color, #000); + border-radius: 2px; + padding: 4px 8px; + font-size: 12px; + font-weight: 400; + line-height: 16px; /* 133.333% */ + } } } diff --git a/plugins/woocommerce/changelog/update-product-task b/plugins/woocommerce/changelog/update-product-task new file mode 100644 index 00000000000..5519757b9c4 --- /dev/null +++ b/plugins/woocommerce/changelog/update-product-task @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update add product task button section UI From e82f1ea98f500ca9f8748c4bcc0c12054f2378bb Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:28:21 +0100 Subject: [PATCH 007/318] [e2e tests] Add hpos disabled environment and tag tests (#50448) --- .../changelog/e2e-add-hpos-disabled-env | 4 + plugins/woocommerce/package.json | 14 +- .../envs/default-hpos-disabled/env-setup.sh | 5 + .../playwright.config.js | 20 + .../tests/merchant/create-order.spec.js | 2 +- .../merchant/customer-payment-page.spec.js | 2 +- .../tests/merchant/order-bulk-edit.spec.js | 2 +- .../tests/merchant/order-coupon.spec.js | 2 +- .../e2e-pw/tests/merchant/order-edit.spec.js | 4 +- .../tests/merchant/order-emails.spec.js | 2 +- .../tests/merchant/order-refund.spec.js | 4 +- .../tests/merchant/order-search.spec.js | 2 +- .../merchant/order-status-filter.spec.js | 2 +- .../cart-checkout-block-calculate-tax.spec.js | 2 +- .../cart-checkout-calculate-tax.spec.js | 2 +- .../shopper/cart-checkout-coupons.spec.js | 2 +- .../cart-checkout-restricted-coupons.spec.js | 2 +- .../tests/shopper/checkout-block.spec.js | 2 +- .../tests/shopper/checkout-login.spec.js | 2 +- .../e2e-pw/tests/shopper/checkout.spec.js | 952 +++++++++--------- .../shopper/my-account-pay-order.spec.js | 2 +- .../shopper/order-email-receiving.spec.js | 2 +- 22 files changed, 545 insertions(+), 488 deletions(-) create mode 100644 plugins/woocommerce/changelog/e2e-add-hpos-disabled-env create mode 100755 plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/env-setup.sh create mode 100644 plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/playwright.config.js diff --git a/plugins/woocommerce/changelog/e2e-add-hpos-disabled-env b/plugins/woocommerce/changelog/e2e-add-hpos-disabled-env new file mode 100644 index 00000000000..7f88973e400 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-add-hpos-disabled-env @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +E2E tests: add hpos-disabled env and tagged tests with hpos tag diff --git a/plugins/woocommerce/package.json b/plugins/woocommerce/package.json index dadc6f811c4..37a8dc9c0be 100644 --- a/plugins/woocommerce/package.json +++ b/plugins/woocommerce/package.json @@ -329,14 +329,8 @@ { "name": "Core e2e tests - HPOS disabled", "testType": "e2e", - "command": "test:e2e", - "shardingArguments": [ - "--shard=1/5", - "--shard=2/5", - "--shard=3/5", - "--shard=4/5", - "--shard=5/5" - ], + "command": "test:e2e:with-env default-hpos-disabled --project=ui", + "shardingArguments": [], "events": [ "daily-checks", "release-checks" @@ -349,7 +343,7 @@ } }, "report": { - "resultsBlobName": "core-e2e-reports-non-hpos", + "resultsBlobName": "core-e2e-reports-hpos-disabled", "resultsPath": "tests/e2e-pw/test-results", "allure": true } @@ -443,7 +437,7 @@ { "name": "Core API tests - HPOS disabled", "testType": "api", - "command": "test:api", + "command": "test:e2e:with-env default-hpos-disabled --project=api", "optional": false, "changes": [ "client/admin/config/*.json", diff --git a/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/env-setup.sh b/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/env-setup.sh new file mode 100755 index 00000000000..2900abc5127 --- /dev/null +++ b/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/env-setup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -eo pipefail + +echo "Default environment setup." diff --git a/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/playwright.config.js b/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/playwright.config.js new file mode 100644 index 00000000000..d3270371c1c --- /dev/null +++ b/plugins/woocommerce/tests/e2e-pw/envs/default-hpos-disabled/playwright.config.js @@ -0,0 +1,20 @@ +let config = require( '../../playwright.config.js' ); + +process.env.USE_WP_ENV = 'true'; +process.env.DISABLE_HPOS = '1'; + +config = { + ...config, + projects: [ + { + name: 'ui', + grep: /@hpos/, + }, + { + name: 'api', + testMatch: '**/api-tests/**', + }, + ], +}; + +module.exports = config; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-order.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-order.spec.js index 0b58a38a655..aa33c49f167 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-order.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-order.spec.js @@ -48,7 +48,7 @@ let simpleProductId, test.describe( 'WooCommerce Orders > Add new order', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/customer-payment-page.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/customer-payment-page.spec.js index a0cdf958383..7aceae0f0fd 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/customer-payment-page.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/customer-payment-page.spec.js @@ -7,7 +7,7 @@ const productPrice = '15.99'; test.describe( 'WooCommerce Merchant Flow: Orders > Customer Payment Page', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-bulk-edit.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-bulk-edit.spec.js index 99b5a38b5d5..f6faa6d70b1 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-bulk-edit.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-bulk-edit.spec.js @@ -1,7 +1,7 @@ const { test, expect } = require( '@playwright/test' ); const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; -test.describe( 'Bulk edit orders', { tag: '@services' }, () => { +test.describe( 'Bulk edit orders', { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); let orderId1, orderId2, orderId3, orderId4, orderId5; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-coupon.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-coupon.spec.js index 72f2ee5a3c9..190b8cbf1cb 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-coupon.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-coupon.spec.js @@ -11,7 +11,7 @@ const discountedPrice = ( productPrice - couponAmount ).toString(); test.describe( 'WooCommerce Orders > Apply Coupon', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-edit.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-edit.spec.js index 9590b322210..d5ff5e5ccbc 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-edit.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-edit.spec.js @@ -2,7 +2,7 @@ const { test, expect } = require( '@playwright/test' ); const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; const uuid = require( 'uuid' ); -test.describe( 'Edit order', { tag: '@services' }, () => { +test.describe( 'Edit order', { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); let orderId, orderToCancel; @@ -286,7 +286,7 @@ test.describe( 'Edit order', { tag: '@services' }, () => { test.describe( 'Edit order > Downloadable product permissions', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-emails.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-emails.spec.js index 4ea006ff882..27c6b7ea7cd 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-emails.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-emails.spec.js @@ -5,7 +5,7 @@ const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; test.describe( 'Merchant > Order Action emails received', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-refund.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-refund.spec.js index f5ef9df88d2..9aa6798d653 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-refund.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-refund.spec.js @@ -3,7 +3,7 @@ const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; test.describe.serial( 'WooCommerce Orders > Refund an order', - { tag: '@payments' }, + { tag: [ '@payments', '@hpos' ] }, () => { let productId, orderId, currencySymbol; @@ -147,7 +147,7 @@ test.describe.serial( test.describe( 'WooCommerce Orders > Refund and restock an order item', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { let productWithStockId, productWithNoStockId, orderId; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-search.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-search.spec.js index 06639ea7300..96b3b703e26 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-search.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-search.spec.js @@ -71,7 +71,7 @@ const deleteCustomer = async ( api ) => { test.describe( 'WooCommerce Orders > Search orders', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-status-filter.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-status-filter.spec.js index 56b9a3fc9f5..31030d379ef 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-status-filter.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/order-status-filter.spec.js @@ -17,7 +17,7 @@ const orderStatus = [ test.describe( 'WooCommerce Orders > Filter Order by Status', - { tag: '@services' }, + { tag: [ '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js index 3770d57b751..f449ebe1b3a 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js @@ -38,7 +38,7 @@ let productId, test.describe( 'Shopper Cart & Checkout Block Tax Display', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); test.beforeAll( async ( { baseURL } ) => { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js index 4888e1bb8a9..bfcc1218a69 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js @@ -24,7 +24,7 @@ let productId, test.describe.serial( 'Tax rates in the cart and checkout', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js index 233fba40077..813b3623236 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js @@ -26,7 +26,7 @@ const totals = [ '$15.00', '$10.00', '$13.00' ]; test.describe( 'Cart & Checkout applying coupons', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { let firstProductId; const couponBatchId = []; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js index 0286be4e16a..a67bdadb715 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js @@ -10,7 +10,7 @@ const excludedCategoryName = 'Excluded Category'; test.describe( 'Cart & Checkout Restricted Coupons', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { let firstProductId, secondProductId, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-block.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-block.spec.js index 24ce0cb50f6..0ab550a7831 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-block.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-block.spec.js @@ -57,7 +57,7 @@ const test = baseTest.extend( { test.describe( 'Checkout Block page', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-login.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-login.spec.js index e12282fae26..1eaadf1a5dd 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-login.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout-login.spec.js @@ -24,7 +24,7 @@ const customer = { test.describe( 'Shopper Checkout Login Account', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { let productId, orderId, shippingZoneId, customerId; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout.spec.js index 1c0b5aa222c..6b2ed97ba03 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/checkout.spec.js @@ -8,299 +8,152 @@ const { getOrderIdFromUrl } = require( '../../utils/order' ); const guestEmail = 'checkout-guest@example.com'; -test.describe( 'Checkout page', { tag: [ '@payments', '@services' ] }, () => { - const singleProductPrice = '9.99'; - const simpleProductName = 'Checkout Page Product'; - const twoProductPrice = ( singleProductPrice * 2 ).toString(); - const threeProductPrice = ( singleProductPrice * 3 ).toString(); +test.describe( + 'Checkout page', + { tag: [ '@payments', '@services', '@hpos' ] }, + () => { + const singleProductPrice = '9.99'; + const simpleProductName = 'Checkout Page Product'; + const twoProductPrice = ( singleProductPrice * 2 ).toString(); + const threeProductPrice = ( singleProductPrice * 3 ).toString(); - let guestOrderId, customerOrderId, productId, shippingZoneId; + let guestOrderId, customerOrderId, productId, shippingZoneId; - test.beforeAll( async ( { baseURL } ) => { - const api = new wcApi( { - url: baseURL, - consumerKey: process.env.CONSUMER_KEY, - consumerSecret: process.env.CONSUMER_SECRET, - version: 'wc/v3', - } ); - // ensure store address is US - await api.post( 'settings/general/batch', { - update: [ - { - id: 'woocommerce_store_address', - value: 'addr 1', - }, - { - id: 'woocommerce_store_city', - value: 'San Francisco', - }, - { - id: 'woocommerce_default_country', - value: 'US:CA', - }, - { - id: 'woocommerce_store_postcode', - value: '94107', - }, - ], - } ); - // add product - await api - .post( 'products', { - name: simpleProductName, - type: 'simple', - regular_price: singleProductPrice, - } ) - .then( ( response ) => { - productId = response.data.id; + test.beforeAll( async ( { baseURL } ) => { + const api = new wcApi( { + url: baseURL, + consumerKey: process.env.CONSUMER_KEY, + consumerSecret: process.env.CONSUMER_SECRET, + version: 'wc/v3', } ); - // add a shipping zone and method - await api - .post( 'shipping/zones', { - name: 'Free Shipping Oregon', - } ) - .then( ( response ) => { - shippingZoneId = response.data.id; + // ensure store address is US + await api.post( 'settings/general/batch', { + update: [ + { + id: 'woocommerce_store_address', + value: 'addr 1', + }, + { + id: 'woocommerce_store_city', + value: 'San Francisco', + }, + { + id: 'woocommerce_default_country', + value: 'US:CA', + }, + { + id: 'woocommerce_store_postcode', + value: '94107', + }, + ], + } ); + // add product + await api + .post( 'products', { + name: simpleProductName, + type: 'simple', + regular_price: singleProductPrice, + } ) + .then( ( response ) => { + productId = response.data.id; + } ); + // add a shipping zone and method + await api + .post( 'shipping/zones', { + name: 'Free Shipping Oregon', + } ) + .then( ( response ) => { + shippingZoneId = response.data.id; + } ); + await api.put( `shipping/zones/${ shippingZoneId }/locations`, [ + { + code: 'US:OR', + type: 'state', + }, + ] ); + await api.post( `shipping/zones/${ shippingZoneId }/methods`, { + method_id: 'free_shipping', } ); - await api.put( `shipping/zones/${ shippingZoneId }/locations`, [ - { - code: 'US:OR', - type: 'state', - }, - ] ); - await api.post( `shipping/zones/${ shippingZoneId }/methods`, { - method_id: 'free_shipping', } ); - } ); - test.afterAll( async ( { baseURL } ) => { - const api = new wcApi( { - url: baseURL, - consumerKey: process.env.CONSUMER_KEY, - consumerSecret: process.env.CONSUMER_SECRET, - version: 'wc/v3', + test.afterAll( async ( { baseURL } ) => { + const api = new wcApi( { + url: baseURL, + consumerKey: process.env.CONSUMER_KEY, + consumerSecret: process.env.CONSUMER_SECRET, + version: 'wc/v3', + } ); + await api.delete( `products/${ productId }`, { + force: true, + } ); + await api.delete( `shipping/zones/${ shippingZoneId }`, { + force: true, + } ); + await api.put( 'payment_gateways/bacs', { + enabled: false, + } ); + await api.put( 'payment_gateways/cod', { + enabled: false, + } ); + // delete the orders we created + if ( guestOrderId ) { + await api.delete( `orders/${ guestOrderId }`, { force: true } ); + } + if ( customerOrderId ) { + await api.delete( `orders/${ customerOrderId }`, { + force: true, + } ); + } } ); - await api.delete( `products/${ productId }`, { - force: true, + + test.beforeEach( async ( { context, baseURL } ) => { + // Shopping cart is very sensitive to cookies, so be explicit + await context.clearCookies(); + const api = new wcApi( { + url: baseURL, + consumerKey: process.env.CONSUMER_KEY, + consumerSecret: process.env.CONSUMER_SECRET, + version: 'wc/v3', + } ); + // enable bank transfers and COD for payment + await api.put( 'payment_gateways/bacs', { + enabled: true, + } ); + await api.put( 'payment_gateways/cod', { + enabled: true, + } ); } ); - await api.delete( `shipping/zones/${ shippingZoneId }`, { - force: true, + + test( 'should display cart items in order review', async ( { + page, + } ) => { + await addAProductToCart( page, productId ); + + await page.goto( '/checkout/' ); + + await expect( page.locator( 'td.product-name' ) ).toContainText( + simpleProductName + ); + await expect( + page.locator( 'strong.product-quantity' ) + ).toContainText( '1' ); + let totalPrice = await page + .getByRole( 'row', { name: 'Total' } ) + .last() + .locator( 'td' ) + .textContent(); + totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); + await expect( totalPrice ).toBeGreaterThanOrEqual( + Number( singleProductPrice ) + ); } ); - await api.put( 'payment_gateways/bacs', { - enabled: false, - } ); - await api.put( 'payment_gateways/cod', { - enabled: false, - } ); - // delete the orders we created - if ( guestOrderId ) { - await api.delete( `orders/${ guestOrderId }`, { force: true } ); - } - if ( customerOrderId ) { - await api.delete( `orders/${ customerOrderId }`, { force: true } ); - } - } ); - test.beforeEach( async ( { context, baseURL } ) => { - // Shopping cart is very sensitive to cookies, so be explicit - await context.clearCookies(); - const api = new wcApi( { - url: baseURL, - consumerKey: process.env.CONSUMER_KEY, - consumerSecret: process.env.CONSUMER_SECRET, - version: 'wc/v3', - } ); - // enable bank transfers and COD for payment - await api.put( 'payment_gateways/bacs', { - enabled: true, - } ); - await api.put( 'payment_gateways/cod', { - enabled: true, - } ); - } ); - - test( 'should display cart items in order review', async ( { page } ) => { - await addAProductToCart( page, productId ); - - await page.goto( '/checkout/' ); - - await expect( page.locator( 'td.product-name' ) ).toContainText( - simpleProductName - ); - await expect( page.locator( 'strong.product-quantity' ) ).toContainText( - '1' - ); - let totalPrice = await page - .getByRole( 'row', { name: 'Total' } ) - .last() - .locator( 'td' ) - .textContent(); - totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); - await expect( totalPrice ).toBeGreaterThanOrEqual( - Number( singleProductPrice ) - ); - } ); - - test( 'allows customer to choose available payment methods', async ( { - page, - } ) => { - // this time we're going to add two products to the cart - await addProductsToCart( page, simpleProductName, '2' ); - - await page.goto( '/checkout/' ); - await expect( page.locator( 'strong.product-quantity' ) ).toContainText( - '2' - ); - let totalPrice = await page - .getByRole( 'row', { name: 'Total' } ) - .last() - .locator( 'td' ) - .textContent(); - totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); - await expect( totalPrice ).toBeGreaterThanOrEqual( - Number( twoProductPrice ) - ); - - // check the payment methods - await expect( page.locator( '#payment_method_bacs' ) ).toBeEnabled(); - await expect( page.locator( '#payment_method_cod' ) ).toBeEnabled(); - } ); - - test( 'allows customer to fill billing details', async ( { page } ) => { - // this time we're going to add three products to the cart - await addProductsToCart( page, simpleProductName, '3' ); - - await page.goto( '/checkout/' ); - await expect( page.locator( 'strong.product-quantity' ) ).toContainText( - '3' - ); - let totalPrice = await page - .getByRole( 'row', { name: 'Total' } ) - .last() - .locator( 'td' ) - .textContent(); - totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); - await expect( totalPrice ).toBeGreaterThanOrEqual( - Number( threeProductPrice ) - ); - - // asserting that you can fill in the billing details - await expect( page.locator( '#billing_first_name' ) ).toBeEditable(); - await expect( page.locator( '#billing_last_name' ) ).toBeEditable(); - await expect( page.locator( '#billing_company' ) ).toBeEditable(); - await expect( page.locator( '#billing_country' ) ).toBeEnabled(); - await expect( page.locator( '#billing_address_1' ) ).toBeEditable(); - await expect( page.locator( '#billing_address_2' ) ).toBeEditable(); - await expect( page.locator( '#billing_city' ) ).toBeEditable(); - await expect( page.locator( '#billing_state' ) ).toBeEnabled(); - await expect( page.locator( '#billing_postcode' ) ).toBeEditable(); - await expect( page.locator( '#billing_phone' ) ).toBeEditable(); - await expect( page.locator( '#billing_email' ) ).toBeEditable(); - } ); - - test( 'warn when customer is missing required details', async ( { - page, - } ) => { - await addAProductToCart( page, productId ); - - await page.goto( '/checkout/' ); - - // first try submitting the form with no fields complete - await page.getByRole( 'button', { name: 'Place order' } ).click(); - await expect( - page.locator( 'form[name="checkout"]' ).getByRole( 'alert' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing First name is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing Last name is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing Street address is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing Town / City is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing ZIP Code is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing Phone is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Billing Email address is a required field.' ) - ).toBeVisible(); - - // toggle ship to different address, fill out billing info and confirm error shown - await page.getByText( 'Ship to a different address?' ).click(); - await page.locator( '#billing_first_name' ).fill( 'Homer' ); - await page.locator( '#billing_last_name' ).fill( 'Simpson' ); - await page - .locator( '#billing_address_1' ) - .fill( '123 Evergreen Terrace' ); - await page.locator( '#billing_city' ).fill( 'Springfield' ); - await page.locator( '#billing_country' ).selectOption( 'US' ); - await page.locator( '#billing_state' ).selectOption( 'OR' ); - await page.locator( '#billing_postcode' ).fill( '97403' ); - await page.locator( '#billing_phone' ).fill( '555 555-5555' ); - await page.locator( '#billing_email' ).fill( customer.email ); - await page.getByRole( 'button', { name: 'Place order' } ).click(); - - await expect( - page.getByText( 'Shipping First name is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Shipping Last name is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Shipping Street address is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Shipping Town / City is a required field.' ) - ).toBeVisible(); - await expect( - page.getByText( 'Shipping ZIP Code is a required field.' ) - ).toBeVisible(); - } ); - - test( 'allows customer to fill shipping details', async ( { page } ) => { - await addProductsToCart( page, simpleProductName, '2' ); - - await page.goto( '/checkout/' ); - await expect( page.locator( 'strong.product-quantity' ) ).toContainText( - '2' - ); - let totalPrice = await page - .getByRole( 'row', { name: 'Total' } ) - .last() - .locator( 'td' ) - .textContent(); - totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); - await expect( totalPrice ).toBeGreaterThanOrEqual( - Number( twoProductPrice ) - ); - - await page.locator( '#ship-to-different-address' ).click(); - - // asserting that you can fill in the shipping details - await expect( page.locator( '#shipping_first_name' ) ).toBeEditable(); - await expect( page.locator( '#shipping_last_name' ) ).toBeEditable(); - await expect( page.locator( '#shipping_company' ) ).toBeEditable(); - await expect( page.locator( '#shipping_country' ) ).toBeEnabled(); - await expect( page.locator( '#shipping_address_1' ) ).toBeEditable(); - await expect( page.locator( '#shipping_address_2' ) ).toBeEditable(); - await expect( page.locator( '#shipping_city' ) ).toBeEditable(); - await expect( page.locator( '#shipping_state' ) ).toBeEnabled(); - await expect( page.locator( '#shipping_postcode' ) ).toBeEditable(); - } ); - - test( 'allows guest customer to place an order', async ( { page } ) => { - await test.step( 'Add 2 products to the cart', async () => { + test( 'allows customer to choose available payment methods', async ( { + page, + } ) => { + // this time we're going to add two products to the cart await addProductsToCart( page, simpleProductName, '2' ); - } ); - await test.step( 'Go to checkout and confirm that products and totals are as expected', async () => { await page.goto( '/checkout/' ); await expect( page.locator( 'strong.product-quantity' ) @@ -313,116 +166,390 @@ test.describe( 'Checkout page', { tag: [ '@payments', '@services' ] }, () => { totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); await expect( totalPrice ).toBeGreaterThanOrEqual( Number( twoProductPrice ) - ); // account for taxes or shipping that may be present + ); + + // check the payment methods + await expect( + page.locator( '#payment_method_bacs' ) + ).toBeEnabled(); + await expect( page.locator( '#payment_method_cod' ) ).toBeEnabled(); } ); - await test.step( 'Complete the checkout form', async () => { - await page - .getByRole( 'textbox', { name: 'First name *' } ) - .fill( 'Lisa' ); - await page - .getByRole( 'textbox', { name: 'Last name *' } ) - .fill( 'Simpson' ); - await page - .getByRole( 'textbox', { name: 'Street address *' } ) - .fill( '123 Evergreen Terrace' ); - await page - .getByRole( 'textbox', { name: 'Town / City *' } ) - .fill( 'Springfield' ); - await page.locator( '#billing_state' ).selectOption( 'OR' ); - await page - .getByRole( 'textbox', { name: 'ZIP Code *' } ) - .fill( '97403' ); - await page.getByLabel( 'Phone *' ).fill( '555 555-5555' ); - await page.getByLabel( 'Email address *' ).fill( guestEmail ); + test( 'allows customer to fill billing details', async ( { page } ) => { + // this time we're going to add three products to the cart + await addProductsToCart( page, simpleProductName, '3' ); - await page.getByText( 'Cash on delivery' ).click(); + await page.goto( '/checkout/' ); + await expect( + page.locator( 'strong.product-quantity' ) + ).toContainText( '3' ); + let totalPrice = await page + .getByRole( 'row', { name: 'Total' } ) + .last() + .locator( 'td' ) + .textContent(); + totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); + await expect( totalPrice ).toBeGreaterThanOrEqual( + Number( threeProductPrice ) + ); + // asserting that you can fill in the billing details + await expect( + page.locator( '#billing_first_name' ) + ).toBeEditable(); + await expect( page.locator( '#billing_last_name' ) ).toBeEditable(); + await expect( page.locator( '#billing_company' ) ).toBeEditable(); + await expect( page.locator( '#billing_country' ) ).toBeEnabled(); + await expect( page.locator( '#billing_address_1' ) ).toBeEditable(); + await expect( page.locator( '#billing_address_2' ) ).toBeEditable(); + await expect( page.locator( '#billing_city' ) ).toBeEditable(); + await expect( page.locator( '#billing_state' ) ).toBeEnabled(); + await expect( page.locator( '#billing_postcode' ) ).toBeEditable(); + await expect( page.locator( '#billing_phone' ) ).toBeEditable(); + await expect( page.locator( '#billing_email' ) ).toBeEditable(); + } ); + + test( 'warn when customer is missing required details', async ( { + page, + } ) => { + await addAProductToCart( page, productId ); + + await page.goto( '/checkout/' ); + + // first try submitting the form with no fields complete await page.getByRole( 'button', { name: 'Place order' } ).click(); + await expect( + page.locator( 'form[name="checkout"]' ).getByRole( 'alert' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing First name is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing Last name is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing Street address is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing Town / City is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing ZIP Code is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing Phone is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Billing Email address is a required field.' ) + ).toBeVisible(); + + // toggle ship to different address, fill out billing info and confirm error shown + await page.getByText( 'Ship to a different address?' ).click(); + await page.locator( '#billing_first_name' ).fill( 'Homer' ); + await page.locator( '#billing_last_name' ).fill( 'Simpson' ); + await page + .locator( '#billing_address_1' ) + .fill( '123 Evergreen Terrace' ); + await page.locator( '#billing_city' ).fill( 'Springfield' ); + await page.locator( '#billing_country' ).selectOption( 'US' ); + await page.locator( '#billing_state' ).selectOption( 'OR' ); + await page.locator( '#billing_postcode' ).fill( '97403' ); + await page.locator( '#billing_phone' ).fill( '555 555-5555' ); + await page.locator( '#billing_email' ).fill( customer.email ); + await page.getByRole( 'button', { name: 'Place order' } ).click(); + + await expect( + page.getByText( 'Shipping First name is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping Last name is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping Street address is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping Town / City is a required field.' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping ZIP Code is a required field.' ) + ).toBeVisible(); } ); - await test.step( 'Load the order confirmation page, extract order number', async () => { + test( 'allows customer to fill shipping details', async ( { + page, + } ) => { + await addProductsToCart( page, simpleProductName, '2' ); + + await page.goto( '/checkout/' ); + await expect( + page.locator( 'strong.product-quantity' ) + ).toContainText( '2' ); + let totalPrice = await page + .getByRole( 'row', { name: 'Total' } ) + .last() + .locator( 'td' ) + .textContent(); + totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); + await expect( totalPrice ).toBeGreaterThanOrEqual( + Number( twoProductPrice ) + ); + + await page.locator( '#ship-to-different-address' ).click(); + + // asserting that you can fill in the shipping details + await expect( + page.locator( '#shipping_first_name' ) + ).toBeEditable(); + await expect( + page.locator( '#shipping_last_name' ) + ).toBeEditable(); + await expect( page.locator( '#shipping_company' ) ).toBeEditable(); + await expect( page.locator( '#shipping_country' ) ).toBeEnabled(); + await expect( + page.locator( '#shipping_address_1' ) + ).toBeEditable(); + await expect( + page.locator( '#shipping_address_2' ) + ).toBeEditable(); + await expect( page.locator( '#shipping_city' ) ).toBeEditable(); + await expect( page.locator( '#shipping_state' ) ).toBeEnabled(); + await expect( page.locator( '#shipping_postcode' ) ).toBeEditable(); + } ); + + test( 'allows guest customer to place an order', async ( { page } ) => { + await test.step( 'Add 2 products to the cart', async () => { + await addProductsToCart( page, simpleProductName, '2' ); + } ); + + await test.step( 'Go to checkout and confirm that products and totals are as expected', async () => { + await page.goto( '/checkout/' ); + await expect( + page.locator( 'strong.product-quantity' ) + ).toContainText( '2' ); + let totalPrice = await page + .getByRole( 'row', { name: 'Total' } ) + .last() + .locator( 'td' ) + .textContent(); + totalPrice = Number( + totalPrice.replace( /\$([\d.]+).*/, '$1' ) + ); + await expect( totalPrice ).toBeGreaterThanOrEqual( + Number( twoProductPrice ) + ); // account for taxes or shipping that may be present + } ); + + await test.step( 'Complete the checkout form', async () => { + await page + .getByRole( 'textbox', { name: 'First name *' } ) + .fill( 'Lisa' ); + await page + .getByRole( 'textbox', { name: 'Last name *' } ) + .fill( 'Simpson' ); + await page + .getByRole( 'textbox', { name: 'Street address *' } ) + .fill( '123 Evergreen Terrace' ); + await page + .getByRole( 'textbox', { name: 'Town / City *' } ) + .fill( 'Springfield' ); + await page.locator( '#billing_state' ).selectOption( 'OR' ); + await page + .getByRole( 'textbox', { name: 'ZIP Code *' } ) + .fill( '97403' ); + await page.getByLabel( 'Phone *' ).fill( '555 555-5555' ); + await page.getByLabel( 'Email address *' ).fill( guestEmail ); + + await page.getByText( 'Cash on delivery' ).click(); + + await page + .getByRole( 'button', { name: 'Place order' } ) + .click(); + } ); + + await test.step( 'Load the order confirmation page, extract order number', async () => { + await expect( + page.getByText( 'Your order has been received' ) + ).toBeVisible(); + + guestOrderId = getOrderIdFromUrl( page ); + } ); + + await test.step( 'Simulate cookies cleared, but within 10 minute grace period', async () => { + // Let's simulate a new browser context (by dropping all cookies), and reload the page. This approximates a + // scenario where the server can no longer identify the shopper. However, so long as we are within the 10 minute + // grace period following initial order placement, the 'order received' page should still be rendered. + await page.context().clearCookies(); + await page.reload(); + await expect( + page.getByText( 'Your order has been received' ) + ).toBeVisible(); + } ); + + await test.step( 'Simulate cookies cleared, outside 10 minute window', async () => { + // Let's simulate a scenario where the 10 minute grace period has expired. This time, we expect the shopper to + // be presented with a request to verify their email address. + await setFilterValue( + page, + 'woocommerce_order_email_verification_grace_period', + 0 + ); + await page.waitForTimeout( 2000 ); // needs some time before reload for change to take effect. + await page.reload( { waitForLoadState: 'networkidle' } ); + await expect( + page.getByText( + /confirm the email address linked to the order | verify the email address associated / + ) + ).toBeVisible(); + } ); + + await test.step( 'Supply incorrect email address for the order, error', async () => { + // Supplying an email address other than the actual order billing email address will take them back to the same + // page with an error message. + await page + .getByLabel( 'Email address' ) + .fill( 'incorrect@email.address' ); + await page + .getByRole( 'button', { name: /Verify|Confirm/ } ) + .click(); + await expect( + page.getByText( + /confirm the email address linked to the order | verify the email address associated / + ) + ).toBeVisible(); + await expect( + page.getByText( + 'We were unable to verify the email address' + ) + ).toBeVisible(); + } ); + + await test.step( 'Supply the correct email address for the order, display order confirmation', async () => { + // However if they supply the *correct* billing email address, they should see the order received page again. + await page.getByLabel( 'Email address' ).fill( guestEmail ); + await page + .getByRole( 'button', { name: /Verify|Confirm/ } ) + .click(); + await expect( + page.getByText( 'Your order has been received' ) + ).toBeVisible(); + } ); + + await test.step( 'Confirm order details on the backend (as a merchant)', async () => { + await page.goto( 'wp-login.php' ); + await page + .locator( 'input[name="log"]' ) + .fill( admin.username ); + await page + .locator( 'input[name="pwd"]' ) + .fill( admin.password ); + await page.locator( 'text=Log In' ).click(); + + // load the order placed as a guest + await page.goto( + `wp-admin/post.php?post=${ guestOrderId }&action=edit` + ); + + await expect( + page.getByRole( 'heading', { + name: `Order #${ guestOrderId } details`, + } ) + ).toBeVisible(); + await expect( + page.locator( '.wc-order-item-name' ) + ).toContainText( simpleProductName ); + await expect( + page.locator( 'td.quantity >> nth=0' ) + ).toContainText( '2' ); + await expect( + page.locator( 'td.item_cost >> nth=0' ) + ).toContainText( singleProductPrice ); + await expect( + page.locator( 'td.line_cost >> nth=0' ) + ).toContainText( twoProductPrice ); + await clearFilters( page ); + } ); + } ); + + test( 'allows existing customer to place order', async ( { page } ) => { + await page.goto( 'my-account/' ); + await page + .locator( 'input[name="username"]' ) + .fill( customer.username ); + await page + .locator( 'input[name="password"]' ) + .fill( customer.password ); + await page.locator( 'text=Log In' ).click(); + await expect( + page.getByText( + `Hello ${ customer.first_name } ${ customer.last_name }` + ) + ).toBeVisible(); + + await addProductsToCart( page, simpleProductName, '2' ); + + await page.goto( '/checkout/' ); + await expect( + page.locator( 'strong.product-quantity' ) + ).toContainText( '2' ); + let totalPrice = await page + .getByRole( 'row', { name: 'Total' } ) + .last() + .locator( 'td' ) + .textContent(); + totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); + await expect( totalPrice ).toBeGreaterThanOrEqual( + Number( twoProductPrice ) + ); + + await page.locator( '#billing_first_name' ).fill( 'Homer' ); + await page.locator( '#billing_last_name' ).fill( 'Simpson' ); + await page + .locator( '#billing_address_1' ) + .fill( '123 Evergreen Terrace' ); + await page.locator( '#billing_city' ).fill( 'Springfield' ); + await page.locator( '#billing_country' ).selectOption( 'US' ); + await page.locator( '#billing_state' ).selectOption( 'OR' ); + await page.locator( '#billing_postcode' ).fill( '97403' ); + await page.locator( '#billing_phone' ).fill( '555 555-5555' ); + await page.locator( '#billing_email' ).fill( customer.email ); + + await page.locator( 'text=Cash on delivery' ).click(); + await expect( + page.locator( 'div.payment_method_cod' ) + ).toBeVisible(); + + await page.locator( 'text=Place order' ).click(); + await expect( page.getByText( 'Your order has been received' ) ).toBeVisible(); - guestOrderId = getOrderIdFromUrl( page ); - } ); + customerOrderId = getOrderIdFromUrl( page ); - await test.step( 'Simulate cookies cleared, but within 10 minute grace period', async () => { - // Let's simulate a new browser context (by dropping all cookies), and reload the page. This approximates a - // scenario where the server can no longer identify the shopper. However, so long as we are within the 10 minute - // grace period following initial order placement, the 'order received' page should still be rendered. + // Effect a log out/simulate a new browsing session by dropping all cookies. await page.context().clearCookies(); await page.reload(); - await expect( - page.getByText( 'Your order has been received' ) - ).toBeVisible(); - } ); - await test.step( 'Simulate cookies cleared, outside 10 minute window', async () => { - // Let's simulate a scenario where the 10 minute grace period has expired. This time, we expect the shopper to - // be presented with a request to verify their email address. - await setFilterValue( - page, - 'woocommerce_order_email_verification_grace_period', - 0 - ); - await page.waitForTimeout( 2000 ); // needs some time before reload for change to take effect. - await page.reload( { waitForLoadState: 'networkidle' } ); + // Now we are logged out, return to the confirmation page: we should be asked to log back in. await expect( page.getByText( - /confirm the email address linked to the order | verify the email address associated / + /Log in here to view your order|log in to your account to view this order/ ) ).toBeVisible(); - } ); - await test.step( 'Supply incorrect email address for the order, error', async () => { - // Supplying an email address other than the actual order billing email address will take them back to the same - // page with an error message. - await page - .getByLabel( 'Email address' ) - .fill( 'incorrect@email.address' ); - await page - .getByRole( 'button', { name: /Verify|Confirm/ } ) - .click(); - await expect( - page.getByText( - /confirm the email address linked to the order | verify the email address associated / - ) - ).toBeVisible(); - await expect( - page.getByText( 'We were unable to verify the email address' ) - ).toBeVisible(); - } ); - - await test.step( 'Supply the correct email address for the order, display order confirmation', async () => { - // However if they supply the *correct* billing email address, they should see the order received page again. - await page.getByLabel( 'Email address' ).fill( guestEmail ); - await page - .getByRole( 'button', { name: /Verify|Confirm/ } ) - .click(); - await expect( - page.getByText( 'Your order has been received' ) - ).toBeVisible(); - } ); - - await test.step( 'Confirm order details on the backend (as a merchant)', async () => { - await page.goto( 'wp-login.php' ); + // Switch to admin user. + await page.goto( 'wp-login.php?loggedout=true' ); await page.locator( 'input[name="log"]' ).fill( admin.username ); await page.locator( 'input[name="pwd"]' ).fill( admin.password ); await page.locator( 'text=Log In' ).click(); - // load the order placed as a guest + // load the order placed as a customer await page.goto( - `wp-admin/post.php?post=${ guestOrderId }&action=edit` + `wp-admin/post.php?post=${ customerOrderId }&action=edit` ); - await expect( - page.getByRole( 'heading', { - name: `Order #${ guestOrderId } details`, - } ) - ).toBeVisible(); + page.locator( 'h2.woocommerce-order-data__heading' ) + ).toContainText( `Order #${ customerOrderId } details` ); await expect( page.locator( '.wc-order-item-name' ) ).toContainText( simpleProductName ); @@ -435,99 +562,6 @@ test.describe( 'Checkout page', { tag: [ '@payments', '@services' ] }, () => { await expect( page.locator( 'td.line_cost >> nth=0' ) ).toContainText( twoProductPrice ); - await clearFilters( page ); } ); - } ); - - test( 'allows existing customer to place order', async ( { page } ) => { - await page.goto( 'my-account/' ); - await page - .locator( 'input[name="username"]' ) - .fill( customer.username ); - await page - .locator( 'input[name="password"]' ) - .fill( customer.password ); - await page.locator( 'text=Log In' ).click(); - await expect( - page.getByText( - `Hello ${ customer.first_name } ${ customer.last_name }` - ) - ).toBeVisible(); - - await addProductsToCart( page, simpleProductName, '2' ); - - await page.goto( '/checkout/' ); - await expect( page.locator( 'strong.product-quantity' ) ).toContainText( - '2' - ); - let totalPrice = await page - .getByRole( 'row', { name: 'Total' } ) - .last() - .locator( 'td' ) - .textContent(); - totalPrice = Number( totalPrice.replace( /\$([\d.]+).*/, '$1' ) ); - await expect( totalPrice ).toBeGreaterThanOrEqual( - Number( twoProductPrice ) - ); - - await page.locator( '#billing_first_name' ).fill( 'Homer' ); - await page.locator( '#billing_last_name' ).fill( 'Simpson' ); - await page - .locator( '#billing_address_1' ) - .fill( '123 Evergreen Terrace' ); - await page.locator( '#billing_city' ).fill( 'Springfield' ); - await page.locator( '#billing_country' ).selectOption( 'US' ); - await page.locator( '#billing_state' ).selectOption( 'OR' ); - await page.locator( '#billing_postcode' ).fill( '97403' ); - await page.locator( '#billing_phone' ).fill( '555 555-5555' ); - await page.locator( '#billing_email' ).fill( customer.email ); - - await page.locator( 'text=Cash on delivery' ).click(); - await expect( page.locator( 'div.payment_method_cod' ) ).toBeVisible(); - - await page.locator( 'text=Place order' ).click(); - - await expect( - page.getByText( 'Your order has been received' ) - ).toBeVisible(); - - customerOrderId = getOrderIdFromUrl( page ); - - // Effect a log out/simulate a new browsing session by dropping all cookies. - await page.context().clearCookies(); - await page.reload(); - - // Now we are logged out, return to the confirmation page: we should be asked to log back in. - await expect( - page.getByText( - /Log in here to view your order|log in to your account to view this order/ - ) - ).toBeVisible(); - - // Switch to admin user. - await page.goto( 'wp-login.php?loggedout=true' ); - await page.locator( 'input[name="log"]' ).fill( admin.username ); - await page.locator( 'input[name="pwd"]' ).fill( admin.password ); - await page.locator( 'text=Log In' ).click(); - - // load the order placed as a customer - await page.goto( - `wp-admin/post.php?post=${ customerOrderId }&action=edit` - ); - await expect( - page.locator( 'h2.woocommerce-order-data__heading' ) - ).toContainText( `Order #${ customerOrderId } details` ); - await expect( page.locator( '.wc-order-item-name' ) ).toContainText( - simpleProductName - ); - await expect( page.locator( 'td.quantity >> nth=0' ) ).toContainText( - '2' - ); - await expect( page.locator( 'td.item_cost >> nth=0' ) ).toContainText( - singleProductPrice - ); - await expect( page.locator( 'td.line_cost >> nth=0' ) ).toContainText( - twoProductPrice - ); - } ); -} ); + } +); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/my-account-pay-order.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/my-account-pay-order.spec.js index cb0b119625e..233ccd2c533 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/my-account-pay-order.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/my-account-pay-order.spec.js @@ -10,7 +10,7 @@ const customer = { test.describe( 'Customer can pay for their order through My Account', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { let productId, orderId; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/order-email-receiving.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/order-email-receiving.spec.js index af7a80f8dc3..c653f8066e0 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/order-email-receiving.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/order-email-receiving.spec.js @@ -22,7 +22,7 @@ const storeName = 'WooCommerce Core E2E Test Suite'; test.describe( 'Shopper Order Email Receiving', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@hpos' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); From 418c8f029feef2a2389554743c78472f7908b2ce Mon Sep 17 00:00:00 2001 From: Bart Kalisz Date: Tue, 13 Aug 2024 11:29:07 +0200 Subject: [PATCH 008/318] Product Collection: Remove automatic migration code (#50440) Co-authored-by: Karol Manijak <20098064+kmanijak@users.noreply.github.com> --- .../constants.ts | 1 - ...ion-from-product-collection-to-products.ts | 2 -- ...ion-from-products-to-product-collection.ts | 31 ++-------------- .../hand-picked-products-control.tsx | 2 +- .../edit/inspector-controls/index.tsx | 8 ----- .../product-collection.block_theme.spec.ts | 36 +++++++++++++++++++ .../refactor-pc-remove-automatic-migration | 4 +++ 7 files changed, 43 insertions(+), 41 deletions(-) create mode 100644 plugins/woocommerce/changelog/refactor-pc-remove-automatic-migration diff --git a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/constants.ts b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/constants.ts index 08ad37e0784..428da25013a 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/constants.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/constants.ts @@ -3,7 +3,6 @@ */ import type { UpgradeNoticeStatus, UpgradeNoticeStatuses } from './types'; -export const AUTO_REPLACE_PRODUCTS_WITH_PRODUCT_COLLECTION = false; export const MANUAL_REPLACE_PRODUCTS_WITH_PRODUCT_COLLECTION = true; export const HOURS_TO_DISPLAY_UPGRADE_NOTICE = 72; export const UPGRADE_NOTICE_DISPLAY_COUNT_THRESHOLD = 4; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-product-collection-to-products.ts b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-product-collection-to-products.ts index 6c55cf0d981..cbaa64aaf50 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-product-collection-to-products.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-product-collection-to-products.ts @@ -7,7 +7,6 @@ import { select, dispatch } from '@wordpress/data'; /** * Internal dependencies */ -import { disableAutoUpdate } from './migration-from-products-to-product-collection'; import { getProductCollectionBlockClientIds, checkIfBlockCanBeInserted, @@ -216,7 +215,6 @@ export const replaceProductCollectionWithProducts = () => { }; export const revertMigration = () => { - disableAutoUpdate(); setUpgradeStatus( { status: 'reverted', time: Date.now(), diff --git a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-products-to-product-collection.ts b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-products-to-product-collection.ts index c617a6f4a01..a5239a6ad19 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-products-to-product-collection.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/migration-products-to-product-collection/migration-from-products-to-product-collection.ts @@ -2,21 +2,16 @@ * External dependencies */ import { createBlock, BlockInstance } from '@wordpress/blocks'; -import { select, dispatch, subscribe } from '@wordpress/data'; -import { isWpVersion } from '@woocommerce/settings'; +import { select, dispatch } from '@wordpress/data'; /** * Internal dependencies */ -import { - AUTO_REPLACE_PRODUCTS_WITH_PRODUCT_COLLECTION, - getInitialStatusLSValue, -} from './constants'; +import { getInitialStatusLSValue } from './constants'; import { getProductsBlockClientIds, checkIfBlockCanBeInserted, postTemplateHasSupportForGridView, - getUpgradeStatus, setUpgradeStatus, } from './migration-utils'; import type { @@ -229,25 +224,3 @@ export const manualUpdate = () => { setUpgradeStatus( getInitialStatusLSValue() ); replaceProductsWithProductCollection(); }; - -let unsubscribe: ( () => void ) | undefined; -export const disableAutoUpdate = () => { - if ( unsubscribe ) { - unsubscribe(); - } -}; -export const enableAutoUpdate = () => { - if ( isWpVersion( '6.1', '>=' ) ) { - const { status } = getUpgradeStatus(); - - if ( - AUTO_REPLACE_PRODUCTS_WITH_PRODUCT_COLLECTION && - status !== 'reverted' && - ! unsubscribe - ) { - unsubscribe = subscribe( () => { - replaceProductsWithProductCollection(); - }, 'core/block-editor' ); - } - } -}; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/hand-picked-products-control.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/hand-picked-products-control.tsx index 7b20bcdfa74..1270429bb6a 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/hand-picked-products-control.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/hand-picked-products-control.tsx @@ -29,7 +29,7 @@ import { DEFAULT_FILTERS } from '../../constants'; function useProducts( isLargeCatalog: boolean, search: string, - selected: string[] + selected: string[] = [] ) { // Creating a map for fast lookup of products by id or name. const [ productsMap, setProductsMap ] = useState< diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/index.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/index.tsx index aea5e9447e1..012aa165d7e 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/index.tsx @@ -9,7 +9,6 @@ import { EditorBlock } from '@woocommerce/types'; import { addFilter } from '@wordpress/hooks'; import { ProductCollectionFeedbackPrompt } from '@woocommerce/editor-components/feedback-prompt'; import { - enableAutoUpdate, revertMigration, getUpgradeStatus, HOURS_TO_DISPLAY_UPGRADE_NOTICE, @@ -190,13 +189,6 @@ const ProductCollectionInspectorControls = ( export default ProductCollectionInspectorControls; -// Trigger Auto Upgrade of Products only once when module is loaded. -// This triggers subscription but only if: -// - auto update is enabled -// - user haven't reverted the migration -// - no other subscription is in place -enableAutoUpdate(); - const isProductCollection = ( blockName: string ) => blockName === metadata.name; diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts index c545b6d439f..fc5aeaaaa86 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts @@ -44,6 +44,42 @@ test.describe( 'Product Collection', () => { await expect( pageObject.addToCartButtons ).toHaveCount( 9 ); } ); + test( 'Can be migrated to from Products (Beta) block', async ( { + page, + editor, + admin, + } ) => { + await admin.createNewPost(); + + await editor.insertBlock( { + name: 'core/query', + attributes: { + namespace: 'woocommerce/product-query', + }, + } ); + + await expect( + page.getByLabel( 'Block: Products (Beta)' ) + ).toBeVisible(); + + await page.getByRole( 'button', { name: 'Start blank' } ).click(); + await page.getByLabel( 'Title & Date' ).click(); + + await page + .getByRole( 'button', { name: 'Upgrade to Product Collection' } ) + .click(); + + await expect( + page.getByLabel( 'Block: Products (Beta)' ) + ).toBeHidden(); + await expect( + page.getByLabel( 'Block: Product Collection' ).first() + ).toBeVisible(); + await expect( + page.getByRole( 'button', { name: 'Choose collection' } ) + ).toBeVisible(); + } ); + test.describe( 'Renders correctly with all Product Elements', () => { const expectedProductContent = [ 'Beanie', // core/post-title diff --git a/plugins/woocommerce/changelog/refactor-pc-remove-automatic-migration b/plugins/woocommerce/changelog/refactor-pc-remove-automatic-migration new file mode 100644 index 00000000000..54ccf670342 --- /dev/null +++ b/plugins/woocommerce/changelog/refactor-pc-remove-automatic-migration @@ -0,0 +1,4 @@ +Significance: minor +Type: tweak + +Remove the code related to the automatic Products (Beta) -> Product Collection upgrade. From 03049e0d17f564688930eece358f0359e75afe8c Mon Sep 17 00:00:00 2001 From: Bart Kalisz Date: Tue, 13 Aug 2024 11:31:39 +0200 Subject: [PATCH 009/318] Fix Metrics job (#50482) --- .github/workflows/scripts/run-metrics.sh | 20 ++++++++++++++----- .../changelog/fix-metrics-job-part-deux | 4 ++++ plugins/woocommerce/package.json | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-metrics-job-part-deux diff --git a/.github/workflows/scripts/run-metrics.sh b/.github/workflows/scripts/run-metrics.sh index 7086646a4ae..dfb6565b3e8 100755 --- a/.github/workflows/scripts/run-metrics.sh +++ b/.github/workflows/scripts/run-metrics.sh @@ -2,20 +2,30 @@ set -eo pipefail +function title() { + echo -e "\n\033[1m$1\033[0m" +} + if [[ -z "$GITHUB_EVENT_NAME" ]]; then echo "::error::GITHUB_EVENT_NAME must be set" exit 1 fi -echo "Installing dependencies" -pnpm install --filter="compare-perf" +title "Installing NVM" +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash > /dev/null +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +echo "Installed version: $(nvm -v)" + +title "Installing dependencies" +pnpm install --frozen-lockfile --filter="compare-perf" > /dev/null if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then - echo "Comparing performance with trunk" + title "Comparing performance with trunk" pnpm --filter="compare-perf" run compare perf $GITHUB_SHA trunk --tests-branch $GITHUB_SHA elif [[ "$GITHUB_EVENT_NAME" == "push" ]]; then - echo "Comparing performance with base branch" + title "Comparing performance with base branch" WP_VERSION=$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt) # Updating the WP version used for performance jobs means there’s a high # chance that the reference commit used for performance test stability @@ -32,7 +42,7 @@ elif [[ "$GITHUB_EVENT_NAME" == "push" ]]; then WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}" pnpm --filter="compare-perf" run compare perf $GITHUB_SHA $BASE_SHA --tests-branch $GITHUB_SHA --wp-version "$WP_MAJOR" - echo "Publish results to CodeVitals" + title "Publish results to CodeVitals" COMMITTED_AT=$(git show -s $GITHUB_SHA --format="%cI") pnpm --filter="compare-perf" run log $CODEVITALS_PROJECT_TOKEN trunk $GITHUB_SHA $BASE_SHA $COMMITTED_AT else diff --git a/plugins/woocommerce/changelog/fix-metrics-job-part-deux b/plugins/woocommerce/changelog/fix-metrics-job-part-deux new file mode 100644 index 00000000000..d66f3c1137c --- /dev/null +++ b/plugins/woocommerce/changelog/fix-metrics-job-part-deux @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Fix the Metrics job by adding a missing NVM install step diff --git a/plugins/woocommerce/package.json b/plugins/woocommerce/package.json index 37a8dc9c0be..9dac6666749 100644 --- a/plugins/woocommerce/package.json +++ b/plugins/woocommerce/package.json @@ -510,7 +510,7 @@ ".wp-env.json" ], "events": [ - "disabled" + "push" ], "report": { "resultsBlobName": "core-metrics-report", From 7802209887cb9501312f3e3864543e86c7d066c2 Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:04:41 +0100 Subject: [PATCH 010/318] [e2e tests] Update locators for Customers page in page-loads spec (#50559) --- .../changelog/e2e-improve-page-loads-customers-test | 4 ++++ plugins/woocommerce/tests/e2e-pw/playwright.config.js | 2 +- .../tests/e2e-pw/tests/merchant/page-loads.spec.js | 7 +++---- 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 plugins/woocommerce/changelog/e2e-improve-page-loads-customers-test diff --git a/plugins/woocommerce/changelog/e2e-improve-page-loads-customers-test b/plugins/woocommerce/changelog/e2e-improve-page-loads-customers-test new file mode 100644 index 00000000000..8e8ef68ef12 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-improve-page-loads-customers-test @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +E2E tests: fix flakiness in page-loads customer page test diff --git a/plugins/woocommerce/tests/e2e-pw/playwright.config.js b/plugins/woocommerce/tests/e2e-pw/playwright.config.js index 4fbcbbbe682..be79b841d91 100644 --- a/plugins/woocommerce/tests/e2e-pw/playwright.config.js +++ b/plugins/woocommerce/tests/e2e-pw/playwright.config.js @@ -53,7 +53,7 @@ if ( process.env.CI ) { reporter.push( [ 'html', { - outputFolder: `${ testsResultsPath }/playwright-report`, + outputFolder: `${ testsRootPath }/playwright-report`, open: 'on-failure', }, ] ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/page-loads.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/page-loads.spec.js index 2882cabaee1..50f86d283fb 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/page-loads.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/page-loads.spec.js @@ -22,8 +22,8 @@ const wcPages = [ { name: 'Customers', heading: 'Customers', - element: '#search-inline-input-0', - text: 'Move backward for selected items', + element: '.woocommerce-dropdown-button__labels', + text: 'All Customers', }, { name: 'Reports', @@ -206,8 +206,7 @@ for ( const currentPage of wcPages ) { } ) => { await page .locator( - `li.wp-menu-open > ul.wp-submenu > li:has-text("${ currentPage.subpages[ i ].name }")`, - { waitForLoadState: 'networkidle' } + `li.wp-menu-open > ul.wp-submenu > li:has-text("${ currentPage.subpages[ i ].name }")` ) .click(); From 8bdc78c77732a88af77562b4fabf94e7879098b6 Mon Sep 17 00:00:00 2001 From: Karol Manijak <20098064+kmanijak@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:29:04 +0200 Subject: [PATCH 011/318] Product Collection: Trigger `wc-blocks_product_list_rendered` JS event (#50166) * Dispatch JS event about PC being rendered * Revert format changes * Write the callback * Add functions descriptions * Add changelog * Remove empty line * Add tests * Rename test cases * Replace waiting for page load with more reliable expect.poll * Remove leftover step Co-authored-by: Bart Kalisz * Fix typo in function name * Add collection name to default Product Collection block * Expect collection name in the event * Expose the collection name through IAPI context * Send the collection name with the event * Trigger event also on page change * Remove unused CUSTOM collection type * Provide documentation * Update TOC * Update tests that verify the event payload * Improve E2E tests further * Don't add a Product Catalog collection type to default collection * Avoid repeating the same piece of code by extracting some function on tag processor * Rename function to better depict its purpose * Move the documentation to the right place * Remove the unused variable * Add example to dom-events doc * Update documentation * Update docs manifest * Attach default collection name * Add the default collection context in PHP so it covers all the cases * Prevent exposing product catalog collection name in event * Update docs * Update test --------- Co-authored-by: Bart Kalisz --- docs/docs-manifest.json | 13 +- docs/product-collection-block/dom-events.md | 29 +++ .../assets/js/base/utils/legacy-events.ts | 11 ++ .../js/blocks/product-collection/frontend.tsx | 13 ++ .../js/blocks/product-collection/types.ts | 1 - .../js/blocks/product-collection/utils.tsx | 14 +- .../product-collection.block_theme.spec.ts | 66 +++++++ ...r-wc-blocks_product_list_rendered-js-event | 4 + .../Blocks/BlockTypes/ProductCollection.php | 168 +++++++++++++----- 9 files changed, 265 insertions(+), 54 deletions(-) create mode 100644 docs/product-collection-block/dom-events.md create mode 100644 plugins/woocommerce/changelog/48862-product-collection-trigger-wc-blocks_product_list_rendered-js-event diff --git a/docs/docs-manifest.json b/docs/docs-manifest.json index a994f533f1d..61146429a4d 100644 --- a/docs/docs-manifest.json +++ b/docs/docs-manifest.json @@ -1007,9 +1007,18 @@ "menu_title": "Registering custom collections", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-collection-block/register-product-collection.md", - "hash": "88445929a9f76512e1e8ff60be7beff7e912f31fbad552abf18862ed85f00585", + "hash": "e3df65c5eec52e4bb797e34c040dbb8f820ea6571e9ce50b1d518e95ca6cb169", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-collection-block/register-product-collection.md", "id": "3bf26fc7c56ae6e6a56e1171f750f5204fcfcece" + }, + { + "post_title": "DOM Events sent from product collection block", + "menu_title": "DOM Events", + "tags": "how-to", + "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-collection-block/dom-events.md", + "hash": "78bce4ab5b5e902232b5ff73fd7a7c197e4f4417a490ccb45c9a27400d003787", + "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-collection-block/dom-events.md", + "id": "c8d247b91472740075871e6b57a9583d893ac650" } ], "categories": [] @@ -1697,5 +1706,5 @@ "categories": [] } ], - "hash": "c24136612fe16fc7dee435a2ad2198ce242ab63dbba483fd0a18efd88dc3a289" + "hash": "945d1eb884a52c8c0dbc4c8852760e332ab40030de82403d1a7103b2517c36a1" } \ No newline at end of file diff --git a/docs/product-collection-block/dom-events.md b/docs/product-collection-block/dom-events.md new file mode 100644 index 00000000000..cc49b4bb8b9 --- /dev/null +++ b/docs/product-collection-block/dom-events.md @@ -0,0 +1,29 @@ +--- +post_title: DOM Events sent from product collection block +menu_title: DOM Events +tags: how-to +--- + +# Product Collection - DOM Events + +## `wc-blocks_product_list_rendered` + +This event is triggered when Product Collection block was rendered or re-rendered (e.g. due to page change). + +### `detail` parameters + +| Parameter | Type | Default value | Description | +| ------------------ | ------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `collection` | string | `undefined` | Collection type. It's `undefined` for "create your own" collections as the type is not specified. For other Core collections it can be one of type: `woocommerce/product-collection/best-sellers`, `woocommerce/product-collection/featured`, `woocommerce/product-collection/new-arrivals`, `woocommerce/product-collection/on-sale`, `woocommerce/product-collection/top-rated`. For custom collections it will hold their name. | + +### Example usage + +```javascript +window.document.addEventListener( + 'wc-blocks_product_list_rendered', + ( e ) => { + const { collection } = e.detail; + console.log( collection ) // -> collection name, e.g. woocommerce/product-collection/on-sale + } +); +``` diff --git a/plugins/woocommerce-blocks/assets/js/base/utils/legacy-events.ts b/plugins/woocommerce-blocks/assets/js/base/utils/legacy-events.ts index 322974c8db5..c2607db8c6d 100644 --- a/plugins/woocommerce-blocks/assets/js/base/utils/legacy-events.ts +++ b/plugins/woocommerce-blocks/assets/js/base/utils/legacy-events.ts @@ -2,6 +2,7 @@ * External dependencies */ import type { AddToCartEventDetail } from '@woocommerce/types'; +import type { CoreCollectionNames } from '@woocommerce/blocks/product-collection/types'; const CustomEvent = window.CustomEvent || null; @@ -59,6 +60,16 @@ export const triggerAddedToCartEvent = ( { } ); }; +export const triggerProductListRenderedEvent = ( payload: { + collection?: CoreCollectionNames | string; +} ) => { + dispatchEvent( 'wc-blocks_product_list_rendered', { + bubbles: true, + cancelable: true, + detail: payload, + } ); +}; + /** * Function that listens to a jQuery event and dispatches a native JS event. * Useful to convert WC Core events into events that can be read by blocks. diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/frontend.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/frontend.tsx index cebf7594018..12b5f386209 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/frontend.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/frontend.tsx @@ -8,10 +8,12 @@ import { getElement, getContext, } from '@woocommerce/interactivity'; +import { triggerProductListRenderedEvent } from '@woocommerce/base-utils'; /** * Internal dependencies */ +import { CoreCollectionNames } from './types'; import './style.scss'; export type ProductCollectionStoreContext = { @@ -20,6 +22,7 @@ export type ProductCollectionStoreContext = { accessibilityMessage: string; accessibilityLoadingMessage: string; accessibilityLoadedMessage: string; + collection: CoreCollectionNames; }; const isValidLink = ( ref: HTMLAnchorElement ) => @@ -136,6 +139,10 @@ const productCollectionStore = { ctx.isPrefetchNextOrPreviousLink = !! ref.href; scrollToFirstProductIfNotVisible( wcNavigationId ); + + triggerProductListRenderedEvent( { + collection: ctx.collection, + } ); } }, /** @@ -179,6 +186,12 @@ const productCollectionStore = { yield prefetch( ref.href ); } }, + *onRender() { + const { collection } = + getContext< ProductCollectionStoreContext >(); + + triggerProductListRenderedEvent( { collection } ); + }, }, }; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts index 5d5a766f50c..4407c682abe 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts @@ -135,7 +135,6 @@ export type QueryControlProps = { export enum CoreCollectionNames { PRODUCT_CATALOG = 'woocommerce/product-collection/product-catalog', - CUSTOM = 'woocommerce/product-collection/custom', BEST_SELLERS = 'woocommerce/product-collection/best-sellers', FEATURED = 'woocommerce/product-collection/featured', NEW_ARRIVALS = 'woocommerce/product-collection/new-arrivals', diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx index 1958d15e4de..bdbd882e88a 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx @@ -18,13 +18,13 @@ import { * Internal dependencies */ import { - ProductCollectionAttributes, - TProductCollectionOrder, - TProductCollectionOrderBy, - ProductCollectionQuery, - ProductCollectionDisplayLayout, - PreviewState, - SetPreviewState, + type ProductCollectionAttributes, + type TProductCollectionOrder, + type TProductCollectionOrderBy, + type ProductCollectionQuery, + type ProductCollectionDisplayLayout, + type PreviewState, + type SetPreviewState, } from './types'; import { coreQueryPaginationBlockName, diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts index fc5aeaaaa86..cffadc5246c 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts @@ -1627,6 +1627,72 @@ test.describe( 'Product Collection', () => { await expect( products ).toHaveText( expectedProducts ); } ); } ); + + test.describe( 'Extensibility - JS events', () => { + test( 'emits wc-blocks_product_list_rendered event on init and on page change', async ( { + pageObject, + page, + } ) => { + await pageObject.createNewPostAndInsertBlock(); + + await page.addInitScript( () => { + let eventFired = 0; + window.document.addEventListener( + 'wc-blocks_product_list_rendered', + ( e ) => { + const { collection } = e.detail; + window.eventPayload = collection; + window.eventFired = ++eventFired; + } + ); + } ); + + await pageObject.publishAndGoToFrontend(); + + await expect + .poll( + async () => await page.evaluate( 'window.eventPayload' ) + ) + .toBe( undefined ); + await expect + .poll( async () => await page.evaluate( 'window.eventFired' ) ) + .toBe( 1 ); + + await page.getByRole( 'link', { name: 'Next Page' } ).click(); + + await expect + .poll( async () => await page.evaluate( 'window.eventFired' ) ) + .toBe( 2 ); + } ); + + test( 'emits one wc-blocks_product_list_rendered event per block', async ( { + pageObject, + page, + } ) => { + // Adding three blocks in total + await pageObject.createNewPostAndInsertBlock(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost(); + + await page.addInitScript( () => { + let eventFired = 0; + window.document.addEventListener( + 'wc-blocks_product_list_rendered', + () => { + window.eventFired = ++eventFired; + } + ); + } ); + + await pageObject.publishAndGoToFrontend(); + + await expect + .poll( async () => await page.evaluate( 'window.eventFired' ) ) + .toBe( 3 ); + } ); + } ); } ); /** diff --git a/plugins/woocommerce/changelog/48862-product-collection-trigger-wc-blocks_product_list_rendered-js-event b/plugins/woocommerce/changelog/48862-product-collection-trigger-wc-blocks_product_list_rendered-js-event new file mode 100644 index 00000000000..6f4d379a7a3 --- /dev/null +++ b/plugins/woocommerce/changelog/48862-product-collection-trigger-wc-blocks_product_list_rendered-js-event @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Product Collection: emit the JS event when PC block is rendered diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php index 4b9372e35f6..6b94f719973 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php @@ -156,56 +156,102 @@ class ProductCollection extends AbstractBlock { } /** - * Enhances the Product Collection block with client-side pagination. + * Check if next tag is a PC block. * - * This function identifies Product Collection blocks and adds necessary data attributes - * to enable client-side navigation and animation effects. It also enqueues the Interactivity API runtime. + * @param WP_HTML_Tag_processor $p Initial tag processor. + * + * @return bool Answer if PC block is available. + */ + private function is_next_tag_product_collection( $p ) { + return $p->next_tag( array( 'class_name' => 'wp-block-woocommerce-product-collection' ) ); + } + + /** + * Set PC block namespace for Interactivity API. + * + * @param WP_HTML_Tag_processor $p Initial tag processor. + */ + private function set_product_collection_namespace( $p ) { + $p->set_attribute( 'data-wc-interactive', wp_json_encode( array( 'namespace' => 'woocommerce/product-collection' ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ); + } + + /** + * Attach the init directive to Product Collection block to call + * the onRender callback. * * @param string $block_content The HTML content of the block. - * @param array $block Block details, including its attributes. + * @param string $collection Collection type. * - * @return string Updated block content with added interactivity attributes. + * @return string Updated HTML content. */ - public function enhance_product_collection_with_interactivity( $block_content, $block ) { - $is_product_collection_block = $block['attrs']['query']['isProductCollectionBlock'] ?? false; - $is_enhanced_pagination_enabled = ! ( $block['attrs']['forcePageReload'] ?? false ); - if ( $is_product_collection_block && $is_enhanced_pagination_enabled ) { - // Enqueue the Interactivity API runtime. - wp_enqueue_script( 'wc-interactivity' ); + private function add_rendering_callback( $block_content, $collection ) { + $p = new \WP_HTML_Tag_Processor( $block_content ); - $p = new \WP_HTML_Tag_Processor( $block_content ); - - // Add `data-wc-navigation-id to the product collection block. - if ( $p->next_tag( array( 'class_name' => 'wp-block-woocommerce-product-collection' ) ) ) { - $p->set_attribute( - 'data-wc-navigation-id', - 'wc-product-collection-' . $this->parsed_block['attrs']['queryId'] - ); - $p->set_attribute( 'data-wc-interactive', wp_json_encode( array( 'namespace' => 'woocommerce/product-collection' ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ); + // Add `data-init to the product collection block so we trigger JS event on render. + if ( $this->is_next_tag_product_collection( $p ) ) { + $p->set_attribute( + 'data-wc-init', + 'callbacks.onRender' + ); + if ( $collection ) { $p->set_attribute( 'data-wc-context', wp_json_encode( array( - // The message to be announced by the screen reader when the page is loading or loaded. - 'accessibilityLoadingMessage' => __( 'Loading page, please wait.', 'woocommerce' ), - 'accessibilityLoadedMessage' => __( 'Page Loaded.', 'woocommerce' ), - // We don't prefetch the links if user haven't clicked on pagination links yet. - // This way we avoid prefetching when the page loads. - 'isPrefetchNextOrPreviousLink' => false, + 'collection' => $collection, ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ); - $block_content = $p->get_updated_html(); } + } - /** - * Add two div's: - * 1. Pagination animation for visual users. - * 2. Accessibility div for screen readers, to announce page load states. - */ - $last_tag_position = strripos( $block_content, '' ); - $accessibility_and_animation_html = ' + return $p->get_updated_html(); + } + + /** + * Attach all the Interactivity API directives responsible + * for client-side navigation. + * + * @param string $block_content The HTML content of the block. + * + * @return string Updated HTML content. + */ + private function enable_client_side_navigation( $block_content ) { + $p = new \WP_HTML_Tag_Processor( $block_content ); + + // Add `data-wc-navigation-id to the product collection block. + if ( $this->is_next_tag_product_collection( $p ) ) { + $p->set_attribute( + 'data-wc-navigation-id', + 'wc-product-collection-' . $this->parsed_block['attrs']['queryId'] + ); + $current_context = json_decode( $p->get_attribute( 'data-wc-context' ), true ) ?? []; + $p->set_attribute( + 'data-wc-context', + wp_json_encode( + array( + ...$current_context, + // The message to be announced by the screen reader when the page is loading or loaded. + 'accessibilityLoadingMessage' => __( 'Loading page, please wait.', 'woocommerce' ), + 'accessibilityLoadedMessage' => __( 'Page Loaded.', 'woocommerce' ), + // We don't prefetch the links if user haven't clicked on pagination links yet. + // This way we avoid prefetching when the page loads. + 'isPrefetchNextOrPreviousLink' => false, + ), + JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP + ) + ); + $block_content = $p->get_updated_html(); + } + + /** + * Add two div's: + * 1. Pagination animation for visual users. + * 2. Accessibility div for screen readers, to announce page load states. + */ + $last_tag_position = strripos( $block_content, '' ); + $accessibility_and_animation_html = '
'; - $block_content = substr_replace( - $block_content, - $accessibility_and_animation_html, - $last_tag_position, - 0 - ); + return substr_replace( + $block_content, + $accessibility_and_animation_html, + $last_tag_position, + 0 + ); + } + + /** + * Enhances the Product Collection block with client-side pagination. + * + * This function identifies Product Collection blocks and adds necessary data attributes + * to enable client-side navigation and animation effects. It also enqueues the Interactivity API runtime. + * + * @param string $block_content The HTML content of the block. + * @param array $block Block details, including its attributes. + * + * @return string Updated block content with added interactivity attributes. + */ + public function enhance_product_collection_with_interactivity( $block_content, $block ) { + $is_product_collection_block = $block['attrs']['query']['isProductCollectionBlock'] ?? false; + + if ( $is_product_collection_block ) { + // Enqueue the Interactivity API runtime and set the namespace. + wp_enqueue_script( 'wc-interactivity' ); + $p = new \WP_HTML_Tag_Processor( $block_content ); + if ( $this->is_next_tag_product_collection( $p ) ) { + $this->set_product_collection_namespace( $p ); + } + $block_content = $p->get_updated_html(); + + $collection = $block['attrs']['collection'] ?? ''; + $block_content = $this->add_rendering_callback( $block_content, $collection ); + + $is_enhanced_pagination_enabled = ! ( $block['attrs']['forcePageReload'] ?? false ); + if ( $is_enhanced_pagination_enabled ) { + $block_content = $this->enable_client_side_navigation( $block_content ); + } } return $block_content; @@ -295,7 +373,7 @@ class ProductCollection extends AbstractBlock { 'class_name' => $class_name, ) ) ) { - $processor->set_attribute( 'data-wc-interactive', wp_json_encode( array( 'namespace' => 'woocommerce/product-collection' ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ); + $this->set_product_collection_namespace( $processor ); $processor->set_attribute( 'data-wc-on--click', 'actions.navigate' ); $processor->set_attribute( 'data-wc-key', $key_prefix . '--' . esc_attr( wp_rand() ) ); @@ -314,9 +392,11 @@ class ProductCollection extends AbstractBlock { */ private function is_block_compatible( $block_name ) { // Check for explicitly unsupported blocks. - if ( 'core/post-content' === $block_name || + if ( + 'core/post-content' === $block_name || 'woocommerce/mini-cart' === $block_name || - 'woocommerce/featured-product' === $block_name ) { + 'woocommerce/featured-product' === $block_name + ) { return false; } @@ -835,7 +915,7 @@ class ProductCollection extends AbstractBlock { if ( ! isset( $base[ $key ] ) ) { $base[ $key ] = array(); } - $base[ $key ] = $this->array_merge_recursive_replace_non_array_properties( $base[ $key ], $value ); + $base[ $key ] = $this->array_merge_recursive_replace_non_array_properties( $base[ $key ], $value ); } else { $base[ $key ] = $value; } From 8707e71eb37ef5329e0cb617425e057e598735c4 Mon Sep 17 00:00:00 2001 From: Thomas Roberts <5656702+opr@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:45:06 +0100 Subject: [PATCH 012/318] Add additional unit tests for Store API checkout flow (#50033) * Add virtual product to fixtures * Add test to check virtual products can be ordered * Add test to check orders cannot be placed with invalid payment method * Add test to ensure orders can't be placed with out of stock items * Add test to ensure orders can't be placed with unowned coupons * Add test to ensure orders can't be placed coupons exceeding usage limit * Add test to ensure that orders can be placed with coupons. * Add changelog * Clean up coupon management * use correct WC case --------- Co-authored-by: Seghir Nadir --- .../changelog/add-store-api-unit-tests | 5 + .../StoreApi/Routes/AdditionalFields.php | 2 +- .../src/Blocks/StoreApi/Routes/Checkout.php | 325 +++++++++++++++++- 3 files changed, 330 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/add-store-api-unit-tests diff --git a/plugins/woocommerce/changelog/add-store-api-unit-tests b/plugins/woocommerce/changelog/add-store-api-unit-tests new file mode 100644 index 00000000000..03b944ec7eb --- /dev/null +++ b/plugins/woocommerce/changelog/add-store-api-unit-tests @@ -0,0 +1,5 @@ +Significance: patch +Type: dev +Comment: This PR only adds CI tests. + + diff --git a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/AdditionalFields.php b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/AdditionalFields.php index ff1e5bab87e..8076f7ee69a 100644 --- a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/AdditionalFields.php +++ b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/AdditionalFields.php @@ -81,7 +81,7 @@ class AdditionalFields extends MockeryTestCase { */ protected function tearDown(): void { parent::tearDown(); - unset( wc()->countries->locale ); + unset( WC()->countries->locale ); remove_all_filters( 'woocommerce_get_country_locale' ); global $wp_rest_server; $wp_rest_server = null; diff --git a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/Checkout.php b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/Checkout.php index 3aae1fa3851..103785a5456 100644 --- a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/Checkout.php +++ b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Routes/Checkout.php @@ -24,6 +24,8 @@ use Mockery\Adapter\Phpunit\MockeryTestCase; * phpcs:disable WordPress.PHP.DevelopmentFunctions.error_log_print_r, WooCommerce.Commenting.CommentHooks.MissingHookComment */ class Checkout extends MockeryTestCase { + + const TEST_COUPON_CODE = 'test_coupon_code'; /** * Setup test product data. Called before every test. */ @@ -34,6 +36,11 @@ class Checkout extends MockeryTestCase { $wp_rest_server = new \Spy_REST_Server(); do_action( 'rest_api_init', $wp_rest_server ); + $coupon = new \WC_Coupon(); + $coupon->set_code( self::TEST_COUPON_CODE ); + $coupon->set_amount( 2 ); + $coupon->save(); + wp_set_current_user( 0 ); $customer = get_user_by( 'email', 'testaccount@test.com' ); @@ -91,6 +98,15 @@ class Checkout extends MockeryTestCase { 'weight' => 10, ) ), + $fixtures->get_simple_product( + array( + 'name' => 'Virtual Test Product 2', + 'stock_status' => 'instock', + 'regular_price' => 10, + 'weight' => 10, + 'virtual' => true, + ) + ), ); wc_empty_cart(); wc()->cart->add_to_cart( $this->products[0]->get_id(), 2 ); @@ -102,7 +118,7 @@ class Checkout extends MockeryTestCase { */ protected function tearDown(): void { parent::tearDown(); - unset( wc()->countries->locale ); + unset( WC()->countries->locale ); $default_zone = \WC_Shipping_Zones::get_zone( 0 ); $shipping_methods = $default_zone->get_shipping_methods(); foreach ( $shipping_methods as $method ) { @@ -111,6 +127,9 @@ class Checkout extends MockeryTestCase { $default_zone->save(); remove_all_filters( 'woocommerce_get_country_locale' ); + $coupon_to_delete = new \WC_Coupon( self::TEST_COUPON_CODE ); + $coupon_to_delete->delete( true ); + global $wp_rest_server; $wp_rest_server = null; } @@ -155,6 +174,310 @@ class Checkout extends MockeryTestCase { $this->assertEquals( 200, $response->get_status() ); } + /** + * Ensure that orders can be placed with virtual products. + */ + public function test_virtual_product_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + WC()->cart->empty_cart(); + WC()->cart->add_to_cart( $this->products[2]->get_id(), 1 ); + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + } + + /** + * Ensure that orders cannot be placed with invalid payment methods. + */ + public function test_invalid_payment_method_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'apples', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 400, $response->get_status() ); + } + + /** + * Ensure that orders cannot be placed with out of stock items. + */ + public function test_out_of_stock_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + $product = wc_get_product( $this->products[0]->get_id() ); + $product->set_stock_status( 'outofstock' ); + $product->save(); + + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 403, $response->get_status() ); + } + + /** + * Ensure that orders cannot be placed with un-owned coupons. + */ + public function test_unowned_coupon_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + + WC()->cart->apply_coupon( 'test' ); + + $coupon = new \WC_Coupon( self::TEST_COUPON_CODE ); + + // Apply email restriction after adding coupon to cart. + $coupon->set_email_restrictions( 'jon@mail.com' ); + $coupon->save(); + + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 409, $response->get_status() ); + } + + /** + * Ensure that orders cannot be placed with coupons over their usage limit. + */ + public function test_usage_limit_coupon_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + + $coupon = new \WC_Coupon(); + $coupon->set_code( 'test' ); + $coupon->set_amount( 2 ); + $coupon->save(); + + WC()->cart->apply_coupon( 'test' ); + + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + + WC()->cart->apply_coupon( 'test' ); + $coupon->set_usage_limit( 1 ); + $coupon->save(); + + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 409, $response->get_status() ); + } + + /** + * Ensure that orders can be placed with coupons. + */ + public function test_coupon_post_data() { + $request = new \WP_REST_Request( 'POST', '/wc/store/v1/checkout' ); + $request->set_header( 'Nonce', wp_create_nonce( 'wc_store_api' ) ); + + WC()->cart->apply_coupon( self::TEST_COUPON_CODE ); + + $request->set_body_params( + array( + 'billing_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + 'email' => 'testaccount@test.com', + ), + 'shipping_address' => (object) array( + 'first_name' => 'test', + 'last_name' => 'test', + 'company' => '', + 'address_1' => 'test', + 'address_2' => '', + 'city' => 'test', + 'state' => '', + 'postcode' => 'cb241ab', + 'country' => 'GB', + 'phone' => '', + ), + 'payment_method' => 'bacs', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $this->assertEquals( 2, wc_get_order( $response->get_data()['order_id'] )->get_data()['discount_total'] ); + } + /** * Ensure that orders cannot be placed with invalid data. */ From eaa13c0151a980a045ad453bcbea020587e41624 Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:54:37 +0100 Subject: [PATCH 013/318] [e2e tests] Replace hardcoded default wp-env credentials (#50617) --- .../changelog/e2e-remove-hardcoded-default-creds | 4 ++++ .../tests/customize-store/assembler/color-picker.spec.js | 5 +++-- .../tests/customize-store/assembler/homepage.spec.js | 5 +++-- .../assembler/logo-picker/logo-picker.page.js | 5 +++-- .../e2e-pw/tests/customize-store/customize-store.page.js | 5 +++-- .../e2e-pw/tests/shopper/account-email-receiving.spec.js | 6 +++--- .../tests/e2e-pw/tests/shopper/product-simple.spec.js | 5 +++-- plugins/woocommerce/tests/e2e-pw/utils/features.js | 9 +++++---- plugins/woocommerce/tests/e2e-pw/utils/options.js | 5 +++-- 9 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 plugins/woocommerce/changelog/e2e-remove-hardcoded-default-creds diff --git a/plugins/woocommerce/changelog/e2e-remove-hardcoded-default-creds b/plugins/woocommerce/changelog/e2e-remove-hardcoded-default-creds new file mode 100644 index 00000000000..4f73f5cc6c2 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-remove-hardcoded-default-creds @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + + diff --git a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/color-picker.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/color-picker.spec.js index d90a0f457ec..02d002926e2 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/color-picker.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/color-picker.spec.js @@ -6,6 +6,7 @@ const { encodeCredentials } = require( '../../../utils/plugin-utils' ); const { activateTheme, DEFAULT_THEME } = require( '../../../utils/themes' ); const { getInstalledWordPressVersion } = require( '../../../utils/wordpress' ); const { setOption } = require( '../../../utils/options' ); +const { admin } = require( '../../../test-data/data' ); const test = base.extend( { assemblerPageObject: async ( { page }, use ) => { @@ -528,8 +529,8 @@ test.describe( 'Assembler -> Color Pickers', { tag: '@gutenberg' }, () => { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/homepage.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/homepage.spec.js index e6f9d9e2141..167705d0776 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/homepage.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/homepage.spec.js @@ -4,6 +4,7 @@ const { activateTheme, DEFAULT_THEME } = require( '../../../utils/themes' ); const { getInstalledWordPressVersion } = require( '../../../utils/wordpress' ); const { setOption } = require( '../../../utils/options' ); const { encodeCredentials } = require( '../../../utils/plugin-utils' ); +const { admin } = require( '../../../test-data/data' ); const test = base.extend( { pageObject: async ( { page }, use ) => { @@ -179,8 +180,8 @@ test.describe( 'Assembler -> Homepage', { tag: '@gutenberg' }, () => { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/logo-picker/logo-picker.page.js b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/logo-picker/logo-picker.page.js index 08f8f572661..549aecaeb35 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/logo-picker/logo-picker.page.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/assembler/logo-picker/logo-picker.page.js @@ -1,4 +1,5 @@ const { encodeCredentials } = require( '../../../../utils/plugin-utils' ); +const { admin } = require( '../../../../test-data/data' ); export class LogoPickerPage { page; @@ -58,8 +59,8 @@ export class LogoPickerPage { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/customize-store.page.js b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/customize-store.page.js index 98987b33d49..109462ba64d 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/customize-store/customize-store.page.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/customize-store/customize-store.page.js @@ -1,4 +1,5 @@ const { encodeCredentials } = require( '../../utils/plugin-utils' ); +const { admin } = require( '../../test-data/data' ); export class CustomizeStorePage { request; @@ -11,8 +12,8 @@ export class CustomizeStorePage { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/account-email-receiving.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/account-email-receiving.spec.js index 8110a3aff5c..1e3a0b45e2c 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/account-email-receiving.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/account-email-receiving.spec.js @@ -1,5 +1,5 @@ const { test: baseTest, expect } = require( '../../fixtures/fixtures' ); -const { customer } = require( '../../test-data/data' ); +const { admin, customer } = require( '../../test-data/data' ); const emailContent = '#wp-mail-logging-modal-content-body-content'; const emailContentHtml = '#wp-mail-logging-modal-format-html'; @@ -250,10 +250,10 @@ test.describe( await page.goto( 'wp-login.php' ); await page .getByLabel( 'Username or Email Address' ) - .fill( 'admin' ); + .fill( admin.username ); await page .getByLabel( 'Password', { exact: true } ) - .fill( 'password' ); + .fill( admin.password ); await page.getByRole( 'button', { name: 'Log In' } ).click(); await page.goto( `wp-admin/tools.php?page=wpml_plugin_log&s=${ encodeURIComponent( diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/product-simple.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/product-simple.spec.js index 06bb756b5f4..f43529ce577 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/product-simple.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/product-simple.spec.js @@ -1,5 +1,6 @@ const { test, expect } = require( '@playwright/test' ); const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; +const { admin } = require( '../../test-data/data' ); const productPrice = '18.16'; const simpleProductName = 'Simple single product'; @@ -100,8 +101,8 @@ test.describe( page, } ) => { await page.goto( 'my-account' ); - await page.locator( '#username' ).fill( 'admin' ); - await page.locator( '#password' ).fill( 'password' ); + await page.locator( '#username' ).fill( admin.username ); + await page.locator( '#password' ).fill( admin.password ); await page.locator( 'text=Log in' ).click(); await page.goto( `product/${ simpleProductSlug }` ); diff --git a/plugins/woocommerce/tests/e2e-pw/utils/features.js b/plugins/woocommerce/tests/e2e-pw/utils/features.js index db75f1b003b..e8a5993c53a 100644 --- a/plugins/woocommerce/tests/e2e-pw/utils/features.js +++ b/plugins/woocommerce/tests/e2e-pw/utils/features.js @@ -1,12 +1,13 @@ const { encodeCredentials } = require( './plugin-utils' ); +const { admin } = require( '../test-data/data' ); const setFeatureFlag = async ( request, baseURL, flagName, enable ) => { const apiContext = await request.newContext( { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, @@ -23,8 +24,8 @@ const resetFeatureFlags = async ( request, baseURL ) => { baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, diff --git a/plugins/woocommerce/tests/e2e-pw/utils/options.js b/plugins/woocommerce/tests/e2e-pw/utils/options.js index d5acf1ab160..569b0401b4d 100644 --- a/plugins/woocommerce/tests/e2e-pw/utils/options.js +++ b/plugins/woocommerce/tests/e2e-pw/utils/options.js @@ -2,6 +2,7 @@ * Internal dependencies */ import { encodeCredentials } from './plugin-utils'; +const { admin } = require( '../test-data/data' ); export const setOption = async ( request, @@ -13,8 +14,8 @@ export const setOption = async ( baseURL, extraHTTPHeaders: { Authorization: `Basic ${ encodeCredentials( - 'admin', - 'password' + admin.username, + admin.password ) }`, cookie: '', }, From b2f5f98593b747b4192386b0350e10c2ff6aca3d Mon Sep 17 00:00:00 2001 From: Heitor Pedroso Date: Tue, 13 Aug 2024 08:03:21 -0300 Subject: [PATCH 014/318] Update additional-checkout-fields.md (#50377) * Update additional-checkout-fields.md * Update docs-manifest.json --------- Co-authored-by: Alex Florisca --- docs/cart-and-checkout-blocks/additional-checkout-fields.md | 4 ++-- docs/docs-manifest.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/cart-and-checkout-blocks/additional-checkout-fields.md b/docs/cart-and-checkout-blocks/additional-checkout-fields.md index c937347f82d..29981df9bdc 100644 --- a/docs/cart-and-checkout-blocks/additional-checkout-fields.md +++ b/docs/cart-and-checkout-blocks/additional-checkout-fields.md @@ -617,7 +617,7 @@ You can use the `woocommerce_get_default_value_for_{$key}` filters to provide a ```php add_filter( - "woocommerce_blocks_get_default_value_for_my-plugin-namespace/address-field", + "woocommerce_get_default_value_for_my-plugin-namespace/address-field", function ( $value, $group, $wc_object ) { if ( 'billing' === $group ) { @@ -633,7 +633,7 @@ add_filter( ); add_filter( - "woocommerce_blocks_get_default_value_for_my-plugin-namespace/my-other-field", + "woocommerce_get_default_value_for_my-plugin-namespace/my-other-field", function ( $value, $group, $wc_object ) { $my_plugin_key = 'existing_order_field_key'; diff --git a/docs/docs-manifest.json b/docs/docs-manifest.json index 61146429a4d..5299dd14bc9 100644 --- a/docs/docs-manifest.json +++ b/docs/docs-manifest.json @@ -102,7 +102,7 @@ "menu_title": "Additional Checkout Fields", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/additional-checkout-fields.md", - "hash": "e956a9b4c3d57d125daafc850d9a28bd0d626e9498478a15c7fbab540359ed95", + "hash": "1b034ede098b933b6b00a9a27ba33e418b1c88c4883e2b9b191092e32866f7b9", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/additional-checkout-fields.md", "id": "cb5dd8d59043a4e53929121b45da7b33b1661ab8" } @@ -1706,5 +1706,5 @@ "categories": [] } ], - "hash": "945d1eb884a52c8c0dbc4c8852760e332ab40030de82403d1a7103b2517c36a1" + "hash": "402a928bfa0399c09151423796f98caeb8f99a70f8a4cf009db6703ec7949468" } \ No newline at end of file From 3a363d232be20c59ebd8c154d8c0968fd003ce48 Mon Sep 17 00:00:00 2001 From: DAnn2012 Date: Tue, 13 Aug 2024 13:38:56 +0200 Subject: [PATCH 015/318] Fix typo (product-collection.block_theme.spec.ts) (#50154) Co-authored-by: github-actions --- .../product-collection.block_theme.spec.ts | 8 ++++---- plugins/woocommerce/changelog/50154-patch-8 | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 plugins/woocommerce/changelog/50154-patch-8 diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts index cffadc5246c..f1f0f2575dc 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts @@ -217,24 +217,24 @@ test.describe( 'Product Collection', () => { await pageObject.createNewPostAndInsertBlock(); const allProducts = pageObject.products; - const salePoducts = pageObject.products.filter( { + const saleProducts = pageObject.products.filter( { hasText: 'Product on sale', } ); await expect( allProducts ).toHaveCount( 9 ); - await expect( salePoducts ).toHaveCount( 6 ); + await expect( saleProducts ).toHaveCount( 6 ); await pageObject.setShowOnlyProductsOnSale( { onSale: true, } ); await expect( allProducts ).toHaveCount( 6 ); - await expect( salePoducts ).toHaveCount( 6 ); + await expect( saleProducts ).toHaveCount( 6 ); await pageObject.publishAndGoToFrontend(); await expect( allProducts ).toHaveCount( 6 ); - await expect( salePoducts ).toHaveCount( 6 ); + await expect( saleProducts ).toHaveCount( 6 ); } ); test( 'Products can be filtered based on selection in handpicked products option', async ( { diff --git a/plugins/woocommerce/changelog/50154-patch-8 b/plugins/woocommerce/changelog/50154-patch-8 new file mode 100644 index 00000000000..a803d47eda9 --- /dev/null +++ b/plugins/woocommerce/changelog/50154-patch-8 @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak +Comment: Fix typo (product-collection.block_theme.spec.ts) + From f91bcf44c784eccbdc182c9d6a075733666da86a Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:03:10 +0100 Subject: [PATCH 016/318] [e2e tests] Add an option to skip the env setup script when running tests (#50620) Add the -x option to skip executing the env setup script --- ...-env-setup-add-option-to-skip-setup-script | 4 ++++ .../tests/e2e-pw/run-tests-with-env.sh | 24 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/e2e-env-setup-add-option-to-skip-setup-script diff --git a/plugins/woocommerce/changelog/e2e-env-setup-add-option-to-skip-setup-script b/plugins/woocommerce/changelog/e2e-env-setup-add-option-to-skip-setup-script new file mode 100644 index 00000000000..c5ad559968d --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-env-setup-add-option-to-skip-setup-script @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +E2E tests: add an option to skip the env setup script running before test execution diff --git a/plugins/woocommerce/tests/e2e-pw/run-tests-with-env.sh b/plugins/woocommerce/tests/e2e-pw/run-tests-with-env.sh index 222f6cee00a..bae19123a2e 100644 --- a/plugins/woocommerce/tests/e2e-pw/run-tests-with-env.sh +++ b/plugins/woocommerce/tests/e2e-pw/run-tests-with-env.sh @@ -2,6 +2,22 @@ set -eo pipefail +skipEnvSetup=False + +while getopts "x" opt; do + case $opt in + x) + skipEnvSetup=True + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +shift $((OPTIND-1)) + envName=$1 shift @@ -12,7 +28,6 @@ SCRIPT_PATH=$( echo "Setting up environment: $envName" - if [ -f "$SCRIPT_PATH/envs/$envName/.env.enc" ]; then echo "Found encrypted .env file for environment '$envName'" "$SCRIPT_PATH/bin/dotenv.sh" -d "$envName" @@ -22,7 +37,12 @@ else rm -f "$SCRIPT_PATH/.env" fi -"$SCRIPT_PATH/envs/$envName/env-setup.sh" +if [ "$skipEnvSetup" == "True" ]; then + echo "Skipping environment setup" +else + echo "Executing environment setup script(s)" + "$SCRIPT_PATH/envs/$envName/env-setup.sh" +fi echo "Running tests with environment: '$envName'" echo "Arguments: $*" From daa6a95b567d88e7c544635d12c75cf595369fef Mon Sep 17 00:00:00 2001 From: Bart Kalisz Date: Tue, 13 Aug 2024 15:26:47 +0200 Subject: [PATCH 017/318] Metrics: Use utils provided by `@wordpress/e2e-test-utils-playwright` (#50626) --- .../update-metrics-tests-utils-usage | 4 +++ .../tests/metrics/specs/editor.spec.js | 35 ++----------------- 2 files changed, 7 insertions(+), 32 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-metrics-tests-utils-usage diff --git a/plugins/woocommerce/changelog/update-metrics-tests-utils-usage b/plugins/woocommerce/changelog/update-metrics-tests-utils-usage new file mode 100644 index 00000000000..20bc32146db --- /dev/null +++ b/plugins/woocommerce/changelog/update-metrics-tests-utils-usage @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Make the Metrics tests use utilities provided by the updated @wordpress/e2e-test-utils-playwright package. diff --git a/plugins/woocommerce/tests/metrics/specs/editor.spec.js b/plugins/woocommerce/tests/metrics/specs/editor.spec.js index 30307a4d022..7269d6f0327 100644 --- a/plugins/woocommerce/tests/metrics/specs/editor.spec.js +++ b/plugins/woocommerce/tests/metrics/specs/editor.spec.js @@ -16,35 +16,6 @@ const BROWSER_IDLE_WAIT = 1000; const results = {}; -async function setPreferences( page, context, preferences ) { - await page.waitForFunction( () => window?.wp?.data ); - - await page.evaluate( - async ( props ) => { - for ( const [ key, value ] of Object.entries( - props.preferences - ) ) { - await window.wp.data - .dispatch( 'core/preferences' ) - .set( props.context, key, value ); - } - }, - { context, preferences } - ); -} - -async function editPost( admin, page, postId ) { - const query = new URLSearchParams(); - query.set( 'post', String( postId ) ); - query.set( 'action', 'edit' ); - - await admin.visitAdminPage( 'post.php', query.toString() ); - await setPreferences( page, 'core/edit-post', { - welcomeGuide: false, - fullscreenMode: false, - } ); -} - test.describe( 'Editor Performance', () => { test.use( { perfUtils: async ( { page }, use ) => { @@ -86,7 +57,7 @@ test.describe( 'Editor Performance', () => { metrics, } ) => { // Open the test draft. - await editPost( admin, page, draftId ); + await admin.editPost( draftId ); const canvas = await perfUtils.getCanvas(); // Wait for the first block. @@ -148,8 +119,8 @@ test.describe( 'Editor Performance', () => { draftId = await perfUtils.saveDraft(); } ); - test( 'Run the test', async ( { admin, page, perfUtils, metrics } ) => { - await editPost( admin, page, draftId ); + test( 'Run the test', async ( { admin, perfUtils, metrics } ) => { + await admin.editPost( draftId ); await perfUtils.disableAutosave(); const canvas = await perfUtils.getCanvas(); From 7a20d626d377c4f695eedbc1bece79c1a11d75a1 Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Tue, 13 Aug 2024 15:53:07 +0100 Subject: [PATCH 018/318] [e2e tests] Transform Classic Checkout: add an extra check of API response before checking the UI (#50627) --- .../changelog/e2e-fix-create-checkout-block-gutenberg | 4 ++++ .../tests/e2e-pw/tests/merchant/create-checkout-block.spec.js | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/e2e-fix-create-checkout-block-gutenberg diff --git a/plugins/woocommerce/changelog/e2e-fix-create-checkout-block-gutenberg b/plugins/woocommerce/changelog/e2e-fix-create-checkout-block-gutenberg new file mode 100644 index 00000000000..4f73f5cc6c2 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-fix-create-checkout-block-gutenberg @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + + diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-checkout-block.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-checkout-block.spec.js index f12eb0180d8..23317b1a834 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-checkout-block.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-checkout-block.spec.js @@ -92,9 +92,10 @@ test.describe( await publishPage( page, testPage.title ); // add additional payment option after page creation - await api.put( 'payment_gateways/bacs', { + const r = await api.put( 'payment_gateways/bacs', { enabled: true, } ); + expect( r.data.enabled ).toBe( true ); await page.reload(); // Mandatory to wait for the editor content, to ensure the iframe is loaded (if Gutenberg is active) From 5922b425777e36de584cc25e9efbcaa0b97f1921 Mon Sep 17 00:00:00 2001 From: Fernando Marichal Date: Tue, 13 Aug 2024 12:28:55 -0300 Subject: [PATCH 019/318] Only count published products in productCount (#50503) * Only count published products in productCount * Add changelog * Fix lint * Fix lint --- .../changelog/fix-48380_blocks_config_product_count | 4 ++++ plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-48380_blocks_config_product_count diff --git a/plugins/woocommerce/changelog/fix-48380_blocks_config_product_count b/plugins/woocommerce/changelog/fix-48380_blocks_config_product_count new file mode 100644 index 00000000000..31cb0584871 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-48380_blocks_config_product_count @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Only count published products in productCount diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php b/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php index d73992831b3..dbe9007d6a8 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php @@ -450,14 +450,16 @@ abstract class AbstractBlock { 'wordCountType' => _x( 'words', 'Word count type. Do not translate!', 'woocommerce' ), ]; if ( is_admin() && ! WC()->is_rest_api_request() ) { - $wc_blocks_config = array_merge( + $product_counts = wp_count_posts( 'product' ); + $published_products = isset( $product_counts->publish ) ? $product_counts->publish : 0; + $wc_blocks_config = array_merge( $wc_blocks_config, [ // Note that while we don't have a consolidated way of doing feature-flagging // we are borrowing from the WC Admin Features implementation. Also note we cannot // use the wcAdminFeatures global because it's not always enqueued in the context of blocks. 'experimentalBlocksEnabled' => Features::is_enabled( 'experimental-blocks' ), - 'productCount' => array_sum( (array) wp_count_posts( 'product' ) ), + 'productCount' => $published_products, ] ); } From f0b637f9c4e744f1184bfbeca42008605f826fca Mon Sep 17 00:00:00 2001 From: Vedanshu Jain Date: Tue, 13 Aug 2024 21:32:30 +0530 Subject: [PATCH 020/318] Cache order year_months in options for performance. (#50066) * Cache order year_months in options for performance. * Modify to prevent unnecessary option changed. Add unit tests. * Add the strict type directive. * Use exact check to use more cache instances. * Add clean state test. * Add namespace. * Namespace fixes. --- .../woocommerce/changelog/cache-order-dates | 4 + .../src/Internal/Admin/Orders/ListTable.php | 83 ++++++++++---- .../Internal/Admin/Orders/ListTableTest.php | 106 ++++++++++++++++++ 3 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 plugins/woocommerce/changelog/cache-order-dates create mode 100644 plugins/woocommerce/tests/php/src/Internal/Admin/Orders/ListTableTest.php diff --git a/plugins/woocommerce/changelog/cache-order-dates b/plugins/woocommerce/changelog/cache-order-dates new file mode 100644 index 00000000000..4841e70ad16 --- /dev/null +++ b/plugins/woocommerce/changelog/cache-order-dates @@ -0,0 +1,4 @@ +Significance: patch +Type: performance + +Cache order dates in options for performance. diff --git a/plugins/woocommerce/src/Internal/Admin/Orders/ListTable.php b/plugins/woocommerce/src/Internal/Admin/Orders/ListTable.php index daabf12f55c..d507b53d590 100644 --- a/plugins/woocommerce/src/Internal/Admin/Orders/ListTable.php +++ b/plugins/woocommerce/src/Internal/Admin/Orders/ListTable.php @@ -216,7 +216,7 @@ class ListTable extends WP_List_Table { * * @return mixed */ - public function set_items_per_page( $default, string $option, int $value ) { + public function set_items_per_page( $default, string $option, int $value ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.defaultFound -- backwards compat. return 'edit_' . $this->order_type . '_per_page' === $option ? absint( $value ) : $default; } @@ -754,6 +754,8 @@ class ListTable extends WP_List_Table { * @return void */ private function months_filter() { + global $wp_locale; + // XXX: [review] we may prefer to move this logic outside of the ListTable class. /** @@ -767,29 +769,12 @@ class ListTable extends WP_List_Table { return; } - global $wp_locale; - global $wpdb; - - $orders_table = esc_sql( OrdersTableDataStore::get_orders_table_name() ); - $utc_offset = wc_timezone_offset(); - - // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared - $order_dates = $wpdb->get_results( - $wpdb->prepare( - " - SELECT DISTINCT YEAR( t.date_created_local ) AS year, - MONTH( t.date_created_local ) AS month - FROM ( SELECT DATE_ADD( date_created_gmt, INTERVAL $utc_offset SECOND ) AS date_created_local FROM $orders_table WHERE type = %s AND status != 'trash' ) t - ORDER BY year DESC, month DESC - ", - $this->order_type - ) - ); - $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0; echo ''; } + /** + * Get order year-months cache. We cache the results in the options table, since these results will change very infrequently. + * We use the heuristic to always return current year-month when getting from cache to prevent an additional query. + * + * @return array List of year-months. + */ + protected function get_and_maybe_update_months_filter_cache(): array { + global $wpdb; + + // We cache in the options table since it's won't be invalidated soon. + $cache_option_value_name = 'wc_' . $this->order_type . '_list_table_months_filter_cache_value'; + $cache_option_date_name = 'wc_' . $this->order_type . '_list_table_months_filter_cache_date'; + + $cached_timestamp = get_option( $cache_option_date_name, 0 ); + + // new day, new cache. + if ( 0 === $cached_timestamp || gmdate( 'j', time() ) !== gmdate( 'j', $cached_timestamp ) || ( time() - $cached_timestamp ) > 60 * 60 * 24 ) { + $cached_value = false; + } else { + $cached_value = get_option( $cache_option_value_name ); + } + + if ( false !== $cached_value ) { + // Always add current year month for cache stability. This allows us to not hydrate the cache on every order update. + $current_year_month = new \stdClass(); + $current_year_month->year = gmdate( 'Y', time() ); + $current_year_month->month = gmdate( 'n', time() ); + if ( count( $cached_value ) === 0 || ( + $cached_value[0]->year !== $current_year_month->year || + $cached_value[0]->month !== $current_year_month->month ) + ) { + array_unshift( $cached_value, $current_year_month ); + } + return $cached_value; + } + + $orders_table = esc_sql( OrdersTableDataStore::get_orders_table_name() ); + $utc_offset = wc_timezone_offset(); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $order_dates = $wpdb->get_results( + $wpdb->prepare( + " + SELECT DISTINCT YEAR( t.date_created_local ) AS year, + MONTH( t.date_created_local ) AS month + FROM ( SELECT DATE_ADD( date_created_gmt, INTERVAL $utc_offset SECOND ) AS date_created_local FROM $orders_table WHERE type = %s AND status != 'trash' ) t + ORDER BY year DESC, month DESC + ", + $this->order_type + ) + ); + + update_option( $cache_option_date_name, time() ); + update_option( $cache_option_value_name, $order_dates ); + + return $order_dates; + } + /** * Render the customer filter dropdown. * diff --git a/plugins/woocommerce/tests/php/src/Internal/Admin/Orders/ListTableTest.php b/plugins/woocommerce/tests/php/src/Internal/Admin/Orders/ListTableTest.php new file mode 100644 index 00000000000..633a08afcc6 --- /dev/null +++ b/plugins/woocommerce/tests/php/src/Internal/Admin/Orders/ListTableTest.php @@ -0,0 +1,106 @@ +setup_cot(); + $this->toggle_cot_authoritative( true ); + $this->sut = new ListTable(); + $set_order_type = function ( $order_type ) { + $this->order_type = $order_type; + }; + $set_order_type->call( $this->sut, 'shop_order' ); + } + + /** + * Helper method to call protected get_and_maybe_update_months_filter_cache. + * + * @param ListTable $sut ListTable instance. + * + * @return array YearMonth Array. + */ + public function call_get_and_maybe_update_months_filter_cache( ListTable $sut ) { + $callable = function () { + return $this->get_and_maybe_update_months_filter_cache(); + }; + return $callable->call( $sut ); + } + + /** + * @testDox Test that current month is returned even there's no order. + */ + public function test_get_and_maybe_update_months_filter_cache_always_return_current() { + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); + $this->assertEmpty( $year_months ); + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); // when loaded from cache, we always return current year month. + $this->assertEquals( $year_months[0]->year, gmdate( 'Y', time() ) ); + $this->assertEquals( $year_months[0]->month, gmdate( 'n', time() ) ); + } + + /** + * @testDox Test that current month is returned. + */ + public function test_get_and_maybe_update_months_filter_cache_always_return_current_with_order() { + \WC_Helper_Order::create_order(); + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); + $this->assertEquals( $year_months[0]->year, gmdate( 'Y', time() ) ); + $this->assertEquals( $year_months[0]->month, gmdate( 'n', time() ) ); + } + + /** + * @testDox Test that backfilled order is recognized. + */ + public function test_get_and_maybe_update_months_filter_cache_always_backfilled() { + $order = \WC_Helper_Order::create_order(); + $order->set_date_created( new \WC_DateTime( '1991-01-01 00:00:00' ) ); + $order->save(); + + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); + $this->assertEquals( end( $year_months )->year, 1991 ); + $this->assertEquals( end( $year_months )->month, 1 ); + } + + /** + * @testDox Test that reading from cache works as expected. + */ + public function test_get_and_maybe_update_months_filter_cache_always_return_current_and_backfilled() { + $order = \WC_Helper_Order::create_order(); + $order->set_date_created( new \WC_DateTime( '1991-01-01 00:00:00' ) ); + $order->save(); + + \WC_Helper_Order::create_order(); + + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); + $this->assertEquals( $year_months[0]->year, gmdate( 'Y', time() ) ); + $this->assertEquals( $year_months[0]->month, gmdate( 'n', time() ) ); + $this->assertEquals( end( $year_months )->year, 1991 ); + $this->assertEquals( end( $year_months )->month, 1 ); + + // Loading from cache doesn't alter the behavior. + + $year_months = $this->call_get_and_maybe_update_months_filter_cache( $this->sut ); + $this->assertEquals( $year_months[0]->year, gmdate( 'Y', time() ) ); + $this->assertEquals( $year_months[0]->month, gmdate( 'n', time() ) ); + $this->assertEquals( end( $year_months )->year, 1991 ); + $this->assertEquals( end( $year_months )->month, 1 ); + } +} From 10c66ad031680566aeccb219e7406868aa46ebd2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:29:12 +0100 Subject: [PATCH 021/318] Delete changelog files based on PR 50496 (#50646) Delete changelog files for 50496 Co-authored-by: WooCommerce Bot --- plugins/woocommerce/changelog/update-clear-unique-id | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 plugins/woocommerce/changelog/update-clear-unique-id diff --git a/plugins/woocommerce/changelog/update-clear-unique-id b/plugins/woocommerce/changelog/update-clear-unique-id deleted file mode 100644 index 4da0b7f4abe..00000000000 --- a/plugins/woocommerce/changelog/update-clear-unique-id +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Clear global_unique_id when restoring a product that doesn't have an unique id From 883f557dc412a91ba139358d095c5662a67a0cba Mon Sep 17 00:00:00 2001 From: Marianne380 Date: Tue, 13 Aug 2024 20:04:27 +0200 Subject: [PATCH 022/318] [Fix] Clear product unique ID (`global_unique_id`) when duplicating products. (#50629) * Generates unique product unique ID (`global_unique_id`) when duplicating products. * Just clear the global unique id. * Add changelog --- plugins/woocommerce/changelog/50629-fix-50614 | 4 ++++ .../includes/admin/class-wc-admin-duplicate-product.php | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 plugins/woocommerce/changelog/50629-fix-50614 diff --git a/plugins/woocommerce/changelog/50629-fix-50614 b/plugins/woocommerce/changelog/50629-fix-50614 new file mode 100644 index 00000000000..66dccf4dfe3 --- /dev/null +++ b/plugins/woocommerce/changelog/50629-fix-50614 @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Clear product unique ID (`global_unique_id`) when duplicating products. diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-duplicate-product.php b/plugins/woocommerce/includes/admin/class-wc-admin-duplicate-product.php index 05c67028ac3..77043e0b8b8 100644 --- a/plugins/woocommerce/includes/admin/class-wc-admin-duplicate-product.php +++ b/plugins/woocommerce/includes/admin/class-wc-admin-duplicate-product.php @@ -156,6 +156,9 @@ class WC_Admin_Duplicate_Product { if ( '' !== $product->get_sku( 'edit' ) ) { $duplicate->set_sku( wc_product_generate_unique_sku( 0, $product->get_sku( 'edit' ) ) ); } + if ( '' !== $product->get_global_unique_id( 'edit' ) ) { + $duplicate->set_global_unique_id( '' ); + } $duplicate->set_status( 'draft' ); $duplicate->set_date_created( null ); $duplicate->set_slug( '' ); @@ -195,6 +198,9 @@ class WC_Admin_Duplicate_Product { if ( '' !== $child->get_sku( 'edit' ) ) { $child_duplicate->set_sku( wc_product_generate_unique_sku( 0, $child->get_sku( 'edit' ) ) ); } + if ( '' !== $child->get_global_unique_id( 'edit' ) ) { + $child_duplicate->set_global_unique_id( '' ); + } foreach ( $meta_to_exclude as $meta_key ) { $child_duplicate->delete_meta_data( $meta_key ); From ac7e29582045418ddb7adebf762354ee6e59ee60 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:08:59 +0100 Subject: [PATCH 023/318] Delete changelog files based on PR 50608 (#50648) Delete changelog files for 50608 Co-authored-by: WooCommerce Bot --- .../50608-update-exlude-privacy-page-from-store-page | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page diff --git a/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page b/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page deleted file mode 100644 index 776c880a9a8..00000000000 --- a/plugins/woocommerce/changelog/50608-update-exlude-privacy-page-from-store-page +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix -Comment: Removed the privacy page from the store pages list to make it accessible when the 'Coming Soon' mode is enabled with the 'Restrict to store pages only' option. - From ff4c3c37b1df9c714703d4eb9e48fe7b698cd013 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:22:58 +0100 Subject: [PATCH 024/318] Delete changelog files based on PR 50592 (#50603) Delete changelog files for 50592 Co-authored-by: WooCommerce Bot --- ...5-the-title-on-the-confirmation-page-is-below-the-subtitle | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 plugins/woocommerce/changelog/50395-the-title-on-the-confirmation-page-is-below-the-subtitle diff --git a/plugins/woocommerce/changelog/50395-the-title-on-the-confirmation-page-is-below-the-subtitle b/plugins/woocommerce/changelog/50395-the-title-on-the-confirmation-page-is-below-the-subtitle deleted file mode 100644 index 52c4ad9bdc6..00000000000 --- a/plugins/woocommerce/changelog/50395-the-title-on-the-confirmation-page-is-below-the-subtitle +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Resolved an issue that caused the page title and content text to display in the incorrect order on the Order Confirmation page. From 75c18a690275a4dc9005e661b78b88d727b1aa74 Mon Sep 17 00:00:00 2001 From: Paul Sealock Date: Wed, 14 Aug 2024 10:08:59 +1200 Subject: [PATCH 025/318] [Beta Tester] Add WCPay test order meta data (#50467) --- .../50467-add-beta-tester-wcpay-test-order | 4 + .../woocommerce-beta-tester/src/app/app.js | 6 + .../src/payments/index.js | 160 ++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 plugins/woocommerce-beta-tester/changelog/50467-add-beta-tester-wcpay-test-order create mode 100644 plugins/woocommerce-beta-tester/src/payments/index.js diff --git a/plugins/woocommerce-beta-tester/changelog/50467-add-beta-tester-wcpay-test-order b/plugins/woocommerce-beta-tester/changelog/50467-add-beta-tester-wcpay-test-order new file mode 100644 index 00000000000..20882c69409 --- /dev/null +++ b/plugins/woocommerce-beta-tester/changelog/50467-add-beta-tester-wcpay-test-order @@ -0,0 +1,4 @@ +Significance: patch +Type: add + +Add WCPay test order meta data \ No newline at end of file diff --git a/plugins/woocommerce-beta-tester/src/app/app.js b/plugins/woocommerce-beta-tester/src/app/app.js index 50bd79036f9..6f0fc4bfa42 100644 --- a/plugins/woocommerce-beta-tester/src/app/app.js +++ b/plugins/woocommerce-beta-tester/src/app/app.js @@ -14,6 +14,7 @@ import { default as Features } from '../features'; import { default as RestAPIFilters } from '../rest-api-filters'; import RemoteInboxNotifications from '../remote-inbox-notifications'; import RemoteLogging from '../remote-logging'; +import Payments from '../payments'; const tabs = applyFilters( 'woocommerce_admin_test_helper_tabs', [ { @@ -51,6 +52,11 @@ const tabs = applyFilters( 'woocommerce_admin_test_helper_tabs', [ title: 'Remote Logging', content: , }, + { + name: 'woocommerce-payments', + title: 'WCPay', + content: , + }, ] ); export function App() { diff --git a/plugins/woocommerce-beta-tester/src/payments/index.js b/plugins/woocommerce-beta-tester/src/payments/index.js new file mode 100644 index 00000000000..f340b904f37 --- /dev/null +++ b/plugins/woocommerce-beta-tester/src/payments/index.js @@ -0,0 +1,160 @@ +/** + * External dependencies + */ +import { useSelect, useDispatch } from '@wordpress/data'; +import { ORDERS_STORE_NAME } from '@woocommerce/data'; +import { ToggleControl } from '@wordpress/components'; +import apiFetch from '@wordpress/api-fetch'; + +const metaKey = '_wcpay_mode'; + +const Payments = () => { + const { + orders = [], + isRequesting, + isError, + } = useSelect( ( select ) => { + const { getOrders, hasFinishedResolution, getOrdersError } = + select( ORDERS_STORE_NAME ); + + const query = { + page: 1, + per_page: 10, + }; + const orders = getOrders( query, null ); + const isRequesting = hasFinishedResolution( 'getOrders', [ query ] ); + + return { + orders, + isError: Boolean( getOrdersError( orders ) ), + isRequesting, + }; + } ); + + const { getOrderSuccess } = useDispatch( ORDERS_STORE_NAME ); + + const isTestOrder = ( order ) => + order.meta_data.find( ( metaItem ) => metaItem.key === metaKey ) + ?.value === 'test'; + + const onToggle = async ( order, isChecked ) => { + const data = { + meta_data: [ + { + key: metaKey, + value: isChecked ? 'test' : 'live', + }, + ], + }; + + try { + const updatedOrder = await apiFetch( { + path: `/wc/v3/orders/${ order.id }`, + method: 'PUT', + data: data, + headers: { + 'Content-Type': 'application/json', + }, + } ); + getOrderSuccess( order.id, updatedOrder ); + } catch ( error ) { + throw error; + } + }; + + const renderOrders = ( orders ) => { + return orders.map( ( order ) => { + return ( + + + { `${ order?.billing?.first_name } ${ order?.billing?.last_name }` } + + + { order.id } + + + { order.date_created_gmt } + + + { order.status } + + + { order.total } + + + + onToggle( order, isChecked ) + } + /> + + + ); + } ); + }; + + return ( + <> +

WooCommerce Payments

+ + + + + + + + + + + + + { ! isRequesting && + orders?.length && + renderOrders( orders ) } + +
+ Order + + ID + + Date + + Status + + Total + + WCPay Test Order +
+ { ! isRequesting && orders?.length === 0 && ( +

No orders found.

+ ) } + + ); +}; + +export default Payments; From bb7dbf9e3c5bb48ad32924b0618e1441180c2675 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Wed, 14 Aug 2024 09:37:31 +0800 Subject: [PATCH 026/318] Add `woocommerce_coming_soon` option for all sites (#50581) * Add woocommerce_coming_soon option for all sites * Set default option * Add changelog * Update `woocommerce_coming_soon` option to use `update_option` instead of `add_option` --- .../add-coming-soon-options-for-all-sites | 4 ++++ plugins/woocommerce/includes/class-wc-install.php | 15 +++++++++++++++ .../woocommerce/includes/wc-update-functions.php | 13 +++++++++++-- .../woocommerce/src/Admin/API/LaunchYourStore.php | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 plugins/woocommerce/changelog/add-coming-soon-options-for-all-sites diff --git a/plugins/woocommerce/changelog/add-coming-soon-options-for-all-sites b/plugins/woocommerce/changelog/add-coming-soon-options-for-all-sites new file mode 100644 index 00000000000..dd70504fe75 --- /dev/null +++ b/plugins/woocommerce/changelog/add-coming-soon-options-for-all-sites @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Add woocommerce_coming_soon option for all sites diff --git a/plugins/woocommerce/includes/class-wc-install.php b/plugins/woocommerce/includes/class-wc-install.php index 6b7a66da18e..d5184396673 100644 --- a/plugins/woocommerce/includes/class-wc-install.php +++ b/plugins/woocommerce/includes/class-wc-install.php @@ -262,6 +262,9 @@ class WC_Install { '9.2.0' => array( 'wc_update_920_add_wc_hooked_blocks_version_option', ), + '9.3.0' => array( + 'wc_update_930_add_woocommerce_coming_soon_option', + ), ); /** @@ -292,6 +295,7 @@ class WC_Install { add_action( 'init', array( __CLASS__, 'check_version' ), 5 ); add_action( 'init', array( __CLASS__, 'manual_database_update' ), 20 ); add_action( 'woocommerce_newly_installed', array( __CLASS__, 'maybe_enable_hpos' ), 20 ); + add_action( 'woocommerce_newly_installed', array( __CLASS__, 'add_coming_soon_option' ), 20 ); add_action( 'admin_init', array( __CLASS__, 'wc_admin_db_update_notice' ) ); add_action( 'admin_init', array( __CLASS__, 'add_admin_note_after_page_created' ) ); add_action( 'woocommerce_run_update_callback', array( __CLASS__, 'run_update_callback' ) ); @@ -986,6 +990,17 @@ class WC_Install { } } + /** + * Add the woocommerce_coming_soon option for new shops. + * + * Ensure that the option is set for all shops, even if core profiler is disabled on the host. + * + * @since 9.3.0 + */ + public static function add_coming_soon_option() { + add_option( 'woocommerce_coming_soon', 'no' ); + } + /** * Checks whether HPOS should be enabled for new shops. * diff --git a/plugins/woocommerce/includes/wc-update-functions.php b/plugins/woocommerce/includes/wc-update-functions.php index b3604083bb8..9879e6e5538 100644 --- a/plugins/woocommerce/includes/wc-update-functions.php +++ b/plugins/woocommerce/includes/wc-update-functions.php @@ -2779,14 +2779,16 @@ function wc_update_920_add_wc_hooked_blocks_version_option() { function wc_update_910_remove_obsolete_user_meta() { global $wpdb; - $deletions = $wpdb->query( " + $deletions = $wpdb->query( + " DELETE FROM $wpdb->usermeta WHERE meta_key IN ( '_last_order', '_order_count', '_money_spent' ) - " ); + " + ); $logger = wc_get_logger(); @@ -2815,3 +2817,10 @@ function wc_update_910_remove_obsolete_user_meta() { ); } } + +/** + * Add woocommerce_coming_soon option when it is not currently present. + */ +function wc_update_930_add_woocommerce_coming_soon_option() { + add_option( 'woocommerce_coming_soon', 'no' ); +} diff --git a/plugins/woocommerce/src/Admin/API/LaunchYourStore.php b/plugins/woocommerce/src/Admin/API/LaunchYourStore.php index 82eefbc86a5..3bc45b296c9 100644 --- a/plugins/woocommerce/src/Admin/API/LaunchYourStore.php +++ b/plugins/woocommerce/src/Admin/API/LaunchYourStore.php @@ -133,7 +133,7 @@ class LaunchYourStore { $private_link = 'no'; $share_key = wp_generate_password( 32, false ); - add_option( 'woocommerce_coming_soon', $coming_soon ); + update_option( 'woocommerce_coming_soon', $coming_soon ); add_option( 'woocommerce_store_pages_only', $store_pages_only ); add_option( 'woocommerce_private_link', $private_link ); add_option( 'woocommerce_share_key', $share_key ); From 9fcd59d3d00a378f246fb412bfce858caddf97c7 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Wed, 14 Aug 2024 09:38:50 +0800 Subject: [PATCH 027/318] Update WooCommercePayments task `is_supported` method to use default suggestions (#50585) * Update WooCommercePayments task is_supported to use default suggestions * Add changelog --- .../changelog/update-wcpay-task-to-use-default-specs | 4 ++++ .../Features/OnboardingTasks/Tasks/WooCommercePayments.php | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-wcpay-task-to-use-default-specs diff --git a/plugins/woocommerce/changelog/update-wcpay-task-to-use-default-specs b/plugins/woocommerce/changelog/update-wcpay-task-to-use-default-specs new file mode 100644 index 00000000000..9d491a770c5 --- /dev/null +++ b/plugins/woocommerce/changelog/update-wcpay-task-to-use-default-specs @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update WooCommercePayments task is_supported to use default suggestions diff --git a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php index f75656d38df..5a269ca620f 100644 --- a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php +++ b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php @@ -7,6 +7,7 @@ use Automattic\WooCommerce\Admin\Features\OnboardingTasks\Task; use Automattic\WooCommerce\Admin\PluginsHelper; use Automattic\WooCommerce\Admin\Features\PaymentGatewaySuggestions\Init as Suggestions; use Automattic\WooCommerce\Internal\Admin\WCPayPromotion\Init as WCPayPromotionInit; +use Automattic\WooCommerce\Admin\Features\PaymentGatewaySuggestions\DefaultPaymentGateways; /** * WooCommercePayments Task @@ -179,11 +180,11 @@ class WooCommercePayments extends Task { * @return bool */ public static function is_supported() { - $suggestions = Suggestions::get_suggestions(); + $suggestions = Suggestions::get_suggestions( DefaultPaymentGateways::get_all() ); $suggestion_plugins = array_merge( ...array_filter( array_column( $suggestions, 'plugins' ), - function( $plugins ) { + function ( $plugins ) { return is_array( $plugins ); } ) From 175ebe2a5e7cc3205ebabc0ef7f10fe02deb69eb Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Wed, 14 Aug 2024 09:39:03 +0800 Subject: [PATCH 028/318] Update the LYS "Add payment methods" link to the payment settings page (#50609) * Fix the "Add payment methods" link in LYS congrat screen redirects to a blank page * Add changelog * Fix link --- .../hub/main-content/pages/launch-store-success/WhatsNext.tsx | 2 +- plugins/woocommerce/changelog/fix-lys-payment-methods-link | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/fix-lys-payment-methods-link diff --git a/plugins/woocommerce-admin/client/launch-your-store/hub/main-content/pages/launch-store-success/WhatsNext.tsx b/plugins/woocommerce-admin/client/launch-your-store/hub/main-content/pages/launch-store-success/WhatsNext.tsx index 53ea8959ccd..493d68f9b16 100644 --- a/plugins/woocommerce-admin/client/launch-your-store/hub/main-content/pages/launch-store-success/WhatsNext.tsx +++ b/plugins/woocommerce-admin/client/launch-your-store/hub/main-content/pages/launch-store-success/WhatsNext.tsx @@ -78,7 +78,7 @@ const getActionsList = ( { activePlugins, allTasklists }: WhatsNextProps ) => { 'Give your shoppers more ways to pay by adding additional payment methods to your store.', 'woocommerce' ), - link: `${ ADMIN_URL }admin.php?page=wc-admin&task=payments`, + link: `${ ADMIN_URL }admin.php?page=wc-settings&tab=checkout`, linkText: __( 'Add payment methods', 'woocommerce' ), trackEvent: 'launch_you_store_congrats_payments_click', }; diff --git a/plugins/woocommerce/changelog/fix-lys-payment-methods-link b/plugins/woocommerce/changelog/fix-lys-payment-methods-link new file mode 100644 index 00000000000..6e929fe3207 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-lys-payment-methods-link @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Fix the "Add payment methods" link in LYS congrat screen redirects to a blank page From 6290e8e0f7fce773c01b0a7eb7d20c9f5ac523a1 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Wed, 14 Aug 2024 12:28:16 +0800 Subject: [PATCH 029/318] Add lost password e2e tests (#50611) * Add lost password e2e tests * Add changefile(s) from automation for the following project(s): woocommerce * Update lost password e2e test --------- Co-authored-by: github-actions --- .../50611-add-lost-password-e2e-test | 4 ++ .../tests/merchant/lost-password.spec.js | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 plugins/woocommerce/changelog/50611-add-lost-password-e2e-test create mode 100644 plugins/woocommerce/tests/e2e-pw/tests/merchant/lost-password.spec.js diff --git a/plugins/woocommerce/changelog/50611-add-lost-password-e2e-test b/plugins/woocommerce/changelog/50611-add-lost-password-e2e-test new file mode 100644 index 00000000000..e3885bc1872 --- /dev/null +++ b/plugins/woocommerce/changelog/50611-add-lost-password-e2e-test @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Add lost password e2e tests \ No newline at end of file diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/lost-password.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/lost-password.spec.js new file mode 100644 index 00000000000..fa2a7088b93 --- /dev/null +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/lost-password.spec.js @@ -0,0 +1,38 @@ +const { test, expect } = require( '@playwright/test' ); +const { admin } = require( '../../test-data/data' ); + +test.describe( 'Can go to lost password page and submit the form', () => { + test( 'can visit the lost password page from the login page', async ( { + page, + } ) => { + await page.goto( '/wp-login.php' ); + await page.getByRole( 'link', { name: 'Lost your password?' } ).click(); + expect( page.url() ).toContain( '/wp-login.php?action=lostpassword' ); + await expect( page.getByText( 'Get New Password' ) ).toBeVisible(); + } ); + + test( 'can submit the lost password form', async ( { page } ) => { + await page.goto( '/wp-login.php?action=lostpassword' ); + await page.getByLabel( 'Username or Email Address' ).click(); + await page + .getByLabel( 'Username or Email Address' ) + .fill( admin.username ); + await page.getByRole( 'button', { name: 'Get New Password' } ).click(); + + try { + await page.waitForURL( '**/wp-login.php?checkemail=confirm' ); + await expect( + page.getByText( /Check your email for the confirmation link/i ) + ).toBeVisible(); + } catch ( e ) { + // For local testing, the email might not be sent, so we can ignore this error. + + // eslint-disable-next-line jest/no-try-expect + await expect( + page.getByText( + /The email could not be sent. Your site may not be correctly configured to send emails/i + ) + ).toBeVisible(); + } + } ); +} ); From 5c980cc6299af86ed18bb8cb10695364467db761 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Wed, 14 Aug 2024 12:29:03 +0800 Subject: [PATCH 030/318] Optimize large image files (#50517) * Optimize large image files * Add changelog * Update logo-tiktok.png * Update tiktok logo - 128x128 px --- .../images/core-profiler/logo-tiktok.png | Bin 0 -> 10955 bytes .../images/core-profiler/logo-tiktok.svg | 14 -------------- .../images/marketplace-header-bg@2x.png | Bin 316634 -> 46418 bytes .../assets/images/placeholder-attachment.png | Bin 102644 -> 48149 bytes .../assets/images/previews/collection.jpg | Bin 122346 -> 44984 bytes .../images/previews/hoodie-with-zipper.jpg | Bin 56609 -> 24992 bytes .../changelog/update-improve-image-size | 4 ++++ .../DefaultFreeExtensions.php | 2 +- 8 files changed, 5 insertions(+), 15 deletions(-) create mode 100644 plugins/woocommerce/assets/images/core-profiler/logo-tiktok.png delete mode 100644 plugins/woocommerce/assets/images/core-profiler/logo-tiktok.svg create mode 100644 plugins/woocommerce/changelog/update-improve-image-size diff --git a/plugins/woocommerce/assets/images/core-profiler/logo-tiktok.png b/plugins/woocommerce/assets/images/core-profiler/logo-tiktok.png new file mode 100644 index 0000000000000000000000000000000000000000..5b04102ccc5f2db56a0ebdf2665c60c58bcdfc44 GIT binary patch literal 10955 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 Jt3(Wf{s));-v|Hz literal 0 HcmV?d00001 diff --git a/plugins/woocommerce/assets/images/core-profiler/logo-tiktok.svg b/plugins/woocommerce/assets/images/core-profiler/logo-tiktok.svg deleted file mode 100644 index 16840d49ab2..00000000000 --- a/plugins/woocommerce/assets/images/core-profiler/logo-tiktok.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/plugins/woocommerce/assets/images/marketplace-header-bg@2x.png b/plugins/woocommerce/assets/images/marketplace-header-bg@2x.png index 007d032d5f5b19bf00cdc80b21de6e2f20663a74..55e0846d3b95f6e1965fbeb50f08af9157f62d74 100644 GIT binary patch literal 46418 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 z

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 KarJ7nNMfHRyACHTxQZk# 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≈-LFhiB1$s#j+O?8CN(SLXfnU2(}r_ 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 LRitVpjD!9c_f@0l literal 102644 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%0AQn$ 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%0D%Frncm+~gXC;oDR8(8 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 QWrC~CuALM7?%(SF09Jxsa{vGU diff --git a/plugins/woocommerce/assets/images/previews/hoodie-with-zipper.jpg b/plugins/woocommerce/assets/images/previews/hoodie-with-zipper.jpg index f9b27c9fd35813bf315664b3a9c87bdb37eb9541..b3b49f2f1c24e897c5e339a5d7ada4c87ed61486 100644 GIT binary patch literal 24992 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 V;60%Lk@Ba|4Mc)=z?b{a|JnD&2-^Sv diff --git a/plugins/woocommerce/changelog/update-improve-image-size b/plugins/woocommerce/changelog/update-improve-image-size new file mode 100644 index 00000000000..ada7b2cf2c7 --- /dev/null +++ b/plugins/woocommerce/changelog/update-improve-image-size @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Optimize large image files diff --git a/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php b/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php index 06f8ff673ab..5e1faf15127 100644 --- a/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php +++ b/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php @@ -856,7 +856,7 @@ class DefaultFreeExtensions { ), 'tiktok-for-business' => array( 'label' => __( 'Create ad campaigns with TikTok', 'woocommerce' ), - 'image_url' => plugins_url( '/assets/images/core-profiler/logo-tiktok.svg', WC_PLUGIN_FILE ), + 'image_url' => plugins_url( '/assets/images/core-profiler/logo-tiktok.png', WC_PLUGIN_FILE ), 'description' => __( 'Create advertising campaigns and reach one billion global users.', 'woocommerce' ), 'learn_more_link' => 'https://woocommerce.com/products/tiktok-for-woocommerce?utm_source=storeprofiler&utm_medium=product&utm_campaign=freefeatures', 'install_priority' => 1, From d04666e35c39e60504e3d7fb085a0a654784d01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alba=20Rinc=C3=B3n?= Date: Wed, 14 Aug 2024 10:43:15 +0200 Subject: [PATCH 031/318] Fix `Single product` translations on edit mode (#50599) * Format json * Get title and description from the registered block * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Add empty array dep --------- Co-authored-by: github-actions --- .../assets/js/blocks/single-product/block.json | 8 ++++---- .../assets/js/blocks/single-product/edit/index.tsx | 9 +++++++-- .../50599-50049-fix-single-product-translations | 4 ++++ 3 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 plugins/woocommerce/changelog/50599-50049-fix-single-product-translations diff --git a/plugins/woocommerce-blocks/assets/js/blocks/single-product/block.json b/plugins/woocommerce-blocks/assets/js/blocks/single-product/block.json index 9375af50442..0e9dafa7dd7 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/single-product/block.json +++ b/plugins/woocommerce-blocks/assets/js/blocks/single-product/block.json @@ -17,12 +17,12 @@ "productId": { "type": "number" } - }, - "example": { + }, + "example": { "attributes": { - "isPreview": true + "isPreview": true } - }, + }, "usesContext": [ "postId", "postType", "queryId" ], "textdomain": "woocommerce", "apiVersion": 2, diff --git a/plugins/woocommerce-blocks/assets/js/blocks/single-product/edit/index.tsx b/plugins/woocommerce-blocks/assets/js/blocks/single-product/edit/index.tsx index 78b2f0eb502..04213fe8bdc 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/single-product/edit/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/single-product/edit/index.tsx @@ -53,6 +53,11 @@ const Editor = ( { const [ isEditing, setIsEditing ] = useState( ! productId ); const blockProps = useBlockProps(); + const block = useSelect( + ( select ) => select( 'core/blocks' ).getBlockType( metadata.name ), + [] + ); + const productPreview = useSelect( ( select ) => { if ( ! isPreview ) { return null; @@ -102,10 +107,10 @@ const Editor = ( { { isEditing ? ( - { metadata.description } + { block.description }

Date: Wed, 14 Aug 2024 10:43:32 +0200 Subject: [PATCH 032/318] Fix translations - Avoid registering blocks in the wrong context (#50615) * Avoid registering block in the wrong context * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Add changefile(s) from automation for the following project(s): woocommerce-blocks --------- Co-authored-by: github-actions --- .../utils/register-block-single-product-template.ts | 11 ++++++++--- .../changelog/50615-fix-product-rating-translations | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 plugins/woocommerce/changelog/50615-fix-product-rating-translations diff --git a/plugins/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts b/plugins/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts index 58f842c362d..88236a7ed4b 100644 --- a/plugins/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts +++ b/plugins/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts @@ -44,13 +44,14 @@ export const registerBlockSingleProductTemplate = ( { blockMetadata = blockName; } + const editSiteStore = select( 'core/edit-site' ); + subscribe( () => { const previousTemplateId = currentTemplateId; - const store = select( 'core/edit-site' ); // With GB 16.3.0 the return type can be a number: https://github.com/WordPress/gutenberg/issues/53230 currentTemplateId = parseTemplateId( - store?.getEditedPostId< string | number | undefined >() + editSiteStore?.getEditedPostId< string | number | undefined >() ); const hasChangedTemplate = previousTemplateId !== currentTemplateId; const hasTemplateId = Boolean( currentTemplateId ); @@ -108,7 +109,11 @@ export const registerBlockSingleProductTemplate = ( { // This subscribe callback could be invoked with the core/blocks store // which would cause infinite registration loops because of the `registerBlockType` call. // This local cache helps prevent that. - if ( ! isBlockRegistered && isAvailableOnPostEditor ) { + if ( + ! isBlockRegistered && + isAvailableOnPostEditor && + ! editSiteStore + ) { if ( isVariationBlock ) { blocksRegistered.add( variationName ); registerBlockVariation( diff --git a/plugins/woocommerce/changelog/50615-fix-product-rating-translations b/plugins/woocommerce/changelog/50615-fix-product-rating-translations new file mode 100644 index 00000000000..c2597b4ed26 --- /dev/null +++ b/plugins/woocommerce/changelog/50615-fix-product-rating-translations @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Fix translation - Avoid registering blocks in the wrong context. \ No newline at end of file From f1be869ff4846672509a53960ce89cc6c8f17ec3 Mon Sep 17 00:00:00 2001 From: Karol Manijak <20098064+kmanijak@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:13:37 +0200 Subject: [PATCH 033/318] Fix the PHP warning in which the null was passed to json_decode (#50661) * Fix the PHP warning in which the null was passed to json_decode * Add changelog --- plugins/woocommerce/changelog/fix-php-warning | 4 ++++ .../woocommerce/src/Blocks/BlockTypes/ProductCollection.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/fix-php-warning diff --git a/plugins/woocommerce/changelog/fix-php-warning b/plugins/woocommerce/changelog/fix-php-warning new file mode 100644 index 00000000000..4a511ec5319 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-php-warning @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Product Collection: fix the PHP deprecated warning diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php index 6b94f719973..45f5ab2b48e 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php @@ -226,7 +226,7 @@ class ProductCollection extends AbstractBlock { 'data-wc-navigation-id', 'wc-product-collection-' . $this->parsed_block['attrs']['queryId'] ); - $current_context = json_decode( $p->get_attribute( 'data-wc-context' ), true ) ?? []; + $current_context = json_decode( $p->get_attribute( 'data-wc-context' ) ?? '{}', true ); $p->set_attribute( 'data-wc-context', wp_json_encode( From 9995b51a5a55849e01074a0a26b0882123d42d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alba=20Rinc=C3=B3n?= Date: Wed, 14 Aug 2024 11:29:03 +0200 Subject: [PATCH 034/318] Fix `Product Meta` translations (#50625) * Avoid registering block in the wrong context * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Fix Product meta translations * Add changefile(s) from automation for the following project(s): woocommerce * Fix lint error --------- Co-authored-by: github-actions --- .../50625-fix-product-meta-translations | 4 ++++ .../src/Blocks/BlockTypes/ProductMeta.php | 17 +++++++++++++++++ .../src/Blocks/BlockTypesController.php | 1 + 3 files changed, 22 insertions(+) create mode 100644 plugins/woocommerce/changelog/50625-fix-product-meta-translations create mode 100644 plugins/woocommerce/src/Blocks/BlockTypes/ProductMeta.php diff --git a/plugins/woocommerce/changelog/50625-fix-product-meta-translations b/plugins/woocommerce/changelog/50625-fix-product-meta-translations new file mode 100644 index 00000000000..4800360beac --- /dev/null +++ b/plugins/woocommerce/changelog/50625-fix-product-meta-translations @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Fix "Product Meta" translations - Register the block server side. \ No newline at end of file diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductMeta.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductMeta.php new file mode 100644 index 00000000000..92341b9953b --- /dev/null +++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductMeta.php @@ -0,0 +1,17 @@ + Date: Wed, 14 Aug 2024 11:02:58 +0100 Subject: [PATCH 035/318] Add new buttonAttributes API to style express checkout buttons coherently (#47899) * Expose buttonAttributes to the express payment methods * Add size and label attributes to the express checkout area * Remove defaultHeight * default button Label * Remove the button label attribute * Remove px from height * Change large button height to 55px * Load express checkout block with attributes * Add toggle and borderRadius controls and remove getting border radius from the theme * Remove extra border radius text * Only pass buttonAttributes if toggled on * Move express payment block attribute logic into a Provider * Tidy up editor grid and parse attributes into context on frontend * Add px to border-radius input * Express payment methods not selectable * Add a test * lint fixes * default button height is 48 not 4 * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Update docs * Add tests for express payment methods * Center images within the express payment area in the editor * Apply the buttonAttributes to the li container in the editor regardless of showButtonStyles * Fix style issue * fix linting * fix lint again * Update manifest * Update docs manifest * Resize images in editor * lint fix --------- Co-authored-by: github-actions --- .../payment-method-integration.md | 56 ++++-- docs/docs-manifest.json | 6 +- ...methods.js => express-payment-methods.tsx} | 36 +++- ...ayment.js => checkout-express-payment.tsx} | 0 .../payment-methods/express-payment/index.js | 2 +- .../express-payment/style.scss | 3 +- .../test/__mocks__/editor-context.ts | 3 + .../test/__mocks__/express-payment-props.ts | 188 ++++++++++++++++++ .../test/express-payment-methods.tsx | 122 ++++++++++++ .../cart-express-payment-block/editor.scss | 17 ++ .../assets/js/blocks/checkout/block.tsx | 2 + .../assets/js/blocks/checkout/context.ts | 2 + .../checkout-express-payment-block/block.json | 12 ++ .../checkout-express-payment-block/block.tsx | 1 - .../context.tsx | 21 ++ .../checkout-express-payment-block/edit.tsx | 105 +++++++++- .../editor.scss | 34 ++++ .../frontend.tsx | 32 +++ .../checkout-express-payment-block/types.ts | 10 + .../inner-blocks/register-components.ts | 2 +- ...899-try-poc-express-checkout-button-styles | 4 + 21 files changed, 627 insertions(+), 31 deletions(-) rename plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/{express-payment-methods.js => express-payment-methods.tsx} (81%) rename plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/{checkout-express-payment.js => checkout-express-payment.tsx} (100%) create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/test/__mocks__/editor-context.ts create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/test/__mocks__/express-payment-props.ts create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/test/express-payment-methods.tsx create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/context.tsx create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/frontend.tsx create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-express-payment-block/types.ts create mode 100644 plugins/woocommerce/changelog/47899-try-poc-express-checkout-button-styles diff --git a/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md b/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md index 602bcb7deaa..c7daa61ac23 100644 --- a/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md +++ b/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md @@ -139,23 +139,24 @@ The options you feed the configuration instance are the same as those for expres A big part of the payment method integration is the interface that is exposed for payment methods to use via props when the node provided is cloned and rendered on block mount. While all the props are listed below, you can find more details about what the props reference, their types etc via the [typedefs described in this file](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/assets/js/types/type-defs/payment-method-interface.ts). -| Property | Type | Description | Values | -| ------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `activePaymentMethod` | String | The slug of the current active payment method in the checkout. | - | -| `billing` | Object | Contains everything related to billing. | `billingAddress`, `cartTotal`, `currency`, `cartTotalItems`, `displayPricesIncludingTax`, `appliedCoupons`, `customerId` | -| `cartData` | Object | Data exposed from the cart including items, fees, and any registered extension data. Note that this data should be treated as immutable (should not be modified/mutated) or it will result in errors in your application. | `cartItems`, `cartFees`, `extensions` | -| `checkoutStatus` | Object | The current checkout status exposed as various boolean state. | `isCalculating`, `isComplete`, `isIdle`, `isProcessing` | +| Property | Type | Description | Values | +| ------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `activePaymentMethod` | String | The slug of the current active payment method in the checkout. | - | +| `billing` | Object | Contains everything related to billing. | `billingAddress`, `cartTotal`, `currency`, `cartTotalItems`, `displayPricesIncludingTax`, `appliedCoupons`, `customerId` | +| `cartData` | Object | Data exposed from the cart including items, fees, and any registered extension data. Note that this data should be treated as immutable (should not be modified/mutated) or it will result in errors in your application. | `cartItems`, `cartFees`, `extensions` | +| `checkoutStatus` | Object | The current checkout status exposed as various boolean state. | `isCalculating`, `isComplete`, `isIdle`, `isProcessing` | | `components` | Object | It exposes React components that can be implemented by your payment method for various common interface elements used by payment methods. |
  • `ValidationInputError`: a container for holding validation errors which typically you'll include after any inputs.
  • [`PaymentMethodLabel`](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/e089ae17043fa525e8397d605f0f470959f2ae95/assets/js/payment-method-extensions/payment-methods/paypal/index.js#L37-L40): use this component for the payment method label, including an optional icon.
  • `PaymentMethodIcons`: a React component used for displaying payment method icons.
  • - `LoadingMask`: a wrapper component that handles displaying a loading state when the isLoading prop is true. Exposes the [LoadingMask component](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/c9074a4941919987dbad16a80f358b960336a09d/assets/js/base/components/loading-mask/index.js)
| | `emitResponse` | Object | Contains some constants that can be helpful when using the event emitter. Read the _[Emitting Events](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/e267cd96a4329a4eeef816b2ef627e113ebb72a5/docs/extensibility/checkout-flow-and-events.md#emitting-events)_ section for more details. |
  • `noticeContexts`: This is an object containing properties referencing areas where notices can be targeted in the checkout. The object has the following properties:
    • `PAYMENTS`: This is a reference to the notice area in the payment methods step.
    • `EXPRESS_PAYMENTS`: This is a reference to the notice area in the express payment methods step.
  • `responseTypes`: This is an object containing properties referencing the various response types that can be returned by observers for some event emitters. It makes it easier for autocompleting the types and avoiding typos due to human error. The types are `SUCCESS`, `FAIL`, `ERROR`. The values for these types also correspond to the [payment status types](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/34e17c3622637dbe8b02fac47b5c9b9ebf9e3596/src/Payments/PaymentResult.php#L21) from the [checkout endpoint response from the server](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/34e17c3622637dbe8b02fac47b5c9b9ebf9e3596/src/RestApi/StoreApi/Schemas/CheckoutSchema.php#L103-L113).
| -| `eventRegistration` | object | Contains all the checkout event emitter registration functions. These are functions the payment method can register observers on to interact with various points in the checkout flow (see [this doc](./checkout-flow-and-events.md) for more info). | `onCheckoutValidation`, `onCheckoutSuccess`, `onCheckoutFail`, `onPaymentSetup`, `onShippingRateSuccess`, `onShippingRateFail`, `onShippingRateSelectSuccess`, `onShippingRateSelectFail` | -| `onClick` | Function | **Provided to express payment methods** that should be triggered when the payment method button is clicked (which will signal to checkout the payment method has taken over payment processing) | - | -| `onClose` | Function | **Provided to express payment methods** that should be triggered when the express payment method modal closes and control is returned to checkout. | - | -| `onSubmit` | Function | Submits the checkout and begins processing | - | -| `paymentStatus` | Object | Various payment status helpers. Note, your payment method does not have to handle setting this status client side. Checkout will handle this via the responses your payment method gives from observers registered to [checkout event emitters](./checkout-flow-and-events.md). | `isPristine`, `isStarted`, `isProcessing`, `isFinished`, `hasError`, `hasFailed`, `isSuccessful` (see below for explanation) | -| `setExpressPaymentError` | Function | Receives a string and allows express payment methods to set an error notice for the express payment area on demand. This can be necessary because some express payment method processing might happen outside of checkout events. | - | -| `shippingData` | Object | Contains all shipping related data (outside of the shipping status). | `shippingRates`, `shippingRatesLoading`, `selectedRates`, `setSelectedRates`, `isSelectingRate`, `shippingAddress`, `setShippingAddress`, and `needsShipping` | +| `eventRegistration` | object | Contains all the checkout event emitter registration functions. These are functions the payment method can register observers on to interact with various points in the checkout flow (see [this doc](./checkout-flow-and-events.md) for more info). | `onCheckoutValidation`, `onCheckoutSuccess`, `onCheckoutFail`, `onPaymentSetup`, `onShippingRateSuccess`, `onShippingRateFail`, `onShippingRateSelectSuccess`, `onShippingRateSelectFail` | +| `onClick` | Function | **Provided to express payment methods** that should be triggered when the payment method button is clicked (which will signal to checkout the payment method has taken over payment processing) | - | +| `onClose` | Function | **Provided to express payment methods** that should be triggered when the express payment method modal closes and control is returned to checkout. | - | +| `onSubmit` | Function | Submits the checkout and begins processing | - | +| `buttonAttributes` | Object | Styles set by the merchant that should be respected by all express payment buttons | `height, borderRadius, darkMode` | +| `paymentStatus` | Object | Various payment status helpers. Note, your payment method does not have to handle setting this status client side. Checkout will handle this via the responses your payment method gives from observers registered to [checkout event emitters](./checkout-flow-and-events.md). | `isPristine`, `isStarted`, `isProcessing`, `isFinished`, `hasError`, `hasFailed`, `isSuccessful`(see below for explanation) | +| `setExpressPaymentError` | Function | Receives a string and allows express payment methods to set an error notice for the express payment area on demand. This can be necessary because some express payment method processing might happen outside of checkout events. | - | +| `shippingData` | Object | Contains all shipping related data (outside of the shipping status). | `shippingRates`, `shippingRatesLoading`, `selectedRates`, `setSelectedRates`, `isSelectingRate`, `shippingAddress`, `setShippingAddress`, and `needsShipping` | | `shippingStatus` | Object | Various shipping status helpers. |
  • `shippingErrorStatus`: an object with various error statuses that might exist for shipping
  • `shippingErrorTypes`: an object containing all the possible types for shipping error status
| -| `shouldSavePayment` | Boolean | Indicates whether or not the shopper has selected to save their payment method details (for payment methods that support saved payments). True if selected, false otherwise. Defaults to false. | - | +| `shouldSavePayment` | Boolean | Indicates whether or not the shopper has selected to save their payment method details (for payment methods that support saved payments). True if selected, false otherwise. Defaults to false. | - | - `isPristine`: This is true when the current payment status is `PRISTINE`. - `isStarted`: This is true when the current payment status is `EXPRESS_STARTED`. @@ -167,6 +168,33 @@ A big part of the payment method integration is the interface that is exposed fo Any registered `savedTokenComponent` node will also receive a `token` prop which includes the id for the selected saved token in case your payment method needs to use it for some internal logic. However, keep in mind, this is just the id representing this token in the database (and the value of the radio input the shopper checked), not the actual customer payment token (since processing using that usually happens on the server for security). +### Button Attributes for Express Payment Methods + +This API provides a way to synchronise the look and feel of the express payment buttons for a coherent shopper experience. Express Payment Methods must prefer the values provided in the `buttonAttributes`, and use it's own configuration settings as backup when the buttons are rendered somewhere other than the Cart or Checkout block. + +For example, in your button component, you would do something like this: + +```js +// Get your extension specific settings and set defaults if not available +let { + theme = 'dark', + borderRadius = '4', + height = '48', +} = getButtonSettingsFromConfig(); + +// In a cart & checkout block context, we receive `buttonAttributes` as a prop which overwrite the extension specific settings +if ( typeof buttonAttributes !== 'undefined' ) { + height = buttonAttributes.height; + borderRadius = buttonAttributes.borderRadius; + theme = buttonAttributes.darkMode ? 'light' : 'dark'; +} +... + +return
); diff --git a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/editor.scss b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/editor.scss new file mode 100644 index 00000000000..4dbdbfa5f37 --- /dev/null +++ b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/editor.scss @@ -0,0 +1,4 @@ +.wc-block-components-product-sku strong { + margin-left: $gap-smallest; + margin-right: $gap-smallest; +} diff --git a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/index.tsx b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/index.tsx index 2b631c74dcd..3b461c0f052 100644 --- a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/index.tsx @@ -29,6 +29,9 @@ const blockConfig: BlockConfiguration = { 'woocommerce/product-meta', ], edit, + save() { + return null; + }, supports, }; diff --git a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/style.scss b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/style.scss index d32bc9ca521..8aa99c856b3 100644 --- a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/style.scss +++ b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/style.scss @@ -1,6 +1,9 @@ .wc-block-components-product-sku { display: block; - text-transform: uppercase; @include font-size(small); overflow-wrap: break-word; + + strong { + text-transform: uppercase; + } } diff --git a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/types.ts b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/types.ts index a43531d141f..ec603507389 100644 --- a/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/types.ts +++ b/plugins/woocommerce-blocks/assets/js/atomic/blocks/product-elements/sku/types.ts @@ -5,4 +5,6 @@ export interface Attributes { isDescendentOfSingleProductBlock: boolean; showProductSelector: boolean; isDescendantOfAllProducts: boolean; + prefix: string; + suffix: string; } diff --git a/plugins/woocommerce/changelog/51033-47922-product-sku-improvements b/plugins/woocommerce/changelog/51033-47922-product-sku-improvements new file mode 100644 index 00000000000..1849a43e716 --- /dev/null +++ b/plugins/woocommerce/changelog/51033-47922-product-sku-improvements @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Product SKU block: add editable prefixes and suffixes. \ No newline at end of file diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductSKU.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductSKU.php index 1475a005217..50e748f646e 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductSKU.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductSKU.php @@ -69,14 +69,27 @@ class ProductSKU extends AbstractBlock { $styles_and_classes = StyleAttributesUtils::get_classes_and_styles_by_attributes( $attributes ); + $prefix = isset( $attributes['prefix'] ) ? wp_kses_post( ( $attributes['prefix'] ) ) : __( 'SKU: ', 'woocommerce' ); + if ( ! empty( $prefix ) ) { + $prefix = sprintf( '%s', $prefix ); + } + + $suffix = isset( $attributes['suffix'] ) ? wp_kses_post( ( $attributes['suffix'] ) ) : ''; + if ( ! empty( $suffix ) ) { + $suffix = sprintf( '%s', $suffix ); + } + return sprintf( '
- SKU: - %3$s + %3$s + %4$s + %5$s
', esc_attr( $styles_and_classes['classes'] ), esc_attr( $styles_and_classes['styles'] ?? '' ), - $product_sku + $prefix, + $product_sku, + $suffix ); } } From 5999ea671661b4faa1fc4dd288b84d77755b955d Mon Sep 17 00:00:00 2001 From: Vedanshu Jain Date: Fri, 30 Aug 2024 16:42:28 +0530 Subject: [PATCH 239/318] Add filter to overwrite response of `wc_rest_should_load_namespace` (#50902) * Add filter to allow overwriting `wc_rest_should_load_namespace`. * Unit tests + changelog. * Add doc block. * Update version number. Co-authored-by: Corey McKrill <916023+coreymckrill@users.noreply.github.com> --------- Co-authored-by: Corey McKrill <916023+coreymckrill@users.noreply.github.com> --- plugins/woocommerce/changelog/fix-50891 | 4 ++++ .../woocommerce/includes/wc-rest-functions.php | 14 +++++++++++--- .../php/includes/wc-rest-functions-test.php | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-50891 diff --git a/plugins/woocommerce/changelog/fix-50891 b/plugins/woocommerce/changelog/fix-50891 new file mode 100644 index 00000000000..33cc44e00b0 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-50891 @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + +Add filter for response of `wc_rest_should_load_namespace` function to allow loading namespaces. diff --git a/plugins/woocommerce/includes/wc-rest-functions.php b/plugins/woocommerce/includes/wc-rest-functions.php index 3eeec672a27..e9b3055cc9f 100644 --- a/plugins/woocommerce/includes/wc-rest-functions.php +++ b/plugins/woocommerce/includes/wc-rest-functions.php @@ -410,8 +410,6 @@ function wc_rest_should_load_namespace( string $ns, string $rest_route = '' ): b 'wc/private', ); - // We can consider allowing filtering this list in the future. - $known_namespace_request = false; foreach ( $known_namespaces as $known_namespace ) { if ( str_starts_with( $rest_route, $known_namespace ) ) { @@ -424,5 +422,15 @@ function wc_rest_should_load_namespace( string $ns, string $rest_route = '' ): b return true; } - return str_starts_with( $rest_route, $ns ); + /** + * Filters whether a namespace should be loaded. + * + * @param bool $should_load True if the namespace should be loaded, false otherwise. + * @param string $ns The namespace to check. + * @param string $rest_route The REST route being checked. + * @param array $known_namespaces Known namespaces that we know are safe to not load if the request is not for them. + * + * @since 9.4 + */ + return apply_filters( 'wc_rest_should_load_namespace', str_starts_with( $rest_route, $ns ), $ns, $rest_route, $known_namespaces ); } diff --git a/plugins/woocommerce/tests/php/includes/wc-rest-functions-test.php b/plugins/woocommerce/tests/php/includes/wc-rest-functions-test.php index d5938d7fbcb..41d2dd8dfc4 100644 --- a/plugins/woocommerce/tests/php/includes/wc-rest-functions-test.php +++ b/plugins/woocommerce/tests/php/includes/wc-rest-functions-test.php @@ -27,4 +27,22 @@ class WCRestFunctionsTest extends WC_Unit_Test_Case { $this->assertFalse( wc_rest_should_load_namespace( 'wc-analytics', 'wc/v2' ) ); $this->assertTrue( wc_rest_should_load_namespace( 'wc/v2', 'wc/v2' ) ); } + + /** + * @testDox Test wc_rest_should_load_namespace known works with preload. + */ + public function test_wc_rest_should_load_namespace_known_works_with_preload() { + $memo = rest_preload_api_request( array(), '/wc/store/v1/cart' ); + $this->assertArrayHasKey( '/wc/store/v1/cart', $memo ); + } + + /** + * @testDox Test wc_rest_should_load_namespace filter. + */ + public function test_wc_rest_should_load_namespace_filter() { + $this->assertFalse( wc_rest_should_load_namespace( 'wc/v1', 'wc/v2' ) ); + add_filter( 'wc_rest_should_load_namespace', '__return_true' ); + $this->assertTrue( wc_rest_should_load_namespace( 'wc/v1', 'wc/v2' ) ); + remove_filter( 'wc_rest_should_load_namespace', '__return_true' ); + } } From 44b5f54d08cf6b2f7c34568464d543e4a26d6174 Mon Sep 17 00:00:00 2001 From: Tom Cafferkey Date: Fri, 30 Aug 2024 12:24:34 +0100 Subject: [PATCH 240/318] Add doc blocks to Products shortcode hooks (#51061) * Add doc blocks to products shortcode woocommerce_before_shop_loop hooks * Improved comments * Add changelog --- .../add-docblocks-to-products-shortcode-hooks | 4 ++++ .../shortcodes/class-wc-shortcode-products.php | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 plugins/woocommerce/changelog/add-docblocks-to-products-shortcode-hooks diff --git a/plugins/woocommerce/changelog/add-docblocks-to-products-shortcode-hooks b/plugins/woocommerce/changelog/add-docblocks-to-products-shortcode-hooks new file mode 100644 index 00000000000..0c79db17c86 --- /dev/null +++ b/plugins/woocommerce/changelog/add-docblocks-to-products-shortcode-hooks @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Added doc blocks to conditionally fired hooks to better explain nuanced behavior diff --git a/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-products.php b/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-products.php index 9b551b3f2e0..51eed9c2753 100644 --- a/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-products.php +++ b/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-products.php @@ -641,8 +641,13 @@ class WC_Shortcode_Products { do_action( "woocommerce_shortcode_before_{$this->type}_loop", $this->attributes ); - // Fire standard shop loop hooks when paginating results so we can show result counts and so on. if ( wc_string_to_bool( $this->attributes['paginate'] ) ) { + /** + * Fire the standard shop hooks when paginating so we can display result counts etc. + * If the pagination is not enabled, this hook will not be fired. + * + * @since 3.3.1 + */ do_action( 'woocommerce_before_shop_loop' ); } @@ -667,8 +672,13 @@ class WC_Shortcode_Products { $GLOBALS['post'] = $original_post; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited woocommerce_product_loop_end(); - // Fire standard shop loop hooks when paginating results so we can show result counts and so on. if ( wc_string_to_bool( $this->attributes['paginate'] ) ) { + /** + * Fire the standard shop hooks when paginating so we can display the pagination. + * If the pagination is not enabled, this hook will not be fired. + * + * @since 3.3.1 + */ do_action( 'woocommerce_after_shop_loop' ); } From 7971df1d280fe1da1cf1c04602be0db314928f80 Mon Sep 17 00:00:00 2001 From: Chi-Hsuan Huang Date: Fri, 30 Aug 2024 20:25:52 +0800 Subject: [PATCH 241/318] Enhance WooCommerce version checking for remote logging reliability (#51009) * Enhance WooCommerce version checking using get_plugin_updates() * Update remote logger tool to toggle remote logging feature properly * Add changelog --- .../api/remote-logging/remote-logging.php | 1 + .../changelog/update-move-woo-version-check | 4 + .../changelog/update-move-woo-version-check | 4 + .../src/Internal/Logging/RemoteLogger.php | 74 +++++----- .../src/Internal/Logging/RemoteLoggerTest.php | 129 +++++++++++++----- 5 files changed, 141 insertions(+), 71 deletions(-) create mode 100644 plugins/woocommerce-beta-tester/changelog/update-move-woo-version-check create mode 100644 plugins/woocommerce/changelog/update-move-woo-version-check diff --git a/plugins/woocommerce-beta-tester/api/remote-logging/remote-logging.php b/plugins/woocommerce-beta-tester/api/remote-logging/remote-logging.php index 6e7d9b1487b..80d518e03f2 100644 --- a/plugins/woocommerce-beta-tester/api/remote-logging/remote-logging.php +++ b/plugins/woocommerce-beta-tester/api/remote-logging/remote-logging.php @@ -74,6 +74,7 @@ function toggle_remote_logging( $request ) { update_option( 'woocommerce_feature_remote_logging_enabled', 'yes' ); update_option( 'woocommerce_allow_tracking', 'yes' ); update_option( 'woocommerce_remote_variant_assignment', 1 ); + set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, WC()->version ); } else { update_option( 'woocommerce_feature_remote_logging_enabled', 'no' ); } diff --git a/plugins/woocommerce-beta-tester/changelog/update-move-woo-version-check b/plugins/woocommerce-beta-tester/changelog/update-move-woo-version-check new file mode 100644 index 00000000000..6807f1d962f --- /dev/null +++ b/plugins/woocommerce-beta-tester/changelog/update-move-woo-version-check @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update remote logger tool to toggle remote logging feature properly diff --git a/plugins/woocommerce/changelog/update-move-woo-version-check b/plugins/woocommerce/changelog/update-move-woo-version-check new file mode 100644 index 00000000000..af5e8c0070e --- /dev/null +++ b/plugins/woocommerce/changelog/update-move-woo-version-check @@ -0,0 +1,4 @@ +Significance: patch +Type: enhancement + +Enhance WooCommerce version checking for remote logging reliability diff --git a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php index 01e71d40e62..3bcb44f4c29 100644 --- a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php +++ b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php @@ -20,11 +20,10 @@ use WC_Log_Levels; * @package WooCommerce\Classes */ class RemoteLogger extends \WC_Log_Handler { - const LOG_ENDPOINT = 'https://public-api.wordpress.com/rest/v1.1/logstash'; - const RATE_LIMIT_ID = 'woocommerce_remote_logging'; - const RATE_LIMIT_DELAY = 60; // 1 minute. - const WC_LATEST_VERSION_TRANSIENT = 'latest_woocommerce_version'; - const FETCH_LATEST_VERSION_RETRY = 'fetch_latest_woocommerce_version_retry'; + const LOG_ENDPOINT = 'https://public-api.wordpress.com/rest/v1.1/logstash'; + const RATE_LIMIT_ID = 'woocommerce_remote_logging'; + const RATE_LIMIT_DELAY = 60; // 1 minute. + const WC_NEW_VERSION_TRANSIENT = 'woocommerce_new_version'; /** * Handle a log entry. @@ -150,7 +149,7 @@ class RemoteLogger extends \WC_Log_Handler { return false; } - if ( ! $this->is_latest_woocommerce_version() ) { + if ( ! $this->should_current_version_be_logged() ) { return false; } @@ -221,7 +220,7 @@ class RemoteLogger extends \WC_Log_Handler { self::LOG_ENDPOINT, array( 'body' => wp_json_encode( $body ), - 'timeout' => 2, + 'timeout' => 3, 'headers' => array( 'Content-Type' => 'application/json', ), @@ -256,14 +255,22 @@ class RemoteLogger extends \WC_Log_Handler { * * @return bool */ - private function is_latest_woocommerce_version() { - $latest_wc_version = $this->fetch_latest_woocommerce_version(); + private function should_current_version_be_logged() { + $new_version = get_site_transient( self::WC_NEW_VERSION_TRANSIENT ); - if ( is_null( $latest_wc_version ) ) { - return false; + if ( false === $new_version ) { + $new_version = $this->fetch_new_woocommerce_version(); + // Cache the new version for a week since we want to keep logging in with the same version for a while even if the new version is available. + set_site_transient( self::WC_NEW_VERSION_TRANSIENT, $new_version, WEEK_IN_SECONDS ); } - return version_compare( WC()->version, $latest_wc_version, '>=' ); + if ( ! is_string( $new_version ) || '' === $new_version ) { + // If the new version is not available, we consider the current version to be the latest. + return true; + } + + // If the current version is the latest, we don't want to log errors. + return version_compare( WC()->version, $new_version, '>=' ); } /** @@ -316,45 +323,34 @@ class RemoteLogger extends \WC_Log_Handler { } /** - * Fetch the latest WooCommerce version using the WordPress API and cache it. + * Fetch the new version of WooCommerce from the WordPress API. * - * @return string|null + * @return string|null New version if an update is available, null otherwise. */ - private function fetch_latest_woocommerce_version() { - $cached_version = get_transient( self::WC_LATEST_VERSION_TRANSIENT ); - if ( $cached_version ) { - return $cached_version; + private function fetch_new_woocommerce_version() { + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + if ( ! function_exists( 'get_plugin_updates' ) ) { + require_once ABSPATH . 'wp-admin/includes/update.php'; } - $retry_count = get_transient( self::FETCH_LATEST_VERSION_RETRY ); - if ( false === $retry_count || ! is_numeric( $retry_count ) ) { - $retry_count = 0; - } + $plugin_updates = get_plugin_updates(); - if ( $retry_count >= 3 ) { + // Check if WooCommerce plugin update information is available. + if ( ! is_array( $plugin_updates ) || ! isset( $plugin_updates[ WC_PLUGIN_BASENAME ] ) ) { return null; } - if ( ! function_exists( 'plugins_api' ) ) { - require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; - } - // Fetch the latest version from the WordPress API. - $plugin_info = plugins_api( 'plugin_information', array( 'slug' => 'woocommerce' ) ); + $wc_plugin_update = $plugin_updates[ WC_PLUGIN_BASENAME ]; - if ( is_wp_error( $plugin_info ) ) { - ++$retry_count; - set_transient( self::FETCH_LATEST_VERSION_RETRY, $retry_count, HOUR_IN_SECONDS ); + // Ensure the update object exists and has the required information. + if ( ! $wc_plugin_update || ! isset( $wc_plugin_update->update->new_version ) ) { return null; } - if ( ! empty( $plugin_info->version ) ) { - $latest_version = $plugin_info->version; - set_transient( self::WC_LATEST_VERSION_TRANSIENT, $latest_version, WEEK_IN_SECONDS ); - delete_transient( self::FETCH_LATEST_VERSION_RETRY ); - return $latest_version; - } - - return null; + $new_version = $wc_plugin_update->update->new_version; + return is_string( $new_version ) ? $new_version : null; } /** diff --git a/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php b/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php index 7133f38f5ef..63327438a03 100644 --- a/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php +++ b/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php @@ -35,8 +35,7 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case { public function tearDown(): void { $this->cleanup_filters(); delete_option( 'woocommerce_feature_remote_logging_enabled' ); - delete_transient( RemoteLogger::WC_LATEST_VERSION_TRANSIENT ); - delete_transient( RemoteLogger::FETCH_LATEST_VERSION_RETRY ); + delete_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); global $wpdb; $wpdb->query( "DELETE FROM {$wpdb->prefix}wc_rate_limits" ); WC_Cache_Helper::invalidate_cache_group( WC_Rate_Limiter::CACHE_GROUP ); @@ -56,6 +55,7 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case { 'plugins_api', 'pre_http_request', 'woocommerce_remote_logger_formatted_log_data', + 'pre_site_transient_update_plugins', ); foreach ( $filters as $filter ) { remove_all_filters( $filter ); @@ -90,18 +90,23 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case { */ public function remote_logging_disallowed_provider() { return array( - 'feature flag disabled' => array( + 'feature flag disabled' => array( 'condition' => 'feature flag disabled', 'setup' => fn() => update_option( 'woocommerce_feature_remote_logging_enabled', 'no' ), ), - 'tracking opted out' => array( + 'tracking opted out' => array( 'condition' => 'tracking opted out', 'setup' => fn() => add_filter( 'option_woocommerce_allow_tracking', fn() => 'no' ), ), - 'outdated version' => array( - 'condition' => 'outdated version', - 'setup' => function () { + 'high variant assignment' => array( + 'condition' => 'high variant assignment', + 'setup' => fn() => add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 15 ), + ), + 'outdated version' => array( + 'condition' => 'outdated version', + 'setup' => function () { $version = WC()->version; + // Next major version. (e.g. 9.0.1 -> 10.0.0). $next_version = implode( '.', array_map( @@ -112,28 +117,79 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case { array_keys( explode( '.', $version ) ) ) ); - set_transient( RemoteLogger::WC_LATEST_VERSION_TRANSIENT, $next_version ); + + set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $next_version, WEEK_IN_SECONDS ); }, - 'high variant assignment' => array( - 'condition' => 'high variant assignment', - 'setup' => fn() => add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 15 ), - ), ), ); } - /** - * @testdox Fetch latest WooCommerce version retries on API failure - */ - public function test_fetch_latest_woocommerce_version_retry() { - $this->setup_remote_logging_conditions( true ); - add_filter( 'plugins_api', fn() => new \WP_Error(), 10, 3 ); - for ( $i = 1; $i <= 4; $i++ ) { - $this->sut->is_remote_logging_allowed(); - $retry_count = get_transient( RemoteLogger::FETCH_LATEST_VERSION_RETRY ); - $this->assertEquals( min( $i, 3 ), $retry_count ); + /** + * @testdox should_current_version_be_logged method behaves correctly + * @dataProvider should_current_version_be_logged_provider + * + * @param string $current_version The current WooCommerce version. + * @param string $new_version The new WooCommerce version. + * @param string $transient_value The value of the transient. + * @param bool $expected The expected result. + */ + public function test_should_current_version_be_logged( $current_version, $new_version, $transient_value, $expected ) { + $wc_version = WC()->version; + WC()->version = $current_version; + + // Set up the transient. + if ( null !== $transient_value ) { + set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $transient_value, WEEK_IN_SECONDS ); + } else { + delete_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); + + $this->setup_mock_plugin_updates( $new_version ); } + + $result = $this->invoke_private_method( $this->sut, 'should_current_version_be_logged', array() ); + $this->assertEquals( $expected, $result ); + + // Clean up. + delete_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); + + WC()->version = $wc_version; + } + + /** + * Data provider for test_should_current_version_be_logged. + */ + public function should_current_version_be_logged_provider() { + return array( + 'current version is latest (transient set)' => array( '9.2.0', '9.2.0', '9.2.0', true ), + 'current version is newer (transient set)' => array( '9.3.0', '9.2.0', '9.2.0', true ), + 'current version is older (transient set)' => array( '9.1.0', '9.2.0', '9.2.0', false ), + 'new version is null (transient set)' => array( '9.2.0', null, null, true ), + 'transient not set, current version is latest' => array( '9.2.0', '9.2.0', null, true ), + 'transient not set, current version is newer' => array( '9.3.0', '9.2.0', null, true ), + 'transient not set, current version is older' => array( '9.1.0', '9.2.0', null, false ), + 'transient not set, new version is null' => array( '9.2.0', null, null, true ), + ); + } + + /** + * @testdox fetch_new_woocommerce_version method returns correct version + */ + public function test_fetch_new_woocommerce_version() { + $this->setup_mock_plugin_updates( '9.3.0' ); + + $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); + $this->assertEquals( '9.3.0', $result, 'The result should be the latest version when an update is available.' ); + } + + /** + * @testdox fetch_new_woocommerce_version method returns null when no update is available + */ + public function test_fetch_new_woocommerce_version_no_update() { + add_filter( 'pre_site_transient_update_plugins', fn() => array() ); + + $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); + $this->assertNull( $result, 'The result should be null when no update is available.' ); } /** @@ -421,17 +477,26 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case { update_option( 'woocommerce_feature_remote_logging_enabled', $enabled ? 'yes' : 'no' ); add_filter( 'option_woocommerce_allow_tracking', fn() => 'yes' ); add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 5 ); - add_filter( - 'plugins_api', - function ( $result, $action, $args ) use ( $enabled ) { - if ( 'plugin_information' === $action && 'woocommerce' === $args->slug ) { - return (object) array( 'version' => $enabled ? WC()->version : '9.0.0' ); - } - return $result; - }, - 10, - 3 + $this->setup_mock_plugin_updates( $enabled ? WC()->version : '9.0.0' ); + } + + + /** + * Set up mock plugin updates. + * + * @param string $new_version The new version of WooCommerce to simulate. + */ + private function setup_mock_plugin_updates( $new_version ) { + $update_plugins = (object) array( + 'response' => array( + WC_PLUGIN_BASENAME => (object) array( + 'new_version' => $new_version, + 'package' => 'https://downloads.wordpress.org/plugin/woocommerce.zip', + 'slug' => 'woocommerce', + ), + ), ); + add_filter( 'pre_site_transient_update_plugins', fn() => $update_plugins ); } /** From 502b4abe43e7565356bf95c2b8f824c9c8e62534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alba=20Rinc=C3=B3n?= Date: Fri, 30 Aug 2024 14:40:05 +0200 Subject: [PATCH 242/318] Fix increasing & decreasing sale price in product bulk edit (#50842) * Set the regular price when the `Change to:` price is left empty * Avoid fatal error when price is empty * Add changefile(s) from automation for the following project(s): woocommerce * Avoid setting the price to 0 when there wasn't a previous sale * Move the WC_Tests_Admin_Post_Types test to the appropiate folder so it's run * Add e2e test * Add e2e test * Add changefile(s) from automation for the following project(s): woocommerce * Add changefile(s) from automation for the following project(s): woocommerce * Fix lint errors * Fix lint errors * Fix test * Fix lint errors * Revert mv * Address increasing sale from 0 --------- Co-authored-by: github-actions --- ...-43149-fix-bulk-product-price-in-de-crease | 4 + .../admin/class-wc-admin-post-types.php | 3 +- .../tests/merchant/product-edit.spec.js | 116 ++++++++++++++++++ 3 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/50842-43149-fix-bulk-product-price-in-de-crease diff --git a/plugins/woocommerce/changelog/50842-43149-fix-bulk-product-price-in-de-crease b/plugins/woocommerce/changelog/50842-43149-fix-bulk-product-price-in-de-crease new file mode 100644 index 00000000000..affaea6bdf9 --- /dev/null +++ b/plugins/woocommerce/changelog/50842-43149-fix-bulk-product-price-in-de-crease @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Product bulk edit: fix increasing & decreasing sale price when there was no previous sale. \ No newline at end of file diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php b/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php index 741fda165cd..095893653ba 100644 --- a/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php +++ b/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php @@ -896,7 +896,8 @@ class WC_Admin_Post_Types { return false; } - $old_price = (float) $product->{"get_{$price_type}_price"}(); + $old_price = $product->{"get_{$price_type}_price"}(); + $old_price = '' === $old_price ? (float) $product->get_regular_price() : (float) $old_price; $price_changed = false; $change_price = absint( $request_data[ "change_{$price_type}_price" ] ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/product-edit.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/product-edit.spec.js index 89d18f069f5..e94595088b6 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/product-edit.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/product-edit.spec.js @@ -282,3 +282,119 @@ test( } ); } ); + +test( + 'can decrease the sale price if the product was not previously in sale when bulk editing products', + { tag: [ '@gutenberg', '@services' ] }, + async ( { page, products } ) => { + await page.goto( `wp-admin/edit.php?post_type=product` ); + + const salePriceDecrease = 10; + + await test.step( 'Update products with the "Sale > Decrease existing sale price" option', async () => { + await page.goto( `wp-admin/edit.php?post_type=product` ); + + for ( const product of products ) { + await page.getByLabel( `Select ${ product.name }` ).click(); + } + + await page + .locator( '#bulk-action-selector-top' ) + .selectOption( 'Edit' ); + await page.locator( '#doaction' ).click(); + + await page + .locator( 'select[name="change_sale_price"]' ) + .selectOption( + 'Decrease existing sale price by (fixed amount or %):' + ); + await page + .getByPlaceholder( 'Enter sale price ($)' ) + .fill( `${ salePriceDecrease }%` ); + + await page.getByRole( 'button', { name: 'Update' } ).click(); + } ); + + await test.step( 'Verify products have a sale price', async () => { + for ( const product of products ) { + await page.goto( `product/${ product.slug }` ); + + const expectedSalePrice = ( + product.regular_price * + ( 1 - salePriceDecrease / 100 ) + ).toFixed( 2 ); + + await expect + .soft( + await page + .locator( 'ins' ) + .getByText( `$${ expectedSalePrice }` ) + .count() + ) + .toBeGreaterThan( 0 ); + } + } ); + } +); + +test( + 'increasing the sale price from 0 does not change the sale price when bulk editing products', + { tag: [ '@gutenberg', '@services' ] }, + async ( { page, api } ) => { + let product; + await api + .post( 'products', { + id: 0, + name: `Product _${ Date.now() }`, + type: 'simple', + regular_price: '100', + sale_price: '0', + manage_stock: true, + stock_quantity: 10, + stock_status: 'instock', + } ) + .then( ( response ) => { + product = response.data; + } ); + + const salePriceIncrease = 10; + + await test.step( 'Update products with the "Sale > Increase existing sale price" option', async () => { + await page.goto( `wp-admin/edit.php?post_type=product` ); + + await page.getByLabel( `Select ${ product.name }` ).click(); + + await page + .locator( '#bulk-action-selector-top' ) + .selectOption( 'Edit' ); + await page.locator( '#doaction' ).click(); + + await page + .locator( 'select[name="change_sale_price"]' ) + .selectOption( + 'Increase existing sale price by (fixed amount or %):' + ); + + await page + .getByPlaceholder( 'Enter sale price ($)' ) + .fill( `${ salePriceIncrease }%` ); + + await page.getByRole( 'button', { name: 'Update' } ).click(); + } ); + + await test.step( 'Verify products have a sale price', async () => { + await page.goto( `product/${ product.slug }` ); + + const expectedSalePrice = '$0.00'; + + await expect + .soft( + await page + .locator( 'ins' ) + .getByText( expectedSalePrice ) + .count() + ) + .toBeGreaterThan( 0 ); + } ); + } +); From e589fa87e1c685ce3a2b769b1031f5d4fe166fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Juh=C3=A9=20Lluveras?= Date: Fri, 30 Aug 2024 16:59:28 +0200 Subject: [PATCH 243/318] CYS: Mark several classes as internal (#51069) * CYS: Mark several classes as internal * Add changelog file --- plugins/woocommerce/changelog/fix-cys-internal-classes | 4 ++++ .../Admin/Features/OnboardingTasks/Tasks/CustomizeStore.php | 2 ++ plugins/woocommerce/src/Blocks/AI/Configuration.php | 2 ++ plugins/woocommerce/src/Blocks/AI/Connection.php | 2 ++ plugins/woocommerce/src/Blocks/AIContent/ContentProcessor.php | 2 ++ .../woocommerce/src/Blocks/AIContent/PatternsDictionary.php | 2 ++ plugins/woocommerce/src/Blocks/AIContent/PatternsHelper.php | 2 ++ plugins/woocommerce/src/Blocks/AIContent/UpdatePatterns.php | 2 ++ plugins/woocommerce/src/Blocks/AIContent/UpdateProducts.php | 2 ++ plugins/woocommerce/src/Blocks/Patterns/AIPatterns.php | 2 ++ plugins/woocommerce/src/Blocks/Patterns/PTKClient.php | 2 ++ plugins/woocommerce/src/Blocks/Patterns/PTKPatternsStore.php | 2 ++ plugins/woocommerce/src/Blocks/Patterns/PatternRegistry.php | 2 ++ 13 files changed, 28 insertions(+) create mode 100644 plugins/woocommerce/changelog/fix-cys-internal-classes diff --git a/plugins/woocommerce/changelog/fix-cys-internal-classes b/plugins/woocommerce/changelog/fix-cys-internal-classes new file mode 100644 index 00000000000..0bbe2f28b7d --- /dev/null +++ b/plugins/woocommerce/changelog/fix-cys-internal-classes @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Mark several Customize Your Store PHP classes as internal diff --git a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/CustomizeStore.php b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/CustomizeStore.php index fe6a2f28b7a..91fc334318f 100644 --- a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/CustomizeStore.php +++ b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/CustomizeStore.php @@ -7,6 +7,8 @@ use WP_Post; /** * Customize Your Store Task + * + * @internal */ class CustomizeStore extends Task { /** diff --git a/plugins/woocommerce/src/Blocks/AI/Configuration.php b/plugins/woocommerce/src/Blocks/AI/Configuration.php index cd60cdd7f25..426a672db06 100644 --- a/plugins/woocommerce/src/Blocks/AI/Configuration.php +++ b/plugins/woocommerce/src/Blocks/AI/Configuration.php @@ -8,6 +8,8 @@ use Automattic\Jetpack\Connection\Utils; /** * Class Configuration + * + * @internal */ class Configuration { diff --git a/plugins/woocommerce/src/Blocks/AI/Connection.php b/plugins/woocommerce/src/Blocks/AI/Connection.php index cedd08b8cd2..0a20ddf10f8 100644 --- a/plugins/woocommerce/src/Blocks/AI/Connection.php +++ b/plugins/woocommerce/src/Blocks/AI/Connection.php @@ -10,6 +10,8 @@ use WpOrg\Requests\Requests; /** * Class Connection + * + * @internal */ class Connection { const TEXT_COMPLETION_API_URL = 'https://public-api.wordpress.com/wpcom/v2/text-completion'; diff --git a/plugins/woocommerce/src/Blocks/AIContent/ContentProcessor.php b/plugins/woocommerce/src/Blocks/AIContent/ContentProcessor.php index 55b202c0e3c..1f34077fb26 100644 --- a/plugins/woocommerce/src/Blocks/AIContent/ContentProcessor.php +++ b/plugins/woocommerce/src/Blocks/AIContent/ContentProcessor.php @@ -10,6 +10,8 @@ use WP_Error; * ContentProcessor class. * * Process images for content + * + * @internal */ class ContentProcessor { diff --git a/plugins/woocommerce/src/Blocks/AIContent/PatternsDictionary.php b/plugins/woocommerce/src/Blocks/AIContent/PatternsDictionary.php index cb87c48b8ea..9a881e47787 100644 --- a/plugins/woocommerce/src/Blocks/AIContent/PatternsDictionary.php +++ b/plugins/woocommerce/src/Blocks/AIContent/PatternsDictionary.php @@ -5,6 +5,8 @@ namespace Automattic\WooCommerce\Blocks\AIContent; /** * Patterns Dictionary class. + * + * @internal */ class PatternsDictionary { /** diff --git a/plugins/woocommerce/src/Blocks/AIContent/PatternsHelper.php b/plugins/woocommerce/src/Blocks/AIContent/PatternsHelper.php index d6eceadb97e..560d7ec831b 100644 --- a/plugins/woocommerce/src/Blocks/AIContent/PatternsHelper.php +++ b/plugins/woocommerce/src/Blocks/AIContent/PatternsHelper.php @@ -6,6 +6,8 @@ use WP_Error; /** * Patterns Helper class. + * + * @internal */ class PatternsHelper { /** diff --git a/plugins/woocommerce/src/Blocks/AIContent/UpdatePatterns.php b/plugins/woocommerce/src/Blocks/AIContent/UpdatePatterns.php index d9e792e85eb..d2e0228ca5f 100644 --- a/plugins/woocommerce/src/Blocks/AIContent/UpdatePatterns.php +++ b/plugins/woocommerce/src/Blocks/AIContent/UpdatePatterns.php @@ -7,6 +7,8 @@ use WP_Error; /** * Pattern Images class. + * + * @internal */ class UpdatePatterns { diff --git a/plugins/woocommerce/src/Blocks/AIContent/UpdateProducts.php b/plugins/woocommerce/src/Blocks/AIContent/UpdateProducts.php index 20e0549f8e3..571cb08029e 100644 --- a/plugins/woocommerce/src/Blocks/AIContent/UpdateProducts.php +++ b/plugins/woocommerce/src/Blocks/AIContent/UpdateProducts.php @@ -6,6 +6,8 @@ use Automattic\WooCommerce\Blocks\AI\Connection; use WP_Error; /** * Pattern Images class. + * + * @internal */ class UpdateProducts { diff --git a/plugins/woocommerce/src/Blocks/Patterns/AIPatterns.php b/plugins/woocommerce/src/Blocks/Patterns/AIPatterns.php index 8bcf093fd1f..6982fad05a7 100644 --- a/plugins/woocommerce/src/Blocks/Patterns/AIPatterns.php +++ b/plugins/woocommerce/src/Blocks/Patterns/AIPatterns.php @@ -8,6 +8,8 @@ use Automattic\WooCommerce\Blocks\Images\Pexels; /** * AIPatterns class. + * + * @internal */ class AIPatterns { const PATTERNS_AI_DATA_POST_TYPE = 'patterns_ai_data'; diff --git a/plugins/woocommerce/src/Blocks/Patterns/PTKClient.php b/plugins/woocommerce/src/Blocks/Patterns/PTKClient.php index e319c22ffed..2b86b3c857c 100644 --- a/plugins/woocommerce/src/Blocks/Patterns/PTKClient.php +++ b/plugins/woocommerce/src/Blocks/Patterns/PTKClient.php @@ -5,6 +5,8 @@ use WP_Error; /** * PatternsToolkit class. + * + * @internal */ class PTKClient { /** diff --git a/plugins/woocommerce/src/Blocks/Patterns/PTKPatternsStore.php b/plugins/woocommerce/src/Blocks/Patterns/PTKPatternsStore.php index 2b24e1a9657..1ce873b39f8 100644 --- a/plugins/woocommerce/src/Blocks/Patterns/PTKPatternsStore.php +++ b/plugins/woocommerce/src/Blocks/Patterns/PTKPatternsStore.php @@ -7,6 +7,8 @@ use WP_Upgrader; /** * PTKPatterns class. + * + * @internal */ class PTKPatternsStore { const TRANSIENT_NAME = 'ptk_patterns'; diff --git a/plugins/woocommerce/src/Blocks/Patterns/PatternRegistry.php b/plugins/woocommerce/src/Blocks/Patterns/PatternRegistry.php index 9a79a95cc5b..3af03be5200 100644 --- a/plugins/woocommerce/src/Blocks/Patterns/PatternRegistry.php +++ b/plugins/woocommerce/src/Blocks/Patterns/PatternRegistry.php @@ -5,6 +5,8 @@ use Automattic\WooCommerce\Admin\Features\Features; /** * PatternRegistry class. + * + * @internal */ class PatternRegistry { const SLUG_REGEX = '/^[A-z0-9\/_-]+$/'; From 2890e16c86eff1b8c70c64fbd6547a78a6dfc281 Mon Sep 17 00:00:00 2001 From: louwie17 Date: Fri, 30 Aug 2024 18:27:10 +0200 Subject: [PATCH 244/318] Add product data views list to experimental product data views page (#51008) * Add products data views list * Add navigation on the left * Update edit site package * Fix styling * Add changelog * Add wp/icons package to syncpack exception list * Delete some unused stuff and address types * Add changelog * Remove un needed css * Remove dependency on edit-site package * Fix custom status filters * Make sure page size works with view config * Remove use of canvasMode and navigation context as it is not needed * Remove wordpress/dom from syncpack --- .syncpackrc | 4 +- .../changelog/add-product_data_views_list | 4 + packages/js/product-editor/package.json | 3 +- .../src/products-app/constants.ts | 8 + .../product-editor/src/products-app/index.tsx | 6 +- .../src/products-app/layout.tsx | 118 ++ .../src/products-app/product-list/index.tsx | 343 +++++ .../src/products-app/router.tsx | 68 + .../sidebar-dataviews/dataview-item.tsx | 110 ++ .../sidebar-dataviews/default-views.ts | 179 +++ .../products-app/sidebar-dataviews/index.tsx | 55 + .../products-app/sidebar-dataviews/style.scss | 19 + .../sidebar-navigation-item/index.tsx | 88 ++ .../sidebar-navigation-screen/index.tsx | 136 ++ .../sidebar-button.tsx | 18 + .../src/products-app/sidebar/index.tsx | 31 + .../src/products-app/site-hub/index.tsx | 114 ++ .../src/products-app/site-hub/site-icon.tsx | 56 + packages/js/product-editor/src/products.scss | 7 +- packages/js/product-editor/typings/index.d.ts | 22 + plugins/woocommerce-admin/webpack.config.js | 6 + .../changelog/add-product_data_views_list | 4 + pnpm-lock.yaml | 1242 ++++++++--------- 23 files changed, 1988 insertions(+), 653 deletions(-) create mode 100644 packages/js/product-editor/changelog/add-product_data_views_list create mode 100644 packages/js/product-editor/src/products-app/constants.ts create mode 100644 packages/js/product-editor/src/products-app/layout.tsx create mode 100644 packages/js/product-editor/src/products-app/product-list/index.tsx create mode 100644 packages/js/product-editor/src/products-app/router.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar-dataviews/dataview-item.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar-dataviews/default-views.ts create mode 100644 packages/js/product-editor/src/products-app/sidebar-dataviews/index.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar-dataviews/style.scss create mode 100644 packages/js/product-editor/src/products-app/sidebar-navigation-item/index.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar-navigation-screen/index.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar-navigation-screen/sidebar-button.tsx create mode 100644 packages/js/product-editor/src/products-app/sidebar/index.tsx create mode 100644 packages/js/product-editor/src/products-app/site-hub/index.tsx create mode 100644 packages/js/product-editor/src/products-app/site-hub/site-icon.tsx create mode 100644 plugins/woocommerce/changelog/add-product_data_views_list diff --git a/.syncpackrc b/.syncpackrc index 7a4664d5842..ce95ab63970 100644 --- a/.syncpackrc +++ b/.syncpackrc @@ -201,7 +201,9 @@ "@wordpress/interface", "@wordpress/router", "@wordpress/edit-site", - "@wordpress/private-apis" + "@wordpress/private-apis", + "@wordpress/dataviews", + "@wordpress/icons" ], "packages": [ "@woocommerce/block-templates", diff --git a/packages/js/product-editor/changelog/add-product_data_views_list b/packages/js/product-editor/changelog/add-product_data_views_list new file mode 100644 index 00000000000..548ca3eb055 --- /dev/null +++ b/packages/js/product-editor/changelog/add-product_data_views_list @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add sidebar and dataviews list to the experimental dataviews products page. diff --git a/packages/js/product-editor/package.json b/packages/js/product-editor/package.json index ba2ec86f116..52ec6eacb88 100644 --- a/packages/js/product-editor/package.json +++ b/packages/js/product-editor/package.json @@ -56,6 +56,7 @@ "@wordpress/compose": "wp-6.0", "@wordpress/core-data": "wp-6.0", "@wordpress/data": "wp-6.0", + "@wordpress/dataviews": "^4.2.0", "@wordpress/date": "wp-6.0", "@wordpress/deprecated": "wp-6.0", "@wordpress/edit-post": "wp-6.0", @@ -64,7 +65,7 @@ "@wordpress/hooks": "wp-6.0", "@wordpress/html-entities": "wp-6.0", "@wordpress/i18n": "wp-6.0", - "@wordpress/icons": "wp-6.0", + "@wordpress/icons": "10.6.0", "@wordpress/interface": "wp-6.0", "@wordpress/keyboard-shortcuts": "wp-6.0", "@wordpress/keycodes": "wp-6.0", diff --git a/packages/js/product-editor/src/products-app/constants.ts b/packages/js/product-editor/src/products-app/constants.ts new file mode 100644 index 00000000000..8c2b1b338f9 --- /dev/null +++ b/packages/js/product-editor/src/products-app/constants.ts @@ -0,0 +1,8 @@ +export const LAYOUT_GRID = 'grid'; +export const LAYOUT_TABLE = 'table'; +export const LAYOUT_LIST = 'list'; + +export const OPERATOR_IS = 'is'; +export const OPERATOR_IS_NOT = 'isNot'; +export const OPERATOR_IS_ANY = 'isAny'; +export const OPERATOR_IS_NONE = 'isNone'; diff --git a/packages/js/product-editor/src/products-app/index.tsx b/packages/js/product-editor/src/products-app/index.tsx index 69bef7fb2af..44c15e41dfa 100644 --- a/packages/js/product-editor/src/products-app/index.tsx +++ b/packages/js/product-editor/src/products-app/index.tsx @@ -13,12 +13,16 @@ import { * Internal dependencies */ import { unlock } from '../lock-unlock'; +import useLayoutAreas from './router'; +import { Layout } from './layout'; const { RouterProvider } = unlock( routerPrivateApis ); const { GlobalStylesProvider } = unlock( editorPrivateApis ); function ProductsLayout() { - return
Initial Products Layout
; + // This ensures the edited entity id and type are initialized properly. + const route = useLayoutAreas(); + return ; } export function ProductsApp() { diff --git a/packages/js/product-editor/src/products-app/layout.tsx b/packages/js/product-editor/src/products-app/layout.tsx new file mode 100644 index 00000000000..fe084ebf646 --- /dev/null +++ b/packages/js/product-editor/src/products-app/layout.tsx @@ -0,0 +1,118 @@ +/** + * External dependencies + */ +import { createElement, Fragment, useRef } from '@wordpress/element'; +import { + useViewportMatch, + useResizeObserver, + useReducedMotion, +} from '@wordpress/compose'; +import { __ } from '@wordpress/i18n'; +import { + // @ts-expect-error missing type. + EditorSnackbars, + // @ts-expect-error missing type. + privateApis as editorPrivateApis, +} from '@wordpress/editor'; +// eslint-disable-next-line @woocommerce/dependency-group +import { + // @ts-expect-error missing type. + __unstableMotion as motion, + // @ts-expect-error missing type. + __unstableAnimatePresence as AnimatePresence, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import SidebarContent from './sidebar'; +import SiteHub from './site-hub'; +import { Route } from './router'; +import { unlock } from '../lock-unlock'; + +const { NavigableRegion } = unlock( editorPrivateApis ); + +const ANIMATION_DURATION = 0.3; + +type LayoutProps = { + route: Route; +}; + +export function Layout( { route }: LayoutProps ) { + const [ fullResizer ] = useResizeObserver(); + const toggleRef = useRef< HTMLAnchorElement >( null ); + const isMobileViewport = useViewportMatch( 'medium', '<' ); + const disableMotion = useReducedMotion(); + + const { key: routeKey, areas, widths } = route; + + return ( + <> + { fullResizer } +
+
+ { /* + The NavigableRegion must always be rendered and not use + `inert` otherwise `useNavigateRegions` will fail. + */ } + { ( ! isMobileViewport || ! areas.mobile ) && ( + + + + + + { areas.sidebar } + + + + + ) } + + + + { ! isMobileViewport && areas.content && ( +
+ { areas.content } +
+ ) } + + { ! isMobileViewport && areas.edit && ( +
+ { areas.edit } +
+ ) } +
+
+ + ); +} diff --git a/packages/js/product-editor/src/products-app/product-list/index.tsx b/packages/js/product-editor/src/products-app/product-list/index.tsx new file mode 100644 index 00000000000..6a0988b2448 --- /dev/null +++ b/packages/js/product-editor/src/products-app/product-list/index.tsx @@ -0,0 +1,343 @@ +/** + * External dependencies + */ +import { Action, DataViews, View } from '@wordpress/dataviews'; +import { + createElement, + useState, + useMemo, + useCallback, + useEffect, +} from '@wordpress/element'; +import { Product, ProductQuery } from '@woocommerce/data'; +import { drawerRight } from '@wordpress/icons'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; +import { __ } from '@wordpress/i18n'; +import { useSelect } from '@wordpress/data'; +import classNames from 'classnames'; +import { + // @ts-expect-error missing types. + __experimentalHeading as Heading, + // @ts-expect-error missing types. + __experimentalText as Text, + // @ts-expect-error missing types. + __experimentalHStack as HStack, + // @ts-expect-error missing types. + __experimentalVStack as VStack, + FlexItem, + Button, +} from '@wordpress/components'; +// @ts-expect-error missing type. +// eslint-disable-next-line @woocommerce/dependency-group +import { privateApis as editorPrivateApis } from '@wordpress/editor'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; +import { + useDefaultViews, + defaultLayouts, +} from '../sidebar-dataviews/default-views'; +import { LAYOUT_LIST, OPERATOR_IS } from '../constants'; + +const { NavigableRegion } = unlock( editorPrivateApis ); +const { useHistory, useLocation } = unlock( routerPrivateApis ); + +const STATUSES = [ + { value: 'draft', label: __( 'Draft', 'woocommerce' ) }, + { value: 'future', label: __( 'Scheduled', 'woocommerce' ) }, + { value: 'private', label: __( 'Private', 'woocommerce' ) }, + { value: 'publish', label: __( 'Published', 'woocommerce' ) }, + { value: 'trash', label: __( 'Trash', 'woocommerce' ) }, +]; + +/** + * TODO: auto convert some of the product editor blocks ( from the blocks directory ) to this format. + * The edit function should work relatively well with the edit from the blocks, the only difference is that the blocks rely on getEntityProp to get the value + */ +const fields = [ + { + id: 'name', + label: __( 'Name', 'woocommerce' ), + enableHiding: false, + type: 'text', + render: function nameRender( { item }: { item: Product } ) { + return item.name; + }, + }, + { + id: 'sku', + label: __( 'SKU', 'woocommerce' ), + enableHiding: false, + enableSorting: false, + render: ( { item }: { item: Product } ) => { + return item.sku; + }, + }, + { + id: 'date', + label: __( 'Date', 'woocommerce' ), + render: ( { item }: { item: Product } ) => { + return ; + }, + }, + { + label: __( 'Status', 'woocommerce' ), + id: 'status', + getValue: ( { item }: { item: Product } ) => + STATUSES.find( ( { value } ) => value === item.status )?.label ?? + item.status, + elements: STATUSES, + filterBy: { + operators: [ OPERATOR_IS ], + }, + enableSorting: false, + }, +]; + +export type ProductListProps = { + subTitle?: string; + className?: string; + hideTitleFromUI?: boolean; + postType?: string; +}; + +const PAGE_SIZE = 25; +const EMPTY_ARRAY: Product[] = []; +const EMPTY_ACTIONS_ARRAY: Action< Product >[] = []; + +const getDefaultView = ( + defaultViews: Array< { slug: string; view: View } >, + activeView: string +) => { + return defaultViews.find( ( { slug } ) => slug === activeView )?.view; +}; + +/** + * This function abstracts working with default & custom views by + * providing a [ state, setState ] tuple based on the URL parameters. + * + * Consumers use the provided tuple to work with state + * and don't have to deal with the specifics of default & custom views. + * + * @param {string} postType Post type to retrieve default views for. + * @return {Array} The [ state, setState ] tuple. + */ +function useView( + postType: string +): [ View, ( view: View ) => void, ( view: View ) => void ] { + const { + params: { activeView = 'all', isCustom = 'false', layout }, + } = useLocation(); + const history = useHistory(); + + const defaultViews = useDefaultViews( { postType } ); + const [ view, setView ] = useState< View >( () => { + const initialView = getDefaultView( defaultViews, activeView ) ?? { + type: layout ?? LAYOUT_LIST, + }; + + const type = layout ?? initialView.type; + return { + ...initialView, + type, + }; + } ); + + const setViewWithUrlUpdate = useCallback( + ( newView: View ) => { + const { params } = history.getLocationWithParams(); + + if ( newView.type === LAYOUT_LIST && ! params?.layout ) { + // Skip updating the layout URL param if + // it is not present and the newView.type is LAYOUT_LIST. + } else if ( newView.type !== params?.layout ) { + history.push( { + ...params, + layout: newView.type, + } ); + } + + setView( newView ); + }, + [ history, isCustom ] + ); + + // When layout URL param changes, update the view type + // without affecting any other config. + useEffect( () => { + setView( ( prevView ) => ( { + ...prevView, + type: layout ?? LAYOUT_LIST, + } ) ); + }, [ layout ] ); + + // When activeView or isCustom URL parameters change, reset the view. + useEffect( () => { + const newView = getDefaultView( defaultViews, activeView ); + + if ( newView ) { + const type = layout ?? newView.type; + setView( { + ...newView, + type, + } ); + } + }, [ activeView, isCustom, layout, defaultViews ] ); + + return [ view, setViewWithUrlUpdate, setViewWithUrlUpdate ]; +} + +function getItemId( item: Product ) { + return item.id.toString(); +} + +export default function ProductList( { + subTitle, + className, + hideTitleFromUI = false, +}: ProductListProps ) { + const history = useHistory(); + const location = useLocation(); + const { + postId, + quickEdit = false, + postType = 'product', + isCustom, + activeView = 'all', + } = location.params; + const [ selection, setSelection ] = useState( [ postId ] ); + const [ view, setView ] = useView( postType ); + + const queryParams = useMemo( () => { + const filters: Partial< ProductQuery > = {}; + view.filters?.forEach( ( filter ) => { + if ( filter.field === 'status' ) { + filters.status = Array.isArray( filter.value ) + ? filter.value.join( ',' ) + : filter.value; + } + } ); + const orderby = + view.sort?.field === 'name' ? 'title' : view.sort?.field; + + return { + per_page: view.perPage, + page: view.page, + order: view.sort?.direction, + orderby, + search: view.search, + ...filters, + }; + }, [ location.params, view ] ); + + const onChangeSelection = useCallback( + ( items ) => { + setSelection( items ); + history.push( { + ...location.params, + postId: items.join( ',' ), + } ); + }, + [ history, location.params, view?.type ] + ); + + // TODO: Use the Woo data store to get all the products, as this doesn't contain all the product data. + const { records, totalCount, isLoading } = useSelect( + ( select ) => { + const { getProducts, getProductsTotalCount, isResolving } = + select( 'wc/admin/products' ); + return { + records: getProducts( queryParams ) as Product[], + totalCount: getProductsTotalCount( queryParams ) as number, + isLoading: isResolving( 'getProducts', [ queryParams ] ), + }; + }, + [ queryParams ] + ); + + const paginationInfo = useMemo( + () => ( { + totalItems: totalCount, + totalPages: Math.ceil( totalCount / ( view.perPage || PAGE_SIZE ) ), + } ), + [ totalCount, view.perPage ] + ); + + const classes = classNames( 'edit-site-page', className ); + + return ( + +
+ { ! hideTitleFromUI && ( + + + + { __( 'Products', 'woocommerce' ) } + + + { /* { actions } */ } + + + { subTitle && ( + + { subTitle } + + ) } + + ) } + { + history.push( { + ...location.params, + quickEdit: quickEdit ? undefined : true, + } ); + } } + /> + } + /> +
+
+ ); +} diff --git a/packages/js/product-editor/src/products-app/router.tsx b/packages/js/product-editor/src/products-app/router.tsx new file mode 100644 index 00000000000..3acbc510aba --- /dev/null +++ b/packages/js/product-editor/src/products-app/router.tsx @@ -0,0 +1,68 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; + +/** + * Internal dependencies + */ +import { unlock } from '../lock-unlock'; +import ProductList from './product-list'; +import DataViewsSidebarContent from './sidebar-dataviews'; +import SidebarNavigationScreen from './sidebar-navigation-screen'; + +const { useLocation } = unlock( routerPrivateApis ); + +export type Route = { + key: string; + areas: { + sidebar: React.JSX.Element | React.FunctionComponent; + content?: React.JSX.Element | React.FunctionComponent; + edit?: React.JSX.Element | React.FunctionComponent; + mobile?: React.JSX.Element | React.FunctionComponent | boolean; + preview?: boolean; + }; + widths?: { + content?: number; + edit?: number; + sidebar?: number; + }; +}; + +export default function useLayoutAreas() { + const { params = {} } = useLocation(); + const { postType = 'product', layout = 'table', canvas } = params; + // Products list. + if ( [ 'product' ].includes( postType ) ) { + const isListLayout = layout === 'list' || ! layout; + return { + key: 'products-list', + areas: { + sidebar: ( + } + /> + ), + content: , + preview: false, + mobile: , + }, + widths: { + content: isListLayout ? 380 : undefined, + }, + }; + } + + // Fallback shows the home page preview + return { + key: 'default', + areas: { + sidebar: () => null, + preview: false, + mobile: canvas === 'edit', + }, + }; +} diff --git a/packages/js/product-editor/src/products-app/sidebar-dataviews/dataview-item.tsx b/packages/js/product-editor/src/products-app/sidebar-dataviews/dataview-item.tsx new file mode 100644 index 00000000000..03a4f8cee85 --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-dataviews/dataview-item.tsx @@ -0,0 +1,110 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; +import classNames from 'classnames'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; +import { addQueryArgs, getQueryArgs, removeQueryArgs } from '@wordpress/url'; +import { VIEW_LAYOUTS } from '@wordpress/dataviews'; +// @ts-expect-error missing type. +// eslint-disable-next-line @woocommerce/dependency-group +import { __experimentalHStack as HStack } from '@wordpress/components'; + +/** + * Internal dependencies + */ +import SidebarNavigationItem from '../sidebar-navigation-item'; +import { unlock } from '../../lock-unlock'; + +const { useHistory, useLocation } = unlock( routerPrivateApis ); + +type DataViewItemProps = { + title: string; + slug: string; + customViewId?: string; + type: string; + icon: React.JSX.Element; + isActive: boolean; + isCustom: boolean; + suffix?: string; +}; + +function useLink( + params: Record< string, string | undefined >, + state?: Record< string, string | undefined >, + shouldReplace = false +) { + const history = useHistory(); + function onClick( event: Event ) { + event?.preventDefault(); + + if ( shouldReplace ) { + history.replace( params, state ); + } else { + history.push( params, state ); + } + } + + const currentArgs = getQueryArgs( window.location.href ); + const currentUrlWithoutArgs = removeQueryArgs( + window.location.href, + ...Object.keys( currentArgs ) + ); + + const newUrl = addQueryArgs( currentUrlWithoutArgs, params ); + + return { + href: newUrl, + onClick, + }; +} + +export default function DataViewItem( { + title, + slug, + customViewId, + type, + icon, + isActive, + isCustom, + suffix, +}: DataViewItemProps ) { + const { + params: { postType, page }, + } = useLocation(); + + const iconToUse = + icon || VIEW_LAYOUTS.find( ( v ) => v.type === type )?.icon; + + let activeView: undefined | string = isCustom ? customViewId : slug; + if ( activeView === 'all' ) { + activeView = undefined; + } + const linkInfo = useLink( { + page, + postType, + layout: type, + activeView, + isCustom: isCustom ? 'true' : undefined, + } ); + return ( + + + { title } + + { suffix } + + ); +} diff --git a/packages/js/product-editor/src/products-app/sidebar-dataviews/default-views.ts b/packages/js/product-editor/src/products-app/sidebar-dataviews/default-views.ts new file mode 100644 index 00000000000..816477363f3 --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-dataviews/default-views.ts @@ -0,0 +1,179 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { useSelect } from '@wordpress/data'; +import { store as coreStore } from '@wordpress/core-data'; +import { useMemo } from '@wordpress/element'; +import { + trash, + pages, + drafts, + published, + scheduled, + notAllowed, +} from '@wordpress/icons'; +import type { ColumnStyle, ViewTable } from '@wordpress/dataviews'; + +/** + * Internal dependencies + */ +import { + LAYOUT_LIST, + LAYOUT_TABLE, + LAYOUT_GRID, + OPERATOR_IS, +} from '../constants'; + +export const defaultLayouts: Record< + string, + { + layout: { + primaryField: string; + mediaField?: string; + styles?: Record< string, ColumnStyle >; + }; + } +> = { + [ LAYOUT_TABLE ]: { + layout: { + primaryField: 'name', + styles: { + name: { + maxWidth: 300, + }, + }, + }, + }, + [ LAYOUT_GRID ]: { + layout: { + mediaField: 'featured-image', + primaryField: 'name', + }, + }, + [ LAYOUT_LIST ]: { + layout: { + primaryField: 'name', + mediaField: 'featured-image', + }, + }, +}; + +const DEFAULT_POST_BASE: Omit< ViewTable, 'view' | 'title' | 'slug' | 'icon' > = + { + type: LAYOUT_TABLE, + search: '', + filters: [], + page: 1, + perPage: 20, + sort: { + field: 'date', + direction: 'desc', + }, + fields: [ 'name', 'sku', 'status', 'date' ], + layout: defaultLayouts[ LAYOUT_LIST ].layout, + }; + +export function useDefaultViews( { postType }: { postType: string } ): Array< { + title: string; + slug: string; + icon: React.JSX.Element; + view: ViewTable; +} > { + const labels = useSelect( + ( select ) => { + const { getPostType } = select( coreStore ); + const postTypeData: { labels?: Record< string, string > } = + getPostType( postType ); + return postTypeData?.labels; + }, + [ postType ] + ); + return useMemo( () => { + return [ + { + title: labels?.all_items || __( 'All items', 'woocommerce' ), + slug: 'all', + icon: pages, + view: { ...DEFAULT_POST_BASE }, + }, + { + title: __( 'Published', 'woocommerce' ), + slug: 'published', + icon: published, + view: { + ...DEFAULT_POST_BASE, + filters: [ + { + field: 'status', + operator: OPERATOR_IS, + value: 'publish', + }, + ], + }, + }, + { + title: __( 'Scheduled', 'woocommerce' ), + slug: 'future', + icon: scheduled, + view: { + ...DEFAULT_POST_BASE, + filters: [ + { + field: 'status', + operator: OPERATOR_IS, + value: 'future', + }, + ], + }, + }, + { + title: __( 'Drafts', 'woocommerce' ), + slug: 'drafts', + icon: drafts, + view: { + ...DEFAULT_POST_BASE, + filters: [ + { + field: 'status', + operator: OPERATOR_IS, + value: 'draft', + }, + ], + }, + }, + { + title: __( 'Private', 'woocommerce' ), + slug: 'private', + icon: notAllowed, + view: { + ...DEFAULT_POST_BASE, + filters: [ + { + field: 'status', + operator: OPERATOR_IS, + value: 'private', + }, + ], + }, + }, + { + title: __( 'Trash', 'woocommerce' ), + slug: 'trash', + icon: trash, + view: { + ...DEFAULT_POST_BASE, + type: LAYOUT_TABLE, + layout: defaultLayouts[ LAYOUT_TABLE ].layout, + filters: [ + { + field: 'status', + operator: OPERATOR_IS, + value: 'trash', + }, + ], + }, + }, + ]; + }, [ labels ] ); +} diff --git a/packages/js/product-editor/src/products-app/sidebar-dataviews/index.tsx b/packages/js/product-editor/src/products-app/sidebar-dataviews/index.tsx new file mode 100644 index 00000000000..245675bfcf3 --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-dataviews/index.tsx @@ -0,0 +1,55 @@ +/** + * External dependencies + */ +import { createElement, Fragment } from '@wordpress/element'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; +// @ts-expect-error missing type. +// eslint-disable-next-line @wordpress/no-unsafe-wp-apis, @woocommerce/dependency-group +import { __experimentalItemGroup as ItemGroup } from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; +import DataViewItem from './dataview-item'; +import { useDefaultViews } from './default-views'; + +const { useLocation } = unlock( routerPrivateApis ); + +export default function DataViewsSidebarContent() { + const { + params: { + postType = 'product', + activeView = 'all', + isCustom = 'false', + }, + } = useLocation(); + const defaultViews = useDefaultViews( { postType } ); + if ( ! postType ) { + return null; + } + const isCustomBoolean = isCustom === 'true'; + + return ( + <> + + { defaultViews.map( ( dataview ) => { + return ( + + ); + } ) } + + + ); +} diff --git a/packages/js/product-editor/src/products-app/sidebar-dataviews/style.scss b/packages/js/product-editor/src/products-app/sidebar-dataviews/style.scss new file mode 100644 index 00000000000..d3744634f6a --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-dataviews/style.scss @@ -0,0 +1,19 @@ +.edit-site-sidebar-navigation-screen__title-icon { + position: sticky; + top: 0; + background: $gray-900; + padding-top: $grid-unit-60; + margin-bottom: $grid-unit-10; + padding-bottom: $grid-unit-10; +} + +.edit-site-sidebar-button { + color: #e0e0e0; + flex-shrink: 0; +} + +.edit-site-sidebar-navigation-screen__title { + flex-grow: 1; + overflow-wrap: break-word; + padding: 2px 0 0 +} diff --git a/packages/js/product-editor/src/products-app/sidebar-navigation-item/index.tsx b/packages/js/product-editor/src/products-app/sidebar-navigation-item/index.tsx new file mode 100644 index 00000000000..57f8c23657c --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-navigation-item/index.tsx @@ -0,0 +1,88 @@ +/** + * External dependencies + */ +import { isRTL } from '@wordpress/i18n'; +import { chevronRightSmall, chevronLeftSmall, Icon } from '@wordpress/icons'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; +import classNames from 'classnames'; +import { createElement } from '@wordpress/element'; +import { + // @ts-expect-error missing type. + __experimentalItem as Item, + // @ts-expect-error missing type. + __experimentalHStack as HStack, + FlexBlock, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; + +const { useHistory } = unlock( routerPrivateApis ); + +type SidebarNavigationItemProps = { + className?: string; + icon?: React.JSX.Element; + suffix?: string; + withChevron?: boolean; + uid?: string; + params?: Record< string, string >; + onClick?: ( e: Event ) => void; + children: React.ReactNode; +}; + +export default function SidebarNavigationItem( { + className, + icon, + withChevron = false, + suffix, + uid, + params, + onClick, + children, + ...props +}: SidebarNavigationItemProps ) { + const history = useHistory(); + // If there is no custom click handler, create one that navigates to `params`. + function handleClick( e: Event ) { + if ( onClick ) { + onClick( e ); + } else if ( params ) { + e.preventDefault(); + history.push( params ); + } + } + + return ( + + + { icon && ( + + ) } + { children } + { withChevron && ( + + ) } + { ! withChevron && suffix } + + + ); +} diff --git a/packages/js/product-editor/src/products-app/sidebar-navigation-screen/index.tsx b/packages/js/product-editor/src/products-app/sidebar-navigation-screen/index.tsx new file mode 100644 index 00000000000..03a669c3ea2 --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-navigation-screen/index.tsx @@ -0,0 +1,136 @@ +/** + * External dependencies + */ + +import { isRTL, __ } from '@wordpress/i18n'; +import classNames from 'classnames'; +import { chevronRight, chevronLeft } from '@wordpress/icons'; +import { useSelect } from '@wordpress/data'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; +import { createElement, Fragment } from '@wordpress/element'; +import { + // @ts-expect-error missing type. + __experimentalHStack as HStack, + // @ts-expect-error missing type. + __experimentalHeading as Heading, + // @ts-expect-error missing type. + __experimentalVStack as VStack, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; +import SidebarButton from './sidebar-button'; + +const { useHistory, useLocation } = unlock( routerPrivateApis ); + +type SidebarNavigationScreenProps = { + isRoot?: boolean; + title: string; + actions?: React.JSX.Element; + meta?: string; + content: React.JSX.Element; + footer?: string; + description?: string; + backPath?: string; +}; + +export default function SidebarNavigationScreen( { + isRoot, + title, + actions, + meta, + content, + footer, + description, + backPath: backPathProp, +}: SidebarNavigationScreenProps ) { + const { dashboardLink, dashboardLinkText } = useSelect( ( select ) => { + const { getSettings } = unlock( select( 'core/edit-site' ) ); + return { + dashboardLink: getSettings().__experimentalDashboardLink, + dashboardLinkText: getSettings().__experimentalDashboardLinkText, + }; + }, [] ); + const location = useLocation(); + const history = useHistory(); + const backPath = backPathProp ?? location.state?.backPath; + const icon = isRTL() ? chevronRight : chevronLeft; + + return ( + <> + + + { ! isRoot && ( + { + history.push( backPath ); + } } + icon={ icon } + label={ __( 'Back', 'woocommerce' ) } + showTooltip={ false } + /> + ) } + { isRoot && ( + + ) } + + { title } + + { actions && ( +
+ { actions } +
+ ) } +
+ { meta && ( + <> +
+ { meta } +
+ + ) } + +
+ { description && ( +

+ { description } +

+ ) } + { content } +
+
+ { footer && ( +
+ { footer } +
+ ) } + + ); +} diff --git a/packages/js/product-editor/src/products-app/sidebar-navigation-screen/sidebar-button.tsx b/packages/js/product-editor/src/products-app/sidebar-navigation-screen/sidebar-button.tsx new file mode 100644 index 00000000000..6033e202bf6 --- /dev/null +++ b/packages/js/product-editor/src/products-app/sidebar-navigation-screen/sidebar-button.tsx @@ -0,0 +1,18 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; +import { Button } from '@wordpress/components'; +import classNames from 'classnames'; + +export default function SidebarButton( props: Button.Props ) { + return ( + + + + +
+ +
+
+ + + ); + } + ) +); + +export default SiteHub; diff --git a/packages/js/product-editor/src/products-app/site-hub/site-icon.tsx b/packages/js/product-editor/src/products-app/site-hub/site-icon.tsx new file mode 100644 index 00000000000..754dd6e39fc --- /dev/null +++ b/packages/js/product-editor/src/products-app/site-hub/site-icon.tsx @@ -0,0 +1,56 @@ +/** + * External dependencies + */ +import { createElement } from '@wordpress/element'; +import { useSelect } from '@wordpress/data'; +import { Icon } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { wordpress } from '@wordpress/icons'; +import { store as coreDataStore } from '@wordpress/core-data'; +import classNames from 'classnames'; + +type SiteIconProps = { + className: string; +}; + +function SiteIcon( { className }: SiteIconProps ) { + const { isRequestingSite, siteIconUrl } = useSelect( ( select ) => { + const { getEntityRecord } = select( coreDataStore ); + const siteData: { site_icon_url?: string } = getEntityRecord( + 'root', + '__unstableBase', + undefined + ); + + return { + isRequestingSite: ! siteData, + siteIconUrl: siteData?.site_icon_url, + }; + }, [] ); + + if ( isRequestingSite && ! siteIconUrl ) { + return
; + } + + const icon = siteIconUrl ? ( + { + ) : ( + + ); + + return ( +
+ { icon } +
+ ); +} + +export default SiteIcon; diff --git a/packages/js/product-editor/src/products.scss b/packages/js/product-editor/src/products.scss index 9a1199c1c33..7aaa6b290a4 100644 --- a/packages/js/product-editor/src/products.scss +++ b/packages/js/product-editor/src/products.scss @@ -4,11 +4,12 @@ .woocommerce_page_woocommerce-products-dashboard #adminmenumain { display: none; } + .woocommerce_page_woocommerce-products-dashboard #wpcontent { margin-left: 0; } -body.woocommerce_page_woocommerce-products-dashboard - #woocommerce-products-dashboard { + +body.woocommerce_page_woocommerce-products-dashboard #woocommerce-products-dashboard { @include wp-admin-reset("#woocommerce-products-dashboard"); @include reset; display: block !important; @@ -38,3 +39,5 @@ body.js.is-fullscreen-mode { } } } + +@import "products-app/sidebar-dataviews/style.scss"; diff --git a/packages/js/product-editor/typings/index.d.ts b/packages/js/product-editor/typings/index.d.ts index 92aeddf3d87..1fb7d394b5b 100644 --- a/packages/js/product-editor/typings/index.d.ts +++ b/packages/js/product-editor/typings/index.d.ts @@ -31,6 +31,7 @@ declare module '@wordpress/core-data' { isResolving: boolean; hasResolved: boolean; }; + const store: string; } declare module '@wordpress/keyboard-shortcuts' { function useShortcut( @@ -43,3 +44,24 @@ declare module '@wordpress/keyboard-shortcuts' { declare module '@wordpress/router' { const privateApis; } + +declare module '@wordpress/edit-site/build-module/components/sync-state-with-url/use-init-edited-entity-from-url' { + export default function useInitEditedEntityFromURL(): void; +} + +declare module '@wordpress/edit-site/build-module/components/sidebar-navigation-screen' { + const SidebarNavigationScreen: React.FunctionComponent< { + title: string; + isRoot: boolean; + content: JSX.Element; + } >; + export default SidebarNavigationScreen; +} + +declare module '@wordpress/edit-site/build-module/components/site-hub' { + const SiteHub: React.FunctionComponent< { + ref: React.Ref; + isTransparent: boolean; + } >; + export default SiteHub; +} diff --git a/plugins/woocommerce-admin/webpack.config.js b/plugins/woocommerce-admin/webpack.config.js index cadd1251831..469d48e3f3a 100644 --- a/plugins/woocommerce-admin/webpack.config.js +++ b/plugins/woocommerce-admin/webpack.config.js @@ -186,6 +186,8 @@ const webpackConfig = { extensions: [ '.json', '.js', '.jsx', '.ts', '.tsx' ], alias: { '~': path.resolve( __dirname + '/client' ), + 'react/jsx-dev-runtime': require.resolve( 'react/jsx-dev-runtime' ), + 'react/jsx-runtime': require.resolve( 'react/jsx-runtime' ), }, }, plugins: [ @@ -240,6 +242,10 @@ const webpackConfig = { return null; } + if ( request.startsWith( '@wordpress/dataviews' ) ) { + return null; + } + if ( request.startsWith( '@wordpress/edit-site' ) ) { // The external wp.editSite does not include edit-site components, so we need to skip requesting to external here. We can remove this once the edit-site components are exported in the external wp.editSite. // We use the edit-site components in the customize store. diff --git a/plugins/woocommerce/changelog/add-product_data_views_list b/plugins/woocommerce/changelog/add-product_data_views_list new file mode 100644 index 00000000000..7669d680be8 --- /dev/null +++ b/plugins/woocommerce/changelog/add-product_data_views_list @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Update webpack config to bundle in @wordpress/dataviews package. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db28d78d96a..ec49d327648 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -256,7 +256,7 @@ importers: version: 10.5.0(sass@1.69.5)(webpack@5.89.0(webpack-cli@3.3.12)) ts-jest: specifier: ~29.1.1 - version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -292,7 +292,7 @@ importers: version: 2.3.2 debug: specifier: ^4.3.4 - version: 4.3.4(supports-color@9.4.0) + version: 4.3.4(supports-color@8.1.1) dompurify: specifier: ^2.4.7 version: 2.4.7 @@ -453,7 +453,7 @@ importers: version: 27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)) ts-jest: specifier: ~29.1.1 - version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -2616,6 +2616,9 @@ importers: '@wordpress/data': specifier: wp-6.0 version: 6.6.1(react@17.0.2) + '@wordpress/dataviews': + specifier: ^4.2.0 + version: 4.2.0(@emotion/is-prop-valid@1.2.1)(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/date': specifier: wp-6.0 version: 4.6.1 @@ -2641,8 +2644,8 @@ importers: specifier: wp-6.0 version: 4.6.1 '@wordpress/icons': - specifier: wp-6.0 - version: 8.2.3 + specifier: 10.6.0 + version: 10.6.0(react@17.0.2) '@wordpress/interface': specifier: wp-6.0 version: 4.5.6(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2) @@ -2878,7 +2881,7 @@ importers: version: 5.0.5 ts-jest: specifier: ~29.1.1 - version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -2890,7 +2893,7 @@ importers: dependencies: debug: specifier: ^4.3.4 - version: 4.3.4(supports-color@9.4.0) + version: 4.3.4(supports-color@8.1.1) devDependencies: '@babel/core': specifier: ^7.23.5 @@ -2999,7 +3002,7 @@ importers: version: 1.2.5(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2) debug: specifier: ^4.3.4 - version: 4.3.4(supports-color@9.4.0) + version: 4.3.4(supports-color@8.1.1) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -3376,7 +3379,7 @@ importers: version: 3.34.0 debug: specifier: ^4.3.4 - version: 4.3.4(supports-color@9.4.0) + version: 4.3.4(supports-color@8.1.1) dompurify: specifier: ^2.4.7 version: 2.4.7 @@ -4666,7 +4669,7 @@ importers: version: 27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)) ts-jest: specifier: ~29.1.1 - version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3) @@ -4851,7 +4854,7 @@ importers: version: 1.2.2 ts-jest: specifier: ~29.1.1 - version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3) ts-loader: specifier: ^9.5.1 version: 9.5.1(typescript@5.3.3)(webpack@5.89.0(webpack-cli@3.3.12)) @@ -5105,23 +5108,23 @@ packages: '@ariakit/core@0.3.11': resolution: {integrity: sha512-+MnOeqnA4FLI/7vqsZLbZQHHN4ofd9kvkNjz44fNi0gqmD+ZbMWiDkFAvZII75dYnxYw5ZPpWjA4waK22VBWig==} - '@ariakit/core@0.3.8': - resolution: {integrity: sha512-LlSCwbyyozMX4ZEobpYGcv1LFqOdBTdTYPZw3lAVgLcFSNivsazi3NkKM9qNWNIu00MS+xTa0+RuIcuWAjlB2Q==} - '@ariakit/core@0.4.5': resolution: {integrity: sha512-e294+bEcyzt/H/kO4fS5/czLAlkF7PY+Kul3q2z54VY+GGay8NlVs9UezAB7L4jUBlYRAXwp7/1Sq3R7b+MZ7w==} + '@ariakit/core@0.4.9': + resolution: {integrity: sha512-nV0B/OTK/0iB+P9RC7fudznYZ8eR6rR1F912Zc54e3+wSW5RrRvNOiRxyMrgENidd4R7cCMDw77XJLSBLKgEPQ==} + '@ariakit/react-core@0.3.14': resolution: {integrity: sha512-16Qj6kDPglpdWtU5roY9q+G66naOjauTY5HvUIaL2aLY0187ATaRrABIKoMMzTtJyhvsud4jFlzivz+/zCQ8yw==} peerDependencies: react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@ariakit/react-core@0.3.9': - resolution: {integrity: sha512-K1Rcxr6FpF0n3L7Uvo+e5hm+zqoZmXLRcYF/skI+/j+ole+uNbnsnfGhG1avqJlklqH4bmkFkjZzmMdOnUC0Ig==} + '@ariakit/react-core@0.4.10': + resolution: {integrity: sha512-r6DZmtHBmSoOj848+RpBwdZy/55YxPhMhfH14JIO2OLn1F6iSFkQwR7AAGpIrlYycWJFSF7KrQu50O+SSfFJdQ==} peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 '@ariakit/react-core@0.4.5': resolution: {integrity: sha512-ciTYPwpj/+mdA+EstveEnoygbx5e4PXQJxfkLKy4lkTkDJJUS9GcbYhdnIFJVUta6P1YFvzkIKo+/y9mcbMKJg==} @@ -5135,11 +5138,11 @@ packages: react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@ariakit/react@0.3.9': - resolution: {integrity: sha512-gC+gibh2go8wvBqzYXavlHKwAfmee5GUMrPSQ9WBBLIfm9nQElujxcHJydaRx+ULR5FbOnbZVC3vU2ic8hSrNw==} + '@ariakit/react@0.4.10': + resolution: {integrity: sha512-c1+6sNLj57aAXrBZMCVGG+OXeFrPAG0TV1jT7oPJcN/KLRs3aCuO3CCJVep/eKepFzzK01kNRGYX3wPT1TXPNw==} peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 '@ariakit/react@0.4.5': resolution: {integrity: sha512-GUHxaOY1JZrJUHkuV20IY4NWcgknhqTQM0qCQcVZDCi+pJiWchUjTG+UyIr/Of02hU569qnQ7yovskCf+V3tNg==} @@ -6918,18 +6921,12 @@ packages: '@floating-ui/core@0.6.2': resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==} - '@floating-ui/core@0.7.3': - resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} - '@floating-ui/core@1.5.2': resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} '@floating-ui/dom@0.4.5': resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==} - '@floating-ui/dom@0.5.4': - resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} - '@floating-ui/dom@1.5.3': resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} @@ -6939,12 +6936,6 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react-dom@0.7.2': - resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - '@floating-ui/react-dom@1.3.0': resolution: {integrity: sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==} peerDependencies: @@ -7800,12 +7791,6 @@ packages: '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - '@radix-ui/react-arrow@1.0.2': - resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -7819,12 +7804,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.0.2': - resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-collection@1.0.3': resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -7872,11 +7851,6 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-direction@1.0.0': - resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-direction@1.0.1': resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -7892,12 +7866,6 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-dismissable-layer@1.0.3': - resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-dismissable-layer@1.0.4': resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: @@ -7911,12 +7879,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.0.4': - resolution: {integrity: sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-focus-guards@1.0.0': resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: @@ -7937,12 +7899,6 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-focus-scope@1.0.2': - resolution: {integrity: sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-focus-scope@1.0.3': resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: @@ -7970,18 +7926,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.0.4': - resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - - '@radix-ui/react-popper@1.1.1': - resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-popper@1.1.2': resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -8001,12 +7945,6 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-portal@1.0.2': - resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-portal@1.0.3': resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: @@ -8032,12 +7970,6 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-primitive@1.0.2': - resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-primitive@1.0.3': resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -8051,12 +7983,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.0.3': - resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-roving-focus@1.0.4': resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: @@ -8101,11 +8027,6 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-slot@1.0.1': - resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-slot@1.0.2': resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -8187,11 +8108,6 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-use-escape-keydown@1.0.2': - resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-use-escape-keydown@1.0.3': resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -8224,11 +8140,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-rect@1.0.0': - resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-use-rect@1.0.1': resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: @@ -8238,11 +8149,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-size@1.0.0': - resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - '@radix-ui/react-use-size@1.0.1': resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -8265,9 +8171,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/rect@1.0.0': - resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} - '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} @@ -10432,11 +10335,19 @@ packages: '@use-gesture/core@10.3.0': resolution: {integrity: sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A==} + '@use-gesture/core@10.3.1': + resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} + '@use-gesture/react@10.3.0': resolution: {integrity: sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA==} peerDependencies: react: '>= 16.8.0' + '@use-gesture/react@10.3.1': + resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==} + peerDependencies: + react: '>= 16.8.0' + '@webassemblyjs/ast@1.11.1': resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} @@ -10693,6 +10604,10 @@ packages: resolution: {integrity: sha512-mOQtwpY5hUt4vMLyshZPPV1x9MBRF2FimUjIImfYJb1x8o6jY4npikzWplAfWYQUJJjWfw/1NmfqD7vUOh9+ww==} engines: {node: '>=12'} + '@wordpress/a11y@4.6.0': + resolution: {integrity: sha512-dSYGLgntqQCAiHBnNxttLOUZnH26m/BrIQdCXtb9JVJy5p68JAdFHbr6qFoOfOoTCvwUqE8cNS7K4GWfAJwT0w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/api-fetch@3.23.1': resolution: {integrity: sha512-dmeigLuvqYAzpQ2hWUQT1P5VQAjkj9hS1z7PgNi1CcULFPbY8BWW+KiBETUu6Wm+rlSbUL2dC8qrA4JDv9ja5A==} @@ -10927,13 +10842,6 @@ packages: react: ^17.0.0 react-dom: ^17.0.0 - '@wordpress/components@25.13.0': - resolution: {integrity: sha512-Ym/5Xv7NnkJu40jCSmt/t6B8vT2ue2vobwDEz1FKlB0xGm5bzzh5589m2nZqqY459/Qm9dl5R4BKSdvKqKB2MQ==} - engines: {node: '>=12'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@wordpress/components@25.16.0': resolution: {integrity: sha512-voQuMsO5JbH+JW33TnWurwwvpSb8IQ4XU5wyVMubX4TUwadt+/2ToNJbZIDXoaJPei7vbM81Ft+pH+zGlN8CyA==} engines: {node: '>=12'} @@ -10955,6 +10863,13 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@wordpress/components@28.6.0': + resolution: {integrity: sha512-9YmA+7Tmz19oOfKifOF/VxcwJwyyLK8Y2LupK7ge6Oue0P1bMLs/9LBgZUBizoKMWmXYdzBm8pXf9Eyqq3PG0Q==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + '@wordpress/compose@3.25.3': resolution: {integrity: sha512-tCO2EnJCkCH548OqA0uU8V1k/1skz2QwBlHs8ZQSpimqUS4OWWsAlndCEFe4U4vDTqFt2ow7tzAir+05Cw8MAg==} @@ -10992,6 +10907,12 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/compose@7.6.0': + resolution: {integrity: sha512-4ukiLfCOUkb0zmdFpPSVOnQkpNHTWqQUOCgpMykjKO0gRfa/rZ6dxcZUQ/KEYT5EKZkGCo9bR4lBhxjNVrgfug==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/core-commands@0.7.0': resolution: {integrity: sha512-kMfyANcDUmA2+4EfEZuDVNFOWKEOJe7oEaZtC6tFRR1wYAlPYOzaQJxbtQMBzqhvHlQMORaxDQNhaoJ8+ac8MQ==} engines: {node: '>=12'} @@ -11042,6 +10963,12 @@ packages: peerDependencies: react: ^17.0.0 + '@wordpress/data@10.6.0': + resolution: {integrity: sha512-u6g1IeK3Vv0Ulr/0jPWU5wpde+flWH1SDvqgc50GjG2v03NWqzie8zTGGeHo8Fque7s/UNbGYKlzrbM3+dPl5g==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/data@4.27.3': resolution: {integrity: sha512-5763NgNV9IIa1CC3Q80dAvrH6108tJtj3IrHfUCZmUk1atSNsOMBCkLdQ7tGTTi2JFejeGEMg1LJI22JD5zM6Q==} @@ -11081,14 +11008,16 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/dataviews@4.2.0': + resolution: {integrity: sha512-rCnMbEVXKZYgQmJO7S448KPVh78DTHgfJ+B5H937l/HX8+Gd0OlkpbKi4C4UZUj0k/xwY7ccKERYurq3W8/NFg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/date@4.44.0': resolution: {integrity: sha512-WrSAg+gbRN5YB/YZhQnJMNKj80efc+6taVYq3VjSzp27CPxh75qTE5N56TJWGKZbB8mqCIEWy6eOXhIoBW19mQ==} engines: {node: '>=12'} - '@wordpress/date@4.47.0': - resolution: {integrity: sha512-HIruX+wMaQWKYLCFIu6JeEEoqRYkhpL4cWfZ1lJG78wNsgq3vRiHzXQaXHcbmJQCq0PZOxtmeSzldPiUMFVNpg==} - engines: {node: '>=12'} - '@wordpress/date@4.57.0': resolution: {integrity: sha512-azUXRQDhxoCkME7c+0Cw/aCZmyoQeTXhWJYtZBFyPU5wsIXSv/Ucp3WggJR7OSKFnE5rSp5qpCt/nihfLLfZWQ==} engines: {node: '>=12'} @@ -11097,6 +11026,10 @@ packages: resolution: {integrity: sha512-7/w2pzCDvzbidqAl2Rhd/FeA6QZhZmb03Y7rPIO0eJR33L8QWnLiyw+r4Et2DLji8A7N8/gcc+hsRL6lcEsGMA==} engines: {node: '>=12'} + '@wordpress/date@5.6.0': + resolution: {integrity: sha512-uB/FaNHudbs4DgaPGld+Ckvoo8kYvxcDhVyJ6Io3MgONMcsDr4KR3lOc50MprbNZPbXG2KB0CTgHA+PHNxP9iQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dependency-extraction-webpack-plugin@2.9.0': resolution: {integrity: sha512-Eo8ByPd3iZ6az4UmdLD2xYLp1/7os/H80l28Y5OlS4DozkD3vcWCBReynWoBax74u3oJ9wWN5b/8oSxGwIKXYQ==} peerDependencies: @@ -11133,6 +11066,10 @@ packages: resolution: {integrity: sha512-ilOkjXejcnJMxnq1gTVkBnDPP9W+XjlEe1TIfaMKcCwKsfsNy6bgURxWl1qIM2dPjH+5KK65bPjW0XELTMJy4w==} engines: {node: '>=12'} + '@wordpress/deprecated@4.6.0': + resolution: {integrity: sha512-XQbF7SIb43I4Ey7nEDqowm7YJgzoUpdmZfNBN01/UXKUZ0FNaKzf2LCNjOCwfEfRE7AroyUgMR40qWVBBs+GKQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom-ready@3.27.0': resolution: {integrity: sha512-X7yVAm/JL5UKNfttAN2Ak3suEyOag/MPfr/aX8L2k/od71a6zJBkpMcdKaVPVfIPj9HcrW6ROrfINySPtoGCLA==} engines: {node: '>=12'} @@ -11149,6 +11086,10 @@ packages: resolution: {integrity: sha512-G6OnfLLC0MIWi9efTW6DMNEtEoy7tCoV0MxD19gUuG3/rDOi8RgHYwuNCvt6ieQMISiLiHnsg4tZc4D45zdfZA==} engines: {node: '>=12'} + '@wordpress/dom-ready@4.6.0': + resolution: {integrity: sha512-3fX1O1abmp3++FpZMPnDQygeygUggqfEvWQQQ80di/ksMEo6DXvIdtXolwDQt9WIC1WetLdI7Mf3KKVJnruyxg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom@2.18.0': resolution: {integrity: sha512-tM2WeQuSObl3nzWjUTF0/dyLnA7sdl/MXaSe32D64OF89bjSyJvjUipI7gjKzI3kJ7ddGhwcTggGvSB06MOoCQ==} @@ -11156,10 +11097,6 @@ packages: resolution: {integrity: sha512-ympP0cK4ErQSFCRyrhjg8wAK7Wb5NqTUyiw1kV+2TQ35PKNG+TCXjYkk19Wc0kxiYZPFtbxk8OPp40e8Up7y7g==} engines: {node: '>=12'} - '@wordpress/dom@3.47.0': - resolution: {integrity: sha512-SY6wfAc4yrXYil8fm/uyeKQnPjGuc0G9Q1/5pUKO6dssst8fClsrxy+hXNl0FYFGWnAZBqg5ccrwYydrFt5k/g==} - engines: {node: '>=12'} - '@wordpress/dom@3.57.0': resolution: {integrity: sha512-3vJ1Z5Lzb7kfMoB8ni275vFGIRrljWFQ2XsVfO6oA/HeoIfHAGVcR58GmbjyxwEgClrizMGIkbs9ubrRpontLQ==} engines: {node: '>=12'} @@ -11168,6 +11105,10 @@ packages: resolution: {integrity: sha512-wdWBzfxU8iUPpxxTACkFpYbEoC0f+Hqs24IYOkhn/8ERp2LFpUdFcwF7/DmY6agSpUs8iWT/2hSGdUz9Lw2f0w==} engines: {node: '>=12'} + '@wordpress/dom@4.6.0': + resolution: {integrity: sha512-ZCjMOya5dTkzgp/vTq7w1qpvVQDPoF7sJpalARUUQjeMUkUw/PTLYvvXJ3gARBCgaEdD85QjLorpxnJVz1XNng==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/e2e-test-utils-playwright@1.0.1': resolution: {integrity: sha512-DNR45Q0px6p3XLnJzRXANIXSQ1OKLdWCwQLQctuSmhVyqSyKS0VZApiYVoaPTKLEdxl+WeJ7jN153q1vUa5Lcg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -11273,6 +11214,10 @@ packages: resolution: {integrity: sha512-/d/lWBDYYgzE2yeXYvPnjMSDG1EdQs5TSLdjM/drQVJMxWayFqAPaF/pVczLHCPYfjgyJN4Zc+bneAKj6dEiLw==} engines: {node: '>=12'} + '@wordpress/element@6.6.0': + resolution: {integrity: sha512-IvSocvmd0fNus/XZo7K1EU4UD7aOKUdi3Y7pFUW2ljBbL3vuXk3E+6bwYahCjUIlBhpgGuCjemWTdg2Awzfmiw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/env@10.5.0': resolution: {integrity: sha512-Hx+fi6qTEAuycznulkuMi4d5RDPZ6lPPAxaylpCwXNX2hgx5jrrpgnY4Zn0chBgZMpShO7BbA+zNDq2E6evvTw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -11289,6 +11234,10 @@ packages: resolution: {integrity: sha512-DkTDo1Qhvs9rfobBpg5vXAOKaev3Jox8R5ryvYIhql5chrkj/V5k2ZzwUChFXxYmivVkWacCwDGmDmwe2ex/ag==} engines: {node: '>=12'} + '@wordpress/escape-html@3.6.0': + resolution: {integrity: sha512-NY9As0uJ81TPTogBzD6G/m7L4+sjvkjTEKkNsHLD5aEYxRX+RHlPYPyyd6y4CmlOkttwymbV9eKNP+LrfX5zZQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/eslint-plugin@12.9.0': resolution: {integrity: sha512-R6dTvD4uFYeoUJFZNUhm1CSwthC0Pl0RIY057Y9oUvGSqjjm7RqRIwKrMlw3dO0P9KoBGGHUox8NUj6EciRXww==} engines: {node: '>=12', npm: '>=6.9'} @@ -11358,8 +11307,8 @@ packages: resolution: {integrity: sha512-4sIngmH64M1jzcprfkffo1GHsQbd/QNbTweq6cSPIJNorKfE63Inf59NQ6r0pq6+Nz+cuq64eMz5v4eyngjZ/A==} engines: {node: '>=12'} - '@wordpress/hooks@4.4.0': - resolution: {integrity: sha512-KO0gUx0KLhH3XCatg9ZOU1TH0fgyQUccAEIM8liErfgmrabHl8JhDoR2Uk5k0jNKZNPog7XxvKgPFVtCzvzQig==} + '@wordpress/hooks@4.6.0': + resolution: {integrity: sha512-FWJhubBXeyRhx12YUmxT9pNoV9Azvx8nkynhduV+RNgA+F2SXoOf15pr+USPV//m3Bx031GN/wPHjgUCbC6+XA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} '@wordpress/html-entities@3.24.0': @@ -11378,6 +11327,10 @@ packages: resolution: {integrity: sha512-Nb0nCYIdTEehWJ6HoA76bxpseKDY/12rYZ10eqf5OSr6oMvtyJ5j4fkNMKuHFQ00Mhppl9fkYWp2c8ZzBcp5Vw==} engines: {node: '>=12'} + '@wordpress/html-entities@4.6.0': + resolution: {integrity: sha512-ypTlGwDKw7jpmu9rneErkkq9dFHXzju8SGdEWkVAeqhRS9Ifri9DvmrovASB2c5IPY+Ijwh4YlVkx1yNBRHr5w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/i18n@3.20.0': resolution: {integrity: sha512-SIoOJFB4UrrYAScS4H91CYCLW9dX3Ghv8pBKc/yHGculb1AdGr6gRMlmJxZV62Cn3CZ4Ga86c+FfR+GiBu0JPg==} hasBin: true @@ -11392,11 +11345,6 @@ packages: engines: {node: '>=12'} hasBin: true - '@wordpress/i18n@4.54.0': - resolution: {integrity: sha512-gSKBopBN9rY9GhNy3CXLK3n4D5viuBTObvcu3blu4SFqkHl+Ws1Gx0tHbpypfV80ESrOyMXHJIAqWgBD8d4Hew==} - engines: {node: '>=12'} - hasBin: true - '@wordpress/i18n@4.57.0': resolution: {integrity: sha512-VYWYHE+7NxnZvE9Swhhe4leQcn0jHNkzRAEV36TkfAL/MvrQYCRh71KLTvKhsilG96HUQdBwjH0VPLmYEmR3sg==} engines: {node: '>=12'} @@ -11412,6 +11360,15 @@ packages: engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true + '@wordpress/i18n@5.6.0': + resolution: {integrity: sha512-xTpwuRh0owYFlgRHUbUAQIWr8ye3FC0ZsjDIOskJaNkrheAU9ZWKJDcmQmPvi01Udml4g9LUIaffkcRd2kyW2g==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + hasBin: true + + '@wordpress/icons@10.6.0': + resolution: {integrity: sha512-dy58bQFVee2izXA65Ptar1f8mVhL1hilOJI3BWbLWmxHr9H4VjI0ohjW4ZkAhahBG2yIvKZja/HaFMTs5O/7Xg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/icons@4.1.0': resolution: {integrity: sha512-1FpEjT9kJbr0cWbgdgIwd2DoeerWijcVx3qCZ/WMFKNElBH9lfZLuWPI1hpX102HGWFcEi3VlbVpdBGeCeYQWg==} engines: {node: '>=12'} @@ -11432,10 +11389,6 @@ packages: resolution: {integrity: sha512-QkJRDNgSJzfU3OCVr5X9P3Au3MIag2yT4dzM3Ej6VfrF0SPfFgMwroXKSdNEHmCCG7AwtzGOjaqjpQ3y9vRMkA==} engines: {node: '>=12'} - '@wordpress/icons@9.38.0': - resolution: {integrity: sha512-K+rSZM1eKuWh+rXeMWNLj4dT0a3RJSzoUUh9UDQZCSdnThyAyZECGEKfHSCfd28/yabxLKaziXrb5/MVBrPjZw==} - engines: {node: '>=12'} - '@wordpress/icons@9.48.0': resolution: {integrity: sha512-47efXMuqX8Qbf7sFyYeUJ0TPjs3tNqnjHUn3WGc7Gq1IIYD6EGYFmCzPAfciUIXwRBhez2oC4y6IAXl5GP3KBw==} engines: {node: '>=12'} @@ -11473,6 +11426,10 @@ packages: resolution: {integrity: sha512-qUMqZMLlunwY2J31HG6NZwD2kBIqcwvIDBmdQYvVuQ2aDGeB2Z6sVPXyHCqGfh2ynFfaIL8bDtjW5UtYGPUI4A==} engines: {node: '>=12'} + '@wordpress/is-shallow-equal@5.6.0': + resolution: {integrity: sha512-WjxXleJePz9scpTXMTl//mn3AgEBqdHd56pWtaDgz9Ub7O5H8AMNa2BU4VDK8OOQ3iwpAUgqGhaTRK5GjbaeSA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/jest-console@3.10.0': resolution: {integrity: sha512-iS1GSO+o7+p2PhvScOquD+IK7WqmVxa2s9uTUQyNEo06f9EUv6KNw0B1iZ00DpbgLqDCiczfdCNapC816UXIIA==} engines: {node: '>=8'} @@ -11572,6 +11529,10 @@ packages: resolution: {integrity: sha512-GLKho4gAFbqgmP3GxEPP5iSS2WwOtqX0xL0zVjElNC/uHKCULyZ2UlyDAc2clN5wiVNf3hC4A1BsxzKeKIMNFQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/keycodes@4.6.0': + resolution: {integrity: sha512-7jmKM1BLyoQPLXFl+3FPaKBrLEe7kUIkBMGS88083SQtXXFcW8sYQt5jd6E1yY6EAnniGveUNrv0C9Lbaipx3w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/lazy-import@1.34.0': resolution: {integrity: sha512-ZF4YhWDJtvlev1GqZ7FRr2CPg5Vssw6lb4gn2OH56/KWuHf/LrBPVdshXR6ujDPvgUMnNFRf39ofHIENoj7JPA==} engines: {npm: '>=6.9.0'} @@ -11723,6 +11684,12 @@ packages: resolution: {integrity: sha512-4vMhlu40+qxkt6lyCv2KWCx9bP7hcpPC9GXj9Kq3gwKIzSSHoqbYs3V8HYeGWrG9g7JWMFN9Pkdy8Bm61ZsKuQ==} engines: {node: '>=12'} + '@wordpress/primitives@4.6.0': + resolution: {integrity: sha512-uu4ANmgwslB2YOyIBQDSwKTQXXqGDL9Gz5INe+UeJZBMt2uU/TGEjKcZ63dqbuM8mqlPAcdVGL52RCt7mIKEhQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/priority-queue@1.11.2': resolution: {integrity: sha512-ulwmUOklY3orn1xXpcPnTyGWV5B/oycxI+cHZ6EevBVgM5sq+BW3xo0PKLR/MMm6UNBtFTu/71QAJrNZcD6V1g==} @@ -11734,6 +11701,10 @@ packages: resolution: {integrity: sha512-g4Oka9aQFVPQUhXkKhHT6BoyTEdCG6S0TUvP4SP16PbkhbvIFwZ25GRQb2ERCVTdseCuDIM5YP0kwZd3NqTlGg==} engines: {node: '>=12'} + '@wordpress/priority-queue@3.6.0': + resolution: {integrity: sha512-r2cyisWaqDLesIqC8BqWoXyNIxt1lwjvevw5Kijl9zxzxfYBsNQlu7RI1JNYgnjbDQQirWukFgprt7tdzhwssQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/private-apis@0.20.0': resolution: {integrity: sha512-byyPRUNAD8/ca9N8gP2rUr8DHuMbzSoXO03nP8g3cecTN6iCOWqFDm6adkrbiAX527N9Ip+GOrRJd7Tta4kRIg==} engines: {node: '>=12'} @@ -11777,6 +11748,12 @@ packages: peerDependencies: redux: '>=4' + '@wordpress/redux-routine@5.6.0': + resolution: {integrity: sha512-CQkO+JZefPJLNBh5iBup2DRCXfUoPfEZeo2mhO91tSbBmrP08v1Pdk6YLsa8gNDXp4qJbFhNHMGCqRzEioMOhA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + redux: '>=4' + '@wordpress/reusable-blocks@3.20.0': resolution: {integrity: sha512-2Wp1W704eYfTdCrYx+EKr5VbW/Z0AX24M8+FxWmhFlGjWpdzGl9shuMKv6cLfXeLDitU8fyHILXAVAXsvRvK3A==} engines: {node: '>=12'} @@ -11807,15 +11784,15 @@ packages: peerDependencies: react: ^17.0.0 - '@wordpress/rich-text@6.24.0': - resolution: {integrity: sha512-RkvzK8zvLgpd7i5dlL6zs+Dig1lZNSZf/3sYyjX6RalISXNuxF6Zn8Or7kBcq7EcYmey0LMlVIl5FTZ2l7HSIA==} + '@wordpress/rich-text@6.34.0': + resolution: {integrity: sha512-qeHPgSaI6UolAA9s8ShlbqjWtlh1kTIOMKATDZD6GOACZurXh9ZVJxxsE95FSmLEu4SDmYJ0b2sZlh92yJuaPw==} engines: {node: '>=12'} peerDependencies: react: ^18.0.0 - '@wordpress/rich-text@6.34.0': - resolution: {integrity: sha512-qeHPgSaI6UolAA9s8ShlbqjWtlh1kTIOMKATDZD6GOACZurXh9ZVJxxsE95FSmLEu4SDmYJ0b2sZlh92yJuaPw==} - engines: {node: '>=12'} + '@wordpress/rich-text@7.6.0': + resolution: {integrity: sha512-XxlfrlwfCPX7f3u9DMinouYNM9PDBMeGZb4MlK2Fbrc8ympaTZOdH4U74VR3jgv0Eusx6vxFEA5JVVXpW/xS2w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} peerDependencies: react: ^18.0.0 @@ -11926,6 +11903,10 @@ packages: resolution: {integrity: sha512-WhMKX/ETGUJr2GkaPgGwFF8gTU/PgikfvE2b2ZDjUglxIPYnujBa9S6w+kQPzwGniGJutHL1DFK+TmAaxoci9A==} engines: {node: '>=12'} + '@wordpress/undo-manager@1.6.0': + resolution: {integrity: sha512-Sl2rG/7t5zTQOgp+jOPn5m27sKd1DJIX/EGhM6LtRcjXZqa0rLDJXal1xWfkZk5oghaqW1TAwXJsg9UdAlh7Nw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/url@2.22.2': resolution: {integrity: sha512-aqpYKQXzyzkCOm+GzZRYlLb+wh58g0cwR1PaKAl0UXaBS4mdS+X6biMriylb4P8CVC/RR7CSw5XI20JC24KDwQ==} @@ -11978,6 +11959,10 @@ packages: resolution: {integrity: sha512-Xs37x0IkvNewPNKs1A8cnw5xLb+AqwUqqCsH4+5Sjat5GDqP86mHgLfRIlE4d6fBYg+q6tO7DVPG49TT3/wzgA==} engines: {node: '>=12'} + '@wordpress/warning@3.6.0': + resolution: {integrity: sha512-pm57z1LZkzfQsXsji6yxcP0XSymKbvP087vJLlMkmLf+MoNVyTD6UvFpXl8hRSH6C6pySoJSgGFXaH81CRuO2Q==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/widgets@3.24.0': resolution: {integrity: sha512-bgjUoBjHKhyM2u7QrTScll7hCFDrHw0OxZWGbPXOGfE0VUgaej/d8QV5re7I+sOIi0g8+XLYQE0fwEyANt1iUg==} peerDependencies: @@ -16078,6 +16063,20 @@ packages: react-dom: optional: true + framer-motion@11.3.30: + resolution: {integrity: sha512-9VmqGe9OIjfMoCcs+ZsKXlv6JaG5QagKX2F1uSbkG3Z33wgjnz60Kw+CngC1M49rDYau+Y9aL+8jGagAwrbVyw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + framer-motion@6.5.1: resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} peerDependencies: @@ -25466,10 +25465,10 @@ snapshots: '@ariakit/core@0.3.11': {} - '@ariakit/core@0.3.8': {} - '@ariakit/core@0.4.5': {} + '@ariakit/core@0.4.9': {} + '@ariakit/react-core@0.3.14(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@ariakit/core': 0.3.11 @@ -25486,9 +25485,9 @@ snapshots: react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.2.0(react@18.3.1) - '@ariakit/react-core@0.3.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + '@ariakit/react-core@0.4.10(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@ariakit/core': 0.3.8 + '@ariakit/core': 0.4.9 '@floating-ui/dom': 1.5.3 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -25514,9 +25513,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@ariakit/react@0.3.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + '@ariakit/react@0.4.10(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@ariakit/react-core': 0.3.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@ariakit/react-core': 0.4.10(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -25703,7 +25702,7 @@ snapshots: '@wordpress/primitives': 3.55.0 '@wordpress/react-i18n': 3.55.0 classnames: 2.3.2 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -25807,7 +25806,7 @@ snapshots: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -25830,7 +25829,7 @@ snapshots: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -25850,7 +25849,7 @@ snapshots: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -29949,7 +29948,7 @@ snapshots: '@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@17.0.2))(@types/react@17.0.71)(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.1 '@emotion/react': 11.11.1(@types/react@17.0.71)(react@17.0.2) @@ -29964,7 +29963,7 @@ snapshots: '@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@18.3.1))(@types/react@17.0.71)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.1 '@emotion/react': 11.11.1(@types/react@17.0.71)(react@18.3.1) @@ -30132,8 +30131,6 @@ snapshots: '@floating-ui/core@0.6.2': {} - '@floating-ui/core@0.7.3': {} - '@floating-ui/core@1.5.2': dependencies: '@floating-ui/utils': 0.1.6 @@ -30142,10 +30139,6 @@ snapshots: dependencies: '@floating-ui/core': 0.6.2 - '@floating-ui/dom@0.5.4': - dependencies: - '@floating-ui/core': 0.7.3 - '@floating-ui/dom@1.5.3': dependencies: '@floating-ui/core': 1.5.2 @@ -30169,27 +30162,12 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@floating-ui/react-dom@0.7.2(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@floating-ui/dom': 0.5.4 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - use-isomorphic-layout-effect: 1.1.2(@types/react@17.0.71)(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - '@floating-ui/react-dom@1.3.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@floating-ui/dom': 1.5.3 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - '@floating-ui/react-dom@2.0.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@floating-ui/dom': 1.5.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@floating-ui/react-dom@2.0.4(react-dom@18.3.1(react@17.0.2))(react@17.0.2)': dependencies: '@floating-ui/dom': 1.5.3 @@ -31560,7 +31538,7 @@ snapshots: '@oclif/color': 1.0.13 '@oclif/core': 2.15.0(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3) chalk: 4.1.2 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 http-call: 5.3.0 load-json-file: 5.3.0 @@ -32030,7 +32008,7 @@ snapshots: '@puppeteer/browsers@1.4.6(typescript@5.3.2)': dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.3.0 @@ -32044,7 +32022,7 @@ snapshots: '@puppeteer/browsers@1.4.6(typescript@5.3.3)': dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.3.0 @@ -32058,7 +32036,7 @@ snapshots: '@puppeteer/browsers@1.9.0': dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.3.1 @@ -32080,13 +32058,6 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 - '@radix-ui/react-arrow@1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32107,16 +32078,6 @@ snapshots: '@types/react': 17.0.71 '@types/react-dom': 18.3.0 - '@radix-ui/react-collection@1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32235,11 +32196,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@radix-ui/react-direction@1.0.0(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - react: 17.0.2 - '@radix-ui/react-direction@1.0.1(@types/react@17.0.71)(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -32276,17 +32232,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-dismissable-layer@1.0.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-escape-keydown': 1.0.2(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32315,21 +32260,6 @@ snapshots: '@types/react': 17.0.71 '@types/react-dom': 18.3.0 - '@radix-ui/react-dropdown-menu@2.0.4(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-menu': 2.0.4(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - '@radix-ui/react-focus-guards@1.0.0(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -32372,15 +32302,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-focus-scope@1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32433,50 +32354,6 @@ snapshots: optionalDependencies: '@types/react': 17.0.71 - '@radix-ui/react-menu@2.0.4(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-focus-guards': 1.0.0(react@17.0.2) - '@radix-ui/react-focus-scope': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-popper': 1.1.1(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-portal': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-presence': 1.0.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-roving-focus': 1.0.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - aria-hidden: 1.2.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-remove-scroll: 2.5.5(@types/react@17.0.71)(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - - '@radix-ui/react-popper@1.1.1(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@floating-ui/react-dom': 0.7.2(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-arrow': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - '@radix-ui/react-use-rect': 1.0.0(react@17.0.2) - '@radix-ui/react-use-size': 1.0.0(react@17.0.2) - '@radix-ui/rect': 1.0.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - '@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32529,13 +32406,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-portal@1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32586,13 +32456,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-primitive@1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32613,21 +32476,6 @@ snapshots: '@types/react': 17.0.71 '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.0.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.10)(@types/react@17.0.71)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 @@ -32756,12 +32604,6 @@ snapshots: '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) react: 18.3.1 - '@radix-ui/react-slot@1.0.1(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - react: 17.0.2 - '@radix-ui/react-slot@1.0.2(@types/react@17.0.71)(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -32930,12 +32772,6 @@ snapshots: '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) react: 18.3.1 - '@radix-ui/react-use-escape-keydown@1.0.2(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - react: 17.0.2 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@17.0.71)(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -32990,12 +32826,6 @@ snapshots: optionalDependencies: '@types/react': 17.0.71 - '@radix-ui/react-use-rect@1.0.0(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/rect': 1.0.0 - react: 17.0.2 - '@radix-ui/react-use-rect@1.0.1(@types/react@17.0.71)(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -33012,12 +32842,6 @@ snapshots: optionalDependencies: '@types/react': 17.0.71 - '@radix-ui/react-use-size@1.0.0(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 - '@radix-ui/react-use-size@1.0.1(@types/react@17.0.71)(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -33054,10 +32878,6 @@ snapshots: '@types/react': 17.0.71 '@types/react-dom': 18.3.0 - '@radix-ui/rect@1.0.0': - dependencies: - '@babel/runtime': 7.25.0 - '@radix-ui/rect@1.0.1': dependencies: '@babel/runtime': 7.25.0 @@ -34593,7 +34413,7 @@ snapshots: style-loader: 1.3.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.89.0(webpack-cli@3.3.12)))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) util-deprecate: 1.0.2 webpack: 4.47.0(webpack-cli@3.3.12(webpack@5.89.0)) webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) @@ -34654,7 +34474,7 @@ snapshots: style-loader: 1.3.0(webpack@4.47.0) terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.89.0))(webpack@4.47.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 webpack: 4.47.0 webpack-dev-middleware: 3.7.3(webpack@4.47.0) @@ -35828,7 +35648,7 @@ snapshots: telejson: 6.0.8 terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.89.0(webpack-cli@3.3.12)))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) util-deprecate: 1.0.2 webpack: 4.47.0(webpack-cli@3.3.12(webpack@5.89.0)) webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) @@ -35878,7 +35698,7 @@ snapshots: telejson: 6.0.8 terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.89.0))(webpack@4.47.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 webpack: 4.47.0 webpack-dev-middleware: 3.7.3(webpack@4.47.0) @@ -37549,7 +37369,6 @@ snapshots: '@types/react-dom@18.3.0': dependencies: '@types/react': 17.0.71 - optional: true '@types/react-outside-click-handler@1.3.3': dependencies: @@ -38009,7 +37828,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.56.0 '@typescript-eslint/type-utils': 5.56.0(eslint@8.55.0)(typescript@5.3.2) '@typescript-eslint/utils': 5.56.0(eslint@8.55.0)(typescript@5.3.2) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 grapheme-splitter: 1.0.4 ignore: 5.3.0 @@ -38028,7 +37847,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.55.0)(typescript@5.3.2) '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.3.2) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -38047,7 +37866,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -38127,7 +37946,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.56.0 '@typescript-eslint/types': 5.56.0 '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.3.2) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 optionalDependencies: typescript: 5.3.2 @@ -38139,7 +37958,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 optionalDependencies: typescript: 5.3.2 @@ -38151,7 +37970,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 optionalDependencies: typescript: 5.3.3 @@ -38349,6 +38168,8 @@ snapshots: '@use-gesture/core@10.3.0': {} + '@use-gesture/core@10.3.1': {} + '@use-gesture/react@10.3.0(react@17.0.2)': dependencies: '@use-gesture/core': 10.3.0 @@ -38359,6 +38180,16 @@ snapshots: '@use-gesture/core': 10.3.0 react: 18.3.1 + '@use-gesture/react@10.3.1(react@17.0.2)': + dependencies: + '@use-gesture/core': 10.3.1 + react: 17.0.2 + + '@use-gesture/react@10.3.1(react@18.3.1)': + dependencies: + '@use-gesture/core': 10.3.1 + react: 18.3.1 + '@webassemblyjs/ast@1.11.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.1 @@ -38828,7 +38659,7 @@ snapshots: '@wordpress/a11y@3.47.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/dom-ready': 3.47.0 '@wordpress/i18n': 4.47.0 @@ -38844,6 +38675,12 @@ snapshots: '@wordpress/dom-ready': 3.27.0 '@wordpress/i18n': 4.6.1 + '@wordpress/a11y@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/dom-ready': 4.6.0 + '@wordpress/i18n': 5.6.0 + '@wordpress/api-fetch@3.23.1(react-native@0.73.0(@babel/core@7.23.5)(@babel/preset-env@7.23.6(@babel/core@7.23.5))(encoding@0.1.13)(react@17.0.2))': dependencies: '@babel/runtime': 7.25.0 @@ -38881,7 +38718,7 @@ snapshots: '@wordpress/api-fetch@6.44.0': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/i18n': 4.57.0 '@wordpress/url': 3.48.0 '@wordpress/api-fetch@7.0.1': @@ -38896,7 +38733,7 @@ snapshots: '@wordpress/autop@3.47.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/babel-plugin-import-jsx-pragma@1.1.3(@babel/core@7.12.9)': dependencies: @@ -38993,7 +38830,7 @@ snapshots: '@babel/plugin-transform-runtime': 7.23.4(@babel/core@7.24.7) '@babel/preset-env': 7.23.5(@babel/core@7.24.7) '@babel/preset-typescript': 7.23.3(@babel/core@7.24.7) - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/babel-plugin-import-jsx-pragma': 4.30.0(@babel/core@7.24.7) '@wordpress/browserslist-config': 5.30.0 '@wordpress/warning': 2.47.0 @@ -39015,7 +38852,7 @@ snapshots: '@wordpress/blob@3.47.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/blob@3.6.1': dependencies: @@ -39075,34 +38912,34 @@ snapshots: '@emotion/react': 11.11.1(@types/react@17.0.71)(react@17.0.2) '@emotion/styled': 11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@17.0.2))(@types/react@17.0.71)(react@17.0.2) '@react-spring/web': 9.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/api-fetch': 6.44.0 '@wordpress/blob': 3.47.0 '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/commands': 0.18.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) - '@wordpress/date': 4.47.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/compose': 6.34.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) + '@wordpress/date': 4.57.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.47.0 + '@wordpress/escape-html': 2.57.0 '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/html-entities': 3.57.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 - '@wordpress/is-shallow-equal': 4.47.0 + '@wordpress/is-shallow-equal': 4.57.0 '@wordpress/keyboard-shortcuts': 4.24.0(react@17.0.2) '@wordpress/keycodes': 3.57.0 '@wordpress/notices': 4.15.0(react@17.0.2) '@wordpress/preferences': 3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/private-apis': 0.29.0 - '@wordpress/rich-text': 6.24.0(react@17.0.2) + '@wordpress/rich-text': 6.34.0(react@17.0.2) '@wordpress/style-engine': 1.30.0 '@wordpress/token-list': 2.47.0 '@wordpress/url': 3.48.0 - '@wordpress/warning': 2.47.0 + '@wordpress/warning': 2.57.0 '@wordpress/wordcount': 3.47.0 change-case: 4.1.2 classnames: 2.3.2 @@ -39136,34 +38973,34 @@ snapshots: '@emotion/react': 11.11.1(@types/react@17.0.71)(react@18.3.1) '@emotion/styled': 11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@18.3.1))(@types/react@17.0.71)(react@18.3.1) '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/api-fetch': 6.44.0 '@wordpress/blob': 3.47.0 '@wordpress/blocks': 12.24.0(react@18.3.1) '@wordpress/commands': 0.18.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@wordpress/compose': 6.24.0(react@18.3.1) - '@wordpress/data': 9.17.0(react@18.3.1) - '@wordpress/date': 4.47.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/compose': 6.34.0(react@18.3.1) + '@wordpress/data': 9.27.0(react@18.3.1) + '@wordpress/date': 4.57.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.47.0 + '@wordpress/escape-html': 2.57.0 '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/html-entities': 3.57.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 - '@wordpress/is-shallow-equal': 4.47.0 + '@wordpress/is-shallow-equal': 4.57.0 '@wordpress/keyboard-shortcuts': 4.24.0(react@18.3.1) '@wordpress/keycodes': 3.57.0 '@wordpress/notices': 4.15.0(react@18.3.1) '@wordpress/preferences': 3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/private-apis': 0.29.0 - '@wordpress/rich-text': 6.24.0(react@18.3.1) + '@wordpress/rich-text': 6.34.0(react@18.3.1) '@wordpress/style-engine': 1.30.0 '@wordpress/token-list': 2.47.0 '@wordpress/url': 3.48.0 - '@wordpress/warning': 2.47.0 + '@wordpress/warning': 2.57.0 '@wordpress/wordcount': 3.47.0 change-case: 4.1.2 classnames: 2.3.2 @@ -39203,7 +39040,7 @@ snapshots: '@wordpress/compose': 5.5.0(react@18.3.1) '@wordpress/data': 6.15.0(react@18.3.1) '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.20.0 '@wordpress/hooks': 3.6.1 '@wordpress/html-entities': 3.24.0 @@ -39239,7 +39076,7 @@ snapshots: '@wordpress/block-editor@8.6.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@react-spring/web': 9.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/a11y': 3.47.0 '@wordpress/api-fetch': 6.21.0 @@ -39379,32 +39216,32 @@ snapshots: '@wordpress/block-library@8.24.1(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@preact/signals-core@1.5.1)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/api-fetch': 6.44.0 '@wordpress/autop': 3.47.0 '@wordpress/blob': 3.47.0 '@wordpress/block-editor': 12.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) - '@wordpress/date': 4.47.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/data': 9.27.0(react@17.0.2) + '@wordpress/date': 4.57.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.47.0 + '@wordpress/escape-html': 2.57.0 '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/html-entities': 3.57.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 '@wordpress/interactivity': 3.0.1(@preact/signals-core@1.5.1) '@wordpress/keycodes': 3.57.0 '@wordpress/notices': 4.15.0(react@17.0.2) - '@wordpress/primitives': 3.45.0 + '@wordpress/primitives': 3.55.0 '@wordpress/private-apis': 0.29.0 '@wordpress/reusable-blocks': 4.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/rich-text': 6.24.0(react@17.0.2) + '@wordpress/rich-text': 6.34.0(react@17.0.2) '@wordpress/server-side-render': 4.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/url': 3.48.0 '@wordpress/viewport': 5.24.0(react@17.0.2) @@ -39435,7 +39272,7 @@ snapshots: '@wordpress/block-serialization-default-parser@4.47.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/blocks@11.1.5(react@18.3.1)': dependencies: @@ -39446,7 +39283,7 @@ snapshots: '@wordpress/compose': 5.5.0(react@18.3.1) '@wordpress/data': 6.15.0(react@18.3.1) '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.20.0 '@wordpress/hooks': 3.6.1 '@wordpress/html-entities': 3.24.0 @@ -39530,7 +39367,7 @@ snapshots: '@wordpress/compose': 6.24.0(react@17.0.2) '@wordpress/data': 9.17.0(react@17.0.2) '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.24.0 '@wordpress/hooks': 3.57.0 '@wordpress/html-entities': 3.47.0 @@ -39560,7 +39397,7 @@ snapshots: '@wordpress/compose': 6.24.0(react@18.3.1) '@wordpress/data': 9.17.0(react@18.3.1) '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.24.0 '@wordpress/hooks': 3.57.0 '@wordpress/html-entities': 3.47.0 @@ -39641,9 +39478,9 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.22.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.36.0 '@wordpress/keyboard-shortcuts': 4.24.0(react@17.0.2) '@wordpress/private-apis': 0.20.0 @@ -39672,7 +39509,7 @@ snapshots: '@wordpress/compose': 4.2.0(react@18.3.1) '@wordpress/date': 4.44.0 '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 3.2.0 '@wordpress/hooks': 3.6.1 '@wordpress/i18n': 4.47.0 @@ -39820,7 +39657,7 @@ snapshots: '@wordpress/compose': 5.4.1(react@17.0.2) '@wordpress/date': 4.44.0 '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.47.0 '@wordpress/hooks': 3.6.1 @@ -39868,7 +39705,7 @@ snapshots: '@wordpress/compose': 5.4.1(react@17.0.2) '@wordpress/date': 4.44.0 '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.47.0 '@wordpress/hooks': 3.6.1 @@ -39904,7 +39741,7 @@ snapshots: '@wordpress/components@20.0.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@emotion/cache': 11.11.0 '@emotion/css': 11.11.2 '@emotion/react': 11.11.1(@types/react@17.0.71)(react@17.0.2) @@ -39925,7 +39762,7 @@ snapshots: '@wordpress/icons': 9.36.0 '@wordpress/is-shallow-equal': 4.24.0 '@wordpress/keycodes': 3.47.0 - '@wordpress/primitives': 3.45.0 + '@wordpress/primitives': 3.55.0 '@wordpress/rich-text': 5.20.0(react@17.0.2) '@wordpress/warning': 2.47.0 change-case: 4.1.2 @@ -39974,7 +39811,7 @@ snapshots: '@wordpress/icons': 9.36.0 '@wordpress/is-shallow-equal': 4.24.0 '@wordpress/keycodes': 3.47.0 - '@wordpress/primitives': 3.45.0 + '@wordpress/primitives': 3.55.0 '@wordpress/rich-text': 5.20.0(react@17.0.2) '@wordpress/warning': 2.47.0 change-case: 4.1.2 @@ -40001,70 +39838,6 @@ snapshots: - '@types/react' - supports-color - '@wordpress/components@25.13.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@ariakit/react': 0.3.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@babel/runtime': 7.25.0 - '@emotion/cache': 11.11.0 - '@emotion/css': 11.11.2 - '@emotion/react': 11.11.1(@types/react@17.0.71)(react@17.0.2) - '@emotion/serialize': 1.1.2 - '@emotion/styled': 11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@17.0.2))(@types/react@17.0.71)(react@17.0.2) - '@emotion/utils': 1.2.1 - '@floating-ui/react-dom': 2.0.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@radix-ui/react-dropdown-menu': 2.0.4(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@types/gradient-parser': 0.1.3 - '@types/highlight-words-core': 1.2.1 - '@use-gesture/react': 10.3.0(react@17.0.2) - '@wordpress/a11y': 3.47.0 - '@wordpress/compose': 6.24.0(react@17.0.2) - '@wordpress/date': 4.47.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 - '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.47.0 - '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.54.0 - '@wordpress/icons': 9.48.0 - '@wordpress/is-shallow-equal': 4.47.0 - '@wordpress/keycodes': 3.57.0 - '@wordpress/primitives': 3.45.0 - '@wordpress/private-apis': 0.29.0 - '@wordpress/rich-text': 6.24.0(react@17.0.2) - '@wordpress/warning': 2.47.0 - change-case: 4.1.2 - classnames: 2.3.2 - colord: 2.9.3 - date-fns: 2.30.0 - deepmerge: 4.3.1 - dom-scroll-into-view: 1.2.1 - downshift: 6.1.12(react@17.0.2) - fast-deep-equal: 3.1.3 - framer-motion: 10.16.16(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - gradient-parser: 0.1.5 - highlight-words-core: 1.2.2 - is-plain-object: 5.0.0 - memize: 2.1.0 - path-to-regexp: 6.2.1 - re-resizable: 6.9.11(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - react: 17.0.2 - react-colorful: 5.6.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - react-dom: 17.0.2(react@17.0.2) - reakit: 1.3.11(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - remove-accents: 0.5.0 - use-lilius: 2.0.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - uuid: 9.0.1 - valtio: 1.7.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(babel-plugin-macros@3.1.0)(react@17.0.2) - transitivePeerDependencies: - - '@babel/helper-module-imports' - - '@babel/types' - - '@types/react' - - aslemammad-vite-plugin-macro - - babel-plugin-macros - - supports-color - - vite - '@wordpress/components@25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@ariakit/react': 0.3.14(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -40078,7 +39851,7 @@ snapshots: '@floating-ui/react-dom': 2.0.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 - '@use-gesture/react': 10.3.0(react@17.0.2) + '@use-gesture/react': 10.3.1(react@17.0.2) '@wordpress/a11y': 3.57.0 '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/date': 4.57.0 @@ -40141,7 +39914,7 @@ snapshots: '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 - '@use-gesture/react': 10.3.0(react@18.3.1) + '@use-gesture/react': 10.3.1(react@18.3.1) '@wordpress/a11y': 3.57.0 '@wordpress/compose': 6.34.0(react@18.3.1) '@wordpress/date': 4.57.0 @@ -40266,7 +40039,7 @@ snapshots: '@floating-ui/react-dom': 2.0.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/gradient-parser': 0.1.3 '@types/highlight-words-core': 1.2.1 - '@use-gesture/react': 10.3.0(react@17.0.2) + '@use-gesture/react': 10.3.1(react@17.0.2) '@wordpress/a11y': 3.57.0 '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/date': 4.57.0 @@ -40308,6 +40081,61 @@ snapshots: - '@types/react' - supports-color + '@wordpress/components@28.6.0(@emotion/is-prop-valid@1.2.1)(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + dependencies: + '@ariakit/react': 0.4.10(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@babel/runtime': 7.25.0 + '@emotion/cache': 11.11.0 + '@emotion/css': 11.11.2 + '@emotion/react': 11.11.1(@types/react@17.0.71)(react@17.0.2) + '@emotion/serialize': 1.1.2 + '@emotion/styled': 11.11.0(@emotion/react@11.11.1(@types/react@17.0.71)(react@17.0.2))(@types/react@17.0.71)(react@17.0.2) + '@emotion/utils': 1.2.1 + '@floating-ui/react-dom': 2.0.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@types/gradient-parser': 0.1.3 + '@types/highlight-words-core': 1.2.1 + '@use-gesture/react': 10.3.1(react@17.0.2) + '@wordpress/a11y': 4.6.0 + '@wordpress/compose': 7.6.0(react@17.0.2) + '@wordpress/date': 5.6.0 + '@wordpress/deprecated': 4.6.0 + '@wordpress/dom': 4.6.0 + '@wordpress/element': 6.6.0 + '@wordpress/escape-html': 3.6.0 + '@wordpress/hooks': 4.6.0 + '@wordpress/html-entities': 4.6.0 + '@wordpress/i18n': 5.6.0 + '@wordpress/icons': 10.6.0(react@17.0.2) + '@wordpress/is-shallow-equal': 5.6.0 + '@wordpress/keycodes': 4.6.0 + '@wordpress/primitives': 4.6.0(react@17.0.2) + '@wordpress/private-apis': 1.6.0 + '@wordpress/rich-text': 7.6.0(react@17.0.2) + '@wordpress/warning': 3.6.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + date-fns: 3.6.0 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + framer-motion: 11.3.30(@emotion/is-prop-valid@1.2.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + is-plain-object: 5.0.0 + memize: 2.1.0 + path-to-regexp: 6.2.1 + re-resizable: 6.9.11(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + react: 17.0.2 + react-colorful: 5.6.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + react-dom: 17.0.2(react@17.0.2) + remove-accents: 0.5.0 + use-lilius: 2.0.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + uuid: 9.0.1 + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - supports-color + '@wordpress/compose@3.25.3(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -40331,8 +40159,8 @@ snapshots: '@babel/runtime': 7.25.0 '@types/lodash': 4.14.149 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.27.0 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 '@wordpress/element': 3.2.0 '@wordpress/is-shallow-equal': 4.24.0 '@wordpress/keycodes': 3.47.0 @@ -40350,7 +40178,7 @@ snapshots: '@babel/runtime': 7.25.0 '@types/mousetrap': 1.6.15 '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/dom': 3.27.0 '@wordpress/element': 4.20.0 '@wordpress/is-shallow-equal': 4.47.0 '@wordpress/keycodes': 3.47.0 @@ -40366,7 +40194,7 @@ snapshots: '@babel/runtime': 7.25.0 '@types/mousetrap': 1.6.15 '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/dom': 3.27.0 '@wordpress/element': 4.20.0 '@wordpress/is-shallow-equal': 4.47.0 '@wordpress/keycodes': 3.47.0 @@ -40383,7 +40211,7 @@ snapshots: '@types/lodash': 4.14.202 '@types/mousetrap': 1.6.15 '@wordpress/deprecated': 3.6.1 - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/is-shallow-equal': 4.24.0 '@wordpress/keycodes': 3.6.1 @@ -40397,7 +40225,7 @@ snapshots: '@wordpress/compose@5.5.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.25.0 '@types/lodash': 4.14.202 '@types/mousetrap': 1.6.15 '@wordpress/deprecated': 3.41.0 @@ -40415,7 +40243,7 @@ snapshots: '@wordpress/compose@5.5.0(react@18.3.1)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.25.0 '@types/lodash': 4.14.202 '@types/mousetrap': 1.6.15 '@wordpress/deprecated': 3.41.0 @@ -40435,8 +40263,8 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 '@wordpress/is-shallow-equal': 4.47.0 '@wordpress/keycodes': 3.47.0 @@ -40452,8 +40280,8 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 '@types/mousetrap': 1.6.15 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 '@wordpress/is-shallow-equal': 4.47.0 '@wordpress/keycodes': 3.47.0 @@ -40499,12 +40327,29 @@ snapshots: react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) + '@wordpress/compose@7.6.0(react@17.0.2)': + dependencies: + '@babel/runtime': 7.25.0 + '@types/mousetrap': 1.6.15 + '@wordpress/deprecated': 4.6.0 + '@wordpress/dom': 4.6.0 + '@wordpress/element': 6.6.0 + '@wordpress/is-shallow-equal': 5.6.0 + '@wordpress/keycodes': 4.6.0 + '@wordpress/priority-queue': 3.6.0 + '@wordpress/undo-manager': 1.6.0 + change-case: 4.1.2 + clipboard: 2.0.11 + mousetrap: 1.6.5 + react: 17.0.2 + use-memo-one: 1.1.3(react@17.0.2) + '@wordpress/core-commands@0.7.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 '@wordpress/commands': 0.9.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.22.0 '@wordpress/i18n': 4.47.0 '@wordpress/icons': 9.36.0 @@ -40707,6 +40552,25 @@ snapshots: '@wordpress/deprecated': 3.41.0 react: 17.0.2 + '@wordpress/data@10.6.0(react@17.0.2)': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/compose': 7.6.0(react@17.0.2) + '@wordpress/deprecated': 4.6.0 + '@wordpress/element': 6.6.0 + '@wordpress/is-shallow-equal': 5.6.0 + '@wordpress/priority-queue': 3.6.0 + '@wordpress/private-apis': 1.6.0 + '@wordpress/redux-routine': 5.6.0(redux@4.2.1) + deepmerge: 4.3.1 + equivalent-key-map: 0.2.2 + is-plain-object: 5.0.0 + is-promise: 4.0.0 + react: 17.0.2 + redux: 4.2.1 + rememo: 4.0.2 + use-memo-one: 1.1.3(react@17.0.2) + '@wordpress/data@4.27.3(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -40733,8 +40597,8 @@ snapshots: '@wordpress/deprecated': 3.6.1 '@wordpress/element': 3.2.0 '@wordpress/is-shallow-equal': 4.24.0 - '@wordpress/priority-queue': 2.47.0 - '@wordpress/redux-routine': 4.47.0(redux@4.2.1) + '@wordpress/priority-queue': 2.57.0 + '@wordpress/redux-routine': 4.57.0(redux@4.2.1) equivalent-key-map: 0.2.2 is-promise: 4.0.0 lodash: 4.17.21 @@ -40747,7 +40611,7 @@ snapshots: '@wordpress/data@6.15.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/compose': 5.20.0(react@17.0.2) '@wordpress/deprecated': 3.41.0 '@wordpress/element': 4.20.0 @@ -40817,7 +40681,7 @@ snapshots: '@wordpress/data@7.6.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/compose': 5.20.0(react@17.0.2) '@wordpress/deprecated': 3.41.0 '@wordpress/element': 4.20.0 @@ -40835,7 +40699,7 @@ snapshots: '@wordpress/data@7.6.0(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/compose': 5.20.0(react@18.3.1) '@wordpress/deprecated': 3.41.0 '@wordpress/element': 4.20.0 @@ -40927,6 +40791,28 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.3.1) + '@wordpress/dataviews@4.2.0(@emotion/is-prop-valid@1.2.1)(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + dependencies: + '@ariakit/react': 0.4.10(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@babel/runtime': 7.25.0 + '@wordpress/components': 28.6.0(@emotion/is-prop-valid@1.2.1)(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@wordpress/compose': 7.6.0(react@17.0.2) + '@wordpress/data': 10.6.0(react@17.0.2) + '@wordpress/element': 6.6.0 + '@wordpress/i18n': 5.6.0 + '@wordpress/icons': 10.6.0(react@17.0.2) + '@wordpress/primitives': 4.6.0(react@17.0.2) + '@wordpress/private-apis': 1.6.0 + '@wordpress/warning': 3.6.0 + clsx: 2.1.1 + react: 17.0.2 + remove-accents: 0.5.0 + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - react-dom + - supports-color + '@wordpress/date@4.44.0': dependencies: '@babel/runtime': 7.23.5 @@ -40934,13 +40820,6 @@ snapshots: moment: 2.29.4 moment-timezone: 0.5.43 - '@wordpress/date@4.47.0': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/deprecated': 3.47.0 - moment: 2.29.4 - moment-timezone: 0.5.43 - '@wordpress/date@4.57.0': dependencies: '@babel/runtime': 7.25.0 @@ -40954,6 +40833,13 @@ snapshots: moment: 2.29.4 moment-timezone: 0.5.43 + '@wordpress/date@5.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/deprecated': 4.6.0 + moment: 2.29.4 + moment-timezone: 0.5.43 + '@wordpress/dependency-extraction-webpack-plugin@2.9.0(webpack@4.47.0(webpack-cli@3.3.12))': dependencies: json2php: 0.0.4 @@ -41015,6 +40901,11 @@ snapshots: '@babel/runtime': 7.23.5 '@wordpress/hooks': 3.6.1 + '@wordpress/deprecated@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/hooks': 4.6.0 + '@wordpress/dom-ready@3.27.0': dependencies: '@babel/runtime': 7.23.5 @@ -41031,6 +40922,10 @@ snapshots: dependencies: '@babel/runtime': 7.23.5 + '@wordpress/dom-ready@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/dom@2.18.0': dependencies: '@babel/runtime': 7.25.0 @@ -41041,11 +40936,6 @@ snapshots: '@babel/runtime': 7.23.5 '@wordpress/deprecated': 3.41.0 - '@wordpress/dom@3.47.0': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom@3.57.0': dependencies: '@babel/runtime': 7.25.0 @@ -41056,6 +40946,11 @@ snapshots: '@babel/runtime': 7.23.5 lodash: 4.17.21 + '@wordpress/dom@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/deprecated': 4.6.0 + '@wordpress/e2e-test-utils-playwright@1.0.1(@playwright/test@1.46.1)(encoding@0.1.13)(typescript@5.3.2)': dependencies: '@playwright/test': 1.46.1 @@ -41134,7 +41029,7 @@ snapshots: '@wordpress/e2e-test-utils@4.16.1(encoding@0.1.13)(jest@25.5.4)(puppeteer@2.1.1)(react-native@0.73.0(@babel/core@7.23.5)(@babel/preset-env@7.23.6(@babel/core@7.23.5))(encoding@0.1.13)(react@18.3.1))': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.23.5 '@wordpress/keycodes': 2.19.3 '@wordpress/url': 2.22.2(react-native@0.73.0(@babel/core@7.23.5)(@babel/preset-env@7.23.6(@babel/core@7.23.5))(encoding@0.1.13)(react@18.3.1)) jest: 25.5.4 @@ -41160,7 +41055,7 @@ snapshots: '@wordpress/e2e-test-utils@4.16.1(encoding@0.1.13)(jest@29.7.0(@types/node@22.4.0)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.4.0)(typescript@5.3.3)))(puppeteer@17.1.3(encoding@0.1.13))(react-native@0.73.0(@babel/core@7.12.9)(@babel/preset-env@7.12.7(@babel/core@7.12.9))(encoding@0.1.13)(react@18.3.1))': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.23.5 '@wordpress/keycodes': 2.19.3 '@wordpress/url': 2.22.2(react-native@0.73.0(@babel/core@7.12.9)(@babel/preset-env@7.12.7(@babel/core@7.12.9))(encoding@0.1.13)(react@18.3.1)) jest: 29.7.0(@types/node@22.4.0)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.4.0)(typescript@5.3.3)) @@ -41264,7 +41159,7 @@ snapshots: '@wordpress/element': 4.4.1 '@wordpress/hooks': 3.6.1 '@wordpress/i18n': 4.6.1 - '@wordpress/icons': 8.2.3 + '@wordpress/icons': 8.4.0 '@wordpress/interface': 4.5.6(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2) '@wordpress/keyboard-shortcuts': 3.4.1(react@17.0.2) '@wordpress/keycodes': 3.6.1 @@ -41288,36 +41183,36 @@ snapshots: '@wordpress/edit-site@5.15.0(patch_hash=6y3l6gxu33zybfmvbjd23dtqda)(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@preact/signals-core@1.5.1)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.23.5 - '@wordpress/a11y': 3.47.0 + '@babel/runtime': 7.25.0 + '@wordpress/a11y': 3.57.0 '@wordpress/api-fetch': 6.44.0 '@wordpress/block-editor': 12.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/block-library': 8.24.1(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@preact/signals-core@1.5.1)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/commands': 0.9.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/components': 25.13.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) + '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/core-commands': 0.7.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/date': 4.44.0 '@wordpress/deprecated': 3.41.0 - '@wordpress/dom': 3.47.0 + '@wordpress/dom': 3.57.0 '@wordpress/editor': 13.24.1(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/element': 5.22.0 - '@wordpress/escape-html': 2.47.0 + '@wordpress/escape-html': 2.57.0 '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/html-entities': 3.57.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.36.0 '@wordpress/interface': 5.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/keyboard-shortcuts': 4.24.0(react@17.0.2) - '@wordpress/keycodes': 3.47.0 + '@wordpress/keycodes': 3.57.0 '@wordpress/media-utils': 4.38.0 '@wordpress/notices': 4.15.0(react@17.0.2) '@wordpress/plugins': 6.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/preferences': 3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/primitives': 3.45.0 + '@wordpress/primitives': 3.55.0 '@wordpress/private-apis': 0.20.0 '@wordpress/reusable-blocks': 4.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/router': 0.7.0(react@17.0.2) @@ -41369,7 +41264,7 @@ snapshots: '@wordpress/hooks': 3.6.1 '@wordpress/html-entities': 3.6.1 '@wordpress/i18n': 4.6.1 - '@wordpress/icons': 8.2.3 + '@wordpress/icons': 8.4.0 '@wordpress/keyboard-shortcuts': 3.4.1(react@17.0.2) '@wordpress/keycodes': 3.6.1 '@wordpress/media-utils': 3.4.1 @@ -41395,22 +41290,22 @@ snapshots: '@wordpress/editor@13.24.1(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/api-fetch': 6.44.0 '@wordpress/blob': 3.47.0 '@wordpress/block-editor': 12.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) - '@wordpress/date': 4.47.0 - '@wordpress/deprecated': 3.47.0 - '@wordpress/dom': 3.47.0 + '@wordpress/data': 9.27.0(react@17.0.2) + '@wordpress/date': 4.57.0 + '@wordpress/deprecated': 3.57.0 + '@wordpress/dom': 3.57.0 '@wordpress/element': 5.34.0 '@wordpress/hooks': 3.57.0 - '@wordpress/html-entities': 3.47.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/html-entities': 3.57.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 '@wordpress/keyboard-shortcuts': 4.24.0(react@17.0.2) '@wordpress/keycodes': 3.57.0 @@ -41420,7 +41315,7 @@ snapshots: '@wordpress/preferences': 3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/private-apis': 0.29.0 '@wordpress/reusable-blocks': 4.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/rich-text': 6.24.0(react@17.0.2) + '@wordpress/rich-text': 6.34.0(react@17.0.2) '@wordpress/server-side-render': 4.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/url': 3.48.0 '@wordpress/wordcount': 3.47.0 @@ -41517,6 +41412,17 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@wordpress/element@6.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@types/react': 17.0.71 + '@types/react-dom': 18.3.0 + '@wordpress/escape-html': 3.6.0 + change-case: 4.1.2 + is-plain-object: 5.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@wordpress/env@10.5.0': dependencies: chalk: 4.1.2 @@ -41546,6 +41452,10 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 + '@wordpress/escape-html@3.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/eslint-plugin@12.9.0(@babel/core@7.24.7)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.3.2))(eslint-import-resolver-webpack@0.13.2)(eslint-plugin-import@2.28.1)(eslint@8.55.0))(eslint-import-resolver-webpack@0.13.2(eslint-plugin-import@2.28.1)(webpack@5.91.0(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)))(eslint@8.55.0)(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.2)))(typescript@5.3.2)(wp-prettier@2.6.2)': dependencies: '@babel/core': 7.24.7 @@ -41715,13 +41625,13 @@ snapshots: '@wordpress/hooks@3.57.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/hooks@3.6.1': dependencies: '@babel/runtime': 7.24.7 - '@wordpress/hooks@4.4.0': + '@wordpress/hooks@4.6.0': dependencies: '@babel/runtime': 7.25.0 @@ -41741,6 +41651,10 @@ snapshots: dependencies: '@babel/runtime': 7.23.5 + '@wordpress/html-entities@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/i18n@3.20.0': dependencies: '@babel/runtime': 7.25.0 @@ -41769,15 +41683,6 @@ snapshots: sprintf-js: 1.1.3 tannin: 1.2.0 - '@wordpress/i18n@4.54.0': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/hooks': 3.57.0 - gettext-parser: 1.4.0 - memize: 2.1.0 - sprintf-js: 1.1.3 - tannin: 1.2.0 - '@wordpress/i18n@4.57.0': dependencies: '@babel/runtime': 7.25.0 @@ -41800,12 +41705,29 @@ snapshots: '@wordpress/i18n@5.0.1': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/hooks': 4.4.0 + '@wordpress/hooks': 4.6.0 gettext-parser: 1.4.0 memize: 2.1.0 sprintf-js: 1.1.3 tannin: 1.2.0 + '@wordpress/i18n@5.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/hooks': 4.6.0 + gettext-parser: 1.4.0 + memize: 2.1.0 + sprintf-js: 1.1.3 + tannin: 1.2.0 + + '@wordpress/icons@10.6.0(react@17.0.2)': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/element': 6.6.0 + '@wordpress/primitives': 4.6.0(react@17.0.2) + transitivePeerDependencies: + - react + '@wordpress/icons@4.1.0': dependencies: '@babel/runtime': 7.25.0 @@ -41836,12 +41758,6 @@ snapshots: '@wordpress/element': 5.22.0 '@wordpress/primitives': 3.45.0 - '@wordpress/icons@9.38.0': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/element': 5.34.0 - '@wordpress/primitives': 3.45.0 - '@wordpress/icons@9.48.0': dependencies: '@babel/runtime': 7.25.0 @@ -41867,7 +41783,7 @@ snapshots: '@wordpress/deprecated': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/i18n': 4.6.1 - '@wordpress/icons': 8.2.3 + '@wordpress/icons': 8.4.0 '@wordpress/plugins': 4.4.3(react@17.0.2) '@wordpress/preferences': 1.2.5(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2) '@wordpress/viewport': 4.20.0(react@17.0.2) @@ -41882,15 +41798,15 @@ snapshots: '@wordpress/interface@5.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.23.5 - '@wordpress/a11y': 3.47.0 - '@wordpress/components': 25.13.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) - '@wordpress/deprecated': 3.47.0 - '@wordpress/element': 5.24.0 - '@wordpress/i18n': 4.47.0 - '@wordpress/icons': 9.38.0 + '@babel/runtime': 7.25.0 + '@wordpress/a11y': 3.57.0 + '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) + '@wordpress/deprecated': 3.57.0 + '@wordpress/element': 5.34.0 + '@wordpress/i18n': 4.57.0 + '@wordpress/icons': 9.48.0 '@wordpress/plugins': 6.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/preferences': 3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/viewport': 5.24.0(react@17.0.2) @@ -41922,6 +41838,10 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 + '@wordpress/is-shallow-equal@5.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/jest-console@3.10.0(jest@25.5.4)': dependencies: '@babel/runtime': 7.25.0 @@ -42078,7 +41998,7 @@ snapshots: '@wordpress/keyboard-shortcuts@3.20.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/data': 7.6.0(react@17.0.2) '@wordpress/element': 4.20.0 '@wordpress/keycodes': 3.47.0 @@ -42108,7 +42028,7 @@ snapshots: '@wordpress/keyboard-shortcuts@4.24.0(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 '@wordpress/keycodes': 3.57.0 react: 17.0.2 @@ -42117,7 +42037,7 @@ snapshots: '@wordpress/keyboard-shortcuts@4.24.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/data': 9.17.0(react@18.3.1) + '@wordpress/data': 9.27.0(react@18.3.1) '@wordpress/element': 5.34.0 '@wordpress/keycodes': 3.57.0 react: 18.3.1 @@ -42151,6 +42071,11 @@ snapshots: '@babel/runtime': 7.25.0 '@wordpress/i18n': 5.0.1 + '@wordpress/keycodes@4.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/i18n': 5.6.0 + '@wordpress/lazy-import@1.34.0': dependencies: execa: 4.1.0 @@ -42176,21 +42101,21 @@ snapshots: '@wordpress/notices@3.12.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/a11y': 3.47.0 '@wordpress/data': 6.15.0(react@17.0.2) react: 17.0.2 '@wordpress/notices@3.12.0(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/a11y': 3.47.0 '@wordpress/data': 6.15.0(react@18.3.1) react: 18.3.1 '@wordpress/notices@3.31.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/a11y': 3.47.0 '@wordpress/data': 9.17.0(react@17.0.2) transitivePeerDependencies: @@ -42207,15 +42132,15 @@ snapshots: '@wordpress/notices@4.15.0(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/a11y': 3.57.0 + '@wordpress/data': 9.27.0(react@17.0.2) react: 17.0.2 '@wordpress/notices@4.15.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 - '@wordpress/data': 9.17.0(react@18.3.1) + '@wordpress/a11y': 3.57.0 + '@wordpress/data': 9.27.0(react@18.3.1) react: 18.3.1 '@wordpress/npm-package-json-lint-config@3.1.0(npm-package-json-lint@5.4.2)': @@ -42237,7 +42162,7 @@ snapshots: '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 - '@wordpress/html-entities': 3.47.0 + '@wordpress/html-entities': 3.57.0 '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 '@wordpress/notices': 4.15.0(react@17.0.2) @@ -42281,11 +42206,11 @@ snapshots: dependencies: '@babel/runtime': 7.25.0 '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/element': 5.34.0 '@wordpress/hooks': 3.57.0 '@wordpress/icons': 9.48.0 - '@wordpress/is-shallow-equal': 4.47.0 + '@wordpress/is-shallow-equal': 4.57.0 memize: 2.1.0 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -42355,7 +42280,7 @@ snapshots: '@wordpress/preferences@3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 @@ -42376,7 +42301,7 @@ snapshots: '@wordpress/preferences@3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 + '@wordpress/a11y': 3.57.0 '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/data': 9.27.0(react@18.3.1) '@wordpress/element': 5.34.0 @@ -42446,6 +42371,13 @@ snapshots: '@wordpress/element': 5.34.0 classnames: 2.3.2 + '@wordpress/primitives@4.6.0(react@17.0.2)': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/element': 6.6.0 + clsx: 2.1.1 + react: 17.0.2 + '@wordpress/priority-queue@1.11.2': dependencies: '@babel/runtime': 7.25.0 @@ -42460,13 +42392,18 @@ snapshots: '@babel/runtime': 7.25.0 requestidlecallback: 0.3.0 + '@wordpress/priority-queue@3.6.0': + dependencies: + '@babel/runtime': 7.25.0 + requestidlecallback: 0.3.0 + '@wordpress/private-apis@0.20.0': dependencies: '@babel/runtime': 7.25.0 '@wordpress/private-apis@0.29.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/private-apis@0.32.0': dependencies: @@ -42514,6 +42451,14 @@ snapshots: redux: 4.2.1 rungen: 0.3.2 + '@wordpress/redux-routine@5.6.0(redux@4.2.1)': + dependencies: + '@babel/runtime': 7.25.0 + is-plain-object: 5.0.0 + is-promise: 4.0.0 + redux: 4.2.1 + rungen: 0.3.2 + '@wordpress/reusable-blocks@3.20.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@wordpress/block-editor': 10.5.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -42539,9 +42484,9 @@ snapshots: '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 '@wordpress/notices': 4.15.0(react@17.0.2) '@wordpress/private-apis': 0.29.0 @@ -42564,7 +42509,7 @@ snapshots: '@babel/runtime': 7.25.0 '@wordpress/compose': 4.2.0(react@18.3.1) '@wordpress/data': 5.2.0(react@18.3.1)(redux@4.2.1) - '@wordpress/dom': 3.27.0 + '@wordpress/dom': 3.6.1 '@wordpress/element': 3.2.0 '@wordpress/escape-html': 2.57.0 '@wordpress/is-shallow-equal': 4.24.0 @@ -42637,36 +42582,6 @@ snapshots: react: 18.3.1 rememo: 3.0.0 - '@wordpress/rich-text@6.24.0(react@17.0.2)': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 - '@wordpress/compose': 6.34.0(react@17.0.2) - '@wordpress/data': 9.27.0(react@17.0.2) - '@wordpress/deprecated': 3.47.0 - '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.57.0 - '@wordpress/i18n': 4.57.0 - '@wordpress/keycodes': 3.57.0 - memize: 2.1.0 - react: 17.0.2 - rememo: 4.0.2 - - '@wordpress/rich-text@6.24.0(react@18.3.1)': - dependencies: - '@babel/runtime': 7.25.0 - '@wordpress/a11y': 3.47.0 - '@wordpress/compose': 6.34.0(react@18.3.1) - '@wordpress/data': 9.27.0(react@18.3.1) - '@wordpress/deprecated': 3.47.0 - '@wordpress/element': 5.34.0 - '@wordpress/escape-html': 2.57.0 - '@wordpress/i18n': 4.57.0 - '@wordpress/keycodes': 3.57.0 - memize: 2.1.0 - react: 18.3.1 - rememo: 4.0.2 - '@wordpress/rich-text@6.34.0(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -42695,9 +42610,23 @@ snapshots: memize: 2.1.0 react: 18.3.1 + '@wordpress/rich-text@7.6.0(react@17.0.2)': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/a11y': 4.6.0 + '@wordpress/compose': 7.6.0(react@17.0.2) + '@wordpress/data': 10.6.0(react@17.0.2) + '@wordpress/deprecated': 4.6.0 + '@wordpress/element': 6.6.0 + '@wordpress/escape-html': 3.6.0 + '@wordpress/i18n': 5.6.0 + '@wordpress/keycodes': 4.6.0 + memize: 2.1.0 + react: 17.0.2 + '@wordpress/router@0.7.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.0 '@wordpress/element': 5.22.0 '@wordpress/private-apis': 0.20.0 '@wordpress/url': 3.48.0 @@ -43019,7 +42948,7 @@ snapshots: '@wordpress/server-side-render@3.10.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.0 '@wordpress/api-fetch': 6.21.0 '@wordpress/blocks': 11.21.0(react@17.0.2) '@wordpress/components': 19.17.0(@types/react@17.0.71)(react-dom@17.0.2(react@17.0.2))(react-with-direction@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react@17.0.2) @@ -43084,7 +43013,7 @@ snapshots: '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/data': 9.27.0(react@17.0.2) - '@wordpress/deprecated': 3.47.0 + '@wordpress/deprecated': 3.57.0 '@wordpress/element': 5.34.0 '@wordpress/i18n': 4.57.0 '@wordpress/url': 3.48.0 @@ -43107,7 +43036,7 @@ snapshots: '@wordpress/style-engine@0.15.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 lodash: 4.17.21 '@wordpress/style-engine@0.2.0': @@ -43177,7 +43106,12 @@ snapshots: '@wordpress/undo-manager@0.7.0': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/is-shallow-equal': 4.47.0 + '@wordpress/is-shallow-equal': 4.57.0 + + '@wordpress/undo-manager@1.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@wordpress/is-shallow-equal': 5.6.0 '@wordpress/url@2.22.2(react-native@0.73.0(@babel/core@7.12.9)(@babel/preset-env@7.12.7(@babel/core@7.12.9))(encoding@0.1.13)(react@18.3.1))': dependencies: @@ -43225,7 +43159,7 @@ snapshots: '@wordpress/viewport@4.20.0(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@wordpress/compose': 5.20.0(react@17.0.2) '@wordpress/data': 7.6.0(react@17.0.2) react: 17.0.2 @@ -43241,8 +43175,8 @@ snapshots: '@wordpress/viewport@5.24.0(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 - '@wordpress/compose': 6.24.0(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 react: 17.0.2 @@ -43254,6 +43188,8 @@ snapshots: '@wordpress/warning@2.6.1': {} + '@wordpress/warning@3.6.0': {} + '@wordpress/widgets@3.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.25.0 @@ -43261,11 +43197,11 @@ snapshots: '@wordpress/block-editor': 12.15.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@wordpress/blocks': 12.24.0(react@17.0.2) '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/compose': 6.24.0(react@17.0.2) + '@wordpress/compose': 6.34.0(react@17.0.2) '@wordpress/core-data': 6.24.0(@babel/helper-module-imports@7.24.7)(@babel/types@7.25.2)(@types/react@17.0.71)(babel-plugin-macros@3.1.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@wordpress/data': 9.17.0(react@17.0.2) + '@wordpress/data': 9.27.0(react@17.0.2) '@wordpress/element': 5.34.0 - '@wordpress/i18n': 4.47.0 + '@wordpress/i18n': 4.57.0 '@wordpress/icons': 9.48.0 '@wordpress/notices': 4.15.0(react@17.0.2) classnames: 2.3.2 @@ -46817,7 +46753,7 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 date-fns@3.6.0: {} @@ -47739,7 +47675,7 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.3.2))(eslint-import-resolver-webpack@0.13.2)(eslint-plugin-import@2.28.1)(eslint@8.55.0): dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.55.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.3.2))(eslint-import-resolver-webpack@0.13.2)(eslint-plugin-import@2.28.1)(eslint@8.55.0))(eslint-import-resolver-webpack@0.13.2(eslint-plugin-import@2.28.1)(webpack@5.91.0(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)))(eslint@8.55.0) @@ -47756,7 +47692,7 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-webpack@0.13.8)(eslint-plugin-import@2.29.0)(eslint@8.55.0): dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.55.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-webpack@0.13.8)(eslint-plugin-import@2.29.0)(eslint@8.55.0))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.0)(webpack@5.89.0(webpack-cli@4.10.0)))(eslint@8.55.0) @@ -48109,7 +48045,7 @@ snapshots: eslint-plugin-jsx-a11y@6.8.0(eslint@8.55.0): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -48442,7 +48378,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -49170,7 +49106,7 @@ snapshots: follow-redirects@1.15.6(debug@4.3.4): optionalDependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) follow-redirects@1.5.10: dependencies: @@ -49391,6 +49327,14 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + framer-motion@11.3.30(@emotion/is-prop-valid@1.2.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): + dependencies: + tslib: 2.6.3 + optionalDependencies: + '@emotion/is-prop-valid': 1.2.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + framer-motion@6.5.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@motionone/dom': 10.12.0 @@ -52393,7 +52337,9 @@ snapshots: pretty-format: 24.9.0 throat: 4.1.0 transitivePeerDependencies: + - bufferutil - supports-color + - utf-8-validate jest-jasmine2@25.5.4: dependencies: @@ -54065,7 +54011,7 @@ snapshots: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.1 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) execa: 7.2.0 lilconfig: 2.1.0 listr2: 5.0.8(enquirer@2.4.1) @@ -55369,7 +55315,7 @@ snapshots: dependencies: carlo: 0.9.46 chokidar: 3.5.3 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) isbinaryfile: 3.0.3 mime: 2.6.0 opn: 5.5.0 @@ -55897,7 +55843,7 @@ snapshots: '@oclif/plugin-warn-if-update-available': 2.1.1(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3) aws-sdk: 2.1515.0 concurrently: 7.6.0 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) find-yarn-workspace-root: 2.0.0 fs-extra: 8.1.0 github-slugger: 1.5.0 @@ -56525,7 +56471,7 @@ snapshots: polished@4.2.2: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 popmotion@11.0.3: dependencies: @@ -57409,7 +57355,7 @@ snapshots: puppeteer-core@13.7.0(encoding@0.1.13): dependencies: cross-fetch: 3.1.5(encoding@0.1.13) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.981744 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -57448,7 +57394,7 @@ snapshots: '@puppeteer/browsers': 1.4.6(typescript@5.3.2) chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1147663 ws: 8.13.0 optionalDependencies: @@ -57464,7 +57410,7 @@ snapshots: '@puppeteer/browsers': 1.4.6(typescript@5.3.3) chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1147663 ws: 8.13.0 optionalDependencies: @@ -57480,7 +57426,7 @@ snapshots: '@puppeteer/browsers': 1.9.0 chromium-bidi: 0.5.1(devtools-protocol@0.0.1203626) cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1203626 ws: 8.14.2 transitivePeerDependencies: @@ -57516,7 +57462,7 @@ snapshots: puppeteer@17.1.3(encoding@0.1.13): dependencies: cross-fetch: 3.1.5(encoding@0.1.13) - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1036444 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -57850,7 +57796,7 @@ snapshots: react-docgen-typescript-plugin@1.0.5(typescript@5.3.2)(webpack@5.91.0(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -58011,7 +57957,7 @@ snapshots: react-inspector@5.1.1(react@17.0.2): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 is-dom: 1.1.0 prop-types: 15.8.1 react: 17.0.2 @@ -58399,7 +58345,7 @@ snapshots: react-select@3.2.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@emotion/cache': 10.0.29 '@emotion/core': 10.3.1(react@17.0.2) '@emotion/css': 10.0.27 @@ -59806,7 +59752,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -60554,7 +60500,7 @@ snapshots: colord: 2.9.3 cosmiconfig: 7.1.0 css-functions-list: 3.2.1 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 fastest-levenshtein: 1.0.16 file-entry-cache: 6.0.1 @@ -61327,7 +61273,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.23.5) - ts-jest@29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3): + ts-jest@29.1.1(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@27.5.1(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@16.18.68)(typescript@5.3.3)))(typescript@5.3.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -61859,14 +61805,14 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.89.0(webpack-cli@4.10.0)) - url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))): + url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@3.3.12(webpack@5.89.0)) + webpack: 4.47.0 optionalDependencies: - file-loader: 6.2.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) + file-loader: 6.2.0(webpack@4.47.0) url-loader@4.1.1(file-loader@6.2.0(webpack@5.89.0(uglify-js@3.17.4)(webpack-cli@4.10.0)))(webpack@5.89.0(uglify-js@3.17.4)(webpack-cli@4.10.0)): dependencies: @@ -61877,14 +61823,14 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.89.0(uglify-js@3.17.4)(webpack-cli@4.10.0)) - url-loader@4.1.1(file-loader@6.2.0(webpack@5.89.0))(webpack@4.47.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.89.0(webpack-cli@3.3.12)))(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 4.47.0 + webpack: 4.47.0(webpack-cli@3.3.12(webpack@5.89.0)) optionalDependencies: - file-loader: 6.2.0(webpack@4.47.0) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@3.3.12(webpack@5.89.0))) url-loader@4.1.1(file-loader@6.2.0(webpack@5.91.0(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.91.0(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@4.10.0)): dependencies: From dec89a13111f5c8cf2bc6864677b63453bc0ef35 Mon Sep 17 00:00:00 2001 From: Seghir Nadir Date: Fri, 30 Aug 2024 18:24:53 +0100 Subject: [PATCH 245/318] Revert "Store API: Do not resume orders with `pending` status (#50531)" (#51067) * Revert "Store API: Do not resume orders with `pending` status (#50531)" This reverts commit 3170acd1b0d15338e14079e464d1eabf64096751. * Add changefile(s) from automation for the following project(s): woocommerce --------- Co-authored-by: github-actions --- plugins/woocommerce/changelog/51067-revert-50531 | 4 ++++ .../woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 plugins/woocommerce/changelog/51067-revert-50531 diff --git a/plugins/woocommerce/changelog/51067-revert-50531 b/plugins/woocommerce/changelog/51067-revert-50531 new file mode 100644 index 00000000000..e65258f8afe --- /dev/null +++ b/plugins/woocommerce/changelog/51067-revert-50531 @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak +Comment: This reverts an existing PR. + diff --git a/plugins/woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php b/plugins/woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php index 4e80f2695f8..dedc60ae418 100644 --- a/plugins/woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php +++ b/plugins/woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php @@ -60,9 +60,8 @@ trait DraftOrderTrait { return true; } - // Failed orders and those needing payment can be retried if the cart hasn't changed. - // Pending orders are excluded from this check since they may be awaiting an update from the payment processor. - if ( $order_object->needs_payment() && ! $order_object->has_status( 'pending' ) && $order_object->has_cart_hash( wc()->cart->get_cart_hash() ) ) { + // Pending and failed orders can be retried if the cart hasn't changed. + if ( $order_object->needs_payment() && $order_object->has_cart_hash( wc()->cart->get_cart_hash() ) ) { return true; } From 3def18623e9b2a8df170000f6f3dbfb07b8caab7 Mon Sep 17 00:00:00 2001 From: Fernando Marichal Date: Fri, 30 Aug 2024 17:47:20 -0300 Subject: [PATCH 246/318] Fix variation selector display issues on the front end (#51023) * Add woocommerce class to single-product * Add changelog * Fix chevron alignment --- .../assets/js/blocks/single-product/save.tsx | 4 +++- .../changelog/fix-47794_variation_selector_display | 4 ++++ .../woocommerce/client/legacy/css/woocommerce.scss | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 plugins/woocommerce/changelog/fix-47794_variation_selector_display diff --git a/plugins/woocommerce-blocks/assets/js/blocks/single-product/save.tsx b/plugins/woocommerce-blocks/assets/js/blocks/single-product/save.tsx index 0feb6d8f950..4c8f4ef2973 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/single-product/save.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/single-product/save.tsx @@ -4,7 +4,9 @@ import { InnerBlocks, useBlockProps } from '@wordpress/block-editor'; const Save = () => { - const blockProps = useBlockProps.save(); + const blockProps = useBlockProps.save( { + className: 'woocommerce', + } ); return (
diff --git a/plugins/woocommerce/changelog/fix-47794_variation_selector_display b/plugins/woocommerce/changelog/fix-47794_variation_selector_display new file mode 100644 index 00000000000..84ebab4b1c5 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-47794_variation_selector_display @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Fix variation selector display issues on the front end #51023 diff --git a/plugins/woocommerce/client/legacy/css/woocommerce.scss b/plugins/woocommerce/client/legacy/css/woocommerce.scss index efd786f4d58..8c97759bf97 100644 --- a/plugins/woocommerce/client/legacy/css/woocommerce.scss +++ b/plugins/woocommerce/client/legacy/css/woocommerce.scss @@ -445,6 +445,18 @@ p.demo_store, min-width: 75%; display: inline-block; margin-right: 1em; + + /* We hide the default chevron because it cannot be directly modified. Instead, we add a custom chevron using a background image. */ + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding-right: 2em; + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj48cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT48L3N2Zz4=) + no-repeat; + background-size: 16px; + -webkit-background-size: 16px; + background-position: calc(100% - 12px) 50%; + -webkit-background-position: calc(100% - 12px) 50%; } td.label { From 36ede651db8382c89abec14a4e5c31ac22de159a Mon Sep 17 00:00:00 2001 From: RJ <27843274+rjchow@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:38:22 +0800 Subject: [PATCH 247/318] add: sanitise query params in remote logging (PHP) (#51013) --- .../fix-remote-logger-sanitise-query-params | 4 + .../src/Internal/Logging/RemoteLogger.php | 50 +- .../src/Internal/Logging/RemoteLoggerTest.php | 1051 +++++++++-------- 3 files changed, 628 insertions(+), 477 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-remote-logger-sanitise-query-params diff --git a/plugins/woocommerce/changelog/fix-remote-logger-sanitise-query-params b/plugins/woocommerce/changelog/fix-remote-logger-sanitise-query-params new file mode 100644 index 00000000000..bf2342b18e0 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-remote-logger-sanitise-query-params @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Add query params masking to remote logger diff --git a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php index 3bcb44f4c29..6daa928b46e 100644 --- a/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php +++ b/plugins/woocommerce/src/Internal/Logging/RemoteLogger.php @@ -70,7 +70,7 @@ class RemoteLogger extends \WC_Log_Handler { 'wc_version' => WC()->version, 'php_version' => phpversion(), 'wp_version' => get_bloginfo( 'version' ), - 'request_uri' => filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL ), + 'request_uri' => $this->sanitize_request_uri( filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL ) ), ), ); @@ -431,4 +431,52 @@ class RemoteLogger extends \WC_Log_Handler { protected function is_dev_or_local_environment() { return in_array( wp_get_environment_type(), array( 'development', 'local' ), true ); } + /** + * Sanitize the request URI to only allow certain query parameters. + * + * @param string $request_uri The request URI to sanitize. + * @return string The sanitized request URI. + */ + private function sanitize_request_uri( $request_uri ) { + $default_whitelist = array( 'path', 'page', 'step', 'task', 'tab' ); + + /** + * Filter to allow other plugins to whitelist request_uri query parameter values for unmasked remote logging. + * + * @since 9.4.0 + * + * @param string $default_whitelist The default whitelist of query parameters. + */ + $whitelist = apply_filters( 'woocommerce_remote_logger_request_uri_whitelist', $default_whitelist ); + + $parsed_url = wp_parse_url( $request_uri ); + if ( ! isset( $parsed_url['query'] ) ) { + return $request_uri; + } + + parse_str( $parsed_url['query'], $query_params ); + + foreach ( $query_params as $key => &$value ) { + if ( ! in_array( $key, $whitelist, true ) ) { + $value = 'xxxxxx'; + } + } + + $parsed_url['query'] = http_build_query( $query_params ); + return $this->build_url( $parsed_url ); + } + + /** + * Build a URL from its parsed components. + * + * @param array $parsed_url The parsed URL components. + * @return string The built URL. + */ + private function build_url( $parsed_url ) { + $path = $parsed_url['path'] ?? ''; + $query = isset( $parsed_url['query'] ) ? "?{$parsed_url['query']}" : ''; + $fragment = isset( $parsed_url['fragment'] ) ? "#{$parsed_url['fragment']}" : ''; + + return "$path$query$fragment"; + } } diff --git a/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php b/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php index 63327438a03..1133880bad2 100644 --- a/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php +++ b/plugins/woocommerce/tests/php/src/Internal/Logging/RemoteLoggerTest.php @@ -1,547 +1,646 @@ sut = wc_get_container()->get( RemoteLogger::class ); - } + class RemoteLoggerTest extends \WC_Unit_Test_Case { + /** + * System under test. + * + * @var RemoteLogger + */ + private $sut; - /** - * Tear down. - * - * @return void - */ - public function tearDown(): void { - $this->cleanup_filters(); - delete_option( 'woocommerce_feature_remote_logging_enabled' ); - delete_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); - global $wpdb; - $wpdb->query( "DELETE FROM {$wpdb->prefix}wc_rate_limits" ); - WC_Cache_Helper::invalidate_cache_group( WC_Rate_Limiter::CACHE_GROUP ); - } - - /** - * Cleanup filters used in tests. - * - * @return void - */ - private function cleanup_filters() { - $filters = array( - 'option_woocommerce_admin_remote_feature_enabled', - 'option_woocommerce_allow_tracking', - 'option_woocommerce_version', - 'option_woocommerce_remote_variant_assignment', - 'plugins_api', - 'pre_http_request', - 'woocommerce_remote_logger_formatted_log_data', - 'pre_site_transient_update_plugins', - ); - foreach ( $filters as $filter ) { - remove_all_filters( $filter ); + /** + * Set up test + * + * @return void + */ + public function setUp(): void { + parent::setUp(); + $this->sut = wc_get_container()->get( RemoteLogger::class ); } - } - /** - * @testdox Remote logging is allowed when all conditions are met - */ - public function test_remote_logging_allowed() { - $this->setup_remote_logging_conditions( true ); - $this->assertTrue( $this->sut->is_remote_logging_allowed() ); - } + /** + * Tear down. + * + * @return void + */ + public function tearDown(): void { + $this->cleanup_filters(); + delete_option( 'woocommerce_feature_remote_logging_enabled' ); + delete_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); + global $wpdb; + $wpdb->query( "DELETE FROM {$wpdb->prefix}wc_rate_limits" ); + WC_Cache_Helper::invalidate_cache_group( WC_Rate_Limiter::CACHE_GROUP ); + } - /** - * @testdox Remote logging is not allowed under various conditions - * @dataProvider remote_logging_disallowed_provider - * - * @param string $condition The condition being tested. - * @param callable $setup_callback Callback to set up the test condition. - */ - public function test_remote_logging_not_allowed( $condition, $setup_callback ) { - $this->setup_remote_logging_conditions( true ); - $setup_callback( $this ); - $this->assertFalse( $this->sut->is_remote_logging_allowed() ); - } + /** + * Cleanup filters used in tests. + * + * @return void + */ + private function cleanup_filters() { + $filters = array( + 'option_woocommerce_admin_remote_feature_enabled', + 'option_woocommerce_allow_tracking', + 'option_woocommerce_version', + 'option_woocommerce_remote_variant_assignment', + 'plugins_api', + 'pre_http_request', + 'woocommerce_remote_logger_formatted_log_data', + 'pre_site_transient_update_plugins', + 'woocommerce_remote_logger_request_uri_whitelist', + ); + foreach ( $filters as $filter ) { + remove_all_filters( $filter ); + } + } - /** - * Data provider for test_remote_logging_not_allowed. - * - * @return array[] Test cases with conditions and setup callbacks. - */ - public function remote_logging_disallowed_provider() { - return array( - 'feature flag disabled' => array( - 'condition' => 'feature flag disabled', - 'setup' => fn() => update_option( 'woocommerce_feature_remote_logging_enabled', 'no' ), - ), - 'tracking opted out' => array( - 'condition' => 'tracking opted out', - 'setup' => fn() => add_filter( 'option_woocommerce_allow_tracking', fn() => 'no' ), - ), - 'high variant assignment' => array( - 'condition' => 'high variant assignment', - 'setup' => fn() => add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 15 ), - ), - 'outdated version' => array( - 'condition' => 'outdated version', - 'setup' => function () { - $version = WC()->version; - // Next major version. (e.g. 9.0.1 -> 10.0.0). - $next_version = implode( - '.', - array_map( - function ( $n, $i ) { - return 0 === $i ? $n + 1 : 0; - }, - explode( '.', $version ), - array_keys( explode( '.', $version ) ) - ) - ); + /** + * @testdox Remote logging is allowed when all conditions are met + */ + public function test_remote_logging_allowed() { + $this->setup_remote_logging_conditions( true ); + $this->assertTrue( $this->sut->is_remote_logging_allowed() ); + } - set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $next_version, WEEK_IN_SECONDS ); - }, - ), - ); - } + /** + * @testdox Remote logging is not allowed under various conditions + * @dataProvider remote_logging_disallowed_provider + * + * @param string $condition The condition being tested. + * @param callable $setup_callback Callback to set up the test condition. + */ + public function test_remote_logging_not_allowed( $condition, $setup_callback ) { + $this->setup_remote_logging_conditions( true ); + $setup_callback( $this ); + $this->assertFalse( $this->sut->is_remote_logging_allowed() ); + } + /** + * Data provider for test_remote_logging_not_allowed. + * + * @return array[] Test cases with conditions and setup callbacks. + */ + public function remote_logging_disallowed_provider() { + return array( + 'feature flag disabled' => array( + 'condition' => 'feature flag disabled', + 'setup' => fn() => update_option( 'woocommerce_feature_remote_logging_enabled', 'no' ), + ), + 'tracking opted out' => array( + 'condition' => 'tracking opted out', + 'setup' => fn() => add_filter( 'option_woocommerce_allow_tracking', fn() => 'no' ), + ), + 'high variant assignment' => array( + 'condition' => 'high variant assignment', + 'setup' => fn() => add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 15 ), + ), + 'outdated version' => array( + 'condition' => 'outdated version', + 'setup' => function () { + $version = WC()->version; + // Next major version. (e.g. 9.0.1 -> 10.0.0). + $next_version = implode( + '.', + array_map( + function ( $n, $i ) { + return 0 === $i ? $n + 1 : 0; + }, + explode( '.', $version ), + array_keys( explode( '.', $version ) ) + ) + ); - /** - * @testdox should_current_version_be_logged method behaves correctly - * @dataProvider should_current_version_be_logged_provider - * - * @param string $current_version The current WooCommerce version. - * @param string $new_version The new WooCommerce version. - * @param string $transient_value The value of the transient. - * @param bool $expected The expected result. - */ - public function test_should_current_version_be_logged( $current_version, $new_version, $transient_value, $expected ) { - $wc_version = WC()->version; - WC()->version = $current_version; + set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $next_version, WEEK_IN_SECONDS ); + }, + ), + ); + } - // Set up the transient. - if ( null !== $transient_value ) { - set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $transient_value, WEEK_IN_SECONDS ); - } else { + /** + * @testdox should_current_version_be_logged method behaves correctly + * @dataProvider should_current_version_be_logged_provider + * + * @param string $current_version The current WooCommerce version. + * @param string $new_version The new WooCommerce version. + * @param string $transient_value The value of the transient. + * @param bool $expected The expected result. + */ + public function test_should_current_version_be_logged( $current_version, $new_version, $transient_value, $expected ) { + $wc_version = WC()->version; + WC()->version = $current_version; + + // Set up the transient. + if ( null !== $transient_value ) { + set_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT, $transient_value, WEEK_IN_SECONDS ); + } else { + delete_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); + + $this->setup_mock_plugin_updates( $new_version ); + } + + $result = $this->invoke_private_method( $this->sut, 'should_current_version_be_logged', array() ); + $this->assertEquals( $expected, $result ); + + // Clean up. delete_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); - $this->setup_mock_plugin_updates( $new_version ); + WC()->version = $wc_version; } - $result = $this->invoke_private_method( $this->sut, 'should_current_version_be_logged', array() ); - $this->assertEquals( $expected, $result ); - - // Clean up. - delete_site_transient( RemoteLogger::WC_NEW_VERSION_TRANSIENT ); - - WC()->version = $wc_version; - } - - /** - * Data provider for test_should_current_version_be_logged. - */ - public function should_current_version_be_logged_provider() { - return array( - 'current version is latest (transient set)' => array( '9.2.0', '9.2.0', '9.2.0', true ), - 'current version is newer (transient set)' => array( '9.3.0', '9.2.0', '9.2.0', true ), - 'current version is older (transient set)' => array( '9.1.0', '9.2.0', '9.2.0', false ), - 'new version is null (transient set)' => array( '9.2.0', null, null, true ), - 'transient not set, current version is latest' => array( '9.2.0', '9.2.0', null, true ), - 'transient not set, current version is newer' => array( '9.3.0', '9.2.0', null, true ), - 'transient not set, current version is older' => array( '9.1.0', '9.2.0', null, false ), - 'transient not set, new version is null' => array( '9.2.0', null, null, true ), - ); - } - - /** - * @testdox fetch_new_woocommerce_version method returns correct version - */ - public function test_fetch_new_woocommerce_version() { - $this->setup_mock_plugin_updates( '9.3.0' ); - - $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); - $this->assertEquals( '9.3.0', $result, 'The result should be the latest version when an update is available.' ); - } - - /** - * @testdox fetch_new_woocommerce_version method returns null when no update is available - */ - public function test_fetch_new_woocommerce_version_no_update() { - add_filter( 'pre_site_transient_update_plugins', fn() => array() ); - - $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); - $this->assertNull( $result, 'The result should be null when no update is available.' ); - } - - /** - * @testdox get_formatted_log method returns expected array structure - * @dataProvider get_formatted_log_provider - * - * @param string $level The log level. - * @param string $message The log message. - * @param array $context The log context. - * @param array $expected The expected formatted log array. - */ - public function test_get_formatted_log( $level, $message, $context, $expected ) { - $formatted_log = $this->sut->get_formatted_log( $level, $message, $context ); - foreach ( $expected as $key => $value ) { - $this->assertArrayHasKey( $key, $formatted_log ); - $this->assertEquals( $value, $formatted_log[ $key ] ); + /** + * Data provider for test_should_current_version_be_logged. + */ + public function should_current_version_be_logged_provider() { + return array( + 'current version is latest (transient set)' => array( '9.2.0', '9.2.0', '9.2.0', true ), + 'current version is newer (transient set)' => array( '9.3.0', '9.2.0', '9.2.0', true ), + 'current version is older (transient set)' => array( '9.1.0', '9.2.0', '9.2.0', false ), + 'new version is null (transient set)' => array( '9.2.0', null, null, true ), + 'transient not set, current version is latest' => array( '9.2.0', '9.2.0', null, true ), + 'transient not set, current version is newer' => array( '9.3.0', '9.2.0', null, true ), + 'transient not set, current version is older' => array( '9.1.0', '9.2.0', null, false ), + 'transient not set, new version is null' => array( '9.2.0', null, null, true ), + ); } - } - /** - * Data provider for test_get_formatted_log. - * - * @return array[] Test cases with log data and expected formatted output. - */ - public function get_formatted_log_provider() { - return array( - 'basic log data' => array( - 'error', - 'Fatal error occurred at line 123 in ' . ABSPATH . 'wp-content/file.php', - array( 'tags' => array( 'tag1', 'tag2' ) ), - array( - 'feature' => 'woocommerce_core', - 'severity' => 'error', - 'message' => 'Fatal error occurred at line 123 in **/wp-content/file.php', - 'tags' => array( 'woocommerce', 'php', 'tag1', 'tag2' ), - ), - ), - 'log with backtrace' => array( - 'error', - 'Test error message', - array( 'backtrace' => ABSPATH . 'wp-content/plugins/woocommerce/file.php' ), - array( 'trace' => '**/woocommerce/file.php' ), - ), - 'log with extra attributes' => array( - 'error', - 'Test error message', - array( - 'extra' => array( - 'key1' => 'value1', - 'key2' => 'value2', + /** + * @testdox fetch_new_woocommerce_version method returns correct version + */ + public function test_fetch_new_woocommerce_version() { + $this->setup_mock_plugin_updates( '9.3.0' ); + + $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); + $this->assertEquals( '9.3.0', $result, 'The result should be the latest version when an update is available.' ); + } + + /** + * @testdox fetch_new_woocommerce_version method returns null when no update is available + */ + public function test_fetch_new_woocommerce_version_no_update() { + add_filter( 'pre_site_transient_update_plugins', fn() => array() ); + + $result = $this->invoke_private_method( $this->sut, 'fetch_new_woocommerce_version', array() ); + $this->assertNull( $result, 'The result should be null when no update is available.' ); + } + + + /** + * @testdox get_formatted_log method returns expected array structure + * @dataProvider get_formatted_log_provider + * + * @param string $level The log level. + * @param string $message The log message. + * @param array $context The log context. + * @param array $expected The expected formatted log array. + */ + public function test_get_formatted_log( $level, $message, $context, $expected ) { + $formatted_log = $this->sut->get_formatted_log( $level, $message, $context ); + foreach ( $expected as $key => $value ) { + $this->assertArrayHasKey( $key, $formatted_log ); + $this->assertEquals( $value, $formatted_log[ $key ] ); + } + } + + /** + * Data provider for test_get_formatted_log. + * + * @return array[] Test cases with log data and expected formatted output. + */ + public function get_formatted_log_provider() { + return array( + 'basic log data' => array( + 'error', + 'Fatal error occurred at line 123 in ' . ABSPATH . 'wp-content/file.php', + array( 'tags' => array( 'tag1', 'tag2' ) ), + array( + 'feature' => 'woocommerce_core', + 'severity' => 'error', + 'message' => 'Fatal error occurred at line 123 in **/wp-content/file.php', + 'tags' => array( 'woocommerce', 'php', 'tag1', 'tag2' ), ), ), - array( - 'extra' => array( - 'key1' => 'value1', - 'key2' => 'value2', + 'log with backtrace' => array( + 'error', + 'Test error message', + array( 'backtrace' => ABSPATH . 'wp-content/plugins/woocommerce/file.php' ), + array( 'trace' => '**/woocommerce/file.php' ), + ), + 'log with extra attributes' => array( + 'error', + 'Test error message', + array( + 'extra' => array( + 'key1' => 'value1', + 'key2' => 'value2', + ), + ), + array( + 'extra' => array( + 'key1' => 'value1', + 'key2' => 'value2', + ), ), ), - ), - ); - } + ); + } - /** - * @testdox should_handle method behaves correctly under different conditions - * @dataProvider should_handle_provider - * - * @param callable $setup Function to set up the test environment. - * @param string $level Log level to test. - * @param bool $expected Expected result of should_handle method. - */ - public function test_should_handle( $setup, $level, $expected ) { - $this->sut = $this->getMockBuilder( RemoteLogger::class ) + + /** + * @testdox get_formatted_log method correctly sanitizes request URI + */ + public function test_get_formatted_log_sanitizes_request_uri() { + global $mock_filter_input, $mock_return; + $mock_filter_input = true; + $mock_return = '/shop?path=home&user=admin&token=abc123'; + + $formatted_log = $this->sut->get_formatted_log( 'error', 'Test message', array() ); + + $mock_filter_input = false; + + $this->assertArrayHasKey( 'properties', $formatted_log ); + $this->assertArrayHasKey( 'request_uri', $formatted_log['properties'] ); + $this->assertNotNull( $formatted_log['properties']['request_uri'], 'Request URI should not be null' ); + $this->assertStringContainsString( 'path=home', $formatted_log['properties']['request_uri'] ); + $this->assertStringContainsString( 'user=xxxxxx', $formatted_log['properties']['request_uri'] ); + $this->assertStringContainsString( 'token=xxxxxx', $formatted_log['properties']['request_uri'] ); + } + + /** + * @testdox sanitize_request_uri method respects whitelist filter + */ + public function test_sanitize_request_uri_respects_whitelist_filter() { + add_filter( + 'woocommerce_remote_logger_request_uri_whitelist', + function ( $whitelist ) { + $whitelist[] = 'custom_param'; + return $whitelist; + } + ); + + $request_uri = '/shop?path=home&custom_param=value&token=abc123'; + $sanitized_uri = $this->invoke_private_method( $this->sut, 'sanitize_request_uri', array( $request_uri ) ); + $this->assertStringContainsString( 'path=home', $sanitized_uri ); + $this->assertStringContainsString( 'custom_param=value', $sanitized_uri ); + $this->assertStringContainsString( 'token=xxxxxx', $sanitized_uri ); + } + + /** + * @testdox sanitize_request_uri method correctly sanitizes request URIs + */ + public function test_sanitize_request_uri() { + $reflection = new \ReflectionClass( $this->sut ); + $method = $reflection->getMethod( 'sanitize_request_uri' ); + $method->setAccessible( true ); + + // Test with whitelisted parameters. + $request_uri = '/shop?path=home&page=2&step=1&task=checkout'; + $sanitized_uri = $method->invokeArgs( $this->sut, array( $request_uri ) ); + $this->assertStringContainsString( 'path=home', $sanitized_uri ); + $this->assertStringContainsString( 'page=2', $sanitized_uri ); + $this->assertStringContainsString( 'step=1', $sanitized_uri ); + $this->assertStringContainsString( 'task=checkout', $sanitized_uri ); + + // Test with non-whitelisted parameters. + $request_uri = '/shop?path=home&user=admin&token=abc123'; + $sanitized_uri = $method->invokeArgs( $this->sut, array( $request_uri ) ); + $this->assertStringContainsString( 'path=home', $sanitized_uri ); + $this->assertStringContainsString( 'user=xxxxxx', $sanitized_uri ); + $this->assertStringContainsString( 'token=xxxxxx', $sanitized_uri ); + + // Test with mixed parameters. + $request_uri = '/shop?path=home&page=2&user=admin&step=1&token=abc123'; + $sanitized_uri = $method->invokeArgs( $this->sut, array( $request_uri ) ); + $this->assertStringContainsString( 'path=home', $sanitized_uri ); + $this->assertStringContainsString( 'page=2', $sanitized_uri ); + $this->assertStringContainsString( 'step=1', $sanitized_uri ); + $this->assertStringContainsString( 'user=xxxxxx', $sanitized_uri ); + $this->assertStringContainsString( 'token=xxxxxx', $sanitized_uri ); + } + + /** + * @testdox should_handle method behaves correctly under different conditions + * @dataProvider should_handle_provider + * + * @param callable $setup Function to set up the test environment. + * @param string $level Log level to test. + * @param bool $expected Expected result of should_handle method. + */ + public function test_should_handle( $setup, $level, $expected ) { + $this->sut = $this->getMockBuilder( RemoteLogger::class ) ->onlyMethods( array( 'is_remote_logging_allowed', 'is_third_party_error' ) ) ->getMock(); - $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); - $this->sut->method( 'is_third_party_error' )->willReturn( false ); + $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); + $this->sut->method( 'is_third_party_error' )->willReturn( false ); - $setup( $this ); + $setup( $this ); - $result = $this->invoke_private_method( $this->sut, 'should_handle', array( $level, 'Test message', array() ) ); - $this->assertEquals( $expected, $result ); - } + $result = $this->invoke_private_method( $this->sut, 'should_handle', array( $level, 'Test message', array() ) ); + $this->assertEquals( $expected, $result ); + } - /** - * Data provider for test_should_handle method. - * - * @return array Test cases for should_handle method. - */ - public function should_handle_provider() { - return array( - 'throttled' => array( - fn() => WC_Rate_Limiter::set_rate_limit( RemoteLogger::RATE_LIMIT_ID, 10 ), - 'critical', - false, - ), - 'less severe than critical' => array( - fn() => null, - 'error', - false, - ), - 'critical level' => array( - fn() => null, - 'critical', - true, - ), - ); - } + /** + * Data provider for test_should_handle method. + * + * @return array Test cases for should_handle method. + */ + public function should_handle_provider() { + return array( + 'throttled' => array( + fn() => WC_Rate_Limiter::set_rate_limit( RemoteLogger::RATE_LIMIT_ID, 10 ), + 'critical', + false, + ), + 'less severe than critical' => array( + fn() => null, + 'error', + false, + ), + 'critical level' => array( + fn() => null, + 'critical', + true, + ), + ); + } - /** - * @testdox handle method applies filter and doesn't send logs when filtered to null - */ - public function test_handle_filtered_log_null() { - $this->sut = $this->getMockBuilder( RemoteLogger::class ) + /** + * @testdox handle method applies filter and doesn't send logs when filtered to null + */ + public function test_handle_filtered_log_null() { + $this->sut = $this->getMockBuilder( RemoteLogger::class ) ->onlyMethods( array( 'is_remote_logging_allowed' ) ) ->getMock(); - $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); + $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); - add_filter( 'woocommerce_remote_logger_formatted_log_data', fn() => null, 10, 4 ); - add_filter( 'pre_http_request', fn() => $this->fail( 'wp_safe_remote_post should not be called' ), 10, 3 ); + add_filter( 'woocommerce_remote_logger_formatted_log_data', fn() => null, 10, 4 ); + add_filter( 'pre_http_request', fn() => $this->fail( 'wp_safe_remote_post should not be called' ), 10, 3 ); - $this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) ); - } + $this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) ); + } - /** - * @testdox handle method does not send logs in dev environment - */ - public function test_handle_does_not_send_logs_in_dev_environment() { - $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) + /** + * @testdox handle method does not send logs in dev environment + */ + public function test_handle_does_not_send_logs_in_dev_environment() { + $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) ->onlyMethods( array( 'is_remote_logging_allowed' ) ) ->getMock(); - $this->sut->set_is_dev_or_local( true ); - $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); + $this->sut->set_is_dev_or_local( true ); + $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); - $this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) ); - } + $this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) ); + } - /** - * @testdox handle method successfully sends log - */ - public function test_handle_successful() { - $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) + /** + * @testdox handle method successfully sends log + */ + public function test_handle_successful() { + $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) ->onlyMethods( array( 'is_remote_logging_allowed' ) ) ->getMock(); - $this->sut->set_is_dev_or_local( false ); - $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); + $this->sut->set_is_dev_or_local( false ); + $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); - add_filter( - 'pre_http_request', - function ( $preempt, $args ) { - $this->assertArrayHasKey( 'body', $args ); - $this->assertArrayHasKey( 'headers', $args ); - return array( - 'response' => array( - 'code' => 200, - 'message' => 'OK', + add_filter( + 'pre_http_request', + function ( $preempt, $args ) { + $this->assertArrayHasKey( 'body', $args ); + $this->assertArrayHasKey( 'headers', $args ); + return array( + 'response' => array( + 'code' => 200, + 'message' => 'OK', + ), + 'body' => wp_json_encode( array( 'success' => true ) ), + ); + }, + 10, + 3 + ); + + $this->assertTrue( $this->sut->handle( time(), 'critical', 'Test message', array() ) ); + $this->assertTrue( WC_Rate_Limiter::retried_too_soon( RemoteLogger::RATE_LIMIT_ID ) ); + } + + /** + * @testdox handle method handles remote logging failure + */ + public function test_handle_remote_logging_failure() { + $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) + ->onlyMethods( array( 'is_remote_logging_allowed' ) ) + ->getMock(); + + $this->sut->set_is_dev_or_local( false ); + $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); + + add_filter( + 'pre_http_request', + function ( $preempt, $args, $url ) { + if ( 'https://public-api.wordpress.com/rest/v1.1/logstash' === $url ) { + throw new \Exception( 'Remote logging failed: A valid URL was not provided.' ); + } + return $preempt; + }, + 10, + 3 + ); + + $this->assertFalse( $this->sut->handle( time(), 'critical', 'Test message', array() ) ); + $this->assertTrue( WC_Rate_Limiter::retried_too_soon( RemoteLogger::RATE_LIMIT_ID ) ); + } + + /** + * @testdox is_third_party_error method correctly identifies third-party errors + * @dataProvider is_third_party_error_provider + * @param string $message The error message to check. + * @param array $context The context of the error. + * @param bool $expected_result The expected result of the check. + */ + public function test_is_third_party_error( $message, $context, $expected_result ) { + $result = $this->invoke_private_method( $this->sut, 'is_third_party_error', array( $message, $context ) ); + $this->assertEquals( $expected_result, $result ); + } + + /** + * Data provider for test_is_third_party_error. + * + * @return array[] Test cases. + */ + public function is_third_party_error_provider() { + return array( + array( 'Fatal error in ' . WC_ABSPATH . 'file.php', array(), false ), + array( 'Fatal error in /wp-content/file.php', array(), false ), + array( 'Fatal error in /wp-content/file.php', array( 'source' => 'fatal-errors' ), false ), + array( + 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', + array( + 'source' => 'fatal-errors', + 'backtrace' => array( '/wp-content/plugins/3rd-plugin/file.php', WC_ABSPATH . 'file.php' ), ), - 'body' => wp_json_encode( array( 'success' => true ) ), - ); - }, - 10, - 3 - ); - - $this->assertTrue( $this->sut->handle( time(), 'critical', 'Test message', array() ) ); - $this->assertTrue( WC_Rate_Limiter::retried_too_soon( RemoteLogger::RATE_LIMIT_ID ) ); - } - - /** - * @testdox handle method handles remote logging failure - */ - public function test_handle_remote_logging_failure() { - $this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class ) - ->onlyMethods( array( 'is_remote_logging_allowed' ) ) - ->getMock(); - - $this->sut->set_is_dev_or_local( false ); - $this->sut->method( 'is_remote_logging_allowed' )->willReturn( true ); - - add_filter( - 'pre_http_request', - function ( $preempt, $args, $url ) { - if ( 'https://public-api.wordpress.com/rest/v1.1/logstash' === $url ) { - throw new \Exception( 'Remote logging failed: A valid URL was not provided.' ); - } - return $preempt; - }, - 10, - 3 - ); - - $this->assertFalse( $this->sut->handle( time(), 'critical', 'Test message', array() ) ); - $this->assertTrue( WC_Rate_Limiter::retried_too_soon( RemoteLogger::RATE_LIMIT_ID ) ); - } - - /** - * @testdox is_third_party_error method correctly identifies third-party errors - * @dataProvider is_third_party_error_provider - * @param string $message The error message to check. - * @param array $context The context of the error. - * @param bool $expected_result The expected result of the check. - */ - public function test_is_third_party_error( $message, $context, $expected_result ) { - $result = $this->invoke_private_method( $this->sut, 'is_third_party_error', array( $message, $context ) ); - $this->assertEquals( $expected_result, $result ); - } - - /** - * Data provider for test_is_third_party_error. - * - * @return array[] Test cases. - */ - public function is_third_party_error_provider() { - return array( - array( 'Fatal error in ' . WC_ABSPATH . 'file.php', array(), false ), - array( 'Fatal error in /wp-content/file.php', array(), false ), - array( 'Fatal error in /wp-content/file.php', array( 'source' => 'fatal-errors' ), false ), - array( - 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', + false, + ), array( - 'source' => 'fatal-errors', - 'backtrace' => array( '/wp-content/plugins/3rd-plugin/file.php', WC_ABSPATH . 'file.php' ), + 'Fatal error in /wp-content/plugins/woocommerce-3rd-plugin/file.php', + array( + 'source' => 'fatal-errors', + 'backtrace' => array( WP_PLUGIN_DIR . 'woocommerce-3rd-plugin/file.php' ), + ), + true, ), - false, - ), - array( - 'Fatal error in /wp-content/plugins/woocommerce-3rd-plugin/file.php', array( - 'source' => 'fatal-errors', - 'backtrace' => array( WP_PLUGIN_DIR . 'woocommerce-3rd-plugin/file.php' ), + 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', + array( + 'source' => 'fatal-errors', + 'backtrace' => array( WP_PLUGIN_DIR . '3rd-plugin/file.php' ), + ), + true, ), - true, - ), - array( - 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', array( - 'source' => 'fatal-errors', - 'backtrace' => array( WP_PLUGIN_DIR . '3rd-plugin/file.php' ), + 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', + array( + 'source' => 'fatal-errors', + 'backtrace' => array( array( 'file' => WP_PLUGIN_DIR . '3rd-plugin/file.php' ) ), + ), + true, ), - true, - ), - array( - 'Fatal error in /wp-content/plugins/3rd-plugin/file.php', - array( - 'source' => 'fatal-errors', - 'backtrace' => array( array( 'file' => WP_PLUGIN_DIR . '3rd-plugin/file.php' ) ), + ); + } + + /** + * @testdox sanitize method correctly sanitizes paths + */ + public function test_sanitize() { + $message = WC_ABSPATH . 'includes/class-wc-test.php on line 123'; + $expected = '**/woocommerce/includes/class-wc-test.php on line 123'; + $result = $this->invoke_private_method( $this->sut, 'sanitize', array( $message ) ); + $this->assertEquals( $expected, $result ); + } + + /** + * @testdox sanitize_trace method correctly sanitizes stack traces + */ + public function test_sanitize_trace() { + $trace = array( + WC_ABSPATH . 'includes/class-wc-test.php:123', + ABSPATH . 'wp-includes/plugin.php:456', + ); + $expected = "**/woocommerce/includes/class-wc-test.php:123\n**/wp-includes/plugin.php:456"; + $result = $this->invoke_private_method( $this->sut, 'sanitize_trace', array( $trace ) ); + $this->assertEquals( $expected, $result ); + } + + /** + * Setup common conditions for remote logging tests. + * + * @param bool $enabled Whether remote logging is enabled. + */ + private function setup_remote_logging_conditions( $enabled = true ) { + update_option( 'woocommerce_feature_remote_logging_enabled', $enabled ? 'yes' : 'no' ); + add_filter( 'option_woocommerce_allow_tracking', fn() => 'yes' ); + add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 5 ); + $this->setup_mock_plugin_updates( $enabled ? WC()->version : '9.0.0' ); + } + + /** + * Set up mock plugin updates. + * + * @param string $new_version The new version of WooCommerce to simulate. + */ + private function setup_mock_plugin_updates( $new_version ) { + $update_plugins = (object) array( + 'response' => array( + WC_PLUGIN_BASENAME => (object) array( + 'new_version' => $new_version, + 'package' => 'https://downloads.wordpress.org/plugin/woocommerce.zip', + 'slug' => 'woocommerce', + ), ), - true, - ), - ); - } + ); + add_filter( 'pre_site_transient_update_plugins', fn() => $update_plugins ); + } - /** - * @testdox sanitize method correctly sanitizes paths - */ - public function test_sanitize() { - $message = WC_ABSPATH . 'includes/class-wc-test.php on line 123'; - $expected = '**/woocommerce/includes/class-wc-test.php on line 123'; - $result = $this->invoke_private_method( $this->sut, 'sanitize', array( $message ) ); - $this->assertEquals( $expected, $result ); + /** + * Helper method to invoke private methods. + * + * @param object $obj Object instance. + * @param string $method_name Name of the private method. + * @param array $parameters Parameters to pass to the method. + * @return mixed + */ + private function invoke_private_method( $obj, $method_name, $parameters = array() ) { + $reflection = new \ReflectionClass( get_class( $obj ) ); + $method = $reflection->getMethod( $method_name ); + $method->setAccessible( true ); + return $method->invokeArgs( $obj, $parameters ); + } } - /** - * @testdox sanitize_trace method correctly sanitizes stack traces - */ - public function test_sanitize_trace() { - $trace = array( - WC_ABSPATH . 'includes/class-wc-test.php:123', - ABSPATH . 'wp-includes/plugin.php:456', - ); - $expected = "**/woocommerce/includes/class-wc-test.php:123\n**/wp-includes/plugin.php:456"; - $result = $this->invoke_private_method( $this->sut, 'sanitize_trace', array( $trace ) ); - $this->assertEquals( $expected, $result ); - } - - /** - * Setup common conditions for remote logging tests. - * - * @param bool $enabled Whether remote logging is enabled. - */ - private function setup_remote_logging_conditions( $enabled = true ) { - update_option( 'woocommerce_feature_remote_logging_enabled', $enabled ? 'yes' : 'no' ); - add_filter( 'option_woocommerce_allow_tracking', fn() => 'yes' ); - add_filter( 'option_woocommerce_remote_variant_assignment', fn() => 5 ); - $this->setup_mock_plugin_updates( $enabled ? WC()->version : '9.0.0' ); - } - - - /** - * Set up mock plugin updates. - * - * @param string $new_version The new version of WooCommerce to simulate. - */ - private function setup_mock_plugin_updates( $new_version ) { - $update_plugins = (object) array( - 'response' => array( - WC_PLUGIN_BASENAME => (object) array( - 'new_version' => $new_version, - 'package' => 'https://downloads.wordpress.org/plugin/woocommerce.zip', - 'slug' => 'woocommerce', - ), - ), - ); - add_filter( 'pre_site_transient_update_plugins', fn() => $update_plugins ); - } - - /** - * Helper method to invoke private methods. - * - * @param object $obj Object instance. - * @param string $method_name Name of the private method. - * @param array $parameters Parameters to pass to the method. - * @return mixed - */ - private function invoke_private_method( $obj, $method_name, $parameters = array() ) { - $reflection = new \ReflectionClass( get_class( $obj ) ); - $method = $reflection->getMethod( $method_name ); - $method->setAccessible( true ); - return $method->invokeArgs( $obj, $parameters ); - } -} - //phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound, Squiz.Classes.ClassFileName.NoMatch, Suin.Classes.PSR4.IncorrectClassName -/** - * Mock class that extends RemoteLogger to allow overriding is_dev_or_local_environment. - */ -class RemoteLoggerWithEnvironmentOverride extends RemoteLogger { /** - * The is_dev_or_local value. - * - * @var bool + * Mock class that extends RemoteLogger to allow overriding is_dev_or_local_environment. */ - private $is_dev_or_local = false; + class RemoteLoggerWithEnvironmentOverride extends RemoteLogger { + /** + * The is_dev_or_local value. + * + * @var bool + */ + private $is_dev_or_local = false; - /** - * Set the is_dev_or_local value. - * - * @param bool $value The value to set. - */ - public function set_is_dev_or_local( $value ) { - $this->is_dev_or_local = $value; + /** + * Set the is_dev_or_local value. + * + * @param bool $value The value to set. + */ + public function set_is_dev_or_local( $value ) { + $this->is_dev_or_local = $value; + } + + /** + * @inheritDoc + */ + protected function is_dev_or_local_environment() { + return $this->is_dev_or_local; + } } +//phpcs:enable Generic.Files.OneObjectStructurePerFile.MultipleFound, Squiz.Classes.ClassFileName.NoMatch, Suin.Classes.PSR4.IncorrectClassName +} +/** + * Mocks for global functions used in RemoteLogger.php + */ +namespace Automattic\WooCommerce\Internal\Logging { /** - * @inheritDoc + * The filter_input function will return NULL if we change the $_SERVER variables at runtime, so we + * need to override it in RemoteLogger's namespace when we want it to return a specific value for testing. + * + * @return mixed */ - protected function is_dev_or_local_environment() { - return $this->is_dev_or_local; + function filter_input() { + global $mock_filter_input, $mock_return; + + if ( true === $mock_filter_input ) { + return $mock_return; + } else { + return call_user_func_array( '\filter_input', func_get_args() ); + } } } -//phpcs:enable Generic.Files.OneObjectStructurePerFile.MultipleFound, Squiz.Classes.ClassFileName.NoMatch, Suin.Classes.PSR4.IncorrectClassName From 2433664aa8460590b636ff145600f1a3aa7b64f3 Mon Sep 17 00:00:00 2001 From: Manish Menaria Date: Mon, 2 Sep 2024 12:39:33 +0530 Subject: [PATCH 248/318] Product Collection - Show product picker in Editor when collection requires a product but it doesn't exist (#50164) * Show product picker control in the editor when a product context is required but not provided Enhanced the Product Collection block by introducing the `selectedReference` attribute and implementing a product picker control. This control appears in the editor when a product context is required but not provided in the current template/page/post. 1. **block.json**: Added `selectedReference` attribute of type `object`. 2. **constants.ts**: Included `selectedReference` in the `queryContextIncludes` array. 3. **EditorProductPicker.tsx**: Created a new component for selecting products within the editor. 4. **editor.scss**: Added styles for the new Editor Product Picker component. 5. **index.tsx**: Updated logic to determine the component to render, incorporating the new Editor Product Picker. 6. **types.ts**: Defined types for `selectedReference` and updated `ProductCollectionAttributes` interface. This enhancement allows merchants to manually select a product for collections that require a product context, ensuring the block displays correctly even when the product context is not available in the current template/page/post. - **Product Picker Control**: Utilizes the existing `ProductControl` component for selecting products. This component is displayed in the editor when a collection requires a product context but it doesn't exist in the current template/page/post. * Update label on ProductControl component * Implement dynamic UI state management for product collection block - Introduced `ProductCollectionUIStatesInEditor` enum to define various UI states for the product collection block. - Added `getProductCollectionUIStateInEditor` utility function to determine the appropriate UI state based on context. - Updated `Edit` component to use `getProductCollectionUIStateInEditor` for dynamic state management. - Refactored `ProductCollectionContent` to utilize the new Editor UI state management. * Fix: Product picker isn't showing * Fix: Preview label state isn't showing * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Refactor WooCommerceBlockLocation type - Introduced specific interfaces for WooCommerceBlockLocation, including ProductLocation, ArchiveLocation, CartLocation, OrderLocation, and SiteLocation, to improve type safety and code clarity. - Updated createLocationObject function to return a BaseLocation type. - Refactored useSetPreviewState hook in product-collection utils: - Extracted termId from location.sourceData for cleaner and more readable code. - Replaced direct access of location.sourceData?.termId with termId variable. * Remove fallback to 0 in case there may be a product with id 0 * Use optional chaining to avoid undefined errors * Rename to * Change order of arguments in function * Pass boolean prop instead of making further recognition of the UI state in ProductCollectionContent * Destructure props in component * Rename to * Update names in enum * Rename to and change the structure to single number. * Rename location to * Add a method to choose a product in the product picker in Editor * Add E2E tests * Fix failing e2e tests by changing location to productCollectionLocation * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Don't allow selecting product variations * Minor code refactoring * Fix: Product control isn't showing products **Before** ```tsx const getRenderItemFunc = () => { if ( renderItem ) { return renderItem; } else if ( showVariations ) { return renderItemWithVariations; } return () => null; }; ``` As you can see above, `return () => null;` is returning a function which is causing the issue. This will render nothing in the list. I changed this to `return undefined;`. This way, we will use default render item function. * Translate text in ProductPicker component * Improve E2E test * Use createInterpolateElement to safely render strong HTML tag * Fix E2E tests * Fix E2E tests * Product Collection: Inspector control to change selected product (#50590) * Add Linked Product Control to Product Collection Block Inspector Controls - Introduced a new `LinkedProductControl` component in the Product Collection block's Inspector Controls. - This control allows users to link a specific product to the product collection via a dropdown with a search capability. - Added corresponding styles to `editor.scss`. - Integrated a `useGetProduct` hook in the `utils.tsx` to fetch and manage the state of the linked product data, including handling loading states and errors. - Updated the Inspector Controls to include the new Linked Product Control component, enhancing the block's customization options for users. * Add E2E tests * Hide product picker when product context is available * Improve logic to hide Linked Product Control * Add changefile(s) from automation for the following project(s): woocommerce-blocks * Remove hasError state from useGetProduct hook * Rename isShowLinkedProductControl to showLinkedProductControl * Convert jsxProductButton to ProductButton component * Refactor jsxPopoverContent to LinkedProductPopoverContent component * Improve UI of Linked Product Control * Address PR feedback * Fix E2E tests --------- Co-authored-by: github-actions * Rename isUsesReferencePreviewMode to isUsingReferencePreviewMode * Change order of conditions in getProductCollectionUIStateInEditor --------- Co-authored-by: github-actions --- .../product-collection/edit/ProductPicker.tsx | 81 +++++ .../product-collection/edit/editor.scss | 46 +++ .../blocks/product-collection/edit/index.tsx | 46 ++- .../edit/inspector-controls/index.tsx | 8 + .../linked-product-control.tsx | 166 +++++++++ .../edit/product-collection-content.tsx | 13 +- .../js/blocks/product-collection/types.ts | 13 + .../js/blocks/product-collection/utils.tsx | 177 ++++++--- .../js/blocks/product-template/edit.tsx | 2 +- .../js/blocks/product-template/utils.tsx | 70 +++- .../product-control/index.tsx | 17 +- .../product-collection.block_theme.spec.ts | 335 +++++++++++++++++- .../product-collection.page.ts | 57 ++- ...-context-linking-a-product-with-collection | 4 + ...-product-with-collection-inspector-control | 4 + 15 files changed, 953 insertions(+), 86 deletions(-) create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/ProductPicker.tsx create mode 100644 plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/linked-product-control.tsx create mode 100644 plugins/woocommerce/changelog/50164-add-44877-context-linking-a-product-with-collection create mode 100644 plugins/woocommerce/changelog/50590-add-44877-context-linking-a-product-with-collection-inspector-control diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/ProductPicker.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/ProductPicker.tsx new file mode 100644 index 00000000000..3d80edf035c --- /dev/null +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/ProductPicker.tsx @@ -0,0 +1,81 @@ +/** + * External dependencies + */ +import { __, sprintf } from '@wordpress/i18n'; +import { useBlockProps } from '@wordpress/block-editor'; +import { Icon, info } from '@wordpress/icons'; +import ProductControl from '@woocommerce/editor-components/product-control'; +import type { SelectedOption } from '@woocommerce/block-hocs'; +import { createInterpolateElement } from '@wordpress/element'; +import { + Placeholder, + // @ts-expect-error Using experimental features + __experimentalHStack as HStack, + // @ts-expect-error Using experimental features + __experimentalText as Text, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import type { ProductCollectionEditComponentProps } from '../types'; +import { getCollectionByName } from '../collections'; + +const ProductPicker = ( props: ProductCollectionEditComponentProps ) => { + const blockProps = useBlockProps(); + const attributes = props.attributes; + + const collection = getCollectionByName( attributes.collection ); + if ( ! collection ) { + return; + } + + return ( +
+ + + + + { createInterpolateElement( + sprintf( + /* translators: %s: collection title */ + __( + '%s requires a product to be selected in order to display associated items.', + 'woocommerce' + ), + collection.title + ), + { + strong: , + } + ) } + + + { + const isValidId = ( value[ 0 ]?.id ?? null ) !== null; + if ( isValidId ) { + props.setAttributes( { + query: { + ...attributes.query, + productReference: value[ 0 ].id, + }, + } ); + } + } } + messages={ { + search: __( 'Select a product', 'woocommerce' ), + } } + /> + +
+ ); +}; + +export default ProductPicker; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/editor.scss b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/editor.scss index 63ecbc2f692..4dac0fe0dc5 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/editor.scss +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/editor.scss @@ -168,3 +168,49 @@ $max-button-width: calc(100% / #{$max-button-columns}); color: var(--wp-components-color-accent-inverted, #fff); } } + +// Editor Product Picker +.wc-blocks-product-collection__editor-product-picker { + .wc-blocks-product-collection__info-icon { + fill: var(--wp--preset--color--luminous-vivid-orange, #e26f56); + } +} + +// Linked Product Control +.wc-block-product-collection-linked-product-control { + width: 100%; + text-align: left; + + &__button { + width: 100%; + height: 100%; + padding: 10px; + border: 1px solid $gray-300; + } + + &__image-container { + flex-shrink: 0; + width: 45px; + height: 45px; + + img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + } + } + + &__content { + text-align: left; + } +} + +.wc-block-product-collection-linked-product__popover-content .components-popover__content { + width: 100%; + + .woocommerce-search-list__search { + border: 0; + padding: 0; + } +} diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/index.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/index.tsx index de9dcb3c03d..4206a024714 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/index.tsx @@ -4,18 +4,25 @@ import { store as blockEditorStore } from '@wordpress/block-editor'; import { useState } from '@wordpress/element'; import { useSelect } from '@wordpress/data'; +import { useGetLocation } from '@woocommerce/blocks/product-template/utils'; /** * Internal dependencies */ -import type { ProductCollectionEditComponentProps } from '../types'; +import { + ProductCollectionEditComponentProps, + ProductCollectionUIStatesInEditor, +} from '../types'; import ProductCollectionPlaceholder from './product-collection-placeholder'; import ProductCollectionContent from './product-collection-content'; import CollectionSelectionModal from './collection-selection-modal'; import './editor.scss'; +import { getProductCollectionUIStateInEditor } from '../utils'; +import ProductPicker from './ProductPicker'; const Edit = ( props: ProductCollectionEditComponentProps ) => { const { clientId, attributes } = props; + const location = useGetLocation( props.context, props.clientId ); const [ isSelectionModalOpen, setIsSelectionModalOpen ] = useState( false ); const hasInnerBlocks = useSelect( @@ -24,9 +31,37 @@ const Edit = ( props: ProductCollectionEditComponentProps ) => { [ clientId ] ); - const Component = hasInnerBlocks - ? ProductCollectionContent - : ProductCollectionPlaceholder; + const productCollectionUIStateInEditor = + getProductCollectionUIStateInEditor( { + hasInnerBlocks, + location, + attributes: props.attributes, + usesReference: props.usesReference, + } ); + + /** + * Component to render based on the UI state. + */ + let Component, + isUsingReferencePreviewMode = false; + switch ( productCollectionUIStateInEditor ) { + case ProductCollectionUIStatesInEditor.COLLECTION_PICKER: + Component = ProductCollectionPlaceholder; + break; + case ProductCollectionUIStatesInEditor.PRODUCT_REFERENCE_PICKER: + Component = ProductPicker; + break; + case ProductCollectionUIStatesInEditor.VALID: + Component = ProductCollectionContent; + break; + case ProductCollectionUIStatesInEditor.VALID_WITH_PREVIEW: + Component = ProductCollectionContent; + isUsingReferencePreviewMode = true; + break; + default: + // By default showing collection chooser. + Component = ProductCollectionPlaceholder; + } return ( <> @@ -35,6 +70,9 @@ const Edit = ( props: ProductCollectionEditComponentProps ) => { openCollectionSelectionModal={ () => setIsSelectionModalOpen( true ) } + isUsingReferencePreviewMode={ isUsingReferencePreviewMode } + location={ location } + usesReference={ props.usesReference } /> { isSelectionModalOpen && ( ( filter: FilterName ) => { @@ -121,6 +122,13 @@ const ProductCollectionInspectorControls = ( return ( + + { diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/linked-product-control.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/linked-product-control.tsx new file mode 100644 index 00000000000..35606aff0a9 --- /dev/null +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/inspector-controls/linked-product-control.tsx @@ -0,0 +1,166 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import ProductControl from '@woocommerce/editor-components/product-control'; +import { SelectedOption } from '@woocommerce/block-hocs'; +import { useState, useMemo } from '@wordpress/element'; +import type { WooCommerceBlockLocation } from '@woocommerce/blocks/product-template/utils'; +import type { ProductResponseItem } from '@woocommerce/types'; +import { decodeEntities } from '@wordpress/html-entities'; +import { + PanelBody, + PanelRow, + Button, + Flex, + FlexItem, + Dropdown, + // @ts-expect-error Using experimental features + // eslint-disable-next-line @wordpress/no-unsafe-wp-apis + __experimentalText as Text, + Spinner, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { useGetProduct } from '../../utils'; +import type { + ProductCollectionQuery, + ProductCollectionSetAttributes, +} from '../../types'; + +const ProductButton: React.FC< { + isOpen: boolean; + onToggle: () => void; + product: ProductResponseItem | null; + isLoading: boolean; +} > = ( { isOpen, onToggle, product, isLoading } ) => { + if ( isLoading && ! product ) { + return ; + } + + return ( + + ); +}; + +const LinkedProductPopoverContent: React.FC< { + query: ProductCollectionQuery; + setAttributes: ProductCollectionSetAttributes; + setIsDropdownOpen: React.Dispatch< React.SetStateAction< boolean > >; +} > = ( { query, setAttributes, setIsDropdownOpen } ) => ( + { + const productId = value[ 0 ]?.id ?? null; + if ( productId !== null ) { + setAttributes( { + query: { + ...query, + productReference: productId, + }, + } ); + setIsDropdownOpen( false ); + } + } } + messages={ { + search: __( 'Select a product', 'woocommerce' ), + } } + /> +); + +const LinkedProductControl = ( { + query, + setAttributes, + location, + usesReference, +}: { + query: ProductCollectionQuery; + setAttributes: ProductCollectionSetAttributes; + location: WooCommerceBlockLocation; + usesReference: string[] | undefined; +} ) => { + const [ isDropdownOpen, setIsDropdownOpen ] = useState< boolean >( false ); + const { product, isLoading } = useGetProduct( query.productReference ); + + const showLinkedProductControl = useMemo( () => { + const isInRequiredLocation = usesReference?.includes( location.type ); + const isProductContextRequired = usesReference?.includes( 'product' ); + const isProductContextSelected = + ( query?.productReference ?? null ) !== null; + + return ( + isProductContextRequired && + ! isInRequiredLocation && + isProductContextSelected + ); + }, [ location.type, query?.productReference, usesReference ] ); + + if ( ! showLinkedProductControl ) return null; + + return ( + + + ( + + ) } + renderContent={ () => ( + + ) } + open={ isDropdownOpen } + onToggle={ () => setIsDropdownOpen( ! isDropdownOpen ) } + /> + + + ); +}; + +export default LinkedProductControl; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/product-collection-content.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/product-collection-content.tsx index dadbddb7751..35714946c42 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/product-collection-content.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/edit/product-collection-content.tsx @@ -10,7 +10,6 @@ import { useInstanceId } from '@wordpress/compose'; import { useEffect, useRef, useMemo } from '@wordpress/element'; import { Button } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; -import { useGetLocation } from '@woocommerce/blocks/product-template/utils'; import fastDeepEqual from 'fast-deep-equal/es6'; /** @@ -68,19 +67,23 @@ const useQueryId = ( const ProductCollectionContent = ( { preview: { setPreviewState, initialPreviewState } = {}, - usesReference, ...props }: ProductCollectionEditComponentProps ) => { const isInitialAttributesSet = useRef( false ); - const { clientId, attributes, setAttributes } = props; - const location = useGetLocation( props.context, props.clientId ); + const { + clientId, + attributes, + setAttributes, + location, + isUsingReferencePreviewMode, + } = props; useSetPreviewState( { setPreviewState, setAttributes, location, attributes, - usesReference, + isUsingReferencePreviewMode, } ); const blockProps = useBlockProps(); diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts index 4407c682abe..55a8ee9b460 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/types.ts @@ -9,6 +9,16 @@ import { type AttributeMetadata } from '@woocommerce/types'; */ import { WooCommerceBlockLocation } from '../product-template/utils'; +export enum ProductCollectionUIStatesInEditor { + COLLECTION_PICKER = 'collection_chooser', + PRODUCT_REFERENCE_PICKER = 'product_context_picker', + VALID_WITH_PREVIEW = 'uses_reference_preview_mode', + VALID = 'valid', + // Future states + // INVALID = 'invalid', + // DELETED_PRODUCT_REFERENCE = 'deleted_product_reference', +} + export interface ProductCollectionAttributes { query: ProductCollectionQuery; queryId: number; @@ -95,6 +105,7 @@ export interface ProductCollectionQuery { woocommerceHandPickedProducts: string[]; priceRange: undefined | PriceRange; filterable: boolean; + productReference?: number; } export type ProductCollectionEditComponentProps = @@ -108,6 +119,8 @@ export type ProductCollectionEditComponentProps = context: { templateSlug: string; }; + isUsingReferencePreviewMode: boolean; + location: WooCommerceBlockLocation; }; export type TProductCollectionOrder = 'asc' | 'desc'; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx index bdbd882e88a..0565027bfe1 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-collection/utils.tsx @@ -6,8 +6,10 @@ import { addFilter } from '@wordpress/hooks'; import { select } from '@wordpress/data'; import { isWpVersion } from '@woocommerce/settings'; import type { BlockEditProps, Block } from '@wordpress/blocks'; -import { useLayoutEffect } from '@wordpress/element'; +import { useEffect, useLayoutEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; +import type { ProductResponseItem } from '@woocommerce/types'; +import { getProduct } from '@woocommerce/editor-components/utils'; import { createBlock, // @ts-expect-error Type definitions for this function are missing in Guteberg @@ -18,13 +20,14 @@ import { * Internal dependencies */ import { - type ProductCollectionAttributes, - type TProductCollectionOrder, - type TProductCollectionOrderBy, - type ProductCollectionQuery, - type ProductCollectionDisplayLayout, - type PreviewState, - type SetPreviewState, + ProductCollectionAttributes, + TProductCollectionOrder, + TProductCollectionOrderBy, + ProductCollectionQuery, + ProductCollectionDisplayLayout, + PreviewState, + SetPreviewState, + ProductCollectionUIStatesInEditor, } from './types'; import { coreQueryPaginationBlockName, @@ -166,41 +169,14 @@ export const addProductCollectionToQueryPaginationParentOrAncestor = () => { }; /** - * Get the preview message for the Product Collection block based on the usesReference. - * There are two scenarios: - * 1. When usesReference is product, the preview message will be: - * "Actual products will vary depending on the product being viewed." - * 2. For all other usesReference, the preview message will be: - * "Actual products will vary depending on the page being viewed." - * - * This message will be shown when the usesReference isn't available on the Editor side, but is available on the Frontend. + * Get the message to show in the preview label when the block is in preview mode based + * on the `usesReference` value. */ export const getUsesReferencePreviewMessage = ( location: WooCommerceBlockLocation, - usesReference?: string[] + isUsingReferencePreviewMode: boolean ) => { - if ( ! ( Array.isArray( usesReference ) && usesReference.length > 0 ) ) { - return ''; - } - - if ( usesReference.includes( location.type ) ) { - /** - * Block shouldn't be in preview mode when: - * 1. Current location is archive and termId is available. - * 2. Current location is product and productId is available. - * - * Because in these cases, we have required context on the editor side. - */ - const isArchiveLocationWithTermId = - location.type === LocationType.Archive && - ( location.sourceData?.termId ?? null ) !== null; - const isProductLocationWithProductId = - location.type === LocationType.Product && - ( location.sourceData?.productId ?? null ) !== null; - if ( isArchiveLocationWithTermId || isProductLocationWithProductId ) { - return ''; - } - + if ( isUsingReferencePreviewMode ) { if ( location.type === LocationType.Product ) { return __( 'Actual products will vary depending on the product being viewed.', @@ -217,12 +193,77 @@ export const getUsesReferencePreviewMessage = ( return ''; }; +export const getProductCollectionUIStateInEditor = ( { + location, + usesReference, + attributes, + hasInnerBlocks, +}: { + location: WooCommerceBlockLocation; + usesReference?: string[] | undefined; + attributes: ProductCollectionAttributes; + hasInnerBlocks: boolean; +} ): ProductCollectionUIStatesInEditor => { + const isInRequiredLocation = usesReference?.includes( location.type ); + const isCollectionSelected = !! attributes.collection; + + /** + * Case 1: Product context picker + */ + const isProductContextRequired = usesReference?.includes( 'product' ); + const isProductContextSelected = + ( attributes.query?.productReference ?? null ) !== null; + if ( + isCollectionSelected && + isProductContextRequired && + ! isInRequiredLocation && + ! isProductContextSelected + ) { + return ProductCollectionUIStatesInEditor.PRODUCT_REFERENCE_PICKER; + } + + /** + * Case 2: Preview mode - based on `usesReference` value + */ + if ( isInRequiredLocation ) { + /** + * Block shouldn't be in preview mode when: + * 1. Current location is archive and termId is available. + * 2. Current location is product and productId is available. + * + * Because in these cases, we have required context on the editor side. + */ + const isArchiveLocationWithTermId = + location.type === LocationType.Archive && + ( location.sourceData?.termId ?? null ) !== null; + const isProductLocationWithProductId = + location.type === LocationType.Product && + ( location.sourceData?.productId ?? null ) !== null; + + if ( + ! isArchiveLocationWithTermId && + ! isProductLocationWithProductId + ) { + return ProductCollectionUIStatesInEditor.VALID_WITH_PREVIEW; + } + } + + /** + * Case 3: Collection chooser + */ + if ( ! hasInnerBlocks && ! isCollectionSelected ) { + return ProductCollectionUIStatesInEditor.COLLECTION_PICKER; + } + + return ProductCollectionUIStatesInEditor.VALID; +}; + export const useSetPreviewState = ( { setPreviewState, location, attributes, setAttributes, - usesReference, + isUsingReferencePreviewMode, }: { setPreviewState?: SetPreviewState | undefined; location: WooCommerceBlockLocation; @@ -231,6 +272,7 @@ export const useSetPreviewState = ( { attributes: Partial< ProductCollectionAttributes > ) => void; usesReference?: string[] | undefined; + isUsingReferencePreviewMode: boolean; } ) => { const setState = ( newPreviewState: PreviewState ) => { setAttributes( { @@ -240,8 +282,6 @@ export const useSetPreviewState = ( { }, } ); }; - const isCollectionUsesReference = - usesReference && usesReference?.length > 0; /** * When usesReference is available on Frontend but not on Editor side, @@ -249,10 +289,10 @@ export const useSetPreviewState = ( { */ const usesReferencePreviewMessage = getUsesReferencePreviewMessage( location, - usesReference + isUsingReferencePreviewMode ); useLayoutEffect( () => { - if ( isCollectionUsesReference ) { + if ( isUsingReferencePreviewMode ) { setAttributes( { __privatePreviewState: { isPreview: usesReferencePreviewMessage.length > 0, @@ -263,12 +303,12 @@ export const useSetPreviewState = ( { }, [ setAttributes, usesReferencePreviewMessage, - isCollectionUsesReference, + isUsingReferencePreviewMode, ] ); // Running setPreviewState function provided by Collection, if it exists. useLayoutEffect( () => { - if ( ! setPreviewState && ! isCollectionUsesReference ) { + if ( ! setPreviewState && ! isUsingReferencePreviewMode ) { return; } @@ -294,11 +334,14 @@ export const useSetPreviewState = ( { * - Products by tag * - Products by attribute */ + const termId = + location.type === LocationType.Archive + ? location.sourceData?.termId + : null; useLayoutEffect( () => { - if ( ! setPreviewState && ! isCollectionUsesReference ) { + if ( ! setPreviewState && ! isUsingReferencePreviewMode ) { const isGenericArchiveTemplate = - location.type === LocationType.Archive && - location.sourceData?.termId === null; + location.type === LocationType.Archive && termId === null; setAttributes( { __privatePreviewState: { @@ -315,11 +358,11 @@ export const useSetPreviewState = ( { }, [ attributes?.query?.inherit, usesReferencePreviewMessage, - location.sourceData?.termId, + termId, location.type, setAttributes, setPreviewState, - isCollectionUsesReference, + isUsingReferencePreviewMode, ] ); }; @@ -356,3 +399,35 @@ export const getDefaultProductCollection = () => }, createBlocksFromInnerBlocksTemplate( INNER_BLOCKS_TEMPLATE ) ); + +export const useGetProduct = ( productId: number | undefined ) => { + const [ product, setProduct ] = useState< ProductResponseItem | null >( + null + ); + const [ isLoading, setIsLoading ] = useState< boolean >( false ); + + useEffect( () => { + const fetchProduct = async () => { + if ( productId ) { + setIsLoading( true ); + try { + const fetchedProduct = ( await getProduct( + productId + ) ) as ProductResponseItem; + setProduct( fetchedProduct ); + } catch ( error ) { + setProduct( null ); + } finally { + setIsLoading( false ); + } + } else { + setProduct( null ); + setIsLoading( false ); + } + }; + + fetchProduct(); + }, [ productId ] ); + + return { product, isLoading }; +}; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx index 5c469725163..1c09035f46e 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx @@ -266,7 +266,7 @@ const ProductTemplateEdit = ( products: getEntityRecords( 'postType', postType, { ...query, ...restQueryArgs, - location, + productCollectionLocation: location, productCollectionQueryContext, previewState: __privateProductCollectionPreviewState, /** diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-template/utils.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-template/utils.tsx index 5f5344a7296..9106d24ba3c 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-template/utils.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-template/utils.tsx @@ -63,17 +63,65 @@ const prepareIsInGenericTemplate = ( entitySlug: string ): boolean => templateSlug === entitySlug; -export type WooCommerceBlockLocation = ReturnType< - typeof createLocationObject ->; +interface WooCommerceBaseLocation { + type: LocationType; + sourceData?: object | undefined; +} -const createLocationObject = ( - type: LocationType, - sourceData: Record< string, unknown > = {} -) => ( { - type, - sourceData, -} ); +interface ProductLocation extends WooCommerceBaseLocation { + type: LocationType.Product; + sourceData?: + | { + productId: number; + } + | undefined; +} + +interface ArchiveLocation extends WooCommerceBaseLocation { + type: LocationType.Archive; + sourceData?: + | { + taxonomy: string; + termId: number; + } + | undefined; +} + +interface CartLocation extends WooCommerceBaseLocation { + type: LocationType.Cart; + sourceData?: + | { + productIds: number[]; + } + | undefined; +} + +interface OrderLocation extends WooCommerceBaseLocation { + type: LocationType.Order; + sourceData?: + | { + orderId: number; + } + | undefined; +} + +interface SiteLocation extends WooCommerceBaseLocation { + type: LocationType.Site; + sourceData?: object | undefined; +} + +export type WooCommerceBlockLocation = + | ProductLocation + | ArchiveLocation + | CartLocation + | OrderLocation + | SiteLocation; + +const createLocationObject = ( type: LocationType, sourceData: object = {} ) => + ( { + type, + sourceData, + } as WooCommerceBlockLocation ); type ContextProperties = { templateSlug: string; @@ -83,7 +131,7 @@ type ContextProperties = { export const useGetLocation = < T, >( context: Context< T & ContextProperties >, clientId: string -) => { +): WooCommerceBlockLocation => { const templateSlug = context.templateSlug || ''; const postId = context.postId || null; diff --git a/plugins/woocommerce-blocks/assets/js/editor-components/product-control/index.tsx b/plugins/woocommerce-blocks/assets/js/editor-components/product-control/index.tsx index bfa1e5f2a85..f86f2878dc7 100644 --- a/plugins/woocommerce-blocks/assets/js/editor-components/product-control/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/editor-components/product-control/index.tsx @@ -62,6 +62,16 @@ interface ProductControlProps { * Whether to show variations in the list of items available. */ showVariations?: boolean; + /** + * Different messages to display in the component. + * If any of the messages are not provided, the default message will be used. + */ + messages?: { + list?: string; + noItems?: string; + search?: string; + updated?: string; + }; } const messages = { @@ -188,7 +198,7 @@ const ProductControl = ( } else if ( showVariations ) { return renderItemWithVariations; } - return () => null; + return undefined; }; if ( error ) { @@ -216,7 +226,10 @@ const ProductControl = ( onChange={ onChange } renderItem={ getRenderItemFunc() } onSearch={ onSearch } - messages={ messages } + messages={ { + ...messages, + ...props.messages, + } } isHierarchical /> ); diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts index af0839c5ca1..e38db1b526a 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.block_theme.spec.ts @@ -9,6 +9,7 @@ import { test as base, expect } from '@woocommerce/e2e-utils'; */ import ProductCollectionPage, { BLOCK_LABELS, + Collections, SELECTORS, } from './product-collection.page'; @@ -402,7 +403,7 @@ test.describe( 'Product Collection', () => { } ); } ); - test.describe( 'Location is recognised', () => { + test.describe( 'Location is recognized', () => { const filterRequest = ( request: Request ) => { const url = request.url(); return ( @@ -418,7 +419,9 @@ test.describe( 'Product Collection', () => { return ( url.includes( 'wp/v2/product' ) && searchParams.get( 'isProductCollectionBlock' ) === 'true' && - !! searchParams.get( `location[sourceData][productId]` ) + !! searchParams.get( + `productCollectionLocation[sourceData][productId]` + ) ); }; @@ -430,26 +433,30 @@ test.describe( 'Product Collection', () => { if ( locationType === 'product' ) { return { - type: searchParams.get( 'location[type]' ), + type: searchParams.get( 'productCollectionLocation[type]' ), productId: searchParams.get( - `location[sourceData][productId]` + `productCollectionLocation[sourceData][productId]` ), }; } if ( locationType === 'archive' ) { return { - type: searchParams.get( 'location[type]' ), + type: searchParams.get( 'productCollectionLocation[type]' ), taxonomy: searchParams.get( - `location[sourceData][taxonomy]` + `productCollectionLocation[sourceData][taxonomy]` + ), + termId: searchParams.get( + `productCollectionLocation[sourceData][termId]` ), - termId: searchParams.get( `location[sourceData][termId]` ), }; } return { - type: searchParams.get( 'location[type]' ), - sourceData: searchParams.get( `location[sourceData]` ), + type: searchParams.get( 'productCollectionLocation[type]' ), + sourceData: searchParams.get( + `productCollectionLocation[sourceData]` + ), }; }; @@ -482,10 +489,10 @@ test.describe( 'Product Collection', () => { pageObject.BLOCK_NAME ); - const locationReuqestPromise = + const locationRequestPromise = page.waitForRequest( filterProductRequest ); await pageObject.chooseCollectionInTemplate( 'featured' ); - const locationRequest = await locationReuqestPromise; + const locationRequest = await locationRequestPromise; const { type, productId } = getLocationDetailsFromRequest( locationRequest, @@ -961,3 +968,309 @@ test.describe( 'Product Collection', () => { } ); } ); } ); + +test.describe( 'Testing "usesReference" argument in "registerProductCollection"', () => { + const MY_REGISTERED_COLLECTIONS = { + myCustomCollectionWithProductContext: { + name: 'My Custom Collection - Product Context', + label: 'Block: My Custom Collection - Product Context', + previewLabelTemplate: [ 'woocommerce/woocommerce//single-product' ], + shouldShowProductPicker: true, + }, + myCustomCollectionWithCartContext: { + name: 'My Custom Collection - Cart Context', + label: 'Block: My Custom Collection - Cart Context', + previewLabelTemplate: [ 'woocommerce/woocommerce//page-cart' ], + shouldShowProductPicker: false, + }, + myCustomCollectionWithOrderContext: { + name: 'My Custom Collection - Order Context', + label: 'Block: My Custom Collection - Order Context', + previewLabelTemplate: [ + 'woocommerce/woocommerce//order-confirmation', + ], + shouldShowProductPicker: false, + }, + myCustomCollectionWithArchiveContext: { + name: 'My Custom Collection - Archive Context', + label: 'Block: My Custom Collection - Archive Context', + previewLabelTemplate: [ + 'woocommerce/woocommerce//taxonomy-product_cat', + ], + shouldShowProductPicker: false, + }, + myCustomCollectionMultipleContexts: { + name: 'My Custom Collection - Multiple Contexts', + label: 'Block: My Custom Collection - Multiple Contexts', + previewLabelTemplate: [ + 'woocommerce/woocommerce//single-product', + 'woocommerce/woocommerce//order-confirmation', + ], + shouldShowProductPicker: true, + }, + }; + + // Activate plugin which registers custom product collections + test.beforeEach( async ( { requestUtils } ) => { + await requestUtils.activatePlugin( + 'register-product-collection-tester' + ); + } ); + + Object.entries( MY_REGISTERED_COLLECTIONS ).forEach( + ( [ key, collection ] ) => { + for ( const template of collection.previewLabelTemplate ) { + test( `Collection "${ collection.name }" should show preview label in "${ template }"`, async ( { + pageObject, + editor, + } ) => { + await pageObject.goToEditorTemplate( template ); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInTemplate( + key as Collections + ); + + const block = editor.canvas.getByLabel( collection.label ); + const previewButtonLocator = block.getByTestId( + SELECTORS.previewButtonTestID + ); + + await expect( previewButtonLocator ).toBeVisible(); + } ); + } + + test( `Collection "${ collection.name }" should not show preview label in a post`, async ( { + pageObject, + editor, + admin, + } ) => { + await admin.createNewPost(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost( key as Collections ); + + // Check visibility of product picker + const editorProductPicker = editor.canvas.locator( + SELECTORS.productPicker + ); + const expectedVisibility = collection.shouldShowProductPicker + ? 'toBeVisible' + : 'toBeHidden'; + await expect( editorProductPicker )[ expectedVisibility ](); + + if ( collection.shouldShowProductPicker ) { + await pageObject.chooseProductInEditorProductPickerIfAvailable( + editor.canvas + ); + } + + // At this point, the product picker should be hidden + await expect( editorProductPicker ).toBeHidden(); + + // Check visibility of preview label + const block = editor.canvas.getByLabel( collection.label ); + const previewButtonLocator = block.getByTestId( + SELECTORS.previewButtonTestID + ); + + await expect( previewButtonLocator ).toBeHidden(); + } ); + + test( `Collection "${ collection.name }" should not show preview label in Product Catalog template`, async ( { + pageObject, + editor, + } ) => { + await pageObject.goToProductCatalogAndInsertCollection( + key as Collections + ); + + const block = editor.canvas.getByLabel( collection.label ); + const previewButtonLocator = block.getByTestId( + SELECTORS.previewButtonTestID + ); + + await expect( previewButtonLocator ).toBeHidden(); + } ); + } + ); +} ); + +test.describe( 'Product picker', () => { + const MY_REGISTERED_COLLECTIONS_THAT_NEEDS_PRODUCT = { + myCustomCollectionWithProductContext: { + name: 'My Custom Collection - Product Context', + label: 'Block: My Custom Collection - Product Context', + collection: + 'woocommerce/product-collection/my-custom-collection-product-context', + }, + myCustomCollectionMultipleContexts: { + name: 'My Custom Collection - Multiple Contexts', + label: 'Block: My Custom Collection - Multiple Contexts', + collection: + 'woocommerce/product-collection/my-custom-collection-multiple-contexts', + }, + }; + + // Activate plugin which registers custom product collections + test.beforeEach( async ( { requestUtils } ) => { + await requestUtils.activatePlugin( + 'register-product-collection-tester' + ); + } ); + + Object.entries( MY_REGISTERED_COLLECTIONS_THAT_NEEDS_PRODUCT ).forEach( + ( [ key, collection ] ) => { + test( `For collection "${ collection.name }" - manually selected product reference should be available on Frontend in a post`, async ( { + pageObject, + admin, + page, + editor, + } ) => { + await admin.createNewPost(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost( key as Collections ); + + // Verify that product picker is shown in Editor + const editorProductPicker = editor.canvas.locator( + SELECTORS.productPicker + ); + await expect( editorProductPicker ).toBeVisible(); + + // Once a product is selected, the product picker should be hidden + await pageObject.chooseProductInEditorProductPickerIfAvailable( + editor.canvas + ); + await expect( editorProductPicker ).toBeHidden(); + + // On Frontend, verify that product reference is a number + await pageObject.publishAndGoToFrontend(); + const collectionWithProductContext = page.locator( + `[data-collection="${ collection.collection }"]` + ); + const queryAttribute = JSON.parse( + ( await collectionWithProductContext.getAttribute( + 'data-query' + ) ) || '{}' + ); + expect( typeof queryAttribute?.productReference ).toBe( + 'number' + ); + } ); + + test( `For collection "${ collection.name }" - changing product using inspector control`, async ( { + pageObject, + admin, + page, + editor, + } ) => { + await admin.createNewPost(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost( key as Collections ); + + // Verify that product picker is shown in Editor + const editorProductPicker = editor.canvas.locator( + SELECTORS.productPicker + ); + await expect( editorProductPicker ).toBeVisible(); + + // Once a product is selected, the product picker should be hidden + await pageObject.chooseProductInEditorProductPickerIfAvailable( + editor.canvas + ); + await expect( editorProductPicker ).toBeHidden(); + + // Verify that Album is selected + await expect( + admin.page.locator( SELECTORS.linkedProductControl.button ) + ).toContainText( 'Album' ); + + // Change product using inspector control to Beanie + await admin.page + .locator( SELECTORS.linkedProductControl.button ) + .click(); + await admin.page + .locator( SELECTORS.linkedProductControl.popoverContent ) + .getByLabel( 'Beanie', { exact: true } ) + .click(); + await expect( + admin.page.locator( SELECTORS.linkedProductControl.button ) + ).toContainText( 'Beanie' ); + + // On Frontend, verify that product reference is a number + await pageObject.publishAndGoToFrontend(); + const collectionWithProductContext = page.locator( + `[data-collection="${ collection.collection }"]` + ); + const queryAttribute = JSON.parse( + ( await collectionWithProductContext.getAttribute( + 'data-query' + ) ) || '{}' + ); + expect( typeof queryAttribute?.productReference ).toBe( + 'number' + ); + } ); + + test( `For collection "${ collection.name }" - product picker shouldn't be shown in Single Product template`, async ( { + pageObject, + admin, + editor, + } ) => { + await admin.visitSiteEditor( { + postId: `woocommerce/woocommerce//single-product`, + postType: 'wp_template', + canvas: 'edit', + } ); + await editor.canvas.locator( 'body' ).click(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInTemplate( + key as Collections + ); + + const editorProductPicker = editor.canvas.locator( + SELECTORS.productPicker + ); + await expect( editorProductPicker ).toBeHidden(); + } ); + } + ); + + test( 'Product picker should work as expected while changing collection using "Choose collection" button from Toolbar', async ( { + pageObject, + admin, + editor, + } ) => { + await admin.createNewPost(); + await pageObject.insertProductCollection(); + await pageObject.chooseCollectionInPost( + 'myCustomCollectionWithProductContext' + ); + + // Verify that product picker is shown in Editor + const editorProductPicker = editor.canvas.locator( + SELECTORS.productPicker + ); + await expect( editorProductPicker ).toBeVisible(); + + // Once a product is selected, the product picker should be hidden + await pageObject.chooseProductInEditorProductPickerIfAvailable( + editor.canvas + ); + await expect( editorProductPicker ).toBeHidden(); + + // Change collection using Toolbar + await pageObject.changeCollectionUsingToolbar( + 'myCustomCollectionMultipleContexts' + ); + await expect( editorProductPicker ).toBeVisible(); + + // Once a product is selected, the product picker should be hidden + await pageObject.chooseProductInEditorProductPickerIfAvailable( + editor.canvas + ); + await expect( editorProductPicker ).toBeHidden(); + + // Product picker should be hidden for collections that don't need product + await pageObject.changeCollectionUsingToolbar( 'featured' ); + await expect( editorProductPicker ).toBeHidden(); + } ); +} ); diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.page.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.page.ts index 22a0fb3e3e1..1a87ebeb605 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.page.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-collection/product-collection.page.ts @@ -1,7 +1,7 @@ /** * External dependencies */ -import { Locator, Page } from '@playwright/test'; +import { FrameLocator, Locator, Page } from '@playwright/test'; import { Editor, Admin } from '@woocommerce/e2e-utils'; import { BlockRepresentation } from '@wordpress/e2e-test-utils-playwright/build-types/editor/insert-block'; @@ -62,6 +62,12 @@ export const SELECTORS = { previewButtonTestID: 'product-collection-preview-button', collectionPlaceholder: '[data-type="woocommerce/product-collection"] .components-placeholder', + productPicker: '.wc-blocks-product-collection__editor-product-picker', + linkedProductControl: { + button: '.wc-block-product-collection-linked-product-control__button', + popoverContent: + '.wc-block-product-collection-linked-product__popover-content', + }, }; export type Collections = @@ -200,10 +206,31 @@ class ProductCollectionPage { } } + async chooseProductInEditorProductPickerIfAvailable( + pageReference: Page | FrameLocator + ) { + const editorProductPicker = pageReference.locator( + SELECTORS.productPicker + ); + + if ( await editorProductPicker.isVisible() ) { + await editorProductPicker + .locator( 'label' ) + .filter( { + hasText: 'Album', + } ) + .click(); + } + } + async createNewPostAndInsertBlock( collection?: Collections ) { await this.admin.createNewPost(); await this.insertProductCollection(); await this.chooseCollectionInPost( collection ); + // If product picker is available, choose a product. + await this.chooseProductInEditorProductPickerIfAvailable( + this.admin.page + ); await this.refreshLocators( 'editor' ); await this.editor.openDocumentSettingsSidebar(); } @@ -345,6 +372,10 @@ class ProductCollectionPage { await this.editor.canvas.locator( 'body' ).click(); await this.insertProductCollection(); await this.chooseCollectionInTemplate( collection ); + // If product picker is available, choose a product. + await this.chooseProductInEditorProductPickerIfAvailable( + this.editor.canvas + ); await this.refreshLocators( 'editor' ); } @@ -571,6 +602,30 @@ class ProductCollectionPage { .click(); } + async changeCollectionUsingToolbar( collection: Collections ) { + // Click "Choose collection" button in the toolbar. + await this.admin.page + .getByRole( 'toolbar', { name: 'Block Tools' } ) + .getByRole( 'button', { name: 'Choose collection' } ) + .click(); + + // Select the collection from the modal. + const collectionChooserModal = this.admin.page.locator( + '.wc-blocks-product-collection__modal' + ); + await collectionChooserModal + .getByRole( 'button', { + name: collectionToButtonNameMap[ collection ], + } ) + .click(); + + await collectionChooserModal + .getByRole( 'button', { + name: 'Continue', + } ) + .click(); + } + async setDisplaySettings( { itemsPerPage, offset, diff --git a/plugins/woocommerce/changelog/50164-add-44877-context-linking-a-product-with-collection b/plugins/woocommerce/changelog/50164-add-44877-context-linking-a-product-with-collection new file mode 100644 index 00000000000..1308c1e61e7 --- /dev/null +++ b/plugins/woocommerce/changelog/50164-add-44877-context-linking-a-product-with-collection @@ -0,0 +1,4 @@ +Significance: major +Type: add + +Product Collection - Show product picker in Editor when collection requires a product but not available
A collection can define if it requires a product context. This can be done using `usesReference` argument i.e. ```tsx __experimentalRegisterProductCollection({ ..., usesReference: ['product'], ) ``` When product context doesn't exist in current template/page/post etc. then we show product picker in Editor. This way, merchant can manually provide a product context to the collection. \ No newline at end of file diff --git a/plugins/woocommerce/changelog/50590-add-44877-context-linking-a-product-with-collection-inspector-control b/plugins/woocommerce/changelog/50590-add-44877-context-linking-a-product-with-collection-inspector-control new file mode 100644 index 00000000000..2db092dad41 --- /dev/null +++ b/plugins/woocommerce/changelog/50590-add-44877-context-linking-a-product-with-collection-inspector-control @@ -0,0 +1,4 @@ +Significance: major +Type: add + +Product Collection - Implement Inspector control to change selected product \ No newline at end of file From 0f7773dd47df90e4c7c4e60c141b307e139202cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Juh=C3=A9=20Lluveras?= Date: Mon, 2 Sep 2024 09:40:47 +0200 Subject: [PATCH 249/318] Fix My Account block icon being too small when inserted via block hooks (#51047) * Fix My Account block icon being too small when inserted via block hooks * Add changelog file --- .../woocommerce/changelog/fix-50667-my-account-hooked-size | 4 ++++ plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php | 1 + 2 files changed, 5 insertions(+) create mode 100644 plugins/woocommerce/changelog/fix-50667-my-account-hooked-size diff --git a/plugins/woocommerce/changelog/fix-50667-my-account-hooked-size b/plugins/woocommerce/changelog/fix-50667-my-account-hooked-size new file mode 100644 index 00000000000..4fcd396ddc4 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-50667-my-account-hooked-size @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Fix My Account block icon being too small when inserted via block hooks diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php b/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php index 80bd799b224..8d201c1051f 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php @@ -68,6 +68,7 @@ class CustomerAccount extends AbstractBlock { public function modify_hooked_block_attributes( $parsed_hooked_block, $hooked_block_type, $relative_position, $parsed_anchor_block, $context ) { $parsed_hooked_block['attrs']['displayStyle'] = 'icon_only'; $parsed_hooked_block['attrs']['iconStyle'] = 'line'; + $parsed_hooked_block['attrs']['iconClass'] = 'wc-block-customer-account__account-icon'; /* * The Mini Cart block (which is hooked into the header) has a margin of 0.5em on the left side. From 74e96d689b4cd818c4dc6f764dba9a5a049400e5 Mon Sep 17 00:00:00 2001 From: Adrian Moldovan <3854374+adimoldovan@users.noreply.github.com> Date: Mon, 2 Sep 2024 11:09:56 +0100 Subject: [PATCH 250/318] [e2e tests] Tag some e2e tests to help with test audit (#51044) --- .../woocommerce/changelog/e2e-tag-e2e-tests | 4 + .../create-restricted-coupons.spec.js | 2 +- .../cart-block-calculate-shipping.spec.js | 282 +++++++++--------- .../tests/shopper/cart-block-coupons.spec.js | 218 ++++++++------ .../e2e-pw/tests/shopper/cart-block.spec.js | 224 +++++++------- .../shopper/cart-calculate-shipping.spec.js | 190 ++++++------ .../cart-checkout-block-calculate-tax.spec.js | 8 +- .../cart-checkout-calculate-tax.spec.js | 2 +- .../shopper/cart-checkout-coupons.spec.js | 95 +++--- .../cart-checkout-restricted-coupons.spec.js | 2 +- .../tests/shopper/cart-redirection.spec.js | 2 +- .../tests/e2e-pw/tests/shopper/cart.spec.js | 170 ++++++----- .../tests/shopper/launch-your-store.spec.js | 84 +++--- .../shopper/shop-title-after-deletion.spec.js | 2 +- .../tests/shopper/wordpress-post.spec.js | 2 +- 15 files changed, 684 insertions(+), 603 deletions(-) create mode 100644 plugins/woocommerce/changelog/e2e-tag-e2e-tests diff --git a/plugins/woocommerce/changelog/e2e-tag-e2e-tests b/plugins/woocommerce/changelog/e2e-tag-e2e-tests new file mode 100644 index 00000000000..4f73f5cc6c2 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-tag-e2e-tests @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + + diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-restricted-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-restricted-coupons.spec.js index 7a94c6deb02..dd6941c6cc9 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-restricted-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-restricted-coupons.spec.js @@ -96,7 +96,7 @@ const test = baseTest.extend( { }, } ); -test.describe( 'Restricted coupon management', { tag: '@services' }, () => { +test.describe( 'Restricted coupon management', { tag: [ '@services' ] }, () => { for ( const couponType of Object.keys( couponData ) ) { test( `can create new ${ couponType } coupon`, async ( { page, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-calculate-shipping.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-calculate-shipping.spec.js index 8649bd7e246..2b736893759 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-calculate-shipping.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-calculate-shipping.spec.js @@ -130,157 +130,173 @@ test.describe( } ); } ); - test( 'allows customer to calculate Free Shipping in cart block if in Netherlands', async ( { - page, - context, - cartBlockPage, - } ) => { - await context.clearCookies(); + test( + 'allows customer to calculate Free Shipping in cart block if in Netherlands', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, context, cartBlockPage } ) => { + await context.clearCookies(); - await addAProductToCart( page, product1Id ); - await page.goto( cartBlockPage.slug ); + await addAProductToCart( page, product1Id ); + await page.goto( cartBlockPage.slug ); - // Set shipping country to Netherlands - await page.getByLabel( 'Add an address for shipping' ).click(); - await page - .getByRole( 'combobox' ) - .first() - .selectOption( 'Netherlands' ); - await page.getByLabel( 'Postal code' ).fill( '1011AA' ); - await page.getByLabel( 'City' ).fill( 'Amsterdam' ); - await page.getByRole( 'button', { name: 'Update' } ).click(); + // Set shipping country to Netherlands + await page.getByLabel( 'Add an address for shipping' ).click(); + await page + .getByRole( 'combobox' ) + .first() + .selectOption( 'Netherlands' ); + await page.getByLabel( 'Postal code' ).fill( '1011AA' ); + await page.getByLabel( 'City' ).fill( 'Amsterdam' ); + await page.getByRole( 'button', { name: 'Update' } ).click(); - // Verify shipping costs - await expect( - page.getByRole( 'group' ).getByText( 'Free shipping' ) - ).toBeVisible(); - await expect( - page.getByRole( 'strong' ).getByText( 'Free', { exact: true } ) - ).toBeVisible(); - await expect( page.getByText( '$' ).nth( 2 ) ).toContainText( - firstProductPrice - ); - } ); + // Verify shipping costs + await expect( + page.getByRole( 'group' ).getByText( 'Free shipping' ) + ).toBeVisible(); + await expect( + page + .getByRole( 'strong' ) + .getByText( 'Free', { exact: true } ) + ).toBeVisible(); + await expect( page.getByText( '$' ).nth( 2 ) ).toContainText( + firstProductPrice + ); + } + ); - test( 'allows customer to calculate Flat rate and Local pickup in cart block if in Portugal', async ( { - page, - context, - cartBlockPage, - } ) => { - await context.clearCookies(); + test( + 'allows customer to calculate Flat rate and Local pickup in cart block if in Portugal', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, context, cartBlockPage } ) => { + await context.clearCookies(); - await addAProductToCart( page, product1Id ); - await page.goto( cartBlockPage.slug ); + await addAProductToCart( page, product1Id ); + await page.goto( cartBlockPage.slug ); - // Set shipping country to Portugal - await page.getByLabel( 'Add an address for shipping' ).click(); - await page - .getByRole( 'combobox' ) - .first() - .selectOption( 'Portugal' ); - await page.getByLabel( 'Postal code' ).fill( '1000-001' ); - await page.getByLabel( 'City' ).fill( 'Lisbon' ); - await page.getByRole( 'button', { name: 'Update' } ).click(); + // Set shipping country to Portugal + await page.getByLabel( 'Add an address for shipping' ).click(); + await page + .getByRole( 'combobox' ) + .first() + .selectOption( 'Portugal' ); + await page.getByLabel( 'Postal code' ).fill( '1000-001' ); + await page.getByLabel( 'City' ).fill( 'Lisbon' ); + await page.getByRole( 'button', { name: 'Update' } ).click(); - // Verify shipping costs - await expect( - page.getByRole( 'group' ).getByText( 'Flat rate' ) - ).toBeVisible(); - await expect( page.getByText( 'Shipping$5.00Flat' ) ).toBeVisible(); - await expect( - page.getByText( `$${ firstProductWithFlatRate }` ) - ).toBeVisible(); + // Verify shipping costs + await expect( + page.getByRole( 'group' ).getByText( 'Flat rate' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping$5.00Flat' ) + ).toBeVisible(); + await expect( + page.getByText( `$${ firstProductWithFlatRate }` ) + ).toBeVisible(); - // Set shipping to local pickup instead of flat rate - await page.getByRole( 'group' ).getByText( 'Local pickup' ).click(); + // Set shipping to local pickup instead of flat rate + await page + .getByRole( 'group' ) + .getByText( 'Local pickup' ) + .click(); - // Verify updated shipping costs - await expect( page.getByText( 'ShippingFreeLocal' ) ).toBeVisible(); - await expect( page.getByText( '$' ).nth( 2 ) ).toContainText( - firstProductPrice - ); - } ); + // Verify updated shipping costs + await expect( + page.getByText( 'ShippingFreeLocal' ) + ).toBeVisible(); + await expect( page.getByText( '$' ).nth( 2 ) ).toContainText( + firstProductPrice + ); + } + ); - test( 'should show correct total cart block price after updating quantity', async ( { - page, - context, - cartBlockPage, - } ) => { - await context.clearCookies(); + test( + 'should show correct total cart block price after updating quantity', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, context, cartBlockPage } ) => { + await context.clearCookies(); - await addAProductToCart( page, product1Id ); - await page.goto( cartBlockPage.slug ); + await addAProductToCart( page, product1Id ); + await page.goto( cartBlockPage.slug ); - // Set shipping country to Portugal - await page.getByLabel( 'Add an address for shipping' ).click(); - await page - .getByRole( 'combobox' ) - .first() - .selectOption( 'Portugal' ); - await page.getByLabel( 'Postal code' ).fill( '1000-001' ); - await page.getByLabel( 'City' ).fill( 'Lisbon' ); - await page.getByRole( 'button', { name: 'Update' } ).click(); + // Set shipping country to Portugal + await page.getByLabel( 'Add an address for shipping' ).click(); + await page + .getByRole( 'combobox' ) + .first() + .selectOption( 'Portugal' ); + await page.getByLabel( 'Postal code' ).fill( '1000-001' ); + await page.getByLabel( 'City' ).fill( 'Lisbon' ); + await page.getByRole( 'button', { name: 'Update' } ).click(); - // Increase product quantity and verify the updated price - await page.getByLabel( 'Increase quantity of First' ).click(); - await expect( - page.getByText( - `$${ - parseInt( firstProductPrice, 10 ) + - parseInt( firstProductPrice, 10 ) + - 5 - }`.toString() - ) - ).toBeVisible(); - } ); + // Increase product quantity and verify the updated price + await page.getByLabel( 'Increase quantity of First' ).click(); + await expect( + page.getByText( + `$${ + parseInt( firstProductPrice, 10 ) + + parseInt( firstProductPrice, 10 ) + + 5 + }`.toString() + ) + ).toBeVisible(); + } + ); - test( 'should show correct total cart block price with 2 different products and flat rate/local pickup', async ( { - page, - context, - cartBlockPage, - } ) => { - await context.clearCookies(); + test( + 'should show correct total cart block price with 2 different products and flat rate/local pickup', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, context, cartBlockPage } ) => { + await context.clearCookies(); - await addAProductToCart( page, product1Id ); - await addAProductToCart( page, product2Id ); - await page.goto( cartBlockPage.slug ); + await addAProductToCart( page, product1Id ); + await addAProductToCart( page, product2Id ); + await page.goto( cartBlockPage.slug ); - // Set shipping country to Portugal - await page.getByLabel( 'Add an address for shipping' ).click(); - await page - .getByRole( 'combobox' ) - .first() - .selectOption( 'Portugal' ); - await page.getByLabel( 'Postal code' ).fill( '1000-001' ); - await page.getByLabel( 'City' ).fill( 'Lisbon' ); - await page.getByRole( 'button', { name: 'Update' } ).click(); + // Set shipping country to Portugal + await page.getByLabel( 'Add an address for shipping' ).click(); + await page + .getByRole( 'combobox' ) + .first() + .selectOption( 'Portugal' ); + await page.getByLabel( 'Postal code' ).fill( '1000-001' ); + await page.getByLabel( 'City' ).fill( 'Lisbon' ); + await page.getByRole( 'button', { name: 'Update' } ).click(); - // Verify shipping costs - await expect( - page.getByRole( 'group' ).getByText( 'Flat rate' ) - ).toBeVisible(); - await expect( page.getByText( 'Shipping$5.00Flat' ) ).toBeVisible(); - await expect( - page.getByText( - `$${ - parseInt( firstProductPrice, 10 ) + - parseInt( secondProductPrice, 10 ) + - 5 - }`.toString() - ) - ).toBeVisible(); + // Verify shipping costs + await expect( + page.getByRole( 'group' ).getByText( 'Flat rate' ) + ).toBeVisible(); + await expect( + page.getByText( 'Shipping$5.00Flat' ) + ).toBeVisible(); + await expect( + page.getByText( + `$${ + parseInt( firstProductPrice, 10 ) + + parseInt( secondProductPrice, 10 ) + + 5 + }`.toString() + ) + ).toBeVisible(); - // Set shipping to local pickup instead of flat rate - await page.getByRole( 'group' ).getByText( 'Local pickup' ).click(); + // Set shipping to local pickup instead of flat rate + await page + .getByRole( 'group' ) + .getByText( 'Local pickup' ) + .click(); - // Verify updated shipping costs - await expect( page.getByText( 'ShippingFreeLocal' ) ).toBeVisible(); - await expect( - page - .locator( 'div' ) - .filter( { hasText: /^\$30\.00$/ } ) - .locator( 'span' ) - ).toBeVisible(); - } ); + // Verify updated shipping costs + await expect( + page.getByText( 'ShippingFreeLocal' ) + ).toBeVisible(); + await expect( + page + .locator( 'div' ) + .filter( { hasText: /^\$30\.00$/ } ) + .locator( 'span' ) + ).toBeVisible(); + } + ); } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-coupons.spec.js index 62d8d6f2cdc..9d709e40ea9 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block-coupons.spec.js @@ -127,17 +127,111 @@ test.describe( } ); } ); - test( 'allows cart block to apply coupon of any type', async ( { - page, - } ) => { - const totals = [ '$50.00', '$27.50', '$45.00' ]; + test( + 'allows cart block to apply coupon of any type', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + const totals = [ '$50.00', '$27.50', '$45.00' ]; - // apply all coupon types - for ( let i = 0; i < coupons.length; i++ ) { + // apply all coupon types + for ( let i = 0; i < coupons.length; i++ ) { + await page + .getByRole( 'button', { name: 'Add a coupon' } ) + .click(); + await page + .getByLabel( 'Enter code' ) + .fill( coupons[ i ].code ); + await page.getByText( 'Apply', { exact: true } ).click(); + await expect( + page + .locator( + '.wc-block-components-notice-banner__content' + ) + .getByText( + `Coupon code "${ coupons[ i ].code }" has been applied to your cart.` + ) + ).toBeVisible(); + await expect( + page.locator( + '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' + ) + ).toHaveText( totals[ i ] ); + await page + .getByLabel( `Remove coupon "${ coupons[ i ].code }"` ) + .click(); + await expect( + page + .locator( + '.wc-block-components-notice-banner__content' + ) + .getByText( + `Coupon code "${ coupons[ i ].code }" has been removed from your cart.` + ) + ).toBeVisible(); + } + } + ); + + test( + 'allows cart block to apply multiple coupons', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + const totals = [ '$50.00', '$22.50', '$12.50' ]; + const totalsReverse = [ '$17.50', '$45.00', '$55.00' ]; + const discounts = [ '-$5.00', '-$32.50', '-$42.50' ]; + + // add all coupons and verify prices + for ( let i = 0; i < coupons.length; i++ ) { + await page + .getByRole( 'button', { name: 'Add a coupon' } ) + .click(); + await page + .getByLabel( 'Enter code' ) + .fill( coupons[ i ].code ); + await page.getByText( 'Apply', { exact: true } ).click(); + await expect( + page + .locator( + '.wc-block-components-notice-banner__content' + ) + .getByText( + `Coupon code "${ coupons[ i ].code }" has been applied to your cart.` + ) + ).toBeVisible(); + await expect( + page.locator( + '.wc-block-components-totals-discount > .wc-block-components-totals-item__value' + ) + ).toHaveText( discounts[ i ] ); + await expect( + page.locator( + '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' + ) + ).toHaveText( totals[ i ] ); + } + + for ( let i = 0; i < coupons.length; i++ ) { + await page + .getByLabel( `Remove coupon "${ coupons[ i ].code }"` ) + .click(); + await expect( + page.locator( + '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' + ) + ).toHaveText( totalsReverse[ i ] ); + } + } + ); + + test( + 'prevents cart block applying same coupon twice', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + // try to add two same coupons and verify the error message await page .getByRole( 'button', { name: 'Add a coupon' } ) .click(); - await page.getByLabel( 'Enter code' ).fill( coupons[ i ].code ); + await page.getByLabel( 'Enter code' ).fill( coupons[ 0 ].code ); await page.getByText( 'Apply', { exact: true } ).click(); await expect( page @@ -145,114 +239,40 @@ test.describe( '.wc-block-components-notice-banner__content' ) .getByText( - `Coupon code "${ coupons[ i ].code }" has been applied to your cart.` + `Coupon code "${ coupons[ 0 ].code }" has been applied to your cart.` ) ).toBeVisible(); - await expect( - page.locator( - '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' - ) - ).toHaveText( totals[ i ] ); - await page - .getByLabel( `Remove coupon "${ coupons[ i ].code }"` ) - .click(); - await expect( - page - .locator( - '.wc-block-components-notice-banner__content' - ) - .getByText( - `Coupon code "${ coupons[ i ].code }" has been removed from your cart.` - ) - ).toBeVisible(); - } - } ); - - test( 'allows cart block to apply multiple coupons', async ( { - page, - } ) => { - const totals = [ '$50.00', '$22.50', '$12.50' ]; - const totalsReverse = [ '$17.50', '$45.00', '$55.00' ]; - const discounts = [ '-$5.00', '-$32.50', '-$42.50' ]; - - // add all coupons and verify prices - for ( let i = 0; i < coupons.length; i++ ) { await page .getByRole( 'button', { name: 'Add a coupon' } ) .click(); - await page.getByLabel( 'Enter code' ).fill( coupons[ i ].code ); + await page.getByLabel( 'Enter code' ).fill( coupons[ 0 ].code ); await page.getByText( 'Apply', { exact: true } ).click(); await expect( page - .locator( - '.wc-block-components-notice-banner__content' - ) + .getByRole( 'alert' ) .getByText( - `Coupon code "${ coupons[ i ].code }" has been applied to your cart.` + `Coupon code "${ coupons[ 0 ].code }" has already been applied.` ) ).toBeVisible(); - await expect( - page.locator( - '.wc-block-components-totals-discount > .wc-block-components-totals-item__value' - ) - ).toHaveText( discounts[ i ] ); - await expect( - page.locator( - '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' - ) - ).toHaveText( totals[ i ] ); } + ); - for ( let i = 0; i < coupons.length; i++ ) { + test( + 'prevents cart block applying coupon with usage limit', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + // add coupon with usage limit await page - .getByLabel( `Remove coupon "${ coupons[ i ].code }"` ) + .getByRole( 'button', { name: 'Add a coupon' } ) .click(); + await page.getByLabel( 'Enter code' ).fill( couponLimitedCode ); + await page.getByText( 'Apply', { exact: true } ).click(); await expect( - page.locator( - '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' - ) - ).toHaveText( totalsReverse[ i ] ); + page + .getByRole( 'alert' ) + .getByText( 'Coupon usage limit has been reached.' ) + ).toBeVisible(); } - } ); - - test( 'prevents cart block applying same coupon twice', async ( { - page, - } ) => { - // try to add two same coupons and verify the error message - await page.getByRole( 'button', { name: 'Add a coupon' } ).click(); - await page.getByLabel( 'Enter code' ).fill( coupons[ 0 ].code ); - await page.getByText( 'Apply', { exact: true } ).click(); - await expect( - page - .locator( '.wc-block-components-notice-banner__content' ) - .getByText( - `Coupon code "${ coupons[ 0 ].code }" has been applied to your cart.` - ) - ).toBeVisible(); - await page.getByRole( 'button', { name: 'Add a coupon' } ).click(); - await page.getByLabel( 'Enter code' ).fill( coupons[ 0 ].code ); - await page.getByText( 'Apply', { exact: true } ).click(); - await expect( - page - .getByRole( 'alert' ) - .getByText( - `Coupon code "${ coupons[ 0 ].code }" has already been applied.` - ) - ).toBeVisible(); - } ); - - test( 'prevents cart block applying coupon with usage limit', async ( { - page, - } ) => { - // add coupon with usage limit - await page.getByRole( 'button', { name: 'Add a coupon' } ).click(); - await page.getByLabel( 'Enter code' ).fill( couponLimitedCode ); - await page.getByText( 'Apply', { exact: true } ).click(); - await expect( - page - .getByRole( 'alert' ) - .getByText( 'Coupon usage limit has been reached.' ) - ).toBeVisible(); - } ); + ); } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block.spec.js index 11ab6abe7d9..3ce134b9e9c 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-block.spec.js @@ -73,116 +73,132 @@ test.describe( 'Cart Block page', { tag: [ '@payments', '@services' ] }, () => { } ); } ); - test( 'can see empty cart, add and remove simple & cross sell product, increase to max quantity', async ( { - page, - testPage, - } ) => { - await goToPageEditor( { page } ); - await fillPageTitle( page, testPage.title ); - await insertBlockByShortcut( page, 'Cart' ); - await publishPage( page, testPage.title ); + test( + 'can see empty cart, add and remove simple & cross sell product, increase to max quantity', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, testPage } ) => { + await goToPageEditor( { page } ); + await fillPageTitle( page, testPage.title ); + await insertBlockByShortcut( page, 'Cart' ); + await publishPage( page, testPage.title ); - // go to the page to test empty cart block - await page.goto( testPage.slug ); - await expect( - page.getByRole( 'heading', { name: testPage.title } ) - ).toBeVisible(); - await expect( - await page.getByText( 'Your cart is currently empty!' ).count() - ).toBeGreaterThan( 0 ); - await expect( - page.getByRole( 'link', { name: 'Browse store' } ) - ).toBeVisible(); - await page.getByRole( 'link', { name: 'Browse store' } ).click(); - await expect( - page.getByRole( 'heading', { name: 'Shop' } ) - ).toBeVisible(); + // go to the page to test empty cart block + await page.goto( testPage.slug ); + await expect( + page.getByRole( 'heading', { name: testPage.title } ) + ).toBeVisible(); + await expect( + await page.getByText( 'Your cart is currently empty!' ).count() + ).toBeGreaterThan( 0 ); + await expect( + page.getByRole( 'link', { name: 'Browse store' } ) + ).toBeVisible(); + await page.getByRole( 'link', { name: 'Browse store' } ).click(); + await expect( + page.getByRole( 'heading', { name: 'Shop' } ) + ).toBeVisible(); - await addAProductToCart( page, product1Id ); - await page.goto( testPage.slug ); - await expect( - page.getByRole( 'heading', { name: testPage.title } ) - ).toBeVisible(); - await expect( - page.getByRole( 'link', { name: simpleProductName, exact: true } ) - ).toBeVisible(); - await expect( page.getByText( simpleProductDesc ) ).toBeVisible(); - await expect( - page.getByText( `Save $${ singleProductSalePrice }` ) - ).toBeVisible(); + await addAProductToCart( page, product1Id ); + await page.goto( testPage.slug ); + await expect( + page.getByRole( 'heading', { name: testPage.title } ) + ).toBeVisible(); + await expect( + page.getByRole( 'link', { + name: simpleProductName, + exact: true, + } ) + ).toBeVisible(); + await expect( page.getByText( simpleProductDesc ) ).toBeVisible(); + await expect( + page.getByText( `Save $${ singleProductSalePrice }` ) + ).toBeVisible(); - // increase product quantity to its maximum - await expect( page.getByText( '2 left in stock' ) ).toBeVisible(); - await page - .getByRole( 'button' ) - .filter( { hasText: '+', exact: true } ) - .click(); - await expect( - page.locator( - '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' - ) - ).toContainText( `$${ doubleProductsPrice.toString() }` ); - await expect( - page.getByRole( 'button' ).filter( { hasText: '+', exact: true } ) - ).toBeDisabled(); + // increase product quantity to its maximum + await expect( page.getByText( '2 left in stock' ) ).toBeVisible(); + await page + .getByRole( 'button' ) + .filter( { hasText: '+', exact: true } ) + .click(); + await expect( + page.locator( + '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' + ) + ).toContainText( `$${ doubleProductsPrice.toString() }` ); + await expect( + page + .getByRole( 'button' ) + .filter( { hasText: '+', exact: true } ) + ).toBeDisabled(); - // add cross-sell products to cart - await expect( - page.getByRole( 'heading', { name: 'You may be interested in…' } ) - ).toBeVisible(); - await page - .getByLabel( `Add to cart: “${ simpleProductName } Cross-Sell 1”` ) - .click(); - await expect( - page - .locator( '.wc-block-cart-items' ) - .getByText( `${ simpleProductName } Cross-Sell 1` ) - ).toBeVisible(); - await page - .getByLabel( `Add to cart: “${ simpleProductName } Cross-Sell 2”` ) - .click(); - await expect( - page - .locator( '.wc-block-cart-items' ) - .getByText( `${ simpleProductName } Cross-Sell 2` ) - ).toBeVisible(); + // add cross-sell products to cart + await expect( + page.getByRole( 'heading', { + name: 'You may be interested in…', + } ) + ).toBeVisible(); + await page + .getByLabel( + `Add to cart: “${ simpleProductName } Cross-Sell 1”` + ) + .click(); + await expect( + page + .locator( '.wc-block-cart-items' ) + .getByText( `${ simpleProductName } Cross-Sell 1` ) + ).toBeVisible(); + await page + .getByLabel( + `Add to cart: “${ simpleProductName } Cross-Sell 2”` + ) + .click(); + await expect( + page + .locator( '.wc-block-cart-items' ) + .getByText( `${ simpleProductName } Cross-Sell 2` ) + ).toBeVisible(); - await page.goto( testPage.slug ); - await expect( - page.getByRole( 'heading', { name: testPage.title } ) - ).toBeVisible(); - await expect( - page.getByRole( 'heading', { name: 'You may be interested in…' } ) - ).toBeHidden(); - await expect( - page.locator( - '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' - ) - ).toContainText( - `$${ singleProductWithCrossSellProducts.toString() }` - ); + await page.goto( testPage.slug ); + await expect( + page.getByRole( 'heading', { name: testPage.title } ) + ).toBeVisible(); + await expect( + page.getByRole( 'heading', { + name: 'You may be interested in…', + } ) + ).toBeHidden(); + await expect( + page.locator( + '.wc-block-components-totals-footer-item > .wc-block-components-totals-item__value' + ) + ).toContainText( + `$${ singleProductWithCrossSellProducts.toString() }` + ); - // remove cross-sell products from cart - await page.locator( ':nth-match(:text("Remove item"), 3)' ).click(); - await page.locator( ':nth-match(:text("Remove item"), 2)' ).click(); - await expect( - page.getByRole( 'heading', { name: 'You may be interested in…' } ) - ).toBeVisible(); + // remove cross-sell products from cart + await page.locator( ':nth-match(:text("Remove item"), 3)' ).click(); + await page.locator( ':nth-match(:text("Remove item"), 2)' ).click(); + await expect( + page.getByRole( 'heading', { + name: 'You may be interested in…', + } ) + ).toBeVisible(); - // check if the link to proceed to the checkout exists - await expect( - page.getByRole( 'link', { - name: 'Proceed to Checkout', - } ) - ).toBeVisible(); + // check if the link to proceed to the checkout exists + await expect( + page.getByRole( 'link', { + name: 'Proceed to Checkout', + } ) + ).toBeVisible(); - // remove product from cart - await page.locator( ':text("Remove item")' ).click(); - await expect( - page.getByText( 'Your cart is currently empty!' ) - ).toBeVisible(); - await expect( - page.getByRole( 'link', { name: 'Browse store' } ) - ).toBeVisible(); - } ); + // remove product from cart + await page.locator( ':text("Remove item")' ).click(); + await expect( + page.getByText( 'Your cart is currently empty!' ) + ).toBeVisible(); + await expect( + page.getByRole( 'link', { name: 'Browse store' } ) + ).toBeVisible(); + } + ); } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-calculate-shipping.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-calculate-shipping.spec.js index 62be5e273a3..4f3d0026b88 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-calculate-shipping.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-calculate-shipping.spec.js @@ -125,108 +125,120 @@ test.describe( } ); } ); - test( 'allows customer to calculate Free Shipping if in Germany', async ( { - page, - } ) => { - await page.goto( '/cart/' ); - // Set shipping country to Germany - await page.locator( 'a.shipping-calculator-button' ).click(); - await page - .locator( '#calc_shipping_country' ) - .selectOption( shippingCountryDE ); - await page.locator( 'button[name="calc_shipping"]' ).click(); + test( + 'allows customer to calculate Free Shipping if in Germany', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await page.goto( '/cart/' ); + // Set shipping country to Germany + await page.locator( 'a.shipping-calculator-button' ).click(); + await page + .locator( '#calc_shipping_country' ) + .selectOption( shippingCountryDE ); + await page.locator( 'button[name="calc_shipping"]' ).click(); - // Verify shipping costs - await expect( - page.locator( '.shipping ul#shipping_method > li' ) - ).toContainText( 'Free shipping' ); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( firstProductPrice ); - } ); + // Verify shipping costs + await expect( + page.locator( '.shipping ul#shipping_method > li' ) + ).toContainText( 'Free shipping' ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( firstProductPrice ); + } + ); - test( 'allows customer to calculate Flat rate and Local pickup if in France', async ( { - page, - } ) => { - await page.goto( '/cart/' ); - // Set shipping country to France - await page.locator( 'a.shipping-calculator-button' ).click(); - await page - .locator( '#calc_shipping_country' ) - .selectOption( shippingCountryFR ); - await page.locator( 'button[name="calc_shipping"]' ).click(); + test( + 'allows customer to calculate Flat rate and Local pickup if in France', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await page.goto( '/cart/' ); + // Set shipping country to France + await page.locator( 'a.shipping-calculator-button' ).click(); + await page + .locator( '#calc_shipping_country' ) + .selectOption( shippingCountryFR ); + await page.locator( 'button[name="calc_shipping"]' ).click(); - // Verify shipping costs - await expect( page.locator( '.shipping .amount' ) ).toContainText( - '$5.00' - ); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( `$${ firstProductWithFlatRate }` ); + // Verify shipping costs + await expect( + page.locator( '.shipping .amount' ) + ).toContainText( '$5.00' ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ firstProductWithFlatRate }` ); - // Set shipping to local pickup instead of flat rate - await page.locator( 'text=Local pickup' ).click(); + // Set shipping to local pickup instead of flat rate + await page.locator( 'text=Local pickup' ).click(); - // Verify updated shipping costs - await expect( - page.locator( '.order-total .amount' ).first() - ).toContainText( `$${ firstProductPrice }` ); - } ); + // Verify updated shipping costs + await expect( + page.locator( '.order-total .amount' ).first() + ).toContainText( `$${ firstProductPrice }` ); + } + ); - test( 'should show correct total cart price after updating quantity', async ( { - page, - } ) => { - await page.goto( '/cart/' ); - await page.locator( 'input.qty' ).fill( '4' ); - await page.locator( 'text=Update cart' ).click(); + test( + 'should show correct total cart price after updating quantity', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await page.goto( '/cart/' ); + await page.locator( 'input.qty' ).fill( '4' ); + await page.locator( 'text=Update cart' ).click(); - // Set shipping country to France - await page.locator( 'a.shipping-calculator-button' ).click(); - await page - .locator( '#calc_shipping_country' ) - .selectOption( shippingCountryFR ); - await page.locator( 'button[name="calc_shipping"]' ).click(); + // Set shipping country to France + await page.locator( 'a.shipping-calculator-button' ).click(); + await page + .locator( '#calc_shipping_country' ) + .selectOption( shippingCountryFR ); + await page.locator( 'button[name="calc_shipping"]' ).click(); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( `$${ fourProductsWithFlatRate }` ); - } ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ fourProductsWithFlatRate }` ); + } + ); - test( 'should show correct total cart price with 2 products and flat rate', async ( { - page, - } ) => { - await addAProductToCart( page, secondProductId ); + test( + 'should show correct total cart price with 2 products and flat rate', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await addAProductToCart( page, secondProductId ); - await page.goto( '/cart/' ); - await page.locator( 'a.shipping-calculator-button' ).click(); - await page - .locator( '#calc_shipping_country' ) - .selectOption( shippingCountryFR ); - await page.locator( 'button[name="calc_shipping"]' ).click(); + await page.goto( '/cart/' ); + await page.locator( 'a.shipping-calculator-button' ).click(); + await page + .locator( '#calc_shipping_country' ) + .selectOption( shippingCountryFR ); + await page.locator( 'button[name="calc_shipping"]' ).click(); - await expect( page.locator( '.shipping .amount' ) ).toContainText( - '$5.00' - ); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( `$${ twoProductsWithFlatRate }` ); - } ); + await expect( + page.locator( '.shipping .amount' ) + ).toContainText( '$5.00' ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ twoProductsWithFlatRate }` ); + } + ); - test( 'should show correct total cart price with 2 products without flat rate', async ( { - page, - } ) => { - await addAProductToCart( page, secondProductId ); + test( + 'should show correct total cart price with 2 products without flat rate', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await addAProductToCart( page, secondProductId ); - // Set shipping country to Spain - await page.goto( '/cart/' ); - await page.locator( 'a.shipping-calculator-button' ).click(); - await page.locator( '#calc_shipping_country' ).selectOption( 'ES' ); - await page.locator( 'button[name="calc_shipping"]' ).click(); + // Set shipping country to Spain + await page.goto( '/cart/' ); + await page.locator( 'a.shipping-calculator-button' ).click(); + await page + .locator( '#calc_shipping_country' ) + .selectOption( 'ES' ); + await page.locator( 'button[name="calc_shipping"]' ).click(); - // Verify shipping costs - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( `$${ twoProductsTotal }` ); - } ); + // Verify shipping costs + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ twoProductsTotal }` ); + } + ); } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js index f449ebe1b3a..eb189618973 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-block-calculate-tax.spec.js @@ -38,7 +38,7 @@ let productId, test.describe( 'Shopper Cart & Checkout Block Tax Display', - { tag: [ '@payments', '@services', '@hpos' ] }, + { tag: [ '@payments', '@services', '@hpos', '@could-be-unit-test' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); test.beforeAll( async ( { baseURL } ) => { @@ -240,7 +240,7 @@ test.describe( test.describe( 'Shopper Cart & Checkout Block Tax Rounding', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@could-be-unit-test' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { @@ -484,7 +484,7 @@ test.describe( test.describe( 'Shopper Cart & Checkout Block Tax Levels', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@could-be-unit-test' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { @@ -809,7 +809,7 @@ test.describe( test.describe( 'Shipping Cart & Checkout Block Tax', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@could-be-unit-test' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js index bfcc1218a69..f5f1b416487 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-calculate-tax.spec.js @@ -24,7 +24,7 @@ let productId, test.describe.serial( 'Tax rates in the cart and checkout', - { tag: [ '@payments', '@services', '@hpos' ] }, + { tag: [ '@payments', '@services', '@hpos', '@could-be-unit-test' ] }, () => { test.beforeAll( async ( { baseURL } ) => { const api = new wcApi( { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js index 813b3623236..6301a750e90 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-coupons.spec.js @@ -306,60 +306,65 @@ test.describe( } ); } ); - test( 'restores total when coupons are removed', async ( { - page, - context, - } ) => { - await test.step( 'Load cart page and try restoring total when removed coupons', async () => { - await addAProductToCart( page, firstProductId ); + test( + 'restores total when coupons are removed', + { tag: [ '@could-be-unit-test' ] }, + async ( { page, context } ) => { + await test.step( 'Load cart page and try restoring total when removed coupons', async () => { + await addAProductToCart( page, firstProductId ); - await page.goto( '/cart/' ); - await page.locator( '#coupon_code' ).fill( coupons[ 0 ].code ); - await page - .getByRole( 'button', { name: 'Apply coupon' } ) - .click(); + await page.goto( '/cart/' ); + await page + .locator( '#coupon_code' ) + .fill( coupons[ 0 ].code ); + await page + .getByRole( 'button', { name: 'Apply coupon' } ) + .click(); - // confirm numbers - await expect( - page.locator( '.cart-discount .amount' ) - ).toContainText( discounts[ 0 ] ); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( totals[ 0 ] ); + // confirm numbers + await expect( + page.locator( '.cart-discount .amount' ) + ).toContainText( discounts[ 0 ] ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( totals[ 0 ] ); - await page.locator( 'a.woocommerce-remove-coupon' ).click(); + await page.locator( 'a.woocommerce-remove-coupon' ).click(); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( '$20.00' ); - } ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( '$20.00' ); + } ); - await context.clearCookies(); + await context.clearCookies(); - await test.step( 'Load checkout page and try restoring total when removed coupons', async () => { - await addAProductToCart( page, firstProductId ); + await test.step( 'Load checkout page and try restoring total when removed coupons', async () => { + await addAProductToCart( page, firstProductId ); - await page.goto( '/checkout/' ); - await page - .locator( 'text=Click here to enter your code' ) - .click(); - await page.locator( '#coupon_code' ).fill( coupons[ 0 ].code ); - await page.locator( 'text=Apply coupon' ).click(); + await page.goto( '/checkout/' ); + await page + .locator( 'text=Click here to enter your code' ) + .click(); + await page + .locator( '#coupon_code' ) + .fill( coupons[ 0 ].code ); + await page.locator( 'text=Apply coupon' ).click(); - // confirm numbers - await expect( - page.locator( '.cart-discount .amount' ) - ).toContainText( discounts[ 0 ] ); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( totals[ 0 ] ); + // confirm numbers + await expect( + page.locator( '.cart-discount .amount' ) + ).toContainText( discounts[ 0 ] ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( totals[ 0 ] ); - await page.locator( 'a.woocommerce-remove-coupon' ).click(); + await page.locator( 'a.woocommerce-remove-coupon' ).click(); - await expect( - page.locator( '.order-total .amount' ) - ).toContainText( '$20.00' ); - } ); - } ); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( '$20.00' ); + } ); + } + ); } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js index 172c1e845a5..8ee5ca1d5e3 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-checkout-restricted-coupons.spec.js @@ -17,7 +17,7 @@ const awaitCartPageResponse = ( page ) => test.describe( 'Cart & Checkout Restricted Coupons', - { tag: [ '@payments', '@services', '@hpos' ] }, + { tag: [ '@payments', '@services', '@hpos', '@could-be-unit-test' ] }, () => { let firstProductId, secondProductId, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-redirection.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-redirection.spec.js index 869a9cd0c5f..186b7965e3e 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-redirection.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart-redirection.spec.js @@ -3,7 +3,7 @@ const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default; test.describe( 'Cart > Redirect to cart from shop', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@not-e2e' ] }, () => { let productId; const productName = 'A redirect product test'; diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart.spec.js index f1dcdeeebd5..58b7a58c68f 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/cart.spec.js @@ -81,100 +81,116 @@ test.describe( 'Cart page', { tag: [ '@payments', '@services' ] }, () => { await responsePromise; } - test( 'should display no item in the cart', async ( { page } ) => { - await page.goto( '/cart/' ); - await expect( - page.getByText( 'Your cart is currently empty.' ) - ).toBeVisible(); - } ); - - test( 'should add the product to the cart from the shop page', async ( { - page, - } ) => { - await goToShopPageAndAddProductToCart( page, productName ); - - await page.goto( '/cart/' ); - await expect( page.locator( 'td.product-name' ) ).toContainText( - productName - ); - } ); - - test( 'should increase item quantity when "Add to cart" of the same product is clicked', async ( { - page, - } ) => { - let qty = 2; - while ( qty-- ) { - await goToShopPageAndAddProductToCart( page, productName ); + test( + 'should display no item in the cart', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await page.goto( '/cart/' ); + await expect( + page.getByText( 'Your cart is currently empty.' ) + ).toBeVisible(); } + ); - await page.goto( '/cart/' ); - await expect( page.locator( 'input.qty' ) ).toHaveValue( '2' ); - } ); + test( + 'should add the product to the cart from the shop page', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await goToShopPageAndAddProductToCart( page, productName ); - test( 'should update quantity when updated via quantity input', async ( { - page, - } ) => { - await goToShopPageAndAddProductToCart( page, productName ); + await page.goto( '/cart/' ); + await expect( page.locator( 'td.product-name' ) ).toContainText( + productName + ); + } + ); - await page.goto( '/cart/' ); - await page.locator( 'input.qty' ).fill( '2' ); - await page.locator( 'text=Update cart' ).click(); + test( + 'should increase item quantity when "Add to cart" of the same product is clicked', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + let qty = 2; + while ( qty-- ) { + await goToShopPageAndAddProductToCart( page, productName ); + } - await expect( page.locator( '.order-total .amount' ) ).toContainText( - `$${ twoProductPrice }` - ); - } ); + await page.goto( '/cart/' ); + await expect( page.locator( 'input.qty' ) ).toHaveValue( '2' ); + } + ); - test( 'should remove the item from the cart when remove is clicked', async ( { - page, - } ) => { - await goToShopPageAndAddProductToCart( page, productName ); - await page.goto( '/cart/' ); + test( + 'should update quantity when updated via quantity input', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await goToShopPageAndAddProductToCart( page, productName ); - // make sure that the product is in the cart - await expect( page.locator( '.order-total .amount' ) ).toContainText( - `$${ productPrice }` - ); + await page.goto( '/cart/' ); + await page.locator( 'input.qty' ).fill( '2' ); + await page.locator( 'text=Update cart' ).click(); - await page.locator( 'a.remove' ).click(); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ twoProductPrice }` ); + } + ); - await expect( - page.getByText( `“${ productName }” removed` ) - ).toBeVisible(); - await expect( - page.getByText( 'Your cart is currently empty' ) - ).toBeVisible(); - } ); + test( + 'should remove the item from the cart when remove is clicked', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await goToShopPageAndAddProductToCart( page, productName ); + await page.goto( '/cart/' ); - test( 'should update subtotal in cart totals when adding product to the cart', async ( { - page, - } ) => { - await goToShopPageAndAddProductToCart( page, productName ); + // make sure that the product is in the cart + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ productPrice }` ); - await page.goto( '/cart/' ); - await expect( page.locator( '.cart-subtotal .amount' ) ).toContainText( - `$${ productPrice }` - ); + await page.locator( 'a.remove' ).click(); - await page.locator( 'input.qty' ).fill( '2' ); - await page.locator( 'text=Update cart' ).click(); + await expect( + page.getByText( `“${ productName }” removed` ) + ).toBeVisible(); + await expect( + page.getByText( 'Your cart is currently empty' ) + ).toBeVisible(); + } + ); - await expect( page.locator( '.order-total .amount' ) ).toContainText( - `$${ twoProductPrice }` - ); - } ); + test( + 'should update subtotal in cart totals when adding product to the cart', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await goToShopPageAndAddProductToCart( page, productName ); - test( 'should go to the checkout page when "Proceed to Checkout" is clicked', async ( { - page, - } ) => { - await goToShopPageAndAddProductToCart( page, productName ); + await page.goto( '/cart/' ); + await expect( + page.locator( '.cart-subtotal .amount' ) + ).toContainText( `$${ productPrice }` ); - await page.goto( '/cart/' ); + await page.locator( 'input.qty' ).fill( '2' ); + await page.locator( 'text=Update cart' ).click(); - await page.locator( '.checkout-button' ).click(); + await expect( + page.locator( '.order-total .amount' ) + ).toContainText( `$${ twoProductPrice }` ); + } + ); - await expect( page.locator( '#order_review' ) ).toBeVisible(); - } ); + test( + 'should go to the checkout page when "Proceed to Checkout" is clicked', + { tag: [ '@could-be-unit-test' ] }, + async ( { page } ) => { + await goToShopPageAndAddProductToCart( page, productName ); + + await page.goto( '/cart/' ); + + await page.locator( '.checkout-button' ).click(); + + await expect( page.locator( '#order_review' ) ).toBeVisible(); + } + ); test( 'can manage cross-sell products and maximum item quantity', async ( { page, diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/launch-your-store.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/launch-your-store.spec.js index 0953328ce3a..5f85238a598 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/launch-your-store.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/launch-your-store.spec.js @@ -72,51 +72,43 @@ async function runComingSoonTests( themeContext = '' ) { } ); } -test.describe( - 'Launch Your Store front end - logged out', - { tag: [ '@payments', '@services' ] }, - () => { - test.afterAll( async ( { baseURL } ) => { - try { - await setOption( - request, - baseURL, - 'woocommerce_coming_soon', - 'no' - ); - } catch ( error ) { - console.log( error ); - } - } ); - - test.describe( 'Block Theme (Twenty Twenty Four)', () => { - test.beforeAll( async () => { - await activateTheme( 'twentytwentyfour' ); - } ); - - test.afterAll( async () => { - // Reset theme to the default. - await activateTheme( DEFAULT_THEME ); - } ); - - runComingSoonTests( test.step, test.use ); - } ); - - test.describe( 'Classic Theme (Storefront)', () => { - test.beforeAll( async () => { - await activateTheme( 'storefront' ); - } ); - - test.afterAll( async () => { - // Reset theme to the default. - await activateTheme( DEFAULT_THEME ); - } ); - - runComingSoonTests( - test.step, - test.use, - 'Classic Theme (Storefront)' +test.describe( 'Launch Your Store front end - logged out', () => { + test.afterAll( async ( { baseURL } ) => { + try { + await setOption( + request, + baseURL, + 'woocommerce_coming_soon', + 'no' ); + } catch ( error ) { + console.log( error ); + } + } ); + + test.describe( 'Block Theme (Twenty Twenty Four)', () => { + test.beforeAll( async () => { + await activateTheme( 'twentytwentyfour' ); } ); - } -); + + test.afterAll( async () => { + // Reset theme to the default. + await activateTheme( DEFAULT_THEME ); + } ); + + runComingSoonTests( test.step, test.use ); + } ); + + test.describe( 'Classic Theme (Storefront)', () => { + test.beforeAll( async () => { + await activateTheme( 'storefront' ); + } ); + + test.afterAll( async () => { + // Reset theme to the default. + await activateTheme( DEFAULT_THEME ); + } ); + + runComingSoonTests( test.step, test.use, 'Classic Theme (Storefront)' ); + } ); +} ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/shop-title-after-deletion.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/shop-title-after-deletion.spec.js index d967cff9d13..5c361b1ed50 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/shop-title-after-deletion.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/shop-title-after-deletion.spec.js @@ -3,7 +3,7 @@ const { test, expect } = require( '@playwright/test' ); // test case for bug https://github.com/woocommerce/woocommerce/pull/46429 test.describe( 'Check the title of the shop page after the page has been deleted', - { tag: [ '@payments', '@services' ] }, + { tag: [ '@payments', '@services', '@could-be-unit-test' ] }, () => { test.use( { storageState: process.env.ADMINSTATE } ); test.beforeEach( async ( { page } ) => { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/shopper/wordpress-post.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/shopper/wordpress-post.spec.js index 6a1baa7c95d..fd6f46e0497 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/shopper/wordpress-post.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/shopper/wordpress-post.spec.js @@ -6,7 +6,7 @@ const test = baseTest.extend( { test( 'logged-in customer can comment on a post', - { tag: [ '@gutenberg', '@payments', '@services' ] }, + { tag: [ '@non-critical' ] }, async ( { page } ) => { await page.goto( 'hello-world/' ); await expect( From 8b35b0785c761bda0b90188ade462c83af5b3643 Mon Sep 17 00:00:00 2001 From: Sam Najian Date: Mon, 2 Sep 2024 14:23:52 +0200 Subject: [PATCH 251/318] Update woocommerce shipping promo banner [wc-shipping-188] (#50970) * Make sure the WC Shipping slug is used for installation * Make sure the check to show banner metabox work for HPOS as well * Make ShippingLabelBannerDisplayRules::order_has_shippable_products work with HPOS as well * Remove Jetpack plugin specific checks in ShippingLabelBannerDisplayRules * Use correct variable names for dotcom connection * Fix comments * Remove depenency on WCS&T for showing WC Shipping promo banner * Remove WC Tax and WC Shipping from incompatible plugins * Vary action button label if WCS&T is already installed * Inject config and render label purchase app after activation * Open the purchase modal after adding it to DOM * Render Shipment tracking metabox * Use a different headline when WCS&T is already installed * Fix UX when a none-compatible WCS&T is already active * Fix CSS linting issues * Fix Jslint issues * Improve around usage of localized variables * Fix and update JS tests * Address phpcs issues * Delete metaboxes of compatible WCS&T * Remove redundant variable assignment * Remove css and js of WCS&T if a compatible version is installed * Fix failing legacy PHPUnit tests * Only open the new label purchase modal if WCS&T is not active * Remove redundant code around TOS acceptance for showing the banner * Remove redundant test for Jetpack version checking * Make sure target passed to MutationObserver.observe is available * Add changelog file * Add openWcsModal to component's prototype * Add more js unit tests * Address PHP notice * Remove redundant variable assignments * Rename wcsPluginSlug to more clear wcShippingPluginSlug * Add a link to plugins page if incompatible WCS&T is already installed * Remove unused function parameters * Fix API resource path * Handle a case where none compatible version of WCShipping is installed --- .../shipping-banner/index.js | 384 ++++++++++-------- .../shipping-banner/test/index.js | 290 +++++++++---- .../print-shipping-label-banner/style.scss | 10 + .../print-shipping-label-banner/wcs-api.js | 12 +- ...date-woocommerce-shipping-promo-banner-188 | 4 + .../Internal/Admin/ShippingLabelBanner.php | 68 ++-- .../Admin/ShippingLabelBannerDisplayRules.php | 103 +---- ...ts-shipping-label-banner-display-rules.php | 86 +--- 8 files changed, 514 insertions(+), 443 deletions(-) create mode 100644 plugins/woocommerce/changelog/update-woocommerce-shipping-promo-banner-188 diff --git a/plugins/woocommerce-admin/client/wp-admin-scripts/print-shipping-label-banner/shipping-banner/index.js b/plugins/woocommerce-admin/client/wp-admin-scripts/print-shipping-label-banner/shipping-banner/index.js index 4a41285e9cd..1a29de7cc3e 100644 --- a/plugins/woocommerce-admin/client/wp-admin-scripts/print-shipping-label-banner/shipping-banner/index.js +++ b/plugins/woocommerce-admin/client/wp-admin-scripts/print-shipping-label-banner/shipping-banner/index.js @@ -1,17 +1,17 @@ /** * External dependencies */ -import { __ } from '@wordpress/i18n'; +import { __, sprintf } from '@wordpress/i18n'; import { Component } from '@wordpress/element'; import { Button, ExternalLink } from '@wordpress/components'; import { compose } from '@wordpress/compose'; import interpolateComponents from '@automattic/interpolate-components'; import PropTypes from 'prop-types'; -import { get, isArray } from 'lodash'; import { PLUGINS_STORE_NAME } from '@woocommerce/data'; import { withDispatch, withSelect } from '@wordpress/data'; import { recordEvent } from '@woocommerce/tracks'; -import { getSetting } from '@woocommerce/settings'; +import { getSetting, getAdminLink } from '@woocommerce/settings'; +import { Link } from '@woocommerce/components'; /** * Internal dependencies @@ -19,29 +19,28 @@ import { getSetting } from '@woocommerce/settings'; import '../style.scss'; import DismissModal from '../dismiss-modal'; import SetupNotice, { setupErrorTypes } from '../setup-notice'; -import { getWcsAssets, acceptWcsTos } from '../wcs-api'; +import { + getWcsAssets, + acceptWcsTos, + getWcsLabelPurchaseConfigs, +} from '../wcs-api'; const wcAssetUrl = getSetting( 'wcAssetUrl', '' ); -const wcsPluginSlug = 'woocommerce-services'; +const wcShippingPluginSlug = 'woocommerce-shipping'; +const wcstPluginSlug = 'woocommerce-services'; export class ShippingBanner extends Component { constructor( props ) { super( props ); - const orderId = new URL( window.location.href ).searchParams.get( - 'post' - ); - this.state = { showShippingBanner: true, isDismissModalOpen: false, setupErrorReason: setupErrorTypes.SETUP, - orderId: parseInt( orderId, 10 ), wcsAssetsLoaded: false, wcsAssetsLoading: false, wcsSetupError: false, isShippingLabelButtonBusy: false, - installText: this.getInstallText(), isWcsModalOpen: false, }; } @@ -76,8 +75,8 @@ export class ShippingBanner extends Component { const { activePlugins } = this.props; this.setState( { isShippingLabelButtonBusy: true } ); this.trackElementClicked( 'shipping_banner_create_label' ); - if ( ! activePlugins.includes( wcsPluginSlug ) ) { - this.installAndActivatePlugins( wcsPluginSlug ); + if ( ! activePlugins.includes( wcShippingPluginSlug ) ) { + this.installAndActivatePlugins( wcShippingPluginSlug ); } else { this.acceptTosAndGetWCSAssets(); } @@ -85,7 +84,14 @@ export class ShippingBanner extends Component { async installAndActivatePlugins( pluginSlug ) { // Avoid double activating. - const { installPlugins, activatePlugins, isRequesting } = this.props; + const { + installPlugins, + activatePlugins, + isRequesting, + activePlugins, + isWcstCompatible, + isIncompatibleWCShippingInstalled, + } = this.props; if ( isRequesting ) { return false; } @@ -107,7 +113,25 @@ export class ShippingBanner extends Component { return; } - this.acceptTosAndGetWCSAssets(); + /** + * If a incompatible version of the WooCommerce Shipping plugin is installed, the necessary endpoints + * are not available, so we need to reload the page to ensure to make the plugin usable. + */ + if ( isIncompatibleWCShippingInstalled ) { + window.location.reload( true ); + return; + } + + if ( + ! activePlugins.includes( wcShippingPluginSlug ) && + isWcstCompatible + ) { + this.acceptTosAndGetWCSAssets(); + } else { + this.setState( { + showShippingBanner: false, + } ); + } } woocommerceServiceLinkClicked = () => { @@ -120,7 +144,7 @@ export class ShippingBanner extends Component { banner_name: 'wcadmin_install_wcs_prompt', jetpack_installed: activePlugins.includes( 'jetpack' ), jetpack_connected: isJetpackConnected, - wcs_installed: activePlugins.includes( wcsPluginSlug ), + wcs_installed: activePlugins.includes( wcShippingPluginSlug ), ...customProps, } ); }; @@ -135,16 +159,21 @@ export class ShippingBanner extends Component { } ); }; - acceptTosAndGetWCSAssets() { + acceptTosAndGetWCSAssets = () => { return acceptWcsTos() + .then( () => getWcsLabelPurchaseConfigs( this.props.orderId ) ) + .then( ( configs ) => { + window.WCShipping_Config = configs.config; + return configs; + } ) .then( () => getWcsAssets() ) .then( ( wcsAssets ) => this.loadWcsAssets( wcsAssets ) ) - .catch( () => this.setState( { wcsSetupError: true } ) ); - } + .catch( () => { + this.setState( { wcsSetupError: true } ); + } ); + }; generateMetaBoxHtml( nodeId, title, args ) { - const argsJsonString = JSON.stringify( args ).replace( /"/g, '"' ); // JS has no native html_entities so we just replace. - const togglePanelText = __( 'Toggle panel:', 'woocommerce' ); return ` @@ -159,8 +188,7 @@ export class ShippingBanner extends Component {
-
-
+
`; @@ -174,27 +202,24 @@ export class ShippingBanner extends Component { this.setState( { wcsAssetsLoading: true } ); - const jsPath = assets.wc_connect_admin_script; - const stylePath = assets.wc_connect_admin_style; + const labelPurchaseMetaboxId = 'woocommerce-order-label'; + const shipmentTrackingMetaboxId = 'woocommerce-order-shipment-tracking'; + const jsPath = assets.wcshipping_create_label_script; + const stylePath = assets.wcshipping_create_label_style; - if ( undefined === window.wcsPluginData ) { - const assetPath = jsPath.substring( - 0, - jsPath.lastIndexOf( '/' ) + 1 - ); - window.wcsPluginData = { assetPath }; - } + const shipmentTrackingJsPath = + assets.wcshipping_shipment_tracking_script; + const shipmentTrackingStylePath = + assets.wcshipping_shipment_tracking_style; - const { orderId } = this.state; - const { itemsCount } = this.props; + const { activePlugins } = this.props; + document.getElementById( labelPurchaseMetaboxId )?.remove(); const shippingLabelContainerHtml = this.generateMetaBoxHtml( - 'woocommerce-order-label', + labelPurchaseMetaboxId, __( 'Shipping Label', 'woocommerce' ), { - order: { id: orderId }, context: 'shipping_label', - items: itemsCount, } ); // Insert shipping label metabox just above main order details box. @@ -202,13 +227,12 @@ export class ShippingBanner extends Component { .getElementById( 'woocommerce-order-data' ) .insertAdjacentHTML( 'beforebegin', shippingLabelContainerHtml ); + document.getElementById( shipmentTrackingMetaboxId )?.remove(); const shipmentTrackingHtml = this.generateMetaBoxHtml( - 'woocommerce-order-shipment-tracking', + shipmentTrackingMetaboxId, __( 'Shipment Tracking', 'woocommerce' ), { - order: { id: orderId }, context: 'shipment_tracking', - items: itemsCount, } ); // Insert tracking metabox in the side after the order actions. @@ -224,6 +248,13 @@ export class ShippingBanner extends Component { window.jQuery( '#woocommerce-order-label' ).hide(); } + document + .querySelectorAll( 'script[src*="/woocommerce-services/"]' ) + .forEach( ( node ) => node.remove?.() ); + document + .querySelectorAll( 'link[href*="/woocommerce-services/"]' ) + .forEach( ( node ) => node.remove?.() ); + Promise.all( [ new Promise( ( resolve, reject ) => { const script = document.createElement( 'script' ); @@ -233,9 +264,16 @@ export class ShippingBanner extends Component { script.onerror = reject; document.body.appendChild( script ); } ), + new Promise( ( resolve, reject ) => { + const script = document.createElement( 'script' ); + script.src = shipmentTrackingJsPath; + script.async = true; + script.onload = resolve; + script.onerror = reject; + document.body.appendChild( script ); + } ), new Promise( ( resolve, reject ) => { if ( stylePath !== '' ) { - const head = document.getElementsByTagName( 'head' )[ 0 ]; const link = document.createElement( 'link' ); link.rel = 'stylesheet'; link.type = 'text/css'; @@ -243,7 +281,23 @@ export class ShippingBanner extends Component { link.media = 'all'; link.onload = resolve; link.onerror = reject; - head.appendChild( link ); + link.id = 'wcshipping-injected-styles'; + document.head.appendChild( link ); + } else { + resolve(); + } + } ), + new Promise( ( resolve, reject ) => { + if ( shipmentTrackingStylePath !== '' ) { + const link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = shipmentTrackingStylePath; + link.media = 'all'; + link.onload = resolve; + link.onerror = reject; + link.id = 'wcshipping-injected-styles'; + document.head.appendChild( link ); } else { resolve(); } @@ -254,133 +308,61 @@ export class ShippingBanner extends Component { wcsAssetsLoading: false, isShippingLabelButtonBusy: false, } ); - this.openWcsModal(); + + // Reshow the shipping label metabox. + if ( window.jQuery ) { + window.jQuery( '#woocommerce-order-label' ).show(); + } + + document.getElementById( + 'woocommerce-admin-print-label' + ).style.display = 'none'; + + /** + * We'll only get to this point if either WCS&T is not active or is active but compatible with WooCommerce Shipping + * so once we check if the WCS&T is not active, we can open the label purchase modal immediately. + */ + if ( ! activePlugins.includes( wcstPluginSlug ) ) { + this.openWcsModal(); + } } ); } - getInstallText = () => { - const { activePlugins } = this.props; - if ( activePlugins.includes( wcsPluginSlug ) ) { - // If WCS is active, then the only remaining step is to agree to the ToS. - return __( - 'You\'ve already installed WooCommerce Shipping. By clicking "Create shipping label", you agree to its {{tosLink}}Terms of Service{{/tosLink}}.', - 'woocommerce' - ); - } - return __( - 'By clicking "Create shipping label", {{wcsLink}}WooCommerce Shipping{{/wcsLink}} will be installed and you agree to its {{tosLink}}Terms of Service{{/tosLink}}.', - 'woocommerce' - ); - }; - openWcsModal() { - if ( window.wcsGetAppStoreAsync ) { - window - .wcsGetAppStoreAsync( 'wc-connect-create-shipping-label' ) - .then( ( wcsStore ) => { - const state = wcsStore.getState(); - const { orderId } = this.state; - const siteId = state.ui.selectedSiteId; + // Since the button is dynamically added, we need to wait for it to become selectable and then click it. - const wcsStoreUnsubscribe = wcsStore.subscribe( () => { - const latestState = wcsStore.getState(); + const buttonSelector = + '#woocommerce-shipping-shipping-label-shipping_label button'; + if ( window.MutationObserver ) { + const observer = new window.MutationObserver( + ( mutationsList, observing ) => { + const button = document.querySelector( buttonSelector ); + if ( button ) { + button.click(); + observing.disconnect(); + } + } + ); - const shippingLabelState = get( - latestState, - [ - 'extensions', - 'woocommerce', - 'woocommerceServices', - siteId, - 'shippingLabel', - orderId, - ], - null - ); - - const labelSettingsState = get( - latestState, - [ - 'extensions', - 'woocommerce', - 'woocommerceServices', - siteId, - 'labelSettings', - ], - null - ); - - const packageState = get( - latestState, - [ - 'extensions', - 'woocommerce', - 'woocommerceServices', - siteId, - 'packages', - ], - null - ); - - const locationsState = get( latestState, [ - 'extensions', - 'woocommerce', - 'sites', - siteId, - 'data', - 'locations', - ] ); - - if ( - shippingLabelState && - labelSettingsState && - labelSettingsState.meta && - packageState && - locationsState - ) { - if ( - shippingLabelState.loaded && - labelSettingsState.meta.isLoaded && - packageState.isLoaded && - isArray( locationsState ) && - ! this.state.isWcsModalOpen - ) { - if ( window.jQuery ) { - this.setState( { isWcsModalOpen: true } ); - window - .jQuery( - '.shipping-label__new-label-button' - ) - .click(); - } - wcsStore.dispatch( { - type: 'NOTICE_CREATE', - notice: { - duration: 10000, - status: 'is-success', - text: __( - 'Plugin installed and activated', - 'woocommerce' - ), - }, - } ); - } else if ( - shippingLabelState.showPurchaseDialog - ) { - wcsStoreUnsubscribe(); - if ( window.jQuery ) { - window - .jQuery( '#woocommerce-order-label' ) - .show(); - } - } - } - } ); - - document.getElementById( - 'woocommerce-admin-print-label' - ).style.display = 'none'; - } ); + observer.observe( + document.getElementById( + 'woocommerce-shipping-shipping-label-shipping_label' + ) ?? + document.getElementById( 'wpbody-content' ) ?? + document.body, + { + childList: true, + subtree: true, + } + ); + } else { + const interval = setInterval( () => { + const targetElement = document.querySelector( buttonSelector ); + if ( targetElement ) { + targetElement.click(); + clearInterval( interval ); + } + }, 300 ); } } @@ -390,10 +372,40 @@ export class ShippingBanner extends Component { showShippingBanner, isShippingLabelButtonBusy, } = this.state; + const { isWcstCompatible } = this.props; + if ( ! showShippingBanner && ! isWcstCompatible ) { + document + .getElementById( 'woocommerce-admin-print-label' ) + .classList.add( 'error' ); + + return ( +

+ + { interpolateComponents( { + mixedString: __( + 'Please {{pluginPageLink}}update{{/pluginPageLink}} the WooCommerce Shipping & Tax plugin to the latest version to ensure compatibility with WooCommerce Shipping.', + 'woocommerce' + ), + components: { + pluginPageLink: ( + + ), + }, + } ) } + +

+ ); + } + if ( ! showShippingBanner ) { return null; } + const { actionButtonLabel, headline } = this.props; return (
@@ -403,15 +415,17 @@ export class ShippingBanner extends Component { alt={ __( 'Shipping ', 'woocommerce' ) } />
-

- { __( - 'Print discounted shipping labels with a click.', - 'woocommerce' - ) } -

+

{ headline }

{ interpolateComponents( { - mixedString: this.state.installText, + mixedString: sprintf( + // translators: %s is the action button label. + __( + 'By clicking "%s", {{wcsLink}}WooCommerce Shipping{{/wcsLink}} will be installed and you agree to its {{tosLink}}Terms of Service{{/tosLink}}.', + 'woocommerce' + ), + actionButtonLabel + ), components: { tosLink: ( - { __( 'Create shipping label', 'woocommerce' ) } + { actionButtonLabel }