Enhancement: date picker and date filter dropdown improvements (#9033)

This commit is contained in:
shamoon
2025-02-06 23:01:48 -08:00
committed by GitHub
parent 52ab07c673
commit e08606af6e
20 changed files with 561 additions and 254 deletions

View File

@@ -94,11 +94,11 @@
<pngx-dates-dropdown class="flex-fill fade" [class.show]="show"
title="Dates" i18n-title
(datesSet)="updateRules()"
[(createdDateBefore)]="dateCreatedBefore"
[(createdDateAfter)]="dateCreatedAfter"
[(createdDateTo)]="dateCreatedTo"
[(createdDateFrom)]="dateCreatedFrom"
[(createdRelativeDate)]="dateCreatedRelativeDate"
[(addedDateBefore)]="dateAddedBefore"
[(addedDateAfter)]="dateAddedAfter"
[(addedDateTo)]="dateAddedTo"
[(addedDateFrom)]="dateAddedFrom"
[(addedRelativeDate)]="dateAddedRelativeDate">
</pngx-dates-dropdown>
<pngx-permissions-filter-dropdown class="flex-fill fade" [class.show]="show"

View File

@@ -32,6 +32,8 @@ import { DocumentType } from 'src/app/data/document-type'
import {
FILTER_ADDED_AFTER,
FILTER_ADDED_BEFORE,
FILTER_ADDED_FROM,
FILTER_ADDED_TO,
FILTER_ASN,
FILTER_ASN_GT,
FILTER_ASN_ISNULL,
@@ -39,6 +41,8 @@ import {
FILTER_CORRESPONDENT,
FILTER_CREATED_AFTER,
FILTER_CREATED_BEFORE,
FILTER_CREATED_FROM,
FILTER_CREATED_TO,
FILTER_CUSTOM_FIELDS_QUERY,
FILTER_CUSTOM_FIELDS_TEXT,
FILTER_DOCUMENT_TYPE,
@@ -465,48 +469,92 @@ describe('FilterEditorComponent', () => {
])
}))
it('should ingest filter rules for date created after', fakeAsync(() => {
expect(component.dateCreatedAfter).toBeNull()
it('should ingest filter rules for date created after and adjust date by 1 day', fakeAsync(() => {
expect(component.dateCreatedFrom).toBeNull()
component.filterRules = [
{
rule_type: FILTER_CREATED_AFTER,
value: '2023-05-14',
},
]
expect(component.dateCreatedAfter).toEqual('2023-05-14')
expect(component.dateCreatedFrom).toEqual('2023-05-15')
}))
it('should ingest filter rules for date created before', fakeAsync(() => {
expect(component.dateCreatedBefore).toBeNull()
it('should ingest filter rules for date created from', fakeAsync(() => {
expect(component.dateCreatedFrom).toBeNull()
component.filterRules = [
{
rule_type: FILTER_CREATED_FROM,
value: '2023-05-14',
},
]
expect(component.dateCreatedFrom).toEqual('2023-05-14')
}))
it('should ingest filter rules for date created before and adjust date by 1 day', fakeAsync(() => {
expect(component.dateCreatedTo).toBeNull()
component.filterRules = [
{
rule_type: FILTER_CREATED_BEFORE,
value: '2023-05-14',
},
]
expect(component.dateCreatedBefore).toEqual('2023-05-14')
expect(component.dateCreatedTo).toEqual('2023-05-13')
}))
it('should ingest filter rules for date added after', fakeAsync(() => {
expect(component.dateAddedAfter).toBeNull()
it('should ingest filter rules for date created to', fakeAsync(() => {
expect(component.dateCreatedTo).toBeNull()
component.filterRules = [
{
rule_type: FILTER_CREATED_TO,
value: '2023-05-14',
},
]
expect(component.dateCreatedTo).toEqual('2023-05-14')
}))
it('should ingest filter rules for date added after and adjust date by 1 day', fakeAsync(() => {
expect(component.dateAddedFrom).toBeNull()
component.filterRules = [
{
rule_type: FILTER_ADDED_AFTER,
value: '2023-05-14',
},
]
expect(component.dateAddedAfter).toEqual('2023-05-14')
expect(component.dateAddedFrom).toEqual('2023-05-15')
}))
it('should ingest filter rules for date added before', fakeAsync(() => {
expect(component.dateAddedBefore).toBeNull()
it('should ingest filter rules for date added from', fakeAsync(() => {
expect(component.dateAddedFrom).toBeNull()
component.filterRules = [
{
rule_type: FILTER_ADDED_FROM,
value: '2023-05-14',
},
]
expect(component.dateAddedFrom).toEqual('2023-05-14')
}))
it('should ingest filter rules for date added before and adjust date by 1 day', fakeAsync(() => {
expect(component.dateAddedTo).toBeNull()
component.filterRules = [
{
rule_type: FILTER_ADDED_BEFORE,
value: '2023-05-14',
},
]
expect(component.dateAddedBefore).toEqual('2023-05-14')
expect(component.dateAddedTo).toEqual('2023-05-13')
}))
it('should ingest filter rules for date added to', fakeAsync(() => {
expect(component.dateAddedTo).toBeNull()
component.filterRules = [
{
rule_type: FILTER_ADDED_TO,
value: '2023-05-14',
},
]
expect(component.dateAddedTo).toEqual('2023-05-14')
}))
it('should ingest filter rules for has all tags', fakeAsync(() => {
@@ -1464,7 +1512,7 @@ describe('FilterEditorComponent', () => {
])
}))
it('should convert user input to correct filter rules on date created after', fakeAsync(() => {
it('should convert user input to correct filter rules on date created from', fakeAsync(() => {
const dateCreatedDropdown = fixture.debugElement.queryAll(
By.directive(DatesDropdownComponent)
)[0]
@@ -1473,18 +1521,18 @@ describe('FilterEditorComponent', () => {
dateCreatedAfter.nativeElement.value = '05/14/2023'
// dateCreatedAfter.triggerEventHandler('change')
// TODO: why isn't ngModel triggering this on change?
component.dateCreatedAfter = '2023-05-14'
component.dateCreatedFrom = '2023-05-14'
fixture.detectChanges()
tick(400)
expect(component.filterRules).toEqual([
{
rule_type: FILTER_CREATED_AFTER,
rule_type: FILTER_CREATED_FROM,
value: '2023-05-14',
},
])
}))
it('should convert user input to correct filter rules on date created before', fakeAsync(() => {
it('should convert user input to correct filter rules on date created to', fakeAsync(() => {
const dateCreatedDropdown = fixture.debugElement.queryAll(
By.directive(DatesDropdownComponent)
)[0]
@@ -1493,12 +1541,12 @@ describe('FilterEditorComponent', () => {
dateCreatedBefore.nativeElement.value = '05/14/2023'
// dateCreatedBefore.triggerEventHandler('change')
// TODO: why isn't ngModel triggering this on change?
component.dateCreatedBefore = '2023-05-14'
component.dateCreatedTo = '2023-05-14'
fixture.detectChanges()
tick(400)
expect(component.filterRules).toEqual([
{
rule_type: FILTER_CREATED_BEFORE,
rule_type: FILTER_CREATED_TO,
value: '2023-05-14',
},
])
@@ -1578,12 +1626,12 @@ describe('FilterEditorComponent', () => {
dateAddedAfter.nativeElement.value = '05/14/2023'
// dateAddedAfter.triggerEventHandler('change')
// TODO: why isn't ngModel triggering this on change?
component.dateAddedAfter = '2023-05-14'
component.dateAddedFrom = '2023-05-14'
fixture.detectChanges()
tick(400)
expect(component.filterRules).toEqual([
{
rule_type: FILTER_ADDED_AFTER,
rule_type: FILTER_ADDED_FROM,
value: '2023-05-14',
},
])
@@ -1598,12 +1646,12 @@ describe('FilterEditorComponent', () => {
dateAddedBefore.nativeElement.value = '05/14/2023'
// dateAddedBefore.triggerEventHandler('change')
// TODO: why isn't ngModel triggering this on change?
component.dateAddedBefore = '2023-05-14'
component.dateAddedTo = '2023-05-14'
fixture.detectChanges()
tick(400)
expect(component.filterRules).toEqual([
{
rule_type: FILTER_ADDED_BEFORE,
rule_type: FILTER_ADDED_TO,
value: '2023-05-14',
},
])

View File

@@ -38,6 +38,8 @@ import { FilterRule } from 'src/app/data/filter-rule'
import {
FILTER_ADDED_AFTER,
FILTER_ADDED_BEFORE,
FILTER_ADDED_FROM,
FILTER_ADDED_TO,
FILTER_ASN,
FILTER_ASN_GT,
FILTER_ASN_ISNULL,
@@ -45,6 +47,8 @@ import {
FILTER_CORRESPONDENT,
FILTER_CREATED_AFTER,
FILTER_CREATED_BEFORE,
FILTER_CREATED_FROM,
FILTER_CREATED_TO,
FILTER_CUSTOM_FIELDS_QUERY,
FILTER_CUSTOM_FIELDS_TEXT,
FILTER_DOCUMENT_TYPE,
@@ -133,19 +137,19 @@ const RELATIVE_DATE_QUERY_REGEXP_CREATED = /created:\[([^\]]+)\]/g
const RELATIVE_DATE_QUERY_REGEXP_ADDED = /added:\[([^\]]+)\]/g
const RELATIVE_DATE_QUERYSTRINGS = [
{
relativeDate: RelativeDate.LAST_7_DAYS,
relativeDate: RelativeDate.WITHIN_1_WEEK,
dateQuery: '-1 week to now',
},
{
relativeDate: RelativeDate.LAST_MONTH,
relativeDate: RelativeDate.WITHIN_1_MONTH,
dateQuery: '-1 month to now',
},
{
relativeDate: RelativeDate.LAST_3_MONTHS,
relativeDate: RelativeDate.WITHIN_3_MONTHS,
dateQuery: '-3 month to now',
},
{
relativeDate: RelativeDate.LAST_YEAR,
relativeDate: RelativeDate.WITHIN_1_YEAR,
dateQuery: '-1 year to now',
},
]
@@ -349,10 +353,10 @@ export class FilterEditorComponent
storagePathSelectionModel = new FilterableDropdownSelectionModel()
customFieldQueriesModel = new CustomFieldQueriesModel()
dateCreatedBefore: string
dateCreatedAfter: string
dateAddedBefore: string
dateAddedAfter: string
dateCreatedTo: string
dateCreatedFrom: string
dateAddedTo: string
dateAddedFrom: string
dateCreatedRelativeDate: RelativeDate
dateAddedRelativeDate: RelativeDate
@@ -385,10 +389,10 @@ export class FilterEditorComponent
this.customFieldQueriesModel.clear(false)
this._textFilter = null
this._moreLikeId = null
this.dateAddedBefore = null
this.dateAddedAfter = null
this.dateCreatedBefore = null
this.dateCreatedAfter = null
this.dateAddedTo = null
this.dateAddedFrom = null
this.dateCreatedTo = null
this.dateCreatedFrom = null
this.dateCreatedRelativeDate = null
this.dateAddedRelativeDate = null
this.textFilterModifier = TEXT_FILTER_MODIFIER_EQUALS
@@ -458,16 +462,40 @@ export class FilterEditorComponent
})
break
case FILTER_CREATED_AFTER:
this.dateCreatedAfter = rule.value
// Old rules require adjusting date by a day
const createdAfter = new Date(rule.value)
createdAfter.setDate(createdAfter.getDate() + 1)
this.dateCreatedFrom = createdAfter.toISOString().split('T')[0]
break
case FILTER_CREATED_BEFORE:
this.dateCreatedBefore = rule.value
// Old rules require adjusting date by a day
const createdBefore = new Date(rule.value)
createdBefore.setDate(createdBefore.getDate() - 1)
this.dateCreatedTo = createdBefore.toISOString().split('T')[0]
break
case FILTER_ADDED_AFTER:
this.dateAddedAfter = rule.value
// Old rules require adjusting date by a day
const addedAfter = new Date(rule.value)
addedAfter.setDate(addedAfter.getDate() + 1)
this.dateAddedFrom = addedAfter.toISOString().split('T')[0]
break
case FILTER_ADDED_BEFORE:
this.dateAddedBefore = rule.value
// Old rules require adjusting date by a day
const addedBefore = new Date(rule.value)
addedBefore.setDate(addedBefore.getDate() - 1)
this.dateAddedTo = addedBefore.toISOString().split('T')[0]
break
case FILTER_CREATED_FROM:
this.dateCreatedFrom = rule.value
break
case FILTER_CREATED_TO:
this.dateCreatedTo = rule.value
break
case FILTER_ADDED_FROM:
this.dateAddedFrom = rule.value
break
case FILTER_ADDED_TO:
this.dateAddedTo = rule.value
break
case FILTER_HAS_TAGS_ALL:
this.tagSelectionModel.logicalOperator = LogicalOperator.And
@@ -814,28 +842,28 @@ export class FilterEditorComponent
value: JSON.stringify(queries[0]),
})
}
if (this.dateCreatedBefore) {
if (this.dateCreatedTo) {
filterRules.push({
rule_type: FILTER_CREATED_BEFORE,
value: this.dateCreatedBefore,
rule_type: FILTER_CREATED_TO,
value: this.dateCreatedTo,
})
}
if (this.dateCreatedAfter) {
if (this.dateCreatedFrom) {
filterRules.push({
rule_type: FILTER_CREATED_AFTER,
value: this.dateCreatedAfter,
rule_type: FILTER_CREATED_FROM,
value: this.dateCreatedFrom,
})
}
if (this.dateAddedBefore) {
if (this.dateAddedTo) {
filterRules.push({
rule_type: FILTER_ADDED_BEFORE,
value: this.dateAddedBefore,
rule_type: FILTER_ADDED_TO,
value: this.dateAddedTo,
})
}
if (this.dateAddedAfter) {
if (this.dateAddedFrom) {
filterRules.push({
rule_type: FILTER_ADDED_AFTER,
value: this.dateAddedAfter,
rule_type: FILTER_ADDED_FROM,
value: this.dateAddedFrom,
})
}
if (