Skip to content
Snippets Groups Projects
Select Git revision
  • c37852c0e2cc20b0cea73bf6769c21439a2768ed
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

InvitedUsers.jsx

Blame
  • InvitedUsers.jsx 3.17 KiB
    import React, { useState } from 'react';
    import PropTypes from 'prop-types';
    import { Table } from 'react-bootstrap';
    import { useTranslation } from 'react-i18next';
    import { CheckIcon, XMarkIcon } from '@heroicons/react/24/solid';
    import SortBy from '../../shared_components/search/SortBy';
    import useInvitations from '../../../hooks/queries/admin/manage_users/useInvitations';
    import Pagination from '../../shared_components/Pagination';
    import NoSearchResults from '../../shared_components/search/NoSearchResults';
    import EmptyUsersList from './EmptyUsersList';
    import { localizeDateTimeString } from '../../../helpers/DateTimeHelper';
    import { useAuth } from '../../../contexts/auth/AuthProvider';
    
    export default function InvitedUsers({ searchInput }) {
      const { t } = useTranslation();
      const [page, setPage] = useState();
      const { data: invitations } = useInvitations(searchInput, page);
      const currentUser = useAuth();
    
      if (!searchInput && invitations?.data?.length === 0) {
        return <EmptyUsersList text={t('admin.manage_users.empty_invited_users')} subtext={t('admin.manage_users.empty_invited_users_subtext')} />;
      }
    
      return (
        <div>
          {
          (searchInput && invitations?.data.length === 0)
            ? (
              <div className="mt-5">
                <NoSearchResults text={t('user.search_not_found')} searchInput={searchInput} />
              </div>
            ) : (
              <div id="admin-table">
                <Table className="table-bordered border border-2 mb-0" hover responsive>
                  <thead>
                    <tr className="text-muted small">
                      <th className="fw-normal border-end-0">{ t('user.email_address') }<SortBy fieldName="email" /></th>
                      <th className="fw-normal border-0">{ t('admin.manage_users.invited.time_sent') }</th>
                      <th className="fw-normal border-0">{ t('admin.manage_users.invited.valid') }</th>
                    </tr>
                  </thead>
                  <tbody className="border-top-0">
                    {invitations?.data?.length
                      && (
                        invitations?.data?.map((invitation) => (
                          <tr key={invitation.email} className="align-middle text-muted">
                            <td className="text-dark border-0">{invitation.email}</td>
                            <td className="text-dark border-0">{localizeDateTimeString(invitation.updated_at, currentUser?.language)}</td>
                            <td className="text-dark border-0">
                              { invitation.valid ? <CheckIcon className="text-success hi-s" /> : <XMarkIcon className="text-danger hi-s" />}
                            </td>
                          </tr>
                        ))
                      )}
                  </tbody>
                </Table>
                <div className="pagination-wrapper">
                  { invitations?.meta && (
                  <Pagination
                    page={invitations?.meta?.page}
                    totalPages={invitations?.meta?.pages}
                    setPage={setPage}
                  />
                  ) }
                </div>
              </div>
    
            )
            }
        </div>
      );
    }
    
    InvitedUsers.propTypes = {
      searchInput: PropTypes.string,
    };
    
    InvitedUsers.defaultProps = {
      searchInput: '',
    };