Skip to content

Commit cb0aca7

Browse files
committed
feat:(LAR-165) add filter to thread
feat:(LAR-180) update paginate article feat:(LAR-165) add filter for popular topics fix:(LAR-165) fix phpstan error feat:(LAR-149) add no reply filter feat:(LAR-165) add filter to thread
1 parent f5b692c commit cb0aca7

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

app/Livewire/Pages/Articles/Index.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public function render(): View
3333
->published()
3434
->notPinned()
3535
->forLocale($this->locale)
36-
->simplePaginate(5),
36+
->simplePaginate(21),
37+
3738
'tags' => Tag::query()->whereHas('articles', function ($query): void {
3839
$query->published();
3940
})->orderBy('name')->get(),

app/Livewire/Pages/Forum/Index.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ final class Index extends Component
3939
#[Url(as: 'follow')]
4040
public ?string $subscribe = null;
4141

42+
public bool $popular = true;
43+
44+
#[Url(as: 'popular')]
45+
public ?string $popular = null;
46+
4247
public ?Channel $currentChannel = null;
4348

4449
public string $search = '';
@@ -54,6 +59,18 @@ public function mount(): void
5459
$this->locale = config('app.locale');
5560
}
5661

62+
protected function applyPopular(Builder $query): Builder
63+
{
64+
if ($this->popular) {
65+
return $query // @phpstan-ignore-line
66+
->withCount('replies')
67+
->orderByDesc('replies_count')
68+
->OrderByViews();
69+
}
70+
71+
return $query;
72+
}
73+
5774
#[On('channelUpdated')]
5875
public function reloadThreads(?int $channelId): void
5976
{
@@ -140,13 +157,23 @@ protected function applySubscribe(Builder $query): Builder
140157

141158
protected function applyUnAnswer(Builder $query): Builder
142159
{
160+
if ($this->unAnswered) {
161+
return $query->whereDoesntHave('replies');
162+
}
163+
143164
return $query;
144165
}
145166

167+
protected function applySorting(Builder $query): Builder
168+
{
169+
return $this->popular
170+
? $this->applyPopular($query)
171+
: $query->orderByDesc('created_at');
172+
}
173+
146174
public function render(): View
147175
{
148-
$query = Thread::with(['channels', 'user'])
149-
->orderByDesc('created_at');
176+
$query = Thread::with(['channels', 'user']);
150177

151178
$query = $this->applyChannel($query);
152179
$query = $this->applySearch($query);
@@ -155,6 +182,7 @@ public function render(): View
155182
$query = $this->applyAuthor($query);
156183
$query = $this->applySubscribe($query);
157184
$query = $this->applyUnAnswer($query);
185+
$query = $this->applySorting($query);
158186

159187
$threads = $query
160188
->scopes('withViewsCount')
@@ -165,4 +193,11 @@ public function render(): View
165193
])
166194
->title(__('pages/forum.channel_title', ['channel' => isset($this->currentChannel) ? ' ~ '.$this->currentChannel->name : '']));
167195
}
196+
197+
private function applySorting(Builder $query): Builder
198+
{
199+
return $this->popular
200+
? $this->applyPopular($query)
201+
: $query->orderByDesc('created_at');
202+
}
168203
}

resources/views/layouts/forum.blade.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
:href="route('forum.index', ['popular' => true])"
4343
:active="request()->getUri() === route('forum.index', ['popular' => true])"
4444
icon="untitledui-heart"
45-
class="hidden"
4645
>
4746
{{ __('pages/forum.navigation.popular') }}
4847
</x-nav.forum-link>
@@ -64,7 +63,6 @@ class="hidden"
6463
:href="route('forum.index', ['no-replies' => true])"
6564
:active="request()->getUri() === route('forum.index', ['no-replies' => true])"
6665
icon="untitledui-message-x-square"
67-
class="hidden"
6866
>
6967
{{ __('pages/forum.navigation.no_reply') }}
7068
</x-nav.forum-link>

resources/views/livewire/pages/articles/index.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class="flex size-8 items-center justify-center rounded-full text-gray-400 transi
119119
@endforeach
120120
</div>
121121

122-
<div class="mt-4">
122+
<div class="mt-10">
123123
{{ $articles->links() }}
124124
</div>
125125
</x-container>

0 commit comments

Comments
 (0)