import { ActionIcon, Anchor, Badge, Button, createStyles, Group, HoverCard, Modal, Table, Text, Title, } from '@mantine/core'; import { IconBrandDiscord, IconBrandGithub, IconLanguage, IconVersions, IconVocabulary, IconWorldWww, } from '@tabler/icons'; import { motion } from 'framer-motion'; import { InitOptions } from 'i18next'; import { i18n } from 'next-i18next'; import Image from 'next/image'; import { ReactNode } from 'react'; import { CURRENT_VERSION } from '../../../data/constants'; import { usePrimaryGradient } from '../layout/useGradient'; interface AboutModalProps { opened: boolean; closeModal: () => void; newVersionAvailable?: string; } export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutModalProps) => { const { classes } = useStyles(); const colorGradiant = usePrimaryGradient(); const informations = useInformationTableItems(newVersionAvailable); return ( closeModal()} opened={opened} title={ About Homarr } size="xl" > Homarr is a simple and modern homepage for your server that helps you access all of your apps in one place. It integrates with the apps you use to display useful information or control them. It's easy to install and supports many different devices. Version information: {informations.map((item, index) => ( ))}
{item.icon} {item.label} {item.content}
Having trouble or questions? Connect with us!
); }; interface InformationTableItem { icon: ReactNode; label: string; content: ReactNode; } interface ExtendedInitOptions extends InitOptions { locales: string[]; } const useInformationTableItems = (newVersionAvailable?: string): InformationTableItem[] => { // TODO: Fix this to not request. Pass it as a prop. const colorGradiant = usePrimaryGradient(); let items: InformationTableItem[] = []; if (i18n !== null) { const usedI18nNamespaces = i18n.reportNamespaces.getUsedNamespaces(); const initOptions = i18n.options as ExtendedInitOptions; items = [ ...items, { icon: , label: 'Loaded I18n translation namespaces', content: ( {usedI18nNamespaces.length} ), }, { icon: , label: 'Configured I18n locales', content: ( {initOptions.locales.length} ), }, ]; } items = [ ...items, { icon: , label: 'Homarr version', content: ( {CURRENT_VERSION} {newVersionAvailable && ( new: {newVersionAvailable} Version{' '} {newVersionAvailable} {' '} is available ! Current version: {CURRENT_VERSION} )} ), }, ]; return items; }; const useStyles = createStyles(() => ({ informationTableColumn: { textAlign: 'right', }, informationIcon: { cursor: 'default', }, }));