columns(1) ->components([ TextInput::make('name') ->label('Name') ->required() ->maxLength(255), TextInput::make('description') ->label('Description') ->nullable() ->maxLength(255), Toggle::make('is_public') ->label('Is public?') ->required(), DateTimePicker::make('public_until') ->label('Public until') ->nullable(), Select::make('organization_id') ->label('Organization') ->relationship(name: 'organization', titleAttribute: 'name') ->searchable(['name']) ->disabled() ->required(), TextInput::make('share_secret') ->label('Share Secret') ->nullable(), PrettyJsonField::make('properties') ->formatStateUsing(function (ReportPropertiesDto $state, Report $record): string { return $record->getRawOriginal('properties'); }) ->disabled(), DateTimePicker::make('created_at') ->label('Created At') ->hiddenOn(['create']) ->disabled(), DateTimePicker::make('updated_at') ->label('Updated At') ->hiddenOn(['create']) ->disabled(), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('name') ->searchable() ->sortable(), TextColumn::make('description') ->searchable() ->sortable(), ToggleColumn::make('is_public') ->label('Is public?') ->sortable(), TextColumn::make('organization.name') ->searchable() ->sortable(), TextColumn::make('created_at') ->dateTime() ->sortable(), TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->defaultSort('created_at', 'desc') ->filters([ SelectFilter::make('organization') ->label('Organization') ->relationship('organization', 'name') ->searchable(), SelectFilter::make('organization_id') ->label('Organization ID') ->relationship('organization', 'id') ->searchable(), ]) ->recordActions([ Action::make('public-view') ->label('Public') ->icon('heroicon-o-eye') ->color('gray') ->hidden(fn (Report $record): bool => $record->getShareableLink() === null) ->url(fn (Report $record): string => $record->getShareableLink(), true), ViewAction::make(), EditAction::make(), DeleteAction::make(), ]) ->toolbarActions([ ]); } public static function getRelations(): array { return [ ]; } public static function getPages(): array { return [ 'index' => ListReports::route('/'), 'edit' => EditReport::route('/{record}/edit'), 'view' => ViewReport::route('/{record}'), ]; } }