1+ <?php
2+
3+ namespace Huozi \Admin \Filter ;
4+
5+ use Encore \Admin \Admin ;
6+ use Encore \Admin \Grid \Filter ;
7+ use Encore \Admin \Grid \Filter \AbstractFilter ;
8+
9+ class Row extends AbstractFilter
10+ {
11+
12+ /**
13+ * @var Filter
14+ */
15+ private $ filter ;
16+
17+ private $ callback ;
18+
19+ private $ values ;
20+
21+ /**
22+ * Where constructor.
23+ *
24+ * @param string $label
25+ * @param \Closure $query
26+ */
27+ public function __construct ($ label , \Closure $ callback )
28+ {
29+ $ this ->label = $ label ;
30+ $ this ->callback = $ callback ;
31+
32+ $ this ->setPresenter (new RowPresenter );
33+ }
34+
35+ public function setParent (Filter $ filter )
36+ {
37+ parent ::setParent ($ filter );
38+
39+ $ this ->filter = new Filter ((function () {
40+ return $ this ->model ;
41+ })->call ($ this ->parent ));
42+ $ this ->filter ->removeFilterByID ('id ' );
43+
44+ call_user_func ($ this ->callback , $ this ->filter );
45+ }
46+
47+ private function setupScript ()
48+ {
49+ Admin::style (<<<STYLE
50+ .group-row {
51+ display: flex;
52+ flex-wrap:wrap;
53+ }
54+ .group-row .form-group {
55+ flex: 1;
56+ margin-right: 6px;
57+ margin-bottom: 0;
58+ }
59+ .group-row .form-group label {
60+ display: none;
61+ }
62+ .group-row .form-group .col-sm-8 {
63+ width:100% !important;
64+ padding-right: 0 !important;
65+ }
66+ STYLE
67+ );
68+ }
69+
70+ public function condition ($ inputs )
71+ {
72+ $ this ->values = array_reduce ($ this ->filter ->filters (), function ($ values , $ filter ) use ($ inputs ) {
73+ if ($ condition = $ filter ->condition ($ inputs )) {
74+ foreach ($ condition as $ key => $ value ) {
75+ $ values [$ key ][] = $ value ;
76+ }
77+ }
78+ return $ values ;
79+ });
80+
81+ if (!$ this ->values ) {
82+ return ;
83+ }
84+
85+ return [
86+ 'where ' => [
87+ function ($ query ) {
88+ array_map (function ($ method , $ values ) use ($ query ) {
89+ foreach ($ values as $ value ) {
90+ call_user_func_array ([$ query , $ method ], $ value );
91+ }
92+ }, array_keys ($ this ->values ?? []), $ this ->values ?? []);
93+ }
94+ ]
95+ ];
96+ }
97+
98+ protected function variables ()
99+ {
100+ $ this ->id = 'distpicker-filter- ' . uniqid ();
101+
102+ $ this ->setupScript ();
103+ return array_merge ([
104+ 'id ' => $ this ->id ,
105+ 'name ' => $ this ->formatName ($ this ->label ),
106+ 'label ' => $ this ->label ,
107+ 'filters ' => $ this ->filter ->filters (),
108+ 'presenter ' => $ this ->presenter (),
109+ ], $ this ->presenter ()->variables ());
110+ }
111+
112+ /**
113+ * {@inheritdoc}
114+ */
115+ public function getColumn ()
116+ {
117+ $ columns = [];
118+
119+ $ parentName = $ this ->parent ->getName ();
120+
121+ foreach ($ this ->filter ->filters () as $ filter ) {
122+ $ column = $ filter ->getColumn ();
123+ $ columns [] = $ parentName ? "{$ parentName }_ {$ column }" : $ column ;
124+ }
125+
126+ return $ columns ;
127+ }
128+ }
0 commit comments