Skip to content

Commit

Permalink
CC-13275 Display numbers in Yves based on the current user locale. (#…
Browse files Browse the repository at this point in the history
…2084)

CC-13275: Display numbers in Yves based on the current user locale.
  • Loading branch information
romanhavrylko authored Nov 24, 2022
1 parent b412e5f commit 32071ee
Show file tree
Hide file tree
Showing 15 changed files with 260 additions and 36 deletions.
8 changes: 4 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"spryker-shop/product-configurator-gateway-page-extension": "^0.1.0 || ^0.2.0 || ^1.0.0",
"spryker-shop/product-group-widget-extension": "^1.0.0",
"spryker-shop/shop-application": "^1.0.0",
"spryker-shop/shop-ui": "^1.55.0",
"spryker-shop/shop-ui": "^1.63.0",
"spryker/application": "^3.0.0",
"spryker/availability-storage": "^1.0.0 || ^2.0.0",
"spryker/cart": "^5.9.0 || ^7.0.0",
Expand All @@ -21,7 +21,9 @@
"spryker/quote": "^2.8.0",
"spryker/symfony": "^3.1.0",
"spryker/transfer": "^3.27.0",
"spryker/twig": "^3.18.0",
"spryker/twig-extension": "^1.0.0",
"spryker/util-number": "^1.0.0",
"spryker/zed-request": "^3.6.0"
},
"require-dev": {
Expand All @@ -38,8 +40,7 @@
"spryker/event-dispatcher": "*",
"spryker/router": "*",
"spryker/silex": "*",
"spryker/testify": "*",
"spryker/twig": "*"
"spryker/testify": "*"
},
"suggest": {
"spryker-shop/configurable-bundle-widget": "Add the module if you want to use QuoteConfiguredBundleWidget.",
Expand All @@ -57,7 +58,6 @@
"spryker/router": "Use this module when using plugins that adds routes to the Route Module.",
"spryker/shipment": "If you want to use the shipment total price, min version 8.4.0",
"spryker/silex": "Use this module when using plugins that need Silex dependencies.",
"spryker/twig": "Use this module when using plugins that need Twig dependencies.",
"spryker-shop/asset-widget": "If you want to use components from module AssetWidget"
},
"autoload": {
Expand Down
3 changes: 2 additions & 1 deletion dependency.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"include": {
"spryker-shop/shop-ui": "ShopUi provides basic frontend infrastructure.",
"spryker/transfer": "Required for get*OrFail()."
"spryker/transfer": "Required for get*OrFail().",
"spryker/twig": "Provides `executeFilterIfExists` filter functionality."
}
}
13 changes: 13 additions & 0 deletions src/SprykerShop/Shared/CartPage/Transfer/cart_page.transfer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<property name="idProductAbstract" type="int"/>
<property name="groupKey" type="string"/>
<property name="configuredBundleItem" type="ConfiguredBundleItem"/>
<property name="maxQuantity" type="int"/>
</transfer>

<transfer name="ConfiguredBundleItem">
Expand Down Expand Up @@ -87,4 +88,16 @@
<property name="idDiscountPromotion" type="int"/>
</transfer>

<transfer name="NumberFormatIntRequest">
<property name="number" type="int"/>
<property name="numberFormatFilter" type="NumberFormatFilter"/>
</transfer>

<transfer name="NumberFormatFilter">
<property name="locale" type="string"/>
</transfer>

<transfer name="NumberFormatConfig">
</transfer>

</transfers>
21 changes: 21 additions & 0 deletions src/SprykerShop/Yves/CartPage/CartPageDependencyProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToProductStorageClientBridge;
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToQuoteClientBridge;
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToZedRequestClientBridge;
use SprykerShop\Yves\CartPage\Dependency\Service\CartPageToUtilNumberServiceBridge;
use SprykerShop\Yves\CartPage\Plugin\CartVariantAttributeMapperPlugin;

/**
Expand Down Expand Up @@ -67,6 +68,11 @@ class CartPageDependencyProvider extends AbstractBundleDependencyProvider
*/
public const CLIENT_ZED_REQUEST = 'CLIENT_ZED_REQUEST';

/**
* @var string
*/
public const SERVICE_UTIL_NUMBER = 'SERVICE_UTIL_NUMBER';

