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" ;
101import { QuoteLength } from "@monkeytype/contracts/schemas/configs" ;
112import {
123 ResultFilters ,
13- ResultFiltersSchema ,
144 ResultFiltersGroup ,
155 ResultFiltersGroupItem ,
6+ ResultFiltersSchema ,
167} from "@monkeytype/contracts/schemas/users" ;
17- import { LocalStorageWithSchema } from "../../utils/local-storage-with-schema" ;
18- import defaultResultFilters from "../../constants/default-result-filters" ;
198import { 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" ;
2013import { 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" ;
2121
2222export function mergeWithDefaultFilters (
2323 filters : Partial < ResultFilters >
@@ -33,6 +33,8 @@ export function mergeWithDefaultFilters(
3333 merged [ groupKey ] = id ;
3434 } else if ( groupKey === "name" ) {
3535 merged [ groupKey ] = filters [ groupKey ] ?? defaultResultFilters [ groupKey ] ;
36+ } else if ( groupKey === "tagsFilterMode" ) {
37+ merged [ groupKey ] = filters [ groupKey ] ?? defaultResultFilters [ groupKey ] ;
3638 } else {
3739 // @ts -expect-error i cant figure this out
3840 merged [ groupKey ] = {
@@ -289,7 +291,7 @@ export function updateActive(): void {
289291
290292 for ( const group of Misc . typedKeys ( getFilters ( ) ) ) {
291293 // 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" ) {
293295 continue ;
294296 }
295297
@@ -488,6 +490,19 @@ export function updateActive(): void {
488490 } , 0 ) ;
489491}
490492
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+
491506function toggle < G extends ResultFiltersGroup > (
492507 group : G ,
493508 filter : ResultFiltersGroupItem < G >
@@ -925,6 +940,13 @@ $(".group.presetFilterButtons .filterBtns").on(
925940 }
926941) ;
927942
943+ $ ( document ) . on ( "click" , ".pageAccount .tagsFilterModeToggle" , ( ) => {
944+ filters . tagsFilterMode = filters . tagsFilterMode === "or" ? "and" : "or" ;
945+ save ( ) ;
946+ updateTagsFilterModeIcon ( ) ;
947+ selectChangeCallbackFn ( ) ;
948+ } ) ;
949+
928950function verifyResultFiltersStructure ( filterIn : ResultFilters ) : ResultFilters {
929951 const filter = Misc . deepClone ( filterIn ) ;
930952 Object . entries ( defaultResultFilters ) . forEach ( ( entry ) => {
0 commit comments