From 09db49a105c0adb9c59b3db09f29c608b2c47172 Mon Sep 17 00:00:00 2001 From: Stacey Gammon Date: Wed, 10 Oct 2018 15:19:29 +0100 Subject: [PATCH] Expand typings to include hash stuff and expand the State type definition more. --- src/ui/public/state_management/state.d.ts | 8 +++++++- ...provider.js => get_unhashable_states_provider.ts} | 8 ++++++-- ...unhash_query_string.js => unhash_query_string.ts} | 12 +++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) rename src/ui/public/state_management/state_hashing/{get_unhashable_states_provider.js => get_unhashable_states_provider.ts} (75%) rename src/ui/public/state_management/state_hashing/{unhash_query_string.js => unhash_query_string.ts} (65%) diff --git a/src/ui/public/state_management/state.d.ts b/src/ui/public/state_management/state.d.ts index 4130dbfb3eeeeb2..39e4e672d02034c 100644 --- a/src/ui/public/state_management/state.d.ts +++ b/src/ui/public/state_management/state.d.ts @@ -17,4 +17,10 @@ * under the License. */ -export type State = Record; +export interface State { + [key: string]: any; + translateHashToRison: ( + stateHashOrRison: string | string[] | undefined + ) => string | string[] | undefined; + getQueryParamName: () => string; +} diff --git a/src/ui/public/state_management/state_hashing/get_unhashable_states_provider.js b/src/ui/public/state_management/state_hashing/get_unhashable_states_provider.ts similarity index 75% rename from src/ui/public/state_management/state_hashing/get_unhashable_states_provider.js rename to src/ui/public/state_management/state_hashing/get_unhashable_states_provider.ts index 693da1b990c45d2..6c43947640ed395 100644 --- a/src/ui/public/state_management/state_hashing/get_unhashable_states_provider.js +++ b/src/ui/public/state_management/state_hashing/get_unhashable_states_provider.ts @@ -17,8 +17,12 @@ * under the License. */ -export function getUnhashableStatesProvider(getAppState, globalState) { - return function getUnhashableStates() { +import { AppState } from '../app_state'; +import { GlobalState } from '../global_state'; +import { State } from '../state'; + +export function getUnhashableStatesProvider(getAppState: () => AppState, globalState: GlobalState) { + return function getUnhashableStates(): State[] { return [getAppState(), globalState].filter(Boolean); }; } diff --git a/src/ui/public/state_management/state_hashing/unhash_query_string.js b/src/ui/public/state_management/state_hashing/unhash_query_string.ts similarity index 65% rename from src/ui/public/state_management/state_hashing/unhash_query_string.js rename to src/ui/public/state_management/state_hashing/unhash_query_string.ts index be1f9c94a3c5ae8..242b840282f39e7 100644 --- a/src/ui/public/state_management/state_hashing/unhash_query_string.js +++ b/src/ui/public/state_management/state_hashing/unhash_query_string.ts @@ -18,8 +18,18 @@ */ import { mapValues } from 'lodash'; +import { ParsedUrlQuery } from 'querystring'; +import { State } from '../state'; -export function unhashQueryString(parsedQueryString, states) { +/** + * Takes in a parsed url query and state objects, finding the state objects that match the query parameters and expanding + * the hashed state. For example, a url query string like '?_a=@12353&_g=@19028df' will become + * '?_a=[expanded app state here]&_g=[expanded global state here]. This is used when storeStateInSessionStorage is turned on. + */ +export function unhashQueryString( + parsedQueryString: ParsedUrlQuery, + states: State[] +): ParsedUrlQuery { return mapValues(parsedQueryString, (val, key) => { const state = states.find(s => key === s.getQueryParamName()); return state ? state.translateHashToRison(val) : val;