Skip to content

Commit f82be0c

Browse files
authored
HTM-1701: remove filter validation and move filter state to core state (#1029)
2 parents c44a416 + e7e02df commit f82be0c

40 files changed

+155
-364
lines changed

projects/core/src/lib/components/attribute-list/attribute-list-content/attribute-list-content.component.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ describe('AttributeListContent', () => {
4848
provideMockStore({
4949
initialState: {
5050
...store,
51-
filter: { verifiedCurrentFilterGroups: [] },
51+
core: {
52+
loadStatus: 'LOADED',
53+
filters: { currentFilterGroups: [] },
54+
},
5255
map: { layers: [] },
5356
},
5457
}),

projects/core/src/lib/components/attribute-list/attribute-list-export-button/attribute-list-export-button.component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { AttributeListExportService, SupportedExportFormats } from '../services/
99
import userEvent from '@testing-library/user-event';
1010
import { SharedImportsModule } from '@tailormap-viewer/shared';
1111
import { MatIconTestingModule } from '@angular/material/icon/testing';
12-
import { selectCQLFilters } from '../../../filter/state/filter.selectors';
12+
import { selectCQLFilters } from '../../../state/filter-state/filter.selectors';
1313
import { selectLayers } from '../../../map/state/map.selectors';
1414

1515
const setup = async (layerId: string | null = null, supportedFormats: SupportedExportFormats[] = []) => {

projects/core/src/lib/components/attribute-list/attribute-list-export-button/attribute-list-export-button.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Store } from '@ngrx/store';
77
import {
88
selectColumnsForSelectedTab, selectSelectedTab, selectSelectedTabLayerId, selectSortForSelectedTab,
99
} from '../state/attribute-list.selectors';
10-
import { selectCQLFilters } from '../../../filter/state/filter.selectors';
10+
import { selectCQLFilters } from '../../../state/filter-state/filter.selectors';
1111
import { selectLayers } from '../../../map/state/map.selectors';
1212
import { HiddenLayerFunctionality } from '@tailormap-viewer/api';
1313

projects/core/src/lib/components/attribute-list/attribute-list/attribute-list.component.spec.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AttributeListComponent } from './attribute-list.component';
66
import { AttributeListState, attributeListStateKey } from '../state/attribute-list.state';
77
import { initialMapState, mapStateKey } from '../../../map/state/map.state';
88
import {
9-
AppLayerModel, getAppLayerModel, getLayerTreeNode, TAILORMAP_API_V1_SERVICE, TailormapApiConstants, TailormapApiV1MockService,
9+
getAppLayerModel, getLayerTreeNode, TAILORMAP_API_V1_SERVICE, TailormapApiConstants, TailormapApiV1MockService,
1010
} from '@tailormap-viewer/api';
1111
import { MatIconModule } from '@angular/material/icon';
1212
import { MatIconTestingModule } from '@angular/material/icon/testing';
@@ -22,14 +22,13 @@ import { attributeListReducer } from '../state/attribute-list.reducer';
2222
import { mapReducer } from '../../../map/state/map.reducer';
2323
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
2424
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
25-
import { filterStateKey, initialFilterState } from '../../../filter/state/filter.state';
26-
import { filterReducer } from '../../../filter/state/filter.reducer';
25+
import { initialFilterState } from '../../../state/filter-state/filter.state';
2726
import { AttributeListExportButtonComponent } from '../attribute-list-export-button/attribute-list-export-button.component';
2827
import { coreStateKey } from '../../../state/core.state';
2928
import { coreReducer } from '../../../state/core.reducer';
3029
import { ExtendedAppLayerModel } from '../../../map/models';
3130
import { CoreSharedModule } from '../../../shared';
32-
import { HttpClientTestingModule, provideHttpClientTesting } from '@angular/common/http/testing';
31+
import { provideHttpClientTesting } from '@angular/common/http/testing';
3332
import { provideHttpClient, withXsrfConfiguration } from '@angular/common/http';
3433
import { getMapServiceMock } from '../../../test-helpers/map-service.mock.spec';
3534

@@ -49,11 +48,9 @@ const getStore = (
4948
},
5049
[coreStateKey]: {
5150
loadStatus: 'INITIAL',
51+
filters: initialFilterState,
5252
viewer: {}, // <-- Ensure viewer is always present
5353
},
54-
[filterStateKey]: {
55-
...initialFilterState,
56-
},
5754
};
5855
};
5956

