From ac7a8a0872d62457186b20c029d621e7cf4f702c Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Sun, 12 Dec 2021 00:17:00 +0300 Subject: [PATCH] fix: transform to formdata helper --- src/helpers/index.ts | 12 +++--- .../StudentTableList/BulkActionsMenu.tsx | 34 +++++++++++---- .../StudentTableList/StudentTableList.tsx | 42 +++++++++++-------- 3 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 641f21f..8b65582 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -47,12 +47,14 @@ export function transformToFormData(data: object): FormData { * Append value to form-data format */ Object.entries(data).forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach((v, i) => formData.append(`${key}[${i}]`, v)); - return; - } + if (value) { + if (Array.isArray(value)) { + value.forEach((v, i) => formData.append(`${key}[${i}]`, v)); + return; + } - formData.append(key, value); + formData.append(key, value); + } }); return formData; diff --git a/src/pages/courses/edit/components/StudentTableList/BulkActionsMenu.tsx b/src/pages/courses/edit/components/StudentTableList/BulkActionsMenu.tsx index ba47e76..28fefe1 100644 --- a/src/pages/courses/edit/components/StudentTableList/BulkActionsMenu.tsx +++ b/src/pages/courses/edit/components/StudentTableList/BulkActionsMenu.tsx @@ -1,23 +1,43 @@ import React from 'react'; -import { Button, Menu, MenuButton, MenuList, MenuItem } from '@chakra-ui/react'; +import { Button, Menu, MenuButton, MenuList, MenuItem, useToast } from '@chakra-ui/react'; import { ChevronDownIcon, DeleteIcon } from '@chakra-ui/icons'; import { MdRemove, MdImportExport } from 'react-icons/md'; import type { ICourse } from '@educt/interfaces'; +import { CourseServiceInstance } from '@educt/services'; type BulkActionsMenuPropsType = { + courseId: string; selected: ICourse['students']; rows: ICourse['students']; setRows: React.Dispatch>; + setIsLoading: React.Dispatch>; + onRemoved: (removed: ICourse['students']) => void; }; -const BulkActionsMenu: React.FC = ({ selected, rows, setRows }) => { +const BulkActionsMenu: React.FC = ({ + courseId, + selected, + rows, + setRows, + setIsLoading, + onRemoved, +}) => { + const toast = useToast(); + const handleDetach = async () => { - console.log( - `Detaching from course: `, - selected.map(s => s.id) - ); - setRows(rows.filter(r => selected.every(s => s.id !== r.id))); + try { + setIsLoading(true); + const ids = selected.map(s => s.id); + await CourseServiceInstance.detachStudentsList(courseId, ids); + toast({ title: 'Students removed form course.', status: 'info' }); + setRows(rows.filter(r => selected.every(s => s.id !== r.id))); + onRemoved(selected); + } catch (error) { + console.error(error); + } finally { + setIsLoading(false); + } }; const handleDelete = async () => undefined; const handleExport = async () => undefined; diff --git a/src/pages/courses/edit/components/StudentTableList/StudentTableList.tsx b/src/pages/courses/edit/components/StudentTableList/StudentTableList.tsx index 5c60fd4..1a380d7 100644 --- a/src/pages/courses/edit/components/StudentTableList/StudentTableList.tsx +++ b/src/pages/courses/edit/components/StudentTableList/StudentTableList.tsx @@ -151,35 +151,43 @@ const StudentTableList: React.FC = props => { onAdded={users => setRows(prev => [...prev, ...users])} /> - - - - - - - + + + + + + + + + + {isLoading && ( + + + Loading... + + + + )} - {selected.length !== 0 && ( <> You have selected {selected.length} student(s). - + setSelected(prev => prev.filter(s => removed.every(r => s.id !== r.id)))} + /> )} - {isLoading && ( - - - - Loading... - - - )}