1- import React , { useCallback , useEffect , useState } from 'react' ;
1+ import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
22
33import { hasValuesInSeries , tooltip , translateLinegraphButtons } from "../../../util/graphs" ;
44import Highcharts from "highcharts/esm/highstock" ;
@@ -9,7 +9,7 @@ import {useTheme} from "../../../hooks/themeHook";
99import { useMetadata } from "../../../hooks/metadataHook" ;
1010import { useAuth } from "../../../hooks/authenticationHook.tsx" ;
1111import { useGraphExtremesContext } from "../../../hooks/interaction/graphExtremesContextHook.jsx" ;
12- import { localeService } from "../../../service/localeService.js" ;
12+ import { useI18nFriendlyLanguage } from "../../../service/localeService.js" ;
1313import { usePingFormatter } from "../../../util/format/usePingFormatter.js" ;
1414
1515const AllPerformanceGraph = ( { id, data, dataSeries, pluginHistorySeries} ) => {
@@ -18,10 +18,11 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
1818 const { timeZoneOffsetMinutes} = useMetadata ( ) ;
1919 const { hasPermission} = useAuth ( ) ;
2020 const { extremes, onSetExtremes} = useGraphExtremesContext ( ) ;
21- const [ graph , setGraph ] = useState ( undefined ) ;
2221 const { formatPing} = usePingFormatter ( ) ;
2322
24- const yAxis = [
23+ const [ graph , setGraph ] = useState ( undefined ) ;
24+
25+ const yAxis = useMemo ( ( ) => [
2526 {
2627 labels : {
2728 formatter : function ( ) {
@@ -81,7 +82,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
8182 softMin : 0 ,
8283 softMax : 50
8384 } ,
84- ]
85+ ] , [ formatPing ] ) ;
8586
8687 const onResize = useCallback ( ( ) => {
8788 let chartElement = document . getElementById ( id ) ;
@@ -107,7 +108,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
107108 }
108109 } , [ onResize ] )
109110
110- useEffect ( ( ) => {
111+ const chart = useMemo ( ( ) => {
111112 const zones = {
112113 tps : [ {
113114 value : data . zones . tpsThresholdMed ,
@@ -183,14 +184,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
183184 } : undefined
184185 } ;
185186
186- Highcharts . setOptions ( {
187- lang : {
188- locale : localeService . getIntlFriendlyLocale ( ) ,
189- noData : t ( 'html.label.noDataToDisplay' )
190- }
191- } )
192- Highcharts . setOptions ( graphTheming ) ;
193- setGraph ( Highcharts . stockChart ( id , {
187+ return {
194188 chart : {
195189 noData : t ( 'html.label.noDataToDisplay' )
196190 } ,
@@ -219,7 +213,22 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
219213 timezoneOffset : timeZoneOffsetMinutes
220214 } ,
221215 series : [ series . playersOnline , series . tps , series . mspt , series . cpu , series . ram , series . entities , series . chunks , pluginHistorySeries ] . filter ( s => s )
222- } ) ) ;
216+ }
217+ } , [ data , dataSeries , pluginHistorySeries , hasPermission , t , onSetExtremes , timeZoneOffsetMinutes , nightModeEnabled ] ) ;
218+
219+ const locale = useI18nFriendlyLanguage ( ) ;
220+ useEffect ( ( ) => {
221+ Highcharts . setOptions ( {
222+ lang : {
223+ locale : locale ,
224+ noData : t ( 'html.label.noDataToDisplay' )
225+ }
226+ } )
227+ } , [ locale ] ) ;
228+
229+ useEffect ( ( ) => {
230+ Highcharts . setOptions ( graphTheming ) ;
231+ setGraph ( Highcharts . stockChart ( id , chart ) ) ;
223232 } , [ data , dataSeries , graphTheming , nightModeEnabled , id , t , timeZoneOffsetMinutes , pluginHistorySeries ] )
224233 useEffect ( ( ) => {
225234 if ( graph ?. xAxis ?. length && extremes ) {
0 commit comments