summaryrefslogtreecommitdiff
path: root/src/components/MemoryChart.tsx
diff options
context:
space:
mode:
authorrookisbusy <[email protected]>2023-04-07 20:43:19 +0800
committerrookisbusy <[email protected]>2023-04-07 20:43:19 +0800
commit2a3579e447459aaeb7998cf968f73c6ef7ff7a0b (patch)
tree5422a8cc8732066ae3d6ef2563b939d03087c20c /src/components/MemoryChart.tsx
parente6852509670fa91fda6a2ef2375608a7b9a4b175 (diff)
feat: add memory chat
Diffstat (limited to 'src/components/MemoryChart.tsx')
-rw-r--r--src/components/MemoryChart.tsx61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/components/MemoryChart.tsx b/src/components/MemoryChart.tsx
new file mode 100644
index 0000000..9f6febb
--- /dev/null
+++ b/src/components/MemoryChart.tsx
@@ -0,0 +1,61 @@
+import * as React from 'react';
+import { useTranslation } from 'react-i18next';
+
+import { State } from '~/store/types';
+
+import { fetchData } from '../api/memory';
+import { useLineChartMemory } from '../hooks/useLineChart';
+import {
+ chartJSResource,
+ chartStyles,
+ commonDataSetProps,
+ memoryChartOptions,
+} from '../misc/chart-memory';
+import { getClashAPIConfig, getSelectedChartStyleIndex } from '../store/app';
+import { connect } from './StateProvider';
+
+const { useMemo } = React;
+
+const chartWrapperStyle = {
+ // make chartjs chart responsive
+ position: 'relative',
+ maxWidth: 1000,
+ marginTop: '1em',
+};
+
+const mapState = (s: State) => ({
+ apiConfig: getClashAPIConfig(s),
+ selectedChartStyleIndex: getSelectedChartStyleIndex(s),
+});
+
+export default connect(mapState)(MemoryChart);
+
+function MemoryChart({ apiConfig, selectedChartStyleIndex }) {
+ const ChartMod = chartJSResource.read();
+ const memory = fetchData(apiConfig);
+ const { t } = useTranslation();
+ const data = useMemo(
+ () => ({
+ labels: memory.labels,
+ datasets: [
+ {
+ ...commonDataSetProps,
+ ...memoryChartOptions,
+ ...chartStyles[selectedChartStyleIndex].inuse,
+ label: t('Memory'),
+ data: memory.inuse,
+ },
+ ],
+ }),
+ [memory, selectedChartStyleIndex, t]
+ );
+
+ useLineChartMemory(ChartMod.Chart, 'MemoryChart', data, memory);
+
+ return (
+ // @ts-expect-error ts-migrate(2322) FIXME: Type '{ position: string; maxWidth: number; }' is ... Remove this comment to see the full error message
+ <div style={chartWrapperStyle}>
+ <canvas id="MemoryChart" />
+ </div>
+ );
+}