Farmbot-Web-App/frontend/os_download/content.tsx

110 lines
3.3 KiB
TypeScript
Raw Permalink Normal View History

2020-01-28 12:30:04 -07:00
import * as React from "react";
import axios from "axios";
import { t } from "../i18next_wrapper";
import { GithubRelease } from "../devices/interfaces";
import { Content } from "../constants";
2020-02-15 11:30:23 -07:00
import { ExternalUrl } from "../external_urls";
2020-01-28 12:30:04 -07:00
interface OsDownloadState {
tagName: string;
genesisImg: string;
expressImg: string;
}
const getImgLink = (assets: GithubRelease["assets"], target: string) =>
assets.filter(asset => asset.name.includes("img")
&& asset.name.includes(target))[0]?.browser_download_url || "";
const tagNameFromUrl = (url: string) => {
const tagPart = url.split("/")[7] || "";
return tagPart.startsWith("v") ? tagPart : "";
};
2020-02-07 16:05:59 -07:00
const downloadButtonText = (versionString: string) =>
`${t("DOWNLOAD")} ${versionString}`;
2020-01-28 12:30:04 -07:00
export class OsDownload extends React.Component<{}, OsDownloadState> {
state: OsDownloadState = { tagName: "", genesisImg: "", expressImg: "" };
get genesisTagName() {
return this.state.tagName || tagNameFromUrl(this.genesisImgDownloadLink);
}
get expressTagName() {
return this.state.tagName || tagNameFromUrl(this.expressImgDownloadLink);
}
get genesisImgDownloadLink() {
return globalConfig.GENESIS_IMG_OVERRIDE ||
this.state.genesisImg ||
globalConfig.GENESIS_IMG_FALLBACK || "";
}
get expressImgDownloadLink() {
return globalConfig.EXPRESS_IMG_OVERRIDE ||
this.state.expressImg ||
globalConfig.EXPRESS_IMG_FALLBACK || "";
}
fetchLatestRelease = () =>
2020-02-15 11:30:23 -07:00
axios.get<GithubRelease>(ExternalUrl.latestRelease)
2020-01-28 12:30:04 -07:00
.then(resp =>
this.setState({
tagName: resp.data.tag_name,
genesisImg: getImgLink(resp.data.assets, "rpi3"),
expressImg: getImgLink(resp.data.assets, "rpi-"),
})).catch(() => { });
componentDidMount() { this.fetchLatestRelease(); }
render() {
return <div className="static-page os-download-page">
<div className="all-content-wrapper">
<h1>{t("Download FarmBot OS")}</h1>
<p>{t(Content.DOWNLOAD_FBOS)}</p>
<table>
<thead>
<tr>
<th>{t("FarmBot Kit")}</th>
<th>{t("Internal Computer")}</th>
<th>{t("Download Link")}</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>{"Genesis v1.2"}</span>
<span>{"Genesis v1.3"}</span>
<span>{"Genesis v1.4"}</span>
<span>{"Genesis v1.5"}</span>
2020-02-07 16:05:59 -07:00
<span>{"Genesis XL v1.4"}</span>
2020-01-28 12:30:04 -07:00
<span>{"Genesis XL v1.5"}</span>
</td>
<td>{t("Raspberry Pi 3")}</td>
<td>
<a className="transparent-link-button"
href={this.genesisImgDownloadLink}>
2020-02-07 16:05:59 -07:00
{downloadButtonText(this.genesisTagName)}
2020-01-28 12:30:04 -07:00
</a>
</td>
</tr>
<tr>
<td>
<span>{"Express v1.0"}</span>
<span>{"Express XL v1.0"}</span>
</td>
<td>{t("Raspberry Pi Zero W")}</td>
<td>
<a className="transparent-link-button"
href={this.expressImgDownloadLink}>
2020-02-07 16:05:59 -07:00
{downloadButtonText(this.expressTagName)}
2020-01-28 12:30:04 -07:00
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>;
}
}