From 43e7f615cfd81d649985aa25fcd025c2a54a2912 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 5 Mar 2025 00:40:03 -0800 Subject: [PATCH] Add some more options --- src-ui/messages.xlf | 98 ++++++++++++------- .../dates-dropdown.component.ts | 31 +++++- .../filter-editor.component.spec.ts | 37 +++---- .../filter-editor/filter-editor.component.ts | 42 +++++--- 4 files changed, 135 insertions(+), 73 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 5931ea867..1c9cb7f59 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1120,7 +1120,7 @@ </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">173</context> + <context context-type="linenumber">193</context> </context-group> </trans-unit> <trans-unit id="8508424367627989968" datatype="html"> @@ -3358,6 +3358,10 @@ <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.html</context> <context context-type="linenumber">163</context> </context-group> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> + <context context-type="linenumber">103</context> + </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">21</context> @@ -3517,7 +3521,7 @@ <source>now</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.html</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">31</context> </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.html</context> @@ -3573,28 +3577,53 @@ <source>Within 1 week</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> - <context context-type="linenumber">70</context> + <context context-type="linenumber">73</context> </context-group> </trans-unit> <trans-unit id="123064370501514576" datatype="html"> <source>Within 1 month</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">78</context> </context-group> </trans-unit> <trans-unit id="1027161426440526546" datatype="html"> <source>Within 3 months</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> - <context context-type="linenumber">80</context> + <context context-type="linenumber">83</context> </context-group> </trans-unit> <trans-unit id="226779700214642230" datatype="html"> <source>Within 1 year</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> + </context-group> + </trans-unit> + <trans-unit id="8462417627724236320" datatype="html"> + <source>This year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit id="842657237693374355" datatype="html"> + <source>This month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit id="4498682414491138092" datatype="html"> + <source>Yesterday</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/dates-dropdown/dates-dropdown.component.ts</context> + <context context-type="linenumber">108</context> + </context-group> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> + <context context-type="linenumber">29</context> </context-group> </trans-unit> <trans-unit id="8743659855412792665" datatype="html"> @@ -6519,7 +6548,7 @@ </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">180</context> </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/document.ts</context> @@ -7147,7 +7176,7 @@ </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">168</context> + <context context-type="linenumber">188</context> </context-group> </trans-unit> <trans-unit id="6475890479659129881" datatype="html"> @@ -7749,7 +7778,7 @@ </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">165</context> + <context context-type="linenumber">185</context> </context-group> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/document.ts</context> @@ -7945,154 +7974,154 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">163</context> + <context context-type="linenumber">183</context> </context-group> </trans-unit> <trans-unit id="7408932238599462499" datatype="html"> <source>File type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">190</context> </context-group> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">179</context> + <context context-type="linenumber">199</context> </context-group> </trans-unit> <trans-unit id="3697582909018473071" datatype="html"> <source>equals</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit id="5325481293405718739" datatype="html"> <source>is empty</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">189</context> + <context context-type="linenumber">209</context> </context-group> </trans-unit> <trans-unit id="6166785695326182482" datatype="html"> <source>is not empty</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">193</context> + <context context-type="linenumber">213</context> </context-group> </trans-unit> <trans-unit id="4686622206659266699" datatype="html"> <source>greater than</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">197</context> + <context context-type="linenumber">217</context> </context-group> </trans-unit> <trans-unit id="8014012170270529279" datatype="html"> <source>less than</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">221</context> </context-group> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find((c) => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">233,235</context> + <context context-type="linenumber">253,255</context> </context-group> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">237</context> + <context context-type="linenumber">257</context> </context-group> </trans-unit> <trans-unit id="317796810569008208" datatype="html"> <source>Document type: <x id="PH" equiv-text="this.documentTypes.find((dt) => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">243,245</context> + <context context-type="linenumber">263,265</context> </context-group> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">247</context> + <context context-type="linenumber">267</context> </context-group> </trans-unit> <trans-unit id="232202047340644471" datatype="html"> <source>Storage path: <x id="PH" equiv-text="this.storagePaths.find((sp) => sp.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">253,255</context> + <context context-type="linenumber">273,275</context> </context-group> </trans-unit> <trans-unit id="1562820715074533164" datatype="html"> <source>Without storage path</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">257</context> + <context context-type="linenumber">277</context> </context-group> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find((t) => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">261,263</context> + <context context-type="linenumber">281,283</context> </context-group> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">267</context> + <context context-type="linenumber">287</context> </context-group> </trans-unit> <trans-unit id="8644099678903817943" datatype="html"> <source>Custom fields query</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">271</context> + <context context-type="linenumber">291</context> </context-group> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">274</context> + <context context-type="linenumber">294</context> </context-group> </trans-unit> <trans-unit id="1872523635812236432" datatype="html"> <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">277</context> + <context context-type="linenumber">297</context> </context-group> </trans-unit> <trans-unit id="102674688969746976" datatype="html"> <source>Owner: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">280</context> + <context context-type="linenumber">300</context> </context-group> </trans-unit> <trans-unit id="3550877650686009106" datatype="html"> <source>Owner not in: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">283</context> + <context context-type="linenumber">303</context> </context-group> </trans-unit> <trans-unit id="1082034558646673343" datatype="html"> <source>Without an owner</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">286</context> + <context context-type="linenumber">306</context> </context-group> </trans-unit> <trans-unit id="7210076240260527720" datatype="html"> @@ -9426,13 +9455,6 @@ <context context-type="linenumber">25</context> </context-group> </trans-unit> - <trans-unit id="4498682414491138092" datatype="html"> - <source>Yesterday</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/pipes/custom-date.pipe.ts</context> - <context context-type="linenumber">29</context> - </context-group> - </trans-unit> <trans-unit id="5601594741748068208" datatype="html"> <source>%s days ago</source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.ts b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.ts index d56b00358..3645f7ddc 100644 --- a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.ts +++ b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.ts @@ -1,4 +1,4 @@ -import { NgClass, NgTemplateOutlet } from '@angular/common' +import { NgClass } from '@angular/common' import { Component, EventEmitter, @@ -37,6 +37,10 @@ export enum RelativeDate { WITHIN_1_MONTH = 2, WITHIN_3_MONTHS = 3, WITHIN_1_YEAR = 4, + THIS_YEAR = 5, + THIS_MONTH = 6, + TODAY = 7, + YESTERDAY = 8, } @Component({ @@ -54,7 +58,6 @@ export enum RelativeDate { FormsModule, ReactiveFormsModule, NgClass, - NgTemplateOutlet, ], }) export class DatesDropdownComponent implements OnInit, OnDestroy { @@ -85,6 +88,26 @@ export class DatesDropdownComponent implements OnInit, OnDestroy { name: $localize`Within 1 year`, date: new Date().setFullYear(new Date().getFullYear() - 1), }, + { + id: RelativeDate.THIS_YEAR, + name: $localize`This year`, + date: new Date('1/1/' + new Date().getFullYear()), + }, + { + id: RelativeDate.THIS_MONTH, + name: $localize`This month`, + date: new Date().setDate(1), + }, + { + id: RelativeDate.TODAY, + name: $localize`Today`, + date: new Date().setHours(0, 0, 0, 0), + }, + { + id: RelativeDate.YESTERDAY, + name: $localize`Yesterday`, + date: new Date().setDate(new Date().getDate() - 1), + }, ] datePlaceHolder: string @@ -176,6 +199,8 @@ export class DatesDropdownComponent implements OnInit, OnDestroy { } onSetCreatedRelativeDate(rd: { id: number; name: string; date: number }) { + console.log(rd) + // createdRelativeDate is set by ngModel this.createdDateTo = null this.createdDateFrom = null @@ -183,6 +208,8 @@ export class DatesDropdownComponent implements OnInit, OnDestroy { } onSetAddedRelativeDate(rd: { id: number; name: string; date: number }) { + console.log(rd) + // addedRelativeDate is set by ngModel this.addedDateTo = null this.addedDateFrom = null diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts index c4528637b..58524fa99 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts @@ -96,7 +96,10 @@ import { import { environment } from 'src/environments/environment' import { ClearableBadgeComponent } from '../../common/clearable-badge/clearable-badge.component' import { CustomFieldsQueryDropdownComponent } from '../../common/custom-fields-query-dropdown/custom-fields-query-dropdown.component' -import { DatesDropdownComponent } from '../../common/dates-dropdown/dates-dropdown.component' +import { + DatesDropdownComponent, + RelativeDate, +} from '../../common/dates-dropdown/dates-dropdown.component' import { FilterableDropdownComponent, Intersection, @@ -422,7 +425,7 @@ describe('FilterEditorComponent', () => { value: 'created:[-1 week to now]', }, ] - expect(component.dateCreatedRelativeDate).toEqual(0) // RELATIVE_DATE_QUERYSTRINGS['-1 week to now'] + expect(component.dateCreatedRelativeDate).toEqual(1) // RELATIVE_DATE_QUERYSTRINGS['-1 week to now'] expect(component.textFilter).toBeNull() })) @@ -434,7 +437,7 @@ describe('FilterEditorComponent', () => { value: 'added:[-1 week to now]', }, ] - expect(component.dateAddedRelativeDate).toEqual(0) // RELATIVE_DATE_QUERYSTRINGS['-1 week to now'] + expect(component.dateAddedRelativeDate).toEqual(1) // RELATIVE_DATE_QUERYSTRINGS['-1 week to now'] expect(component.textFilter).toBeNull() })) @@ -1587,10 +1590,8 @@ describe('FilterEditorComponent', () => { const dateCreatedDropdown = fixture.debugElement.queryAll( By.directive(DatesDropdownComponent) )[0] - const dateCreatedBeforeRelativeButton = dateCreatedDropdown.queryAll( - By.css('button') - )[1] - dateCreatedBeforeRelativeButton.triggerEventHandler('click') + component.dateCreatedRelativeDate = RelativeDate.WITHIN_1_WEEK + dateCreatedDropdown.triggerEventHandler('datesSet') fixture.detectChanges() tick(400) expect(component.filterRules).toEqual([ @@ -1606,10 +1607,8 @@ describe('FilterEditorComponent', () => { const dateCreatedDropdown = fixture.debugElement.queryAll( By.directive(DatesDropdownComponent) )[0] - const dateCreatedBeforeRelativeButton = dateCreatedDropdown.queryAll( - By.css('button') - )[1] - dateCreatedBeforeRelativeButton.triggerEventHandler('click') + component.dateCreatedRelativeDate = RelativeDate.WITHIN_1_WEEK + dateCreatedDropdown.triggerEventHandler('datesSet') fixture.detectChanges() tick(400) expect(component.filterRules).toEqual([ @@ -1692,16 +1691,14 @@ describe('FilterEditorComponent', () => { const datesDropdown = fixture.debugElement.query( By.directive(DatesDropdownComponent) ) - const dateCreatedBeforeRelativeButton = datesDropdown.queryAll( - By.css('button') - )[1] - dateCreatedBeforeRelativeButton.triggerEventHandler('click') + component.dateAddedRelativeDate = RelativeDate.WITHIN_1_WEEK + datesDropdown.triggerEventHandler('datesSet') fixture.detectChanges() tick(400) expect(component.filterRules).toEqual([ { rule_type: FILTER_FULLTEXT_QUERY, - value: 'created:[-1 week to now]', + value: 'added:[-1 week to now]', }, ]) })) @@ -1711,16 +1708,14 @@ describe('FilterEditorComponent', () => { const datesDropdown = fixture.debugElement.query( By.directive(DatesDropdownComponent) ) - const dateCreatedBeforeRelativeButton = datesDropdown.queryAll( - By.css('button') - )[1] - dateCreatedBeforeRelativeButton.triggerEventHandler('click') + component.dateAddedRelativeDate = RelativeDate.WITHIN_1_WEEK + datesDropdown.triggerEventHandler('datesSet') fixture.detectChanges() tick(400) expect(component.filterRules).toEqual([ { rule_type: FILTER_FULLTEXT_QUERY, - value: 'foo,created:[-1 week to now]', + value: 'foo,added:[-1 week to now]', }, ]) })) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 0916d9c0d..900e72785 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -135,24 +135,44 @@ const TEXT_FILTER_MODIFIER_NOTNULL = 'not null' const TEXT_FILTER_MODIFIER_GT = 'greater' const TEXT_FILTER_MODIFIER_LT = 'less' -const RELATIVE_DATE_QUERY_REGEXP_CREATED = /created:\[([^\]]+)\]/g -const RELATIVE_DATE_QUERY_REGEXP_ADDED = /added:\[([^\]]+)\]/g +const RELATIVE_DATE_QUERY_REGEXP_CREATED = /created:[\["]([^\]]+)[\]"]/g +const RELATIVE_DATE_QUERY_REGEXP_ADDED = /added:[\["]([^\]]+)[\]"]/g const RELATIVE_DATE_QUERYSTRINGS = [ { relativeDate: RelativeDate.WITHIN_1_WEEK, dateQuery: '-1 week to now', + isRange: true, }, { relativeDate: RelativeDate.WITHIN_1_MONTH, dateQuery: '-1 month to now', + isRange: true, }, { relativeDate: RelativeDate.WITHIN_3_MONTHS, dateQuery: '-3 month to now', + isRange: true, }, { relativeDate: RelativeDate.WITHIN_1_YEAR, dateQuery: '-1 year to now', + isRange: true, + }, + { + relativeDate: RelativeDate.THIS_YEAR, + dateQuery: 'this year', + }, + { + relativeDate: RelativeDate.THIS_MONTH, + dateQuery: 'this month', + }, + { + relativeDate: RelativeDate.TODAY, + dateQuery: 'today', + }, + { + relativeDate: RelativeDate.YESTERDAY, + dateQuery: 'yesterday', }, ] @@ -907,12 +927,11 @@ export class FilterEditorComponent let existingRuleArgs = existingRule?.value.split(',') if (this.dateCreatedRelativeDate !== null) { + const rd = RELATIVE_DATE_QUERYSTRINGS.find( + (qS) => qS.relativeDate == this.dateCreatedRelativeDate + ) queryArgs.push( - `created:[${ - RELATIVE_DATE_QUERYSTRINGS.find( - (qS) => qS.relativeDate == this.dateCreatedRelativeDate - ).dateQuery - }]` + `created:${rd.isRange ? `[${rd.dateQuery}]` : `"${rd.dateQuery}"`}` ) if (existingRule) { queryArgs = existingRuleArgs @@ -921,12 +940,11 @@ export class FilterEditorComponent } } if (this.dateAddedRelativeDate !== null) { + const rd = RELATIVE_DATE_QUERYSTRINGS.find( + (qS) => qS.relativeDate == this.dateAddedRelativeDate + ) queryArgs.push( - `added:[${ - RELATIVE_DATE_QUERYSTRINGS.find( - (qS) => qS.relativeDate == this.dateAddedRelativeDate - ).dateQuery - }]` + `added:${rd.isRange ? `[${rd.dateQuery}]` : `"${rd.dateQuery}"`}` ) if (existingRule) { queryArgs = existingRuleArgs