// Copyright (c) 2020-2021 Drew Lemmy // This file is part of KristWeb 2 under GPL-3.0. // Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt import { Table, Progress, Typography, Tooltip } from "antd"; import { ExclamationCircleOutlined } from "@ant-design/icons"; import { useTranslation } from "react-i18next"; import { AnalysedLanguages } from "./analyseLangs"; import { MissingKeysTable } from "./MissingKeysTable"; import { Flag } from "@comp/Flag"; const { Text } = Typography; interface LanguagesTableProps { loading?: boolean; analysed?: AnalysedLanguages | undefined; showExpandableRow?: boolean; } export function LanguagesTable({ loading, analysed, showExpandableRow }: LanguagesTableProps): JSX.Element { const { t } = useTranslation(); return <Table loading={loading} size="small" dataSource={analysed?.languages} rowKey="code" pagination={{ hideOnSinglePage: true }} columns={[ { title: t("settings.translations.columnLanguageCode"), dataIndex: "code", key: "code", render: (code, row) => <> <Flag code={row?.language?.country} style={{ width: 22, height: 15, marginRight: 8 }} /> {code} </>, width: 96, }, { title: t("settings.translations.columnLanguage"), dataIndex: ["language", "name"], key: "language", render: (_, row) => <> {row?.language?.name} {row?.language?.nativeName && <Text type="secondary"> ({row.language.nativeName})</Text>} </> }, { title: t("settings.translations.columnKeys"), key: "keys", render: (_, row) => row.error || !row.keys ? ( <Tooltip title={row.error || t("settings.translations.errorNoKeys")}> <Text type="danger"><ExclamationCircleOutlined /></Text> </Tooltip> ) : <>{row.keyCount.toLocaleString()}</>, sorter: (a, b) => a.keyCount - b.keyCount }, { title: t("settings.translations.columnMissingKeys"), key: "missingKeys", render: (_, row) => (!row.error && row.keys && <>{Math.max((analysed?.enKeyCount || 1) - row.keyCount, 0).toLocaleString()}</>), sorter: (a, b) => b.keyCount - a.keyCount }, { title: t("settings.translations.columnProgress"), key: "progress", render: (_, row) => (!row.error && row.keys && <Progress percent={Math.round(Math.min(row.keyCount / (analysed?.enKeyCount || 1), 1) * 100)} />) } ]} expandable={{ rowExpandable: row => !!row.missingKeys?.length && showExpandableRow !== false, expandedRowRender: row => <MissingKeysTable lang={row} /> }} />; }