Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
723 commits
Select commit Hold shift + click to select a range
93bad50
Merge pull request #3467 from woocommerce/feature/GOOWOO-716-product-…
alaca Jun 11, 2026
4a651c2
Apply market feedLabel to products when syncing to Merchant Center
jamesmorrison Jun 11, 2026
bbe4d31
Resolved conflict.
jamesmorrison Jun 11, 2026
7e0c9da
Refactor `list` method in `MapiProductsService` to return a generator…
alaca Jun 12, 2026
3f583d6
Add debug logging for missing Merchant Center products in WooCommerce…
alaca Jun 12, 2026
ea7a1ce
Improve product listing logic in `ConnectionTest` to streamline respo…
alaca Jun 12, 2026
4675f1c
Update `MapiProductsServiceTest` to use `iterator_to_array` for `list…
alaca Jun 12, 2026
1136638
Refactor `WCProductInputAdapter` for improved category condition hand…
alaca Jun 12, 2026
219676a
Removing unnecessary conditional.
mikaeltomovic Jun 12, 2026
0498960
Moving variable declaration.
mikaeltomovic Jun 12, 2026
f6612fb
Use constants for shipping rate.
mikaeltomovic Jun 12, 2026
7427159
Merge remote-tracking branch 'origin/feature/mapi-migration' into fea…
alaca Jun 12, 2026
309709b
refactor: Remove redundant optional chaining
asvinb Jun 12, 2026
f0c9645
Merge pull request #3480 from woocommerce/fix/flat-shipping-when-reon…
asvinb Jun 12, 2026
1dea029
Merge pull request #3485 from woocommerce/feature/GOOWOO-717-product-…
alaca Jun 15, 2026
d0e736d
Merge pull request #3482 from woocommerce/feature/GOOWOO-723-product-…
alaca Jun 15, 2026
8e00010
Add `REPORTS` path constant to `MapiPaths`
alaca Jun 15, 2026
8f94ea8
Refactor `MerchantPriceBenchmarksProductReportQuery` to use `MapiRepo…
alaca Jun 15, 2026
f419f0e
Refactor `MerchantPriceBenchmarksQuery` to use `MapiReportQuery`, upd…
alaca Jun 15, 2026
2ded12c
Refactor `MerchantPriceSuggestionsQuery` to use `MapiReportQuery`, up…
alaca Jun 15, 2026
47ab2e4
Refactor `MerchantProductReportQuery` to use `product_performance_vie…
alaca Jun 15, 2026
d7aec8d
Refactor `MerchantProductViewReportQuery` to use `MapiReportQuery`, u…
alaca Jun 15, 2026
76728d4
Remove obsolete `MerchantQuery` class from Google API integration.
alaca Jun 15, 2026
b27c31e
Refactor `MerchantReportQuery` to use `MapiReportQuery`, update mappi…
alaca Jun 15, 2026
430b36c
Refactor `MerchantMetrics` to use `MerchantApiClient`, update depende…
alaca Jun 15, 2026
4dd218f
Refactor `MerchantPriceBenchmarks` to use `MerchantApiClient`, update…
alaca Jun 15, 2026
69e0336
Refactor `MerchantReport` to use `MerchantApiClient`, update mappings…
alaca Jun 15, 2026
b21640f
Remove obsolete `ShoppingContentDateTrait` from Google API integration.
alaca Jun 15, 2026
61c5369
Update service provider to use `MerchantApiClient` for Merchant depen…
alaca Jun 15, 2026
4909163
Update `get_wc_product_id` to support multi-delimiter splitting for p…
alaca Jun 15, 2026
13e6641
Refactor `MerchantMetricsTest` to use `MerchantApiClient`, replace `S…
alaca Jun 15, 2026
c34a586
Refactor `MerchantReportTest` to use `MerchantApiClient`, remove `Sho…
alaca Jun 15, 2026
db3f45b
Introduce `MapiReportQuery` to support Merchant API report queries, r…
alaca Jun 15, 2026
dd0f6ea
Add unit tests for `MerchantPriceBenchmarks` to cover API interaction…
alaca Jun 15, 2026
4bfa361
Display singular form for shipping label when necessary.
mikaeltomovic Jun 15, 2026
700dc2b
Apply market feedLabel to products when syncing to Merchant Center
jamesmorrison Jun 15, 2026
6c40110
PHPCS fixes.
jamesmorrison Jun 15, 2026
bbf1494
Create MC shipping services in Merchant Center when a new market is c…
jamesmorrison Jun 15, 2026
eb0fc3a
Adjusting input spacing for RTL.
mikaeltomovic Jun 15, 2026
573ca86
Update js/src/pages/markets/components/market-data-views/shipping-tim…
mikaeltomovic Jun 16, 2026
f9976af
Allow multiple languages and currencies on the primary market
jamesmorrison Jun 16, 2026
61721b3
PHPCS fix.
jamesmorrison Jun 16, 2026
58ff696
Enforce feedLabel format constraint in MarketService validation
jamesmorrison Jun 16, 2026
bdecef2
Merge pull request #3502 from woocommerce/add/goowoo-721-singular-for…
asvinb Jun 16, 2026
ef069af
Merge pull request #3403 from woocommerce/feature/GOOWOO-591-map-prod…
asvinb Jun 16, 2026
2590829
Move market ID generation into MarketService::generate_market_id()
jamesmorrison Jun 16, 2026
f1e4e89
Cache shipping rates to reduce DB queries.
jamesmorrison Jun 16, 2026
97b5b25
Merge branch 'develop' into feature/multi-lingual-support
asvinb Jun 17, 2026
d1fd404
Merge branch 'feature/multi-lingual-support' into feature/GOOWOO-701-…
asvinb Jun 17, 2026
2706709
Merge pull request #3512 from woocommerce/feature/GOOWOO-714-reduce-r…
asvinb Jun 17, 2026
c3ee81b
Merge pull request #3511 from woocommerce/feature/GOOWOO-713-move-mar…
asvinb Jun 17, 2026
9b12543
Merge branch 'develop' into feature/multi-lingual-support
asvinb Jun 18, 2026
729a711
Merged feature/multi-lingual-support; resolved conflict.
jamesmorrison Jun 18, 2026
534ddf4
Simplifying text direction margin.
mikaeltomovic Jun 18, 2026
5857df1
PR feedback.
jamesmorrison Jun 18, 2026
2831a92
PR feedback
jamesmorrison Jun 18, 2026
4b85dc8
Added missing docblock; fixed PHPCS error.
jamesmorrison Jun 18, 2026
1541c63
Merge branch 'feature/GOOWOO-710-apply-market-feedlabel-to-products-w…
jamesmorrison Jun 18, 2026
ace79f7
PR feedback
jamesmorrison Jun 18, 2026
82ea57d
Allow extensions to set MAPI customAttributes via product attribute f…
wjrosa Jun 18, 2026
5d6db27
fix(shipping): Switch flat rates to manual for multilingual stores
asvinb Jun 19, 2026
f78c0e0
Merge pull request #3505 from woocommerce/fix/rtl-site-issues
asvinb Jun 19, 2026
15f45c9
Merge branch 'feature/multi-lingual-support' into fix/GOOWOO-703-onbo…
asvinb Jun 19, 2026
dd6b50f
Merge branch 'feature/multi-lingual-support' into feature/GOOWOO-701-…
asvinb Jun 22, 2026
02ac29f
Merge pull request #3503 from woocommerce/feature/GOOWOO-710-apply-ma…
asvinb Jun 22, 2026
035f189
Merge pull request #3504 from woocommerce/feature/GOOWOO-711-create-m…
asvinb Jun 22, 2026
4d3d512
Merge feature/multi-lingual-support into feature branch and resolved …
zamanq Jun 22, 2026
c4e0ce7
Merge pull request #3468 from woocommerce/fix/GOOWOO-560-markets-rest…
asvinb Jun 22, 2026
d13acb9
Cover MAPI adapter custom-attribute accessors (GOOWOO-758)
wjrosa Jun 22, 2026
dbc9a8f
Fix phpcs: multiline associative arrays in adapter test (GOOWOO-758)
wjrosa Jun 22, 2026
e8bc8d1
Add short PHPDoc to new adapter custom-attribute tests (GOOWOO-758)
wjrosa Jun 22, 2026
ff50b2c
Correct REST API using country instead of supplied feed label.
jamesmorrison Jun 22, 2026
1e59428
Fixed failing unit tests.
jamesmorrison Jun 22, 2026
63efa3a
Fix PHPCS error.
jamesmorrison Jun 22, 2026
811604b
Merged feature/multi-lingual-support; resolved conflicts.
jamesmorrison Jun 22, 2026
4339c13
Merge branch 'feature/multi-lingual-support' into feature/GOOWOO-712-…
jamesmorrison Jun 22, 2026
4529c0a
Merged feature/multi-lingual-support; resolved conflicts.
jamesmorrison Jun 22, 2026
8da25a8
Merge pull request #3509 from woocommerce/feature/GOOWOO-701-unable-t…
asvinb Jun 22, 2026
b289cf7
Merge pull request #3510 from woocommerce/feature/GOOWOO-712-enforce-…
asvinb Jun 23, 2026
a483e36
fix(onboarding): apply multilingual shipping time defaults and constants
asvinb Jun 23, 2026
7d05e3a
fix(onboarding): auto-save default shipping times when none exist
asvinb Jun 23, 2026
1c68bf3
Merged feature/multi-lingual-support; resolved conflicts.
jamesmorrison Jun 23, 2026
3e7dad2
Fire WP action hooks after secondary market create, update, and delete.
jamesmorrison Jun 23, 2026
69e0a74
Fix PHPCS issues.
jamesmorrison Jun 23, 2026
5ca3813
refactor(MarketService): pass resolved market to hooks; extract fire_…
asvinb Jun 24, 2026
b172d70
test(MarketService): add safe defaults to test setUp to prevent britt…
asvinb Jun 24, 2026
9da4600
fix(MarketService): pass persisted config not resolved market to wooc…
asvinb Jun 24, 2026
7b21849
Merge pull request #3532 from woocommerce/feature/GOOWOO-726-fire-wp-…
asvinb Jun 24, 2026
e9d2e94
Refactor: make expiration date nullable
alaca Jun 24, 2026
05a7d2f
Feature: add test_get_product_view_report_handles_missing_expiration_…
alaca Jun 24, 2026
f013d39
Update changelog
alaca Jun 24, 2026
e397bb2
Chore: add comment
alaca Jun 24, 2026
c3a2f04
Move where_date_between to MapiReportQuery
alaca Jun 24, 2026
e689711
Use createFromFormat
alaca Jun 24, 2026
aade2e8
Add test_get_report_data_free_listings test
alaca Jun 24, 2026
49c5ec6
Merge branch 'feature/multi-lingual-support' into fix/GOOWOO-703-onbo…
asvinb Jun 24, 2026
a410a21
Add accounts path
alaca Jun 24, 2026
94d462d
Register MapiAccountIssuesService
alaca Jun 24, 2026
5db6d6b
Update refresh_account_issues
alaca Jun 24, 2026
cb76135
Update account issues test
alaca Jun 24, 2026
4c4822c
Add MapiAccountIssuesService
alaca Jun 24, 2026
e890b44
Add MapiAccountIssuesService test
alaca Jun 24, 2026
7ff201d
fix(onboarding): guard shipping time auto-save on resolved target aud…
asvinb Jun 24, 2026
9bfdbbb
Add MapiAccountHomepageService for the homepage resource
alaca Jun 25, 2026
5135a73
Register MapiAccountHomepageService
alaca Jun 25, 2026
0184fad
Migrate Merchant website claim status and action to MAPI homepage
alaca Jun 25, 2026
3601ef2
Read website claim status from MAPI homepage in AccountService
alaca Jun 25, 2026
fbfc51d
Update formatting
alaca Jun 25, 2026
c6e36f1
Merge pull request #3524 from woocommerce/fix/GOOWOO-703-onboarding
asvinb Jun 25, 2026
cf2d8a8
Add MapiAccountBusinessInfoService for the businessInfo resource
alaca Jun 26, 2026
a69452b
Add MapiAccountUsersService for the users resource
alaca Jun 26, 2026
81b0734
Register the businessInfo and users services
alaca Jun 26, 2026
3977683
Add get_business_info and move has_access to the MAPI users resource
alaca Jun 26, 2026
b756a8c
Make maybe_get_state_name reusable and safe for name input
alaca Jun 26, 2026
9b26036
Read business info from the MAPI businessInfo resource
alaca Jun 26, 2026
2ded952
Merge feature/multi-lingual-support into feature branch and resolve c…
zamanq Jun 26, 2026
97d3a38
Fix PHP Unit Test Failures
zamanq Jun 26, 2026
97c4337
Merge branch 'develop' into feature/multi-lingual-support
asvinb Jun 29, 2026
c2ac506
Merge branch 'feature/multi-lingual-support' into fix/GOOWOO-695-prim…
asvinb Jun 29, 2026
1febbe7
Merge pull request #3452 from woocommerce/fix/GOOWOO-695-primary-mark…
asvinb Jun 29, 2026
c0b7cb0
Add WCML price conversion to WPML integration and wire into product a…
jamesmorrison Jun 29, 2026
3b9d262
Fixed PHPCS errors.
jamesmorrison Jun 29, 2026
6189167
Push existing products to Google Merchant Center when a market is add…
jamesmorrison Jun 29, 2026
fb6baaf
Merge pull request #3508 from woocommerce/feature/GOOWOO-744-reports-…
alaca Jun 30, 2026
f31d850
Merge pull request #3535 from woocommerce/feature/GOOWOO-751-account-…
alaca Jun 30, 2026
5f0b30a
Merge pull request #3536 from woocommerce/feature/GOOWOO-753-website-…
alaca Jun 30, 2026
e9a94c0
Implement the language matching model for product sync to Google Merc…
jamesmorrison Jun 30, 2026
0e84b9d
Resolved conflicts.
jamesmorrison Jun 30, 2026
8661b35
Merge branch 'develop' into feature/multi-lingual-support
asvinb Jul 1, 2026
7283d29
Merge branch 'feature/multi-lingual-support' into feature/GOOWOO-743-…
asvinb Jul 1, 2026
a3bba72
Add update_business_info method to MapiAccountBusinessInfoService
alaca Jul 1, 2026
e162a20
Add update_business_info method to Google Merchant API
alaca Jul 1, 2026
6df1769
Refactor contact information handling and integrate map_to_postal_add…
alaca Jul 1, 2026
48b6272
Add test for update_business_info in MapiAccountBusinessInfoService
alaca Jul 1, 2026
c154653
Add test for update_business_info in Google Merchant API
alaca Jul 1, 2026
f6dded6
Add tests for handling empty and populated address fields in contact …
alaca Jul 1, 2026
77fdb54
Merge pull request #3547 from woocommerce/feature/GOOWOO-742-push-exi…
asvinb Jul 1, 2026
e0de0a0
Merge pull request #3460 from woocommerce/feature/GOOWOO-698-ensure-f…
asvinb Jul 1, 2026
0892a41
Clean up orphaned Merchant Center entries when languages are removed …
jamesmorrison Jul 1, 2026
6355539
Update src/Product/BatchProductHelper.php
jamesmorrison Jul 1, 2026
bab4b57
Resolved conflict, fixed unit tests.
jamesmorrison Jul 1, 2026
2b028ba
Merge pull request #3544 from woocommerce/feature/GOOWOO-727-add-wcml…
jamesmorrison Jul 1, 2026
99d9cee
Update src/Product/BatchProductHelper.php
jamesmorrison Jul 1, 2026
6e85ef3
Merged feature/multi-lingual-support; fixed conflicts.
jamesmorrison Jul 1, 2026
5db868d
Merge pull request #3493 from woocommerce/feature/GOOWOO-679-sync-shi…
jamesmorrison Jul 1, 2026
997886c
Merge pull request #3551 from woocommerce/feature/GOOWOO-743-implemen…
jamesmorrison Jul 1, 2026
acf6d5a
Merged feature/multi-lingual-support; fixed conflicts.
jamesmorrison Jul 1, 2026
42fbaeb
Add MapiAccountRegionsService for managing merchant account regions v…
alaca Jul 1, 2026
eafed45
Add MapiAccountShippingSettingsService for managing merchant account …
alaca Jul 1, 2026
6d794c0
Update shipping settings sync to use MAPI regions and settings services
alaca Jul 1, 2026
416e63e
Integrate MapiAccountRegionsService and MapiAccountShippingSettingsSe…
alaca Jul 1, 2026
15aa258
Refactor shipping settings sync to use adapter-based implementation i…
alaca Jul 1, 2026
64815d1
Refactor AbstractRateGroupAdapter to remove inheritance from RateGrou…
alaca Jul 1, 2026
00c7a5b
Refactor AbstractShippingSettingsAdapter to remove inheritance from G…
alaca Jul 1, 2026
c1d058a
Refactor DBShippingSettingsAdapter to simplify service mapping logic …
alaca Jul 1, 2026
9c19b58
Add MapiPriceTrait for formatting Merchant API price values
alaca Jul 1, 2026
b66f4c8
Refactor PostcodesRateGroupAdapter to simplify rate group mapping log…
alaca Jul 1, 2026
69bd13a
Refactor StatesRateGroupAdapter to simplify rate group mapping logic …
alaca Jul 1, 2026
72e046b
Refactor WCShippingSettingsAdapter to simplify service and region map…
alaca Jul 1, 2026
71477cf
Add unit tests for MapiAccountRegionsService focusing on region retri…
alaca Jul 1, 2026
5114a8f
Add unit tests for MapiAccountShippingSettingsService to cover shippi…
alaca Jul 1, 2026
88c8419
Refactor DBShippingSettingsAdapterTest to align with updated service …
alaca Jul 1, 2026
ea8f46c
Refactor PostcodesRateGroupAdapterTest to align with updated rate gro…
alaca Jul 1, 2026
8995e2c
Refactor StatesRateGroupAdapterTest to align with updated rate group …
alaca Jul 1, 2026
703dcc6
Refactor WCShippingSettingsAdapterTest to align with updated service …
alaca Jul 1, 2026
5b74a5b
Merge pull request #3555 from woocommerce/feature/GOOWOO-745-clean-up…
asvinb Jul 1, 2026
4cdd86f
Fix fatal error on connection test: product sync
jamesmorrison Jul 2, 2026
016557d
Merge pull request #3559 from woocommerce/fix/fatal-error-on-connecti…
asvinb Jul 2, 2026
0a0ae89
Fix percent-encoding issue in MapiAccountBusinessInfoService update_m…
alaca Jul 2, 2026
9560f70
Handle MerchantApiException consistently in website claim and access …
alaca Jul 2, 2026
458d46e
Ensure map_to_postal_address omits empty address fields to prevent ov…
alaca Jul 2, 2026
f9a8287
Add test for get_current_user to verify path uses merchant ID
alaca Jul 2, 2026
a7a6ebd
Add test to verify exception code 500 in website claim handling
alaca Jul 2, 2026
0fddc21
Add test for update_address_based_on_store_settings to verify excepti…
alaca Jul 2, 2026
068d0b9
Correct bugs with multi-lingual feeds.
jamesmorrison Jul 2, 2026
dc39307
Refactor MapiAccountRegionsService to remove unused region retrieval …
alaca Jul 2, 2026
8787b74
Refactor MapiAccountShippingSettingsService to remove unused shipping…
alaca Jul 2, 2026
7f421fe
Refactor Settings to handle 400 status response for existing regions …
alaca Jul 2, 2026
3538626
Update AbstractShippingSettingsAdapter docblock to explain usage of M…
alaca Jul 2, 2026
4d1f195
Refactor DBShippingSettingsAdapter to align rate group logic with oth…
alaca Jul 2, 2026
e225dd8
Remove redundant rounding in MapiPriceTrait::mapi_price() implementation
alaca Jul 2, 2026
fb93af3
Add deliveryCountries property in WCShippingSettingsAdapter for MAPI …
alaca Jul 2, 2026
7367cf6
Refactor MapiAccountRegionsServiceTest to remove unused region retrie…
alaca Jul 2, 2026
14a6cd3
Refactor MapiAccountShippingSettingsServiceTest to remove unused ship…
alaca Jul 2, 2026
a7794d6
Add unit tests for Settings::sync_shipping_regions to verify region i…
alaca Jul 2, 2026
378ec8a
Add MapiAccountServicesService for managing account services via Merc…
alaca Jul 2, 2026
0cf6c27
Refactor `link_ads_id` to use `MapiAccountServicesService` for Google…
alaca Jul 2, 2026
124d29a
Add MapiAccountServicesService integration to GoogleServiceProvider f…
alaca Jul 2, 2026
66197c4
Add unit tests for MapiAccountServicesService to cover service retrie…
alaca Jul 2, 2026
637ac8d
Refactor `MerchantTest` to integrate `MapiAccountServicesService` for…
alaca Jul 2, 2026
64100c1
Merge pull request #3522 from woocommerce/goowoo-758-mapi-custom-attr…
wjrosa Jul 3, 2026
5b4dc14
Merge pull request #3540 from woocommerce/feature/GOOWOO-755-accounts…
alaca Jul 6, 2026
7fcd523
Merge pull request #3562 from woocommerce/feature/GOOWOO-757-accounts…
alaca Jul 6, 2026
45f6957
Merge pull request #3556 from woocommerce/feature/GOOWOO-756-shipping…
alaca Jul 6, 2026
3d49648
Refactor and extend promotion handling logic in tests and data source…
alaca Jul 6, 2026
baa6a67
Add promotions endpoint constant to MapiPaths
alaca Jul 6, 2026
9aab90b
Refactor CouponSyncer to use Mapi services for promotion handling and…
alaca Jul 6, 2026
913d5be
Refactor get_coupon_to_delete to return promotion resource array inst…
alaca Jul 6, 2026
296a310
Refactor WCCouponAdapter to simplify promotion mapping and improve co…
alaca Jul 6, 2026
82dcba4
Refactor DeleteCouponEntry to use array type for Google promotion res…
alaca Jul 6, 2026
98e5bc2
Remove GooglePromotionService and related functionality to simplify p…
alaca Jul 6, 2026
45d030a
Replace GooglePromotionService with MapiPromotionsService and MapiDat…
alaca Jul 6, 2026
610e59a
Replace GooglePromotionService with MapiPromotionsService in GoogleSe…
alaca Jul 6, 2026
37f6a2a
Remove GooglePromotion typehint from DeleteCoupon to simplify promoti…
alaca Jul 6, 2026
f667fa4
Add MapiPromotionsService to handle merchant promotions via Merchant API
alaca Jul 6, 2026
454592e
Add unit tests for MapiPromotionsService to validate promotion insert…
alaca Jul 6, 2026
482a961
Sync shipping settings immediately when market is added / edited or d…
jamesmorrison Jul 6, 2026
4f07aca
Update WCCouponAdapter docblock to refine $wc_amount parameter type
alaca Jul 7, 2026
9f8d044
Update WCCouponAdapterTest to align percentOff handling with Merchant…
alaca Jul 7, 2026
e836905
Update WCCouponAdapter to fix time format in DATE_TIME_FORMAT constant
alaca Jul 7, 2026
b0c7055
Merge branch 'feature/multi-lingual-support' of https://github.com/wo…
zamanq Jul 7, 2026
1cd851e
GOOWOO-774 Bug Sync/Delete All Products
zamanq Jul 8, 2026
78f93c0
GOOWOO-778 remove shipping tab
Jul 8, 2026
312cc89
Show currency in free shipping threshold field
AlejandroPerezMartin Jul 8, 2026
73e7994
Additional fixes.
jamesmorrison Jul 8, 2026
8a0a783
Fix issues with syncing (where market cannot provide price) and Googl…
jamesmorrison Jul 8, 2026
9b55ac9
Hide add market button when only one country selected
AlejandroPerezMartin Jul 8, 2026
c71543a
Close the delete market modal only when both the deletion and the Mer…
jamesmorrison Jul 8, 2026
f0f6251
Derive feed labels and market currencies from the site locale instead…
jamesmorrison Jul 8, 2026
376396a
PHPCS fix, cleanup.
joemcgill Jul 8, 2026
5690ad3
Merge pull request #3565 from woocommerce/feature/GOOWOO-776-promotio…
joemcgill Jul 8, 2026
303c247
Merge branch 'develop' into feature/multi-lingual-support
asvinb Jul 9, 2026
b68f8f0
Update logic to hide button if less than 2 countries selected
AlejandroPerezMartin Jul 9, 2026
f9f4283
Merge branch 'feature/multi-lingual-support' into fix/GOOWOO-778-remo…
Jul 9, 2026
e623c19
Merge pull request #3574 from woocommerce/fix/GOOWOO-780-hide-add-mar…
asvinb Jul 9, 2026
ed4cb1c
GOOWOO-778 fix e2e tests
Jul 9, 2026
3045d7b
Update free shipping field to make store currency default
AlejandroPerezMartin Jul 9, 2026
eb70459
PR feedback.
jamesmorrison Jul 9, 2026
3324e1d
Fix bundlewatch
jamesmorrison Jul 9, 2026
0b7e388
Merged GOOWOO-772 (the starting branch); resolved conflict
jamesmorrison Jul 9, 2026
ab03b4d
Correct failing unit tests.
jamesmorrison Jul 9, 2026
ba0c34d
PR feedback.
jamesmorrison Jul 9, 2026
c65ca71
refactor: Remove shipping service and free campaign tracking
asvinb Jul 9, 2026
518c796
Merge origin/develop into feature/mapi-migration
alaca Jul 9, 2026
802525b
Merge pull request #3570 from woocommerce/fix/GOOWOO-778-remove-shipp…
asvinb Jul 9, 2026
a8ef766
Use store currency as default fallback
AlejandroPerezMartin Jul 9, 2026
a0501af
Reset changes
AlejandroPerezMartin Jul 10, 2026
13b6606
Include currency in flat rate data to fix missing currency indicator
AlejandroPerezMartin Jul 10, 2026
38b1806
refactor(markets): Extract market form field arrays into constants
asvinb Jul 10, 2026
d36123f
Merge pull request #3571 from woocommerce/add/GOOWOO-779/add-currency…
asvinb Jul 10, 2026
268db74
Merge pull request #3585 from woocommerce/feature/mapi-migration
jamesmorrison Jul 13, 2026
a19f942
Resolved conflicts.
jamesmorrison Jul 14, 2026
8d04d10
Merge branch 'feature/GOOWOO-783-integrate-merchant-api-to-multi-lang…
jamesmorrison Jul 14, 2026
c3a5d73
Merged feature/multi-lingual-support; resolved conflicts.
jamesmorrison Jul 15, 2026
f3c04be
Merge pull request #3560 from woocommerce/feature/GOOWOO-772-multi-li…
jamesmorrison Jul 15, 2026
7328499
Merge pull request #3576 from woocommerce/fix/GOOWOO-774-bug-sync-del…
jamesmorrison Jul 15, 2026
7897db9
Resolved conflicts.
jamesmorrison Jul 16, 2026
1221816
Merge pull request #3573 from woocommerce/feature/GOOWOO-777-flat-rat…
asvinb Jul 16, 2026
a080a15
Add per-language currency availability to languages-currencies endpoint
jamesmorrison Jul 16, 2026
6eff564
Merge pull request #3603 from woocommerce/add/GOOWOO-795-add-per-lang…
asvinb Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ module.exports = {
},
globals: {
getComputedStyle: 'readonly',
navigator: 'readonly',
},
rules: {
'@wordpress/i18n-text-domain': [
Expand Down
4 changes: 4 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
*** Google for WooCommerce Changelog ***

= Unreleased =
* Migrate Merchant Center reporting to the Merchant API
* The `gla_merchant_query_response` filter is removed as part of dropping the Content API report layer.

= 3.7.3 - 2026-07-08 =
* Add - Added update notification when plugin version 3.8.0 is available

Expand Down
29 changes: 29 additions & 0 deletions js/src/components/app-searchable-select-control/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* External dependencies
*/
import classNames from 'classnames';

/**
* Internal dependencies
*/
import SearchableSelectControl from '../searchable-select-control';
import './index.scss';

/**
* Wrapper around SearchableSelectControl to apply consistent styling across the app.
*/
const AppSearchableSelectControl = ( props ) => {
const { className, ...rest } = props;

return (
<SearchableSelectControl
className={ classNames(
'gla-app-searchable-select-control',
className
) }
{ ...rest }
/>
);
};

export default AppSearchableSelectControl;
66 changes: 66 additions & 0 deletions js/src/components/app-searchable-select-control/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
.gla-app-searchable-select-control {

.gla-searchable-select-control__label {
color: $gray-900;
font-size: $gla-font-smallest;
font-weight: 500;
line-height: 1.4;
text-transform: uppercase;
}

.gla-searchable-select-control__input {
position: relative;

&::after {
background-color: currentcolor;
content: "";
display: block;
height: 1.5rem;
mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCc+PHBhdGggZmlsbD0nd2hpdGUnIGQ9J00xNS45OSAxMC44OSAxMiAxNC4zbC0zLjk5LTMuNDJMOSA5Ljc1bDMgMi41OCAzLjAxLTIuNTh6Jy8+PC9zdmc+);
mask-position: center;
mask-repeat: no-repeat;
mask-size: contain;
pointer-events: none;
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
width: 1.5rem;
}
}

.woocommerce-select-control .components-base-control {
border-color: $gray-600;
border-radius: 2px;
padding: 4px 44px 4px 8px; // 44px right padding for the chevron icon.
}

.woocommerce-select-control .woocommerce-select-control__listbox {
border: 1.5px solid var(--wp-admin-theme-color, #3858e9);
border-radius: 2px;
box-shadow: none;
top: calc(100% + 8px);
}

.gla-searchable-select-control__helper-text {
font-style: normal;
color: $gray-700;
}

.woocommerce-select-control__option {
font-size: $gla-font-base;
font-weight: 400;
height: unset;
line-height: $gla-line-height-medium;
min-height: unset;
padding: 6px 12px;
}

.woocommerce-select-control__control-icon {
display: none;
}

.woocommerce-select-control .components-base-control .woocommerce-select-control__control-input {
min-height: 26px;
}
}
54 changes: 54 additions & 0 deletions js/src/components/countries-time-input/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* External dependencies
*/
import { Flex, FlexBlock } from '@wordpress/components';

/**
* Internal dependencies
*/
import { useAdaptiveFormInputProps } from '~/components/adaptive-form';
import MinMaxShippingTimes from './min-max-shipping-times';
import './index.scss';

/**
* Input component for the estimated flat shipping time (min and max days) applied to all target countries.
*/
const CountriesTimeInput = () => {
const { value: time, onChange: onMinTimeChange } =
useAdaptiveFormInputProps( 'flat_shipping_min_time' );
const { value: maxTime, onChange: onMaxTimeChange } =
useAdaptiveFormInputProps( 'flat_shipping_max_time' );

const handleBlur = ( numberValue, field ) => {
if ( field === 'time' ) {
if ( time !== numberValue ) {
onMinTimeChange( numberValue );
}
} else if ( field === 'maxTime' && maxTime !== numberValue ) {
onMaxTimeChange( numberValue );
}
};

const handleIncrement = ( numberValue, field ) => {
if ( field === 'time' ) {
onMinTimeChange( numberValue );
} else if ( field === 'maxTime' ) {
onMaxTimeChange( numberValue );
}
};

return (
<Flex className="gla-countries-time-input-container">
<FlexBlock>
<MinMaxShippingTimes
time={ time }
maxTime={ maxTime }
handleBlur={ handleBlur }
handleIncrement={ handleIncrement }
/>
</FlexBlock>
</Flex>
);
};

export default CountriesTimeInput;
3 changes: 3 additions & 0 deletions js/src/components/countries-time-input/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.gla-countries-time-input-container {
max-width: $gla-width-medium-large;
}
157 changes: 157 additions & 0 deletions js/src/components/countries-time-input/index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
/**
* External dependencies
*/
import '@testing-library/jest-dom';
import { render, fireEvent, waitFor } from '@testing-library/react';

/**
* Internal dependencies
*/
import CountriesTimeInput from './';
import { useAdaptiveFormInputProps } from '~/components/adaptive-form';

jest.mock( '~/components/adaptive-form', () => ( {
useAdaptiveFormInputProps: jest.fn(),
} ) );

function setupMocks( { time = 1, maxTime = 32 } = {} ) {
const onMinTimeChange = jest.fn();
const onMaxTimeChange = jest.fn();

useAdaptiveFormInputProps.mockImplementation( ( key ) => {
if ( key === 'flat_shipping_min_time' ) {
return { value: time, onChange: onMinTimeChange };
}
return { value: maxTime, onChange: onMaxTimeChange };
} );

return { onMinTimeChange, onMaxTimeChange };
}

describe( 'CountriesTimeInput', () => {
it( 'renders two inputs with values from form context', () => {
setupMocks( { time: 3, maxTime: 7 } );

const { getAllByRole } = render( <CountriesTimeInput /> );
const inputs = getAllByRole( 'textbox' );

expect( inputs ).toHaveLength( 2 );
expect( inputs[ 0 ] ).toHaveValue( '3' );
expect( inputs[ 1 ] ).toHaveValue( '7' );
} );

it( 'shows an empty input for time value of 0 (Same Day placeholder)', () => {
setupMocks( { time: 0, maxTime: 5 } );

const { getAllByRole } = render( <CountriesTimeInput /> );
const [ minInput ] = getAllByRole( 'textbox' );

expect( minInput ).toHaveValue( '' );
} );

describe( 'handleBlur', () => {
it( 'calls onMinTimeChange with the new value when min input blurs with a different value', () => {
const { onMinTimeChange } = setupMocks( { time: 1 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const [ minInput ] = getAllByRole( 'textbox' );

fireEvent.blur( minInput, { target: { value: '5' } } );

expect( onMinTimeChange ).toHaveBeenCalledTimes( 1 );
expect( onMinTimeChange ).toHaveBeenCalledWith( 5 );
} );

it( 'does not call onMinTimeChange when min input blurs with the same value', () => {
const { onMinTimeChange } = setupMocks( { time: 1 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const [ minInput ] = getAllByRole( 'textbox' );

fireEvent.blur( minInput, { target: { value: '1' } } );

expect( onMinTimeChange ).not.toHaveBeenCalled();
} );

it( 'calls onMaxTimeChange with the new value when max input blurs with a different value', () => {
const { onMaxTimeChange } = setupMocks( { maxTime: 32 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const [ , maxInput ] = getAllByRole( 'textbox' );

fireEvent.blur( maxInput, { target: { value: '10' } } );

expect( onMaxTimeChange ).toHaveBeenCalledTimes( 1 );
expect( onMaxTimeChange ).toHaveBeenCalledWith( 10 );
} );

it( 'does not call onMaxTimeChange when max input blurs with the same value', () => {
const { onMaxTimeChange } = setupMocks( { maxTime: 32 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const [ , maxInput ] = getAllByRole( 'textbox' );

fireEvent.blur( maxInput, { target: { value: '32' } } );

expect( onMaxTimeChange ).not.toHaveBeenCalled();
} );
} );

describe( 'handleIncrement (stepper buttons)', () => {
it( 'calls onMinTimeChange when the min increment button is pressed', async () => {
const { onMinTimeChange } = setupMocks( { time: 1 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const incrementButtons = getAllByRole( 'button', {
name: 'Increment',
} );

fireEvent.mouseDown( incrementButtons[ 0 ] );

await waitFor( () => {
expect( onMinTimeChange ).toHaveBeenCalledTimes( 1 );
} );
expect( onMinTimeChange ).toHaveBeenCalledWith( 2 );
} );

it( 'calls onMaxTimeChange when the max increment button is pressed', async () => {
const { onMaxTimeChange } = setupMocks( { maxTime: 32 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const incrementButtons = getAllByRole( 'button', {
name: 'Increment',
} );

fireEvent.mouseDown( incrementButtons[ 1 ] );

await waitFor( () => {
expect( onMaxTimeChange ).toHaveBeenCalledTimes( 1 );
} );
expect( onMaxTimeChange ).toHaveBeenCalledWith( 33 );
} );

it( 'calls onMinTimeChange when the min decrement button is pressed', async () => {
const { onMinTimeChange } = setupMocks( { time: 3 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const decrementButtons = getAllByRole( 'button', {
name: 'Decrement',
} );

fireEvent.mouseDown( decrementButtons[ 0 ] );

await waitFor( () => {
expect( onMinTimeChange ).toHaveBeenCalledTimes( 1 );
} );
expect( onMinTimeChange ).toHaveBeenCalledWith( 2 );
} );

it( 'calls onMaxTimeChange when the max decrement button is pressed', async () => {
const { onMaxTimeChange } = setupMocks( { maxTime: 32 } );
const { getAllByRole } = render( <CountriesTimeInput /> );
const decrementButtons = getAllByRole( 'button', {
name: 'Decrement',
} );

fireEvent.mouseDown( decrementButtons[ 1 ] );

await waitFor( () => {
expect( onMaxTimeChange ).toHaveBeenCalledTimes( 1 );
} );
expect( onMaxTimeChange ).toHaveBeenCalledWith( 31 );
} );
} );
} );
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.gla-countries-time-stepper {
width: $gla-width-smaller;

.gla-countries-time-suffix {
margin-right: $grid-unit-05;
margin-inline-end: $grid-unit-05;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,23 @@ exports[`checkErrors Audience When the audience location option is an invalid va

