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

Transaction breakdown component for the Payment Details page #10283

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

Conversation

dmvrtx
Copy link
Contributor

@dmvrtx dmvrtx commented Jan 31, 2025

Changes proposed in this Pull Request

New "Transaction breakdown" block is added to the Payment page to provide a better overview of the transaction fees. The block appears below the timeline, above the payment summary.

image

And with a discount fee it looks like this:

image

And in case of a fully discounted fee it would look like this:

image

Testing instructions

  • Covered by automated tests.
  • New component should be visible for the captured transactions on the payment details page, between the timeline and payment method summary at the bottom.

  • 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

@dmvrtx dmvrtx self-assigned this Jan 31, 2025
@dmvrtx dmvrtx force-pushed the add/1342-transaction-breakdown-block branch from 0823dde to 29810cd Compare January 31, 2025 12:34
@botwoo
Copy link
Collaborator

botwoo commented Jan 31, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10283 or branch name add/1342-transaction-breakdown-block 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: 1f659c2
  • Build time: 2025-02-28 11:38:21 UTC

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

Copy link
Contributor

github-actions bot commented Jan 31, 2025

Size Change: +1.41 kB (0%)

Total Size: 1.29 MB

Filename Size Change
release/woocommerce-payments/dist/index-rtl.css 35.7 kB +119 B (0%)
release/woocommerce-payments/dist/index.css 35.7 kB +120 B (0%)
release/woocommerce-payments/dist/index.js 235 kB +1.17 kB (+1%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.4 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.4 kB
release/woocommerce-payments/assets/css/success.css 189 B
release/woocommerce-payments/assets/css/success.rtl.css 190 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.67 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.67 kB
release/woocommerce-payments/dist/blocks-checkout.js 55.5 kB
release/woocommerce-payments/dist/cart-block.js 17.3 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.28 kB
release/woocommerce-payments/dist/checkout.css 1.28 kB
release/woocommerce-payments/dist/checkout.js 34.6 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 236 B
release/woocommerce-payments/dist/express-checkout.css 236 B
release/woocommerce-payments/dist/express-checkout.js 15.8 kB
release/woocommerce-payments/dist/frontend-tracks.js 854 B
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.29 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 61.1 kB
release/woocommerce-payments/dist/multi-currency.css 4.29 kB
release/woocommerce-payments/dist/multi-currency.js 59.1 kB
release/woocommerce-payments/dist/order-rtl.css 740 B
release/woocommerce-payments/dist/order.css 740 B
release/woocommerce-payments/dist/order.js 42.5 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.js 40.1 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.6 kB
release/woocommerce-payments/dist/settings-rtl.css 11.4 kB
release/woocommerce-payments/dist/settings.css 11.4 kB
release/woocommerce-payments/dist/settings.js 224 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 236 B
release/woocommerce-payments/dist/tokenized-express-checkout.css 236 B
release/woocommerce-payments/dist/tokenized-express-checkout.js 16.8 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 23.4 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

@allie500 allie500 linked an issue Jan 31, 2025 that may be closed by this pull request
@dmvrtx dmvrtx changed the title Add/1342 transaction breakdown block Transaction breakdown component for the Payment Details page Jan 31, 2025
Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

I finished a first review round and I like the approach, kudos @dmvrtx! I left some minor comments that are stylistic improvements. Also left a comment about the key generation that I think we'll need to address

@dmvrtx dmvrtx marked this pull request as ready for review February 3, 2025 18:26
@dmvrtx dmvrtx requested a review from a team February 3, 2025 18:26
@rogermattic
Copy link

Thanks for pinging me in P2 @mgascam and @dmvrtx !

Great spot:

The term "Fee" feels confusing, do you think we could find an alternative? Maybe "Discount" could work? I think it's something we can do, based on the type?

I'm confirming this with the team but seems like using Fee Discount or Promo Applied as a label would be an easy, quick fix :)

@dmvrtx
Copy link
Contributor Author

dmvrtx commented Feb 14, 2025

@mgascam, I updated the pull request to address comments and include the handling of discount fees.

Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

I tested with an international card and discound and this is what it rendered for me:

Screenshot 2025-02-14 at 12 16 28

I find some parts of the fee breakdown missing, like the fixed amount of the base fee (discounted) and the Totals. I did not debug it, but maybe due to those values being 0, and falsy in JS?

Here's the timeline endpoint response I get, in case it helps:

{
            "type": "captured",
            "amount": 1700,
            "amount_captured": 1700,
            "fee": 0,
            "fee_rates": {
                "percentage": 0,
                "fixed": 0,
                "fixed_currency": "USD",
                "history": [
                    {
                        "type": "base",
                        "additional_type": "",
                        "fee_id": "base-us-card-fee",
                        "percentage_rate": 0.029,
                        "fixed_rate": 30,
                        "currency": "usd"
                    },
                    {
                        "type": "additional",
                        "additional_type": "international",
                        "fee_id": "additional-us-intl-fee",
                        "percentage_rate": 0.015,
                        "fixed_rate": 0,
                        "currency": "usd"
                    },
                    {
                        "type": "additional",
                        "additional_type": "fx",
                        "fee_id": "additional-us-card-fx-fee",
                        "percentage_rate": 0.01,
                        "fixed_rate": 0,
                        "currency": "usd"
                    },
                    {
                        "type": "discount",
                        "additional_type": "",
                        "fee_id": "wcpay-discount-100-off",
                        "percentage_rate": -0.054,
                        "fixed_rate": -30,
                        "currency": "usd"
                    }
                ],
                "fee_exchange_rate": null
            },
            "currency": "EUR",
            "datetime": 1739531254,
            "deposit": null,
            "transaction_id": "txn_3QsMk6R4vt8oOW8F1yubWIwR",
            "transaction_details": {
                "customer_currency": "EUR",
                "customer_amount": 1700,
                "customer_amount_captured": 1700,
                "customer_fee": 0,
                "store_currency": "USD",
                "store_amount": 1779,
                "store_amount_captured": 1779,
                "store_fee": 0
            }
        },
        {
            "type": "authorized",
            "datetime": 1739531254,
            "amount": 1700,
            "currency": "EUR"
        },
        {
            "type": "started",
            "datetime": 1739531254,
            "amount": 1700,
            "currency": "EUR"
        },
        {
            "type": "fraud_outcome_allow",
            "datetime": 1739531253,
            "ruleset_results": []
        }
    ]
}

