import { DeleteOutlined, EditOutlined, GlobalOutlined, UnorderedListOutlined, } from '@ant-design/icons/lib' import { useMutation, useQuery } from '@apollo/react-hooks' import { Button, message, Popconfirm, Space, Table, 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 { ADMIN_PAGER_FORM_QUERY, AdminPagerFormEntryAdminQueryData, AdminPagerFormEntryQueryData, AdminPagerFormQueryData, AdminPagerFormQueryVariables, } from 'graphql/query/admin.pager.form.query' import { NextPage } from 'next' import Link from 'next/link' import React, { useState } from 'react' import { useTranslation } from 'react-i18next' import { ADMIN_FORM_DELETE_MUTATION, AdminFormDeleteMutationData, AdminFormDeleteMutationVariables, } from '../../../graphql/mutation/admin.form.delete.mutation' const Index: NextPage = () => { const { t } = useTranslation() const [pagination, setPagination] = useState({ pageSize: 25, }) const [entries, setEntries] = useState() const { loading, refetch } = useQuery( ADMIN_PAGER_FORM_QUERY, { 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] = useMutation< AdminFormDeleteMutationData, AdminFormDeleteMutationVariables >(ADMIN_FORM_DELETE_MUTATION) const deleteForm = async (form: AdminFormDeleteMutationVariables) => { try { await executeDelete({ variables: { id: form.id, }, }) const next = entries.filter((entry) => entry.id !== form.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 }, }, { title: t('form:row.title'), dataIndex: 'title', }, { title: t('form:row.admin'), dataIndex: 'admin', render(user: AdminPagerFormEntryAdminQueryData) { return ( ) }, }, { title: t('form:row.language'), dataIndex: 'language', render(lang: string) { return t(`language:${lang}`) }, }, { title: t('form:row.created'), dataIndex: 'created', render(date: string) { return }, }, { title: t('form:row.lastModified'), dataIndex: 'lastModified', render(date: string) { return }, }, { title: t('form:row.menu'), align: 'right', render(row: AdminPagerFormEntryQueryData) { return ( deleteForm(row)} okText={t('form:deleteNow')} okButtonProps={{ danger: true }} > ) }, }, ] return ( , ]} > { setPagination(next) await refetch() }} /> ) } export default withAuth(Index, ['admin'])