exports[`checkErrors Offer free shipping With flat shipping rate option When there are some non-free shipping rates, and offer free shipping is checked, and there is no minimum order amount for non-free shipping rates, should not pass 1`] = `"Please enter minimum order for free shipping."`;

exports[`checkErrors Shipping rates For flat type When there are any selected countries with shipping rates not set, should not pass 1`] = `"Please specify estimated shipping rates for all the countries, and the rate cannot be less than 0."`;
exports[`checkErrors Shipping rates For flat type When flat_shipping_rate is a negative number, should not pass 1`] = `"Please specify an estimated shipping rate."`;

exports[`checkErrors Shipping rates For flat type When there are any shipping rates is < 0, should not pass 1`] = `"Please specify estimated shipping rates for all the countries, and the rate cannot be less than 0."`;
exports[`checkErrors Shipping rates For flat type When flat_shipping_rate is undefined, should not pass 1`] = `"Please specify an estimated shipping rate."`;

exports[`checkErrors Shipping rates When the type of shipping rate is an invalid value or missing, should not pass 1`] = `"Please select a shipping rate option."`;

exports[`checkErrors Shipping rates When the type of shipping rate is an invalid value or missing, should not pass 2`] = `"Please select a shipping rate option."`;

exports[`checkErrors Shipping rates When the type of shipping rate is an invalid value or missing, should not pass 3`] = `"Please select a shipping rate option."`;

