import { DeleteOutlined, EditOutlined, GlobalOutlined, UnorderedListOutlined, WarningOutlined, } from '@ant-design/icons/lib' import { Button, message, Popconfirm, Space, Table, Tag, Tooltip } from 'antd' import { PaginationProps } from 'antd/es/pagination' import { ColumnsType } from 'antd/lib/table/interface' import { DateTime } from 'components/date.time' import { FormIsLive } from 'components/form/admin/is.live' import Structure from 'components/structure' import { TimeAgo } from 'components/time.ago' import { withAuth } from 'components/with.auth' import { NextPage } from 'next' import Link from 'next/link' import React, { useState } from 'react' import { useTranslation } from 'react-i18next' import { useWindowSize } from '../../../components/use.window.size' import { FormPagerFragment } from '../../../graphql/fragment/form.pager.fragment' import { useFormDeleteMutation } from '../../../graphql/mutation/form.delete.mutation' import { useFormPagerQuery } from '../../../graphql/query/form.pager.query' const Index: NextPage = () => { const { t } = useTranslation() const { width } = useWindowSize() const [pagination, setPagination] = useState({ pageSize: 25, }) const [entries, setEntries] = useState() const { loading, refetch, error } = useFormPagerQuery({ variables: { limit: pagination.pageSize, start: Math.max(0, pagination.current - 1) * pagination.pageSize || 0, }, onCompleted: ({ pager }) => { setPagination({ ...pagination, total: pager.total, }) setEntries(pager.entries) }, }) const [executeDelete] = useFormDeleteMutation() const deleteForm = async (id: string) => { try { await executeDelete({ variables: { id, }, }) const next = entries.filter((entry) => entry.id !== id) if (next.length === 0) { setPagination({ ...pagination, current: 1 }) } else { setEntries(next) } await message.success(t('form:deleted')) } catch (e) { await message.error(t('form:deleteError')) } } const columns: ColumnsType = [ { title: t('form:row.isLive'), dataIndex: 'isLive', render(live: boolean) { return }, responsive: ['md'], }, { title: t('form:row.title'), dataIndex: 'title', }, { title: t('form:row.admin'), dataIndex: 'admin', render(_, { admin: user }) { if (!user) { return } return ( ) }, responsive: ['lg'], }, { title: t('form:row.language'), dataIndex: 'language', render(lang: string) { return t(`language:${lang}`) }, responsive: ['lg'], }, { title: t('form:row.created'), dataIndex: 'created', render(date: string) { return }, responsive: ['lg'], }, { title: t('form:row.lastModified'), dataIndex: 'lastModified', render(date: string) { return }, responsive: ['md'], }, { title: t('form:row.menu'), align: 'right', render(_, row) { return ( deleteForm(row.id)} okText={t('form:deleteNow')} okButtonProps={{ danger: true }} > {row.isLive && ( )} {!row.isLive && ( )} ) }, }, ] return ( , ]} error={error?.message} > { setPagination(next) await refetch() }} /> ) } export default withAuth(Index, ['admin'])