@props([ 'model', 'field', 'label' => null, 'value' => null, 'fkPreset' => null, 'required' => false, 'disabled' => false, ]) @php use App\Support\DynamicFieldPresenter; $modelName = is_object($model) ? class_basename($model) : class_basename((string) $model); $fieldMeta = is_object($model) && property_exists($model, 'meta') ? ($model->meta[$field] ?? []) : []; $presetKey = $fkPreset ?: ($fieldMeta['fk_preset'] ?? "{$modelName}.{$field}"); [$presetModel, $presetField] = array_pad(explode('.', (string) $presetKey, 2), 2, null); $preset = $presetModel && $presetField ? config("foreign_key_properties.{$presetModel}.{$presetField}", []) : []; $resource = $preset['resource'] ?? null; $lookupRoutes = [ 'funds' => 'lookups.funds', 'gps' => 'lookups.gps', 'investors' => 'lookups.investors', ]; $lookupUrl = $resource && isset($lookupRoutes[$resource]) && Route::has($lookupRoutes[$resource]) ? route($lookupRoutes[$resource]) : ($resource ? url('/api/v1/' . $resource . '/lookup') : null); $displayTemplate = $preset['display_template'] ?? '{name}'; $minChars = $preset['min_chars'] ?? 2; $limit = $preset['limit'] ?? 20; $label = $label ?? ($fieldMeta['display_name'] ?? str_replace('_', ' ', ucfirst($field))); $rawValue = $value ?? ''; $placeholder = $fieldMeta['placeholder'] ?? ('Search ' . strtolower($label) . '...'); $resourceModelClass = match ($resource) { 'funds' => \App\Models\Fund::class, 'gps' => \App\Models\Gp::class, 'investors' => \App\Models\Investor::class, default => null, }; $record = $resourceModelClass && $rawValue ? $resourceModelClass::query()->find($rawValue) : null; $displayValue = $record ? DynamicFieldPresenter::renderForeignTemplate($displayTemplate, (array) $record->toArray()) : ''; @endphp
@if ($disabled) @else
@endif @error($field)
{{ $message }}
@enderror