@php $isRange = !empty($field['air-datepicker']['range']); if ($isRange) { [$startFieldName, $endFieldName] = is_array($field['name']) ? $field['name'] : explode(',', $field['name']); } else { $mainFieldName = $field['name']; } $sqlDateFormat = !empty($field['air-datepicker']['timepicker']) ? 'Y-m-d H:i:s' : 'Y-m-d'; if (!function_exists('formatAirDate')) { function formatAirDate($entry, $dateFieldName, $sqlDateFormat) { if (isset($entry) && !empty($entry->{$dateFieldName})) { $dateField = $entry->{$dateFieldName}; if ($dateField instanceof \Carbon\CarbonInterface) { return $dateField->format($sqlDateFormat); } return date($sqlDateFormat, strtotime($dateField)); } return null; } } if ($isRange) { $start_value = $end_value = $start_default = $end_default = null; if (isset($field['value'])) { if (isset($entry) && !is_array($field['value'])) { $start_value = formatAirDate($entry, $startFieldName, $sqlDateFormat); $end_value = formatAirDate($entry, $endFieldName, $sqlDateFormat); } elseif (is_array($field['value'])) { // Inside repeatable or when value is passed as array $start_value = current($field['value']); $end_value = next($field['value']); } } $start_default = $field['default'][0] ?? null; $end_default = $field['default'][1] ?? null; } else { if (isset($field['value']) && ($field['value'] instanceof \Carbon\CarbonInterface)) { $field['value'] = $field['value']->format($sqlDateFormat); } $field['value'] = old_empty_or_null($field['name'], '') ?? $field['value'] ?? $field['default'] ?? ''; } $airConfig = array_replace_recursive([ 'dateFormat' => 'yyyy-MM-dd', 'autoClose' => true, 'firstDay' => 0, 'buttons' => ['today', 'clear'], ], $field['air-datepicker'] ?? []); // When timepicker is enabled and no explicit timeFormat is set, default to HH:mm. if (!empty($airConfig['timepicker']) && empty($airConfig['timeFormat'])) { $airConfig['timeFormat'] = 'HH:mm'; } if (isset($airConfig['locale'])) { if (is_array($airConfig['locale'])) { $airDatepickerLocale = $airConfig['locale']; // Use the passed locale object directly } unset($airConfig['locale']); } else { $airDatepickerLocale = null; } if (!$airDatepickerLocale) { $localeFromTrans = trans('backpack::crud.date_time'); $airDatepickerLocale = [ 'days' => $localeFromTrans['days'] ?? ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 'daysShort' => $localeFromTrans['daysShort'] ?? ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], 'daysMin' => $localeFromTrans['daysMin'] ?? ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 'months' => $localeFromTrans['months'] ?? ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 'monthsShort' => $localeFromTrans['monthsShort'] ?? ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 'today' => trans('backpack::crud.today'), 'clear' => trans('backpack::crud.clear'), 'dateFormat' => $localeFromTrans['dateFormat'] ?? 'MM/dd/yyyy', 'timeFormat' => $localeFromTrans['timeFormat'] ?? 'hh:mm aa', 'firstDay' => $localeFromTrans['firstDay'] ?? ($airConfig['firstDay'] ?? 0), ]; } @endphp @include('crud::fields.inc.wrapper_start') {{-- Hidden inputs for form submission (SQL format) --}} @if ($isRange) @else @endif @include('crud::fields.inc.translatable_icon')
{!! $field['hint'] !!}
@endif @include('crud::fields.inc.wrapper_end') {{-- ########################################## --}} {{-- Extra CSS and JS for this particular field --}} {{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}} {{-- FIELD CSS --}} @push('crud_fields_styles') @basset('https://cdn.jsdelivr.net/npm/air-datepicker@3.6.0/air-datepicker.min.css') @bassetBlock('backpack/pro/fields/air-datepicker-field.css') @endBassetBlock @endpush {{-- FIELD JS --}} @push('crud_fields_scripts') @basset('https://cdn.jsdelivr.net/npm/air-datepicker@3.6.0/air-datepicker.min.js') @bassetBlock('backpack/pro/fields/air-datepicker-field.js') @endBassetBlock @endpush {{-- End of Extra CSS and JS --}}