44namespace Loki \AdminComponents \Grid ;
55
66use Loki \AdminComponents \Grid \Column \Column ;
7+ use Loki \AdminComponents \Grid \Filter \Filter ;
8+ use Loki \AdminComponents \Grid \State \FilterState ;
9+ use Loki \AdminComponents \Grid \State \FilterStateFactory ;
710use Magento \Backend \Model \Session ;
811use Magento \Framework \Data \Collection \AbstractDb ;
912
1013class State
1114{
1215 public function __construct (
1316 private Session $ session ,
17+ private FilterStateFactory $ filterStateFactory ,
1418 private string $ namespace ,
1519 private int $ defaultLimit = 20 ,
1620 ) {
@@ -76,6 +80,7 @@ public function getSortDirection(): string
7680 {
7781 $ sortDirection = strtoupper ((string )$ this ->get ('sort_direction ' ));
7882 $ sortDirection = $ sortDirection === AbstractDb::SORT_ORDER_ASC ? AbstractDb::SORT_ORDER_ASC : AbstractDb::SORT_ORDER_DESC ;
83+
7984 return $ sortDirection ;
8085 }
8186
@@ -125,17 +130,36 @@ public function setSearchableFields(array $searchableFields): void
125130 $ this ->save ('searchable_fields ' , implode (', ' , $ searchableFields ));
126131 }
127132
133+ /**
134+ * @return FilterState[]
135+ * @todo Rename this getFilterStates()
136+ */
128137 public function getFilters (): array
129138 {
130- $ filters = json_decode ((string )$ this ->get ('filters ' ), true );
131- if (is_array ($ filters )) {
132- return $ filters ;
139+ $ filters = [];
140+ $ filtersData = json_decode ((string )$ this ->get ('filters ' ), true );
141+ if (false === is_array ($ filtersData )) {
142+ return [];
143+ }
144+
145+ foreach ($ filtersData as $ filterData ) {
146+ if (!isset ($ filterData ['value ' ])
147+ || !isset ($ filterData ['field ' ])
148+ || !isset ($ filterData ['condition_type ' ])) {
149+ continue ;
150+ }
151+
152+ $ filters [$ filterData ['field ' ]] = $ this ->filterStateFactory ->create (
153+ $ filterData ['field ' ],
154+ $ filterData ['value ' ],
155+ $ filterData ['condition_type ' ],
156+ );
133157 }
134158
135- return [] ;
159+ return $ filters ;
136160 }
137161
138- public function getFilterValue (string $ name ): mixed
162+ public function getFilterState (string $ name ): ? FilterState
139163 {
140164 $ filters = $ this ->getFilters ();
141165 if (isset ($ filters [$ name ])) {
@@ -148,16 +172,16 @@ public function getFilterValue(string $name): mixed
148172 public function setFilter (string $ name , mixed $ value , ?string $ conditionType = 'eq ' ): void
149173 {
150174 $ filters = $ this ->getFilters ();
151- if (empty ( $ value ) && isset ($ filters [$ name ])) {
175+ if (isset ($ filters [$ name ])) {
152176 unset($ filters [$ name ]);
153- } else {
154- $ filters [$ name ] = [
155- 'field ' => $ name ,
156- 'value ' => $ value ,
157- 'condition_type ' => $ conditionType ,
158- ];
159177 }
160178
179+ $ filters [$ name ] = [
180+ 'field ' => $ name ,
181+ 'value ' => $ value ,
182+ 'condition_type ' => $ conditionType ,
183+ ];
184+
161185 $ this ->setFilters ($ filters );
162186 }
163187
0 commit comments