Skip to content

Commit 5128026

Browse files
committed
coderabbit
1 parent b50b761 commit 5128026

File tree

2 files changed

+76
-102
lines changed

2 files changed

+76
-102
lines changed

src/components/BrowserFilter/BrowserFilter.react.js

Lines changed: 70 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Label from 'components/Label/Label.react';
1616
import Popover from 'components/Popover/Popover.react';
1717
import TextInput from 'components/TextInput/TextInput.react';
1818
import { CurrentApp } from 'context/currentApp';
19-
import { List, Map } from 'immutable';
19+
import { List, Map as ImmutableMap } from 'immutable';
2020
import * as ClassPreferences from 'lib/ClassPreferences';
2121
import * as Filters from 'lib/Filters';
2222
import Position from 'lib/Position';
@@ -116,8 +116,9 @@ export default class BrowserFilter extends React.Component {
116116
hasRelativeDates = filterData.some(filter =>
117117
filter.compareTo && filter.compareTo.__type === 'RelativeDate'
118118
);
119-
} catch {
120-
// If parsing fails, assume no relative dates
119+
} catch (error) {
120+
// Log parsing errors for debugging
121+
console.warn('Failed to parse saved filter:', error);
121122
hasRelativeDates = false;
122123
}
123124

@@ -279,7 +280,7 @@ export default class BrowserFilter extends React.Component {
279280
});
280281
return result;
281282
} // Helper method to convert RelativeDate objects to Parse Date format for saving
282-
convertRelativeDatesForDisplay(filters) {
283+
convertRelativeDatesToParseFormat(filters) {
283284
return filters.map(filter => {
284285
const compareTo = filter.get('compareTo');
285286
if (compareTo && compareTo.__type === 'RelativeDate') {
@@ -295,6 +296,45 @@ export default class BrowserFilter extends React.Component {
295296
});
296297
}
297298

299+
deleteCurrentFilter() {
300+
const currentFilterInfo = this.getCurrentFilterInfo();
301+
if (!currentFilterInfo.id) {
302+
this.setState({ confirmDelete: false });
303+
return;
304+
}
305+
306+
// Delete the filter from ClassPreferences
307+
const preferences = ClassPreferences.getPreferences(
308+
this.context.applicationId,
309+
this.props.className
310+
);
311+
312+
if (preferences.filters) {
313+
const updatedFilters = preferences.filters.filter(filter => filter.id !== currentFilterInfo.id);
314+
ClassPreferences.updatePreferences(
315+
this.context.applicationId,
316+
this.props.className,
317+
{ ...preferences, filters: updatedFilters }
318+
);
319+
}
320+
321+
// Remove filterId from URL
322+
const urlParams = new URLSearchParams(window.location.search);
323+
urlParams.delete('filterId');
324+
const newUrl = `${window.location.pathname}${urlParams.toString() ? '?' + urlParams.toString() : ''}`;
325+
window.history.replaceState({}, '', newUrl);
326+
327+
// Clear current filters and close dialog
328+
this.props.onChange(new ImmutableMap());
329+
this.setState({ confirmDelete: false });
330+
this.toggle();
331+
332+
// Call onDeleteFilter prop if provided
333+
if (this.props.onDeleteFilter) {
334+
this.props.onDeleteFilter(currentFilterInfo.id);
335+
}
336+
}
337+
298338
toggle() {
299339
let filters = this.props.filters;
300340
if (this.props.filters.size === 0) {
@@ -306,7 +346,7 @@ export default class BrowserFilter extends React.Component {
306346
);
307347
const { filterClass, filterField, filterConstraint } = Filters.getFilterDetails(available);
308348
filters = new List([
309-
new Map({ class: filterClass, field: filterField, constraint: filterConstraint }),
349+
new ImmutableMap({ class: filterClass, field: filterField, constraint: filterConstraint }),
310350
]);
311351
} else {
312352
// Convert only Parse Date objects to JavaScript Date objects, preserve RelativeDate objects
@@ -333,14 +373,14 @@ export default class BrowserFilter extends React.Component {
333373
const { filterClass, filterField, filterConstraint } = Filters.getFilterDetails(available);
334374
this.setState(({ filters }) => ({
335375
filters: filters.push(
336-
new Map({ class: filterClass, field: filterField, constraint: filterConstraint })
376+
new ImmutableMap({ class: filterClass, field: filterField, constraint: filterConstraint })
337377
),
338378
editMode: true,
339379
}));
340380
}
341381

342382
clear() {
343-
this.props.onChange(new Map());
383+
this.props.onChange(new ImmutableMap());
344384
}
345385

346386
apply() {
@@ -542,42 +582,7 @@ export default class BrowserFilter extends React.Component {
542582
primary={true}
543583
width="120px"
544584
onClick={() => {
545-
const currentFilterInfo = this.getCurrentFilterInfo();
546-
if (currentFilterInfo.id) {
547-
// Delete the filter from ClassPreferences
548-
const preferences = ClassPreferences.getPreferences(
549-
this.context.applicationId,
550-
this.props.className
551-
);
552-
553-
if (preferences.filters) {
554-
const updatedFilters = preferences.filters.filter(filter => filter.id !== currentFilterInfo.id);
555-
ClassPreferences.updatePreferences(
556-
this.context.applicationId,
557-
this.props.className,
558-
{ ...preferences, filters: updatedFilters }
559-
);
560-
}
561-
562-
// Remove filterId from URL
563-
const urlParams = new URLSearchParams(window.location.search);
564-
urlParams.delete('filterId');
565-
const newUrl = `${window.location.pathname}${urlParams.toString() ? '?' + urlParams.toString() : ''}`;
566-
window.history.replaceState({}, '', newUrl);
567-
568-
// Clear current filters and close dialog
569-
this.props.onChange(new Map());
570-
this.setState({ confirmDelete: false });
571-
this.toggle();
572-
573-
// Call onDeleteFilter prop if provided
574-
if (this.props.onDeleteFilter) {
575-
this.props.onDeleteFilter(currentFilterInfo.id);
576-
}
577-
} else {
578-
// Close the confirmation dialog if no filter ID
579-
this.setState({ confirmDelete: false });
580-
}
585+
this.deleteCurrentFilter();
581586
}}
582587
/>
583588
</div>
@@ -616,59 +621,28 @@ export default class BrowserFilter extends React.Component {
616621
</div>
617622
)}
618623
<div className={styles.btnFlex}>
619-
{(() => {
620-
const currentFilter = this.getCurrentFilterInfo();
621-
const isAppliedSavedFilter = currentFilter.isApplied && this.props.filters.size > 0;
622-
623-
if (isAppliedSavedFilter && !this.state.showMore) {
624-
return (
625-
<>
626-
<span
627-
style={{ cursor: 'pointer', display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}
628-
onClick={() => this.toggleMore()}
629-
>
630-
<Icon
631-
name="down-solid"
632-
width={20}
633-
height={20}
634-
fill="white"
635-
/>
636-
</span>
637-
<Button
638-
color="white"
639-
value="Clear"
640-
disabled={this.state.filters.size === 0}
641-
width="120px"
642-
onClick={() => this.clear()}
643-
/>
644-
</>
645-
);
646-
} else if (!this.state.showMore) {
647-
return (
648-
<>
649-
<span
650-
style={{ cursor: 'pointer', display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}
651-
onClick={() => this.toggleMore()}
652-
>
653-
<Icon
654-
name="down-solid"
655-
width={20}
656-
height={20}
657-
fill="white"
658-
/>
659-
</span>
660-
<Button
661-
color="white"
662-
value="Clear"
663-
disabled={this.state.filters.size === 0}
664-
width="120px"
665-
onClick={() => this.clear()}
666-
/>
667-
</>
668-
);
669-
}
670-
return null;
671-
})()}
624+
{!this.state.showMore && (
625+
<>
626+
<span
627+
style={{ cursor: 'pointer', display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}
628+
onClick={() => this.toggleMore()}
629+
>
630+
<Icon
631+
name="down-solid"
632+
width={20}
633+
height={20}
634+
fill="white"
635+
/>
636+
</span>
637+
<Button
638+
color="white"
639+
value="Clear"
640+
disabled={this.state.filters.size === 0}
641+
width="120px"
642+
onClick={() => this.clear()}
643+
/>
644+
</>
645+
)}
672646
</div>
673647
<div className={styles.btnFlex}>
674648
<Button

src/dashboard/Data/Browser/Browser.react.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,25 +1267,25 @@ class Browser extends DashboardView {
12671267
return newFilterId;
12681268
}
12691269

1270-
deleteFilter(filterId) {
1270+
deleteFilter(filterIdOrObject) {
12711271
const preferences = ClassPreferences.getPreferences(
12721272
this.context.applicationId,
12731273
this.props.params.className
12741274
);
12751275

12761276
if (preferences.filters) {
12771277
// Try to find by ID first (modern approach)
1278-
let updatedFilters = preferences.filters.filter(filter => filter.id !== filterId);
1278+
let updatedFilters = preferences.filters.filter(filter => filter.id !== filterIdOrObject);
12791279

12801280
// If no filter was removed (ID not found), use fallback method
1281-
if (updatedFilters.length === preferences.filters.length && filterId) {
1282-
// Fallback: try to find by comparing the entire filter object if filterId is actually a filter object
1283-
if (typeof filterId === 'object') {
1281+
if (updatedFilters.length === preferences.filters.length && filterIdOrObject) {
1282+
// Fallback: try to find by comparing the entire filter object if filterIdOrObject is actually a filter object
1283+
if (typeof filterIdOrObject === 'object') {
12841284
let i = preferences.filters.length;
12851285
updatedFilters = [...preferences.filters];
12861286
while (i--) {
12871287
const item = updatedFilters[i];
1288-
if (JSON.stringify(item) === JSON.stringify(filterId)) {
1288+
if (JSON.stringify(item) === JSON.stringify(filterIdOrObject)) {
12891289
updatedFilters.splice(i, 1);
12901290
}
12911291
}

0 commit comments

Comments
 (0)