88use Illuminate \Support \{Arr , Carbon , Collection , Str };
99use Livewire \Attributes \On ;
1010use PowerComponents \LivewirePowerGrid \Column ;
11+ use PowerComponents \LivewirePowerGrid \Components \Filters \FilterBase ;
1112
1213trait Filter
1314{
@@ -28,6 +29,95 @@ public function emitClearFiltersEvent(bool $emit): void
2829 $ this ->emitClearFiltersEvent = $ emit ;
2930 }
3031
32+ protected function applyDefaultFilters (): void
33+ {
34+ $ columnsByField = collect ($ this ->columns )
35+ ->mapWithKeys (fn (Column $ column ) => [
36+ filled ($ column ->field ) ? $ column ->field : $ column ->dataField => $ column ,
37+ ]);
38+
39+ collect ($ this ->filters ())
40+ ->filter (fn ($ filter ) => filled ($ filter ->defaultValue ))
41+ ->each (function (FilterBase $ filter ) use (&$ defaultFiltersApplied , $ columnsByField ) {
42+ $ field = $ filter ->field ;
43+ $ column = $ filter ->column ;
44+
45+ /** @var string $key */
46+ $ key = data_get ($ filter , 'key ' );
47+ $ defaultValue = $ filter ->defaultValue ;
48+
49+ $ columnData = $ columnsByField ->get ($ column );
50+ $ label = data_get ($ columnData , 'title ' , $ field );
51+
52+ switch ($ key ) {
53+ case 'select ' :
54+ data_set ($ this ->filters , "select. {$ field }" , $ defaultValue );
55+ $ this ->addEnabledFilters ($ field , $ label );
56+ $ defaultFiltersApplied = true ;
57+ break ;
58+
59+ case 'multi_select ' :
60+ $ values = is_array ($ defaultValue ) ? $ defaultValue : [$ defaultValue ];
61+ data_set ($ this ->filters , "multi_select. {$ field }" , $ values );
62+ $ this ->addEnabledFilters ($ field , $ label );
63+ $ defaultFiltersApplied = true ;
64+ break ;
65+
66+ case 'boolean ' :
67+ data_set ($ this ->filters , "boolean. {$ field }" , $ defaultValue );
68+ $ this ->addEnabledFilters ($ field , $ label );
69+ $ defaultFiltersApplied = true ;
70+ break ;
71+
72+ case 'input_text ' :
73+ if (is_array ($ defaultValue )) {
74+ // Support for both value and operator
75+ data_set ($ this ->filters , "input_text. {$ field }" , $ defaultValue ['value ' ] ?? '' );
76+ if (isset ($ defaultValue ['operator ' ])) {
77+ data_set ($ this ->filters , "input_text_options. {$ field }" , $ defaultValue ['operator ' ]);
78+ }
79+ } else {
80+ data_set ($ this ->filters , "input_text. {$ field }" , $ defaultValue );
81+ }
82+ $ this ->addEnabledFilters ($ field , $ label );
83+ $ defaultFiltersApplied = true ;
84+ break ;
85+
86+ case 'number ' :
87+ if (is_array ($ defaultValue )) {
88+ if (isset ($ defaultValue ['start ' ])) {
89+ data_set ($ this ->filters , "number. {$ field }.start " , $ defaultValue ['start ' ]);
90+ }
91+ if (isset ($ defaultValue ['end ' ])) {
92+ data_set ($ this ->filters , "number. {$ field }.end " , $ defaultValue ['end ' ]);
93+ }
94+ } else {
95+ data_set ($ this ->filters , "number. {$ field }.start " , $ defaultValue );
96+ }
97+ $ this ->addEnabledFilters ($ field , $ label );
98+ $ defaultFiltersApplied = true ;
99+ break ;
100+
101+ case 'date ' :
102+ case 'datetime ' :
103+ if (is_array ($ defaultValue ) && isset ($ defaultValue ['start ' ]) && isset ($ defaultValue ['end ' ])) {
104+ $ this ->filters [$ key ][$ field ] = [
105+ 'start ' => $ defaultValue ['start ' ],
106+ 'end ' => $ defaultValue ['end ' ],
107+ 'formatted ' => $ defaultValue ['formatted ' ] ?? '' ,
108+ ];
109+ $ this ->addEnabledFilters ($ field , $ label );
110+ $ defaultFiltersApplied = true ;
111+ }
112+ break ;
113+ }
114+ });
115+
116+ if ($ defaultFiltersApplied ) {
117+ $ this ->persistState ('filters ' );
118+ }
119+ }
120+
31121 /**
32122 * @throws Exception
33123 */
0 commit comments