Skip to content

Commit

Permalink
Started implementing support for disabling form inputs
Browse files Browse the repository at this point in the history
  • Loading branch information
dtvmedia committed Mar 14, 2024
1 parent 84176c5 commit 7178ae0
Show file tree
Hide file tree
Showing 27 changed files with 100 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/Livewire/FormView.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
use Nodus\Packages\LivewireForms\Services\FormBuilder\FormInput;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsArrayValidations;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsValidations;
use Throwable;

Expand Down Expand Up @@ -814,6 +815,9 @@ protected function prepareInputs(): void

$inputTraits = class_uses($input);

// TODO
// - extra addRuleForInput($input) method?
// - check if input supports disabling, is disabled and only add rules if not
if (in_array(SupportsValidations::class, $inputTraits)) {
/** @var SupportsValidations|FormInput $input */
$this->rules[$input->getViewId()] = $input->rewriteValidationRules($model);
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Checkbox.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsLabelPosition;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -20,6 +21,7 @@ class Checkbox extends FormInput
use SupportsValidations;
use SupportsHint;
use SupportsLabelPosition;
use SupportsDisabling;

/**
* Checkbox constructor
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Code.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsValidations;
Expand All @@ -18,6 +19,7 @@ class Code extends FormInput
use SupportsValidations;
use SupportsSize;
use SupportsHint;
use SupportsDisabling;

/**
* Syntax Highlight mode
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Color.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsValidations;
Expand All @@ -18,4 +19,5 @@ class Color extends FormInput
use SupportsValidations;
use SupportsSize;
use SupportsHint;
use SupportsDisabling;
}
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Date.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Support\Carbon;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsMinMax;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
Expand All @@ -24,6 +25,7 @@ class Date extends FormInput
use SupportsHint;
use SupportsPlaceholder;
use SupportsMinMax;
use SupportsDisabling;

/**
* Date constructor.
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/DateTime.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Support\Carbon;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsValidations;
Expand All @@ -19,6 +20,7 @@ class DateTime extends FormInput
use SupportsValidations;
use SupportsSize;
use SupportsHint;
use SupportsDisabling;

/**
* Pre validation mutator handler
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Decimal.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Nodus\Packages\LivewireForms\Services\FormBuilder\Support\Currency;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Support\InputMode;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsInputMode;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
Expand All @@ -25,6 +26,7 @@ class Decimal extends FormInput
use SupportsHint;
use SupportsPlaceholder;
use SupportsInputMode;
use SupportsDisabling;

/**
* Number of decimals to be shown of the decimal value
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Livewire\TemporaryUploadedFile;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsArrayValidations;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsMultiple;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -21,6 +22,7 @@ class File extends FormInput
use SupportsArrayValidations;
use SupportsSize;
use SupportsHint;
use SupportsDisabling;

/**
* Accepted file formats
Expand Down
10 changes: 9 additions & 1 deletion src/Services/FormBuilder/FormInput.php
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,15 @@ public function getErrorKeys(): array
*/
public static function supports(string $feature): bool
{
$traits = collect(class_uses(static::class))
$checkClasses = array_values(class_parents(static::class));
$checkClasses[] = static::class;

$traits = [];
foreach ($checkClasses as $class) {
$traits = array_merge($traits, class_uses($class));
}

$traits = collect($traits)
->map(fn ($value) => Str::of($value)
->classBasename()
->lower()
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Number.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsMinMax;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
Expand All @@ -22,4 +23,5 @@ class Number extends FormInput
use SupportsHint;
use SupportsPlaceholder;
use SupportsMinMax;
use SupportsDisabling;
}
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Password.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -20,6 +21,7 @@ class Password extends FormInput
use SupportsSize;
use SupportsHint;
use SupportsPlaceholder;
use SupportsDisabling;

/**
* Secure mode flag
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Radio.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsOptions;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -15,4 +16,5 @@ class Radio extends FormInput
use SupportsSize;
use SupportsHint;
use SupportsOptions;
use SupportsDisabling;
}
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/RichTextarea.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsValidations;
Expand All @@ -18,4 +19,5 @@ class RichTextarea extends FormInput
use SupportsValidations;
use SupportsSize;
use SupportsHint;
use SupportsDisabling;
}
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsMultiple;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsOptions;
Expand Down Expand Up @@ -38,6 +39,7 @@ class Select extends FormInput
}
use SupportsHint;
use SupportsTranslations;
use SupportsDisabling;
use SupportsOptions {
getOptions as parentGetOptions;
setOptions as parentSetOptions;
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Text.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsInputMode;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
Expand All @@ -22,4 +23,5 @@ class Text extends FormInput
use SupportsHint;
use SupportsPlaceholder;
use SupportsInputMode;
use SupportsDisabling;
}
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Textarea.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Nodus\Packages\LivewireForms\Services\FormBuilder;

use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsPlaceholder;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -20,6 +21,7 @@ class Textarea extends FormInput
use SupportsSize;
use SupportsHint;
use SupportsPlaceholder;
use SupportsDisabling;

/**
* Rows count
Expand Down
2 changes: 2 additions & 0 deletions src/Services/FormBuilder/Time.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Support\Carbon;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDefaultValue;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsDisabling;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsHint;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsMinMax;
use Nodus\Packages\LivewireForms\Services\FormBuilder\Traits\SupportsSize;
Expand All @@ -21,6 +22,7 @@ class Time extends FormInput
use SupportsSize;
use SupportsHint;
use SupportsMinMax;
use SupportsDisabling;

/**
* Post validation mutator handler
Expand Down
42 changes: 42 additions & 0 deletions src/Services/FormBuilder/Traits/SupportsDisabling.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace Nodus\Packages\LivewireForms\Services\FormBuilder\Traits;

/**
* Supports disabling form input trait
*
* @package Nodus\Packages\LivewireForms\Services\FormBuilder\Traits
*/
trait SupportsDisabling
{
/**
* Disabling flag
*
* @var bool
*/
protected bool $disabled = false;

/**
* Returns if the input is disabled
*
* @return bool
*/
public function isDisabled(): bool
{
return $this->disabled;
}

/**
* Sets the inputs disabled state
*
* @param bool $disabled
*
* @return $this
*/
public function setDisabled(bool $disabled = true): static
{
$this->disabled = $disabled;

return $this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
@if($input->getStep() !== null) step="{{ $input->getStep() }}" @endif
@endif
@if($input::supports('placeholder') && $input->hasPlaceholder()) placeholder="{{ $input->getPlaceholder() }}" @endif
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
@if($input::supports('inputMode') && $input->getInputMode() !== null) inputmode="{{ $input->getInputMode() }}" @endif
class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys())) is-invalid @endif"
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
name="{{ $input->getName() }}"
class="custom-control-input"
id="{{ $input->getId(true) }}"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}">
<label class="custom-control-label nodus-form-label-right" for="{{ $input->getId(true) }}">
@if($input->getLabelPosition() === \Nodus\Packages\LivewireForms\Services\FormBuilder\Support\LabelPosition::Right)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
<div class="input-group">
<input type="date"
name="{{ $input->getName() }}_date"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys())) is-invalid @endif"
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}.date">
<input type="time"
name="{{ $input->getName() }}_time"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys())) is-invalid @endif"
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}.time">
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys()
wire:model.lazy="{{ $input->getViewId() }}"
data-decimals="{{ $input->getDecimals() }}"
data-unit="{{ $input->getUnit() ?? '_NO_UNIT' }}"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
@if($input::supports('inputMode') && $input->getInputMode() !== null) inputmode="{{ $input->getInputMode() }}" @endif
>
@include('nodus.packages.livewire-forms::livewire.'.config('livewire-forms.theme').'.components.validation')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
@if($input->getMultiple()) multiple @endif
@if($input->getAcceptFormats() !== null) accept="{{ $input->getAcceptFormats() }}" @endif
@if($input::supports('placeholder') && $input->hasPlaceholder()) placeholder="{{ $input->getPlaceholder() }}" @endif
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys())) is-invalid @endif"
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}">
@include('nodus.packages.livewire-forms::livewire.'.config('livewire-forms.theme').'.components.validation')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
class="btn-check"
name="start"
value="{{$key}}"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
wire:model="{{ $input->getViewId() }}"
autocomplete="off" >
{{$option['label']}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class="form-control selectpicker @if(isset($errors) && $errors->hasAny($input->g
data-select-all-text="{{ $input->getSelectAllText() }}"
data-none-selected-text="{{ $input->getNoneSelectedText() }}"
data-none-results-text="{{ $input->getNoneResultsText() }}"
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
wire:model="{{ $input->getViewId() }}">
@foreach($input->getOptions() as $key => $option)
<option value="{{ $key }}" data-icon="{{ $option['icon'] }}">{{ $option['label'] }}</option>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<div class="nodus-form-control nodus-form-control-textarea" id="{{ $input->getId(true) }}_container" data-id="{{ $input->getId(true) }}">
<textarea name="{{ $input->getName() }}"
@if($input->hasPlaceholder()) placeholder="{{ $input->getPlaceholder() }}" @endif
@if($input::supports('disabling') && $input->isDisabled()) disabled @endif
@if($input->getRows() !== null) rows="{{ $input->getRows() }}" @endif
class="form-control @if(isset($errors) && $errors->hasAny($input->getErrorKeys())) is-invalid @endif"
wire:model.{{config('livewire-forms.update_mode')}}="{{ $input->getViewId() }}">
Expand Down
6 changes: 6 additions & 0 deletions tests/Unit/InputTests/DecimalInputTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,10 @@ public function testCurrencySubInput()

$this->assertSame(Currency::Euro, $input->getUnit());
}

public function testSupports()
{
$this->assertTrue(CurrencyInput::supports('disabling'));
$this->assertTrue(Decimal::supports('disabling'));
}
}

0 comments on commit 7178ae0

Please sign in to comment.