Newer
Older
CrypticOreWallet / src / layouts / main / components / nav / Brand.tsx
@Drew Lemmy Drew Lemmy on 8 Aug 2020 1 KB feat: initial commit
import React from "react";

import semverMajor from "semver/functions/major";
import semverMinor from "semver/functions/minor";
import semverPatch from "semver/functions/patch";
import semverPrerelease from "semver/functions/prerelease";

import Badge from "react-bootstrap/Badge";

import "./Brand.scss";

import packageJson from "@/package.json";

const prereleaseTagColours: { [key: string]: string } = {
  "dev": "danger",
  "alpha": "warning",
  "beta": "info",
  "rc": "success"
};

export default function() {
  const version = packageJson.version;

  const major = semverMajor(version);
  const minor = semverMinor(version);
  const patch = semverPatch(version);
  const prerelease = semverPrerelease(version);

  // Convert semver prerelease parts to Bootstrap badge
  let badge = null;
  if (prerelease && prerelease.length) {
    const variant = prereleaseTagColours[prerelease[0]] || "light";
    badge = <Badge variant={variant}>{prerelease.join(".")}</Badge>
  }

  return (
    <div className="navbar-brand">
      <a href="/">
        KristWeb
        <span className="navbar-version">v{major}.{minor}.{patch}</span>
        {badge}
      </a>
    </div>
  )
}