@@ -158,16 +158,38 @@ export function DevlogProvider({ children }: { children: React.ReactNode }) {
158158 try {
159159 setLoading ( true ) ;
160160
161- // Convert query filters to DevlogApiClient filters format
161+ // Convert filters to DevlogFilters format for the API client
162162 const apiFilters : any = { } ;
163163
164+ // Convert array filters to single values (API expects single values currently)
165+ if ( filters . status && filters . status . length > 0 ) {
166+ apiFilters . status = filters . status [ 0 ] ;
167+ }
168+ if ( filters . type && filters . type . length > 0 ) {
169+ apiFilters . type = filters . type [ 0 ] ;
170+ }
171+ if ( filters . priority && filters . priority . length > 0 ) {
172+ apiFilters . priority = filters . priority [ 0 ] ;
173+ }
174+
175+ // Direct mappings
164176 if ( filters . search ) apiFilters . search = filters . search ;
165- if ( filters . status ?. length === 1 ) apiFilters . status = filters . status [ 0 ] ;
166- if ( filters . type ?. length === 1 ) apiFilters . type = filters . type [ 0 ] ;
167- if ( filters . priority ?. length === 1 ) apiFilters . priority = filters . priority [ 0 ] ;
168- if ( filters . pagination ?. limit ) apiFilters . limit = filters . pagination . limit ;
169- if ( filters . pagination ?. page && filters . pagination ?. limit ) {
170- apiFilters . offset = ( filters . pagination . page - 1 ) * filters . pagination . limit ;
177+ if ( filters . assignee ) apiFilters . assignee = filters . assignee ;
178+ if ( filters . archived !== undefined ) apiFilters . archived = filters . archived ;
179+ if ( filters . fromDate ) apiFilters . fromDate = filters . fromDate ;
180+ if ( filters . toDate ) apiFilters . toDate = filters . toDate ;
181+
182+ // Handle filterType - only pass through valid values
183+ if ( filters . filterType && [ 'total' , 'open' , 'closed' ] . includes ( filters . filterType ) ) {
184+ apiFilters . filterType = filters . filterType ;
185+ }
186+
187+ // Pagination
188+ if ( filters . pagination ) {
189+ if ( filters . pagination . page ) apiFilters . page = filters . pagination . page ;
190+ if ( filters . pagination . limit ) apiFilters . limit = filters . pagination . limit ;
191+ if ( filters . pagination . sortBy ) apiFilters . sortBy = filters . pagination . sortBy ;
192+ if ( filters . pagination . sortOrder ) apiFilters . sortOrder = filters . pagination . sortOrder ;
171193 }
172194
173195 const data = await devlogApiClient . list ( apiFilters ) ;
@@ -227,54 +249,10 @@ export function DevlogProvider({ children }: { children: React.ReactNode }) {
227249 }
228250 } , [ currentProject , devlogApiClient ] ) ;
229251
230- // Client -side filtered devlogs
252+ // All filtering is now handled server -side - simply return the devlogs from API
231253 const filteredDevlogs = useMemo ( ( ) => {
232- if ( queryString ) {
233- return devlogs ;
234- }
235-
236- let filtered = [ ...devlogs ] ;
237-
238- if ( filters . status && filters . status . length > 0 ) {
239- filtered = filtered . filter ( ( devlog ) => filters . status ! . includes ( devlog . status ) ) ;
240- }
241-
242- if ( filters . type && filters . type . length > 0 ) {
243- filtered = filtered . filter ( ( devlog ) => filters . type ! . includes ( devlog . type ) ) ;
244- }
245-
246- if ( filters . priority && filters . priority . length > 0 ) {
247- filtered = filtered . filter ( ( devlog ) => filters . priority ! . includes ( devlog . priority ) ) ;
248- }
249-
250- if ( filters . assignee ) {
251- filtered = filtered . filter ( ( devlog ) => devlog . assignee === filters . assignee ) ;
252- }
253-
254- if ( filters . fromDate ) {
255- const fromDate = new Date ( filters . fromDate ) ;
256- fromDate . setHours ( 0 , 0 , 0 , 0 ) ;
257- filtered = filtered . filter ( ( devlog ) => new Date ( devlog . createdAt ) >= fromDate ) ;
258- }
259-
260- if ( filters . toDate ) {
261- const toDate = new Date ( filters . toDate ) ;
262- toDate . setHours ( 23 , 59 , 59 , 999 ) ;
263- filtered = filtered . filter ( ( devlog ) => new Date ( devlog . createdAt ) <= toDate ) ;
264- }
265-
266- if ( filters . search ) {
267- const searchQuery = filters . search . toLowerCase ( ) . trim ( ) ;
268- filtered = filtered . filter ( ( devlog ) => {
269- const titleMatch = devlog . title . toLowerCase ( ) . includes ( searchQuery ) ;
270- const descriptionMatch = devlog . description . toLowerCase ( ) . includes ( searchQuery ) ;
271- // Note: Search in notes is handled separately by the notes API
272- return titleMatch || descriptionMatch ;
273- } ) ;
274- }
275-
276- return filtered ;
277- } , [ devlogs , filters , queryString ] ) ;
254+ return devlogs ;
255+ } , [ devlogs ] ) ;
278256
279257 // CRUD operations
280258 const createDevlog = async ( data : Partial < DevlogEntry > ) => {
0 commit comments