@salesforce/retail-react-app 1.0.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +7 -0
- package/.eslintrc.js +25 -0
- package/.prettierignore +4 -0
- package/.prettierrc.yaml +7 -0
- package/CHANGELOG.md +173 -0
- package/LICENSE +14 -0
- package/README.md +48 -0
- package/app/assets/svg/account.svg +3 -0
- package/app/assets/svg/alert.svg +3 -0
- package/app/assets/svg/basket.svg +3 -0
- package/app/assets/svg/brand-logo.svg +10 -0
- package/app/assets/svg/cc-amex.svg +7 -0
- package/app/assets/svg/cc-cvv.svg +8 -0
- package/app/assets/svg/cc-discover.svg +14 -0
- package/app/assets/svg/cc-mastercard.svg +8 -0
- package/app/assets/svg/cc-visa.svg +11 -0
- package/app/assets/svg/check-circle.svg +3 -0
- package/app/assets/svg/check.svg +3 -0
- package/app/assets/svg/chevron-down.svg +3 -0
- package/app/assets/svg/chevron-left.svg +3 -0
- package/app/assets/svg/chevron-right.svg +3 -0
- package/app/assets/svg/chevron-up.svg +3 -0
- package/app/assets/svg/close.svg +3 -0
- package/app/assets/svg/dashboard.svg +4 -0
- package/app/assets/svg/figma-logo.svg +14 -0
- package/app/assets/svg/file.svg +3 -0
- package/app/assets/svg/filter.svg +3 -0
- package/app/assets/svg/flag-ca.svg +5 -0
- package/app/assets/svg/flag-cn.svg +19 -0
- package/app/assets/svg/flag-fr.svg +19 -0
- package/app/assets/svg/flag-gb.svg +16 -0
- package/app/assets/svg/flag-it.svg +29 -0
- package/app/assets/svg/flag-jp.svg +10 -0
- package/app/assets/svg/flag-us.svg +7 -0
- package/app/assets/svg/github-logo.svg +40 -0
- package/app/assets/svg/hamburger.svg +8 -0
- package/app/assets/svg/heart-solid.svg +7 -0
- package/app/assets/svg/heart.svg +3 -0
- package/app/assets/svg/info.svg +3 -0
- package/app/assets/svg/like.svg +4 -0
- package/app/assets/svg/location.svg +3 -0
- package/app/assets/svg/lock.svg +3 -0
- package/app/assets/svg/paypal.svg +19 -0
- package/app/assets/svg/plug.svg +3 -0
- package/app/assets/svg/plus.svg +3 -0
- package/app/assets/svg/receipt.svg +3 -0
- package/app/assets/svg/search.svg +8 -0
- package/app/assets/svg/signout.svg +3 -0
- package/app/assets/svg/social-facebook.svg +3 -0
- package/app/assets/svg/social-instagram.svg +3 -0
- package/app/assets/svg/social-pinterest.svg +4 -0
- package/app/assets/svg/social-twitter.svg +3 -0
- package/app/assets/svg/social-youtube.svg +3 -0
- package/app/assets/svg/user.svg +3 -0
- package/app/assets/svg/visibility-off.svg +5 -0
- package/app/assets/svg/visibility.svg +3 -0
- package/app/components/_app/index.jsx +401 -0
- package/app/components/_app/index.test.js +85 -0
- package/app/components/_app/partials/above-header.jsx +10 -0
- package/app/components/_app-config/index.jsx +125 -0
- package/app/components/_app-config/index.test.js +77 -0
- package/app/components/_error/index.jsx +142 -0
- package/app/components/_error/index.test.js +25 -0
- package/app/components/action-card/index.jsx +75 -0
- package/app/components/address-display/index.jsx +30 -0
- package/app/components/basic-tile/index.jsx +65 -0
- package/app/components/basic-tile/index.test.js +23 -0
- package/app/components/breadcrumb/index.jsx +67 -0
- package/app/components/breadcrumb/index.test.js +30 -0
- package/app/components/confirmation-modal/index.jsx +111 -0
- package/app/components/confirmation-modal/index.test.js +98 -0
- package/app/components/drawer-menu/index.jsx +405 -0
- package/app/components/drawer-menu/index.test.js +33 -0
- package/app/components/dynamic-image/index.jsx +56 -0
- package/app/components/field/index.jsx +161 -0
- package/app/components/footer/index.jsx +269 -0
- package/app/components/footer/index.test.js +22 -0
- package/app/components/forms/address-fields.jsx +49 -0
- package/app/components/forms/credit-card-fields.jsx +149 -0
- package/app/components/forms/form-action-buttons.jsx +55 -0
- package/app/components/forms/login-fields.jsx +31 -0
- package/app/components/forms/password-requirements.jsx +99 -0
- package/app/components/forms/post-checkout-registration-fields.jsx +43 -0
- package/app/components/forms/profile-fields.jsx +36 -0
- package/app/components/forms/promo-code-fields.jsx +43 -0
- package/app/components/forms/registration-fields.jsx +42 -0
- package/app/components/forms/reset-password-fields.jsx +31 -0
- package/app/components/forms/state-province-options.jsx +75 -0
- package/app/components/forms/update-password-fields.jsx +49 -0
- package/app/components/forms/useAddressFields.jsx +196 -0
- package/app/components/forms/useCreditCardFields.jsx +146 -0
- package/app/components/forms/useLoginFields.jsx +52 -0
- package/app/components/forms/useProfileFields.jsx +95 -0
- package/app/components/forms/usePromoCodeFields.jsx +39 -0
- package/app/components/forms/useRegistrationFields.jsx +136 -0
- package/app/components/forms/useResetPasswordFields.jsx +40 -0
- package/app/components/forms/useUpdatePasswordFields.jsx +89 -0
- package/app/components/header/index.jsx +290 -0
- package/app/components/header/index.test.js +217 -0
- package/app/components/hero/index.jsx +84 -0
- package/app/components/hero/index.test.js +40 -0
- package/app/components/icons/index.jsx +158 -0
- package/app/components/icons/index.test.js +20 -0
- package/app/components/image-gallery/index.jsx +176 -0
- package/app/components/image-gallery/index.test.js +485 -0
- package/app/components/item-variant/index.jsx +33 -0
- package/app/components/item-variant/item-attributes.jsx +107 -0
- package/app/components/item-variant/item-image.jsx +73 -0
- package/app/components/item-variant/item-name.jsx +28 -0
- package/app/components/item-variant/item-price.jsx +117 -0
- package/app/components/link/index.jsx +32 -0
- package/app/components/link/index.test.js +72 -0
- package/app/components/links-list/index.jsx +89 -0
- package/app/components/links-list/index.test.js +62 -0
- package/app/components/list-menu/index.jsx +280 -0
- package/app/components/list-menu/index.test.js +44 -0
- package/app/components/loading-spinner/index.jsx +46 -0
- package/app/components/locale-selector/index.jsx +124 -0
- package/app/components/locale-selector/index.test.js +37 -0
- package/app/components/locale-text/index.jsx +97 -0
- package/app/components/locale-text/index.test.js +36 -0
- package/app/components/login/index.jsx +96 -0
- package/app/components/nested-accordion/index.jsx +185 -0
- package/app/components/nested-accordion/index.test.js +98 -0
- package/app/components/offline-banner/index.jsx +40 -0
- package/app/components/offline-banner/index.test.js +15 -0
- package/app/components/offline-boundary/index.jsx +104 -0
- package/app/components/offline-boundary/index.test.js +123 -0
- package/app/components/order-summary/index.jsx +331 -0
- package/app/components/page-action-placeholder/index.jsx +50 -0
- package/app/components/pagination/index.jsx +134 -0
- package/app/components/pagination/index.test.js +25 -0
- package/app/components/product-item/index.jsx +146 -0
- package/app/components/product-item/index.test.js +38 -0
- package/app/components/product-scroller/index.jsx +172 -0
- package/app/components/product-scroller/index.test.js +98 -0
- package/app/components/product-tile/index.jsx +195 -0
- package/app/components/product-tile/index.test.js +96 -0
- package/app/components/product-view/index.jsx +538 -0
- package/app/components/product-view/index.test.js +224 -0
- package/app/components/product-view-modal/index.jsx +48 -0
- package/app/components/product-view-modal/index.test.js +72 -0
- package/app/components/promo-code/index.jsx +162 -0
- package/app/components/promo-popover/index.jsx +83 -0
- package/app/components/quantity-picker/index.jsx +58 -0
- package/app/components/radio-card/index.jsx +75 -0
- package/app/components/recommended-products/index.jsx +227 -0
- package/app/components/register/index.jsx +114 -0
- package/app/components/reset-password/index.jsx +87 -0
- package/app/components/responsive/index.jsx +29 -0
- package/app/components/scroll-to-top/index.jsx +24 -0
- package/app/components/scroll-to-top/index.test.js +46 -0
- package/app/components/search/index.jsx +279 -0
- package/app/components/search/index.test.js +127 -0
- package/app/components/search/partials/recent-searches.jsx +76 -0
- package/app/components/search/partials/search-suggestions.jsx +45 -0
- package/app/components/search/partials/suggestions.jsx +43 -0
- package/app/components/section/index.jsx +68 -0
- package/app/components/seo/index.jsx +33 -0
- package/app/components/social-icons/index.jsx +101 -0
- package/app/components/social-icons/index.test.js +30 -0
- package/app/components/swatch-group/index.jsx +77 -0
- package/app/components/swatch-group/index.test.js +136 -0
- package/app/components/swatch-group/swatch.jsx +94 -0
- package/app/components/toggle-card/index.jsx +97 -0
- package/app/components/with-registration/index.jsx +58 -0
- package/app/components/with-registration/index.test.js +85 -0
- package/app/constants.js +109 -0
- package/app/contexts/index.js +92 -0
- package/app/hooks/einstein-mock-data.js +916 -0
- package/app/hooks/index.js +17 -0
- package/app/hooks/use-add-to-cart-modal.js +344 -0
- package/app/hooks/use-add-to-cart-modal.test.js +625 -0
- package/app/hooks/use-auth-modal.js +337 -0
- package/app/hooks/use-auth-modal.test.js +365 -0
- package/app/hooks/use-currency.js +20 -0
- package/app/hooks/use-currency.test.js +41 -0
- package/app/hooks/use-current-basket.js +39 -0
- package/app/hooks/use-current-customer.js +29 -0
- package/app/hooks/use-derived-product.js +77 -0
- package/app/hooks/use-derived-product.test.js +69 -0
- package/app/hooks/use-einstein.js +512 -0
- package/app/hooks/use-einstein.test.js +224 -0
- package/app/hooks/use-intersection-observer.js +64 -0
- package/app/hooks/use-limit-urls.js +31 -0
- package/app/hooks/use-limit-urls.test.js +40 -0
- package/app/hooks/use-multi-site.js +36 -0
- package/app/hooks/use-multi-site.test.js +53 -0
- package/app/hooks/use-navigation.js +37 -0
- package/app/hooks/use-navigation.test.js +109 -0
- package/app/hooks/use-page-urls.js +35 -0
- package/app/hooks/use-page-urls.test.js +39 -0
- package/app/hooks/use-pdp-search-params.js +16 -0
- package/app/hooks/use-pdp-search-params.test.js +52 -0
- package/app/hooks/use-previous.js +17 -0
- package/app/hooks/use-product-view-modal.js +93 -0
- package/app/hooks/use-product-view-modal.test.js +172 -0
- package/app/hooks/use-search-params.js +96 -0
- package/app/hooks/use-search-params.test.js +91 -0
- package/app/hooks/use-sort-urls.js +33 -0
- package/app/hooks/use-sort-urls.test.js +42 -0
- package/app/hooks/use-toast.js +68 -0
- package/app/hooks/use-toast.test.js +58 -0
- package/app/hooks/use-variant.js +32 -0
- package/app/hooks/use-variant.test.js +81 -0
- package/app/hooks/use-variation-attributes.js +138 -0
- package/app/hooks/use-variation-attributes.test.js +119 -0
- package/app/hooks/use-variation-params.js +31 -0
- package/app/hooks/use-variation-params.test.js +73 -0
- package/app/hooks/use-wish-list.js +42 -0
- package/app/main.jsx +14 -0
- package/app/mocks/basket-with-suit.js +146 -0
- package/app/mocks/empty-basket.js +39 -0
- package/app/mocks/mock-data.js +5632 -0
- package/app/mocks/product-set-winter-lookM.js +1224 -0
- package/app/mocks/searchResults.js +144 -0
- package/app/mocks/variant-750518699578M.js +434 -0
- package/app/page-designer/README.md +102 -0
- package/app/page-designer/assets/image-tile/index.jsx +51 -0
- package/app/page-designer/assets/image-tile/index.test.js +30 -0
- package/app/page-designer/assets/image-with-text/index.jsx +140 -0
- package/app/page-designer/assets/image-with-text/index.test.js +38 -0
- package/app/page-designer/assets/index.js +9 -0
- package/app/page-designer/index.js +10 -0
- package/app/page-designer/layouts/carousel/index.jsx +222 -0
- package/app/page-designer/layouts/carousel/index.test.js +43 -0
- package/app/page-designer/layouts/index.js +14 -0
- package/app/page-designer/layouts/mobileGrid1r1c/index.jsx +36 -0
- package/app/page-designer/layouts/mobileGrid1r1c/index.test.js +35 -0
- package/app/page-designer/layouts/mobileGrid2r1c/index.jsx +37 -0
- package/app/page-designer/layouts/mobileGrid2r1c/index.test.js +47 -0
- package/app/page-designer/layouts/mobileGrid2r2c/index.jsx +37 -0
- package/app/page-designer/layouts/mobileGrid2r2c/index.test.js +71 -0
- package/app/page-designer/layouts/mobileGrid2r3c/index.jsx +37 -0
- package/app/page-designer/layouts/mobileGrid2r3c/index.test.js +95 -0
- package/app/page-designer/layouts/mobileGrid3r1c/index.jsx +37 -0
- package/app/page-designer/layouts/mobileGrid3r1c/index.test.js +59 -0
- package/app/page-designer/layouts/mobileGrid3r2c/index.jsx +37 -0
- package/app/page-designer/layouts/mobileGrid3r2c/index.test.js +95 -0
- package/app/page-designer/utils.js +14 -0
- package/app/pages/account/addresses.jsx +382 -0
- package/app/pages/account/addresses.test.js +120 -0
- package/app/pages/account/constant.js +57 -0
- package/app/pages/account/index.jsx +237 -0
- package/app/pages/account/index.test.js +188 -0
- package/app/pages/account/order-detail.jsx +397 -0
- package/app/pages/account/order-history.jsx +264 -0
- package/app/pages/account/orders.jsx +30 -0
- package/app/pages/account/orders.test.js +95 -0
- package/app/pages/account/profile.jsx +357 -0
- package/app/pages/account/wishlist/index.jsx +195 -0
- package/app/pages/account/wishlist/index.mock.js +1481 -0
- package/app/pages/account/wishlist/index.test.js +56 -0
- package/app/pages/account/wishlist/partials/wishlist-primary-action.jsx +170 -0
- package/app/pages/account/wishlist/partials/wishlist-primary-action.mock.js +1623 -0
- package/app/pages/account/wishlist/partials/wishlist-primary-action.test.js +99 -0
- package/app/pages/account/wishlist/partials/wishlist-secondary-button-group.jsx +120 -0
- package/app/pages/account/wishlist/partials/wishlist-secondary-button-group.test.js +391 -0
- package/app/pages/cart/index.jsx +476 -0
- package/app/pages/cart/index.test.js +481 -0
- package/app/pages/cart/partials/cart-cta.jsx +46 -0
- package/app/pages/cart/partials/cart-secondary-button-group.jsx +135 -0
- package/app/pages/cart/partials/cart-secondary-button-group.test.js +103 -0
- package/app/pages/cart/partials/cart-skeleton.jsx +93 -0
- package/app/pages/cart/partials/cart-title.jsx +27 -0
- package/app/pages/cart/partials/empty-cart.jsx +86 -0
- package/app/pages/checkout/confirmation.jsx +541 -0
- package/app/pages/checkout/confirmation.mock.js +450 -0
- package/app/pages/checkout/confirmation.test.js +114 -0
- package/app/pages/checkout/index.jsx +169 -0
- package/app/pages/checkout/index.test.js +582 -0
- package/app/pages/checkout/partials/cc-radio-group.jsx +122 -0
- package/app/pages/checkout/partials/checkout-footer.jsx +140 -0
- package/app/pages/checkout/partials/checkout-footer.test.js +16 -0
- package/app/pages/checkout/partials/checkout-header.jsx +54 -0
- package/app/pages/checkout/partials/checkout-header.test.js +16 -0
- package/app/pages/checkout/partials/checkout-skeleton.jsx +52 -0
- package/app/pages/checkout/partials/contact-info.jsx +251 -0
- package/app/pages/checkout/partials/contact-info.test.js +43 -0
- package/app/pages/checkout/partials/payment-form.jsx +97 -0
- package/app/pages/checkout/partials/payment.jsx +276 -0
- package/app/pages/checkout/partials/shipping-address-selection.jsx +377 -0
- package/app/pages/checkout/partials/shipping-address.jsx +132 -0
- package/app/pages/checkout/partials/shipping-options.jsx +232 -0
- package/app/pages/checkout/util/checkout-context.js +94 -0
- package/app/pages/home/data.js +134 -0
- package/app/pages/home/index.jsx +301 -0
- package/app/pages/home/index.test.js +23 -0
- package/app/pages/login/index.jsx +123 -0
- package/app/pages/login/index.test.js +229 -0
- package/app/pages/login-redirect/index.jsx +23 -0
- package/app/pages/login-redirect/index.test.js +16 -0
- package/app/pages/page-not-found/index.jsx +90 -0
- package/app/pages/page-not-found/index.test.js +31 -0
- package/app/pages/product-detail/index.jsx +394 -0
- package/app/pages/product-detail/index.mock.js +197 -0
- package/app/pages/product-detail/index.test.js +162 -0
- package/app/pages/product-detail/partials/information-accordion.jsx +121 -0
- package/app/pages/product-list/index.jsx +735 -0
- package/app/pages/product-list/index.test.js +180 -0
- package/app/pages/product-list/partials/above-page-header.jsx +10 -0
- package/app/pages/product-list/partials/checkbox-refinements.jsx +41 -0
- package/app/pages/product-list/partials/checkbox-refinements.test.js +53 -0
- package/app/pages/product-list/partials/color-refinements.jsx +88 -0
- package/app/pages/product-list/partials/empty-results.jsx +118 -0
- package/app/pages/product-list/partials/link-refinements.jsx +38 -0
- package/app/pages/product-list/partials/page-header.jsx +42 -0
- package/app/pages/product-list/partials/radio-refinements.jsx +60 -0
- package/app/pages/product-list/partials/refinements.jsx +144 -0
- package/app/pages/product-list/partials/selected-refinements.jsx +100 -0
- package/app/pages/product-list/partials/size-refinements.jsx +55 -0
- package/app/pages/registration/index.jsx +87 -0
- package/app/pages/registration/index.test.jsx +132 -0
- package/app/pages/reset-password/index.jsx +112 -0
- package/app/pages/reset-password/index.test.jsx +141 -0
- package/app/request-processor.js +118 -0
- package/app/request-processor.test.js +23 -0
- package/app/routes.jsx +111 -0
- package/app/routes.test.js +13 -0
- package/app/ssr.js +70 -0
- package/app/static/ico/favicon.ico +0 -0
- package/app/static/img/global/app-icon-192.png +0 -0
- package/app/static/img/global/app-icon-512.png +0 -0
- package/app/static/img/global/apple-touch-icon.png +0 -0
- package/app/static/img/hero.png +0 -0
- package/app/static/manifest.json +19 -0
- package/app/static/robots.txt +2 -0
- package/app/theme/components/base/accordion.js +21 -0
- package/app/theme/components/base/alert.js +17 -0
- package/app/theme/components/base/badge.js +25 -0
- package/app/theme/components/base/button.js +77 -0
- package/app/theme/components/base/checkbox.js +30 -0
- package/app/theme/components/base/container.js +17 -0
- package/app/theme/components/base/drawer.js +26 -0
- package/app/theme/components/base/formLabel.js +13 -0
- package/app/theme/components/base/icon.js +13 -0
- package/app/theme/components/base/input.js +44 -0
- package/app/theme/components/base/modal.js +11 -0
- package/app/theme/components/base/popover.js +61 -0
- package/app/theme/components/base/radio.js +33 -0
- package/app/theme/components/base/select.js +15 -0
- package/app/theme/components/base/skeleton.js +12 -0
- package/app/theme/components/base/tooltip.js +19 -0
- package/app/theme/components/project/_app.js +25 -0
- package/app/theme/components/project/breadcrumb.js +25 -0
- package/app/theme/components/project/checkout-footer.js +35 -0
- package/app/theme/components/project/drawer-menu.js +66 -0
- package/app/theme/components/project/footer.js +84 -0
- package/app/theme/components/project/header.js +84 -0
- package/app/theme/components/project/image-gallery.js +59 -0
- package/app/theme/components/project/links-list.js +43 -0
- package/app/theme/components/project/list-menu.js +91 -0
- package/app/theme/components/project/locale-selector.js +42 -0
- package/app/theme/components/project/nested-accordion.js +26 -0
- package/app/theme/components/project/offline-banner.js +25 -0
- package/app/theme/components/project/pagination.js +22 -0
- package/app/theme/components/project/product-tile.js +32 -0
- package/app/theme/components/project/social-icons.js +52 -0
- package/app/theme/components/project/swatch-group.js +115 -0
- package/app/theme/foundations/colors.js +170 -0
- package/app/theme/foundations/gradients.js +9 -0
- package/app/theme/foundations/layerStyles.js +41 -0
- package/app/theme/foundations/shadows.js +9 -0
- package/app/theme/foundations/sizes.js +18 -0
- package/app/theme/foundations/space.js +9 -0
- package/app/theme/foundations/styles.js +21 -0
- package/app/theme/index.js +104 -0
- package/app/utils/cc-utils.js +112 -0
- package/app/utils/cc-utils.test.js +41 -0
- package/app/utils/image-groups-utils.js +62 -0
- package/app/utils/image-groups-utils.test.js +65 -0
- package/app/utils/locale.js +78 -0
- package/app/utils/locale.test.js +112 -0
- package/app/utils/password-utils.js +21 -0
- package/app/utils/phone-utils.js +22 -0
- package/app/utils/phone-utils.test.js +15 -0
- package/app/utils/product-utils.js +35 -0
- package/app/utils/product-utils.test.js +51 -0
- package/app/utils/responsive-image.js +198 -0
- package/app/utils/responsive-image.test.js +170 -0
- package/app/utils/routes-utils.js +111 -0
- package/app/utils/routes-utils.test.js +291 -0
- package/app/utils/site-utils.js +222 -0
- package/app/utils/site-utils.test.js +376 -0
- package/app/utils/test-utils.js +257 -0
- package/app/utils/url.js +291 -0
- package/app/utils/url.test.js +421 -0
- package/app/utils/utils.js +201 -0
- package/app/utils/utils.test.js +182 -0
- package/babel.config.js +7 -0
- package/cache-hash-config.json +8 -0
- package/config/default.js +64 -0
- package/config/mocks/default.js +131 -0
- package/config/sites.js +78 -0
- package/jest-setup.js +191 -0
- package/jest.config.js +50 -0
- package/jsconfig.json +13 -0
- package/package.json +105 -0
- package/scripts/extract-default-messages.js +92 -0
- package/tests/lighthouserc.js +37 -0
- package/translations/README.md +127 -0
- package/translations/compiled/de-DE.json +3212 -0
- package/translations/compiled/en-GB.json +3212 -0
- package/translations/compiled/en-US.json +3212 -0
- package/translations/compiled/en-XA.json +6948 -0
- package/translations/compiled/es-MX.json +3216 -0
- package/translations/compiled/fr-FR.json +3216 -0
- package/translations/compiled/it-IT.json +3188 -0
- package/translations/compiled/ja-JP.json +3200 -0
- package/translations/compiled/ko-KR.json +3180 -0
- package/translations/compiled/pt-BR.json +3220 -0
- package/translations/compiled/zh-CN.json +3212 -0
- package/translations/compiled/zh-TW.json +3208 -0
- package/translations/de-DE.json +1417 -0
- package/translations/en-GB.json +1417 -0
- package/translations/en-US.json +1417 -0
- package/translations/es-MX.json +1417 -0
- package/translations/fr-FR.json +1417 -0
- package/translations/it-IT.json +1417 -0
- package/translations/ja-JP.json +1417 -0
- package/translations/ko-KR.json +1417 -0
- package/translations/pt-BR.json +1417 -0
- package/translations/zh-CN.json +1417 -0
- package/translations/zh-TW.json +1417 -0
- package/worker/main.js +36 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {FormattedMessage} from 'react-intl'
|
|
10
|
+
import {Button, Stack} from '@chakra-ui/react'
|
|
11
|
+
import {MESSAGE_PROPTYPE} from '@salesforce/retail-react-app/app/utils/locale.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Renders a form submit button and a cancel button with configurable labels and callbacks
|
|
15
|
+
* in a responsive layout. Used primarily in forms that can be toggled opened/closed.
|
|
16
|
+
*/
|
|
17
|
+
const FormActionButtons = ({
|
|
18
|
+
saveButtonProps = {},
|
|
19
|
+
cancelButtonProps = {},
|
|
20
|
+
saveButtonLabel,
|
|
21
|
+
cancelButtonLabel,
|
|
22
|
+
onCancel = () => {}
|
|
23
|
+
}) => {
|
|
24
|
+
return (
|
|
25
|
+
<Stack direction={{base: 'column', lg: 'row-reverse'}} spacing={4}>
|
|
26
|
+
<Button type="submit" minWidth={28} {...saveButtonProps}>
|
|
27
|
+
{saveButtonLabel ? (
|
|
28
|
+
<FormattedMessage {...saveButtonLabel} />
|
|
29
|
+
) : (
|
|
30
|
+
<FormattedMessage defaultMessage="Save" id="form_action_buttons.button.save" />
|
|
31
|
+
)}
|
|
32
|
+
</Button>
|
|
33
|
+
<Button variant="outline" minWidth={28} onClick={onCancel} {...cancelButtonProps}>
|
|
34
|
+
{cancelButtonLabel ? (
|
|
35
|
+
<FormattedMessage {...cancelButtonLabel} />
|
|
36
|
+
) : (
|
|
37
|
+
<FormattedMessage
|
|
38
|
+
id="form_action_buttons.button.cancel"
|
|
39
|
+
defaultMessage="Cancel"
|
|
40
|
+
/>
|
|
41
|
+
)}
|
|
42
|
+
</Button>
|
|
43
|
+
</Stack>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
FormActionButtons.propTypes = {
|
|
48
|
+
saveButtonProps: PropTypes.object,
|
|
49
|
+
cancelButtonProps: PropTypes.object,
|
|
50
|
+
saveButtonLabel: MESSAGE_PROPTYPE,
|
|
51
|
+
cancelButtonLabel: MESSAGE_PROPTYPE,
|
|
52
|
+
onCancel: PropTypes.func
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default FormActionButtons
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {Stack} from '@chakra-ui/react'
|
|
10
|
+
import useLoginFields from '@salesforce/retail-react-app/app/components/forms/useLoginFields'
|
|
11
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
12
|
+
|
|
13
|
+
const LoginFields = ({form, prefix = ''}) => {
|
|
14
|
+
const fields = useLoginFields({form, prefix})
|
|
15
|
+
return (
|
|
16
|
+
<Stack spacing={5}>
|
|
17
|
+
<Field {...fields.email} />
|
|
18
|
+
<Field {...fields.password} />
|
|
19
|
+
</Stack>
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
LoginFields.propTypes = {
|
|
24
|
+
/** Object returned from `useForm` */
|
|
25
|
+
form: PropTypes.object.isRequired,
|
|
26
|
+
|
|
27
|
+
/** Optional prefix for field names */
|
|
28
|
+
prefix: PropTypes.string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default LoginFields
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {FormattedMessage} from 'react-intl'
|
|
10
|
+
import {Flex, Text, Stack} from '@chakra-ui/react'
|
|
11
|
+
import {CheckCircleIcon} from '@salesforce/retail-react-app/app/components/icons'
|
|
12
|
+
import {validatePassword} from '@salesforce/retail-react-app/app/utils/password-utils'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* UI component for styling password requirement line
|
|
16
|
+
*/
|
|
17
|
+
const PasswordRequirement = ({isValid, children}) => {
|
|
18
|
+
const iconStyles = {
|
|
19
|
+
display: 'block',
|
|
20
|
+
ml: isValid ? '-2px' : '-1px',
|
|
21
|
+
mr: isValid ? '9px' : '10px',
|
|
22
|
+
boxSize: isValid ? 4 : '14px',
|
|
23
|
+
color: isValid ? 'green.500' : 'white',
|
|
24
|
+
border: !isValid ? '1px solid' : 'none',
|
|
25
|
+
borderColor: 'gray.200',
|
|
26
|
+
borderRadius: 'full'
|
|
27
|
+
}
|
|
28
|
+
return (
|
|
29
|
+
<Flex align="center">
|
|
30
|
+
<CheckCircleIcon {...iconStyles} />
|
|
31
|
+
<Text fontSize="sm" lineHeight={4}>
|
|
32
|
+
{children}
|
|
33
|
+
</Text>
|
|
34
|
+
</Flex>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
PasswordRequirement.propTypes = {
|
|
39
|
+
/** Should it render in valid state */
|
|
40
|
+
isValid: PropTypes.bool,
|
|
41
|
+
|
|
42
|
+
/** The requirement text */
|
|
43
|
+
children: PropTypes.any
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Renders a list of password requirments. Each requirement line toggles to its `isValid`
|
|
48
|
+
* state when the given password value meets the associated critieria.
|
|
49
|
+
*/
|
|
50
|
+
const PasswordRequirements = ({value}) => {
|
|
51
|
+
const pwValidations = validatePassword(value)
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<Stack spacing={2}>
|
|
55
|
+
<PasswordRequirement isValid={pwValidations.hasMinChars}>
|
|
56
|
+
<FormattedMessage
|
|
57
|
+
id="password_requirements.error.eight_letter_minimum"
|
|
58
|
+
defaultMessage="8 characters minimum"
|
|
59
|
+
description="Password requirement"
|
|
60
|
+
/>
|
|
61
|
+
</PasswordRequirement>
|
|
62
|
+
<PasswordRequirement isValid={pwValidations.hasUppercase}>
|
|
63
|
+
<FormattedMessage
|
|
64
|
+
id="password_requirements.error.one_uppercase_letter"
|
|
65
|
+
defaultMessage="1 uppercase letter"
|
|
66
|
+
description="Password requirement"
|
|
67
|
+
/>
|
|
68
|
+
</PasswordRequirement>
|
|
69
|
+
<PasswordRequirement isValid={pwValidations.hasLowercase}>
|
|
70
|
+
<FormattedMessage
|
|
71
|
+
id="password_requirements.error.one_lowercase_letter"
|
|
72
|
+
defaultMessage="1 lowercase letter"
|
|
73
|
+
description="Password requirement"
|
|
74
|
+
/>
|
|
75
|
+
</PasswordRequirement>
|
|
76
|
+
<PasswordRequirement isValid={pwValidations.hasNumber}>
|
|
77
|
+
<FormattedMessage
|
|
78
|
+
defaultMessage="1 number"
|
|
79
|
+
description="Password requirement"
|
|
80
|
+
id="password_requirements.error.one_number"
|
|
81
|
+
/>
|
|
82
|
+
</PasswordRequirement>
|
|
83
|
+
<PasswordRequirement isValid={pwValidations.hasSpecialChar}>
|
|
84
|
+
<FormattedMessage
|
|
85
|
+
id="password_requirements.error.one_special_character"
|
|
86
|
+
defaultMessage="1 special character (example: , S ! % #)"
|
|
87
|
+
description="Password requirement"
|
|
88
|
+
/>
|
|
89
|
+
</PasswordRequirement>
|
|
90
|
+
</Stack>
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
PasswordRequirements.propTypes = {
|
|
95
|
+
/** The password to check against */
|
|
96
|
+
value: PropTypes.string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export default PasswordRequirements
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {Stack, Box} from '@chakra-ui/react'
|
|
10
|
+
import useRegistrationFields from '@salesforce/retail-react-app/app/components/forms/useRegistrationFields'
|
|
11
|
+
import PasswordRequirements from '@salesforce/retail-react-app/app/components/forms/password-requirements'
|
|
12
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
13
|
+
|
|
14
|
+
const PostCheckoutRegistrationFields = ({form, prefix = ''}) => {
|
|
15
|
+
const fields = useRegistrationFields({form, prefix})
|
|
16
|
+
const password = form.watch(`${prefix}password`)
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<Box>
|
|
20
|
+
<Stack spacing={5}>
|
|
21
|
+
<Field {...fields.email} />
|
|
22
|
+
|
|
23
|
+
<Stack spacing={3} paddingBottom={2}>
|
|
24
|
+
<Field {...fields.password} />
|
|
25
|
+
<PasswordRequirements value={password} />
|
|
26
|
+
</Stack>
|
|
27
|
+
</Stack>
|
|
28
|
+
|
|
29
|
+
<Field {...fields.firstName} type="hidden" />
|
|
30
|
+
<Field {...fields.lastName} type="hidden" />
|
|
31
|
+
</Box>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
PostCheckoutRegistrationFields.propTypes = {
|
|
36
|
+
/** Object returned from `useForm` */
|
|
37
|
+
form: PropTypes.object.isRequired,
|
|
38
|
+
|
|
39
|
+
/** Optional prefix for field names */
|
|
40
|
+
prefix: PropTypes.string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default PostCheckoutRegistrationFields
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {SimpleGrid, Stack} from '@chakra-ui/react'
|
|
10
|
+
import useProfileFields from '@salesforce/retail-react-app/app/components/forms/useProfileFields'
|
|
11
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
12
|
+
|
|
13
|
+
const ProfileFields = ({form, prefix = ''}) => {
|
|
14
|
+
const fields = useProfileFields({form, prefix})
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<Stack spacing={5}>
|
|
18
|
+
<SimpleGrid columns={[1, 1, 1, 2]} spacing={5}>
|
|
19
|
+
<Field {...fields.firstName} />
|
|
20
|
+
<Field {...fields.lastName} />
|
|
21
|
+
</SimpleGrid>
|
|
22
|
+
<Field {...fields.email} />
|
|
23
|
+
<Field {...fields.phone} />
|
|
24
|
+
</Stack>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
ProfileFields.propTypes = {
|
|
29
|
+
/** Object returned from `useForm` */
|
|
30
|
+
form: PropTypes.object.isRequired,
|
|
31
|
+
|
|
32
|
+
/** Optional prefix for field names */
|
|
33
|
+
prefix: PropTypes.string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default ProfileFields
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {FormattedMessage} from 'react-intl'
|
|
10
|
+
import {Box, Button} from '@chakra-ui/react'
|
|
11
|
+
import usePromoCodeFields from '@salesforce/retail-react-app/app/components/forms/usePromoCodeFields'
|
|
12
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
13
|
+
|
|
14
|
+
const PromoCodeFields = ({form, prefix = '', ...props}) => {
|
|
15
|
+
const fields = usePromoCodeFields({form, prefix})
|
|
16
|
+
|
|
17
|
+
const code = form.watch('code')
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<Box {...props}>
|
|
21
|
+
<Field inputProps={{flex: 1, mr: 2}} {...fields.code}>
|
|
22
|
+
<Button
|
|
23
|
+
type="submit"
|
|
24
|
+
fontSize="sm"
|
|
25
|
+
isLoading={form.formState.isSubmitting}
|
|
26
|
+
disabled={code?.length < 3}
|
|
27
|
+
>
|
|
28
|
+
<FormattedMessage defaultMessage="Apply" id="promo_code_fields.button.apply" />
|
|
29
|
+
</Button>
|
|
30
|
+
</Field>
|
|
31
|
+
</Box>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
PromoCodeFields.propTypes = {
|
|
36
|
+
/** Object returned from `useForm` */
|
|
37
|
+
form: PropTypes.object.isRequired,
|
|
38
|
+
|
|
39
|
+
/** Optional prefix for field names */
|
|
40
|
+
prefix: PropTypes.string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default PromoCodeFields
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {Stack} from '@chakra-ui/react'
|
|
10
|
+
import useRegistrationFields from '@salesforce/retail-react-app/app/components/forms/useRegistrationFields'
|
|
11
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
12
|
+
import PasswordRequirements from '@salesforce/retail-react-app/app/components/forms/password-requirements'
|
|
13
|
+
|
|
14
|
+
const RegistrationFields = ({form, prefix = ''}) => {
|
|
15
|
+
const fields = useRegistrationFields({form, prefix})
|
|
16
|
+
const password = form.watch('password')
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<Stack spacing={5}>
|
|
20
|
+
<Field {...fields.firstName} />
|
|
21
|
+
<Field {...fields.lastName} />
|
|
22
|
+
<Field {...fields.email} />
|
|
23
|
+
|
|
24
|
+
<Stack spacing={3} pb={2}>
|
|
25
|
+
<Field {...fields.password} />
|
|
26
|
+
<PasswordRequirements value={password} />
|
|
27
|
+
</Stack>
|
|
28
|
+
|
|
29
|
+
<Field {...fields.acceptsMarketing} inputProps={{alignItems: 'flex-start'}} />
|
|
30
|
+
</Stack>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
RegistrationFields.propTypes = {
|
|
35
|
+
/** Object returned from `useForm` */
|
|
36
|
+
form: PropTypes.object.isRequired,
|
|
37
|
+
|
|
38
|
+
/** Optional prefix for field names */
|
|
39
|
+
prefix: PropTypes.string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default RegistrationFields
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {Box} from '@chakra-ui/react'
|
|
10
|
+
import useResetPasswordFields from '@salesforce/retail-react-app/app/components/forms/useResetPasswordFields'
|
|
11
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
12
|
+
|
|
13
|
+
const ResetPasswordFields = ({form, prefix = ''}) => {
|
|
14
|
+
const fields = useResetPasswordFields({form, prefix})
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<Box>
|
|
18
|
+
<Field {...fields.email} />
|
|
19
|
+
</Box>
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
ResetPasswordFields.propTypes = {
|
|
24
|
+
/** Object returned from `useForm` */
|
|
25
|
+
form: PropTypes.object.isRequired,
|
|
26
|
+
|
|
27
|
+
/** Optional prefix for field names */
|
|
28
|
+
prefix: PropTypes.string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default ResetPasswordFields
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
export const stateOptions = [
|
|
8
|
+
{value: 'AL', label: 'Alabama'},
|
|
9
|
+
{value: 'AK', label: 'Alaska'},
|
|
10
|
+
{value: 'AZ', label: 'Arizona'},
|
|
11
|
+
{value: 'AR', label: 'Arkansas'},
|
|
12
|
+
{value: 'CA', label: 'California'},
|
|
13
|
+
{value: 'CO', label: 'Colorado'},
|
|
14
|
+
{value: 'CT', label: 'Connecticut'},
|
|
15
|
+
{value: 'DE', label: 'Delaware'},
|
|
16
|
+
{value: 'DC', label: 'District Of Columbia'},
|
|
17
|
+
{value: 'FL', label: 'Florida'},
|
|
18
|
+
{value: 'GA', label: 'Georgia'},
|
|
19
|
+
{value: 'HI', label: 'Hawaii'},
|
|
20
|
+
{value: 'ID', label: 'Idaho'},
|
|
21
|
+
{value: 'IL', label: 'Illinois'},
|
|
22
|
+
{value: 'IN', label: 'Indiana'},
|
|
23
|
+
{value: 'IA', label: 'Iowa'},
|
|
24
|
+
{value: 'KS', label: 'Kansas'},
|
|
25
|
+
{value: 'KY', label: 'Kentucky'},
|
|
26
|
+
{value: 'LA', label: 'Louisiana'},
|
|
27
|
+
{value: 'ME', label: 'Maine'},
|
|
28
|
+
{value: 'MD', label: 'Maryland'},
|
|
29
|
+
{value: 'MA', label: 'Massachusetts'},
|
|
30
|
+
{value: 'MI', label: 'Michigan'},
|
|
31
|
+
{value: 'MN', label: 'Minnesota'},
|
|
32
|
+
{value: 'MS', label: 'Mississippi'},
|
|
33
|
+
{value: 'MO', label: 'Missouri'},
|
|
34
|
+
{value: 'MT', label: 'Montana'},
|
|
35
|
+
{value: 'NE', label: 'Nebraska'},
|
|
36
|
+
{value: 'NV', label: 'Nevada'},
|
|
37
|
+
{value: 'NH', label: 'New Hampshire'},
|
|
38
|
+
{value: 'NJ', label: 'New Jersey'},
|
|
39
|
+
{value: 'NM', label: 'New Mexico'},
|
|
40
|
+
{value: 'NY', label: 'New York'},
|
|
41
|
+
{value: 'NC', label: 'North Carolina'},
|
|
42
|
+
{value: 'ND', label: 'North Dakota'},
|
|
43
|
+
{value: 'OH', label: 'Ohio'},
|
|
44
|
+
{value: 'OK', label: 'Oklahoma'},
|
|
45
|
+
{value: 'OR', label: 'Oregon'},
|
|
46
|
+
{value: 'PA', label: 'Pennsylvania'},
|
|
47
|
+
{value: 'RI', label: 'Rhode Island'},
|
|
48
|
+
{value: 'SC', label: 'South Carolina'},
|
|
49
|
+
{value: 'SD', label: 'South Dakota'},
|
|
50
|
+
{value: 'TN', label: 'Tennessee'},
|
|
51
|
+
{value: 'TX', label: 'Texas'},
|
|
52
|
+
{value: 'UT', label: 'Utah'},
|
|
53
|
+
{value: 'VT', label: 'Vermont'},
|
|
54
|
+
{value: 'VA', label: 'Virginia'},
|
|
55
|
+
{value: 'WA', label: 'Washington'},
|
|
56
|
+
{value: 'WV', label: 'West Virginia'},
|
|
57
|
+
{value: 'WI', label: 'Wisconsin'},
|
|
58
|
+
{value: 'WY', label: 'Wyoming'}
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
export const provinceOptions = [
|
|
62
|
+
{value: 'AB', label: 'Alberta'},
|
|
63
|
+
{value: 'BC', label: 'British Columbia'},
|
|
64
|
+
{value: 'MB', label: 'Manitoba'},
|
|
65
|
+
{value: 'NB', label: 'New Brunswick'},
|
|
66
|
+
{value: 'NL', label: 'Newfoundland and Labrador'},
|
|
67
|
+
{value: 'NS', label: 'Nova Scotia'},
|
|
68
|
+
{value: 'ON', label: 'Ontario'},
|
|
69
|
+
{value: 'PE', label: 'Prince Edward Island'},
|
|
70
|
+
{value: 'QC', label: 'Quebec'},
|
|
71
|
+
{value: 'SK', label: 'Saskatchewan'},
|
|
72
|
+
{value: 'NT', label: 'Northwest Territories'},
|
|
73
|
+
{value: 'NU', label: 'Nunavut'},
|
|
74
|
+
{value: 'YT', label: 'Yukon'}
|
|
75
|
+
]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import {FormattedMessage} from 'react-intl'
|
|
10
|
+
import {Box, Button, Stack, StackDivider} from '@chakra-ui/react'
|
|
11
|
+
import useUpdatePasswordFields from '@salesforce/retail-react-app/app/components/forms/useUpdatePasswordFields'
|
|
12
|
+
import Field from '@salesforce/retail-react-app/app/components/field'
|
|
13
|
+
import PasswordRequirements from '@salesforce/retail-react-app/app/components/forms/password-requirements'
|
|
14
|
+
|
|
15
|
+
const UpdatePasswordFields = ({form, prefix = ''}) => {
|
|
16
|
+
const fields = useUpdatePasswordFields({form, prefix})
|
|
17
|
+
const password = form.watch('password')
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<Stack spacing={5} divider={<StackDivider borderColor="gray.100" />}>
|
|
21
|
+
<Stack>
|
|
22
|
+
<Field {...fields.currentPassword} />
|
|
23
|
+
<Box>
|
|
24
|
+
<Button variant="link" size="sm" onClick={() => null}>
|
|
25
|
+
<FormattedMessage
|
|
26
|
+
defaultMessage="Forgot Password?"
|
|
27
|
+
id="update_password_fields.button.forgot_password"
|
|
28
|
+
/>
|
|
29
|
+
</Button>
|
|
30
|
+
</Box>
|
|
31
|
+
</Stack>
|
|
32
|
+
|
|
33
|
+
<Stack spacing={3} pb={2}>
|
|
34
|
+
<Field {...fields.password} />
|
|
35
|
+
<PasswordRequirements value={password} />
|
|
36
|
+
</Stack>
|
|
37
|
+
</Stack>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
UpdatePasswordFields.propTypes = {
|
|
42
|
+
/** Object returned from `useForm` */
|
|
43
|
+
form: PropTypes.object.isRequired,
|
|
44
|
+
|
|
45
|
+
/** Optional prefix for field names */
|
|
46
|
+
prefix: PropTypes.string
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export default UpdatePasswordFields
|