diff --git a/components/EventIndex.php b/components/EventIndex.php index f37aaf5..ea666f0 100644 --- a/components/EventIndex.php +++ b/components/EventIndex.php @@ -2,22 +2,8 @@ namespace Silva\Adrema\Components; -use Cms\Classes\ComponentBase; -use Cms\Classes\Page; -use Silva\Adrema\Exceptions\ComponentException; -use Silva\Adrema\Models\Settings; -use Silva\Adrema\Support\FetchAllEvents; -use Silva\Adrema\Support\FetchSingleEvent; - -class EventIndex extends ComponentBase +class EventIndex extends EventManager { - - public $settings; - - /** @var string The active event */ - public ?array $event; - public string $currentUrl; - public function componentDetails() { return [ @@ -28,97 +14,8 @@ class EventIndex extends ComponentBase public function onRun() { - // $this->addJs('assets/vendor/adrema-form/dist/main.js'); - $this->addJs('http://localhost:5174/src/main.js', ['type' => 'module']); - - $this->settings = [ - 'primary_color' => Settings::get('primary_color'), - ...$this->resolvePageUrls(), - ]; - - $eventSlug = $this->property('eventSlug'); - - if ($eventSlug) { - $this->event = app(FetchSingleEvent::class)->run($eventSlug); - $this->page->title = $this->event['name']; - $this->currentUrl = url()->current(); - } - } - - /** - * @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, - ], - 'eventSlug' => [ - 'title' => __('properties.event_slug_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(); + $this->addAssets(); + $this->loadSettings(); + $this->loadSingleEvent(); } } diff --git a/components/EventManager.php b/components/EventManager.php index 17ece16..6d15388 100644 --- a/components/EventManager.php +++ b/components/EventManager.php @@ -1,7 +1,121 @@ addJs('assets/vendor/adrema-form/dist/main.js'); + $this->addJs('http://localhost:5174/src/main.js', ['type' => 'module']); + } + + protected function loadSettings(): void + { + $this->settings = [ + 'primary_color' => Settings::get('primary_color'), + ...$this->resolvePageUrls(), + ]; + } + + protected function loadSingleEvent(): void + { + $eventSlug = $this->property('eventSlug'); + + if (!$eventSlug) { + return; + } + + $this->event = app(FetchSingleEvent::class)->run($eventSlug); + $this->page->title = $this->event['name']; + $this->currentUrl = url()->current(); + } + + 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, + ], + 'eventSlug' => [ + 'title' => __('properties.event_slug_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(); + } + + private 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; + } + + /** + * @return array + */ + private 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, + ]; + } } diff --git a/components/EventRegister.php b/components/EventRegister.php index 792daeb..1d76266 100644 --- a/components/EventRegister.php +++ b/components/EventRegister.php @@ -2,23 +2,8 @@ namespace Silva\Adrema\Components; -use Cms\Classes\ComponentBase; -use Cms\Classes\Page; -use Silva\Adrema\Exceptions\ComponentException; -use Silva\Adrema\Models\Settings; -use Silva\Adrema\Support\FetchAllEvents; -use Silva\Adrema\Support\FetchSingleEvent; - -class EventRegister extends ComponentBase +class EventRegister extends EventManager { - - public $settings; - - /** @var string The active event */ - public ?string $eventSlug; - public ?array $event; - public string $currentUrl; - public function componentDetails() { return [ @@ -29,96 +14,8 @@ class EventRegister extends ComponentBase public function onRun() { - // $this->addJs('assets/vendor/adrema-form/dist/main.js'); - $this->addJs('http://localhost:5174/src/main.js', ['type' => 'module']); - - $this->settings = [ - 'primary_color' => Settings::get('primary_color'), - ...$this->resolvePageUrls(), - ]; - $this->eventSlug = $this->property('eventSlug'); - - if ($this->eventSlug) { - $this->event = app(FetchSingleEvent::class)->run($this->eventSlug); - $this->page->title = $this->event['name']; - $this->currentUrl = url()->current(); - } - } - - /** - * @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, - ], - 'eventSlug' => [ - 'title' => __('properties.event_slug_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(); + $this->addAssets(); + $this->loadSettings(); + $this->loadSingleEvent(); } }