EmicoEcommerce/Magento2Tweakwise

View on GitHub
Block/LayeredNavigation/RenderLayered/SliderRenderer.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php
/**
 * Tweakwise (https://www.tweakwise.com/) - All Rights Reserved
 *
 * @copyright Copyright (c) 2017-2022 Tweakwise.com B.V. (https://www.tweakwise.com)
 * @license   http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

namespace Tweakwise\Magento2Tweakwise\Block\LayeredNavigation\RenderLayered;

use Tweakwise\Magento2Tweakwise\Model\Config;
use Tweakwise\Magento2Tweakwise\Model\NavigationConfig;
use Tweakwise\Magento2Tweakwise\Model\Seo\FilterHelper;
use Magento\Tax\Helper\Data as TaxHelper;
use Magento\Framework\Pricing\Helper\Data as PriceHelper;
use Magento\Framework\View\Element\Template;
use Magento\Framework\Serialize\Serializer\Json;
use Tweakwise\Magento2TweakwiseExport\Model\Helper;

class SliderRenderer extends DefaultRenderer
{
    /**
     * {@inheritDoc}
     */
    protected $_template = 'Tweakwise_Magento2Tweakwise::product/layered/slider.phtml';

    /**
     * @var PriceHelper
     */
    protected $priceHelper;

    /**
     * @var TaxHelper
     */
    protected $taxHelper;

    /**
     * SliderRenderer constructor.
     * @param PriceHelper $priceHelper
     * @param TaxHelper $taxHelper
     * @param Config $config
     * @param NavigationConfig $navigationConfig
     * @param FilterHelper $filterHelper
     * @param Template\Context $context
     * @param Json $jsonSerializer
     * @param Helper $helper
     * @param array $data
     */
    public function __construct(
        PriceHelper $priceHelper,
        TaxHelper $taxHelper,
        Config $config,
        NavigationConfig $navigationConfig,
        FilterHelper $filterHelper,
        Template\Context $context,
        Json $jsonSerializer,
        Helper $helper,
        array $data = []
    ) {
        parent::__construct(
            $context,
            $config,
            $navigationConfig,
            $filterHelper,
            $jsonSerializer,
            $helper,
            $data
        );
        $this->priceHelper = $priceHelper;
        $this->taxHelper = $taxHelper;
    }

    /**
     * @param int $index
     * @param int|float $default
     * @return int|float|string
     */
    protected function getItemValue($index, $default = 0)
    {
        $items = $this->getItems();
        if (!isset($items[$index])) {
            return $default;
        }

        return (float) $items[$index]->getLabel();
    }

    /**
     * @return int
     */
    public function getMinValue()
    {
        return floor($this->getItemValue(2, $this->getCurrentMinValue()));
    }

    /**
     * @return int
     */
    public function getMaxValue()
    {
        return ceil($this->getItemValue(3, $this->getCurrentMaxValue()));
    }

    /**
     * @return int
     */
    public function getCurrentMinValue()
    {
        return floor($this->getItemValue(0));
    }

    /**
     * @return int
     */
    public function getCurrentMaxValue()
    {
        return ceil($this->getItemValue(1, 99999));
    }

    /**
     * @param string $value
     * @return float|string
     */
    public function renderValue($value)
    {
        if (!$this->filter->getFacet()->getFacetSettings()->isPrice()) {
            return $value;
        }

        return $this->priceHelper->currency($value);
    }

    /**
     * @return string
     */
    public function getPriceFormatJson()
    {
        return $this->taxHelper->getPriceFormat();
    }

    /**
     * @return string
     */
    public function getFilterUrl()
    {
        $items = $this->getItems();
        if (!isset($items[0])) {
            return '#';
        }

        return $items[0]->getUrl();
    }

    /**
     * @return string
     */
    public function getJsSliderConfig(): string
    {
        return $this->navigationConfig->getJsSliderConfig($this);
    }

    /**
     * @return string
     */
    public function getCssId()
    {
        $anyItem = $this->getItems()[0];
        $urlKey = $anyItem->getFilter()
            ->getFacet()
            ->getFacetSettings()
            ->getUrlKey();

        return 'slider-' . $urlKey;
    }
}