mirror of
https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend
synced 2025-12-31 09:37:15 +01:00
History aus search state entfernt
This commit is contained in:
@@ -29,7 +29,6 @@ export interface ArticleSearchState {
|
||||
|
||||
items?: ItemDTO[];
|
||||
hits?: number;
|
||||
history?: QueryTokenDTO[];
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
@@ -74,15 +73,20 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
readonly filter$ = combineLatest([this.queryParamsFilter$, this.defaultFilter$]).pipe(
|
||||
map(([selectedFilters, defaultFilters]) => {
|
||||
const filters = [...defaultFilters.filter, ...defaultFilters.inputSelector];
|
||||
const keys = selectedFilters.split(';');
|
||||
const keys = selectedFilters?.split(';');
|
||||
|
||||
filters?.forEach((filter) => {
|
||||
filter?.input?.forEach((input) => {
|
||||
input?.options?.forEach((option) => {
|
||||
option.selected = keys.includes(String(option.key));
|
||||
// Wenn selectedFilters == undefined dann soll der default Filter ferwendet werden
|
||||
// ist der selectedFilter ein leerstring ist dann sind alle Filter nicht selected
|
||||
// TODO: Logik ist doppelt und sollte in eine extra funktion ausgelagert werden (primaryFilter$)
|
||||
if (selectedFilters != undefined) {
|
||||
filters?.forEach((filter) => {
|
||||
filter?.input?.forEach((input) => {
|
||||
input?.options?.forEach((option) => {
|
||||
option.selected = keys.includes(String(option.key));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return filters.reduce((agg, filter) => [...agg, ...filter.input], []) as Filter[];
|
||||
})
|
||||
@@ -91,15 +95,20 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
readonly primaryFilter$ = combineLatest([this.queryParamsPrimaryFilter$, this.defaultFilter$]).pipe(
|
||||
map(([selectedFilters, defaultFilters]) => {
|
||||
const filters = [...defaultFilters.main];
|
||||
const keys = selectedFilters.split(';');
|
||||
const keys = selectedFilters?.split(';');
|
||||
|
||||
filters?.forEach((filter) => {
|
||||
filter?.input?.forEach((input) => {
|
||||
input?.options?.forEach((option) => {
|
||||
option.selected = keys.includes(String(option.key));
|
||||
// Wenn selectedFilters == undefined dann soll der default Filter ferwendet werden
|
||||
// ist der selectedFilter ein leerstring ist dann sind alle Filter nicht selected
|
||||
// TODO: Logik ist doppelt und sollte in eine extra funktion ausgelagert werden (filter$)
|
||||
if (selectedFilters != undefined) {
|
||||
filters?.forEach((filter) => {
|
||||
filter?.input?.forEach((input) => {
|
||||
input?.options?.forEach((option) => {
|
||||
option.selected = keys.includes(String(option.key));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return filters.reduce((agg, filter) => [...agg, ...filter.input], []) as Filter[];
|
||||
})
|
||||
@@ -131,23 +140,22 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
map(([orderBy, desc, orderByOptions]) => orderByOptions.filter((opt) => opt.by === orderBy && !!opt.desc === Boolean(desc)))
|
||||
);
|
||||
|
||||
readonly queryToken$ = combineLatest([this.queryTokenInput$, this.queryTokenFilter$, this.queryTokenOrderBy$]).pipe(
|
||||
map(([input, filter, orderBy]) => {
|
||||
const query = {
|
||||
input,
|
||||
orderBy,
|
||||
filter,
|
||||
returnStockData: false,
|
||||
} as QueryTokenDTO;
|
||||
|
||||
const friendlyName = this.getFriendlyName(query);
|
||||
|
||||
if (!!friendlyName) {
|
||||
query.friendlyName = friendlyName;
|
||||
}
|
||||
|
||||
return query;
|
||||
})
|
||||
readonly queryToken$ = combineLatest([
|
||||
this.queryTokenInput$,
|
||||
this.queryTokenFilter$,
|
||||
this.queryTokenOrderBy$,
|
||||
this.queryParamsQuery$,
|
||||
]).pipe(
|
||||
map(
|
||||
([input, filter, orderBy, friendlyName]) =>
|
||||
({
|
||||
input,
|
||||
orderBy,
|
||||
filter,
|
||||
returnStockData: false,
|
||||
friendlyName,
|
||||
} as QueryTokenDTO)
|
||||
)
|
||||
);
|
||||
|
||||
private connectedRouteSubscription: Subscription;
|
||||
@@ -206,19 +214,6 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
return { disconnect: () => this.disconnect() };
|
||||
}
|
||||
|
||||
readonly loadHistory = this.effect(($) =>
|
||||
$.pipe(
|
||||
switchMap((_) =>
|
||||
this.catalog.getSearchHistory({ take: 5 }).pipe(
|
||||
tapResponse(
|
||||
(history) => this.patchState({ history }),
|
||||
(err) => {}
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
async updateBreadcrumbs() {
|
||||
const params = this.get(this.queryParamsSelector);
|
||||
const crumbs = await this.breadcrumb
|
||||
@@ -239,12 +234,6 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
});
|
||||
}
|
||||
|
||||
getFriendlyName(query: QueryTokenDTO) {
|
||||
return this.get((s) => s.history).find((history) =>
|
||||
isEqual({ input: history.input, filter: history.filter }, { input: query.input, filter: query.filter })
|
||||
)?.friendlyName;
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.connectedRouteSubscription?.unsubscribe();
|
||||
}
|
||||
@@ -301,4 +290,11 @@ export class ArticleSearchStore extends ComponentStore<ArticleSearchState> {
|
||||
|
||||
this.updateQueryParams();
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.setState({
|
||||
params: {},
|
||||
searchState: '',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user