components([ TextInput::make('name') ->required() ->maxLength(255), TextInput::make('collection_name') ->default('default') ->required() ->maxLength(255), Hidden::make('disk') ->default('public'), FileUpload::make('file') ->multiple() // workaround for Filament v4 single-file bug ->label('File') ->imageEditor() ->imageEditorAspectRatios([ '16:9', '4:3', '1:1', ]) ->columnSpanFull() ->disk('s3') ->directory('media') ->visibility('public') ->acceptedFileTypes(['image/*', 'application/pdf']) ->maxSize(10240) ->required(fn($context) => $context === 'create') ->afterStateHydrated(function (FileUpload $component, $state, $record): void { Log::info('MediaForm afterStateHydrated invoked', ['record_id' => $record?->id, 'state' => $state]); try { if (! $record) { return; } $media = $record; if (! $media instanceof SpatieMedia) { return; } // Construct the correct path: {media_id}/{filename} $path = $media->id . '/' . $media->file_name; try { $disk = $media->disk ?? 'public'; if (Storage::disk($disk)->exists($path)) { $component->state($path); } } catch (\Throwable $e) { Log::error('MediaForm afterStateHydrated storage check failed', [ 'err' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'disk' => $media->disk ?? null, 'path' => $path, ]); } } catch (\Throwable $e) { Log::error('MediaForm afterStateHydrated unhandled', [ 'err' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'record' => $record?->id, 'state' => $state, ]); throw $e; } }), ]); } }