{"version":3,"names":["fieldFilterToUrlParam","filter","fieldId","type","values","join","fieldFilterFromUrlParam","param","split","FieldFilterDto","QueryParamStateService","constructor","this","_reviver","value","test","date","Date","state","params","URLSearchParams","window","location","search","forEach","key","indexOf","replace","searchParams","Object","entries","undefined","delete","set","toISOString","Array","isArray","has","v","append","toString","history","replaceState","pathname","QueryParamStateStore","StateStore"],"sources":["./src/utils/storage.ts"],"sourcesContent":["import { setQueryParam } from './query-params';\nimport { key } from 'ionicons/icons';\nimport { FieldFilterDto } from '../api/APIClient';\n\nexport interface IStateService{\n\n _reviver?: (...args: any[]) => any;\n state: any;\n\n}\n\nconst getCurrentPath = (): string => {\n return window.location.pathname;\n}\n\nexport const fieldFilterToUrlParam = (filter: FieldFilterDto) => {\n return `${filter.fieldId},${filter.type},${filter.values.join(',')}`;\n}\n\nexport const fieldFilterFromUrlParam = (param: string): FieldFilterDto => {\n\n const [fieldId, type, ...values] = param.split(',');\n\n return new FieldFilterDto({\n fieldId,\n type: +type,\n values\n })\n}\n\nexport class LocalStorageStateService implements IStateService {\n\n _reviver = (key, value) => {\n if ('string' === typeof value && /^\\d{4}-[01]\\d-[0-3]\\dT[012]\\d(?::[0-6]\\d){2}\\.\\d{3}Z$/.test(value)) {\n var date = new Date(value);\n if (+date === +date) {\n return date;\n }\n }\n return value;\n }\n\n set state(value: any) {\n localStorage.setItem(getCurrentPath(), JSON.stringify(value));\n }\n\n get state() {\n return JSON.parse(localStorage.getItem(getCurrentPath()), this._reviver);\n }\n}\n\nexport class SessionStorageStateService implements IStateService {\n\n _reviver = (key, value) => {\n if ('string' === typeof value && /^\\d{4}-[01]\\d-[0-3]\\dT[012]\\d(?::[0-6]\\d){2}\\.\\d{3}Z$/.test(value)) {\n var date = new Date(value);\n if (+date === +date) {\n return date;\n }\n }\n return value;\n }\n\n set state(value: any) {\n sessionStorage.setItem(getCurrentPath(), JSON.stringify(value));\n }\n\n get state() {\n return JSON.parse(sessionStorage.getItem(getCurrentPath()), this._reviver);\n }\n}\n\nexport class QueryParamStateService implements IStateService {\n\n _reviver = (value) => {\n\n //Revive Dates\n if ('string' === typeof value && /^\\d{4}-[01]\\d-[0-3]\\dT[012]\\d(?::[0-6]\\d){2}\\.\\d{3}Z$/.test(value)) {\n var date = new Date(value);\n if (+date === +date) {\n return date;\n }\n\n //Revive Integers\n } else if ('string' === typeof value && /^[0-9]+$/.test(value)) {\n return +value;\n }\n return value;\n }\n\n get state() {\n\n const params = new URLSearchParams(window.location.search);\n\n let state = {};\n\n params.forEach((value, key) => {\n\n if (key.indexOf('[]') !== -1) {\n key = key.replace('[]', '');\n\n if (key === 'fieldFilters') {\n state[key] = state[key] ? [...state[key], fieldFilterFromUrlParam(value)] : [fieldFilterFromUrlParam(value)];\n } else {\n state[key] = state[key] ? [...state[key], this._reviver(value)] : [this._reviver(value)];\n }\n\n } else {\n state[key] = this._reviver(value);\n }\n\n });\n\n return state;\n }\n\n set state(state: {[key: string]: any}) {\n const searchParams = new URLSearchParams(window.location.search);\n Object.entries(state).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n searchParams.delete(key)\n return;\n }\n if (value instanceof Date) {\n searchParams.set(key, value.toISOString());\n } else if(Array.isArray(value)) {\n\n if (searchParams.has(`${key}[]`)) {\n searchParams.delete(`${key}[]`);\n }\n\n value.forEach((v) => {\n\n if (key === 'fieldFilters') {\n searchParams.append(`${key}[]`, fieldFilterToUrlParam(v as FieldFilterDto))\n } else {\n searchParams.append(`${key}[]`, v.toString());\n }\n\n })\n }\n else {\n searchParams.set(key, value.toString());\n }\n })\n\n history.replaceState(null, null, `${window.location.pathname}?${searchParams.toString()}`);\n }\n}\n\n\n\n\nconst SessionStateStore = new SessionStorageStateService();\nconst QueryParamStateStore = new QueryParamStateService();\n\nexport const StateStore: IStateService = QueryParamStateStore;\n\n\n\n"],"mappings":"oCAeO,MAAMA,EAAyBC,GAC7B,GAAGA,EAAOC,WAAWD,EAAOE,QAAQF,EAAOG,OAAOC,KAAK,OAGzD,MAAMC,EAA2BC,IAEtC,MAAOL,EAASC,KAASC,GAAUG,EAAMC,MAAM,KAE/C,OAAO,IAAIC,EAAe,CACxBP,UACAC,MAAOA,EACPC,UACA,E,MA6CSM,EAAbC,cAEEC,KAAAC,SAAYC,IAGV,GAAI,kBAAoBA,GAAS,wDAAwDC,KAAKD,GAAQ,CACpG,IAAIE,EAAO,IAAIC,KAAKH,GACpB,IAAKE,KAAUA,EAAM,CACnB,OAAOA,C,OAIJ,GAAI,kBAAoBF,GAAS,WAAWC,KAAKD,GAAQ,CAC9D,OAAQA,C,CAEV,OAAOA,CAAK,C,CAGVI,YAEF,MAAMC,EAAS,IAAIC,gBAAgBC,OAAOC,SAASC,QAEnD,IAAIL,EAAQ,GAEZC,EAAOK,SAAQ,CAACV,EAAOW,KAErB,GAAIA,EAAIC,QAAQ,SAAW,EAAG,CAC5BD,EAAMA,EAAIE,QAAQ,KAAM,IAExB,GAAIF,IAAQ,eAAgB,CAC1BP,EAAMO,GAAOP,EAAMO,GAAO,IAAIP,EAAMO,GAAMnB,EAAwBQ,IAAU,CAACR,EAAwBQ,G,KAChG,CACLI,EAAMO,GAAOP,EAAMO,GAAO,IAAIP,EAAMO,GAAMb,KAAKC,SAASC,IAAU,CAACF,KAAKC,SAASC,G,MAG9E,CACLI,EAAMO,GAAOb,KAAKC,SAASC,E,KAK/B,OAAOI,C,CAGLA,UAAMA,GACR,MAAMU,EAAe,IAAIR,gBAAgBC,OAAOC,SAASC,QACzDM,OAAOC,QAAQZ,GAAOM,SAAQ,EAAEC,EAAKX,MACnC,GAAIA,IAAUiB,WAAajB,IAAU,KAAM,CACzCc,EAAaI,OAAOP,GACpB,M,CAEF,GAAIX,aAAiBG,KAAM,CACzBW,EAAaK,IAAIR,EAAKX,EAAMoB,c,MACvB,GAAGC,MAAMC,QAAQtB,GAAQ,CAE9B,GAAIc,EAAaS,IAAI,GAAGZ,OAAU,CAChCG,EAAaI,OAAO,GAAGP,M,CAGzBX,EAAMU,SAASc,IAEb,GAAIb,IAAQ,eAAgB,CAC1BG,EAAaW,OAAO,GAAGd,MAASzB,EAAsBsC,G,KACjD,CACLV,EAAaW,OAAO,GAAGd,MAASa,EAAEE,W,SAKnC,CACHZ,EAAaK,IAAIR,EAAKX,EAAM0B,W,KAIhCC,QAAQC,aAAa,KAAM,KAAM,GAAGrB,OAAOC,SAASqB,YAAYf,EAAaY,a,EAQjF,MAAMI,EAAuB,IAAIlC,E,MAEpBmC,EAA4BD,S"}