['nullable', 'boolean'], 'tag' => ['nullable', 'string', 'max:50'], 'q' => ['nullable', 'string', 'max:200'], 'sort' => ['nullable', 'in:created_at,due_at'], 'order' => ['nullable', 'in:asc,desc'], 'page' => ['nullable', 'integer', 'min:1'], 'per_page' => ['nullable', 'integer', 'min:1', 'max:' . config('filters.pagination.max_per_page')], ]; } public function filters(): array { return [ 'is_done', 'tag', 'search', 'sort', ]; } public function values(): array { return [ 'is_done' => $this->filled('is_done') ? (bool)$this->input('is_done') : null, 'tag' => $this->input('tag'), 'search' => $this->input('q'), 'sort' => [ 'column' => $this->input('sort'), 'direction' => $this->input('order'), ], ]; } public function perPage(): ?int { return (int)$this->input('per_page'); //?? config('filters.pagination.per_page') } }