From de2f8c8b2f37e80395fc9b9f74462622f2550769 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Tue, 15 Jun 2021 17:05:49 +0530 Subject: [PATCH] Completed Config Field Improvement --- .../dependent-field-type.blade.php | 125 +++ .../views/configuration/field-type.blade.php | 725 +++++++----------- .../src/Repositories/CoreConfigRepository.php | 36 +- .../Core/src/Traits/CoreConfigField.php | 81 ++ 4 files changed, 479 insertions(+), 488 deletions(-) create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/dependent-field-type.blade.php create mode 100644 packages/Webkul/Core/src/Traits/CoreConfigField.php diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/dependent-field-type.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/dependent-field-type.blade.php new file mode 100644 index 000000000..2e48f43c1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/dependent-field-type.blade.php @@ -0,0 +1,125 @@ +@php + $dependField = $coreConfigRepository->getDependentFieldOrValue($field); + $dependValue = $coreConfigRepository->getDependentFieldOrValue($field, 'value'); + + $dependNameKey = $item['key'] . '.' . $dependField; + $dependName = $coreConfigRepository->getNameField($dependNameKey); + + $field['options'] = $coreConfigRepository->getDependentFieldOptions($field, $value); + + $selectedOption = core()->getConfigData($nameKey, $channel, $locale) ?? ''; + $dependSelectedOption = core()->getConfigData($dependNameKey, $channel, $locale) ?? ''; +@endphp + +@if (strpos($field['validation'], 'required_if') !== false) + +@else + +@endif + +@push('scripts') + + + +@endpush \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php index 5b0599d10..1d7da27ef 100755 --- a/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php @@ -1,490 +1,307 @@ -getNameField($name); + $name = $coreConfigRepository->getNameField($nameKey); + + $value = $coreConfigRepository->getValueByRepository($field); $validations = $coreConfigRepository->getValidations($field); $channelLocaleInfo = $coreConfigRepository->getChannelLocaleInfo($field, $channel, $locale); +@endphp - if (isset($field['repository'])) { - $temp = explode("@", $field['repository']); - $class = app(current($temp)); - $method = end($temp); - $value = $class->$method(); - } +@if ($field['type'] == 'depends') - $key = $item['key']; - $key = explode(".", $key); - $firstField = current($key); - $secondField = next($key); - $thirdField = end($key); -?> + @include('admin::configuration.dependent-field-type') - @if ($field['type'] == 'depends') +@else +
- - $dependValue = end($depends); + {{ trans($field['title']) }} - if (isset($value) && $value) { - $i = 0; - foreach ($value as $key => $result) { - $data['title'] = $result; - $data['value'] = $key; - $options[$i] = $data; - $i++; - } - $field['options'] = $options; - } + {{ $channelLocaleInfo }} - if (! isset($field['options'])) { - $field['options'] = ''; - } - - $selectedOption = core()->getConfigData($name, $channel, $locale) ?? ''; - $dependSelectedOption = core()->getConfigData(implode('.', [$firstField, $secondField, $thirdField, $dependField]), $channel, $locale) ?? ''; - ?> - - @if (strpos($field['validation'], 'required_if') !== false) - - @else - - @endif - - @else - -
- - - - @if ($field['type'] == 'text') - - - - @elseif ($field['type'] == 'password') - - - - @elseif ($field['type'] == 'number') - - - - @elseif ($field['type'] == 'color') - - - - - @elseif ($field['type'] == 'textarea') - - - - @elseif ($field['type'] == 'select') - - - - @elseif ($field['type'] == 'multiselect') - - - - @elseif ($field['type'] == 'country') - - getConfigData($name, $channel, $locale) ?? ''; - ?> - - - - @elseif ($field['type'] == 'state') - - getConfigData($name, $channel, $locale) ?? ''; - ?> - - - - @elseif ($field['type'] == 'boolean') - - getConfigData($name, $channel, $locale) ?? (isset($field['default_value']) ? $field['default_value'] : ''); ?> - - - - @elseif ($field['type'] == 'image') - - getConfigData($name, $channel, $locale)); - $result = core()->getConfigData($name, $channel, $locale); - ?> - - @if ($result) - - - - @endif - - - - @if ($result) -
- - - - - {{ __('admin::app.configuration.delete') }} - -
- @endif - - @elseif ($field['type'] == 'file') - - getConfigData($name, $channel, $locale); - $src = explode("/", $result); - $path = end($src); - ?> - - @if ($result) - - - - @endif - - - - @if ($result) -
- - - - - {{ __('admin::app.configuration.delete') }} - -
- @endif - - @endif - - @if (isset($field['info'])) - {{ trans($field['info']) }} - @endif - - - @if ($field['type'] == 'multiselect') - @{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}][]') }} - @else - @{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}]') }} - @endif - - -
- - @endif - -@push('scripts') - - - - - - - - - - - - - - +@endif - - data: function() { - return { - isRequire: false, - isVisible: false, - savedValue: "", - } - }, + + + + + + @endif @endpush diff --git a/packages/Webkul/Core/src/Repositories/CoreConfigRepository.php b/packages/Webkul/Core/src/Repositories/CoreConfigRepository.php index 571612619..7037935de 100755 --- a/packages/Webkul/Core/src/Repositories/CoreConfigRepository.php +++ b/packages/Webkul/Core/src/Repositories/CoreConfigRepository.php @@ -5,11 +5,12 @@ namespace Webkul\Core\Repositories; use Webkul\Core\Eloquent\Repository; use Webkul\Core\Contracts\CoreConfig; use Illuminate\Support\Facades\Storage; +use Webkul\Core\Traits\CoreConfigField; use Prettus\Repository\Traits\CacheableRepository; class CoreConfigRepository extends Repository { - use CacheableRepository; + use CoreConfigField, CacheableRepository; /** * Specify model class name. @@ -166,37 +167,4 @@ class CoreConfigRepository extends Repository return $return; } - - public function getNameField($key) - { - $nameField = ''; - - foreach (explode('.', $key) as $key => $field) { - $nameField .= $key === 0 ? $field : '[' . $field . ']'; - } - - return $nameField; - } - - public function getValidations($field) - { - return isset($field['validation']) - ? $field['validation'] - : ''; - } - - public function getChannelLocaleInfo($field, $channel, $locale) - { - $info = []; - - if (isset($field['channel_based']) && $field['channel_based']) { - $info[] = $channel; - } - - if (isset($field['locale_based']) && $field['locale_based']) { - $info[] = $locale; - } - - return ! empty($info) ? '[' . implode(' - ', $info) . ']' : ''; - } } diff --git a/packages/Webkul/Core/src/Traits/CoreConfigField.php b/packages/Webkul/Core/src/Traits/CoreConfigField.php new file mode 100644 index 000000000..e13503a0e --- /dev/null +++ b/packages/Webkul/Core/src/Traits/CoreConfigField.php @@ -0,0 +1,81 @@ + $field) { + $nameField .= $key === 0 ? $field : '[' . $field . ']'; + } + + return $nameField; + } + + public function getValidations($field) + { + return isset($field['validation']) + ? $field['validation'] + : ''; + } + + public function getValueByRepository($field) + { + if (isset($field['repository'])) { + $temp = explode("@", $field['repository']); + $class = app(current($temp)); + $method = end($temp); + return $class->$method(); + } + + return null; + } + + public function getDependentFieldOrValue($field, $fieldOrValue = 'field') + { + $depends = explode(":", $field['depend']); + + return $fieldOrValue === 'field' + ? current($depends) : end($depends); + } + + public function getDependentFieldOptions($field, $dependentValues) + { + $fieldOptions = null; + + if ($dependentValues) { + $i = 0; + + foreach ($dependentValues as $key => $result) { + $data['title'] = $result; + $data['value'] = $key; + $options[$i] = $data; + $i++; + } + + $fieldOptions = $options; + } + + return ! isset($field['options']) + ? '' + : $fieldOptions; + } + + public function getChannelLocaleInfo($field, $channel, $locale) + { + $info = []; + + if (isset($field['channel_based']) && $field['channel_based']) { + $info[] = $channel; + } + + if (isset($field['locale_based']) && $field['locale_based']) { + $info[] = $locale; + } + + return ! empty($info) ? '[' . implode(' - ', $info) . ']' : ''; + } +} \ No newline at end of file