Skip to content

Commit

Permalink
Added HTML element and added in segments
Browse files Browse the repository at this point in the history
Segments allow you to partitan the process of groups of elements
  • Loading branch information
Luke Snowden committed Jan 31, 2019
1 parent 3539ee6 commit 2740346
Show file tree
Hide file tree
Showing 10 changed files with 222 additions and 12 deletions.
22 changes: 22 additions & 0 deletions app/Libs/BaseElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ abstract class BaseElement implements ElementBlueprint
*/
protected $messages = [];

/**
* @var string
*/
protected $segment = '';

/**
* @return string
*/
Expand Down Expand Up @@ -160,6 +165,23 @@ public function beforeValidation( Request $request )
//
}

/**
* @param $segment
* @return bool
*/
public function isFromSegment( $segment )
{
return $segment === $this->segment;
}

/**
* @return bool
*/
public function isNotAssignedToASegment()
{
return ! (boolean) $this->segment;
}

/**
* @return null|string
*/
Expand Down
22 changes: 22 additions & 0 deletions app/Libs/BaseLayout.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ abstract class BaseLayout implements LayoutBlueprint
*/
protected $region;

/**
* @var string
*/
protected $segment = '';

/**
* @param RegionBlueprint $region
*/
Expand Down Expand Up @@ -42,6 +47,23 @@ public function data( $dotNotationIndex = null )
return array_get( $data, $dotNotationIndex );
}

/**
* @param $segment
* @return bool
*/
public function isFromSegment( $segment )
{
return $segment === $this->segment;
}

/**
* @return bool
*/
public function isNotAssignedToASegment()
{
return ! (boolean) $this->segment;
}

/**
* @return void
*/
Expand Down
33 changes: 33 additions & 0 deletions app/Libs/BaseView.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,39 @@ public function elements()
return $elements;
}

/**
* @return array
*/
public function elementsNotAssignedToASegment()
{
$elements = [];
foreach( $this->regions as $region ) {
foreach( $region->getValueReliantObjects() as $element ) {
if( $element->isNotAssignedToASegment() ) {
$elements[] = $element;
}
}
}
return $elements;
}

/**
* @param $segment
* @return array
*/
public function elementsFromSegment( $segment )
{
$elements = [];
foreach( $this->regions as $region ) {
foreach( $region->getValueReliantObjects() as $element ) {
if( $element->isFromSegment( $segment ) ) {
$elements[] = $element;
}
}
}
return $elements;
}

/**
* @param array $data
*/
Expand Down
65 changes: 65 additions & 0 deletions app/Libs/Elements/Html.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace Laraview\Libs\Elements;

use Laraview\Console\Commands\LaraviewGenerateElement;
use Laraview\Libs\BaseElement;
use Laraview\Libs\Blueprints\ElementBlueprint;
use Laraview\Libs\Elements\Generate\InputGeneration;
use Laraview\Libs\Elements\Traits\Formats\HtmlBootstrap;

abstract class Html extends BaseElement implements ElementBlueprint
{

use HtmlBootstrap;

/**
* Label text
* @var string
*/
protected $label = '';

/**
* @return mixed
*/
public function render()
{
$this->preRender();
return $this->wrapper(
$this->label( $this->label, $this->attributes[ 'id' ] ) .
$this->element()
);
}

/**
* @return mixed|null|string
*/
public static function humanReadableName()
{
return 'HTML Element';
}

/**
* @param $region
* @param LaraviewGenerateElement $console
* @return mixed
*/
public static function generate( $region, LaraviewGenerateElement $console )
{
$generator = new InputGeneration( $region, $console );
$generator->setStubPath( __DIR__ . '/../../../stubs/elements/html.stub' );
return $generator->create();
}

/**
* @return mixed
*/
public function value() {}

/**
* @param $model
* @param $request
*/
public function receivePayload( $model, $request ) {}

}
17 changes: 17 additions & 0 deletions app/Libs/Elements/Traits/Formats/HtmlBootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Laraview\Libs\Elements\Traits\Formats;

