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

Revert BC breaking changes for PHP 5.5+ in ReactRenderer v4 #41

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
135 changes: 114 additions & 21 deletions src/Limenius/ReactRenderer/Twig/ReactRenderExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,13 @@ class ReactRenderExtension extends \Twig_Extension
private $buffer;
private $cache;

public function __construct(AbstractReactRenderer $renderer = null, ContextProviderInterface $contextProvider, string $defaultRendering, bool $trace = false)
/**
* @param AbstractReactRenderer $renderer
* @param ContextProviderInterface $contextProvider
* @param string $defaultRendering
* @param boolean $trace
*/
public function __construct(AbstractReactRenderer $renderer = null, ContextProviderInterface $contextProvider, $defaultRendering, $trace = false)
{
$this->renderer = $renderer;
$this->contextProvider = $contextProvider;
Expand All @@ -43,12 +49,18 @@ public function __construct(AbstractReactRenderer $renderer = null, ContextProvi
}
}

/**
* @param CacheItemPoolInterface $cache
*/
public function setCache(CacheItemPoolInterface $cache)
{
$this->cache = $cache;
}

public function getFunctions(): array
/**
* @return array
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('react_component', array($this, 'reactRenderComponent'), array('is_safe' => array('html'))),
Expand All @@ -58,7 +70,12 @@ public function getFunctions(): array
);
}

public function reactRenderComponentArray(string $componentName, array $options = array()): array
/**
* @param string $componentName
* @param array $options
* @return array
*/
public function reactRenderComponentArray($componentName, array $options = array())
{
$props = isset($options['props']) ? $options['props'] : array();
$propsArray = is_array($props) ? $props : $this->jsonDecode($props);
Expand Down Expand Up @@ -103,7 +120,12 @@ public function reactRenderComponentArray(string $componentName, array $options
return $evaluated;
}

public function reactRenderComponentArrayStatic(string $componentName, array $options = array()): string
/**
* @param string $componentName
* @param array $options
* @return string
*/
public function reactRenderComponentArrayStatic($componentName, array $options = array())
{
$renderer = $this->renderer;
$this->renderer = $this->staticRenderer;
Expand All @@ -114,7 +136,12 @@ public function reactRenderComponentArrayStatic(string $componentName, array $op
return $rendered;
}

public function reactRenderComponent(string $componentName, array $options = array()): string
/**
* @param string $componentName
* @param array $options
* @return string
*/
public function reactRenderComponent($componentName, array $options = array())
{
$props = isset($options['props']) ? $options['props'] : array();
$propsArray = is_array($props) ? $props : $this->jsonDecode($props);
Expand Down Expand Up @@ -152,7 +179,12 @@ public function reactRenderComponent(string $componentName, array $options = arr
return $str;
}

public function reactRenderComponentStatic(string $componentName, array $options = array()): string
/**
* @param string $componentName
* @param array $options
* @return string
*/
public function reactRenderComponentStatic($componentName, array $options = array())
{
$renderer = $this->renderer;
$this->renderer = $this->staticRenderer;
Expand All @@ -163,7 +195,12 @@ public function reactRenderComponentStatic(string $componentName, array $options
return $rendered;
}

public function reactReduxStore(string $storeName, $props): string
/**
* @param string $storeName
* @param array|string $props
* @return string
*/
public function reactReduxStore($storeName, $props)
{
$propsString = is_array($props) ? $this->jsonEncode($props) : $props;
$this->registeredStores[$storeName] = $propsString;
Expand All @@ -177,7 +214,10 @@ public function reactReduxStore(string $storeName, $props): string
return $this->renderContext().$reduxStoreTag;
}

public function reactFlushBuffer(): string
/**
* @return string
*/
public function reactFlushBuffer()
{
$str = '';

Expand All @@ -190,7 +230,11 @@ public function reactFlushBuffer(): string
return $str;
}

public function shouldRenderServerSide(array $options): bool
/**
* @param array $options
* @return boolean
*/
public function shouldRenderServerSide(array $options)
{
if (isset($options['rendering'])) {
if (in_array($options['rendering'], ['server_side', 'both'], true)) {
Expand All @@ -203,7 +247,11 @@ public function shouldRenderServerSide(array $options): bool
return $this->renderServerSide;
}

public function shouldRenderClientSide(array $options): string
/**
* @param array $options
* @return string
*/
public function shouldRenderClientSide(array $options)
{
if (isset($options['rendering'])) {
if (in_array($options['rendering'], ['client_side', 'both'], true)) {
Expand All @@ -216,17 +264,27 @@ public function shouldRenderClientSide(array $options): string
return $this->renderClientSide;
}

public function getName(): string
/**
* @return string
*/
public function getName()
{
return 'react_render_extension';
}

protected function shouldTrace(array $options): bool
/**
* @param array $options
* @return boolean
*/
protected function shouldTrace(array $options)
{
return isset($options['trace']) ? $options['trace'] : $this->trace;
}

private function renderContext(): string
/**
* @return string
*/
private function renderContext()
{
if ($this->needsToSetRailsContext) {
$this->needsToSetRailsContext = false;
Expand All @@ -240,7 +298,11 @@ private function renderContext(): string
return '';
}

private function jsonEncode($input): string
/**
* @param array $input
* @return string
*/
private function jsonEncode($input)
{
$json = json_encode($input);

Expand All @@ -256,7 +318,11 @@ private function jsonEncode($input): string
return $json;
}

private function jsonDecode($input): array
/**
* @param string $input
* @return array
*/
private function jsonDecode($input)
{
$json = json_decode($input);

Expand All @@ -272,7 +338,12 @@ private function jsonDecode($input): array
return $json;
}

private function serverSideRender(array $data, array $options): array
/**
* @param array $data
* @param array $options
* @return array
*/
private function serverSideRender(array $data, array $options)
{
if ($this->shouldCache($options)) {
return $this->renderCached($data, $options);
Expand All @@ -281,7 +352,11 @@ private function serverSideRender(array $data, array $options): array
}
}

private function doServerSideRender($data): array
/**
* @param array $data
* @return array
*/
private function doServerSideRender($data)
{
return $this->renderer->render(
$data['component_name'],
Expand All @@ -292,7 +367,12 @@ private function doServerSideRender($data): array
);
}

private function renderCached($data, $options): array
/**
* @param array|null $data
* @param array $options
* @return array
*/
private function renderCached($data, $options)
{
if ($this->cache === null) {
return $this->doServerSideRender($data);
Expand All @@ -311,17 +391,30 @@ private function renderCached($data, $options): array
return $rendered;
}

private function getCacheKey($options, $data): string
/**
* @param array $options
* @param array $data
* @return string
*/
private function getCacheKey($options, $data)
{
return isset($options['cache_key']) && $options['cache_key'] ? $options['cache_key'] : $data['component_name'].'.rendered';
}

private function shouldCache($options): bool
/**
* @param array $options
* @return boolean
*/
private function shouldCache($options)
{
return isset($options['cached']) && $options['cached'];
}

private function shouldBuffer($options): bool
/**
* @param array $options
* @return boolean
*/
private function shouldBuffer($options)
{
return isset($options['buffered']) && $options['buffered'];
}
Expand Down