/**
* @uses \Spryker\Yves\Form\Plugin\Application\FormApplicationPlugin::SERVICE_FORM_CSRF_PROVIDER
*
Expand Down Expand Up @@ -128,6 +134,7 @@ public function provideDependencies(Container $container)
$container = $this->addRouter($container);
$container = $this->addLocale($container);
$container = $this->addRequestStack($container);
$container = $this->addUtilNumberService($container);
$container = $this->addAddToCartFormWidgetParameterExpanderPlugins($container);

return $container;
Expand Down Expand Up @@ -381,4 +388,18 @@ protected function getPreAddToCartPlugins(): array
{
return [];
}

/**
* @param \Spryker\Yves\Kernel\Container $container
*
* @return \Spryker\Yves\Kernel\Container
*/
protected function addUtilNumberService(Container $container): Container
{
$container->set(static::SERVICE_UTIL_NUMBER, function (Container $container) {
return new CartPageToUtilNumberServiceBridge($container->getLocator()->utilNumber()->service());
});

return $container;
}
}
9 changes: 9 additions & 0 deletions src/SprykerShop/Yves/CartPage/CartPageFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToProductStorageClientInterface;
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToQuoteClientInterface;
use SprykerShop\Yves\CartPage\Dependency\Client\CartPageToZedRequestClientInterface;
use SprykerShop\Yves\CartPage\Dependency\Service\CartPageToUtilNumberServiceInterface;
use SprykerShop\Yves\CartPage\Form\FormFactory;
use SprykerShop\Yves\CartPage\Handler\CartItemHandler;
use SprykerShop\Yves\CartPage\Mapper\CartItemsAttributeMapper;
Expand Down Expand Up @@ -244,6 +245,14 @@ public function getCsrfTokenManager(): CsrfTokenManagerInterface
return $this->getProvidedDependency(CartPageDependencyProvider::SERVICE_FORM_CSRF_PROVIDER);
}

/**
* @return \SprykerShop\Yves\CartPage\Dependency\Service\CartPageToUtilNumberServiceInterface
*/
public function getUtilNumberService(): CartPageToUtilNumberServiceInterface
{
return $this->getProvidedDependency(CartPageDependencyProvider::SERVICE_UTIL_NUMBER);
}

/**
* @return array<\SprykerShop\Yves\CartPageExtension\Dependency\Plugin\AddToCartFormWidgetParameterExpanderPluginInterface>
*/
Expand Down
28 changes: 28 additions & 0 deletions src/SprykerShop/Yves/CartPage/Controller/CartController.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

use Generated\Shared\Transfer\CartPageViewArgumentsTransfer;
use Generated\Shared\Transfer\ItemTransfer;
use Generated\Shared\Transfer\NumberFormatFilterTransfer;
use Generated\Shared\Transfer\NumberFormatIntRequestTransfer;
use Generated\Shared\Transfer\ProductOptionTransfer;
use Spryker\Yves\Kernel\PermissionAwareTrait;
use Spryker\Yves\Kernel\View\View;
Expand Down Expand Up @@ -97,6 +99,11 @@ class CartController extends AbstractController
*/
protected const GLOSSARY_KEY_ERROR_MESSAGE_UNEXPECTED_ERROR = 'cart_page.error_message.unexpected_error';

/**
* @var string
*/
protected const REQUEST_PARAMETER_QUANTITY_FORMATTED = 'quantityFormatted';