@dmvrtx
Copy link
Contributor Author

dmvrtx commented Feb 14, 2025

Thanks @mgascam! I realised that caclulations are incorrect and should not add discount rate, but multiply in a more complex way. Will prepare the changes soon.

@dmvrtx
Copy link
Contributor Author

dmvrtx commented Feb 14, 2025

Actually, I think it is more complex. The discount part of the fee history is a combined discount which is applied to base and additional fees which appear before it in the list. Therefore, calculation has to take that into account and reduce fee components appropriately.

@dmvrtx dmvrtx requested a review from mgascam February 25, 2025 14:17
Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

Thanks for working on this feature @dmvrtx. I believe it is a nice improvement!

  • ✅ Code changes look good, but please check a JS lint warning re 'TimelineFeeRate' is defined but never used
  • ✅ Manual tests look great. I mostly played with discounts. My only comment would be about the full discounts. In this case, we only show a 0% and we don't display the fixed part. I guess this is intended. Truth is I don't have a good suggestion on how those would be displayed. Something like 0% + 0 USD would look weird I guess, and I ignore if that would be feasible without too many complications.

@dmvrtx
Copy link
Contributor Author

dmvrtx commented Feb 26, 2025

My only comment would be about the full discounts. In this case, we only show a 0% and we don't display the fixed part. I guess this is intended. Truth is I don't have a good suggestion on how those would be displayed. Something like 0% + 0 USD would look weird I guess, and I ignore if that would be feasible without too many complications.

@rogermattic, do you have any suggestions on how to best display the fully discounted fee? Maybe the fixed part should be present and shown as 0 USD if the fee component had a fixed part before discount?

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.

Show rate on transaction details page if a fee was subject to a currency exchange rate
5 participants