Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/add pdp widget #516

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* For full license information, please view the LICENSE file that was distributed with this source code.
*/

namespace Pyz\Client\Price;
namespace Pyz\Client\PriceProductStorage;

use Spryker\Client\PersistentCart\Plugin\UpdatePersistentCartPriceModePlugin;
use Spryker\Client\Price\PriceDependencyProvider as SprykerPriceDependencyProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Pyz\Client\ProductDetailWidget\Dependency\Client;

use Generated\Shared\Transfer\ProductAbstractTransfer;

interface ProductDetailWidgetClientInterface
{
/**
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
*/
public function findProductAbstractBySku(string $sku): ?ProductAbstractTransfer;
}
19 changes: 19 additions & 0 deletions src/Pyz/Client/ProductDetailWidget/ProductDetailWidgetClient.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php
namespace Pyz\Client\ProductDetailWidget;

use Generated\Shared\Transfer\ProductAbstractTransfer;
use Pyz\Client\ProductDetailWidget\Dependency\Client\ProductDetailWidgetClientInterface;
use Spryker\Client\Kernel\AbstractClient;

class ProductDetailWidgetClient extends AbstractClient implements ProductDetailWidgetClientInterface
{
/**
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
*/
public function findProductAbstractBySku(string $sku): ?ProductAbstractTransfer
{
return $this->getFactory()->createZedStub()->findProductAbstractBySku($sku);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace Pyz\Client\ProductDetailWidget;

use Spryker\Client\Kernel\AbstractDependencyProvider;
use Spryker\Client\Kernel\Container;

class ProductDetailWidgetDependencyProvider extends AbstractDependencyProvider
{
/**
* @var string
*/
public const CLIENT_PRODUCT_DETAIL = 'CLIENT_PRODUCT_DETAIL';

public const SERVICE_ZED = 'SERVICE_ZED';

/**
* @param \Spryker\Client\Kernel\Container $container
*
* @return \Spryker\Client\Kernel\Container
*/
public function provideServiceLayerDependencies(Container $container): Container
{
$container = $this->addProductDetailClient($container);

return $container;
}

/**
* @param \Spryker\Client\Kernel\Container $container
*
* @return \Spryker\Client\Kernel\Container
*/
protected function addProductDetailClient(Container $container): Container
{
$container->set(static::CLIENT_PRODUCT_DETAIL, function (Container $container) {
return $container->getLocator()->productDetailWidget()->client();
});

return $container;
}
}
21 changes: 21 additions & 0 deletions src/Pyz/Client/ProductDetailWidget/ProductDetailWidgetFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
namespace Pyz\Client\ProductDetailWidget;

use Pyz\Client\ProductDetailWidget\Stub\ZedStub;
use Pyz\Yves\ProductDetailWidget\ProductDetailWidgetDependencyProvider;
use Spryker\Client\Kernel\AbstractFactory;

class ProductDetailWidgetFactory extends AbstractFactory
{
/**
*/
public function createZedStub(): ZedStub
{
return new ZedStub($this->getZedService());
}

public function getZedService()
{
return $this->getProvidedDependency(ProductDetailWidgetDependencyProvider::SERVICE_ZED);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Pyz\Client\ProductDetailWidget;

use Generated\Shared\Transfer\ProductAbstractTransfer;

interface ProductDetailWidgetServiceInterface
{
/**
* Fetches a product abstract by its ID.
*
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
*/
public function findProductAbstractBySku(string $sku): ?ProductAbstractTransfer;
}
52 changes: 52 additions & 0 deletions src/Pyz/Client/ProductDetailWidget/Stub/ZedStub.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?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 Pyz\Client\ProductDetailWidget\Stub;

use Generated\Shared\Transfer\ProductAbstractTransfer;
use Generated\Shared\Transfer\ProductDataTransfer;
use Generated\Shared\Transfer\ProductResponseTransfer;
use Spryker\Client\ZedRequest\ZedRequestClientInterface;

class ZedStub implements ZedStubInterface
{
/**
* @var \Spryker\Client\ZedRequest\ZedRequestClientInterface
*/
protected $zedRequestClient;

/**
* @param \Spryker\Client\ZedRequest\ZedRequestClientInterface $zedRequestClient
*/
public function __construct(ZedRequestClientInterface $zedRequestClient)
{
$this->zedRequestClient = $zedRequestClient;
}

/**
* @param string $sku
*
* @return ProductResponseTransfer
*/
/**
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductResponseTransfer
*/
public function findProductAbstractBySku(string $sku): ProductResponseTransfer
{
// Create a new Transfer object for the request
$productDataTransfer = new ProductAbstractTransfer();
$productDataTransfer->setSku($sku);

// Make the Zed request
/** @var \Generated\Shared\Transfer\ProductResponseTransfer $productResponseTransfer */
$productResponseTransfer = $this->zedRequestClient->call('/product-detail/gateway/get-product-detail', $productDataTransfer);

return $productResponseTransfer;
}
}
17 changes: 17 additions & 0 deletions src/Pyz/Client/ProductDetailWidget/Stub/ZedStubInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Pyz\Client\ProductDetailWidget\Stub;

use Generated\Shared\Transfer\ProductDataTransfer;
use Generated\Shared\Transfer\ProductResponseTransfer;

interface ZedStubInterface
{
/**
* @param string $sku
*
* @return ProductResponseTransfer
*/
public function findProductAbstractBySku(string $sku): ProductResponseTransfer;
}

13 changes: 13 additions & 0 deletions src/Pyz/Shared/Product/Transfer/product.transfer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,17 @@
<property name="storeName" type="string"/>
</transfer>

<transfer name="ProductAbstract">
<property name="idProductAbstract" type="int"/>
<property name="productAbstractSku" type="string"/>
<property name="createdAt" type="string"/> <!-- DateTime in string format -->
<property name="updatedAt" type="string"/> <!-- DateTime in string format -->
</transfer>

<transfer name="ProductResponse">
<property name="productAbstract" type="ProductAbstract"/>
<property name="isSuccess" type="bool"/>
<property name="message" type="string"/>
</transfer>

</transfers>
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
{% block contentClass %} page-layout-main {% endblock %}

{% block content %}
{% widget 'ProductDetailWidget' args [data.product.sku] only %}{% endwidget %}
<div class="container__inner">
<div class="grid">
<meta itemprop="name" content="{{ data.product.name }}">
Expand Down Expand Up @@ -84,6 +85,8 @@
{% widget 'SimilarProductsWidget' args [data.product] only %}{% endwidget %}

<div class="container__inner">


{% embed molecule('product-cms-block', 'CmsBlockWidget') ignore missing with {
data: {
idProductAbstract: data.product.idProductAbstract,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Pyz\Yves\ProductDetailWidget\Dependency\Client;

use Generated\Shared\Transfer\ProductAbstractTransfer;
use Pyz\Client\ProductDetailWidget\Dependency\Client\ProductDetailWidgetClientInterface;

class ProductDetailWidgetToProductDetailClientBridge implements ProductDetailWidgetToProductDetailClientInterface
{
/**
* @var ProductDetailWidgetClientInterface
*/
protected $productDetailWidgetClient;

/**
* @param ProductDetailWidgetClientInterface $productDetailWidgetClient
*/
public function __construct($productDetailWidgetClient)
{
$this->productDetailWidgetClient = $productDetailWidgetClient;
}

/**
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
*/
public function findProductAbstractBySku(string $sku): ?ProductAbstractTransfer
{
return $this->productDetailWidgetClient->findProductAbstractBySku($sku);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Pyz\Yves\ProductDetailWidget\Dependency\Client;

use Generated\Shared\Transfer\ProductAbstractTransfer;

interface ProductDetailWidgetToProductDetailClientInterface
{
/**
* Fetches the product abstract data by its ID.
*
* @param string $sku
*
* @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
*/
public function findProductAbstractBySku(string $sku): ?ProductAbstractTransfer;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

namespace Pyz\Yves\ProductDetailWidget;

use Pyz\Yves\ProductDetailWidget\Dependency\Client\ProductDetailWidgetToProductDetailClientBridge;
use Spryker\Yves\Kernel\AbstractBundleDependencyProvider;
use Spryker\Yves\Kernel\Container;

class ProductDetailWidgetDependencyProvider extends AbstractBundleDependencyProvider
{
public const CLIENT_PRODUCT_DETAIL = 'CLIENT_PRODUCT_DETAIL';
const SERVICE_ZED = "SERVICE_ZED";

/**
* @param \Spryker\Yves\Kernel\Container $container
*
* @return \Spryker\Yves\Kernel\Container
*/
public function provideDependencies(Container $container): Container
{
$container = $this->addServiceZed($container);

return $container;
}

/**
* @param \Spryker\Yves\Kernel\Container $container
*
* @return \Spryker\Yves\Kernel\Container
*/
protected function addProductDetailClient(Container $container): Container
{
$container->set(static::CLIENT_PRODUCT_DETAIL, function (Container $container) {
return $container->getLocator()->productDetailWidget()->client();
});

return $container;
}

/**
* @param \Spryker\Yves\Kernel\Container $container
*
* @return \Spryker\Yves\Kernel\Container
*/
protected function addServiceZed(Container $container): Container
{
$container[self::SERVICE_ZED] = function (Container $container) {
return $container->getLocator()->zedRequest()->client();
};

return $container;
}
}
27 changes: 27 additions & 0 deletions src/Pyz/Yves/ProductDetailWidget/ProductDetailWidgetFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Pyz\Yves\ProductDetailWidget;

use Pyz\Client\ProductDetailWidget\Dependency\Client\ProductDetailWidgetClientInterface;
use Spryker\Client\ZedRequest\ZedRequestClientInterface;
use Spryker\Yves\Kernel\AbstractFactory;

class ProductDetailWidgetFactory extends AbstractFactory
{
/**
* @return ProductDetailWidgetClientInterface
*/
public function getProductDetailClient(): ProductDetailWidgetClientInterface
{
return $this->getProvidedDependency(ProductDetailWidgetDependencyProvider::CLIENT_PRODUCT_DETAIL);
}

/**
* @return \Spryker\Client\ZedRequest\ZedRequestClientInterface
*/
public function getZedClient(): ZedRequestClientInterface
{
return $this->getProvidedDependency(ProductDetailWidgetDependencyProvider::SERVICE_ZED);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{% extends template('widget') %}

{% define data = {
createdAt: _widget.productAbstract.getCreatedAt,
updatedAt: _widget.productAbstract.getUpdatedAt
} %}

{% block body %}
<div class="product-details">
<p>Created At: {{ data.createdAt|date('Y-m-d H:i:s') }}</p>
<p>Updated At: {{ data.updatedAt|date('Y-m-d H:i:s') }}</p>
</div>
{% endblock %}
Loading
Loading