Commit Graph

2537 Commits

Author SHA1 Message Date
Mike Jolley a90988aebf Should be using value rather than name (https://github.com/woocommerce/woocommerce-blocks/pull/4187) 2021-05-12 13:02:26 +01:00
Thomas Roberts 1dcbddc0bd Add checkout filter for coupon names (https://github.com/woocommerce/woocommerce-blocks/pull/4166)
* Make extensions optional, not all filters will need to pass this through

For example the CartCouponSchema has no option for extensibility (and I don't think it's needed at any rate) so extensions will always be an empty object. Rather than explicitly specifying this when running the filter, we can let it default to an empty object.

* Add filter for coupon code
2021-05-11 13:57:02 +01:00
Thomas Roberts f97ee971af Check if variation data is iterable before formatting (https://github.com/woocommerce/woocommerce-blocks/pull/4182) 2021-05-11 11:45:02 +01:00
Darren Ethier 523f49d3b1 update package-lock (version change mostly) 2021-05-10 11:21:01 -04:00
Darren Ethier fb70016d45 update version string to dev version 2021-05-10 11:16:58 -04:00
github-actions[bot] e3568aa275 Release: 5.1.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4185)
* Empty commit for release pull request

* Add changelog

* update testing notes

* Bumping version strings to new version.

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
2021-05-10 11:14:05 -04:00
renovate[bot] a4c2f2e7ae Lock file maintenance (https://github.com/woocommerce/woocommerce-blocks/pull/4184)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-10 14:38:04 +02:00
Thomas Roberts 6ffa778729 Convert shipping components to typescript (https://github.com/woocommerce/woocommerce-blocks/pull/4135)
* Add type defs for customer

Taken from 194ecccf78/assets/js/type-defs/customer.ts

* Convert ShippingCalculatorAddress to TypeScript

* Convert ShippingCalculator to TypeScript

* Convert ShippingLocation to TypeScript

* Allow packageId to be a number or string in useSelectShippingRate(s)

* Convert ShippingRatesControl to TypeScript

* Convert ShippingOptionsStep to TypeScript

* Allow package_id to be a string or number

This is because of Subscriptions using strings for package IDs

* Change to use CartShippingRateItemShippingRate instead of Rate

* Add extra props to PackageProps type

* Make ShippingAddress have the correct type

* Use CartShippingRateItemShippingRate instead of Rate

* Remove Rate type

* Set return types to JSX.Element

* Change type of props.renderOption in ShippingRatesControl

* Remove customer type defs and relocate aliases to default-address-fields

* Add EnteredAddress type

* Import EnteredAddress from new location

* Remove unnecessary eslint ignore

* Remove unused variable

* Remove confusing use of word Item in Shipping types

* Remove confusing use of word Item in Shipping types
2021-05-10 10:03:30 +01:00
Albert Juhé Lluveras a25eba0232 Feature gate PaymentApi (https://github.com/woocommerce/woocommerce-blocks/pull/4176)
* Feature gate PaymentApi

* Improve payment method missing dependencies error message so it's clear it only affects blocks

* Add PaymentApi feature flags to list of feature flags in docs
2021-05-10 10:00:14 +02:00
Darren Ethier c85654f579 Improvements to `emitEventWithAbort`. (https://github.com/woocommerce/woocommerce-blocks/pull/4158)
* modify emitEventWithAbort to change return value

`emitEventWithAbort` now returns an array of responses up to the first response that triggered an error or fail response instead of aborting on success responses too.

* update add to cart form context provider

* update checkout state context provider

* update payment method data context provider

* update tests and fix thrown error handling.
2021-05-07 16:39:28 -04:00
Raluca Stan 269341acc4 Add lodash as a devDependency (https://github.com/woocommerce/woocommerce-blocks/pull/4179) 2021-05-07 15:50:55 +02:00
Seghir Nadir 037dc09f62 Don't clear email and phone fields when using separate billing address. (https://github.com/woocommerce/woocommerce-blocks/pull/4162)
* preseve-billing-data

* pluck empty email and phone

* add issue number
2021-05-05 12:59:30 +01:00
Raluca Stan b9db5d4c51 Fix/cart backend test (https://github.com/woocommerce/woocommerce-blocks/pull/4153)
* Fix backend cart e2e test

* Adjust test structure

* Fix e2e checkout backend test.

Make sure the confirmation window is closed
2021-05-05 12:52:27 +01:00
renovate[bot] 07abd0f0b8 Update dependency @stripe/stripe-js to v1.14.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4170)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-05 10:08:45 +00:00
Thomas Roberts 57b4215bce Add documentation for filters (https://github.com/woocommerce/woocommerce-blocks/pull/4167)
* Rename the argument in the CheckoutFilterFunction type

This only exists as an extra descriptive hint to anyone using this type, the value `label` was never used by anything so it does not need to be changed anywhere else.

* Create Available Filters document

* Add available filters to the extensibility README

* Update docs/extensibility/available-filters.md to fix typographical error

Co-authored-by: Mike Jolley <mike.jolley@me.com>

Co-authored-by: Mike Jolley <mike.jolley@me.com>
2021-05-05 10:41:48 +01:00
renovate[bot] 7a53dd1f27 Update dependency @woocommerce/e2e-utils to v0.1.4 (https://github.com/woocommerce/woocommerce-blocks/pull/4172)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-05 08:10:24 +00:00
renovate[bot] 1cabe4b614 Update dependency @types/react to v16.14.6 (https://github.com/woocommerce/woocommerce-blocks/pull/4171)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-05 03:31:52 +00:00
renovate[bot] 0255e27bb0 Update babel monorepo (https://github.com/woocommerce/woocommerce-blocks/pull/4169)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-05 02:23:13 +00:00
renovate[bot] 599814cf43 Lock file maintenance (https://github.com/woocommerce/woocommerce-blocks/pull/4163)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-04 14:07:05 +01:00
Mike Jolley 2b6952151e 5.1.0-dev 2021-04-28 17:21:36 +01:00
github-actions[bot] 6614876baa Release: 5.0.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4144)
* Empty commit for release pull request

* Changelog

* Testing instructions

* cast correct value of setting

* fix typo

* add zip

* /tsconfig.base export-ignore

* update image

* Bumping version strings to new version.

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Mike Jolley <mike.jolley@me.com>
Co-authored-by: Nadir Seghir <nadir.seghir@gmail.com>
2021-04-28 17:15:39 +01:00
Seghir Nadir c5c3a87080 Change checkoutAllowsGuest to the correct value. (https://github.com/woocommerce/woocommerce-blocks/pull/4146)
* cast correct value of setting

* fix typo
2021-04-28 16:01:24 +01:00
Mike Jolley 39f9ef2183 Add inline console warning if shared settings hook is consumed (https://github.com/woocommerce/woocommerce-blocks/pull/4143)
* Add inline console warning if shared settings hook is consumed

* remove localisation on console string
2021-04-28 13:09:41 +01:00
renovate[bot] 2ba92e566d Update dependency @types/jest to v26.0.23 (https://github.com/woocommerce/woocommerce-blocks/pull/4142)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-28 05:36:23 +00:00
renovate[bot] d51c50b98e Update dependency @testing-library/react-hooks to v5.1.2 (https://github.com/woocommerce/woocommerce-blocks/pull/4141)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-28 04:07:10 +00:00
renovate[bot] b95e2ecf10 Pin dependencies (https://github.com/woocommerce/woocommerce-blocks/pull/4139)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-28 02:58:03 +00:00
renovate[bot] b14d16bd98 Update dependency @testing-library/jest-dom to v5.12.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4140)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-28 01:59:52 +00:00
Thomas Roberts 803ed0a0bd Convert Product summary to TypeScript (https://github.com/woocommerce/woocommerce-blocks/pull/4099)
* Add WordCountType type

* Convert Summary to TypeScript

* Convert ProductSummary to TypeScript
2021-04-27 17:39:20 +01:00
renovate[bot] 4cea6ccb2b Lock file maintenance (https://github.com/woocommerce/woocommerce-blocks/pull/4073)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-27 16:55:12 +01:00
renovate[bot] 409fc79d75 Update dependency autoprefixer to v10.2.5 (https://github.com/woocommerce/woocommerce-blocks/pull/4064)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-27 11:45:59 +00:00
Albert Juhé Lluveras 7091bd7894 Remove work-around to load our stylesheets after wp-edit-post (https://github.com/woocommerce/woocommerce-blocks/pull/4097) 2021-04-27 11:17:43 +01:00
Mike Jolley 1166ff3a51 Switch to `rest_preload_api_request` for API hydration in cart and checkout blocks. (https://github.com/woocommerce/woocommerce-blocks/pull/4090)
* Introduce hydrate_api_request

* Consume preloadedApiRequests

* no need to set false here
2021-04-27 11:16:23 +01:00
renovate[bot] bd7cad31e8 Update dependency @testing-library/react to v11.2.6 (https://github.com/woocommerce/woocommerce-blocks/pull/4063)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-27 11:04:36 +01:00
Thomas Roberts e6c7f2b6c0 Check for element before trying to click it in cart backend test (https://github.com/woocommerce/woocommerce-blocks/pull/4087) 2021-04-27 09:39:31 +01:00
Thomas Roberts 583113e373 Remove woocommerce as a dependency and install @woocommerce/e2e-utils (https://github.com/woocommerce/woocommerce-blocks/pull/4078)
* Remove woocommerce as a dependency and install @woocommerce/e2e-utils

* Remove reference to woocommerce package from tsconfig and jest config
2021-04-26 16:31:30 +01:00
Raluca Stan 8ee5e816a0 Rename onCheckoutBeforeProcessing to onCheckoutValidationBeforeProcessing (https://github.com/woocommerce/woocommerce-blocks/pull/4039) 2021-04-26 17:27:22 +02:00
Thomas Roberts 10d11e0748 Convert Product components to TS (https://github.com/woocommerce/woocommerce-blocks/pull/4098)
* Update package-lock.json

* Move Block Type Settings into Block Type Classes (https://github.com/woocommerce/woocommerce-blocks/pull/4059)

* BLOCK SETTINGS: Remove unused constants/settings

* AssetDataRegistry: Helpers to check for settings that exist, and registering page ID/permalinks

* Move checkout and cart block settings to checkout and cart blocktypes

* Move isShippingCalculatorEnabled to cart block

* Remove HAS_DARK_EDITOR_STYLE_SUPPORT and IS_SHIPPING_CALCULATOR_ENABLED in favour of getSetting

* Move displayCartPricesIncludingTax to blocktypes, and implement getSetting

* Move block settings to core settings and blocktypes

* Fix namespace usage

* Move review settings

* move tag settings

* Keep productCount in core data

* Move min and default height

* Improve storePages code

* Move attributes to attribute filter block type

* Move $word_count_type outside of settings array

* Remove unneeded setting in preview data (shippingCostRequiresAddress)

* Move min/max settings dependency from GridLayoutControl to Blocks themselves and use getSettings

* DEFAULT_COLUMNS and ROWS to settings

* Move product columns/rows to block types

* Add grid settings to AllProducts block

* Correct default rows

* correct min rows default

* Move hasDarkEditorStyleSupport

* Move hideOutOfStockItems to block type settings

* Move build settings to inline script dependency

* Pass data through asset api and move restApiRoutes

* Export all core settings as constants

* Remove WORD_COUNT_TYPE from core settings

* Move some other core settings to assets

* Update constants

* Make settings use TypeScript

* Update CURRENT_USER_IS_ADMIN usage

* WORD_COUNT_TYPE

* REST_API_ROUTES

* REVIEW_RATINGS_ENABLED and SHOW_AVATARS

* Remove REVIEW_RATINGS_ENABLED and SHOW_AVATARS constants

* Remove MIN_HEIGHT

* Remove DEFAULT_HEIGHT

* PLACEHOLDER_IMG_SRC

* LIMIT_TAGS

* HAS_PRODUCTS

* HOME_URL

* HAS_TAGS

* COUPONS_ENABLED

* SHIPPING_ENABLED

* TAXES_ENABLED

* DISPLAY_ITEMIZED_TAXES

* SHIPPING_COST_REQUIRES_ADDRESS

* SHIPPING_STATES and SHIPPING_COUNTRIES

* STORE_PAGES

* ALLOWED_COUNTRIES

* ALLOWED_STATES

* SHIPPING_METHODS_EXIST

* PAYMENT_GATEWAY_SORT_ORDER

* CHECKOUT_SHOW_LOGIN_REMINDER

* CHECKOUT_ALLOWS_GUEST and CHECKOUT_ALLOWS_SIGNUP

* ATTRIBUTES

* DISPLAY_CART_PRICES_INCLUDING_TAX

* DISPLAY_CART_PRICES_INCLUDING_TAX

* update build for TS files

* fix build dir

* Move blocks build config params

* Move placeholderImgSrc to core settings

* Move rest api hydration hoc to shared hocs and provide it restApiRoutes directly to avoid asset data registration

* Move wordCountType to abstract block

* Remove WORD_COUNT_TYPE in favour of getSetting

* Move IS_LARGE_CATALOG and PRODUCT_COUNT to abstract block type and use getSetting inline

* Add wcBlocksConfig

* fix tests

* Remove unused $asset_data_registry

* remove console.log

* Move build settings to abstract block

* Trigger build again

* Move hydration back to regular hocs for compatibility with trunk (merge conflict)

* Removed wcSharedHocsConfig

* esc home url

* Update search fixture

* Update search snap

* 40000 timeout

* hasProducts -> productCount

* Product Count is part of blocks config

* update mocks

* Use version comparison to determine if batching is enabled

* Change isWpVersion

* scrollTo button

* Rename product backorder badge to tsx

* Rename Policies component to tsx

* Convert Product badge to TS

* Convert Product Details to TypeScript

* Convert ProductImage to TypeScript

* Convert ProductLowStockBadge to TypeScript

* Move ItemData into ProductResponse type def file

* Add type defs directory to tsconfig

* Import types for ProductResponseItemData in ProductDetails

* Convert ProductMetaData to TypeScript

* Convert ProductSaleBadge to TypeScript

* Type component props to their interfaces

* Ensure components have an explicit return type of JSX.Element set

* Export PLACEHOLDER_IMG_SRC as string

* Add null to component return type

* Import PLACEHOLDER_IMG_SRC from correct location

Co-authored-by: Mike Jolley <mike.jolley@me.com>
2021-04-26 13:20:30 +01:00
Thomas Roberts 5871d86d7f Update `Button` component to ts (https://github.com/woocommerce/woocommerce-blocks/pull/4091)
* Convert Button to TypeScript

* Add alias of @types/wordpress__components

* Make ButtonProps extend the wp/components button's base props

* Update package-lock.json

* Extend Button.ButtonProps instead of only BaseProps

* Add return type to Button component
2021-04-26 10:49:57 +01:00
Mike Jolley 114cdf3e98 Create AssetsController and BlockTypesController (replaces Assets.php and Library.php) (https://github.com/woocommerce/woocommerce-blocks/pull/4094)
* Removed deprecated register_block_script method

* Move assets class content to AssetsController

Co-Authored-By: Bartosz Budzanowski <17271089+budzanowski@users.noreply.github.com>

* Refactor Library into BlockTypesController

* Add new classes to bootstrap

* @since $VID:$

* Add deprecated Library and Assets classes

* Update comments

* final class

* Move redirect_to_field

Co-authored-by: Bartosz Budzanowski <17271089+budzanowski@users.noreply.github.com>
2021-04-26 10:37:10 +01:00
Mike Jolley a4cd850384 Deprecate the woocommerce_shared_settings hook (https://github.com/woocommerce/woocommerce-blocks/pull/4092)
* Deprecate the filter

* Prevent test from failing due to notices
2021-04-26 10:36:50 +01:00
renovate[bot] b0979d5955 Update ataylorme/eslint-annotate-action action to v1.2.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4062)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-23 16:56:36 +00:00
Thomas Roberts 558525aa6e Prevent unwanted parts of address being displayed (https://github.com/woocommerce/woocommerce-blocks/pull/4038)
* Add emptyHiddenAddressFields function

* Add tests for emptyHiddenAddressFields

* Remove address fields that should be hidden before processing checkout

* Empty hidden address fields before displaying in shipping calculator

* Refactor emptyHiddenAddressFields so we only iterate once

* Fix test for emptyHiddenAddressFields

* Import default address fields from @woocommerce/settings

* Import emptyHiddenAddressFields

* Copy address first before emptying fields

* Modify address directly instead of copying it

* Copy address variable instead of mutating it directly

* Add files to TS project

* Return the new address rather than the parameter

* Don't clean address fields in the presentation layer

* Clean address in useStoreCart before it gets sent to components
2021-04-23 10:42:36 +01:00
Thomas Roberts bc750438c2 Convert Cart Table to TypeScript (https://github.com/woocommerce/woocommerce-blocks/pull/4088)
* Convert CartLineItemsTitle to TypeScript

* Add type guards

* Change CartLineItemRow extension to .tsx

* Remove parseInt from price precision

This is because the API sends it as a number, so it will never be a string, so no need to parse it.

* Add dinero.js types

* Type QuantitySelector and add types for @wordpress/keycodes

* Make __experimentalApplyCheckoutFilter use generic types

* Add catalog_visibility type & change types of CartItem

* Add isNumber and isString to type guards

* Type ProductLowStockBadge

* Ensure type returned by a filter function is the same it received

* Include type guards and hooks in tsconfig

* Add more type safety to useStoreCartItemQuantity

* Make className optional on QuantitySelector

* Type CartLineItemRow

* Type CartLineItemsTable

* Type Cart

* Add extra keys to CartResponseItem

* Clean aria-hidden logic

* Export type-guards from module

* Use aliases to import types in CartLineItemRow

* Remove unused prop types and specify return type of function

* Specify return type of component

* Use JSX.Element instead of ReactNode

* Remove unused variables & set return type of components

* Remove PropTypes
2021-04-23 10:15:17 +01:00
Mike Jolley dbbb99d55e Move Block Type Settings into Block Type Classes (https://github.com/woocommerce/woocommerce-blocks/pull/4059)
* BLOCK SETTINGS: Remove unused constants/settings

* AssetDataRegistry: Helpers to check for settings that exist, and registering page ID/permalinks

* Move checkout and cart block settings to checkout and cart blocktypes

* Move isShippingCalculatorEnabled to cart block

* Remove HAS_DARK_EDITOR_STYLE_SUPPORT and IS_SHIPPING_CALCULATOR_ENABLED in favour of getSetting

* Move displayCartPricesIncludingTax to blocktypes, and implement getSetting

* Move block settings to core settings and blocktypes

* Fix namespace usage

* Move review settings

* move tag settings

* Keep productCount in core data

* Move min and default height

* Improve storePages code

* Move attributes to attribute filter block type

* Move $word_count_type outside of settings array

* Remove unneeded setting in preview data (shippingCostRequiresAddress)

* Move min/max settings dependency from GridLayoutControl to Blocks themselves and use getSettings

* DEFAULT_COLUMNS and ROWS to settings

* Move product columns/rows to block types

* Add grid settings to AllProducts block

* Correct default rows

* correct min rows default

* Move hasDarkEditorStyleSupport

* Move hideOutOfStockItems to block type settings

* Move build settings to inline script dependency

* Pass data through asset api and move restApiRoutes

* Export all core settings as constants

* Remove WORD_COUNT_TYPE from core settings

* Move some other core settings to assets

* Update constants

* Make settings use TypeScript

* Update CURRENT_USER_IS_ADMIN usage

* WORD_COUNT_TYPE

* REST_API_ROUTES

* REVIEW_RATINGS_ENABLED and SHOW_AVATARS

* Remove REVIEW_RATINGS_ENABLED and SHOW_AVATARS constants

* Remove MIN_HEIGHT

* Remove DEFAULT_HEIGHT

* PLACEHOLDER_IMG_SRC

* LIMIT_TAGS

* HAS_PRODUCTS

* HOME_URL

* HAS_TAGS

* COUPONS_ENABLED

* SHIPPING_ENABLED

* TAXES_ENABLED

* DISPLAY_ITEMIZED_TAXES

* SHIPPING_COST_REQUIRES_ADDRESS

* SHIPPING_STATES and SHIPPING_COUNTRIES

* STORE_PAGES

* ALLOWED_COUNTRIES

* ALLOWED_STATES

* SHIPPING_METHODS_EXIST

* PAYMENT_GATEWAY_SORT_ORDER

* CHECKOUT_SHOW_LOGIN_REMINDER

* CHECKOUT_ALLOWS_GUEST and CHECKOUT_ALLOWS_SIGNUP

* ATTRIBUTES

* DISPLAY_CART_PRICES_INCLUDING_TAX

* DISPLAY_CART_PRICES_INCLUDING_TAX

* update build for TS files

* fix build dir

* Move blocks build config params

* Move placeholderImgSrc to core settings

* Move rest api hydration hoc to shared hocs and provide it restApiRoutes directly to avoid asset data registration

* Move wordCountType to abstract block

* Remove WORD_COUNT_TYPE in favour of getSetting

* Move IS_LARGE_CATALOG and PRODUCT_COUNT to abstract block type and use getSetting inline

* Add wcBlocksConfig

* fix tests

* Remove unused $asset_data_registry

* remove console.log

* Move build settings to abstract block

* Trigger build again

* Move hydration back to regular hocs for compatibility with trunk (merge conflict)

* Removed wcSharedHocsConfig

* esc home url

* Update search fixture

* Update search snap

* 40000 timeout

* hasProducts -> productCount

* Product Count is part of blocks config

* update mocks

* Use version comparison to determine if batching is enabled

* Change isWpVersion

* scrollTo button
2021-04-22 12:37:27 +01:00
renovate[bot] 013f6a926b Update dependency postcss to v8.2.10 (https://github.com/woocommerce/woocommerce-blocks/pull/4084)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-21 20:01:20 +00:00
Mike Jolley 325677ce58 Update GA integration testing steps 2021-04-21 16:05:34 +01:00
renovate[bot] ca6525aeba Update dependency postcss-loader to v4.2.0 (https://github.com/woocommerce/woocommerce-blocks/pull/4086)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-21 13:24:11 +00:00
Thomas Roberts f6220c434c Make error messages in front-end cart E2E tests better (https://github.com/woocommerce/woocommerce-blocks/pull/4077)
* Wrap waitForFunction calls in try catch to better explain why test fails

* Change to .catch and make error message better

* Remove jest.setTimeout
2021-04-21 11:51:10 +01:00
Thomas Roberts 11528812a2 Add When to employ end to end (E2E) testing documentation (https://github.com/woocommerce/woocommerce-blocks/pull/4079)
* Add When to employ end to end (E2E) testing doc

* Add links to documentation for RTL and puppeteer

* Update docs/testing/when-to-employ-e2e-testing.md

Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>

* Update when-to-employ-e2e-testing.md

Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
2021-04-21 10:13:56 +01:00
renovate[bot] fbf89823fe Update babel monorepo (https://github.com/woocommerce/woocommerce-blocks/pull/4085)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-04-21 04:54:40 +00:00