deferColumnManager(false) ->deferFilters(false) ->defaultGroup('date_from') ->groups([ Group::make('date_from') ->label('') ->date() ->getTitleFromRecordUsing(fn (Agenda $agenda): string => $agenda->date_from->format('l, d M Y')) ->getDescriptionFromRecordUsing(fn (Agenda $agenda): string => "Agendas that are due") ->collapsible() ]) ->groupingSettingsHidden() ->recordTitleAttribute('title') ->columns([ TextColumn::make('title') ->label('Title') ->searchable() ->toggleable(isToggledHiddenByDefault: false), TextColumn::make('time') ->label('Time') ->getStateUsing(function (Agenda $agenda): string { $dateFrom = $agenda->date_from; $dateTo = $agenda->date_to; $dateFromStr = $dateFrom->format('l, d M Y'); $timeFromStr = $dateFrom->format('H:i'); $dateToStr = $dateTo->format('l, d M Y'); $timeToStr = $dateTo->format('H:i'); if ($dateFrom->isSameDay($dateTo)) { return "From {$timeFromStr} - {$timeToStr}"; } return "{$dateFromStr} {$timeFromStr} - {$dateToStr} {$timeToStr}"; }) ->toggleable(isToggledHiddenByDefault: false), TextColumn::make('auditee') ->label('Auditee') ->searchable() ->getStateUsing(fn (Agenda $agenda): string => $agenda->processes ->pluck('auditee') ->implode(', ') ) ->toggleable(isToggledHiddenByDefault: false), ]) ->headerActions([ CreateAction::make() ->label('Add agenda item') ->modalHeading('Add agenda item') ->modalSubmitActionLabel('Save') ->disableCreateAnother() ->icon(Heroicon::OutlinedPlus) ->successNotification(fn (): Notification => Notification::make() ->title('Agenda item added') ->body('New agenda item has been succesfully added to the audit.') ->success() ), ]) ->filters([ Filter::make('date') ->schema([ DateTimePicker::make('date_from') ->label('From'), DateTimePicker::make('date_to') ->label('To'), ]) ->query(function (array $data, Builder $query): Builder { return $query ->when($data['date_from'], fn (Builder $q, $date): Builder => $q->whereDate('date_from', '>=', $date) ) ->when($data['date_to'], fn (Builder $q, $date): Builder => $q->whereDate('date_from', '<=', $date) ); }), ]) ->toolbarActions([ BulkActionGroup::make([ // ]), ]) ->emptyStateHeading('No agendas found.') ->emptyStateDescription('This audit doesn\'t have any agendas yet.') ->emptyStateIcon(Heroicon::OutlinedClipboardDocumentList); } }