Skip to content

Commit 095f42a

Browse files
authored
fix: filter data value doesn't match desktop (#203)
1 parent 47e09d2 commit 095f42a

File tree

2 files changed

+80
-23
lines changed

2 files changed

+80
-23
lines changed

src/application/database-yjs/database.type.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ export enum SortCondition {
4242
}
4343

4444
export enum FilterType {
45-
Data = 0,
46-
And = 1,
47-
Or = 2,
45+
And = 0,
46+
Or = 1,
47+
Data = 2,
4848
}
4949

5050
export interface Filter {

src/application/database-yjs/dispatch.ts

Lines changed: 77 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { useCallback, useMemo } from 'react';
55
import { v4 as uuidv4 } from 'uuid';
66
import * as Y from 'yjs';
77

8-
import { Log } from '@/utils/log';
98
import {
109
useCreateRow,
1110
useDatabase,
@@ -76,8 +75,9 @@ import {
7675
YSharedRoot,
7776
} from '@/application/types';
7877
import { DefaultTimeSetting } from '@/application/user-metadata';
79-
import { applyYDoc } from '@/application/ydoc/apply';
8078
import { isDatabaseContainer } from '@/application/view-utils';
79+
import { applyYDoc } from '@/application/ydoc/apply';
80+
import { Log } from '@/utils/log';
8181

8282
export 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+
35353577
export 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

Comments
 (0)