diff --git a/frontend/app/constants/storageKeys.ts b/frontend/app/constants/storageKeys.ts index ee39d53d6..2ae160d49 100644 --- a/frontend/app/constants/storageKeys.ts +++ b/frontend/app/constants/storageKeys.ts @@ -1,3 +1,4 @@ export const SKIP_TO_ISSUE = "__$session-skipToIssue$__" export const TIMEZONE = "__$session-timezone$__" -export const DURATION_FILTER = "__$session-durationFilter$__" \ No newline at end of file +export const DURATION_FILTER = "__$session-durationFilter$__" +export const SESSION_FILTER = "__$session-filter$__" \ No newline at end of file diff --git a/frontend/app/duck/sessions.js b/frontend/app/duck/sessions.js index 57fdcbf5d..633cf0942 100644 --- a/frontend/app/duck/sessions.js +++ b/frontend/app/duck/sessions.js @@ -4,11 +4,11 @@ import ErrorStack from 'Types/session/errorStack'; import Watchdog from 'Types/watchdog'; import { clean as cleanParams } from 'App/api_client'; import withRequestState, { RequestTypes } from './requestStateCreator'; -import { getRE } from 'App/utils'; +import { getRE, setSessionFilter, getSessionFilter, compareJsonObjects } from 'App/utils'; import { LAST_7_DAYS } from 'Types/app/period'; import { getDateRangeFromValue } from 'App/dateRange'; -const name = 'sessions'; +const name = 'sessions'; const INIT = 'sessions/INIT'; const FETCH_LIST = new RequestTypes('sessions/FETCH_LIST'); const FETCH = new RequestTypes('sessions/FETCH'); @@ -27,7 +27,6 @@ const SET_FUNNEL_PAGE_FLAG = 'sessions/SET_FUNNEL_PAGE_FLAG'; const SET_TIMELINE_POINTER = 'sessions/SET_TIMELINE_POINTER'; const SET_SESSION_PATH = 'sessions/SET_SESSION_PATH'; const LAST_PLAYED_SESSION_ID = `${name}/LAST_PLAYED_SESSION_ID`; - const SET_ACTIVE_TAB = 'sessions/SET_ACTIVE_TAB'; const range = getDateRangeFromValue(LAST_7_DAYS); @@ -237,7 +236,13 @@ function init(session) { } } -export const fetchList = (params = {}, clear = false, live = false) => (dispatch, getState) => { +export const fetchList = (params = {}, clear = false, force = false) => (dispatch, getState) => { + if (!force) { + const oldFilters = getSessionFilter(); + if (compareJsonObjects(oldFilters, params)) return; + } + + setSessionFilter(params) return dispatch({ types: FETCH_LIST.toArray(), call: client => client.post('/sessions/search2', params), diff --git a/frontend/app/utils.ts b/frontend/app/utils.ts index 4a2b57a56..9ef0ede43 100644 --- a/frontend/app/utils.ts +++ b/frontend/app/utils.ts @@ -1,6 +1,7 @@ import JSBI from 'jsbi'; import chroma from "chroma-js"; import * as htmlToImage from 'html-to-image'; +import { SESSION_FILTER } from 'App/constants/storageKeys' export function debounce(callback, wait, context = this) { let timeout = null; @@ -316,3 +317,15 @@ export const fetchErrorCheck = (response: any) => { } return response.json(); } + +export const getSessionFilter = () => { + return JSON.parse(localStorage.getItem(SESSION_FILTER)) +} + +export const setSessionFilter = (filter: any) => { + localStorage.setItem(SESSION_FILTER, JSON.stringify(filter)) +} + +export const compareJsonObjects = (obj1: any, obj2: any) => { + return JSON.stringify(obj1) === JSON.stringify(obj2); +}