1
- import * as Misc from "../../utils/misc" ;
2
- import * as Strings from "../../utils/strings" ;
3
- import * as JSONData from "../../utils/json-data" ;
4
- import * as DB from "../../db" ;
5
- import Config from "../../config" ;
6
- import * as Notifications from "../notifications" ;
7
- import Ape from "../../ape/index" ;
8
- import * as Loader from "../loader" ;
9
- import SlimSelect from "slim-select" ;
10
1
import { QuoteLength } from "@monkeytype/contracts/schemas/configs" ;
11
2
import {
12
3
ResultFilters ,
13
- ResultFiltersSchema ,
14
4
ResultFiltersGroup ,
15
5
ResultFiltersGroupItem ,
6
+ ResultFiltersSchema ,
16
7
} from "@monkeytype/contracts/schemas/users" ;
17
- import { LocalStorageWithSchema } from "../../utils/local-storage-with-schema" ;
18
- import defaultResultFilters from "../../constants/default-result-filters" ;
19
8
import { getAllFunboxes } from "@monkeytype/funbox" ;
9
+ import SlimSelect from "slim-select" ;
10
+ import Ape from "../../ape/index" ;
11
+ import Config from "../../config" ;
12
+ import defaultResultFilters from "../../constants/default-result-filters" ;
20
13
import { SnapshotUserTag } from "../../constants/default-snapshot" ;
14
+ import * as DB from "../../db" ;
15
+ import * as JSONData from "../../utils/json-data" ;
16
+ import { LocalStorageWithSchema } from "../../utils/local-storage-with-schema" ;
17
+ import * as Misc from "../../utils/misc" ;
18
+ import * as Strings from "../../utils/strings" ;
19
+ import * as Loader from "../loader" ;
20
+ import * as Notifications from "../notifications" ;
21
21
22
22
export function mergeWithDefaultFilters (
23
23
filters : Partial < ResultFilters >
@@ -33,6 +33,8 @@ export function mergeWithDefaultFilters(
33
33
merged [ groupKey ] = id ;
34
34
} else if ( groupKey === "name" ) {
35
35
merged [ groupKey ] = filters [ groupKey ] ?? defaultResultFilters [ groupKey ] ;
36
+ } else if ( groupKey === "tagsFilterMode" ) {
37
+ merged [ groupKey ] = filters [ groupKey ] ?? defaultResultFilters [ groupKey ] ;
36
38
} else {
37
39
// @ts -expect-error i cant figure this out
38
40
merged [ groupKey ] = {
@@ -289,7 +291,7 @@ export function updateActive(): void {
289
291
290
292
for ( const group of Misc . typedKeys ( getFilters ( ) ) ) {
291
293
// id and name field do not correspond to any ui elements, no need to update
292
- if ( group === "_id" || group === "name" ) {
294
+ if ( group === "_id" || group === "name" || group === "tagsFilterMode" ) {
293
295
continue ;
294
296
}
295
297
@@ -488,6 +490,19 @@ export function updateActive(): void {
488
490
} , 0 ) ;
489
491
}
490
492
493
+ function updateTagsFilterModeIcon ( ) : void {
494
+ const toggleElement = $ ( ".pageAccount .tagsFilterModeToggle" ) ;
495
+ const modeTextElement = toggleElement . find ( ".mode-text" ) ;
496
+
497
+ if ( filters . tagsFilterMode === "and" ) {
498
+ toggleElement . addClass ( "mode-and" ) ;
499
+ modeTextElement . text ( "AND" ) ;
500
+ } else {
501
+ toggleElement . removeClass ( "mode-and" ) ;
502
+ modeTextElement . text ( "OR" ) ;
503
+ }
504
+ }
505
+
491
506
function toggle < G extends ResultFiltersGroup > (
492
507
group : G ,
493
508
filter : ResultFiltersGroupItem < G >
@@ -925,6 +940,13 @@ $(".group.presetFilterButtons .filterBtns").on(
925
940
}
926
941
) ;
927
942
943
+ $ ( document ) . on ( "click" , ".pageAccount .tagsFilterModeToggle" , ( ) => {
944
+ filters . tagsFilterMode = filters . tagsFilterMode === "or" ? "and" : "or" ;
945
+ save ( ) ;
946
+ updateTagsFilterModeIcon ( ) ;
947
+ selectChangeCallbackFn ( ) ;
948
+ } ) ;
949
+
928
950
function verifyResultFiltersStructure ( filterIn : ResultFilters ) : ResultFilters {
929
951
const filter = Misc . deepClone ( filterIn ) ;
930
952
Object . entries ( defaultResultFilters ) . forEach ( ( entry ) => {
0 commit comments