From 17af34ff94b0974209b8c6e6728758749f5b2600 Mon Sep 17 00:00:00 2001 From: Willem Dantuma Date: Wed, 19 Feb 2020 11:15:31 +0100 Subject: [PATCH] Move query state to common --- projects/common/src/fm/common.module.ts | 2 + projects/common/src/fm/models/query.state.ts | 12 +++++ .../fm/services/state-serializer.service.ts | 53 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 projects/common/src/fm/models/query.state.ts create mode 100644 projects/common/src/fm/services/state-serializer.service.ts diff --git a/projects/common/src/fm/common.module.ts b/projects/common/src/fm/common.module.ts index ec5beb5..a7b7239 100644 --- a/projects/common/src/fm/common.module.ts +++ b/projects/common/src/fm/common.module.ts @@ -39,6 +39,7 @@ import { IItemTask, ItemTask } from './models/itemTask'; import { IListItem } from './models/list.item'; import { ITypeaheadItem } from './models/typeahead.item'; import { IUser } from './models/user'; +import { IQueryState } from './models/query.state'; import { ICodeListItem } from './models/code.list.item'; import * as commonActions from './actions/app-common.actions'; import * as commonReducers from './reducers/app-common.reducer'; @@ -67,6 +68,7 @@ export { ITypeaheadItem, IUser, ICodeListItem, + IQueryState, commonActions, commonReducers, IAuthconfigFactory, diff --git a/projects/common/src/fm/models/query.state.ts b/projects/common/src/fm/models/query.state.ts new file mode 100644 index 0000000..ea76fda --- /dev/null +++ b/projects/common/src/fm/models/query.state.ts @@ -0,0 +1,12 @@ +export interface IQueryState { + itemCode: string; + parentCode: string; + level: number; + itemType: string; + query: string; + tags: string; + bboxFilter: boolean; + startDate: Date; + endDate: Date; + bbox: number[]; +} diff --git a/projects/common/src/fm/services/state-serializer.service.ts b/projects/common/src/fm/services/state-serializer.service.ts new file mode 100644 index 0000000..f4d8195 --- /dev/null +++ b/projects/common/src/fm/services/state-serializer.service.ts @@ -0,0 +1,53 @@ +import { Injectable, Query } from '@angular/core'; +import { IQueryState } from '../models/query.state'; + +@Injectable({ + providedIn: 'root', +}) +export class StateSerializerService { + + serialize(queryState: IQueryState): string { + + var state = ""; + state += (queryState.itemCode) ? queryState.itemCode : ""; + state += ";"; + state += (queryState.parentCode) ? queryState.parentCode + ";" + queryState.level.toString() : ";"; + state += ";"; + state += (queryState.itemType) ? queryState.itemType : ""; + state += ";"; + state += (queryState.query) ? encodeURIComponent( queryState.query ) : ""; + state += ";"; + state += (queryState.tags) ? encodeURIComponent( queryState.tags ) : ""; + state += ";"; + state += (queryState.bboxFilter) ? "1" : "0"; + state += ";"; + state += (queryState.startDate) ? JSON.stringify(queryState.startDate) : ""; + state += ";"; + state += (queryState.endDate) ? JSON.stringify(queryState.endDate) : ""; + state += ";"; + state += (queryState.bboxFilter && queryState.bbox && queryState.bbox.length>0) ? JSON.stringify(queryState.bbox) : ""; + + return btoa(state); + } + + deserialize(queryState: string): IQueryState { + var state: IQueryState = { itemCode: null, parentCode: null, level: 1, itemType: null, query: null, tags: null, bboxFilter: false, startDate: null, endDate: null,bbox:[] }; + var stateParts = atob(queryState).split(";"); + if (stateParts.length == 10) { + if (stateParts[0] != "") state.itemCode = stateParts[0]; + if (stateParts[1] != "") { + state.parentCode = stateParts[1]; + state.level = parseInt(stateParts[2]); + } + if (stateParts[3] != "") state.itemType = stateParts[3]; + if (stateParts[4] != "") state.query = decodeURIComponent(stateParts[4]); + if (stateParts[5] != "") state.tags = decodeURIComponent( stateParts[5]); + if (stateParts[6] != "") state.bboxFilter = parseInt(stateParts[6]) == 1; + if (stateParts[7] != "") state.startDate = new Date(Date.parse(JSON.parse(stateParts[7]))); + if (stateParts[8] != "") state.endDate = new Date(Date.parse(JSON.parse(stateParts[8]))); + if (stateParts[9] != "") state.bbox = JSON.parse(stateParts[9]); + } + + return state; + } +}