feat: fetch version.json on mount, show short SHA + commit link in footer
This commit is contained in:
@@ -42,8 +42,13 @@ function GiteaIcon() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function AppFooter() {
|
function AppFooter({ version }) {
|
||||||
const year = new Date().getFullYear();
|
const year = new Date().getFullYear();
|
||||||
|
const sha = version?.shortSha || null;
|
||||||
|
const built = version?.buildTime
|
||||||
|
? new Date(version.buildTime).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
|
||||||
|
: null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<style>{`
|
<style>{`
|
||||||
@@ -53,13 +58,27 @@ function AppFooter() {
|
|||||||
}
|
}
|
||||||
`}</style>
|
`}</style>
|
||||||
<footer style={sf.footer}>
|
<footer style={sf.footer}>
|
||||||
<span style={sf.copy}>© {year} Jason Stedwell</span>
|
<span style={sf.copy}>© {year} Jason Stedwell</span>
|
||||||
<span style={sf.sep}>·</span>
|
<span style={sf.sep}>·</span>
|
||||||
<DevTicker />
|
<DevTicker />
|
||||||
<span style={sf.sep}>·</span>
|
<span style={sf.sep}>·</span>
|
||||||
<a href={REPO_URL} target="_blank" rel="noopener noreferrer" style={sf.link}>
|
<a href={REPO_URL} target="_blank" rel="noopener noreferrer" style={sf.link}>
|
||||||
<GiteaIcon /> cpas
|
<GiteaIcon /> cpas
|
||||||
</a>
|
</a>
|
||||||
|
{sha && sha !== 'dev' && (
|
||||||
|
<>
|
||||||
|
<span style={sf.sep}>·</span>
|
||||||
|
<a
|
||||||
|
href={`${REPO_URL}/commit/${version.sha}`}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
style={sf.link}
|
||||||
|
title={built ? `Built ${built}` : 'View commit'}
|
||||||
|
>
|
||||||
|
{sha}
|
||||||
|
</a>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</footer>
|
</footer>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
@@ -129,6 +148,14 @@ const sf = {
|
|||||||
export default function App() {
|
export default function App() {
|
||||||
const [tab, setTab] = useState('dashboard');
|
const [tab, setTab] = useState('dashboard');
|
||||||
const [showReadme, setShowReadme] = useState(false);
|
const [showReadme, setShowReadme] = useState(false);
|
||||||
|
const [version, setVersion] = useState(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetch('/version.json')
|
||||||
|
.then(r => r.ok ? r.json() : null)
|
||||||
|
.then(v => { if (v) setVersion(v); })
|
||||||
|
.catch(() => {});
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ToastProvider>
|
<ToastProvider>
|
||||||
@@ -156,7 +183,7 @@ export default function App() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<AppFooter />
|
<AppFooter version={version} />
|
||||||
|
|
||||||
{showReadme && <ReadmeModal onClose={() => setShowReadme(false)} />}
|
{showReadme && <ReadmeModal onClose={() => setShowReadme(false)} />}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user