columns([ TextColumn::make('number') ->label(__('panel.issues.fields.number')) ->formatStateUsing(fn ($state) => "#{$state}") ->sortable() ->width('80px'), TextColumn::make('title') ->label(__('panel.issues.fields.title')) ->weight('medium') ->searchable() ->wrap() ->limit(60), TextColumn::make('repository.full_name') ->label(__('panel.issues.fields.repository')) ->searchable() ->sortable(), IconColumn::make('is_good_first_issue') ->label(__('panel.issues.fields.is_good_first_issue')) ->boolean() ->trueIcon('heroicon-o-check-circle') ->falseIcon('heroicon-o-x-circle'), IconColumn::make('is_help_wanted') ->label(__('panel.issues.fields.is_help_wanted')) ->boolean() ->trueIcon('heroicon-o-check-circle') ->falseIcon('heroicon-o-x-circle'), BadgeColumn::make('assignee') ->label(__('panel.issues.fields.assignee')) ->color(fn ($state) => $state ? 'success' : 'gray') ->formatStateUsing(fn ($state) => $state ?? __('panel.issues.fields.unassigned')), TextColumn::make('issue_created_at') ->label(__('panel.issues.fields.issue_created_at')) ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->actions([ EditAction::make(), DeleteAction::make(), ]) ->filters([ SelectFilter::make('repository_id') ->label(__('panel.issues.filters.repository')) ->relationship('repository', 'full_name'), Filter::make('is_good_first_issue') ->label(__('panel.issues.filters.good_first_issue')) ->toggle() ->query(fn (Builder $q) => $q->where('is_good_first_issue', true)), Filter::make('is_help_wanted') ->label(__('panel.issues.filters.help_wanted')) ->toggle() ->query(fn (Builder $q) => $q->where('is_help_wanted', true)), Filter::make('unclaimed') ->label(__('panel.issues.filters.unclaimed')) ->toggle() ->query(fn (Builder $q) => $q->whereNull('assignee')), Filter::make('claimed') ->label(__('panel.issues.filters.claimed')) ->toggle() ->query(fn (Builder $q) => $q->whereNotNull('assignee')), ]) ->defaultSort('issue_created_at', 'desc'); } }