import { PencilIcon } from '@heroicons/react/solid'; import axios from 'axios'; import React, { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import type { User } from '../../hooks/useUser'; import { useUser } from '../../hooks/useUser'; import globalMessages from '../../i18n/globalMessages'; import Modal from '../Common/Modal'; import PermissionEdit from '../PermissionEdit'; interface BulkEditProps { selectedUserIds: number[]; users?: User[]; onCancel?: () => void; onComplete?: (updatedUsers: User[]) => void; onSaving?: (isSaving: boolean) => void; } const messages = defineMessages({ userssaved: 'User permissions saved successfully!', userfail: 'Something went wrong while saving user permissions.', edituser: 'Edit User Permissions', }); const BulkEditModal: React.FC = ({ selectedUserIds, users, onCancel, onComplete, onSaving, }) => { const { user: currentUser } = useUser(); const intl = useIntl(); const { addToast } = useToasts(); const [currentPermission, setCurrentPermission] = useState(0); const [isSaving, setIsSaving] = useState(false); useEffect(() => { if (onSaving) { onSaving(isSaving); } }, [isSaving, onSaving]); const updateUsers = async () => { try { setIsSaving(true); const { data: updated } = await axios.put(`/api/v1/user`, { ids: selectedUserIds, permissions: currentPermission, }); if (onComplete) { onComplete(updated); } addToast(intl.formatMessage(messages.userssaved), { appearance: 'success', autoDismiss: true, }); } catch (e) { addToast(intl.formatMessage(messages.userfail), { appearance: 'error', autoDismiss: true, }); } finally { setIsSaving(false); } }; useEffect(() => { if (users) { const selectedUsers = users.filter((u) => selectedUserIds.includes(u.id)); const { permissions: allPermissionsEqual } = selectedUsers.reduce( ({ permissions: aPerms }, { permissions: bPerms }) => { return { permissions: aPerms === bPerms ? aPerms : NaN, }; }, { permissions: selectedUsers[0].permissions } ); if (allPermissionsEqual) { setCurrentPermission(allPermissionsEqual); } } }, [users, selectedUserIds]); return ( } onOk={() => { updateUsers(); }} okDisabled={isSaving} okText={intl.formatMessage(globalMessages.save)} onCancel={onCancel} >
setCurrentPermission(newPermission)} />
); }; export default BulkEditModal;