@@ -112,7 +109,6 @@ describe('AttributeList', () => {
112109
const reducers = {
113110
[attributeListStateKey]: attributeListReducer,
114111
[mapStateKey]: mapReducer,
115-
[filterStateKey]: filterReducer,
116112
[coreStateKey]: coreReducer,
117113
};
118114
await render(AttributeListComponent, {

projects/core/src/lib/components/filter/edit-attribute-filters/edit-attribute-filters.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<mat-expansion-panel class="edit-filter-expansion-panel" [expanded]="onlyGroupInListOnInit()">
1+
<mat-expansion-panel class="edit-filter-expansion-panel" [expanded]="expanded()">
22
<mat-expansion-panel-header i18n="@@core.filter.edit-filters">Edit filters</mat-expansion-panel-header>
33
@for (filter of editableFilters(); track filter.id) {
44
<div class="edit-attribute-filters">

projects/core/src/lib/components/filter/edit-attribute-filters/edit-attribute-filters.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
AttributeFilterModel, AttributeType, FilterConditionEnum, FilterToolEnum, SliderFilterInputModeEnum, UniqueValuesService,
44
} from '@tailormap-viewer/api';
55
import { Store } from '@ngrx/store';
6-
import { setSingleFilterDisabled, updateFilter } from '../../../filter/state/filter.actions';
6+
import { setSingleFilterDisabled, updateFilter } from '../../../state/filter-state/filter.actions';
77
import { AttributeFilterHelper } from '@tailormap-viewer/shared';
88
import { DateTime } from 'luxon';
99
import { forkJoin, map, Observable, switchMap, take } from 'rxjs';
@@ -26,7 +26,7 @@ export class EditAttributeFiltersComponent {
2626
public editableFilters = input<AttributeFilterModel[]>([]);
2727
public filterGroupId = input<string | null>(null);
2828
public layerIds = input<string[]>([]);
29-
public onlyGroupInListOnInit = input<boolean>(false);
29+
public expanded = input<boolean>(false);
3030

3131
public isSliderFilter(filter: AttributeFilterModel): boolean {
3232
return filter.editConfiguration?.filterTool === FilterToolEnum.SLIDER;

projects/core/src/lib/components/filter/filter-list-item/filter-list-item.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
[editableFilters]="editableFilters"
2626
[filterGroupId]="filter.id"
2727
[layerIds]="filter.layerIds"
28-
[onlyGroupInListOnInit]="onlyGroupInListOnInit"></tm-edit-attribute-filter>
28+
[expanded]="editFiltersExpanded"></tm-edit-attribute-filter>
2929
</div>
3030
}
3131
<mat-card-actions align="end">

projects/core/src/lib/components/filter/filter-list-item/filter-list-item.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core
22
import { ExtendedFilterGroupModel } from '../../../filter/models/extended-filter-group.model';
33
import { FilterTypeEnum, FilterGroupModel, AttributeFilterModel } from '@tailormap-viewer/api';
44
import { Store } from '@ngrx/store';
5-
import { toggleFilterDisabled } from '../../../filter/state/filter.actions';
5+
import { toggleFilterDisabled } from '../../../state/filter-state/filter.actions';
66
import { AppLayerModel } from '@tailormap-viewer/api';
77
import { setSelectedFilterGroup } from '../state/filter-component.actions';
88
import { RemoveFilterService } from '../services/remove-filter.service';
@@ -31,7 +31,7 @@ export class FilterListItemComponent {
3131
}
3232

3333
@Input()
34-
public onlyGroupInListOnInit = false;
34+
public editFiltersExpanded = false;
3535

3636
private store$ = inject(Store);
3737
private removeFilterService = inject(RemoveFilterService);
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
@for (filter of (filters$ | async); track filter.id) {
2-
<tm-filter-list-item [filterGroup]="filter" [onlyGroupInListOnInit]="onlyGroupInListOnInit"></tm-filter-list-item>
1+
@let filters = filters$ | async;
2+
@for (filter of filters; track filter.id) {
3+
<tm-filter-list-item [filterGroup]="filter" [editFiltersExpanded]="filters?.length === 1"></tm-filter-list-item>
34
}

projects/core/src/lib/components/filter/filter-list/filter-list.component.spec.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,13 @@ import { SharedImportsModule } from '@tailormap-viewer/shared';
55
import { getFilterGroup } from '../../../../../../shared/src/lib/helpers/attribute-filter.helper.spec';
66
import { getAppLayerModel } from '@tailormap-viewer/api';
77
import { FilterListItemComponent } from '../filter-list-item/filter-list-item.component';
8-
import { selectFilterGroupsWithLayers } from '../../../filter/state/filter.selectors';
8+
import { selectFilterGroupsWithLayers } from '../../../state/filter-state/filter.selectors';
99
import { MatIconTestingModule } from '@angular/material/icon/testing';
1010
import { FilterDescriptionComponent } from '../../../filter/filter-description/filter-description.component';
11-
import { AttributeFilterService } from '../../../services/attribute-filter.service';
12-
import { of } from 'rxjs';
1311

1412
describe('FilterListComponent', () => {
1513

1614
test('should render empty list', async () => {
17-
const mockAttributeFilterService = {
18-
addAttributeAliasesToFilters$: jest.fn().mockImplementation((filterGroups) => of(filterGroups)),
19-
};
2015
await render(FilterListComponent, {
2116
imports: [ SharedImportsModule, MatIconTestingModule ],
2217
declarations: [ FilterListItemComponent, FilterDescriptionComponent ],
@@ -34,17 +29,13 @@ describe('FilterListComponent', () => {
3429
},
3530
],
3631
}),
37-
{ provide: AttributeFilterService, useValue: mockAttributeFilterService },
3832
],
3933
});
4034
expect(screen.queryByText('Attribute filter')).not.toBeInTheDocument();
4135
expect(screen.queryByTestId('filter-list-item')).toBeNull();
4236
});
4337

4438
test('should render list with filters', async () => {
45-
const mockAttributeFilterService = {
46-
addAttributeAliasesToFilters$: jest.fn().mockImplementation((filterGroups) => of(filterGroups)),
47-
};
4839
const store = provideMockStore({
4940
initialState: {},
5041
selectors: [
@@ -57,10 +48,7 @@ describe('FilterListComponent', () => {
5748
],
5849
});
5950
await render(FilterListComponent, {
60-
providers: [
61-
store,
62-
{ provide: AttributeFilterService, useValue: mockAttributeFilterService },
63-
],
51+
providers: [store],
6452
declarations: [ FilterListItemComponent, FilterDescriptionComponent ],
6553
imports: [ SharedImportsModule, MatIconTestingModule ],
6654
});

0 commit comments

Comments
 (0)