Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
349 commits
Select commit Hold shift + click to select a range
3629c0b
GOOWOO-739 addressing aCR comments
Jun 16, 2026
a70c12f
Merge branch 'develop' into feature/notifications-system
asvinb Jun 17, 2026
dc5a1f5
Merge branch 'feature/notifications-system' of github.com:woocommerce…
asvinb Jun 17, 2026
60bac37
GOOWOO-651 Signal Detection for Skipped Campaigns
zamanq Jun 17, 2026
e85ab02
Merge branch 'feature/notifications-system' into add/GOOWOO-739-regis…
asvinb Jun 17, 2026
a541eb2
GOOWOO-739 addressing CR comments
Jun 17, 2026
24f6889
Merge branch 'add/GOOWOO-739-register-gla-notification' of github.com…
Jun 17, 2026
3bdb50a
GOOWOO-739 addressing remaining CR comment and fixing functionality
Jun 17, 2026
7b047f0
refactor(notifications-system): Move panel to marketing notifications…
asvinb Jun 17, 2026
f035eb6
refactor(notifications-slot): Refactor marketing notifications store …
asvinb Jun 17, 2026
c664add
fix(notifications): Only build dynamic map after MC resolution
asvinb Jun 17, 2026
124dd81
refactor(notifications): Rename marketing slot functions
asvinb Jun 17, 2026
f92448f
Address PR feedback for SalesNotGrowing and ReadyButNoSales Evaluators
zamanq Jun 18, 2026
7f313fe
GOOWOO-653 Signal Detection for Not Onboarded 90+ Days
zamanq Jun 18, 2026
e39a7f5
build: Update bundle size limit for notifications-system.js
asvinb Jun 18, 2026
6c5724b
Address CI pipeline issue
zamanq Jun 18, 2026
7760709
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 18, 2026
a81aaf3
Merge branch 'feature/GOOWOO-644-google-ads-api-evaluators' of https:…
zamanq Jun 18, 2026
7e35cd9
refactor(marketing-slot): Explicitly initialize slot and update class
asvinb Jun 18, 2026
fc10ce1
Merge branch 'feature/GOOWOO-645-di-wiring' of https://github.com/woo…
zamanq Jun 18, 2026
04a4b68
Merge branch 'feature/GOOWOO-651-signal-detection-skipped-campaign' o…
zamanq Jun 18, 2026
053be4c
style: Remove unnecessary empty container display rule
asvinb Jun 18, 2026
8dfcc95
Merge pull request #3475 from woocommerce/feature/GOOWOO-639-core-not…
asvinb Jun 18, 2026
260dbf2
Merge pull request #3479 from woocommerce/feature/GOOWOO-640-rest-api…
asvinb Jun 18, 2026
0199746
Merge branch 'feature/notifications-system' into add/GOOWOO-739-regis…
asvinb Jun 18, 2026
e3add08
chore: Update expected size for google-listings-and-ads.zip
asvinb Jun 18, 2026
361dedc
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jun 18, 2026
2656028
merge feature/notifications-system into feature branch and resolve co…
zamanq Jun 18, 2026
c89c55e
Merge pull request #3481 from woocommerce/feature/GOOWOO-641-admin-me…
zamanq Jun 18, 2026
f4177eb
merge feature/notifications-system into feature branch and resolve co…
zamanq Jun 18, 2026
bf3b64b
merge feature/GOOWOO-642-low-no-cost-evaluators into feature branch a…
zamanq Jun 18, 2026
7e22ef3
Merge pull request #3501 from woocommerce/feature/GOOWOO-644-google-a…
zamanq Jun 18, 2026
8707996
Merge pull request #3507 from woocommerce/feature/GOOWOO-645-di-wiring
zamanq Jun 18, 2026
8f45f31
Addressed feedback on CoreServiceProvider and WcInstallTimeStamp
zamanq Jun 18, 2026
edd7dda
Merged feature/GOOWOO-642 into feature branch and resolved conflict
zamanq Jun 18, 2026
a33dadb
Merged upstream changes into feature branch and resolved conflict
zamanq Jun 18, 2026
995f872
Address CI Issues
zamanq Jun 18, 2026
bce3cd8
Merge branch 'feature/GOOWOO-642-low-no-cost-evaluators' of https://g…
zamanq Jun 18, 2026
e7332dd
Address CI Issues
zamanq Jun 18, 2026
ef99b02
Merge branch 'feature/GOOWOO-642-low-no-cost-evaluators' of https://g…
zamanq Jun 18, 2026
c286d6a
Merge pull request #3516 from woocommerce/add/GOOWOO-739-register-gla…
asvinb Jun 18, 2026
7a12941
Merge pull request #3513 from woocommerce/feature/GOOWOO-651-signal-d…
zamanq Jun 18, 2026
f3c83c6
Merge feature/GOOWOO-643 into feature branch and resolve conflicts
zamanq Jun 18, 2026
7daa2cc
Merge pull request #3499 from woocommerce/add/GOOWOO-739-register-gla…
asvinb Jun 19, 2026
411b3e6
GOOWOO-657 Signal Detection Payment and Shipping Set But No Sales
zamanq Jun 19, 2026
c7b2e58
Addressed PR feedback
zamanq Jun 23, 2026
c72bfd1
Cleanup and phpcs issue fix
zamanq Jun 23, 2026
4f82722
Merge GW-642 into feature branch and resolve conflict
zamanq Jun 23, 2026
fa68ba2
Addressed PR feedback and made adjustments
zamanq Jun 23, 2026
3c7b973
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 23, 2026
38cac71
Merge GW-643 into feature branch and resolve conflicts
zamanq Jun 23, 2026
da272a6
Addressed PR feedback
zamanq Jun 23, 2026
3cabc02
Merge branch 'feature/GOOWOO-653-signal-detection-not-onboarded-90-da…
zamanq Jun 23, 2026
e0efff2
Change the ID to align better with the class and constants
zamanq Jun 23, 2026
cee3e8c
Refactored based on updated user acceptance criteria
zamanq Jun 23, 2026
87c0623
GOOWOO-659 Signal Detection for Abandoned Onboarding
zamanq Jun 23, 2026
5809e0f
Fix Unit test issue
zamanq Jun 23, 2026
1881dd7
Made properties private
zamanq Jun 23, 2026
b3d3b1d
Merge pull request #3490 from woocommerce/feature/GOOWOO-642-low-no-c…
zamanq Jun 24, 2026
4777204
Merge pull request #3518 from woocommerce/feature/GOOWOO-653-signal-d…
zamanq Jun 24, 2026
85ec4c0
GOOWOO-661 Signal Detection Product Issues
zamanq Jun 24, 2026
5d7a587
Merge pull request #3525 from woocommerce/feature/GOOWOO-657-signal-d…
zamanq Jun 24, 2026
16e4f12
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 24, 2026
0fac68e
Merge feature/notifications-system into feature branch and resolve co…
zamanq Jun 24, 2026
64ebf79
Merge GW-643 into feature branch and resolved conflict
zamanq Jun 24, 2026
17788e0
GOOWOO-738 add empty fallback to receive notifications reducer
Jun 24, 2026
8c2af5d
fix(data): unwrap notifications array before storing in state
asvinb Jun 24, 2026
2bd01ef
fix(data): inline action.notifications in RECEIVE_NOTIFICATIONS
asvinb Jun 24, 2026
cd5b67d
build: Update notifications system bundle size
asvinb Jun 24, 2026
f4057a6
Refactoring and fixing issues for ready but no sales evaluator
zamanq Jun 24, 2026
11d2722
Merge pull request #3534 from woocommerce/fix/GOOWOO-738-notifications
asvinb Jun 24, 2026
fcfd8bf
Merge branch 'feature/notifications-system' into feature/GOOWOO-643-w…
asvinb Jun 24, 2026
484bb81
Use correct notification IDs
asvinb Jun 24, 2026
c4c458b
Refactoring and fixing visibility for props and methods
zamanq Jun 24, 2026
aae9b14
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 24, 2026
7958f94
GOOWOO-672 change coupon URL in case of coupons not synced
Jun 25, 2026
f0170a0
GOOWOO-754 add notifications skeleton
Jun 25, 2026
abeae20
Fix for GW-653 QA for case 4 and 5
zamanq Jun 25, 2026
d65f278
Fix for GW-653 QA for 90days in case 4 and 5
zamanq Jun 25, 2026
315fb06
GOOWOO-672 change function name
Jun 25, 2026
9bffbc0
Fix PHP Unit Test Failures
zamanq Jun 25, 2026
166eef2
GOOWOO-754 bump maxSize
Jun 25, 2026
7ced078
refactor(notifications): rename couponsUrl to wcCouponsUrl
asvinb Jun 25, 2026
1461bd7
Merge pull request #3538 from woocommerce/add/GOOWOO-672-coupons-not-…
asvinb Jun 25, 2026
19b364e
GOOWOO-754 addressing CR comments
Jun 25, 2026
ed3c193
GOOWOO-754 update mock
Jun 25, 2026
d3ed6f8
Adjustments on GOOWOO-647 and 648 for FE-BE
zamanq Jun 26, 2026
dda01e6
Fix CI issues for build and bundlewatch
zamanq Jun 26, 2026
44eb2be
GOOWOO-754 different approach for notification skeleton
Jun 26, 2026
222283c
GOOWOO-754 change files location
Jun 26, 2026
8c628d3
GOOWOO-754 display block to skeleton logo
Jun 26, 2026
eba31fe
GOOWOO-754 change filename to notification-skeleton
Jun 26, 2026
0a0ba54
fix(notifications): rename no-active-campaign key to paused-campaign
asvinb Jun 26, 2026
a8dfcbd
Merge branch 'develop' into feature/notifications-system
asvinb Jun 26, 2026
62f098f
Merge branch 'feature/notifications-system' of github.com:woocommerce…
asvinb Jun 26, 2026
9b3c181
Merge branch 'feature/notifications-system' into feature/GOOWOO-643-w…
asvinb Jun 26, 2026
a1a3c59
Merge branch 'feature/notifications-system' into add/GOOWOO-754-notif…
Jun 26, 2026
682a850
Address CR Feedback
zamanq Jun 26, 2026
c23cbc3
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 26, 2026
c2b50e9
GOOWOO-754 handling isReady and hasFinishedResolution
Jun 26, 2026
6307543
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 26, 2026
b8e83d3
Merge branch 'feature/GOOWOO-659-signal-detection-abandoned-onboardin…
zamanq Jun 26, 2026
a6d7e8d
Merge pull request #3533 from woocommerce/feature/GOOWOO-661-signal-d…
zamanq Jun 26, 2026
6363fbf
Merge pull request #3539 from woocommerce/add/GOOWOO-754-notification…
asvinb Jun 29, 2026
2267655
Merge branch 'feature/notifications-system' into feature/GOOWOO-643-w…
asvinb Jun 29, 2026
875aa27
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 29, 2026
a15777e
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 29, 2026
af33b14
GOOWOO-655 Signal Detection Sold 10 Items
zamanq Jun 29, 2026
612610d
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of https://githu…
zamanq Jun 29, 2026
6dabce0
Address PR feedback and Refactor
zamanq Jun 29, 2026
2f9022a
Merge branch 'feature/GOOWOO-659-signal-detection-abandoned-onboardin…
zamanq Jun 29, 2026
9887b17
GOOWOO-663 Signal Detection Paused Campaigns
zamanq Jun 29, 2026
5a1df9a
GOOWOO-665 Signal Detection Active Campaign But Zero Sales
zamanq Jun 30, 2026
3afb0a6
Removed the 90 days check
zamanq Jun 30, 2026
7d54292
Rename method for ReadyButNoSale Evaluator
zamanq Jun 30, 2026
ae002b0
perf(notifications): Debounce MutationObserver sync calls
asvinb Jun 30, 2026
079112b
Merge branch 'feature/GOOWOO-643-wc-data-evaluators' of github.com:wo…
asvinb Jun 30, 2026
8a2a42f
refactor(marketing-slot): Encapsulate slot logic and rename init to c…
asvinb Jun 30, 2026
7b6002b
refactor: Extract container placement and simplify mount
asvinb Jun 30, 2026
ca7bdfd
Merge pull request #3497 from woocommerce/feature/GOOWOO-643-wc-data-…
asvinb Jun 30, 2026
2ea9ca4
Merge branch 'feature/notifications-system' into feature/GOOWOO-655-s…
asvinb Jun 30, 2026
32a2ccf
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jun 30, 2026
295e32b
Address CR Feedback and Refactoring
zamanq Jun 30, 2026
6abe378
Merge branch 'feature/GOOWOO-655-signal-detection-sold-10-items' of h…
zamanq Jun 30, 2026
2ca8f2f
Fix phpcs linting
zamanq Jun 30, 2026
87c4b8a
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jun 30, 2026
06d732d
Refactor to allow recurring dismissal for GOOWOO-661
zamanq Jun 30, 2026
79f8560
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jun 30, 2026
47d56f7
Address PR feedback and refactor
zamanq Jun 30, 2026
3a95136
Merge branch 'develop' into feature/notifications-system
asvinb Jul 1, 2026
56b74e0
Merge pull request #3549 from woocommerce/feature/GOOWOO-663-signal-d…
asvinb Jul 1, 2026
5d17124
Added comment for clarity on campaign id
zamanq Jul 1, 2026
d92bb70
Merge branch 'feature/GOOWOO-659-signal-detection-abandoned-onboardin…
zamanq Jul 1, 2026
3599399
Merge pull request #3550 from woocommerce/feature/GOOWOO-665-signal-d…
zamanq Jul 1, 2026
6fa0540
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 1, 2026
6fc148f
Merge branch 'feature/GOOWOO-659-signal-detection-abandoned-onboardin…
zamanq Jul 1, 2026
d4cf2d2
Fix phpcs
zamanq Jul 1, 2026
c14c9fd
Fix phpcs issues
zamanq Jul 1, 2026
35f9a71
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 1, 2026
65ac9b8
GOOWOO-671 Signal Detection Coupon Not Synced
zamanq Jul 1, 2026
feab278
GOOWOO-673 Signal Detection Sales Not Growing
zamanq Jul 2, 2026
6391421
Address PR feedback and refactor
zamanq Jul 2, 2026
9bcdae4
Fix phpcs
zamanq Jul 2, 2026
08a6279
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 2, 2026
587bd7b
Address PR feedback and refactor
zamanq Jul 2, 2026
5ac2b71
GOOWOO-675 Signal Detection Tracking Off
zamanq Jul 2, 2026
999191a
Merge pull request #3557 from woocommerce/feature/GOOWOO-671-signal-d…
asvinb Jul 2, 2026
136c755
Merge pull request #3558 from woocommerce/feature/GOOWOO-673-signal-d…
asvinb Jul 2, 2026
4d9906a
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 2, 2026
22be30a
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 2, 2026
7e0e7e0
Addressed PR feedback and refactored
zamanq Jul 2, 2026
7f5afa3
Addressed PR feedback and refactored
zamanq Jul 3, 2026
d6fa18c
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 3, 2026
d6dc3d5
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 3, 2026
94d55e9
refactor(urls): Rename and specify WC tracking settings URL
asvinb Jul 3, 2026
1724570
Merge pull request #3561 from woocommerce/feature/GOOWOO-675-signal-d…
asvinb Jul 3, 2026
845f596
Merge branch 'feature/notifications-system' into feature/GOOWOO-659-s…
asvinb Jul 3, 2026
9287728
docs: Clarify caching scope in notification evaluator trait
asvinb Jul 3, 2026
53294d3
Merge branch 'feature/notifications-system' into feature/GOOWOO-655-s…
asvinb Jul 3, 2026
e4638b8
Merge pull request #3546 from woocommerce/feature/GOOWOO-655-signal-d…
asvinb Jul 3, 2026
585c925
Addressed PR feedback and refactored
zamanq Jul 3, 2026
3b34b64
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 3, 2026
c229b57
Merge feature/notifications-system into feature branch and resolve co…
zamanq Jul 3, 2026
bc7f5ef
GOOWOO-765 fix notification badge on WP sidebar menu
Jul 3, 2026
d5403d3
Address PR feedback and refactor
zamanq Jul 3, 2026
be36649
Merge branch 'feature/GOOWOO-659-signal-detection-abandoned-onboardin…
zamanq Jul 3, 2026
249bf72
GOOWOO-765 addressing CR comments
Jul 3, 2026
9de097e
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 3, 2026
1c582ad
Address PR feedback and removed pmax check
zamanq Jul 3, 2026
a2e6f5f
Merge pull request #3563 from woocommerce/fix/GOOWOO-651-signal-detec…
asvinb Jul 6, 2026
3e92018
GOOWOO-765 refactoring and improvements
Jul 6, 2026
ad2d89b
refactor(constants): Rename GLA notification dismissed value
asvinb Jul 6, 2026
683a99e
Merge pull request #3564 from woocommerce/add/GOOWOO-765-notification…
asvinb Jul 6, 2026
6627146
Merge feature/notifications-system into feature branch and resolve co…
zamanq Jul 6, 2026
b0de95b
Refactor MCs google account connect check and removed redundancies
zamanq Jul 6, 2026
2ae0ab6
visibility change in MCService
zamanq Jul 6, 2026
41a10b0
Merge pull request #3529 from woocommerce/feature/GOOWOO-659-signal-d…
asvinb Jul 7, 2026
833521d
GOOWOO-768 Extract Notification Services to a Dedicated Notification …
zamanq Jul 7, 2026
62fde76
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 7, 2026
da6060d
Merge pull request #3567 from woocommerce/feature/GOOWOO-768-extract-…
asvinb Jul 8, 2026
7d0aaa3
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 9, 2026
553db94
Merge develop into feature/notifications-system and resolve conflicts
zamanq Jul 9, 2026
05498fe
refactor(notifications): Externalize and self-initialize marketing slot
asvinb Jul 9, 2026
78eb341
Fix bug for Skipped Campaign Signal Detection
zamanq Jul 9, 2026
acd301a
refactor(notifications): Improve system state, robustness, and perfor…
asvinb Jul 10, 2026
afdf453
perf: Memoize notifications system map
asvinb Jul 10, 2026
36790cc
Merge pull request #3580 from woocommerce/add/GOOWOO-788-notification…
asvinb Jul 10, 2026
8f0e930
Merge branch 'feature/notifications-system' into fix/GOOWOO-651-skipp…
asvinb Jul 10, 2026
8d2ccd3
fix(notification): Evaluate skipped campaign based on enabled PMax
asvinb Jul 10, 2026
9220494
Merge pull request #3583 from woocommerce/feature/notifications-system
jamesmorrison Jul 13, 2026
19b8e9e
feat(notifications): Add tracking for notification interactions and r…
asvinb Jul 13, 2026
8780e3b
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 14, 2026
dd3c90b
Resolve conflicts.
jamesmorrison Jul 14, 2026
2999dcd
Merge pull request #3589 from woocommerce/feature/GOOWOO-782-integrat…
jamesmorrison Jul 14, 2026
191feea
docs(Tracking): Document new notification and onboarding tracking events
asvinb Jul 15, 2026
34197b8
Merge pull request #3578 from woocommerce/fix/GOOWOO-651-skipped-camp…
ankitguptaindia Jul 15, 2026
1fd830c
Update constants import path
AlejandroPerezMartin Jul 15, 2026
8b18d3b
Revert path change, bump bundle sizes
AlejandroPerezMartin Jul 15, 2026
4b39fb0
Merge pull request #3587 from woocommerce/feature/GOOWOO-786-auto-pro…
joemcgill Jul 16, 2026
370f209
Merge pull request #3594 from woocommerce/add/GOOWOO-677-tracking
asvinb Jul 16, 2026
92bed0b
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 16, 2026
a80aedb
fix(notifications): load bundles on all wc-admin pages for SPA nav
asvinb Jul 17, 2026
2bd2cdf
test(notifications): update SPA nav tests for wc-admin-wide asset loa…
asvinb Jul 17, 2026
17cd36a
fix(notifications): link "Terms apply." and fix onboarding URL
asvinb Jul 17, 2026
25fae97
Merge pull request #3606 from woocommerce/fix/GOOWOO-788-spa-fix
asvinb Jul 17, 2026
640dc7e
Merge branch 'feature/notifications-system' of github.com:woocommerce…
AlejandroPerezMartin Jul 17, 2026
3d9869a
Merge pull request #3607 from woocommerce/fix/GOOWOO-812-incorrect-url
asvinb Jul 17, 2026
e0d93f2
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 17, 2026
63c32e3
Merge branch 'feature/notifications-system' of github.com:woocommerce…
AlejandroPerezMartin Jul 17, 2026
6c3e0e3
fix(notifications): avoid duplicate store reg and glaData clobber
asvinb Jul 17, 2026
86097be
Fix notification appearance for service based merchants
zamanq Jul 17, 2026
cdb8fd4
Merge branch 'fix/GOOWOO-788-spa-fix' of github.com:woocommerce/googl…
AlejandroPerezMartin Jul 20, 2026
a46d457
Merge pull request #3612 from woocommerce/fix/GOOWOO-651-skipped-camp…
asvinb Jul 20, 2026
b311e5a
Fix notification system test failure
AlejandroPerezMartin Jul 20, 2026
2b40df8
Merge pull request #3610 from woocommerce/fix/GOOWOO-788-spa-fix
asvinb Jul 20, 2026
1c183f7
Merge branch 'develop' into feature/notifications-system
asvinb Jul 20, 2026
d1e4715
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 20, 2026
e0325e8
Fix Service Based Merchants Abandoned Onboarding Notification
zamanq Jul 21, 2026
c040a43
fix(notifications): move pill to Marketing Overview submenu item
asvinb Jul 22, 2026
15b5c54
test(notifications): stub register_assets in mock, make it mockable
asvinb Jul 22, 2026
f927c08
Merge branch 'feature/notifications-system' of github.com:woocommerce…
AlejandroPerezMartin Jul 23, 2026
466493d
Merge pull request #3626 from woocommerce/fix/GOOWOO-819-pill-updates
ankitguptaindia Jul 23, 2026
170155e
Replace notification display condition to rely on connected_account
AlejandroPerezMartin Jul 23, 2026
6477693
Update tests
AlejandroPerezMartin Jul 23, 2026
ce17da0
Merge branch 'develop' into feature/notifications-system
asvinb Jul 24, 2026
1463489
Merge branch 'feature/notifications-system' of github.com:woocommerce…
asvinb Jul 24, 2026
38f1430
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 24, 2026
1a5e724
Refactor notification evaluators to reuse `RevenueOrdersTrait` and re…
alaca Jul 24, 2026
22eccbd
Update `SalesNotGrowingEvaluator` to handle paid order statuses, repl…
alaca Jul 24, 2026
b3688a9
Add `RevenueOrdersTrait` to count paid WooCommerce orders with revenu…
alaca Jul 24, 2026
ace0a26
Add unit tests for revenue order checks in `SalesNotGrowingEvaluator`…
alaca Jul 24, 2026
7d610bf
GOOWOO-820 Notifications Caching
zamanq Jul 24, 2026
9c27e65
PHPCS fix
zamanq Jul 24, 2026
b5f6550
Bump bundle size
zamanq Jul 24, 2026
ba6e04c
Merge pull request #3641 from woocommerce/fix/GOOWOO-820-notification…
jamesmorrison Jul 27, 2026
129bdb6
update Sold10ItemsEvaluator to PaidOrdersEvaluator including keys and…
jjgrainger Jul 27, 2026
47aa374
Update NotOnboarded90DaysEvaluator to NotOnboardedEvaluator including…
jjgrainger Jul 27, 2026
ebff380
Merged feature/notifications-system; fixed conflicts.
jamesmorrison Jul 27, 2026
8fbb9b6
Update SkippedCampaignEvaluator to SkippedCampaignCreationEvaluator
jjgrainger Jul 27, 2026
5dca975
Merge pull request #3640 from woocommerce/fix/GOOWOO-824-paid-statuse…
jamesmorrison Jul 27, 2026
c13524a
Merge pull request #3637 from woocommerce/fix/GOOWOO-836-enhancedconv…
jamesmorrison Jul 27, 2026
a4daa2d
Merge pull request #3620 from woocommerce/fix/GOOWOO-816-abandoned-on…
jamesmorrison Jul 27, 2026
2f435d8
Merge branch 'feature/notifications-system' into fix/GOOWOO-825-updat…
jjgrainger Jul 27, 2026
d8af7b1
Fix coupon sync and paused campaign
zamanq Jul 27, 2026
75ec6ae
Merge pull request #3642 from woocommerce/fix/GOOWOO-825-update-evalu…
jamesmorrison Jul 27, 2026
d460c40
Merge branch 'feature/notifications-system' of https://github.com/woo…
zamanq Jul 27, 2026
3f15f2f
Merge pull request #3643 from woocommerce/fix/GOOWOO-820-notification…
joemcgill Jul 27, 2026
4ece4f8
Merge branch 'develop' into feature/notifications-system
joemcgill Jul 28, 2026
e1dff8b
Merge branch 'develop' into feature/notifications-system
joemcgill Jul 29, 2026
32f9935
Merge branch 'develop' into feature/notifications-system
joemcgill Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
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',
MutationObserver: 'readonly',
},
rules: {
'@wordpress/i18n-text-domain': [
Expand Down
2 changes: 1 addition & 1 deletion .externalized.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
["@woocommerce/components","@woocommerce/currency","@woocommerce/customer-effort-score","@woocommerce/data","@woocommerce/date","@woocommerce/navigation","@woocommerce/number","@woocommerce/settings","@woocommerce/tracks","@wordpress/api-fetch","@wordpress/components","@wordpress/compose","@wordpress/data","@wordpress/data-controls","@wordpress/date","@wordpress/dom","@wordpress/element","@wordpress/hooks","@wordpress/html-entities","@wordpress/i18n","@wordpress/preferences","@wordpress/primitives","@wordpress/url","@wordpress/viewport","jquery","lodash","react","react-dom"]
["@woocommerce/components","@woocommerce/currency","@woocommerce/customer-effort-score","@woocommerce/data","@woocommerce/date","@woocommerce/navigation","@woocommerce/number","@woocommerce/settings","@woocommerce/tracks","@wordpress/api-fetch","@wordpress/components","@wordpress/compose","@wordpress/data","@wordpress/data-controls","@wordpress/date","@wordpress/dom","@wordpress/element","@wordpress/hooks","@wordpress/html-entities","@wordpress/i18n","@wordpress/preferences","@wordpress/primitives","@wordpress/url","@wordpress/viewport","jquery","lodash","react","react-dom","~/notifications-system/woo-marketing-notifications-slot"]
4 changes: 4 additions & 0 deletions js/src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,7 @@ export const GEN_AI_ASSET_TYPES = {

export const EU_POLITICAL_ADVERTISING_DECLARATION_REQUIRED_ERROR_CODE =
'eu_political_advertising_declaration_required';

// Notification hooks
export const GLA_NOTIFICATION_DISMISSED =
'gla_notifications_system_notification_dismissed';
2 changes: 2 additions & 0 deletions js/src/data/action-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ const TYPES = {
RECEIVE_CYO_INCENTIVES: 'RECEIVE_CYO_INCENTIVES',
RECEIVE_GEN_AI_MEDIA_ASSETS: 'RECEIVE_GEN_AI_MEDIA_ASSETS',
RECEIVE_GEN_AI_TEXT_ASSETS: 'RECEIVE_GEN_AI_TEXT_ASSETS',
RECEIVE_NOTIFICATIONS: 'RECEIVE_NOTIFICATIONS',
DISMISS_NOTIFICATION: 'DISMISS_NOTIFICATION',
};

export default TYPES;
40 changes: 40 additions & 0 deletions js/src/data/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -1510,3 +1510,43 @@ export function* disconnectYouTubeAccount() {
throw error;
}
}

/**
* @param {Array} notifications
* @return {Object} Action object.
*/
export function receiveNotifications( notifications ) {
return {
type: TYPES.RECEIVE_NOTIFICATIONS,
notifications,
};
}

/**
* Dismiss a notification by ID.
*
* @param {string} id Notification ID.
* @throws Will throw an error if the request failed.
*/
export function* dismissNotification( id ) {
try {
yield apiFetch( {
path: `${ API_NAMESPACE }/notifications/${ id }`,
method: 'DELETE',
} );

return {
type: TYPES.DISMISS_NOTIFICATION,
id,
};
} catch ( error ) {
handleApiError(
error,
__(
'There was an error dismissing the notification.',
'google-listings-and-ads'
)
);
throw error;
}
}
83 changes: 45 additions & 38 deletions js/src/data/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
import { registerStore, useDispatch, dispatch } from '@wordpress/data';
import { registerStore, select, useDispatch, dispatch } from '@wordpress/data';
import apiFetch from '@wordpress/api-fetch';
import { getHistory } from '@woocommerce/navigation';

Expand All @@ -18,49 +18,56 @@ import reducer from './reducer';
import { createErrorResponseCatcher } from './apiFetchMiddlewares';
import { getReconnectAccountUrl } from '~/utils/urls';

registerStore( STORE_KEY, {
actions,
selectors,
resolvers,
controls,
reducer,
} );
// This module is bundled separately per script entry, so more than one entry
// (e.g. the main app and the notifications-system bundle) can import it on
// the same page. Guard against re-running this setup — and re-registering
// the store, which `@wordpress/data` only warns about rather than prevents —
// so only the first bundle to load performs it.
if ( ! select( STORE_KEY ) ) {
registerStore( STORE_KEY, {
actions,
selectors,
resolvers,
controls,
reducer,
} );

dispatch( STORE_KEY ).hydratePrefetchedData( glaData.initialWpData );
dispatch( STORE_KEY ).hydratePrefetchedData( glaData.initialWpData );

apiFetch.use(
createErrorResponseCatcher( ( response ) => {
if ( glaData.mcSetupComplete && response.status === 401 ) {
return ( response.json || response.text )
.call( response )
.then( ( errorInfo ) => {
if ( typeof errorInfo === 'string' ) {
return { message: errorInfo };
}
return errorInfo;
} )
.then( ( errorInfo ) => {
const url = getReconnectAccountUrl( errorInfo.code );
apiFetch.use(
createErrorResponseCatcher( ( response ) => {
if ( glaData.mcSetupComplete && response.status === 401 ) {
return ( response.json || response.text )
.call( response )
.then( ( errorInfo ) => {
if ( typeof errorInfo === 'string' ) {
return { message: errorInfo };
}
return errorInfo;
} )
.then( ( errorInfo ) => {
const url = getReconnectAccountUrl( errorInfo.code );

if ( url ) {
getHistory().replace( url );
}
if ( url ) {
getHistory().replace( url );
}

return errorInfo;
} )
.then( ( errorInfo ) => {
// Inject the status code to let the subsequent handlers can identify the 401 response error.
return Promise.reject( {
...errorInfo,
statusCode: response.status,
return errorInfo;
} )
.then( ( errorInfo ) => {
// Inject the status code to let the subsequent handlers can identify the 401 response error.
return Promise.reject( {
...errorInfo,
statusCode: response.status,
} );
} );
} );
}
}

// Throws error response to subsequent middlewares
throw response;
} )
);
// Throws error response to subsequent middlewares
throw response;
} )
);
}

export { STORE_KEY };

Expand Down
12 changes: 12 additions & 0 deletions js/src/data/reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ const DEFAULT_STATE = {
budgetMetrics: {},
settings: null,
},
notifications: [],
gtinMigrationStatus: null,
price_benchmark: {
suggestions: {
Expand Down Expand Up @@ -737,6 +738,17 @@ const reducer = ( state = DEFAULT_STATE, action ) => {
return setIn( state, 'mc.accounts.youtube', null );
}

case TYPES.RECEIVE_NOTIFICATIONS: {
return setIn( state, 'notifications', action.notifications );
}

case TYPES.DISMISS_NOTIFICATION: {
const notifications = state.notifications.filter(
( notification ) => notification.id !== action.id
);
return setIn( state, 'notifications', notifications );
}

case TYPES.DISCONNECT_ACCOUNTS_ALL:
default:
return state;
Expand Down
24 changes: 23 additions & 1 deletion js/src/data/resolvers.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import {
adaptRaiseAdsBudgetRecommendations,
} from './adapters';
import { fetchWithHeaders, awaitPromise, recordGlaDataEvent } from './controls';

import {
fetchShippingRates,
fetchShippingTimes,
Expand Down Expand Up @@ -63,6 +62,7 @@ import {
receiveCYOIncentives,
receiveEnhancedConversionsStatus,
receiveAdsSettings,
receiveNotifications,
} from './actions';

/**
Expand Down Expand Up @@ -847,3 +847,25 @@ getYouTubeAccount.shouldInvalidate = ( action ) => {
action.invalidateRelatedState
);
};

export function* getNotifications() {
try {
const response = yield apiFetch( {
path: `${ API_NAMESPACE }/notifications`,
} );

yield receiveNotifications( response.notifications ?? [] );
} catch ( error ) {
handleApiError(
error,
__(
'There was an error loading notifications.',
'google-listings-and-ads'
)
);
}
}

getNotifications.shouldInvalidate = ( action ) => {
return action.type === TYPES.DISMISS_NOTIFICATION;
};
14 changes: 14 additions & 0 deletions js/src/data/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -606,3 +606,17 @@ export const getGenAITextAssets = ( state, url, assetType ) => {

return textAssets;
};

/**
* @typedef {Object} Notification
* @property {string} id Notification ID.
* @property {number} triggered_at Unix timestamp of when the notification was triggered.
*/

/**
* @param {Object} state
* @return {Array<Notification>} Current notifications, or empty array if none.
*/
export const getNotifications = ( state ) => {
return state.notifications ?? [];
};
39 changes: 39 additions & 0 deletions js/src/data/test/reducer.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ describe( 'reducer', () => {
budgetMetrics: {},
settings: null,
},
notifications: [],
gtinMigrationStatus: null,
price_benchmark: {
suggestions: {
Expand Down Expand Up @@ -1077,6 +1078,44 @@ describe( 'reducer', () => {
);
} );

describe( 'Notifications', () => {
const notifications = [
{ id: 'notif-1', triggered_at: 1000 },
{ id: 'notif-2', triggered_at: 2000 },
];

it( 'RECEIVE_NOTIFICATIONS populates state.notifications', () => {
const state = reducer( prepareState(), {
type: TYPES.RECEIVE_NOTIFICATIONS,
notifications,
} );

expect( state.notifications ).toEqual( notifications );
} );

it( 'DISMISS_NOTIFICATION removes the matching notification by id', () => {
const initial = prepareState( 'notifications', notifications );
const state = reducer( initial, {
type: TYPES.DISMISS_NOTIFICATION,
id: 'notif-1',
} );

expect( state.notifications ).toEqual( [
{ id: 'notif-2', triggered_at: 2000 },
] );
} );

it( 'DISMISS_NOTIFICATION with unknown id leaves notifications unchanged', () => {
const initial = prepareState( 'notifications', notifications );
const state = reducer( initial, {
type: TYPES.DISMISS_NOTIFICATION,
id: 'notif-99',
} );

expect( state.notifications ).toEqual( notifications );
} );
} );

describe( 'Detailed errors', () => {
const path = 'detailed_errors';

Expand Down
25 changes: 25 additions & 0 deletions js/src/data/test/selectors.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Internal dependencies
*/
import { getNotifications } from '../selectors';

describe( 'getNotifications', () => {
it( 'returns state.notifications when present', () => {
const notifications = [
{ id: 'notif-1', triggered_at: 1000 },
{ id: 'notif-2', triggered_at: 2000 },
];

expect( getNotifications( { notifications } ) ).toEqual(
notifications
);
} );

it( 'returns empty array when state.notifications is undefined', () => {
expect( getNotifications( {} ) ).toEqual( [] );
} );

it( 'returns empty array when state.notifications is null', () => {
expect( getNotifications( { notifications: null } ) ).toEqual( [] );
} );
} );
Loading
Loading