trait HtmlBootstrap
{

/**
* @return void
*/
protected function preRender()
{
parent::preRender();
$this->attributes[ 'class' ] = trim( ( isset( $this->attributes[ 'class' ] ) ? $this->attributes[ 'class' ] : '' ) . ' form-control' );
}

}
2 changes: 1 addition & 1 deletion app/Libs/Layouts/Modal.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public static function generate( $region, LaraviewGenerateLayout $console )
*/
protected function renderElements()
{
$html = '';
$html = $this->method === 'POST' ? ' @csrf ' : '';
foreach( $this->elements as $element ) {
$html .= $element->render() . "\n";
}
Expand Down
25 changes: 16 additions & 9 deletions app/Libs/Register.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Laraview\Libs\Blueprints\RegisterBlueprint;
use Laraview\Libs\Elements\Checkbox;
use Laraview\Libs\Elements\File;
use Laraview\Libs\Elements\Html;
use Laraview\Libs\Elements\Number;
use Laraview\Libs\Elements\Time;
use Laraview\Libs\Elements\Date;
Expand Down Expand Up @@ -57,6 +58,7 @@ class Register implements RegisterBlueprint
Date::class,
Time::class,
File::class,
Html::class
];

/**
Expand Down Expand Up @@ -367,18 +369,21 @@ public function getViewByPath( $path )
* @param $viewClass
* @param $model
* @param $request
* @param null $segment
*/
public function dispatchPayload( $viewClass, $model, $request )
public function dispatchPayload( $viewClass, $model, $request, $segment = null )
{
$view = new $viewClass;
foreach( $view->elements() as $element ) {
if( method_exists( $element, 'active' ) ) {
if( ! $element->active() ) {
continue;
tap( (new $viewClass), function( BaseView $view ) use( $model, $request, $segment ) {
$elements = is_null( $segment ) ? $view->elementsNotAssignedToASegment() : $view->elementsFromSegment( $segment );
foreach( $elements as $element ) {
if( method_exists( $element, 'active' ) ) {
if( ! $element->active() ) {
continue;
}
}
$element->receivePayload( $model, $request );
}
$element->receivePayload( $model, $request );
}
});
}

/**
Expand All @@ -391,7 +396,9 @@ public function getValidation( $viewClass, $request )
$view = new $viewClass;
$rules = [];
$messages = [];
foreach( $view->elements() as $element ) {
$elements = $request->getSegment() ? $view->elementsFromSegment( $request->getSegment() ) : $view->elementsNotAssignedToASegment();

foreach( $elements as $element ) {
if( method_exists( $element, 'active' ) ) {
if( ! $element->active() ) {
continue;
Expand Down
13 changes: 13 additions & 0 deletions app/Libs/Request.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ abstract class Request extends FormRequest
*/
protected $view;

/**
* @var string
*/
protected $segment = '';

/**
* @var array
*/
Expand Down Expand Up @@ -65,4 +70,12 @@ public function messages()
return $this->validation[ 'messages' ];
}

/**
* @return string
*/
public function getSegment()
{
return $this->segment;
}

}
4 changes: 2 additions & 2 deletions app/Libs/Traits/Payload.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ trait Payload
* @param $view
* @param $event
*/
protected function dispatchPayload( $model, $request, $view, $event )
protected function dispatchPayload( $model, $request, $view, $event, $segment = null )
{
// send the data to all the elements
app( RegisterBlueprint::class )->dispatchPayload( $view, $model, $request );
app( RegisterBlueprint::class )->dispatchPayload( $view, $model, $request, $segment );

// notify application of saving
event( $this->getEventName( $event ), [ compact( 'model', 'request' ) ] );
Expand Down
31 changes: 31 additions & 0 deletions stubs/elements/html.stub
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace [NAMESPACE];

use Laraview\Libs\Blueprints\ElementBlueprint;
use Laraview\Libs\Elements\Html;

class [CLASS_NAME] extends Html implements ElementBlueprint
{

/**
* Name of input
* @var string
*/
protected $name = '[NAME]';

/**
* Label text
* @var string
*/
protected $label = '[LABEL]';

/**
* HTMl
*/
protected function element()
{
return '<p></p>';
}

}

0 comments on commit 2740346

Please sign in to comment.