* Re-apply token support
* Updated nonce headers
* Updated package-lock.json
* test commit to debug failing git hooks
* Revert "test commit to debug failing git hooks"
This reverts commit e64086b0a7aede154705be09c7b3433b08bc1e34.
* JsonWebToken utility class for generating and validating HS256 JWT tokens. Removed third-party JWT library.
* Add ext-hash to composer (required by hash_hmac())
* Removed unnecessary method param.
* Tests for retrieving cart contents via Cart-Token
* Removed token tests ( we can't properly test cart token functionality until we refactor the way it intercepts calls to replace the session object )
* Abstracted payload from JsonWebToken class. We can now use it to encode custom payloads and reuse them wherever we want.
* Fixed missing check for token expiration in the payload.
* MD lint error and config fix
* Update composer.lock
* Fixed bug using the wrong nonce header.
* Refactor to properly save session data based on cart token.
* Refactored DB queries to properly use prepared statement
* Removed underscore prefix for class attributes
* Fixed spaces instead of tabs indenting composer.json. Cleaned up .editorconfig
* Cleaned up borked .md comments.
* Comment for WP_SETUP_CONFIG check.
* Reverted SQL prepared statement for including table names.
* Used hash_equals() for signature comparison. Renamed some wrongly named properties.
* Updated composer.lock
* Reverted some accidentally removed lines on some documentation files.
* Reverted accidentally removed line on docs/internal-developers/testing/releases/404.md
* Changed param type from mixed to
Co-authored-by: Paulo Arromba <17236129+wavvves@users.noreply.github.com>
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
* Added Cross-sells object and schema for the API Cart response.
* Cross-sells are now WC_Product objects that pass through the visibility filter.
* Removed redundant check.
* Updated function doc comment.
* Cleaned up imports.
* Cross-sells item schema (extension of ProductSchema) was removed, and replaced by ProductSchema itself. Cross-sells are direct product representation, and extending this goes out of scope for the task at hand.
* Unit testing for cart response containing cross-sell products.
* Remove X- Prefixes from custom headers
* Fix docs
* Handle deprecated X-WC-Store-API-Nonce header if received
* Send old nonce until future version removes this
* Add todo and cut off date
* wc_deprecated_argument
* Update todo name
* typo
* Back compat in batch
* Flip Nonce logic to make it easier to support both in client bw compat logic
* Link order controller to cart routes
* Remove order controller from checkout route
* Fix PHP warnings in abstract schema
* Fix PHP warnings in abstract route
* Update shipping phone handling
* Includes are handled in core now
* Remove maybe_update_order_from_customer
* Add cart_updated routine to all cart routes
* Remove abstract method
* Remove test for woocommerce_blocks_cart_update_order_from_customer_request
* Remove do_order_callback
* Fix sanitization callback
* Add test case to confirm sanitization callbacks work for nested properties
Co-authored-by: Mike Jolley <mike.jolley@me.com>
* Throw an exception if there is no selected shipping method on an item that needs shipping
* Update src/StoreApi/Utilities/OrderController.php for ensure error message ends with a period.
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* Tidy up bootstap so it uses autoloaders and works with the known plugin paths
* eslint ignore woocommerce bin
* Use WC from bin in wp-env
* Git ignore woocommerce in bin
* Remove reliance on core framework across phpunit tests
* Simplify bootstrap - since test framework is no longer required, there is no need to pull in woo from github
* Remove unused configs
* Update CI
* Implement PHPunit Polyfill
* Abstract the test case
* Update lock
* remove chown
* experiment: try sudo
* move phpversion to first run
* Remove 7.0 tests :(
* test plugin override for 5.5 test
* Use dev version
* Fix formatting
Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com>
* 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
* Add batch route
* Register batch route
* Allow batching on writable endpoints
* Batch in client
* Batch non-GET requests
* Batching support with typescript defs
* Remove unused hook
* Prevent multiple fragment updates
* Only use batch route if detected
* Correct var name
* Move nonce check to validate_callback so it runs before requests are completed
* remove unused imports
* updateCartFragments function as const
* Add phpunit tests for batching functionality
* Reduce batch delay
* increase timeout
* Update isCartUpdatePostRequest for batch support
* Update Endpoint used in test
* Move nonce check back inline - custom headers are not returned otherwise
* Fix error handling
* Back to 30s
* Update assets/js/middleware/cart-update.ts
Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
* whitespace
Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
This reverts commit 5b65a02297.
This commit broke cart updates for the cart block (surfaced with changing quantity)
There were also legit e2e test fails for the cart-update middleware behaviour that weren’t addressed.
* Add batch route
* Register batch route
* Allow batching on writable endpoints
* Batch in client
* Batch non-GET requests
* Batching support with typescript defs
* Remove unused hook
* Prevent multiple fragment updates
* Only use batch route if detected
* Correct var name
* Move nonce check to validate_callback so it runs before requests are completed
* remove unused imports
* updateCartFragments function as const
* Add phpunit tests for batching functionality
* Reduce batch delay
* increase timeout
* 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>
* 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>
* 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
* Correct docblock description
* Sync shipping address changes with billing data
* Update inline documentation
* Revert address sync because it fails when shipping is disabled explicitely
* Avoid loading shipping address from customer is shipping is disabled
* Rather than update order from the wc/store/checkout request, update the customer object
This is turn is synced to order, but also allows the cart calcultions to use the posted data. This means that taxes will be updated based on address data even if not displayed on the checkout.
* Add action that combines billing and shipping updates
* Add route for updating billing and shipping address
* Sync billing data to server on change
* Shared constants for billing data
* Skip address update if missing country
* Allow null values to skip formatting
* Add billing to cart schema
* Removed unwanted hooks from previous commit
* Decoding is handled in useStoreCart
* Remove hook
* Make shipping context hold state
* Make billing context hold state
* Add address processors
* Cart does not have billing
* Update tests, remove some unrelated changes affecting the diff
* Revert "Update inline documentation"
This reverts commit 0393f49316de3152c6dcf6fda1192c06a74f1b55.
* Make shippingRatesAreResolving conditonal based on API request
* Shared address processor in cart and checkout
* Rename REST endpoint
* CustomerDataProvider and hook
* Update shipping address type defs
* Rename customer address endpoint, and remove update-shipping
* Update tests
* Fix tests by restoring country validation
* typo
* Update assets/js/base/hooks/cart/use-store-cart.js
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* Simplify debounce and request handling
* Remove state from address sync
This will mean billing is "forgotten" if using the checbox, but this greatly simplifies logic.
* Rename shipping rates loading to customer data loading
* Sync based on useStoreCart data
* Made cart API less strict on addresses
* Fix useCheckoutAddress sync
* Add note on currentShippingAsBilling
* Use incoming isCart
* Add more detailed inline comment for shippingAsBilling toggle event
* Combine customer billing and shipping ref
* Update address docblock
* Error handling in pluckAddress
* Fix cart response after rebase
* Update customer tests
* Update src/StoreApi/Routes/CartUpdateCustomer.php
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
Co-authored-by: Darren Ethier <darren@roughsmootheng.in>
* initial prototype for ExtendRestApi
* return before assign
* fix phplint errors
* declare Throwable
* remove empty init
* return initial data if shape is not correct
* Add IDENTIFIER to schema classes
* refactor ExtendRestApi to not use filters
* remove extra check
* implement ExtendRestAPI injected into StoreAPI schemas
* use $extend instead of $extend_schema
* fix phpcs issues
* update schema
* fix data type
* address review
* fix object cast
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
* Add attributes to API
* Add component
* API updates to return variation data
* Update to handle updated api responses
* Working picker
* Update tests
* update test
* Use SelectControl
* Add Picker to Form Block
* Code cleanup and splitting
* Inline todos
* Update todos
* Update assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/index.js
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* change classname and move styles within component
* Correct conditional
* Avoid nesting filters
* Remove exclude from getVariationsMatchingSelectedAttributes
* basic select styles
* remove custom select styles
Co-authored-by: Albert Juhé Lluveras <contact@albertjuhe.com>
* `use` is never relative - absolute is always used so backslash is not needed
* Move process_legacy_payment code to rest api class
* Move storeapi directory
* Updated namespaces and moved tests