@@ -5,7 +5,6 @@ import { useCallback, useMemo } from 'react';
55import { v4 as uuidv4 } from 'uuid' ;
66import * as Y from 'yjs' ;
77
8- import { Log } from '@/utils/log' ;
98import {
109 useCreateRow ,
1110 useDatabase ,
@@ -76,8 +75,9 @@ import {
7675 YSharedRoot ,
7776} from '@/application/types' ;
7877import { DefaultTimeSetting } from '@/application/user-metadata' ;
79- import { applyYDoc } from '@/application/ydoc/apply' ;
8078import { isDatabaseContainer } from '@/application/view-utils' ;
79+ import { applyYDoc } from '@/application/ydoc/apply' ;
80+ import { Log } from '@/utils/log' ;
8181
8282export function useResizeColumnWidthDispatch ( ) {
8383 const database = useDatabase ( ) ;
@@ -3455,18 +3455,40 @@ export function useAddFilter() {
34553455
34563456 return useCallback (
34573457 ( fieldId : string ) => {
3458- if ( ! view ) return ;
3458+ Log . debug ( '[useAddFilter] Creating filter' , { fieldId } ) ;
3459+
3460+ // Guard: Don't create filter if fieldId is missing or empty
3461+ if ( ! view || ! fieldId || fieldId . trim ( ) === '' ) {
3462+ Log . warn ( '[useAddFilter] Skipping filter creation: view or fieldId is missing' , {
3463+ hasView : ! ! view ,
3464+ fieldId,
3465+ } ) ;
3466+ return ;
3467+ }
3468+
34593469 const id = `${ nanoid ( 6 ) } ` ;
34603470
3471+ Log . debug ( '[useAddFilter] Generated filter id' , { filterId : id , fieldId } ) ;
3472+
34613473 executeOperations (
34623474 sharedRoot ,
34633475 [
34643476 ( ) => {
34653477 const field = fields . get ( fieldId ) ;
3478+
3479+ if ( ! field ) {
3480+ Log . warn ( '[useAddFilter] Field not found for fieldId:' , fieldId ) ;
3481+ return ;
3482+ }
3483+
34663484 const fieldType = Number ( field . get ( YjsDatabaseKey . type ) ) ;
3485+
3486+ Log . debug ( '[useAddFilter] Field info' , { fieldId, fieldType } ) ;
3487+
34673488 let filters = view . get ( YjsDatabaseKey . filters ) ;
34683489
34693490 if ( ! filters ) {
3491+ Log . debug ( '[useAddFilter] Creating new filters array' ) ;
34703492 filters = new Y . Array ( ) as YDatabaseFilters ;
34713493 view . set ( YjsDatabaseKey . filters , filters ) ;
34723494 }
@@ -3477,7 +3499,18 @@ export function useAddFilter() {
34773499 filter . set ( YjsDatabaseKey . field_id , fieldId ) ;
34783500 const conditionData = getDefaultFilterCondition ( fieldType ) ;
34793501
3480- if ( ! conditionData ) return ;
3502+ if ( ! conditionData ) {
3503+ Log . warn ( '[useAddFilter] No default condition for fieldType:' , fieldType ) ;
3504+ return ;
3505+ }
3506+
3507+ Log . debug ( '[useAddFilter] Setting filter data' , {
3508+ filterId : id ,
3509+ fieldId,
3510+ fieldType,
3511+ condition : conditionData . condition ,
3512+ content : conditionData . content ,
3513+ } ) ;
34813514
34823515 filter . set ( YjsDatabaseKey . condition , conditionData . condition ) ;
34833516 if ( conditionData . content !== undefined ) {
@@ -3488,6 +3521,8 @@ export function useAddFilter() {
34883521 filter . set ( YjsDatabaseKey . filter_type , FilterType . Data ) ;
34893522
34903523 filters . push ( [ filter ] ) ;
3524+
3525+ Log . debug ( '[useAddFilter] Filter created successfully' , { filterId : id , filter : filter . toJSON ( ) } ) ;
34913526 } ,
34923527 ] ,
34933528 'addFilter'
@@ -3532,50 +3567,72 @@ export function useRemoveFilter() {
35323567 ) ;
35333568}
35343569
3570+ export interface UpdateFilterParams {
3571+ filterId : string ;
3572+ fieldId ?: string ;
3573+ condition ?: number ;
3574+ content ?: string ;
3575+ }
3576+
35353577export function useUpdateFilter ( ) {
35363578 const view = useDatabaseView ( ) ;
35373579 const sharedRoot = useSharedRoot ( ) ;
35383580
35393581 return useCallback (
3540- ( {
3541- filterId,
3542- fieldId,
3543- condition,
3544- content,
3545- } : {
3546- filterId : string ;
3547- fieldId ?: string ;
3548- condition ?: number ;
3549- content ?: string ;
3550- } ) => {
3551- if ( ! view ) return ;
3582+ ( params : UpdateFilterParams ) => {
3583+ const { filterId, fieldId, condition, content } = params ;
3584+
3585+ Log . debug ( '[useUpdateFilter] Updating filter' , { filterId, fieldId, condition, content } ) ;
3586+
3587+ // Guard: view must exist
3588+ if ( ! view ) {
3589+ Log . warn ( '[useUpdateFilter] View is not available' ) ;
3590+ return ;
3591+ }
3592+
3593+ // Guard: fieldId is required for filter updates
3594+ if ( ! fieldId ) {
3595+ Log . warn ( '[useUpdateFilter] FieldId is missing' , { filterId } ) ;
3596+ return ;
3597+ }
3598+
35523599 executeOperations (
35533600 sharedRoot ,
35543601 [
35553602 ( ) => {
3603+ // Get filters array from view
35563604 const filters = view . get ( YjsDatabaseKey . filters ) ;
35573605
35583606 if ( ! filters ) {
3607+ Log . warn ( '[useUpdateFilter] No filters found in view' , { filterId } ) ;
35593608 return ;
35603609 }
35613610
3562- const filter = filters . toArray ( ) . find ( ( filter ) => filter . get ( YjsDatabaseKey . id ) === filterId ) ;
3611+ // Find the filter by id
3612+ const filter = filters . toArray ( ) . find ( ( f ) => f . get ( YjsDatabaseKey . id ) === filterId ) ;
35633613
35643614 if ( ! filter ) {
3615+ Log . warn ( '[useUpdateFilter] Filter not found' , { filterId } ) ;
35653616 return ;
35663617 }
35673618
3568- if ( fieldId ) {
3569- filter . set ( YjsDatabaseKey . field_id , fieldId ) ;
3570- }
3619+ // Update field_id (always required)
3620+ filter . set ( YjsDatabaseKey . field_id , fieldId ) ;
35713621
3622+ // Update condition if provided
35723623 if ( condition !== undefined ) {
35733624 filter . set ( YjsDatabaseKey . condition , condition ) ;
35743625 }
35753626
3627+ // Update content if provided
35763628 if ( content !== undefined ) {
35773629 filter . set ( YjsDatabaseKey . content , content ) ;
35783630 }
3631+
3632+ Log . debug ( '[useUpdateFilter] Filter updated successfully' , {
3633+ filterId,
3634+ filter : filter . toJSON ( ) ,
3635+ } ) ;
35793636 } ,
35803637 ] ,
35813638 'updateFilter'
0 commit comments