import React, { useEffect, useState } from 'react'; import { Flex } from '@wordpress/components'; import PropTypes from 'prop-types'; import { TableControl } from '../../../components/table/TableControl'; import { TablePagination } from '../../../components/table/TablePagination'; import { vfAPI } from '../../../lib/vfAPI'; import type { Localized } from '../../../types'; import { SearchModal } from '../../../components/ui/modals/SearchModal'; import { Spinner } from '../../../../../resources/js/Shared/Spinner'; declare const localized: Localized; export const GroupCustomers = (props) => { const headers = [ { label: 'ID', value: 'id', isId: true }, { label: 'Name', value: 'name', isPrimary: true }, { label: 'Email', value: 'email' }, { label: 'Admin', value: 'group_admin', isBoolean: true }, { label: 'Approve', value: 'approver', isBoolean: true }, { label: 'Request', value: 'requestor', isBoolean: true }, ]; const nextApiURL = localized.apiURL.replace('v1', 'v2'); const [isBusy, setBusy] = useState(false); const handleAdd = (ids: Array<{ id: number }>) => { setBusy(true); const data = { customers: ids, }; const url = `${nextApiURL}/admin/groups/${props.groupId}`; vfAPI.patch(url, data).then((response) => { if (!response.data.errors.length) { props.handleUpdate(); } }); }; const handleChangePage = (page: number) => { setBusy(true); props.handleChangePage(page); }; const handleRemove = (id: number) => { setBusy(true); const data = { customers: [ { id, deleted: true, }, ], }; const url = `${nextApiURL}/admin/groups/${props.groupId}`; vfAPI.patch(url, data).then((response) => { if (!response.data.errors.length) { props.handleUpdate(); } }); }; /** * Set isBusy to false once prop.customers is updated from parent component. */ useEffect(() => { setBusy(false); }, [props.customers]); if (!props.customers) { return ; } return ( <> {props.customers && ( <> )} ); }; GroupCustomers.propTypes = { customers: PropTypes.object, // Paginated customers object. groupId: PropTypes.number, // Group ID handleUpdate: PropTypes.func, // Callback to trigger refreshing parent component. handleChangePage: PropTypes.func, // Callback for sending updated page number to parent component. };