Implemented a block editor for changing the layout of the page
This commit is contained in:
@@ -6,15 +6,31 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\SubscribePublicPageRequest;
|
||||
use App\Jobs\SyncSubscriberToMailwizz;
|
||||
use App\Models\PageBlock;
|
||||
use App\Models\PreregistrationPage;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class PublicPageController extends Controller
|
||||
{
|
||||
public function show(PreregistrationPage $publicPage): View
|
||||
{
|
||||
return view('public.page', ['page' => $publicPage]);
|
||||
$publicPage->load(['blocks' => fn ($q) => $q->orderBy('sort_order')]);
|
||||
|
||||
$pageState = $this->resolvePageState($publicPage);
|
||||
$blocksToRender = $this->filterBlocksForPageState($publicPage, $pageState);
|
||||
$subscriberCount = $publicPage->subscribers()->count();
|
||||
|
||||
$title = $publicPage->headlineForMeta();
|
||||
|
||||
return view('public.page', [
|
||||
'page' => $publicPage,
|
||||
'pageState' => $pageState,
|
||||
'blocksToRender' => $blocksToRender,
|
||||
'subscriberCount' => $subscriberCount,
|
||||
'title' => $title,
|
||||
]);
|
||||
}
|
||||
|
||||
public function subscribe(SubscribePublicPageRequest $request, PreregistrationPage $publicPage): JsonResponse
|
||||
@@ -45,4 +61,35 @@ class PublicPageController extends Controller
|
||||
'message' => $publicPage->thank_you_message ?? __('Thank you for registering!'),
|
||||
]);
|
||||
}
|
||||
|
||||
private function resolvePageState(PreregistrationPage $page): string
|
||||
{
|
||||
if ($page->isBeforeStart()) {
|
||||
return 'countdown';
|
||||
}
|
||||
|
||||
if ($page->isExpired()) {
|
||||
return 'expired';
|
||||
}
|
||||
|
||||
return 'active';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, PageBlock>
|
||||
*/
|
||||
private function filterBlocksForPageState(PreregistrationPage $page, string $pageState): Collection
|
||||
{
|
||||
return $page->visibleBlocks()
|
||||
->orderBy('sort_order')
|
||||
->get()
|
||||
->filter(function (PageBlock $block) use ($pageState): bool {
|
||||
return match ($pageState) {
|
||||
'countdown' => in_array($block->type, ['hero', 'countdown', 'image'], true),
|
||||
'expired' => in_array($block->type, ['hero', 'image', 'cta_banner'], true),
|
||||
default => true,
|
||||
};
|
||||
})
|
||||
->values();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user