mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import {Fragment, useMemo} from 'react';
|
|
import type {Location} from 'history';
|
|
|
|
import EmptyStateWarning from 'sentry/components/emptyStateWarning';
|
|
import LoadingIndicator from 'sentry/components/loadingIndicator';
|
|
import {t} from 'sentry/locale';
|
|
import EventView from 'sentry/utils/discover/eventView';
|
|
import getRouteStringFromRoutes from 'sentry/utils/getRouteStringFromRoutes';
|
|
import useReplayList from 'sentry/utils/replays/hooks/useReplayList';
|
|
import useOrganization from 'sentry/utils/useOrganization';
|
|
import {useRoutes} from 'sentry/utils/useRoutes';
|
|
import {StatusContainer} from 'sentry/views/profiling/landing/styles';
|
|
import {ReplayCell} from 'sentry/views/replays/replayTable/tableCell';
|
|
|
|
export default function ExampleReplaysList({
|
|
location,
|
|
clickType,
|
|
selectorQuery,
|
|
projectId,
|
|
}: {
|
|
clickType: 'count_dead_clicks' | 'count_rage_clicks';
|
|
location: Location;
|
|
projectId: number;
|
|
selectorQuery: string;
|
|
}) {
|
|
const organization = useOrganization();
|
|
const {project, environment, start, statsPeriod, utc, end} = location.query;
|
|
const emptyLocation: Location = useMemo(() => {
|
|
return {
|
|
pathname: '',
|
|
search: '',
|
|
hash: '',
|
|
state: '',
|
|
action: 'PUSH' as const,
|
|
key: '',
|
|
query: {project, environment, start, statsPeriod, utc, end},
|
|
};
|
|
}, [project, environment, start, statsPeriod, utc, end]);
|
|
|
|
const eventView = useMemo(
|
|
() =>
|
|
EventView.fromNewQueryWithLocation(
|
|
{
|
|
id: '',
|
|
name: '',
|
|
version: 2,
|
|
fields: [
|
|
'activity',
|
|
'duration',
|
|
'id',
|
|
'project_id',
|
|
'user',
|
|
'finished_at',
|
|
'is_archived',
|
|
'started_at',
|
|
],
|
|
projects: [projectId],
|
|
query: selectorQuery,
|
|
orderby: `-${clickType}`,
|
|
},
|
|
emptyLocation
|
|
),
|
|
[emptyLocation, selectorQuery, clickType, projectId]
|
|
);
|
|
|
|
const {replays, isFetching, fetchError} = useReplayList({
|
|
eventView,
|
|
location: emptyLocation,
|
|
organization,
|
|
perPage: 3,
|
|
});
|
|
|
|
const routes = useRoutes();
|
|
const referrer = getRouteStringFromRoutes(routes);
|
|
|
|
return (
|
|
<Fragment>
|
|
{fetchError || (!isFetching && !replays?.length) ? (
|
|
<EmptyStateWarning withIcon={false} small>
|
|
{t('No replays found')}
|
|
</EmptyStateWarning>
|
|
) : isFetching ? (
|
|
<StatusContainer>
|
|
<LoadingIndicator />
|
|
</StatusContainer>
|
|
) : (
|
|
replays?.map(r => {
|
|
return (
|
|
<ReplayCell
|
|
key={r.id}
|
|
replay={r}
|
|
eventView={eventView}
|
|
organization={organization}
|
|
referrer={referrer}
|
|
referrer_table="selector-widget"
|
|
isWidget
|
|
/>
|
|
);
|
|
})
|
|
)}
|
|
</Fragment>
|
|
);
|
|
}
|