From 048ab87087fbb2debe345f34edeb8be7c2f408e8 Mon Sep 17 00:00:00 2001 From: Eric Stout Date: Sun, 1 Sep 2019 20:29:48 -0500 Subject: [PATCH] Rewrite FTL info to only fetch data once Signed-off-by: Eric Stout --- src/components/settings/FTLInfo.tsx | 80 +++++++++++++++---------- src/components/settings/NetworkInfo.tsx | 33 ---------- 2 files changed, 49 insertions(+), 64 deletions(-) diff --git a/src/components/settings/FTLInfo.tsx b/src/components/settings/FTLInfo.tsx index 88ee63f..267203f 100644 --- a/src/components/settings/FTLInfo.tsx +++ b/src/components/settings/FTLInfo.tsx @@ -12,15 +12,58 @@ import React, { Component } from "react"; import { WithTranslation, withTranslation } from "react-i18next"; import { Form, Col, Input, FormGroup, Label } from "reactstrap"; import api from "../../util/api"; -import { WithAPIData } from "../common/WithAPIData"; +import { + CancelablePromise, + ignoreCancel, + makeCancelable +} from "../../util/CancelablePromise"; export interface FTLInfoProps { + fileSize?: number; + queries?: number; + sqliteVersion?: string; +} + +export interface FTLInfoState { fileSize: number; queries: number; sqliteVersion: string; } -class FTLInfo extends Component { +class FTLInfo extends Component { + state: FTLInfoState = { + fileSize: 0, + queries: 0, + sqliteVersion: "" + }; + + componentDidMount() { + this.loadFTLInfo(); + } + + componentWillUnmount() { + if (this.loadHandler) { + this.loadHandler.cancel(); + } + } + + private loadHandler: undefined | CancelablePromise; + + loadFTLInfo = () => { + this.loadHandler = makeCancelable(api.getFTLdb()); + this.loadHandler.promise + .then(res => { + const transformData = (data: ApiFtlDbResponse): FTLInfoState => ({ + fileSize: data.filesize, + queries: data.queries, + sqliteVersion: data.sqlite_version + }); + + this.setState({ ...transformData(res) }); + }) + .catch(ignoreCancel); + }; + render() { const { t } = this.props; @@ -35,7 +78,7 @@ class FTLInfo extends Component { plaintext readOnly id="queries" - value={this.props.queries.toLocaleString()} + value={this.state.queries.toLocaleString()} /> @@ -48,7 +91,7 @@ class FTLInfo extends Component { plaintext readOnly id="filesize" - value={`${this.props.fileSize.toLocaleString()} B`} + value={`${this.state.fileSize.toLocaleString()} B`} /> @@ -61,7 +104,7 @@ class FTLInfo extends Component { plaintext readOnly id="sqliteversion" - value={this.props.sqliteVersion} + value={this.state.sqliteVersion} /> @@ -70,29 +113,4 @@ class FTLInfo extends Component { } } -export const transformData = (data: ApiFtlDbResponse): FTLInfoProps => ({ - fileSize: data.filesize, - queries: data.queries, - sqliteVersion: data.sqlite_version -}); - -export const initialData = { - fileSize: 0, - queries: 0, - sqliteVersion: "" -}; - -export const TranslatedFTLInfo = withTranslation(["settings"])(FTLInfo); - -export default (props: any) => ( - } - renderOk={data => } - renderErr={() => } - /> -); +export default withTranslation(["settings"])(FTLInfo); diff --git a/src/components/settings/NetworkInfo.tsx b/src/components/settings/NetworkInfo.tsx index 1d1af2b..9a62fcc 100644 --- a/src/components/settings/NetworkInfo.tsx +++ b/src/components/settings/NetworkInfo.tsx @@ -132,37 +132,4 @@ class NetworkInfo extends Component { } } -// export const transformData = ( -// data: ApiNetworkSettings -// ): Omit => ({ -// interface: data.interface, -// ipv4Address: data.ipv4_address, -// ipv6Address: data.ipv6_address, -// hostname: data.hostname -// }); - -// export const initialData = () => ({ -// interface: "", -// ipv4Address: "", -// ipv6Address: "", -// hostname: "" -// }); - export default withTranslation(["common", "settings"])(NetworkInfo); - -// export default (props: any) => ( -// ( -// -// )} -// renderOk={data => ( -// -// )} -// renderErr={() => } -// /> -// );