/**
* @param \Symfony\Component\HttpFoundation\Request $request
*
Expand Down Expand Up @@ -512,6 +519,7 @@ protected function executeAddAjaxAction(Request $request): array
static::KEY_CODE => Response::HTTP_OK,
static::KEY_MESSAGES => $this->renderView(static::FLASH_MESSAGE_LIST_TEMPLATE_PATH)->getContent(),
static::REQUEST_PARAMETER_QUANTITY => $cartQuantity,
static::REQUEST_PARAMETER_QUANTITY_FORMATTED => $this->getFormattedCartQuantity($cartQuantity),
];
}

Expand Down Expand Up @@ -678,4 +686,24 @@ protected function addSuccessMessages(array $messageTransfers): void
$this->addSuccessMessage($messageTransfer->getValue());
}
}

/**
* @param int $cartQuantity
*
* @return string
*/
protected function getFormattedCartQuantity(int $cartQuantity): string
{
$numberFormatIntRequestTransfer = (new NumberFormatIntRequestTransfer())
->setNumber($cartQuantity)
->setNumberFormatFilter(
(new NumberFormatFilterTransfer())->setLocale(
$this->getFactory()->getLocale(),
),
);

return $this->getFactory()
->getUtilNumberService()
->formatInt($numberFormatIntRequestTransfer);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace SprykerShop\Yves\CartPage\Dependency\Service;

use Generated\Shared\Transfer\NumberFormatConfigTransfer;
use Generated\Shared\Transfer\NumberFormatIntRequestTransfer;

class CartPageToUtilNumberServiceBridge implements CartPageToUtilNumberServiceInterface
{
/**
* @var \Spryker\Service\UtilNumber\UtilNumberServiceInterface
*/
protected $utilNumberService;

/**
* @param \Spryker\Service\UtilNumber\UtilNumberServiceInterface $utilNumberService
*/
public function __construct($utilNumberService)
{
$this->utilNumberService = $utilNumberService;
}

/**
* @param \Generated\Shared\Transfer\NumberFormatIntRequestTransfer $numberFormatIntRequestTransfer
*
* @return string
*/
public function formatInt(NumberFormatIntRequestTransfer $numberFormatIntRequestTransfer): string
{
return $this->utilNumberService->formatInt($numberFormatIntRequestTransfer);
}

/**
* @param string|null $locale
*
* @return \Generated\Shared\Transfer\NumberFormatConfigTransfer
*/
public function getNumberFormatConfig(?string $locale = null): NumberFormatConfigTransfer
{
return $this->utilNumberService->getNumberFormatConfig($locale);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace SprykerShop\Yves\CartPage\Dependency\Service;

use Generated\Shared\Transfer\NumberFormatConfigTransfer;
use Generated\Shared\Transfer\NumberFormatIntRequestTransfer;

interface CartPageToUtilNumberServiceInterface
{
/**
* @param \Generated\Shared\Transfer\NumberFormatIntRequestTransfer $numberFormatIntRequestTransfer
*
* @return string
*/
public function formatInt(NumberFormatIntRequestTransfer $numberFormatIntRequestTransfer): string;

/**
* @param string|null $locale
*
* @return \Generated\Shared\Transfer\NumberFormatConfigTransfer
*/
public function getNumberFormatConfig(?string $locale = null): NumberFormatConfigTransfer;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import register from 'ShopUi/app/registry';
export default register('product-cart-items-list', () =>
import(
/* webpackMode: "eager" */
'./cart-items-list'
),
export default register(
'product-cart-items-list',
() =>
import(
/* webpackMode: "eager" */
'./cart-items-list'
),
);
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,5 @@
} %}

{% block body %}
{% widget 'CartChangeQuantityFormWidget' args [data.cartItem, data.readOnly] only %}
{% block embeddedData %}
{% include molecule('quantity-input') with {
data: {
maxQuantity: data.cartItem.maxQuantity,
value: data.cartItem.quantity,
readOnly: data.readOnly
}
} only %}

<input type="hidden" value="{{ data.cartItem.groupKey }}" name="groupKey">
{% endblock %}
{% endwidget %}
{% widget 'CartChangeQuantityFormWidget' args [data.cartItem, data.readOnly] only %}{% endwidget %}
{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

{% block body %}
{% block cartQuantity %}
<h6 class="text-secondary float-right">{{ data.cartQuantity }} {{ 'item' | trans }}</h6>
<h6 class="text-secondary float-right">{{ data.cartQuantity | executeFilterIfExists('formatInt', app.locale) }} {{ 'item' | trans }}</h6>
<h6>{{ 'cart.your-order' | trans }}</h6>
<hr>
{% endblock %}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import register from 'ShopUi/app/registry';
export default register('cart-upselling', () =>
import(
/* webpackMode: "eager" */
'./cart-upselling'
),
export default register(
'cart-upselling',
() =>
import(
/* webpackMode: "eager" */
'./cart-upselling'
),
);
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
{% endwidget %}
{% else %}
{{ 'cart.item_quantity' | trans }}:
<strong>{{ data.product.quantity }}</strong>
<strong>{{ data.product.quantity | executeFilterIfExists('formatInt', app.locale) }}</strong>
{% endif %}
{% endif %}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,32 @@
form: _widget.cartChangeQuantityForm,
cartItem: _widget.cartItem,
readOnly: _widget.readOnly,
numberFormatConfig: _widget.numberFormatConfig,
} %}

{% set numberFormatConfig = {} %}
{% for key, value in data.numberFormatConfig %}
{% set numberFormatConfig = numberFormatConfig | merge ({ (key | replace({'_symbol': '', '_': '-'})): value }) %}
{% endfor %}

{% block body %}
{% set cartItem = data.cartItem %}

{{ form_start(data.form, {
'action': path('cart/change/quantity', {'sku': cartItem.sku }),
'name': 'cartChangeQuantityForm_' ~ cartItem.groupKey,
}) }}
{% block embeddedData %}{% endblock %}
{% block embeddedData %}
{% include molecule('quantity-input') with {
data: {
maxQuantity: cartItem.maxQuantity,
value: cartItem.quantity,
readOnly: data.readOnly,
numberFormatConfig: numberFormatConfig,
}
} only %}
<input type="hidden" value="{{ cartItem.groupKey }}" name="groupKey">
{% endblock %}
{{ form_row(data.form._token, {id: ''}) }}
{{ form_end(data.form) }}
{% endblock %}
Loading

0 comments on commit 32071ee

Please sign in to comment.