* change(ui) - redirect to the landing url on SSO login
* fix(ui): fix share popup styles
* change(ui) - non admin user preference restrictions
* fix(ui) - redirect fix
* change(ui) - show installation btn without mouse hover
* feat(api): api-v1 handle wrong projectKey
feat(api): api-v1 get live sessions
* change(ui) - show role edit on hover
* change(ui) - audit trail count with comma
* fix(ui) - audit trail date range custom picker alignment
* change(ui) - show a message when mob file not found
* feat(api): api-v1 fixed search live sessions
* feat(api): api-v1 handle wrong projectKey
* feat(api): fixed assist error response
* fix(tracker): check node scrolls only on start
* fixup! fix(tracker): check node scrolls only on start
* feat(ui/player): scroll view in click map
* feat(ui/player): rm unused check
* New configuration module (#558)
* ci(dbmigrate): Create db migrate when there is change
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui): fix login error/button margins
* fix(ui) - checkbox click
* fix(ui) - search rename and save fixes
* change(ui) - text changes
* fix(ui) - button text nowrap
* fix(ui): fix slowestdomains widget height
* change(ui) - ignore clicks while annotating
* change(ui) - if block with braces
* change(ui) - capitalize first letter in breadcrumb
* feat(db): remove errors from permissions
feat(api): remove errors from permissions
* feat(api): changed reset password response
* fix(ui) - assist active tab list, broken after with new api changes (pagination)
* fix(ui) - assist active tab list, broken after with new api changes (pagination)
* change(ui) - search compare
* fix(ui): last fixes for 1.7
* fix(ui): fix timeline
* fix(ui): small code fixes
* fix(ui): remove unused
* feat(frontend/assist): show when client tab is inactive + fix reconnection status update
* fix(ui) - visibility settings
* feat(assist): refactored extractSessionInfo
feat(assist): hardcoded session's attributes
* Added snabbdom (JS)
* fix(tracker): version check works with x.x.x-beta versions
* fix(backend): keep the highest user's timestamp instead of the latest message timestamp for correct session duration value
* feat(backend/s3): added file tag RETENTION (#561)
* change(ui) - search optimization and autocomplete improvements
* feat(backend/assets): added new metrics assets_downloaded
* change(ui) - show back the date range in bookmarks since the api is filtering by daterange
* feat(backend-assets): custom headers for cacher requests
* chore(backend): no tidy in dockerfile (local build speed up)
* feat(backend/assets): added proxy support for cacher module
* feat(backend/storage): set retention env variable as not required
* fix(ui): fix jira issues
* ci(helm): use kubectl for deployment
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(tracker):3.5.13: performance improvements for a case of extensive dom
* fix(backend): added missed err var and continue statement
* ci(helm): forcing namespace
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(api): fixed slowest_domains query
* ci(helm): update helm deployment method
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* change(ui) - filter dropdown colros
* fix(ui) - speed index location avg attribute changed to value
* ci(api): enable kubectl apply
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui) - widget y axis label
* feat(api): fixed slowest_domains query
* chore(helm): Adding namespaces to all templates (#565)
* feat(api): assist type-autocomplete
* feat(api): assist global-autocomplete
* feat(sourcemaps): include wasm file in build
* feat(sourcemaps-reader): refactored
* fix(ui): fix data for funnels
* fix(ui): fix all sessions section margin
* fix(ui) - assist loader flag
* fix(ui) - assist loader flag
* fix(ui): fix weird check
* feat(api): autocomplete accept unsupported types
* feat(ui): migrate to yarn v3
* feat(ui): minor fixes for installment
* feat(ui): add typescript plugin to yarn
* chore(helm): Ability to override image registry
* chore(helm): Overriding openreplay docker registry
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui): fix control arrows on firefox
* feat(crons): EE crons
* feat(api): fixed build script
* feat(alerts): fixed build script
* feat(crons): fixed build script
* chore(helm): Updating cron version
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(crons): changes
* chore(helm): optional minio ingress
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(crons): fix build script
feat(alerts): fix build script
* Revert "chore(helm): Updating cron version"
This reverts commit 3ca190ea2f.
* feat(crons): fix build script
* feat(crons): fix Dockerfile
* feat(api): fixed metadata change-case
* change(ui) - remove capitalize for the meta value
* change(ui) - autocomplete improvements with custom textfield
* fix(tracker):3.5.13+:reuse metadata on internal-caused restarts
* fix(tracker-assist):3.5.13:send active:true on start; scroll behavior fix
* change(ui) - filters autocomplete blur on pressing Enter key
* fix(tracker): fix node v to lower
* fix(tracker): fix deps
* fix(tracker): fix deps
* fix(ui) - dashboard modal width
* change(ui) - filter dropdown overflow
* chore(helm): clickhouse reclaim polity to retain
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(tracker): fix engine max v
* fix(ui): load metadata in assist tab for sorting
* fix(ui): rm unneeded api call
* fix(tracker): build script to cjs
* change(ui) - removed sample data
* chore(tracker): remove upper node version limit
* Updating Beacon size
Beacon size should be <= QUEUE_MESSAGE_SIZE_LIMIT
* feat(crons): run 24/7
feat(alerts): support env-file override
* feat(api): changed EE env handler
* fix(ui): fix sessions search modal
* change(ui) - margin for error message
* change(ui) - disable assist sort when there are no meta options to choose
* chore(helm): Adding utilities service namespace
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui) - dashboard date range selection reload, metric not found message
* change(ui) - disable clearsearch in assist when there are no filters\
* feat(api): fixed EE env handler
* chore(helm): Adding migration namespaces
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui) - report logo path
* chore(helm): Removing unnecessary SA
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(api): changed EE env handler
* feat(api): changed EE env handler
* feat(api): changed EE env handler
* feat(api): changed EE env handler
* feat(crons): changed crons
* feat(api): accept wrong metric_id
* feat(crons): changed env handler
feat(api): changed env handler
feat(alerts): changed env handler
* feat(utilities): support old version of nodejs
* feat(crons): changed env handler
feat(api): changed env handler
feat(alerts): changed env handler
* fix(tracker): fix srcset tracking
* chore(build): Adding frontent
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(assist): changed general helper
* feat(assist): changed general helper
* fix(ui): fix widget pagination (#570)
* feat(crons): changed entrypoint
* feat(player): dev-log on skipping message
* fix(tracker): removeNode mutation priority over attributes
* fix(tracker): capture relative img timing;use startsWith instead of substr; codestyle fix
* chore(build): fixing api build script
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* chore(ci): faster deployment
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* change(ui) - assist list show active status
* chore(actions): option to build all/specific services in GH
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui) - slowest domain metric data as per the api changes
* ci(helm): updated variable name
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* ci(backend): cherrypick changes to ee
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(backend): disabled pprof in http service
* fix(ui) - TimeToRender avg value as per the API change
* fix(ui) - ResponseTimeDistribution avg value as per the API change
* fix(ui) - MemoryConsumption avg value as per the API change
* fix(ui) - ResponseTime avg value as per the API change
* fix(ui) - DomBuildTime avg value as per the API change
* fix(ui) - FrameRate avg value as per the API change
* chore(helm): proper default tag
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(backend): removed sensitive information from http logs
* ci(backend): adding default parameter value for workflow dispatch
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(backend): deleted empty file
* fix(actions): creating image source file prior
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(helm): variable substitution
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* change(ui) - project list item installation button text change
* fix(ui) - project create validation
* fix(backend): removed unsafe string logs in http service
* chore(kafka): Adding new topic
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(efs-cron): variable name
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui) - developer tools - hint links
* fix(ui) - session filters - country and platform dropdown values
* chore(helm): updating version
* chore(kafka): Update kafka default message size while provisioning
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(tracker): fix dependency security
* change(ui) - webhook delete confirmation
* change(ui) - assist url to handle when empty
* feat(api): autocomplete replace console with errors
feat(DB): clean extra files
* chore(helm): Adding cron jobs
* change(ui) - set changed flag to false after the metric delete to avoid prompt
* chore(helm): enbaling cron only for ee
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(api): autocomplete remove console
* change(ui) - removed Console filter type
* fix(ui) - timeline position
* fix(helm): RFC naming
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui): let user change project in dashboards and select default dashboard
* chore(helm): update registry url
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(DB): return pages_count to DB
* fix(ui) - account settings opt out checkbox
* fix(ui): fix modal width
* fix(ui) - explore circle bg
* fix(ui) - user name overlap
* fix(ui) - empty dashboards create button
* fix(ui): fix timeline position cursor for safari
* fix(ui) - custom metrics errors modal url reset on close
* fix(ui) - onboarding check for siteId
* change(ui) - tracker version
* Update local_deploy.sh
* fix(ui) - drilldown timestamp
* fix(tracker): fix deps for assist
* fix(tracker): update peerjs library
* fix(tracker): update assist v
* fix(tracker): fix type error
* fix(backend): no missing resource relying on resource zero-timing
* Update tracker to v3.5.15
* chore(helm): Adding CSP override variable.
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(backend): added pem file support for kafka ssl setup
* feat(backend): added useBatch setup for kafka producer
* ci(backend): set verbose logging
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(backend): using setKey instead of direct writes
* ci(backend): fix error code
* ci(deploy): Updating the image registry
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* feat(api): changed get user id alias
* ci(frontent): removing depricated steps
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* ci(fix): variable replace
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* ci(helm): creating image image_override
Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
* fix(ui): fix timezone settings
* Added failover mechanism for storage service (#576)
* fix(ui): fix typescript config to remove array iterator error
* fix(ui): refactor timezone settings store/comp
* feat(snippet): opensource snippet
* feat(assist): support multiple IPs
* fix(ui): fix type errors in select /timezones fix
* feat(backend): set size of first part of sessions at 500kb
* change(ui) - removed logs
* fix(ui) - custom metric errors reset url on modal close
* feat(DB): no funnel migration
* fix(ui): fix screensize bug
* feat(DB): migrate super old funnels support
* changed db-migration workflow
Co-authored-by: Shekar Siri <sshekarsiri@gmail.com>
Co-authored-by: sylenien <nikita@openreplay.com>
Co-authored-by: Alex Kaminskii <alex@openreplay.com>
Co-authored-by: Alexander <zavorotynskiy@pm.me>
Co-authored-by: rjshrjndrn <rjshrjndrn@gmail.com>
Co-authored-by: Mehdi Osman <estradino@users.noreply.github.com>
Co-authored-by: Alexander <alexander@openreplay.com>
Co-authored-by: Rajesh Rajendran <rjshrjndrn@users.noreply.github.com>
Co-authored-by: Delirium <sylenien@gmail.com>
366 lines
13 KiB
JavaScript
366 lines
13 KiB
JavaScript
import { List, Map } from 'immutable';
|
|
import Session from 'Types/session';
|
|
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, setSessionFilter, getSessionFilter, compareJsonObjects, cleanSessionFilters } from 'App/utils';
|
|
import { LAST_7_DAYS } from 'Types/app/period';
|
|
import { getDateRangeFromValue } from 'App/dateRange';
|
|
|
|
const name = 'sessions';
|
|
const INIT = 'sessions/INIT';
|
|
const FETCH_LIST = new RequestTypes('sessions/FETCH_LIST');
|
|
const FETCH = new RequestTypes('sessions/FETCH');
|
|
const FETCH_FAVORITE_LIST = new RequestTypes('sessions/FETCH_FAVORITE_LIST');
|
|
const FETCH_LIVE_LIST = new RequestTypes('sessions/FETCH_LIVE_LIST');
|
|
const TOGGLE_FAVORITE = new RequestTypes('sessions/TOGGLE_FAVORITE');
|
|
const FETCH_ERROR_STACK = new RequestTypes('sessions/FETCH_ERROR_STACK');
|
|
const FETCH_INSIGHTS = new RequestTypes('sessions/FETCH_INSIGHTS');
|
|
const SORT = 'sessions/SORT';
|
|
const REDEFINE_TARGET = 'sessions/REDEFINE_TARGET';
|
|
const SET_TIMEZONE = 'sessions/SET_TIMEZONE';
|
|
const SET_EVENT_QUERY = 'sessions/SET_EVENT_QUERY';
|
|
const SET_AUTOPLAY_VALUES = 'sessions/SET_AUTOPLAY_VALUES';
|
|
const TOGGLE_CHAT_WINDOW = 'sessions/TOGGLE_CHAT_WINDOW';
|
|
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);
|
|
const defaultDateFilters = {
|
|
url: '',
|
|
rangeValue: LAST_7_DAYS,
|
|
startDate: range.start.unix() * 1000,
|
|
endDate: range.end.unix() * 1000,
|
|
};
|
|
|
|
const initialState = Map({
|
|
list: List(),
|
|
sessionIds: [],
|
|
current: Session(),
|
|
total: 0,
|
|
keyMap: Map(),
|
|
wdTypeCount: Map(),
|
|
favoriteList: List(),
|
|
activeTab: Watchdog({ name: 'All', type: 'all' }),
|
|
timezone: 'local',
|
|
errorStack: List(),
|
|
eventsIndex: [],
|
|
sourcemapUploaded: true,
|
|
filteredEvents: null,
|
|
showChatWindow: false,
|
|
liveSessions: List(),
|
|
visitedEvents: List(),
|
|
insights: List(),
|
|
insightFilters: defaultDateFilters,
|
|
host: '',
|
|
funnelPage: Map(),
|
|
timelinePointer: null,
|
|
sessionPath: {},
|
|
lastPlayedSessionId: null,
|
|
});
|
|
|
|
const reducer = (state = initialState, action = {}) => {
|
|
switch (action.type) {
|
|
case INIT:
|
|
return state.set('current', Session(action.session));
|
|
case FETCH_LIST.REQUEST:
|
|
return action.clear ? state.set('list', List()) : state;
|
|
case FETCH_ERROR_STACK.SUCCESS:
|
|
return state.set('errorStack', List(action.data.trace).map(ErrorStack)).set('sourcemapUploaded', action.data.sourcemapUploaded);
|
|
case FETCH_LIVE_LIST.SUCCESS:
|
|
const liveList = List(action.data.sessions).map((s) => new Session({ ...s, live: true }));
|
|
return state.set('liveSessions', liveList);
|
|
case FETCH_LIST.SUCCESS:
|
|
const { sessions, total } = action.data;
|
|
const list = List(sessions).map(Session);
|
|
|
|
return state
|
|
.set('list', list)
|
|
.set('sessionIds', list.map(({ sessionId }) => sessionId).toJS())
|
|
.set(
|
|
'favoriteList',
|
|
list.filter(({ favorite }) => favorite)
|
|
)
|
|
.set('total', total);
|
|
case SET_AUTOPLAY_VALUES: {
|
|
const sessionIds = state.get('sessionIds');
|
|
const currentSessionId = state.get('current').sessionId;
|
|
const currentIndex = sessionIds.indexOf(currentSessionId);
|
|
return state.set('previousId', sessionIds[currentIndex - 1]).set('nextId', sessionIds[currentIndex + 1]);
|
|
}
|
|
case SET_EVENT_QUERY: {
|
|
const events = state.get('current').events;
|
|
const query = action.filter.query;
|
|
// const filter = action.filter.filter;
|
|
const searchRe = getRE(query, 'i');
|
|
let filteredEvents = query ? events.filter((e) => searchRe.test(e.url) || searchRe.test(e.value) || searchRe.test(e.label)) : null;
|
|
|
|
// if (filter) {
|
|
// filteredEvents = filteredEvents ? filteredEvents.filter(e => e.type === filter) : events.filter(e => e.type === filter);
|
|
// }
|
|
return state.set('filteredEvents', filteredEvents);
|
|
}
|
|
case FETCH.SUCCESS: {
|
|
// TODO: more common.. or TEMP
|
|
const events = action.filter.events;
|
|
// const filters = action.filter.filters;
|
|
const current = state.get('list').find(({ sessionId }) => sessionId === action.data.sessionId) || Session();
|
|
const session = Session(action.data);
|
|
|
|
const matching = [];
|
|
|
|
const visitedEvents = [];
|
|
const tmpMap = {};
|
|
session.events.forEach((event) => {
|
|
if (event.type === 'LOCATION' && !tmpMap.hasOwnProperty(event.url)) {
|
|
tmpMap[event.url] = event.url;
|
|
visitedEvents.push(event);
|
|
}
|
|
});
|
|
|
|
events.forEach(({ key, operator, value }) => {
|
|
session.events.forEach((e, index) => {
|
|
if (key === e.type) {
|
|
const val = e.type === 'LOCATION' ? e.url : e.value;
|
|
if (operator === 'is' && value === val) {
|
|
matching.push(index);
|
|
}
|
|
if (operator === 'contains' && val.includes(value)) {
|
|
matching.push(index);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
return state
|
|
.set('current', current.merge(session))
|
|
.set('eventsIndex', matching)
|
|
.set('visitedEvents', visitedEvents)
|
|
.set('host', visitedEvents[0] && visitedEvents[0].host);
|
|
}
|
|
case FETCH_FAVORITE_LIST.SUCCESS:
|
|
return state.set('favoriteList', List(action.data).map(Session));
|
|
case TOGGLE_FAVORITE.SUCCESS: {
|
|
const id = action.sessionId;
|
|
const session = state.get('list').find(({ sessionId }) => sessionId === id);
|
|
const wasInFavorite = state.get('favoriteList').findIndex(({ sessionId }) => sessionId === id) > -1;
|
|
|
|
return state
|
|
.update('list', (list) => list.map((session) => (session.sessionId === id ? session.set('favorite', !wasInFavorite) : session)))
|
|
.update('favoriteList', (list) =>
|
|
wasInFavorite ? list.filter(({ sessionId }) => sessionId !== id) : list.push(session.set('favorite', true))
|
|
)
|
|
.update('current', (session) => (session.sessionId === id ? session.set('favorite', !wasInFavorite) : session));
|
|
}
|
|
case SORT: {
|
|
const comparator = (s1, s2) => {
|
|
let diff = s1[action.sortKey] - s2[action.sortKey];
|
|
diff = diff === 0 ? s1.startedAt - s2.startedAt : diff;
|
|
return action.sign * diff;
|
|
};
|
|
return state.update('list', (list) => list.sort(comparator)).update('favoriteList', (list) => list.sort(comparator));
|
|
}
|
|
case REDEFINE_TARGET: {
|
|
// TODO: update for list
|
|
const { label, path } = action.target;
|
|
return state.updateIn(['current', 'events'], (list) =>
|
|
list.map((event) => (event.target && event.target.path === path ? event.setIn(['target', 'label'], label) : event))
|
|
);
|
|
}
|
|
case SET_ACTIVE_TAB:
|
|
const allList = action.tab.type === 'all' ? state.get('list') : state.get('list').filter((s) => s.issueTypes.includes(action.tab.type));
|
|
|
|
return state.set('activeTab', action.tab).set('sessionIds', allList.map(({ sessionId }) => sessionId).toJS());
|
|
case SET_TIMEZONE:
|
|
return state.set('timezone', action.timezone);
|
|
case TOGGLE_CHAT_WINDOW:
|
|
return state.set('showChatWindow', action.state);
|
|
case FETCH_INSIGHTS.SUCCESS:
|
|
return state.set(
|
|
'insights',
|
|
List(action.data).sort((a, b) => b.count - a.count)
|
|
);
|
|
case SET_FUNNEL_PAGE_FLAG:
|
|
return state.set('funnelPage', action.funnelPage ? Map(action.funnelPage) : false);
|
|
case SET_TIMELINE_POINTER:
|
|
return state.set('timelinePointer', action.pointer);
|
|
case SET_SESSION_PATH:
|
|
return state.set('sessionPath', action.path);
|
|
case LAST_PLAYED_SESSION_ID:
|
|
return updateListItem(state, action.sessionId, { viewed: true }).set('lastPlayedSessionId', action.sessionId);
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
function updateListItem(state, sourceSessionId, instance) {
|
|
const list = state.get('list');
|
|
const index = list.findIndex(({ sessionId }) => sessionId === sourceSessionId);
|
|
if (index === -1) return state;
|
|
|
|
return state.updateIn(['list', index], (session) => session.merge(instance));
|
|
}
|
|
|
|
export default withRequestState(
|
|
{
|
|
_: [FETCH, FETCH_LIST],
|
|
fetchLiveListRequest: FETCH_LIVE_LIST,
|
|
fetchFavoriteListRequest: FETCH_FAVORITE_LIST,
|
|
toggleFavoriteRequest: TOGGLE_FAVORITE,
|
|
fetchErrorStackList: FETCH_ERROR_STACK,
|
|
fetchInsightsRequest: FETCH_INSIGHTS,
|
|
},
|
|
reducer
|
|
);
|
|
|
|
function init(session) {
|
|
return {
|
|
type: INIT,
|
|
session,
|
|
};
|
|
}
|
|
|
|
export const fetchList =
|
|
(params = {}, clear = false, force = false) =>
|
|
(dispatch, getState) => {
|
|
if (!force) { // compare with the last fetched filter
|
|
const oldFilters = getSessionFilter();
|
|
if (compareJsonObjects(oldFilters, cleanSessionFilters(params))) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
setSessionFilter(cleanSessionFilters(params));
|
|
return dispatch({
|
|
types: FETCH_LIST.toArray(),
|
|
call: (client) => client.post('/sessions/search2', params),
|
|
clear,
|
|
params: cleanParams(params),
|
|
});
|
|
};
|
|
|
|
export function fetchErrorStackList(sessionId, errorId) {
|
|
return {
|
|
types: FETCH_ERROR_STACK.toArray(),
|
|
call: (client) => client.get(`/sessions2/${sessionId}/errors/${errorId}/sourcemaps`),
|
|
};
|
|
}
|
|
|
|
export const fetch =
|
|
(sessionId, isLive = false) =>
|
|
(dispatch, getState) => {
|
|
dispatch({
|
|
types: FETCH.toArray(),
|
|
call: (client) => client.get(isLive ? `/assist/sessions/${sessionId}` : `/sessions2/${sessionId}`),
|
|
filter: getState().getIn(['filters', 'appliedFilter']),
|
|
});
|
|
};
|
|
|
|
export function toggleFavorite(sessionId) {
|
|
return {
|
|
types: TOGGLE_FAVORITE.toArray(),
|
|
call: (client) => client.get(`/sessions2/${sessionId}/favorite`),
|
|
sessionId,
|
|
};
|
|
}
|
|
|
|
export function fetchFavoriteList() {
|
|
return {
|
|
types: FETCH_FAVORITE_LIST.toArray(),
|
|
call: (client) => client.get('/sessions2/favorite'),
|
|
};
|
|
}
|
|
|
|
export function fetchInsights(params) {
|
|
return {
|
|
types: FETCH_INSIGHTS.toArray(),
|
|
call: (client) => client.post('/heatmaps/url', params),
|
|
};
|
|
}
|
|
|
|
export function fetchLiveList(params = {}) {
|
|
return {
|
|
types: FETCH_LIVE_LIST.toArray(),
|
|
call: (client) => client.get('/assist/sessions', params),
|
|
};
|
|
}
|
|
|
|
export function toggleChatWindow(state) {
|
|
return {
|
|
type: TOGGLE_CHAT_WINDOW,
|
|
state,
|
|
};
|
|
}
|
|
|
|
export function sort(sortKey, sign = 1, listName = 'list') {
|
|
return {
|
|
type: SORT,
|
|
sortKey,
|
|
sign,
|
|
listName,
|
|
};
|
|
}
|
|
|
|
export function redefineTarget(target) {
|
|
return {
|
|
type: REDEFINE_TARGET,
|
|
target,
|
|
};
|
|
}
|
|
|
|
export const setAutoplayValues = (sessionId) => {
|
|
return {
|
|
type: SET_AUTOPLAY_VALUES,
|
|
sessionId,
|
|
};
|
|
};
|
|
|
|
export const setActiveTab = (tab) => ({
|
|
type: SET_ACTIVE_TAB,
|
|
tab,
|
|
});
|
|
|
|
export function setTimezone(timezone) {
|
|
return {
|
|
type: SET_TIMEZONE,
|
|
timezone,
|
|
};
|
|
}
|
|
|
|
export function setEventFilter(filter) {
|
|
return {
|
|
type: SET_EVENT_QUERY,
|
|
filter,
|
|
};
|
|
}
|
|
|
|
export function setFunnelPage(funnelPage) {
|
|
return {
|
|
type: SET_FUNNEL_PAGE_FLAG,
|
|
funnelPage,
|
|
};
|
|
}
|
|
|
|
export function setTimelinePointer(pointer) {
|
|
return {
|
|
type: SET_TIMELINE_POINTER,
|
|
pointer,
|
|
};
|
|
}
|
|
|
|
export function setSessionPath(path) {
|
|
return {
|
|
type: SET_SESSION_PATH,
|
|
path,
|
|
};
|
|
}
|
|
|
|
export function updateLastPlayedSession(sessionId) {
|
|
return {
|
|
type: LAST_PLAYED_SESSION_ID,
|
|
sessionId,
|
|
};
|
|
}
|