view($view_id, $config)->render(); } /** * @param mixed[] $config */ public function view(int $view_id, array $config): AbstractView { $config = Config::normalize($config); $type = (string) ($config['type'] ?? Config::DEFAULT_TYPE); $classes = $this->classes(); $class = $classes[$type] ?? ListView::class; if (!is_string($class) || !class_exists($class) || !is_subclass_of($class, AbstractView::class)) { throw new InvalidArgumentException('View class must extend ' . AbstractView::class . '.'); } return new $class($view_id, $config); } /** * @return array> */ private function classes(): array { $classes = [ 'list' => ListView::class, 'grid' => GridView::class, 'full_calendar' => FullCalendarView::class, ]; return (array) apply_filters('DayTidy/F__DayTidy/Views__classes/classes', $classes); } }