@@ -2,13 +2,13 @@ import type { FileDetails } from "$lib/diff-viewer.svelte";
22import { FILE_STATUSES } from "$lib/github.svelte" ;
33import { SvelteSet } from "svelte/reactivity" ;
44
5- export type FileNameFilterMode = "include" | "exclude" ;
6- export class FileNameFilter {
5+ export type FilePathFilterMode = "include" | "exclude" ;
6+ export class FilePathFilter {
77 text : string ;
88 regex : RegExp ;
9- mode : FileNameFilterMode ;
9+ mode : FilePathFilterMode ;
1010
11- constructor ( text : string , regex : RegExp , mode : FileNameFilterMode ) {
11+ constructor ( text : string , regex : RegExp , mode : FilePathFilterMode ) {
1212 this . text = $state ( text ) ;
1313 this . regex = $state . raw ( regex ) ;
1414 this . mode = $state ( mode ) ;
@@ -24,23 +24,25 @@ function tryCompileRegex(pattern: string): RegExp | undefined {
2424}
2525
2626export class DiffFilterDialogState {
27- fileNameFilters = new SvelteSet < FileNameFilter > ( ) ;
28- reverseFileNameFilters = $derived ( [ ...this . fileNameFilters ] . toReversed ( ) ) ;
27+ filePathFilters = new SvelteSet < FilePathFilter > ( ) ;
28+ reverseFilePathFilters = $derived ( [ ...this . filePathFilters ] . toReversed ( ) ) ;
29+ filePathInclusions = $derived ( this . reverseFilePathFilters . filter ( ( f ) => f . mode === "include" ) ) ;
30+ filePathExclusions = $derived ( this . reverseFilePathFilters . filter ( ( f ) => f . mode === "exclude" ) ) ;
2931
3032 selectedFileStatuses : string [ ] = $state ( [ ...FILE_STATUSES ] ) ;
3133
32- addFileNameFilter ( filterString : string , mode : FileNameFilterMode ) : { invalidRegex : boolean } {
34+ addFilePathFilter ( filterString : string , mode : FilePathFilterMode ) : { invalidRegex : boolean } {
3335 const compiled = tryCompileRegex ( filterString ) ;
3436 if ( ! compiled ) {
3537 return { invalidRegex : true } ;
3638 }
37- const newFilter = new FileNameFilter ( filterString , compiled , mode ) ;
38- this . fileNameFilters . add ( newFilter ) ;
39+ const newFilter = new FilePathFilter ( filterString , compiled , mode ) ;
40+ this . filePathFilters . add ( newFilter ) ;
3941 return { invalidRegex : false } ;
4042 }
4143
4244 setDefaults ( ) {
43- this . fileNameFilters . clear ( ) ;
45+ this . filePathFilters . clear ( ) ;
4446 this . selectedFileStatuses = [ ...FILE_STATUSES ] ;
4547 }
4648
@@ -49,16 +51,13 @@ export class DiffFilterDialogState {
4951 if ( ! statusAllowed ) {
5052 return false ;
5153 }
52- const pathFilterArray = [ ...this . fileNameFilters ] ;
53- const includes = pathFilterArray . filter ( ( f ) => f . mode === "include" ) ;
54- const excludes = pathFilterArray . filter ( ( f ) => f . mode === "exclude" ) ;
55- for ( const exclude of excludes ) {
54+ for ( const exclude of this . filePathExclusions ) {
5655 if ( exclude . regex . test ( file . toFile ) || exclude . regex . test ( file . fromFile ) ) {
5756 return false ;
5857 }
5958 }
60- if ( includes . length > 0 ) {
61- for ( const include of includes ) {
59+ if ( this . filePathInclusions . length > 0 ) {
60+ for ( const include of this . filePathInclusions ) {
6261 if ( include . regex . test ( file . toFile ) || include . regex . test ( file . fromFile ) ) {
6362 return true ;
6463 }
0 commit comments