import { Loader, NoContent, DropdownPlain } from 'UI'; import { widgetHOC, Styles, AvgLabel } from '../common'; import { withRequest } from 'HOCs'; import { ResponsiveContainer, AreaChart, XAxis, YAxis, CartesianGrid, Area, Tooltip } from 'recharts'; import WidgetAutoComplete from 'Shared/WidgetAutoComplete'; import { LAST_24_HOURS, LAST_30_MINUTES, YESTERDAY, LAST_7_DAYS } from 'Types/app/period'; const WIDGET_KEY = 'resourcesLoadingTime'; const toUnderscore = s => s.split(/(?=[A-Z])/).join('_').toLowerCase(); // other' = -1, 'script' = 0, 'stylesheet' = 1, 'fetch' = 2, 'img' = 3, 'media' = 4 export const RESOURCE_OPTIONS = [ { text: 'All', value: 'all', }, { text: 'JS', value: "SCRIPT", }, { text: 'CSS', value: "STYLESHEET", }, { text: 'Fetch', value: "REQUEST", }, { text: 'Image', value: "IMG", }, { text: 'Media', value: "MEDIA", }, { text: 'Other', value: "OTHER", }, ]; const customParams = rangeName => { const params = {density: 70, type: null } if (rangeName === LAST_24_HOURS) params.density = 70 if (rangeName === LAST_30_MINUTES) params.density = 70 if (rangeName === YESTERDAY) params.density = 70 if (rangeName === LAST_7_DAYS) params.density = 70 return params } @withRequest({ dataName: "options", initialData: [], dataWrapper: data => data, loadingName: 'optionsLoading', requestName: "fetchOptions", endpoint: '/dashboard/' + toUnderscore(WIDGET_KEY) + '/search', method: 'GET' }) @widgetHOC(WIDGET_KEY, { customParams }) export default class ResourceLoadingTime extends React.PureComponent { state = { autoCompleteSelected: null, type: null } onSelect = (params) => { const _params = customParams(this.props.period.rangeName) this.setState({ autoCompleteSelected: params.value }); this.props.fetchWidget(WIDGET_KEY, this.props.period, this.props.platform, { ..._params, url: params.value }) } writeOption = (e, { name, value }) => { this.setState({ [name]: value }) const _params = customParams(this.props.period.rangeName) this.props.fetchWidget(WIDGET_KEY, this.props.period, this.props.platform, { ..._params, [ name ]: value === 'all' ? null : value }) } render() { const { data, loading, period, optionsLoading, compare = false, showSync = false } = this.props; const { autoCompleteSelected, type } = this.state; const colors = compare ? Styles.compareColors : Styles.colors; const params = customParams(period.rangeName) const gradientDef = Styles.gradientDef(); return (
{gradientDef} Styles.tickFormatter(val)} label={{ ...Styles.axisLabelLeft, value: "Resource Fetch Time (ms)" }} />
); } }