exports[`checkErrors Shipping times For flat type When minimum max_time is < 0, should not pass 1`] = `"The minimum shipping time must not be more than the maximum shipping time."`;
exports[`checkErrors Shipping times For flat type When flat_shipping_max_time is null or undefined, should not pass 1`] = `"Please specify an estimated maximum shipping time."`;

exports[`checkErrors Shipping times For flat type When minimum times is < 0, should not pass 1`] = `"Please specify estimated shipping times for all the countries, and the time cannot be less than 0."`;
exports[`checkErrors Shipping times For flat type When flat_shipping_min_time > flat_shipping_max_time, should not pass 1`] = `"The minimum shipping time must not be more than the maximum shipping time."`;

exports[`checkErrors Shipping times For flat type When there are any selected countries' shipping times is not set, should not pass 1`] = `"Please specify estimated shipping times for all the countries, and the time cannot be less than 0."`;
exports[`checkErrors Shipping times For flat type When flat_shipping_min_time is null or undefined, should not pass 1`] = `"Please specify an estimated minimum shipping time."`;

exports[`checkErrors Shipping times For flat type When there are any shipping times are < 0, should not pass 1`] = `"Please specify estimated shipping times for all the countries, and the time cannot be less than 0."`;

exports[`checkErrors Shipping times For flat type shouldnt pass if min or max time is null 1`] = `"The minimum shipping time must not be more than the maximum shipping time."`;

exports[`checkErrors Shipping times For flat type shouldnt pass if min time is bigger than max time 1`] = `"The minimum shipping time must not be more than the maximum shipping time."`;
exports[`checkErrors Shipping times For flat type When flat_shipping_min_time or flat_shipping_max_time is < 0, should not pass 1`] = `"The shipping time cannot be less than 0."`;

exports[`checkErrors Shipping times When the type of shipping time is an invalid value or missing, should not pass 1`] = `"Please select a shipping time option."`;

Expand Down
Loading
Loading