Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transactions Download functionality Improvements #10211

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from

Conversation

jessy-p
Copy link
Contributor

@jessy-p jessy-p commented Jan 22, 2025

Fixes #10255 which is part of the Epic #9969

Changes proposed in this Pull Request

  • removes the @woocommerce/csv-export based JS export on the Transactions page
  • Uses the server transactions/download endpoint for all downloads instead.
  • The export API returns an export_id
  • Polls the transactions/download/<export_id> endpoint to get the download URL.
  • If the file is available, the file is downloaded immediately. Else, it will be emailed to the merchant.

By removing the browser export and using only server based export, the functionality is simplified and made consistent. We also preserve the functionality for the merchant by making the file available immediately in the browser whenever possible.

Testing instructions

To be tested with server PR https://github.com/Automattic/transact-platform-server/pull/7154

  • Download various numbers of rows or filtered rows and check that the file is downloaded. An email is also sent to the merchant with the download URL.
  • If the cron job is not running/slow, i.e the file is not available, the file will not be downloaded and a message displayed that the file will be emailed. When the job runs, the email is sent.

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@jessy-p jessy-p marked this pull request as draft January 22, 2025 01:17
@botwoo
Copy link
Collaborator

botwoo commented Jan 22, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10211 or branch name update/9969-poll-async-job in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: bfc7cb1
  • Build time: 2025-01-30 13:59:13 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Jan 22, 2025

Size Change: +533 B (0%)

Total Size: 1.37 MB

Filename Size Change
release/woocommerce-payments/dist/index.js 302 kB +383 B (0%)
release/woocommerce-payments/dist/multi-currency-switcher-block.js 61.1 kB +21 B (0%)
release/woocommerce-payments/dist/multi-currency.js 57.8 kB +27 B (0%)
release/woocommerce-payments/dist/order.js 42.5 kB +24 B (0%)
release/woocommerce-payments/dist/payment-gateways.js 38.9 kB +31 B (0%)
release/woocommerce-payments/dist/settings.js 225 kB +47 B (0%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.37 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.37 kB
release/woocommerce-payments/assets/css/success.css 182 B
release/woocommerce-payments/assets/css/success.rtl.css 184 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.64 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.64 kB
release/woocommerce-payments/dist/blocks-checkout.js 55.7 kB
release/woocommerce-payments/dist/cart-block.js 17.2 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.13 kB
release/woocommerce-payments/dist/checkout.css 1.13 kB
release/woocommerce-payments/dist/checkout.js 33.6 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/express-checkout.css 229 B
release/woocommerce-payments/dist/express-checkout.js 15.7 kB
release/woocommerce-payments/dist/frontend-tracks.js 854 B
release/woocommerce-payments/dist/index-rtl.css 39.9 kB
release/woocommerce-payments/dist/index.css 39.9 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.47 kB
release/woocommerce-payments/dist/multi-currency.css 4.47 kB
release/woocommerce-payments/dist/order-rtl.css 730 B
release/woocommerce-payments/dist/order.css 730 B
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.33 kB
release/woocommerce-payments/dist/payment-gateways.css 1.33 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 386 B
release/woocommerce-payments/dist/plugins-page.css 386 B
release/woocommerce-payments/dist/plugins-page.js 20.1 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 12.5 kB
release/woocommerce-payments/dist/settings-rtl.css 11.6 kB
release/woocommerce-payments/dist/settings.css 11.5 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.3 kB
release/woocommerce-payments/dist/tokenized-express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.js 16.6 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.13 kB
release/woocommerce-payments/dist/woopay-express-button.js 25 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.31 kB
release/woocommerce-payments/dist/woopay.css 4.28 kB
release/woocommerce-payments/dist/woopay.js 71 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/jetpack-script-data.js 772 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/script-data.js 69 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/babel.config.js 163 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.2 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.css 10 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 28.4 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 280 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 333 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 424 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 585 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 632 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

@jessy-p jessy-p changed the title Draft PR: polling and fallback implementation for Transactions export job Remove JS based export and poll for Transactions CSV from Transactions Export job. Jan 22, 2025
@jessy-p jessy-p changed the title Remove JS based export and poll for Transactions CSV from Transactions Export job. Transactions Download functionality Improvements Jan 22, 2025
- The response is changed to an array
- If the file times out, don't show an error. The file may be emailed.
@jessy-p jessy-p marked this pull request as ready for review January 23, 2025 02:28
@Jinksi Jinksi requested review from Jinksi and a team January 23, 2025 05:25
@Jinksi Jinksi removed the request for review from a team January 23, 2025 05:26
@jessy-p jessy-p requested a review from a team January 28, 2025 09:15
Copy link
Contributor

@shendy-a8c shendy-a8c left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a hard time verifying that this change works, which is weird because couple days ago, when I reviewed https://github.com/Automattic/transact-platform-server/pull/7154, I also tested using this PR for the client side and I could see the file got downloaded after polling.

Some caveats:

Check my screen recording, it shows:

  • The above code changes locally.
  • I clicked the download button.
  • I refreshed my WCPay server page and shows that the email had been sent, indicating that the download was successfully.
  • It shows the Your CSV export is ready to download notice.
  • It shows under the dev console's Network tab that the CSV file is accessed.
  • It shows that my download history is empty. The file was not downloaded.

I have a suspicion that maybe it's because my WCPay server's URL is http and Chrome's security just blocks it. Accessing the URL directly works, ie it downloads the file just fine.

Screen.Recording.2025-01-29.at.19.17.58.mov

Since I have a high confidence that this would work on production, I'm approving.

What is weird is that couple days ago, I could swear that the file got downloaded just fine.

const { page, path, ...params } = getQuery();
const userEmail = wcpaySettings.currentUserEmail;
const onDownload = async () => {
recordEvent( 'wcpay_transactions_download_csv_click', {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now, we don't pass download_type for event wcpay_transactions_download_csv_click.

I see by definition, download_type is not nullable. Would not passing it cause a problem? Should we change the definition to mark download_type as nullable?

@nagpai
Copy link
Contributor

nagpai commented Jan 29, 2025

I added a few tests for the newly added csv export hook - 57378fc. It would be great if @Jinksi can give this a look. A good bit of it was generated using cursor, and then fine-tuned by me, but I have a hunch it would need improvements :D.

Switching the status back to needs review

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

labelInCsv shouldn't be required anymore

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The UI shows time in website time zone and export still shows UTC time zone. Can you elaborate why this would not be needed?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the labelInCSV prop here should be used for the column header in the client-side generated CSV. This is no longer necessary with the server-side export.

Copy link
Contributor

@brucealdridge brucealdridge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have tested locally which didn't allow for download (even though a URL was returned) but emailing worked everytime.

Tested on a demo site and worked as expected. ✅

I thought this change was for all CSV's but only for transactions.

Design feedback:
the notice that pops up to say "Your download is being prepared" is easy to miss. likewise with the snackbar notice to say download is ready
Screenshot 2025-01-30 at 2 53 58 PM
Screenshot 2025-01-30 at 2 53 54 PM

@Jinksi
Copy link
Member

Jinksi commented Jan 30, 2025

Design feedback:
the notice that pops up to say "Your download is being prepared" is easy to miss. likewise with the snackbar notice to say download is ready

IMHO I think this PR would benefit from a design review before we merge, to ensure we're using these elements correctly and giving users the appropriate UI feedback on their actions. I won't ping directly here, in case I've missed a prior discussion about this on P2 etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Transaction CSV exports should use export functionality from server
6 participants