* Add notice if terms is unchecked when processing checkout
* Type StoreNotices and correctly scroll to error
* Checkbox error styles
* Hide input fields are invalid notice - validation notices are inline
* Scroll to error inputs
* Working inline validation for terms
* Add todo for exposing data
* update todo
* ensure checkbox is enabled before validating
* Duplicate checkout block
* Contact information block
* form step block
* shipping address block
* Setup atomic blocks
* Container structure
* More formal steps rather than generic form step
* Add billing and shipping forms
* add checkout actions block
* add order note block
* Add order summary
* add payment block
* Add inspector controls for address fields
* frontend WIP
* move attributes
* wrap shipping with form step
* PhoneNumber to typescript
* Remove column block
* form steps
* move payment logic to frontend
* Express block
* inline payment block
* Add shipping method block
* Render inner blocks (not standalone blocks) and add classes to Atomic Block list on php side
* lazy again
* Add more wrappers from old frontend file
* add layout
* Checkout wrappers were missing
* Enqueue payment methods for new block
* Add missing classnames
* Move shipping as billing state to context provider
* express payments rendering
* try/block-registry
* Remove atomic components (unused)
* Fix attribute persistance due to template locking
* Fix shipping display when not needed
* Set correct parent blocks for inner blocks
* pass data to blocks
* demo/newsletter
* Skeleton styling
* only apply styles to loading state for now
* shipping method block frontend
* rename express block
* lock template
* fix ts warning for __webpack_public_path__
* Refactor to avoid duplicating atomic block logic
* remove changes in save method
* Add zones and shipping methods to the sidebar for the shipping inner block
Closeswoocommerce/woocommerce-blocks#4320
* Fix script handles
* Fix method display when there are none
* Add shipping phone
* Add phone to api and sync with billing correctly
* Clear hidden fields on load
* fix requirePhoneField property
* Enable shipping and billing phone fields
* readonly field support
* Handle context attributes
* Fix createInterpolateElement usage
* add totalswrapper
* Implement Terms and Conditions block for Checkout i2 (https://github.com/woocommerce/woocommerce-blocks/pull/4436)
* Setup atomic blocks
* frontend WIP
* Express block
* try/block-registry
* Set correct parent blocks for inner blocks
* Skeleton styling
* Refactor to avoid duplicating atomic block logic
* add block locking
* add terms and conditions block
* hardcore settings image
* lock blocks from being deleted
* hide original checkout block
* mark blocks as side effectful
* move variations to block register function
* prevent core checkout blocks from needlessly showing in the inserter
* enable checkout i1
* fix broken rebase
* move save back
* Localise default text
Co-authored-by: Mike Jolley <mike.jolley@me.com>
* Add add-hoc Block locking from WooCommerce Blocks side. (https://github.com/woocommerce/woocommerce-blocks/pull/4454)
* add locking
* use subscribe instead
* fix condition
* add locking to blocks
* check if the item is not a text field
* Tidy up hacks CSS class handling
* Fix error if node is undefined
* Hide menu when move is disabled
* update package lock
* Add todo and fix issue where selector returns null
* split todos
* move todo
* edit comment
Co-authored-by: Mike Jolley <mike.jolley@me.com>
* Un-disable the billing checkbox in the editor (https://github.com/woocommerce/woocommerce-blocks/pull/4457)
* Add missing Slot fill provider on frontend
Fixeswoocommerce/woocommerce-blocks#4441 by adding the slot fill provider to the checkout-i2 block.
* Use column style appender
* Add padding/styles to actions
* Add/update icon library
* Multiline checkbox alignment
* Icons and copy changes for i2 blocks
* Add terms by default
* Add notice if text is missing links (https://github.com/woocommerce/woocommerce-blocks/pull/4466)
* Swap variations for toggle
* Add payment settings to inspector
* Update package lock
* Add inline docs to block registry
* Add inner block areas below each form step.
This does not include the form step contents, just adds inner blocks after existing content. Moving content within the inner block area is a separate discussion.
This closeswoocommerce/woocommerce-blocks#4306
* Sample block registration + docs
* Add tests for registerCheckoutBlock
* Fix lazy component detection in tests
* Add basic transform between i1 and i2
* remove template lock todo
* Update scroll to top hoc
* Move shared settings to new context providers
Closeswoocommerce/woocommerce-blocks#4472
* Remove readonly field support (unused)
* Remove context code
* Experimental
* remove invalid typedef
* FIx scrolling on validation due to misplaced context provider
* Update assets/js/base/context/providers/cart-checkout/checkout-state/index.tsx
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Update comment to remove reference to phone
* Update packages/checkout/blocks-registry/README.md
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Rename ScrollToTopComponent
* Add explicit list of expectedType in TypeScript definition
* Add todo to remove custom shipping phone handling
* Remove dangerouslySetInnerHTML in External Link Card Component
* Add ExternalLinkCard to storybook
* update todo wording
* Refactor withScrollToTop to remove useCallback and use typescript
* Support children on CheckboxControl, with added Typescript
* Spread getRegisteredBlocks return value
Co-authored-by: Nadir Seghir <nadir.seghir@gmail.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Make payment method icons display well even if theme tries to override
* Update flex justification for alignment styles
* Ensure payment method icons are displayed correctly in Checkout
* Remove center from object-position
* Add StoreNoticesWithSnackbarProvider component
* Remove snackbar from regular StoreNoticesProvider
* Create useStoreNoticesWithSnackbar hook
* Remove anything snackbar related from StoreNoticesContext
* Remove snackbar styles from store-notices
* Make checkout use store notices with snackbar context
* Move snackbar notices container to new directory
* Make useStoreCartCoupons use the notices with snackbar context
* Update tests
* Rename path and remove addSnackbarNotice
* Use StoreSnackbarNoticesProvider in Cart and Checkout blocks
* Update snackbar tests
* Update paths
* Update tests
* Create store notice provider for snackbar notices only
* Update context functions to include the word snackbar
* Change nesting in checkout
* Remove unused file
* Add TotalsWrapper component and associated styling
* Add TotalsWrapper around the subtotal, fees and discount
* Remove margins/paddings/borders from sidebar elements
This is to allow TotalsWrapper to be the component responsible for handling spacing and borders.
* Update styles to allow components to be wrapped in TotalsWrapper
* Move TotalsWrapper to checkout package
* Wrap all parts of Cart sidebar in TotalsWrapper
* Remove border from coupon panel
* Add has-bottom-border option to TotalsWrapper
* Wrap checkout sidebar components in TotalsWrapper
* Remove border/padding from order summary
* Add hasValidFills function
This will be used to check if a Slot has any fills that return truthy values.
* Remove borderSize and hasBottomBorder props from TotalsWrapper
* Wrap Slots in TotalsWrapper
* Update hasValidFills to check length of array
* Update tests and snapshots
* Only render tax totals if tax is more than 0
* Remove snackbar filtering
* Revert "Move Button and Label components to `@woocommerce/blocks-checkout` package (https://github.com/woocommerce/woocommerce-blocks/pull/4222)"
This reverts commit 983ce48cad.
* Export Label and Button from the wc-blocks-checkout package
* Reorder exports
This is so the diff is smaller in the PR
* Revert "Remove snackbar filtering"
This reverts commit 8e598436e871aa56f89740fbe6fbe522fd02db1d.
* Separate button spinner to separate component for reuse
* Use block checkout spinner in loading mask
* Block pointer events within loading mask
* Give the useRef within useShallowEqual a default value
This prevents the potential of having an undefined value returned.
* State setter and dispatch are stable
These do not need to be used as dependencies.
* Prevent re-renders of children when using loading mask.
This prevents children being rerendered and losing state. Loading styles are applied instead using a classname, but leaving the divs in place.
* Use memoization to to prevent excessive express payment rerenders
* Wrap express payment in loading mask
* Show loading state after submission
* remove eslint exclusion
* Move spinner to base components so it's available outside of the checkout package
* Avoid extra is-loading classname
* Update snaps/fix tests
* Remove memorization of payment method content due to stale data
* Express payment error handling
* Split up payment method context to make it more manageable
* Add blocking logic to cart
* Update snap
* Restore useRef
* Fix missing function removed by accident
* Fix setActivePaymentMethod and started status (so saved methods still allow express to be initialized)
* Loading Mask Todo
* Remove boolean shallow equals
* Missing dep
* Memoize typo
* Document changes in useStoreEvents
* Replace expressPaymentMethodActive
* setExpressPaymentError deprecation
* Only change status if an error is passed
* Track disabled state via useCheckoutSubmit
* useCallback on error message functions
* Fix mocks in test
* Move text-input to checkout package
* Add support to TextInput for inputs with type number
* Add ExperimentalDiscountsMeta.Slot to Cart sidebar
* Add extra styles for Button and Panel components
* Add updateCartFromApi util to @woocommerce/blocks-checkout
* Change updateCartFromApi to TypeScript
* Stop passing contexts through the discounts slot fill
* Add CartExtensionsSchema class
* Add CartExtensions Route
* Add register_update_callback and get_update_callback fns
* Add extensionCartUpdate function
* Add applyExtensionCartUpdate action
* Make extensionCartUpdate use batching
* Add ExtensionCartUpdateArgs type definition
* Execute a success/error function after request in extensionCartUpdate
* Remove success and error functions
* Avoid including all schemas in CartExtensionsSchema instantiation
This is achieved by inheriting AbstractSchema and slightly modifying the way in which the latest cart data is returned from this endpoint.
* Update docs for extensionCartUpdate
* Handle errors from extension callbacks
* Throw better errors when incorrect namespace/functions are used
* Add tests for CartExtensions route, ExtendRestApi update callback registration
* Add dummy get_properties method to CartExtensionsSchema
* Move text-input to checkout package
* Pass validation props directly to ValidatedTextInput
* Import label relatively instead of from package
* Pass validation functions to ValidatedTextInput
This is so it doesn't need to get them from useValidationContext.
* Add InputProps to ValidatedTextInput
This will be used to control additional props on the input element of TextInput
* Spread inputProps onto <input> element of TextInput
* Export TextInput from @woocommerce/blocks-checkout
* Add @woocommerce/blocks-checkout package to tsconfig
* Allow styling to be applied to number inputs and when value is 0
* Make style order consistent
* Remove inputProps to rely on rest in TextInput
* Add specific prop for the inputErrorComponent
* Only disallow active state if value is 0 AND type is number
* Change all uses of ValidatedTextInput to also pass inputErrorComponent
* Revert "Change all uses of ValidatedTextInput to also pass inputErrorComponent"
This reverts commit ec734b99c20c4d29fcf778714246fc406ee37eaf.
* Revert "Remove inputProps to rely on rest in TextInput"
This reverts commit 1fc64cca4002206423d1fa443ff2d60130ba1ea0.
* Revert "Revert "Change all uses of ValidatedTextInput to also pass inputErrorComponent""
This reverts commit 110e3606a996668be5a32698b634b7706d16cddc.
* Revert "Revert "Remove inputProps to rely on rest in TextInput""
This reverts commit aeb03526c44b3fcc97a719a18930d08157a80baf.
* Don't pass errorMessage to ValidatedTextInput
* Add DiscountsMetaSlot
* Add ExperimentalDiscountsMeta.Slot to Cart sidebar
* Add extra styles for Button and Panel components
* Export ExperimentalDiscountsMeta from checkout package
* Add updateCartFromApi util to @woocommerce/blocks-checkout
* Add comment to updateCartFromApi
* Change updateCartFromApi to TypeScript
* Revert "Move `TextInput` to checkout package and allow it to be used for input type=number (https://github.com/woocommerce/woocommerce-blocks/pull/4238)"
This reverts commit ee9b2d20e0.
* Stop passing contexts through the discounts slot fill
* Allow ValidatedTextInput to be used for type=number
* Remove contexts from Discounts slot fill
* Update snapshots
* Stop `errorMessage` being spread onto input fields in checkout
* Add paths to tsconfig
* Remove contexts from Discounts slot
* Accept step min and max on ValidatedTextInput
* Remove "no-margin" option on buttons
* Remove spinners from input type number
* Remove `no-top-border` style from panel
* Prevent text in buttons from breaking in the middle of words
* Add checkout package to tsconfig file list
* Stop passing components through DiscountsMetaSlot
* Move type defs
* Move type guards
* Fix imports
* Extract prepareTotalItems to TS file
* usePaymentMethodInterface as TS file
* Fix TS props
* Fix currency type defs
* Add return type to usePaymentMethodInterface
* Add key prop to CartTotalItem
* Fixed up js tests
* Move SymbolPosition into type-defs package
Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com>
* Move text-input to checkout package
* Pass validation props directly to ValidatedTextInput
* Import label relatively instead of from package
* Pass validation functions to ValidatedTextInput
This is so it doesn't need to get them from useValidationContext.
* Add InputProps to ValidatedTextInput
This will be used to control additional props on the input element of TextInput
* Spread inputProps onto <input> element of TextInput
* Export TextInput from @woocommerce/blocks-checkout
* Add @woocommerce/blocks-checkout package to tsconfig
* Allow styling to be applied to number inputs and when value is 0
* Make style order consistent
* Remove inputProps to rely on rest in TextInput
* Add specific prop for the inputErrorComponent
* Only disallow active state if value is 0 AND type is number
* Change all uses of ValidatedTextInput to also pass inputErrorComponent
* Revert "Change all uses of ValidatedTextInput to also pass inputErrorComponent"
This reverts commit ec734b99c20c4d29fcf778714246fc406ee37eaf.
* Revert "Remove inputProps to rely on rest in TextInput"
This reverts commit 1fc64cca4002206423d1fa443ff2d60130ba1ea0.
* Revert "Revert "Change all uses of ValidatedTextInput to also pass inputErrorComponent""
This reverts commit 110e3606a996668be5a32698b634b7706d16cddc.
* Revert "Revert "Remove inputProps to rely on rest in TextInput""
This reverts commit aeb03526c44b3fcc97a719a18930d08157a80baf.
* Don't pass errorMessage to ValidatedTextInput
* Update cart/coupon/shipping design
* Add order summary heading
* Move and style discounts on checkout sidebar
* Add rate to tax lines
* Ensure the option to display taxes itemised is available to Cart block
* Output individual tax items below the total & add styles for this
* Add success notice under coupon input on successful coupon addition
* Add border to bottom of Totals footer
* Show success message when adding coupon
* Add padding to cart item rows
* Add preview data to cart for when taxes are enabled
* Add rate to cart response type
* Add showRateAfterTaxName attribute to Cart block
* Add control to cart block to show rate percentage after rate name
* Add rate % in cart totals only if option is toggled on
* Pass showRateAfterTaxName attribute down to TotalsTaxes
* Add showRateAfterTaxName to Checkout block
* Add control to block editor for showRateAfterTaxName on Checkout
* Pass showRateAfterTaxName down to TotalsTaxes in Checkout
* Change label for showing tax rates in cart and checkout blocks
* Add test to ensure Taxes section shows in Cart block
* Add tests for cart sidebar and rate percentages
* Remove order summary title from checkout sidebar
* Check if taxes are enabled before rendering the option to show rate %s
* Add ShippingVia component to show the selected rate in sidebar
* Remove value from individual tax rates
* Remove bold from Shipping via label
* Remove coupon added successfully message
* Ensure panel headings that are h2s are the same colour as others
* Clean up eslint warnings
* Show rate %s by default
* Update snapshots following design changes
Co-authored-by: Mike Jolley <mike.jolley@me.com>
* Un-used PropTypes import
* Avoid global and use ownerDocument
* receiveCart return type
* ignoreRestSiblings when destructuring for @typescript-eslint/no-unused-vars
* Replace lodash find
* Use global rather than window
* Remove lodash map
* move rule to overrides
* 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
* 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
* 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
* Fix circular dependencies in Icons package
* CircularDependencyPlugin
* Fix deriveSelectedShippingRates CD
* Move useStoreNotices to context/hooks
* Move useStoreCart to base/context/hooks
* Move useStoreEvents to base/context/hooks
* Move collection/product hooks
* Move useStoreAddToCart
* Move useCustomerData
* move shipping hooks
* Move checkout and payment hooks
* Context should import hooks with relative paths
* Prevent circular dependency in store notices container components
* Move address fields to settings so they are shared
* Import PaymentMethod components direct
* relative import
* Fix select CD
* Move ValidationInputError
* Move components consumed by context
* Fix up internal imports in context
* fix CD in checkout package
* Separate providers
* Fixing context exports
* Fix base context hook import
* fix mocks
* Pass hooks to Slot Fills as Fill Props to avoid imports from base-context
* Export components, not hooks
* Pass props to ExperimentalOrderMeta
* Run CD plugin when using `npm start` only
* Rename CIRCULAR_DEPS to CHECK_CIRCULAR_DEPS
* Remove duplicate key from rebase
* Move packages component back to main file
* Remove dashicon module replacement
* Restore SVG import from package not external
* Move core locale handling to avoid impact settings package size
* Remove deleted file from rebase
* Implement `started` action creator.
Also for TS typing I changed `paymentMethodData` to be optional for both the `success` and `started` action creators.
This is because the behaviour allows for paymentMethodData to be retained in the state if it is not explicitly provided on dispatch.
* Implement started action creator on the exposed payment status dispatcher.
The implementation now allows for receiving payment method data when the `start` status is dispatched.
* Don’t overwrite payment method data when `success` status is set.
It is intended that if paymentMethodData is undefined, that is simply passed through to the dispatched action. This signals the reducer to retain the existing paymentMethodData in state (when undefined).
The correct way to clear the paymentMethodData is to either explictly provide an empty object, or set the status to pristine.
* Fix types for incoming paymentMethodData
* Implement receiving paymentMethodData in reducer.
This changeset also configures the reducer to retain the existing paymentMethodData in state (and related correlated information0 when the provided paymentMethodData property is undefined.
The only time paymentMethodData should be reset in state is when it is explicitly provided or the status is set to PRISTINE.
* Fix types for started action dispatcher.
* Explicitly clear paymentMethodData state when express payment started.
Also restores previous paymentMethodData when express payment cancelled.
* Switch saved tokens to utilize the payment method status started dispatched action instead of success.
This change ensures that savedToken handlers registered by payment methods have access to the `onPaymentProcessing` checkout event.
* fix typedef
Really just need to ensure types are used anywhere, this is a temporary change due to the time sensitive needs for this PR.
* Update assets/js/base/context/cart-checkout/payment-methods/reducer.ts
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Remove item and change quantity doAction hooks
* Cart event
* Event/Action system for cart events
* GA implementation
* Revert some unrelated commits
* revert change
* Listing impression config for all products
* Category support
* remove unrelated change
* Remove listype and block import
* wrap action in try catch
* Tidy
* Only load analytics scripts in experimental builds
* Made console log more specific
* Wrap script reg in experimental check
* Add new config for saved token processing by payment methods.
* Implement new saved token handling config from registered payment methods.
* Implement new saved token handling config from registered payment met… … 2b42205 …hods.
* make sure saved token handler component is only loaded when a token payment method is selected
* add typescript support
* Add type declarations for Cart and CartResponse interfaces
* make sure we’re resolving .ts files as well as .js files on imports
* add more types
* type the cart data store
* Apply suggestions from code review (implement .tsx in configs)
Co-authored-by: Jon Surrell <jon.surrell@automattic.com>
* remove global fetchMock declaration and directly import where used.
* rename type
* remove named action types and just infer by returning action creator values as const
* use interface instead of type
* rename
* renames
* create CartAction type as union of action creator returned types and implement in reducer
* remove unused imports
* refresh package-lock after rebase
* Add base TS config that projects will inherit from
* Add tsconfig for assets/js/data project
* Ignore TS error on cart store registration
We will address this in cooldown when we have time to investigate further
* Add tsc to build step to catch TypeScript errors
* add a separate command for tsc and tweak build command to use
* restore checkJs and allowJs values in config and remove ts check from build command
* Add ts:check-all command
* Add TypeScript checking workflows
* Change triggers for TypeScript workflow
* Use npm ci instead of npm install
* Remove ts:check-all from TypeScript workflow
* Remove TS Check GitHub workflow
* Remove type-defs dir from TS include, and remove ts:check-all script
We no longer need the ts:check-all script because ts:check will do this for us, the old ts:check did nothing and did not work.
* fix coupon loading issues
* include .ts files only from type-defs folder
Co-authored-by: Jon Surrell <jon.surrell@automattic.com>
Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com>
* Show total sale badge in medium carts
* Add markup to cart line item row to enable it to be displayed as flex
* Add styling to display price and sale badge as flex
* Revert product price being displayed as block
* Rename sale badge and price wrapper
* Hide line-total sale badge on mobile
* Change class name on total price and sale badge wrapper again
* Fix cart line subtotal display when currency has 0 decimals
* Fix wrong usages of getCurrency instead of getCurrencyFromPriceResponse
* Add tests
* Move comment in tests to relevant line
* Show cart item total price including taxes when DISPLAY_CART_PRICES_INCLUDING_TAX is true
* Show cart item total price including taxes in Checkout block too
* Add filter to extend product price
* Extend order summary product price too
* Make it so 'format' is applied to all product price types
* Order
* Pass lineItem to the filter
* Remove code targeting WC Subscriptions
* Rename filter
* Remove unnecessary CSS block that made prices be displayed as blocks
* Use line item totals instead of product price multiplied by quantity to show line item price
* Fix wrong currency usage
* Add comment to disable eslint
* Fix JS error when totals is undefined
* Align order summary item price to the right
* Use extendibility API instead of filters
* Remove __EXPERIMENTAL_CART_ITEM_PRICE_FILTER from docs
* fix rebase
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Pass get_country_locale via assets
* Create helper to prepare and merge address fields
* Use new helper in address form
* Only pass field overrides now that fields are merged
* Fixc configs and remove lodash usage
* Prevent formatting of empty postcodes to suppress api error
* prevent memo on rerender
* Conitonal enqueue of locale data
* define index in increments of 10
* remove address-form
* circ deps changes
* Workaround for core data issue
* fix test
* remove prepareAddressFields export
* Remove old comment
* object from.entries polyfil
* Revert "object from.entries polyfil"
This reverts commit ba343adcf5fd2f843b225aebe340cce9b664c851.
* replace fromentries
* fix final fromentries
* Add validation function
* Prefix validateElementOrString with __experimental
* Update experimental docs
* Typo
* Update JS docs
* Use an object for applyCheckoutFilter args
* Args doesn't need to be an object
* Wrap validation function execution in a try/catch block
* Only accept strings for the totalLabel filter
* Change applyCheckoutFilter signature
* Add validation function
* Add Product name filter
* rebase
* update second filter call
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Replace filters with an extendibility API to hook into Cart and Checkout blocks
* Update docs
* Add a validate argument
* Add docs comments
* Add tests
* Add validation function
* Prefix validateElementOrString with __experimental
* Update experimental docs
* Typo
* Update comment
* Update JS docs
* Use an object for applyCheckoutFilter args
* Args doesn't need to be an object
* Wrap validation function execution in a try/catch block
* Only accept strings for the totalLabel filter
* Change applyCheckoutFilter signature
* Apply filters for subtotal and sale badge in CartLineItemRow
* Append suffix to prices and SaleBadge if passed in as a prop
* Add subtotal filter to OrderSummaryItem
* Add tests for OrderSummaryItem and ProductPrice
* Rename test for ProductPrice
* Update checkout filter registration plugin name
* Remove obsolete snapshop
* Remove suffix and change to format
This is because we want to make the entire price string editable, not just the part after it.
* Change formatting on SaleBadge to use createInterpolateElement
* Remove tests that are no longer needed.
* Update ProductPrice tests to reflect changes to format prop
* Check that subtotalPriceFormat contains <price/> in OrderSummaryItem
* Fix cart block styling to stop badges overflowing the container
* Add <price/> placeholder in OrderSummaryItem price filter
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Fix ShippingRatesControl not honoring renderOption prop
* Update order summary design
* Updates TotalsCoupon design
* Update Cart block sidebar title design
* Make values bold and labels regular in Cart and Checkout sidebar
* Update styles of shipping rates selector and radio control
* Remove unnecessary overflow rule in Panel content
* Fix shipping options in Checkout block
* Add some Twenty Twenty One fixes
* Fix saved payment methods display
* Remove top spacing no longer necessary in order summary quantity badge
* turn Totals title to bold
* Move right padding from product name to item description
* Take left margin off list items in product details
This is because in themes where a left margin is applied to li elements, the product detail/addon gets indented and it does not sit flush with the edge of the product details container. Adding this rule to the main wc-block-components-product-details rule will stop other themes indenting <li>s
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com>
* move shipping-rates-control and shipping totals back into base/components/cart-checkout
* fix notice styling
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Add left vertical bar to payments methods step.
* Remove horizontal borders around order notes.
* Add class to order notes component.
We need it to traget that element with CSS.
* Update padding on order notes checkbox to match desing.
* Remove full stop to match the design.
* Add label for not saved payment methods option.
* Remove use new payment radio.
* Always show new ayment methods selector
* Remove editor context for now.
* Add accordion component skeleton.
* Small component refactor.
* Use accordion for new payment options.
* Fix jsdoc.
* Add styling.
* Add input styling.
* Hide label if we don't have saved methods.
* Cleanup.
* Cleanup and styling.
* Add target class to aid with alignment.
* Update use new payments label styling.
* Update Place Order button location.
* add full stop to payment method copy
* ensure that there is always a (default) selected payment method:
- using `activePaymentMethod` from context
- this ensures there is a default selected on initial render
- and handles any dynamic changes to available payment methods
- e.g. COD disappearing when change shipping option
- remove unused / redundant selectedMethod prop - context is best
* use tab-based payment UI for 2 or fewer payment methods:
- move saved payment state to payment context; it's shared state needed
by both PaymentMethodOptions and SavedPaymentMethodOptions
- show previous tabs UI if:
- customer has no saved payment methods (cards)
- store has 2 or fewer payment methods available
- when initialising SavedPaymentMethodOptions, only select one if the
user hasn't selected a real payment method - this ensures radio
buttons switch correctly between saved card => `Use another`
- remove various props and local state that is no longer required (🤞🏻)
* experimental - styling tweaks for single payment tab (remove "tab" UI)
* Revert "experimental - styling tweaks for single payment tab (remove "tab" UI)"
This reverts commit e09dd4862b97d989d950a9d67672d83e7b8992e4.
* Add single payment method UI.
* Adjust single method styling.
* Add outline and margin to two methods version.
* Fix gap for order notes on/off option.
* Update Order button spacing CSS.
* Reuse computed values.
* Remove tabs and single payment option.
* We no longer need this test as the UI was changed.
* Fix payment methods labels height.
* Simplify.
* Remove not needed import.
* Typecheck an option.
* Refactor code.
* Rename.
* Rename.
* Update typdefs.
* Remove border for add order notes.
* Correct spacing for radio-button and label.
* Add simple test. Switch to payment method.
* Update style.
Co-authored-by: Rua Haszard <rua.haszard@automattic.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Expose schemas
* Accept strings for select shipping rate
* strings are allowed
* Refactor shipping package to hold it's own state
* Add extension data to cart hook
* Progress but state is broken
* Move state back to hook
* Progress but state is broken
* use shipping hook updates
* Fix re-render issue
* hide x1
* Shipping slot fill
* Working slot fills
* Do not export package
* Update extend usage in unit tests
* update mock test data
* Package per slotfill
* Resolved merge conflicts
* Update assets/js/blocks/cart-checkout/subscriptions-integration.js
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* rename slot
* deriveSelectedRates return doc
* useCallback in throwError
* final class ExtendRestApi
* spacing
* Move shipping rate selection to package level
* remove const for counts
* Remove schemas from extend
* unused use
* move to a single fill for packages
* add todos
* move subs code
* fix extra extensions
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Create new vars to differentiate between single and multiple item price
This is because we need to display the subtotal of the item AND the total (subtotal * quantity)
* Add subtotal and move quantity picker
As per the new designs, the quantity picker should be moved below the product metadata, and the product subtotals should appear below the product name.
* Move line item total to top of grid on mobile/medium/small
* Remove CSS for trash icon that is no longer used.
* Remove link style colour override from product name and make total bold
* Remove quantity column from CartLineItem
This is because the quantity picker is now displayed below the product metadata and name.
* Fix margins around quantity picker and its width
* Always disable link to product in OrderSummaryItem
* Add single price below product name in OrderSummaryItem
* Add styles for new OrderItemSummary design
* Move total into its own "column"
This is to stop product description text flowing under the total and making it look untidy.
* Add styles to cater for total price being its own column
* Convert precision after multiplication instead of before
* Remove unnecessary div from OrderSummaryItem
* Remove line height from product names on order summary
* Add more margin to the bottom of the product metadata div
* Delete trash icon
* Only remove margin from the bottom of last product-details
* Move quantity input to below product name in cart skeleton
* Add placeholder for individual price to Cart skeleton
* move items to package
* move components to package
* fix dep issue
* pass down classname
* move Panel and Price utils
* expose extensions
* fix import
* move cart call to inside slot
* fix unit tests
* fixes after rebase
* move ShippingRatesControl into packages/checkout
This fixes the `wc-blocks-checkout` circular dependency because `Package` was importing from `@woocommerce/checkout`.
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Inject the routes controller
* Cart totals need to be calculated on cart routes or fees will be missing
* Add fees to schema and response
* Add fees to useStoreCart
* Fix styling of multiple fee rows
* Fix test shape
* update input colors for dark and light mode + tweak padding and alignment
* update light input dropdown text color
* Fix lint errors
* Fix package lock.
* Use input-text-active for select options
* Make sizes responsive in radio control
* Unify border colors of text inputs, checkboxes and radio controls
* Unify radio control sizes in mobile/desktop
Co-authored-by: David Levin <davidlevin@Davids-MacBook-Pro-2.local>
Co-authored-by: budzanowski <bartosz.budzanowski@gmail.com>
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Trim input values before validation on Checkout
* Fixes required field checking at schema level
* Require country during checkout and ensure values are formatted
* Add handling for rest_invalid_param messages
* Remove prepare_address_fields - handled by schema
* Add address validation to OrderController
* Implement address validation
* Error errors from all endpoints more gracefully
* update non-true description
* required prop
* Update tests
* Fix equalityFn so updates are triggered when address changes
* Remove debounce so fields update if context changes
* Update src/StoreApi/Schemas/AbstractAddressSchema.php
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Add missing wp_unslash
* Validate allowed countries should block checkout if no countries are allowed
* Type in locale variable
* Update assets/js/base/utils/errors.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Fix validator calls
* Remove refererence
* Restore onChange order
* eslint fix
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Hide spinner on cart's "proceed to checkout" button when page unloads
This is required because of a feature of Safari where the page state is saved, including all class names, when a transition occurs. Navigating using the back button restores the page to that cached state, so the spinner class remains on the button. Resetting the state just before the page gets cached stops this from happening.
* Change comment case to sentence case.
* Add catalog_visibility to CartItemSchema.php
This is used to get whether the product is visible in the catalogue, visible in the shop only, visible in search results only, or visible everywhere. We need to know this so we can pass it to the ProductImage and ProductName components.
* Remove links from CartLineItemRow if not visible in catalogue
Added catalog_visibility to lineItems prop, and when the product is not visible in the catalogue do not wrap product image in a link. Also pass down the hasLink prop to ProductName.
* Add hasLink prop to ProductName
When this prop is false we should not output the link around the product name. This is for when the product is hidden from the catalogue but we still want to show its name somewhere.
* Add tests and storybook for ProductName
* Add catalog_visibility check to OrderSummaryItem
When the catalogue visibility of a product is set to hidden or search, then the product name in the checkout sidebar should not be hyperlinked.
* Reverse logic for hiding link on product image & disabling link on name
Following a point from @budzanowski we do not need the hasLink prop, making use of disabled is probably a better idea.
* Remove tabindex from a in ProductName & output span if name is disabled
This change removes the need to pass a tabindex to the a in ProductName. This is because a disabled ProductName will now never output an a tag. When the ProductName is disabled a span is output instead, which has no tabindex by default.
This change also reverses the logic to decide whether the a or span should be output so as to make the code more readable and flow better.
* Update storybook and tests/snapshots for ProductName
* Pass disabled prop to FormStep in order-notes-step.js
This way we can add the disabled class to the div or fieldset rendered by FormStep.
* Add disabled class & style for disabled FormStep components
Allows us to style disabled elements that cannot have the disabled attribute (divs) the same way as disabled fieldsets are.
* Update test snapshot for FormStep
This is because we added a class to the div/fieldset element when it is disabled.
* Remove redundant selector from form-step styles
Because we now add the --disabled modifier to the class, we no longer need the disabled selector. The new class-name based selector covers both fieldsets and divs.
* Remove custom fieldconfig for shipping calculator so required fields for shipping are collected
* If the store config requires an address before shipping, do not return rates or totals
Totals, calculated by the cart, would be set to 0 in this scenario which could lead to customer confusion (why is the rate $10 but shipping shown as $0?)
* The shipping total row is missing a border
* Revert "If the store config requires an address before shipping, do not return rates or totals"
This reverts commit f3a4f24f5785392eb43bfc69a5548d398c47d8bb.
* Add hasCalculatedShipping to schema and hooks
* Show shipping notices with updated wording based on if shipping has calculated yet or not
* Refactor shipping row display to use new API props
* Remove block level isShippingCostHidden
* fix test
* Correct the math in the shipping preview in cart
* Document null
* Remove test—this option no longer exists
* Remove unused settings/constants
* Add missing context docs for shouldCreateAccount
* shouldCreateAccount context docs
* No need to handle showOrderNotes in component—just don't render it
* Only render notes if needed
* Create PhoneNumber component to insert when needed
* account for registration enabled setting when creating accounts
* default to false instead of global setting for initial allowCreateAccount attribute
* consider global allows signup value for whether account creation checkbox shows
* include existing hook when determining if checkout signup is available:
- woocommerce_checkout_registration_enabled hook
* use public api for registration settings (via WC_Checkout)
* initial round of test fixes
* fix logic flaw exposed by tests and align tests with actual values in real use
* return early if WC_Checkout is not available
* remove temporary test group and uncomment new test.
* improve test method name
* fix comment to match new routine name
* ensure block shows login prompt when store disables checkout signup
* fix incorrect conditional order and cover with tests
Co-authored-by: Rua Haszard <rua.haszard@automattic.com>
* expose checkout signup feature to release build (feature plugin):
- remove isExperimental from block/editor js (the block is already gated
to plugin only)
- gate entire service class to feature plugin && Woo >= 4.7
- this ensures our custom email and set password flow are only active
for supported woo version, if blocks plugin is active
- also refactored the gating logic so the woo version check is used to
gate all code
* eslint action told me to delete comment `.` ... ?
* remove experimental feature flag for checkout signup front-end:
- "Create Account?" checkbox in address/contact component
- logged-out prompt logic - handle case when signup is enabled and guest
checkout is not enabled, i.e. checkout requires automatic signup
* fix formatting issues
* add allowCreateAccount to proptypes for CheckoutForm and AddressStep
* use my-account/lost-password endpoint url for set password (tbd):
- companion for working on https://github.com/woocommerce/woocommerce/issues/27754
* use more appropriate (new) set-password endpoint
* add version check - use new woo core endpoint if woo version is new enough
* use my-account/lost-password for setting password in checkout signup:
- this has been available forever - no need for a version check
- page will show `Lost password`; looking at options for overriding that
* use more explicit `newaccount` action for set password url if available
* tweak feature gating for checkout signup:
- only available in dev builds (will change soon)
- only available if Woo core 4.7 or newer
- checkout signup relies on fixes in 4.7+ (tbc) to
my-account/lost-password endpoint for setting initial password
- standardise feature gate logic so is consistent, ensure feature is
disabled in API/backend, hide editor option, and disable front end
- add new setting `wcVersion` to allow feature gating on woo version
* fix woo-version feature gate of checkout signup:
- fixed version logic, explicit 4.7.0 reference version
- refactor version compare routine so can be used for woo or WP version
* revamp Woo 4.7+ logic so PHPunit tests aren't dependent on Woo version:
- Woo-version feature gating is implemented at integration layer:
- checkout REST API
- register/override new account email handler
* prototype 'create account' checkbox in checkout block
* expose store config for generating password/username to blocks:
+ use FILTER_VALIDATE_BOOLEAN instead of hard-coded `yes`
* stub out signup form in checkout block
* context / provider to store checkout signup form data
* revert signup form - checkout block will always generate username etc
* persist signup checkbox in checkout state & pass to checkout API
* add `create_account` param to order API, fix name in client POST
* handle creating user account as part of order (first cut)
* ensure the order is associated with the new customer
* only show 'create account' checkbox when appropriate (guest checkout)
* remove unnecessary username/password variables
* refactor account-creation logic into functions:
- clarify inputs and outputs
- use RouteException for error handling
- use woo options directly, avoid dependency on WC_Checkout
* update "email exists" error message to use existing error message text
* handle all known errors from wc_create_new_customer + use core message
* only show "create account" checkbox to shopper when necessary:
- if guest checkout is disabled, user must create account - not optional
* only show "create account" if account creation is optional:
- fixes incorrect logic in previous commit
- add some comments to clarify
* fix create account logic in API when checkout requires account:
- use correct woo setting option name
- reverse logic to match option = allow guest false means registration required
* strip html tags from create account error messages
* temporarily force enable autogenerate user/pass in new account API
* fix rebase errors
* add new allowCreateAccount attribute in checkout block
* show/hide `Create account` checkbox dependent on block attribute:
- previously was dependent on store setting
* new create user API, with set initial password email (first cut):
- use core register_new_user for creating the user
- this triggers core "set new password" email
- generate username using logic lifted from WC core
- rough cut, lots to tidy/polish here
* remove alternative/unused create account function
* set `Customer` role for signups during checkout
* eslint fix - switch case break
* remove comments that mirror code & might go stale
* tidy func comment
* remove unused function
* use store setting `allow signup` for default value of new block option
* refactor order signup logic to service class first cut:
- new CreateAccount service
- hook up via custom action (for now at least)
- paste over existing create account logic (temporary - will be replaced)
* adapt wc_create_new_customer logic in CreateAccount service (WIP)
* set default_password_nag on new account + throw instead of WP_Error
* rename `createAccount` => `shouldCreateAccount` to clarify meaning
* fix checkout block - renamed `shouldCreateAccount` (missed in prev commit)
* prototype sending alternative email template for checkout signup
* add magic link to set password to blocks new account html email
* tidy up new account email templates - set password link, subject/heading
* use same id so merchant setting tweaks apply to our new improved email
* remove logging
* code tidies in CreateAccount service:
- remove unnecessary constructor
- type-hint in should_create_customer_account
- streamline logic in should_create_customer_account - remove
unnecessary `empty` check
- add comments to illuminate different use-cases handled by should_create_customer_account
* don't provide password to new account email templates (no longer used)
* declare dependencies in root namespace
* code tidies on new account email class:
- correct namespace and camelcase name
- declare class in file, don't instantiate; instantiate in client code
(CreateAccount service) when used
- no require/file import, use `use`
* move CustomerNewEmail to folder matching namespace
* use Package->get_path for email template paths:
- CreateAccount service now depends on Package
- CreateAccount passes Package to email class so it can use `get_path`
- note: CustomerNewAccount is not registered with DI container as it
needs to be instantiated after Woo init (for `WC_Email`)
- shift email templates to {plugin}/templates, consistent with WP
convention
* call CreateAccount::from_order_request directly, no custom hook:
- custom hook is not appropriate as we may not want to allow
extensibility in this way - TBD
* add appropriate margin above create account checkbox
* remove unnecessary direct-access protection
* generalise name of error-handling method
* simplify CustomerNewAccount - instantiate directly, when needed
* remove unused new_account_email member - now instantiated on demand
* numerous fixes and updates due to rebase changes
* fix typo in name of CustomerNewAccount php file (missing `n`)
* experiment - link to lost-password form in my-account (prototype branded screen)
* Revert "experiment - link to lost-password form in my-account (prototype branded screen)"
This reverts commit e1dc6dd5e9f0218ede81da92188d813c2d0856d9.
* feature gate CreateAccount service init to dev build only +
+ remove stale comment
* feature gate front end "Create account" checkbox to feature plugin only
* feature gate editor "allow signup" option to dev build only
* feature gate checkout api create account - dev build only
* tweak feature gating PHP logic so it's robust:
- all PHP feature gating is in the service class
- all publicly-available methods return early if feature gate off
- Checkout rest API transparently calls service - no explicit feature
gate at API level
* ensure frontend/editor features are feature gated (isExperimentalBuild is a function)
* feature gate value of checkoutAllowsSignup - can only be true in feature plugin
* fix a / an typo in comment
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* remove commented code
* hello world unit test (doesn't test anything yet)
* add a command for running unit tests when container already up:
- this should probably move to another PR/branch
* basic tests of core logic in CreateAccount service
* import isExperimentalBuild direct:
- import from alias package was causing an issue, likely a dependency cycle
* refactor from_order_request to return new user ID so it's easier to test
* test creating a customer from an order + rest request:
- i.e. a full end-to-end integration test
* delete redundant test and tidy comments
* generalise test to provider format
* refactor create-dup-user err test to use same approach as success test
* add test for when user should not be created
* don't hard-code options in "create" test, remove redundant provider in no-account-requested test
* de-generalise "user already signed up" test
* add test for malformed email
* flesh out & comment successful signup tests
* flesh out "invalid email" tests
* clarify no account requested test comment
* remove phpunit:quick - I don't think it's needed
* add comment explaining this is an integration test
* experiment – disable feature flag, is this why the tests are failing?
* revert test commit - restore feature gate (experimental flag)
* skip all tests if CreateAccount is disabled due to feature flag
* d'oh - expose CreateAccount:is_feature_enabled so can be used in tests
* add jsdoc for checkout-state shouldCreateAccount field
* remove unnecessary comment + fix whitespace/indentation
* simulate logged-out user for createaccount signup tests
* use a single, compound if statement for early return (review nitpick)
* don't hide `checkoutAllowsSignup` store setting behind feature flag:
- the feature flag should be used to enable/disable behaviour
- it's dangerous to adjust store settings/options based on feature flag
* rejig tests so they require woocommerce_blocks_phase==3:
- make feature gate method private to avoid exposing
- remove feature flag check & test skip for other builds
- set blocks phase in travis config
* remove redundant user-logout in test setup - cleaner to just require this
* use WP function bracket style (same line)
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Update dependency wordpress-element to v2.17.1
* update experimental function to stable version
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Show all payment methods when it's an admin and let the error boundary handle errors
* Use StoreNoticesContainer in Payment method error boundary so notices have styling
* Filter out saved payment methods for admin users if they don't accept payments
* Simplify update options logic
* For admins, only show payment methods that errored but canPay was not false
* Simplify how new payment method option is appended
* Wrap canMakePayment in a try catch block to handle payment methods that throw an error
* Add an id to payment method error boundary errors
* Add an error boundary to express payment methods
* Hardcode failing content and savePaymentInfo to false if the payment method failed
* Add some new comments
* Add a notice instead of registering the payment method if it fails and user is admin
* Throw error early if stripe failed to load
* Split express and standard payment method error notices
* Don't add payment methods in the editor and instead add a notice
* Fix error id
* Use noticeContext constant
* Add missing JSdoc param
* Remove unnecessary removeNotice
* Merge ProductPrice atomic block and component
* Update assets/js/atomic/blocks/product-elements/price/block.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Update assets/js/atomic/blocks/product-elements/price/block.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* If product price component has alignment, make it a block
* Make ProductPrice propTypes more specific
* Add align prop to loading product price
* Add stories to ProductPrice component
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Fix wrong Form component name
* Split CheckoutForm into smaller components for each step
* Centralize call to useCheckoutAddress
* Create DebouncedValidatedTextInput component
* Rename some variables
* mass-rename js/components => js/editor-components & update webpack
* mass-change import '@woocommerce/editor-components' +
+ jsprettier quotes fix
* more mass-rename @woocommerce/editor-components
* fix up references to js/editor-components in various places:
- docs/readmes
- jest config
- typescritp config
* fix story path to match new folder/alias 'editor-components'
* fix jest tests: use new alias for editor-components
* include renamed `editor-components` in editor stylesheet cache group
* Rename CheckoutForm to Form
* Create CheckoutForm component
* Simplify directory structure
* Add docs about class name changes
* Add PropTypes to CheckoutForm
* Update skeleton class name
* Extract LoginPrompt
* Move loginToCheckoutUrl to a constant
* Move replaced class name docs to 3.4.0 specific file
* Rename component to match directory
* Typo
* Checkout API: return cart errors as 'notice' property instead of throwing
* Checkout block: display server errors as notices
* Strip tags content
* Use same strings as in Core
* Add support for several notices
* Rename variables and allow all kind of notices
* Strip HTML tags and content in frontend
* Fix Checkout block in editor
* Add stripTagsAndContents tests
* Print notices before running blocks logic
* Shown express payment methods in Cart block
* Fixes
* Create usePositionRelativeToViewport hook
* Typo
* Style fixes
* Remove footer push div
* Styling fixes
* Improve code clarity
* Split ExpressCheckoutFormControl into two components
* Rename visibilityObserver to referenceElement
* Replace 'useEffect' with 'useLayoutEffect'
* Add tests for usePositionRelativeToViewport
* Self-closing div
* Add explanatory comment
* Create a shim for IntersectionObserver
* Update express payment components class names
* Add todo comment to remove IntersectionObserver shim when we drop IE11 support
* add dark styles setting
* add attributes to blocks
* add colors to input and select
* cover rest of items
* tweak select contrast
* fix ie11 issue
* fix focus
* include checkbox styles
* fix extra spacing after phone number
* add styling to quantity selector
* remove extra rule
* remove editor styles for radio control
* use border-color
* rename variables and classes and wording
* adjust colors
* provide tighter control over colors
* remove redudant outline rule
* add more variables
* add support for order note
* use variables for textarea
* move dark mode panel to last
* fix issue with overlapping margins
* move styles out of select
* remove extra spacing
* remove extra spacing from cart
* move styles to state input and remove extra position.
* issue template for cart & checkout feedback
* fix example desktop OS (not iOS!)
* delete `withFeedbackPrompt` - not used
* link cart/checkout editor feedback to GitHub issue:
- add new CartCheckoutFeedbackPrompt with specialised text & url
- use in cart/checkout blocks
- tweaked wording of feedback prompt text
* use speech bubble icon to represent feedbackiness
* simplify cart/checkout feedback prompts
* add default labels to all issue templates
* use markdown heading syntax for headings (was basic bold previously)
* tweak wording (remove hint of frustration) and use new "feedback" label
* Fix JS-rendered blocks inside Empty Cart
* Add deprecation rules
* Performance improvements
* Typo
* Remove 'is-loading' class requirement
* Undo changes moved to woocommerce/woocommerce-blocks#2952
* Improve some comments
* Improve code
* IE 11 fix
* Minor fixes
* Assign default value in arguments destructuring
* Refacot renderFrontend code to make it easier to understand
* Revert "Assign default value in arguments destructuring"
This reverts commit 04ae943c675b94e599a1d1700075a79ef8be5004.
* Add Checkout Order notes (UI)
* Add Checkout Order notes (context)
* Add missing useEffect dependencies
* Remove duplicate toggle in editor
* Minor fixes
* Check whether orderNotes have changed before creating a new state object
* Rename showCounter to showStepNumber
* Rename 'onChange' with 'onTextChange'
* Add comment and tests to FormStep component
* Rename 'with-counter' to 'with-step-number'
* Fix wrong prop
* Make it so order notes are persisted when toggling the checkbox
* Update type-defs
* Set showStepNumber default value to true
* add changelog to readme.txt
* Add testing docs for release
* add some new commands to help with release testing phase
* Add testing notes for 3.0.0
* fix testing note typo
* updae notest to reference the new package-plugin:deploy script for use as part of the release process
* Add note about creating manual tag for the release.
* automate creation of dev tag for release.
* remove release branch from travis branches because we now do pull requests for releases
* remove duplicate back order badge for cart (https://github.com/woocommerce/woocommerce-blocks/pull/2890)
* update zip link in testing notes
* only update stable version in readme.txt if not a pre-release
* Add handling for conditional github release creation based on WP deploy question
* add distignore fir wp deploy builds
* Cart & Checkout: fix '0' visible when product stock was 0 and it allowed backorders (https://github.com/woocommerce/woocommerce-blocks/pull/2891)
* Create wordpress-deploy.yml
* fix cod not accounting for global rate values (https://github.com/woocommerce/woocommerce-blocks/pull/2894)
* ensure we’re only running checks for `wc_reserved_stock` table when necessary (https://github.com/woocommerce/woocommerce-blocks/pull/2895)
* update readme.txt changelog
* remove unnecesary variable definitions
* update github deploy script
* Bumping version strings to new version.
* add missing step for checking out code from tag
* fix exclusion for docker-compose.yml
* fix zip name (it differs from repository name)
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Deregister core cart/checkout scripts and styles when rendering the blocks
* Fix regression: redirect to full cart when adding a product from empty cart
* Make it so it scrolls to the top
* Update assets/js/base/utils/legacy-events.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Add check for jQuery availability
* Listen to removed from cart event too
* Remove unnecessary useEffect dependency
* Remove jQuery event subscriptions on component unmount
* Fix tests
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Show backorder notice in the Cart block
* Don't render variation <div> if empty
* Create ProductBackorderNotification component
* Add product backorder notification to the checkout block
* Fix classname and comment
* Rename notification->badge and don't show low stock badge if backorder is shown
* Use ternary to dispaly backorder/low stock badge
* Reduce specificity of some button styles
* Submit container: make it possible for themes to change the shadow color without the need to rewrite shadow values
* Use background-color instead of background property in docs
* Add docs to style the button and the submit container
* Remove border from button
* Add back state styles to button component
* Docs improvements
* Undo unncessary changes in button component styles
* Add spaces
* Fix Cart test async logic
* tweak test
* refactor test to not call response twice
* add comment for why we're calling fetch twice
* fix duplicate calls
* reset empty test to normal value
* switch to mockResponse
* convert comment to todo block
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Remove legacy files
* Use thumbnail product image for Cart, Checkout and Reviews blocks
* Add option to toggle between full size and cropped image to the Atomic Product image block
* Update base/components classnames
* Fix class name conflict
* Fix some class names mismatch
* Fix review loading placeholder styles
* Fix docs format
* Update old class name
* Fix price slider regression
* Fix load more button component missing legacy class
* Fix wrong loading mask styles classname
* Remove 'checkout' from 'wc-block-components-checkout-payment-methods__save-card-info' classname
* Make it explicit legacy classes will be removed in the next major version
* Make product variation data styles belong to product metadata
* Improve docs sentence
* Order summary: Add spacing between product name and price name
* Remove border from shipping options in the side bar
* Add a hasBorder prop to Panel
* Checkout Order summary: remove margin product description
* Fix padding when there are multiple packages and remove old code
* Simplify selector
* Add margin botton to no shipping options notice
* Make sure Checkout titles are aligned when there are no express payment methods
* Update step heading margins according to new designs
* more setup configuration for rtl
* move default state for cart out of reducer
This also creates a file for default store states, it should make it easier to execute tests in various environments.
* Make sure there’s a default object for cart line item row
* set defaults for cartData
* add fetchMock as a global in eslint config
* add initial cart flow tests
This is just to get the ball rolling, the cart block needs more tests
* fix missing @wordpress/jest-console configs (because I overwrote the original configuration)
* update test because of change in branch
* switch import order
* add globals.d.ts file to declare globals we use.
This is a quick solution to prevent typescript linting warning about `fetchMock`. At some point we could also create a proper interface for it or import the types (if they exist) for the `jest-mock` package.
The new `globals.d.ts` file is excluded from published builds.
* Move order summary styles to component style.scss
* Fix wrong class name in Order summary
* Move express payment methods a little bit higher
* Fix shipping options panel misaligned in the Cart sidebar
* Add right padding to panel button so text doesn't overlap the arrow
* Fix wrong class name in Order summary (II)
* Revert "Move blocks to stable flag (https://github.com/woocommerce/woocommerce-blocks/pull/2261)"
This reverts commit a005649ab8.
* migrate to number based gating
* add todo to watch feature flag
* remove flags from build
* change flag in travis
* load flag in right order
* expose flag to js
* simplify flag definition
* more feature flags
* wrap flag in check
* add helper functions
* add helpers in PHP
* fix typo in flag
* move php code to src/domain/package
* tweak if condition
* return flag to travis
* fix broken block name
* Update item count badge styles
* Make sure item count badge doesn't break in multiple lines
* Make item count badge have white background
* Add docs
* Move order summary CSS properties outside of the sidebar class to reduce specificity
* Move Order summary to its own component
* Register Atomic Blocks and save some block content
* renderInnerBlocks utility
* Frontend Rendering
* Clean up atomic block classnames
* Move shared styles
* Create a hoc for attribute mapping
* Rename some unpluralised class names
* Remove prefixes from atomic component class names
* Updated styles
* Update styles from master
* Revert product list styles
* 2020 fixes
* Separate renderFrontend from renderInnerBlocks
* Lazy loading of components
* Tweak loading classes
* FIx all products loading state
* Revert lazy implementation - creates too many unneccessary files due to webpack config
* Cleanup
* Remove wcBlocksBuildUrl
* Move call to register_atomic_blocks
* Remove duplicate key
* reuse render frontend
* Corectly handle frontend attribute mapping to keep editor working
* Style updates
* Update side effects
* Remove width style from rating to fix alignment
* Move ssr grid styles to main stylesheet
* Put back prefixed classnames
* 2020 styling fixes
* Create frontend files instead of doing it all in block map
* Update assets/js/atomic/utils/get-block-map.js
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Update assets/js/atomic/utils/render-parent-block.js
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Fix last child alignment regardless of block type
* More specificity fixes
* 2020 button alignment
* static fix to prevent offsets
* fix placeholder image in firefox
* Issues reported in feedback
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Honor heading styles in Cart and Checkout blocks
* Replace Panel with DisclosureWidget and remove Card
* Remove panel-style from main entry
* Rename DisclosureWidget props
* Simplify TitleTag assign
* Add aria-expanded attribute
* Rename DisclosureWidget to Panel
* Make Panel button clickable area smaller
* Fix specificity issues with Twenty Twenty
* Reset italics in reset-typography mixin
* Make C&C titles font size large
* Add padding to shipping options when in the sidebar
* Use named font sizes instead of values in px
* Convert rem mixin to em
* Remove unnecessary line-height
* 'Design' -> 'layout'
* Add comment to magic line-heihgt number
* Update a couple of class names to use BEM
* Use consistent name for SCSS variables
* Fix order summary line heights
* Update docs/contributors/coding-guidelines.md
Co-authored-by: Mike Jolley <mike.jolley@me.com>
Co-authored-by: Mike Jolley <mike.jolley@me.com>
* Fix different heading size of Cart block between frontend and editor
* Increase Cart submit button specificity so styles are applied in the editor
* Ensure buttons don't inherit borders
* Simplify styles
* Create Title component
* Rename 'level' prop to 'headingLevel'
* Remove summary from API
* Add wordCountType to assets
* Update packages
* Remove summary from test data
* Featured product uses short desc
* Pass description instead of summary
* Use new Summary Component
* Component and tests
* Increased versititilty of methods
* Update assets/js/base/components/cart-checkout/product-summary/index.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Extra tests for html tags
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Remove unused shippingAsBilling prop from billing data context
* Move functions out of component and add docblocks
* Local address state
* Refactor into new custom hook
* Remove TODO and code fixed in core
* useShallowEqual to prevent updates on all field changes
* Fix stale validation errors
* cleanup
* Should be setting local state not global state for email and phone
* Combine useEffects and pass correct deps
* Update assets/js/base/hooks/checkout/use-checkout-address.js
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Prettier
* Move validation update check into updateValidationError
* Fix state updaters
* Fix context definition for setShippingAddress
* Fix validation updates
* errorId dep
* Reapply changes to checkout block
* Update equality checks
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Use container queries to load Cart and Checkout responsive styles
* Update package-lock.json
* Make form-step react to container queries instead of media queries
* Make sidebar layout inner padding relative to the full-width
* Make container queries breakpoints smaller
* expose guest checkout related options to blocks
* don't show checkout if user is not logged in and guest checkout is disabled
* checkout block doesn't yet support signup:
- if logged out / guest, don't show checkout
- even if store allows sign up at checkout
* only show login prompt if user is not logged in
* link to login page (as needed) if checkout requires login
* rejig hide login link when necessary:
- use customerId from checkout context
- revert currentUserLoggedIn setting - not needed
* add redirect param to checkout login links (so checkout can continue)
* Switch all font-sizes to use the mixin
* Add notice in coding-guidelines to use accessible font sizes
* Fix label alignment in forms with big font-sizes
* Fix Stripe input boxes font-size not being responsive
* Fix select overflowing in small font sizes
* Add rem function from woocommerce/woocommerce-blocks#2320
* Make the font-size() mixin set relative line-height values
* Convert several magic numbers to use the new mixins
* Update docs
* Update input/select paddings to use the rem mixin
* Add lineHeight comment
* Interpolate rem() mixin inside calc
* Make input padding use only relative units
* Prevent SnackbarList from loading in the editor
* Fix snackbar styles leaking into the editor
* Prevent 'Proceed to Checkout' button being fixed to the bottom in the editor
- set appropriate padding for main cart container
- card padding is currently provided by Gutenberg component (?)
- overriding padding on totals card to match main container
* Add ending dot to sentence
* Open links to products from Cart and Checkut blocks in new tabs
* Makes sure product names are broken if they overflow the container
* Use native find instead of lodash method
* Update styles to better match designs
* Revert "Open links to products from Cart and Checkut blocks in new tabs"
This reverts commit 9b64aa5f2e81bf0cf09d5640a3cfe1cc1085c046.
* Fix product name overflowing remove menu on mobile
* Remove @todo comments from form step CSS
* Make letter-spacinguse em instead of px
* IE11: Correctly align text in quantity selector
* Fix long product names overflowing in Checkout block on IE11
* abstract pageSelector to its own component and fix titles
* fix unwrapped context
* move control styles outside editor-wrapper
* restore condition to previous state
* move condition outisde
* rename condition
* keep pageSelect visible till next refresh
* remove comment
* Add quantity limit at product level
* Stock checks only needed when backorders are disabled
* Use remaining stock, not stock qty in messages etc
* Prevent duplicate validation from core
* Move validation calls to checkout API class
* Validate before payment
* Support additional error data
* Add coupon validation before payment, and hide hashes from user
* Implement validation and recalculation
* Abstract notice handler and implement legacy filters
* Handle generic cart item errors
* strip tags from coupon error messages woocommerce/woocommerce-blocks#2212
* Ensure item errors are surfaced when coupons are removed
* Fix wrong value passed to hook
* fix broken checkout when no payment method is there
* try fixing unit test errors
* if preview data has a receiveCart function use it, otherwise default to an anononymous function
* fix tests
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* API - Block qty > 1 for sold individually products
* Add item validation for sold individually to block checkout
* Fix validation check
* Add client side limit if sold individually
* Prevent never ending loading on failed add to cart
* Change cart button for sold individually errors
* Allow buttons to show loading spinners
* Show spinner on cart checkout button press
* Disable fieldsets when processing
* Check icon when finished
* Style tweak to fix height
* Update events
* feedback
* Move button back
* fix broken validation error handling after submit
* Add handling for when there are no observers for payment processing or all observers just return true.
* cheque no longer needs to hook into event emitter
* account for no data on complete status handling in reducer
* add handling for either no observers or all observers returning true for onAfterProcessingWithSuccess emitter
* factor out editor preview data for saved payment methods to previews
* add missing imports lost in rebase
* use editorcontext to provide preview data to payment method context
* remove unused `activePaymentMethod` prop in CheckoutProvider and PaymentMethodDataProvider
* don't set the preview saved card as the default
* fix js error with cart in editor - fix EditorContext, pass previewData:
- editor context preview prop has changed;
- update cart to pass { previewCart } in previewData prop
- correctly destructure cart from previewData in useStoreCart hook
- correct typedefs
- EditorProvider props.previewData - now just Object
- similar for EditorDataContext
- correct default for activePaymentMethod state - empty string as before
* preselect 'use a new payment method' in checkout block editor preview
* update unit tests for changes to editor context
* initial mapping out of stripe payment intents
* rename checkout processing statuses to be clearer
* Add new status and refactor checkout complete behaviour.
* Make sure payment result data is included in checkout processing response
* add payment intent handling
Still testing
* make sure promise is returned
* include site url with endpoint
* modify setComplete status to optionally receive redirectUrl for changing in state at the same time as setting status
* fix typo in property retrieval
* add error handling for after checkout processing event
* add notices area for payment methods
* implement error handling for stripe intents
* hook into stripe error processing and include error in payment response
* clear notices so they don’t show in block and merge payment details
* add notice handling to payment context
* modify error processing in checkout processor
* handle errors with fallback in checkout state context
* hook into after processing for stripe cc error handling
* set checkout to idle status if before processing emitters result in error
* Add emit response type-defs and normalize expectations for observer responses
* improve doc block
* switch checkoutIsComplete check to checkoutAfterProcessing for payment complete status change
* remove unneeded event emitters and consolidate some logic
* fix idle status set logic
* Prevent select label/value breaking in two lines
* Make sure frontend and base styles are loaded in the same order
* Use link-button mixin for address button
* Refactor shipping rates control CSS to decrease specificity and overwrites
* Refactor sidebar panel CSS to decrease specificity and overwrites
* Fix link-button vertical-align
* remove calculating as a checkout status (making it separate)
* include checkout is calculating for determining whether to flip payment status to process
* only change payment method state for status changes if needed
* fix reducer for shipping state
* include checkoutIsCalculating for determining whether to show validation errors in checkout block
* change where currentStatus is defined
* fix bug with saved payment method option
* Only show descriptions if shipping/payment methods > 1
* Hide descriptions if no description text is set
* Fix object length
* methods->options
* Counting helpers for shipping rates and packages
* Use new helpers
* move preview to editor data and alias it no nothing in frontend builds
* seperate context and provider
* pass previewData as a prop to provider
* address comments
* disable continue to checkout if item is being removed
* rename isPending and selectors/actions to isPendingDelete
* switch itemPendingDelete params order
* change to watching quantity changes not removal
* yield RECEIVE_REMOVED_ITEM
* update types and add return to select
* update tests
* switch params back
* only delete item after response from server
* update tests
* handle errors and unrelated unmounts
* disable row if is loading
* Make validation errors appear
* Make validation errors appear all at once
* Simplify diff
* Expose shippingErrorStatus from shipping context
* Memoize currentErrorStatus
* Pass currentErrorStatus to observers
* Add missing type-def property
* Fix typo in constant name
* Refactor emitEvent so false responses don't return true
* Make onCheckoutProcessing observers return errorMessage and validationErrors properties
* Move no-shipping-placeholder to block - allow pointer events
* Allow payments placeholder to have pointer events
* Enable pointer events for children
* Wrap checkout with disabled
* Hook up checkout validation with context
* Make sure hasValidationErrors is up to date in onCheckoutProcessing
* Move validation check inside CheckoutProcessor's processCheckout
* Make sure all checkout form fields have a unique ID
* Don't clear checkout context errors in shipping context
* Move CheckoutProcessor to the top so scrollToTop works
* Do not disable Place Order Button if there are errors
* Split checkValidation and processCheckout in Checkout Provider
* Refactor event emitter to use Maps
* Save payment method errors to validation context
* Show an notice when a payment method has an error
* Make sure JS errors during payment are displayed
* Remove error notice when payment method doesn't return an error anymore
* Make sure payment methods know if shipping and billing addresses are the same
* Make sure checkout is only processed if payment methods didn't fail
* Make sure state input also has an id
* Clear input and select errors on unmount
* Pass id to CountryInput and StateInput
* Fix function name
* Add missing default context values
* Move onCheckoutCompleteError effect to CheckoutBlock
* Remove conditional from shipping setHasError
* Rename and move existing checkout provider to checkout-state provider.
This allows us to re-use the interface exposed on this provider for cart and checkout blocks.
* refactor checkout provider to implement the new checkout state provider.
* Add Cart provider and export
* fix type-defs
* fix editor context provider and ensure all `isEditor` checks come from this provider
* fix type definition
* implement cart provider