import { DeleteOutlined, EditOutlined } from '@ant-design/icons/lib' import { Button, message, Popconfirm, Space, Table, Tag } from 'antd' import { PaginationProps } from 'antd/es/pagination' import { ColumnsType } from 'antd/lib/table/interface' import Structure from 'components/structure' 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 { DateTime } from '../../../components/date.time' import { useWindowSize } from '../../../components/use.window.size' import { UserRole } from '../../../components/user/role' import { UserPagerFragment } from '../../../graphql/fragment/user.pager.fragment' import { useUserDeleteMutation } from '../../../graphql/mutation/user.delete.mutation' import { useUserPagerQuery } from '../../../graphql/query/user.pager.query' const Index: NextPage = () => { const { width } = useWindowSize() const { t } = useTranslation() const [pagination, setPagination] = useState({ pageSize: 10, }) const [entries, setEntries] = useState() const { loading, refetch, error } = useUserPagerQuery({ 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] = useUserDeleteMutation() const deleteUser = 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('user:deleted')) } catch (e) { await message.error(t('user:deleteError')) } } const columns: ColumnsType = [ { title: t('user:row.roles'), dataIndex: 'roles', render(roles: string[]) { return }, responsive: ['md'], }, { title: t('user:row.email'), render(_, row) { return {row.email} }, }, { title: t('user:row.created'), dataIndex: 'created', render(date: string) { return }, responsive: ['lg'], }, { title: t('user:row.menu'), align: 'right', render(_, row) { return ( deleteUser(row.id)} okText={t('user:deleteNow')} okButtonProps={{ danger: true }} > ) }, }, ] return ( { setPagination(next) await refetch() }} /> ) } export default withAuth(Index, ['admin'])