ldc-wenn-dann-mit-respekt/resources/views/bo/modules/minicrud-form-inputs.blade.php

301 lines
16 KiB
PHP

{{-- MINI CRUD EDIT WHEN JSON IS TRANSLATABLE --}}
@php
$data = (isset($model->data)) ? $model->getEmptyData() : $conceptData;
@endphp
@foreach ($data as $k => $input)
@php
$input = json_decode(json_encode($input), true);
@endphp
@switch(intval($input['inputType']))
@case(intval(App\Enums\InputType::video->value))
@case(intval(App\Enums\InputType::videoVimeo->value))
@case(intval(App\Enums\InputType::videoYoutube->value))
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row">
<div class="col-12 mb-3">
@include('bo.partials.inputs.varchar', [
'id' => Str::slug($input['label']),
'label' => $input['label'],
'hasWordCounter' => true,
'name' => 'data['.$k.'][value]',
'value' => old("data.{$k}.value", $model->data[$k]['value'] ?? null),
'required' => isset($input['required']) ? !empty($input['required']) : true,
'model' => $model ?? null,
'helper' => match(intval($input['inputType'])) {
intval(App\Enums\InputType::videoYoutube->value) => __('video id eg: keZURbOo4-M'),
intval(App\Enums\InputType::videoVimeo->value) => __('video id eg: 74918975'),
intval(App\Enums\InputType::video->value) => __('video id eg: keZURbOo4-M or 74918975'),
}
])
@include('modules.input-error', [
'inputName' => "data.{$k}.value"
])
</div>
</div>
</fieldset>
</div>
@break
@case(intval(App\Enums\InputType::url->value))
@case(intval(App\Enums\InputType::string->value))
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row">
<div class="col-12 mb-3">
@include('bo.partials.inputs.varchar', [
'id' => Str::slug($input['label']),
'label' => $input['label'],
'hasWordCounter' => true,
'name' => 'data['.$k.'][value]',
'value' => old("data.{$k}.value", $model->data[$k]['value'] ?? null),
'required' => isset($input['required']) ? !empty($input['required']) : true,
'model' => $model ?? null,
'helper' => __('validation.between.string', [
'attribute' => $input['label'],
'min' => 3,
'max' => 255
])
])
@include('modules.input-error', [
'inputName' => "data.{$k}.value"
])
</div>
</div>
</fieldset>
</div>
@break
@case(intval(App\Enums\InputType::number->value))
<div class="row">
<div class="col">
<fieldset class="border p-3 mb-3">
<div class="d-flex flex-row justify-content-start align-items-center mb-2">
<legend class="w-auto m-0">
<label for="number{{$k}}" class="col-form-label">
<b>{{ $input['label'] }}</b>
</label>
</legend>
@if(!empty($input['tooltip']))
<span class="ms-1" data-bs-toggle="tooltip" data-bs-html="true" title="{{ $input['tooltip'] }}">
<i class="fa fa-question-circle"></i>
</span>
@endif
</div>
<div class="row mb-3">
<div class="form-group">
<input id="number{{$k}}" type="number" step="0.01" class="form-control"
aria-describedby="NumberHelp{{$k}}"
name="data[{{ $k }}][value]" placeholder="{{ $input['label'] }}"
value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}" @if(!isset($input['required']) or $input['required']) required @endif>
@include('back::modules.input-error', [
'inputName' => "data.{$k}.value",
'helperId' => "NumberHelp{$k}",
'helper' => $input['helper'] ?? '',
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(intval(App\Enums\InputType::text->value))
<div class="col-12 mb-3">
<fieldset class="border bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row mb-3">
<div class="col-12">
@include('bo.partials.inputs.text-html', [
'id' => Str::slug($input['label']),
'name' => "data[{$k}][value]",
'value' =>old("data.{$k}.value", $model->data[$k]['value'] ?? null),
'model' => $model ?? null,
'helper' => __('crud.minicrud.text_warning') . '. ' . __('validation.min.string', [
'attribute' => $input['label'],
'min' => 3
]),
])
@include('modules.input-error', [
'inputName' => "data.{$k}.value"
])
</div>
</div>
</fieldset>
</div>
@break
@case(intval(App\Enums\InputType::boolean->value))
<div class="col-12 col-md-6 mb-3">
<fieldset class="border bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row mb-3">
<div class="col-12">
<label class="col-form-label" for="{{ Str::slug($input['label']) }}"><b>{{ __('crud.minicrud.visibility_label') }}</b></label>
<div class="form-check form-switch ms-2">
<input
id="{{ Str::slug($input['label']) }}"
aria-describedby="{{ Str::slug($input['label']) }}Help"
name="data[{{ $k }}][value]"
type="checkbox"
class="ml-2 form-check-input"
value="1"
@if(old("data.{$k}.value", (old('_token') ? false : ($model->data[$k]['value'] ?? null ?? false)))) checked @endif>
</div>
@include('modules.input-error', [
'inputName' => "data.{$k}.value", 'helperId' => Str::slug($input['label']). 'Help' , 'helper' => __('crud.minicrud.visibility_helper')
])
</div>
</div>
</fieldset>
</div>
@break
@case(intval(App\Enums\InputType::image->value))
<div class="col-12 mb-3">
<fieldset class="border h-100 bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row">
{{-- PICTURE_ALT --}}
<div class="col-12 col-md-6 mb-3">
@include('bo.partials.inputs.varchar', [
'id' => Str::slug($input['label']) . '-alt',
'label' => __('crud.minicrud.picture_alt_label'),
'hasWordCounter' => true,
'name' => 'data['.$k.'][alt]',
'value' => old("data.{$k}.alt", $model->data[$k]['alt'] ?? null),
'required' => true,
'model' => $model ?? null,
'helper' => __('crud.minicrud.picture_alt_helper') . '. ' . __('validation.min.string', [
'attribute' => __('crud.minicrud.picture_alt_label'),
'min' => 3
]),
])
@include('modules.input-error', [
'inputName' => "data.{$k}.alt"
])
</div>
{{-- PICTURE_TITLE --}}
<div class="col-12 col-md-6 mb-3">
@include('bo.partials.inputs.varchar', [
'id' => Str::slug($input['label']) . '-title',
'label' => __('crud.minicrud.picture_title_label'),
'hasWordCounter' => true,
'name' => 'data['.$k.'][title]',
'value' => old("data.{$k}.title", $model->data[$k]['title'] ?? null),
'required' => true,
'model' => $model ?? null,
'helper' => __('crud.minicrud.picture_title_helper') . '. ' . __('validation.min.string', [
'attribute' => __('crud.minicrud.picture_title_label'),
'min' => 3
]),
])
@include('modules.input-error', [
'inputName' => "data.{$k}.title"
])
</div>
{{-- PICTURE --}}
<div class="col-12 mb-3">
@include('bo.partials.inputs.varchar-picture', [
'id' => Str::slug($input['label']),
'name' => "data[{$k}][value]",
'width' => $input['dimensions']['width'],
'height' => $input['dimensions']['height'],
'model' => $model ?? null,
'value' => old("data.{$k}.value", $model->data[$k]['value'] ?? null),
'helper' => __('crud.minicrud.dimensions_must_be', [
'width' => $input['dimensions']['width'],
'height' => $input['dimensions']['height'],
]),
'required' => true,
'preview' => true,
])
@include('modules.input-error', [
'inputName' => "data.{$k}.value"
])
</div>
</div>
</fieldset>
</div>
@break
@case(App\Enums\InputType::email->value)
<div class="row">
<div class="col">
<fieldset class="border p-3 mb-3">
<div class="d-flex flex-row justify-content-start align-items-center mb-2">
<legend class="w-auto m-0">
<label for="title{{$k}}" class="col-form-label">
<b>{{ $input['label'] }}</b>
</label>
</legend>
@if(!empty($input['tooltip']))
<span class="ms-1" data-bs-toggle="tooltip" data-bs-html="true" title="{{ $input['tooltip'] }}">
<i class="fa fa-question-circle"></i>
</span>
@endif
</div>
<div class="row mb-3">
<div class="form-group">
<input id="title{{$k}}" type="email" class="form-control" name="data[{{$k}}][value]"
placeholder="{{ $input['label'] }}" value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}" @if(!isset($input['required']) or $input['required']) required @endif>
@include('modules.input-error', [
'inputName' => "data.{$k}.value",
'helperId' => "{$k}StringHelp",
'helper' => $input['helper'] ?? '',
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(intval(App\Enums\InputType::imageArray->value))
@case(intval(App\Enums\InputType::labelArray->value))
@case(intval(App\Enums\InputType::selectEnum->value))
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3">
<legend>{{ $input['label'] }} *</legend>
<div class="row">
<div class="col-12 mb-3">
@include('bo.partials.inputs.tinyint-enum', [
'id' => Str::slug($input["label"]),
'label' => __('crud.minicrud.associated_enum', ['enum' => $input['label']]),
'name' => "data[{$k}][value]",
'model' => $model ?? null,
'value' => old("data.{$k}.value", $model->data[$k]['value'] ?? null),
'required' => true,
'associatedModels' => $selectedEnum ?? [],
'helper' => __('crud.minicrud.enum_select', ['enum' => $input['label']]),
])
@include('modules.input-error', [
'inputName' => "data.{$k}.value"
])
</div>
</div>
</fieldset>
</div>
@break
@default
@php throw new Exception('Input type not handled'); @endphp
@endswitch
@endforeach
@push('scripts')
<script nonce="{{ $nonce }}">
document.addEventListener('DOMContentLoaded', function() {
let minicrud = document.getElementById('minicrud').closest('form');
if (minicrud) {
minicrud.addEventListener('submit', function(e) {
document.querySelectorAll('input[type="file"]').forEach(function(input) {
if (input.dataset['old-value'] && !input.value) {
input.setAttribute('type', 'text');
input.value = input.getAttribute('old-value');
}
});
});
}
});
</script>
@endpush