'EventOverview Component', 'description' => 'No description provided yet...' ]; } public function onRun() { $this->addJs('assets/vendor/adrema-form/dist/main.js'); $this->settings = [ 'primary_color' => Settings::get('primary_color'), ...$this->resolvePageUrls(), ]; $this->event = $this->property('event'); } /** * @return array */ protected function resolvePageUrls(): array { $indexPage = $this->getPageFromProperty('indexPage'); $singlePage = $this->getPageFromProperty('singlePage'); $registerPage = $this->getPageFromProperty('registerPage'); throw_if(!str($singlePage->url)->contains(':slug'), ComponentException::class, 'slug_not_found'); throw_if(!str($registerPage->url)->contains(':slug'), ComponentException::class, 'slug_not_found'); return [ 'indexUrl' => $indexPage->url, 'singleUrl' => $singlePage->url, 'registerUrl' => $registerPage->url, ]; } protected function getPageFromProperty(string $property): Page { throw_if(!$this->property('indexPage') || !$this->property('singlePage') || !$this->property('registerPage'), ComponentException::class, 'not_all_pages_set'); $page = Page::find($this->property($property)); throw_if($page === null, ComponentException::class, 'page_not_found'); return $page; } public function defineProperties() { return [ 'indexPage' => [ 'title' => __('properties.index_page_title'), 'type' => 'dropdown', 'default' => null, ], 'singlePage' => [ 'title' => __('properties.single_page_title'), 'type' => 'dropdown', 'default' => null, ], 'registerPage' => [ 'title' => __('properties.register_page_title'), 'type' => 'dropdown', 'default' => null, ], 'event' => [ 'title' => __('properties.event_title'), 'type' => 'text', 'default' => null, ], ]; } public function getIndexPageOptions(): array { return $this->pageOptions(); } public function getSinglePageOptions(): array { return $this->pageOptions(); } public function getRegisterPageOptions(): array { return $this->pageOptions(); } private function pageOptions(): array { return Page::get() ->mapWithKeys(fn ($page) => [$page->fileName => $page->title]) ->toArray(); } }