Adding something to the about page for now, including the app version to better know what versions of the app people are runningpull/304/head
parent
ff618956b5
commit
3f2a04c881
@ -0,0 +1,5 @@
|
|||||||
|
export interface SettingsAboutResponse {
|
||||||
|
version: string;
|
||||||
|
totalRequests: number;
|
||||||
|
totalMediaItems: number;
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { withProperties } from '../../../utils/typeHelpers';
|
||||||
|
|
||||||
|
interface ListItemProps {
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ListItem: React.FC<ListItemProps> = ({ title, children }) => {
|
||||||
|
return (
|
||||||
|
<div className="py-4 sm:py-5 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
|
<dt className="text-sm font-medium text-gray-200">{title}</dt>
|
||||||
|
<dd className="mt-1 flex text-sm text-gray-400 sm:mt-0 sm:col-span-2">
|
||||||
|
<span className="flex-grow">{children}</span>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface ListProps {
|
||||||
|
title: string;
|
||||||
|
subTitle?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const List: React.FC<ListProps> = ({ title, subTitle, children }) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div>
|
||||||
|
<h3 className="text-lg leading-6 font-medium text-gray-100">{title}</h3>
|
||||||
|
{subTitle && (
|
||||||
|
<p className="mt-1 max-w-2xl text-sm text-gray-300">{subTitle}</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="mt-5 border-t border-gray-800">
|
||||||
|
<dl className="divide-y divide-gray-800">{children}</dl>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default withProperties(List, { Item: ListItem });
|
@ -0,0 +1,67 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import useSWR from 'swr';
|
||||||
|
import Error from '../../../pages/_error';
|
||||||
|
import List from '../../Common/List';
|
||||||
|
import LoadingSpinner from '../../Common/LoadingSpinner';
|
||||||
|
import { SettingsAboutResponse } from '../../../../server/interfaces/api/settingsInterfaces';
|
||||||
|
import { FormattedNumber } from 'react-intl';
|
||||||
|
|
||||||
|
const SettingsAbout: React.FC = () => {
|
||||||
|
const { data, error } = useSWR<SettingsAboutResponse>(
|
||||||
|
'/api/v1/settings/about'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
return <Error statusCode={500} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data && !error) {
|
||||||
|
return <LoadingSpinner />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
return <LoadingSpinner />;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="mb-8">
|
||||||
|
<List title="Overseerr Information">
|
||||||
|
<List.Item title="Version">{data.version}</List.Item>
|
||||||
|
<List.Item title="Total Media">
|
||||||
|
<FormattedNumber value={data.totalMediaItems} />
|
||||||
|
</List.Item>
|
||||||
|
<List.Item title="Total Requests">
|
||||||
|
<FormattedNumber value={data.totalRequests} />
|
||||||
|
</List.Item>
|
||||||
|
</List>
|
||||||
|
</div>
|
||||||
|
<div className="mb-8">
|
||||||
|
<List title="Getting Support">
|
||||||
|
<List.Item title="GitHub Discussions">
|
||||||
|
<a
|
||||||
|
href="https://github.com/sct/overseerr/discussions"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
className="text-indigo-500 hover:underline"
|
||||||
|
>
|
||||||
|
https://github.com/sct/overseerr/discussions
|
||||||
|
</a>
|
||||||
|
</List.Item>
|
||||||
|
<List.Item title="Discord">
|
||||||
|
<a
|
||||||
|
href="https://discord.gg/PkCWJSeCk7"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
className="text-indigo-500 hover:underline"
|
||||||
|
>
|
||||||
|
Click here to join our Discord server.
|
||||||
|
</a>
|
||||||
|
</List.Item>
|
||||||
|
</List>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default SettingsAbout;
|
@ -0,0 +1,17 @@
|
|||||||
|
import { NextPage } from 'next';
|
||||||
|
import React from 'react';
|
||||||
|
import SettingsAbout from '../../components/Settings/SettingsAbout';
|
||||||
|
import SettingsLayout from '../../components/Settings/SettingsLayout';
|
||||||
|
import useRouteGuard from '../../hooks/useRouteGuard';
|
||||||
|
import { Permission } from '../../hooks/useUser';
|
||||||
|
|
||||||
|
const SettingsAboutPage: NextPage = () => {
|
||||||
|
useRouteGuard(Permission.MANAGE_SETTINGS);
|
||||||
|
return (
|
||||||
|
<SettingsLayout>
|
||||||
|
<SettingsAbout />
|
||||||
|
</SettingsLayout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default SettingsAboutPage;
|
Loading…
Reference in new issue