{{-- REPEATABLE FIELD TYPE --}} @php $field['value'] = old_empty_or_null($field['name'], []) ?? ($field['value'] ?? ($field['default'] ?? [])); // make sure the value is always an array, even if stored as JSON in database $field['value'] = is_string($field['value']) ? json_decode($field['value'], true) : $field['value']; if (!empty($field['value'])) { // when repeatable is used to create relations the value returned from those relations // would be collections, contrary to when saved as json in database and casted as array if (is_a($field['value'], \Illuminate\Support\Collection::class)) { $field['value'] = $field['value']->toArray(); } } $field['init_rows'] = $field['init_rows'] ?? ($field['min_rows'] ?? 0); $field['max_rows'] = $field['max_rows'] ?? 0; $field['min_rows'] = $field['min_rows'] ?? 0; $field['subfields'] = $field['subfields'] ?? ($field['fields'] ?? []); $field['reorder'] = $field['reorder'] ?? true; $field['wrapper']['class'] = isset($field['wrapper']['class']) ? $field['wrapper']['class'] . ' repeatable-group' : 'form-group col-sm-12 repeatable-group'; if ($field['reorder'] !== false) { switch (gettype($field['reorder'])) { case 'string': $field['subfields'] = Arr::prepend($field['subfields'], [ 'name' => $field['reorder'], 'type' => 'hidden', 'attributes' => [ 'data-reorder-input' => true, ], ]); usort($field['value'], fn($a, $b) => $a[$field['reorder']] <=> $b[$field['reorder']]); break; case 'array': $field['subfields'] = Arr::prepend($field['subfields'], $field['reorder']); usort($field['value'], fn($a, $b) => $a[$field['reorder']['name']] <=> $b[$field['reorder']['name']]); break; } } $subfieldNames = array_column( array_map(function ($item) { $item['name'] = square_brackets_to_dots(implode(',', (array) $item['name'])); return $item; }, $field['subfields']), 'name', ); @endphp @include('crud::fields.inc.wrapper_start') @if (isset($field['big_label'])) @else @if ($field['label']) @endif @endif @include('crud::fields.inc.translatable_icon')
@if (!empty($field['value'])) @foreach ($field['value'] as $key => $row) @include($crud->getFirstFieldView('inc.repeatable_row', $field['view_namespace']), [ 'repeatable_row_key' => $key, ]) @endforeach @php // the $row variable still exists. We don't need it anymore the loop is over, and would have impact in the following code. unset($row); @endphp @endif @foreach ($field['subfields'] as $subfield) @php $subfieldView = $crud->getFirstFieldView($subfield['type'], $subfield['view_namespace'] ?? false); foreach ((array) $subfield['name'] as $subfieldName) { if ($crud->isRequired($field['name'] . '.' . $subfieldName)) { $subfield['showAsterisk'] = $field['showAsterisk'] ?? true; } } if (isset($row)) { // Cast objects to array (could be a translation object, or a developer provided collection). if (is_object($row)) { $row = collect($row)->toArray(); } if (!is_array($subfield['name'])) { if (!Str::contains($subfield['name'], '.')) { // this is a fix for 4.1 repeatable names that when the field was multiple, saved the keys with `[]` in the end. Eg: `tags[]` instead of `tags` if (isset($row[$subfield['name']]) || isset($row[$subfield['name'] . '[]'])) { $subfield['value'] = $row[$subfield['name']] ?? $row[$subfield['name'] . '[]']; } $subfield['name'] = $field['name'] . '[' . $repeatable_row_key . '][' . $subfield['name'] . ']'; } else { $subfield['value'] = \Arr::get($row, $subfield['name']); $subfield['name'] = $field['name'] . '[' . $repeatable_row_key . '][' . Str::replace('.', '][', $subfield['name']) . ']'; } } else { foreach ($subfield['name'] as $k => $item) { $subfield['name'][$k] = $field['name'] . '[' . $repeatable_row_key . '][' . $item . ']'; $subfield['value'][$subfield['name'][$k]] = \Arr::get($row, $item); } } } else { // use an un-matchable field name to avoid field initialization problems // this would prevent the field from EVER get value in old() and triggering errors. if (!is_array($subfield['name'])) { $subfield['name'] = $field['name'] . '[-1][' . $subfield['name'] . ']'; } else { foreach ($subfield['name'] as $k => $subfieldName) { $subfield['name'][$k] = $field['name'] . '[-1][' . $subfieldName . ']'; } } } @endphp @include($subfieldView, ['field' => $subfield]) @endforeach
{{-- HINT --}} @if (isset($field['hint']))

{!! $field['hint'] !!}

@endif