Files
Homarr/src/pages/docker.tsx

52 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-07-30 09:48:35 +02:00
import { Stack } from '@mantine/core';
import { ContainerInfo } from 'dockerode';
import { GetServerSideProps } from 'next';
import { useState } from 'react';
2023-08-01 01:13:21 +02:00
import { MainLayout } from '~/components/layout/Templates/MainLayout';
import { env } from '~/env';
2023-07-30 09:48:35 +02:00
import ContainerActionBar from '~/modules/Docker/ContainerActionBar';
import DockerTable from '~/modules/Docker/DockerTable';
import { getServerAuthSession } from '~/server/auth';
2023-07-30 09:48:35 +02:00
import { getServerSideTranslations } from '~/tools/server/getServerSideTranslations';
import { dashboardNamespaces } from '~/tools/server/translation-namespaces';
import { api } from '~/utils/api';
export default function DockerPage() {
const [selection, setSelection] = useState<ContainerInfo[]>([]);
const dockerEnabled = env.NEXT_PUBLIC_DOCKER_ENABLED;
2023-07-30 09:48:35 +02:00
const { data, refetch, isRefetching } = api.docker.containers.useQuery(undefined, {
enabled: dockerEnabled,
});
const reload = () => {
refetch();
setSelection([]);
};
return (
<MainLayout>
<Stack>
<ContainerActionBar selected={selection} reload={reload} isLoading={isRefetching} />
<DockerTable containers={data ?? []} selection={selection} setSelection={setSelection} />
</Stack>
</MainLayout>
);
}
export const getServerSideProps: GetServerSideProps = async ({ locale, req, res }) => {
if (!env.NEXT_PUBLIC_DOCKER_ENABLED) return { notFound: true };
const session = await getServerAuthSession({ req, res });
if (!session?.user.isAdmin) {
return {
notFound: true,
};
}
2023-07-30 09:48:35 +02:00
const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res);
return {
props: {
...translations,
},
};
};