Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
CollectionSearch
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
3 / 3
10
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 from
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
2
 fields
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
7
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Panel;
6
7final class CollectionSearch
8{
9    /** @param list<array{name: string, value: string}> $fields */
10    private function __construct(
11        public readonly string $value,
12        public readonly string $action,
13        public readonly array $fields,
14        public readonly ?string $clearUrl,
15    ) {}
16
17    public static function from(CollectionUrls $urls): self
18    {
19        $query = $urls->query;
20
21        return new self(
22            value: $query->q,
23            action: $urls->path(),
24            fields: self::fields($query),
25            clearUrl: $query->q === ''
26                ? null
27                : $urls->collection(['q' => '', 'offset' => '']),
28        );
29    }
30
31    /** @return list<array{name: string, value: string}> */
32    private static function fields(CollectionQuery $query): array
33    {
34        $fields = [];
35
36        if ($query->sort !== '') {
37            $fields[] = ['name' => 'sort', 'value' => $query->sort];
38        }
39
40        if ($query->dir !== '') {
41            $fields[] = ['name' => 'dir', 'value' => $query->dir];
42        }
43
44        if ($query->limit !== 50) {
45            $fields[] = ['name' => 'limit', 'value' => (string) $query->limit];
46        }
47
48        if ($query->parent !== null) {
49            $fields[] = ['name' => 'parent', 'value' => $query->parent];
50        }
51
52        if ($query->view !== $query->defaultView) {
53            $fields[] = ['name' => 'view', 'value' => $query->view];
54        }
55
56        if ($query->open !== []) {
57            $fields[] = ['name' => 'open', 'value' => implode(',', $query->open)];
58        }
59
60        return $fields;
61    }
62}