From e020fb69c14e0c8e5c9a639356daa9fce66fe62a Mon Sep 17 00:00:00 2001 From: karimaldeen Date: Sat, 17 Aug 2024 15:37:08 +0300 Subject: [PATCH] drag --- src/Components/Drage/DragAndDropList.tsx | 51 ++++++++++++++++++++++++ src/Pages/Unit/Table.tsx | 4 +- src/Pages/lesson/Table.tsx | 4 +- src/Pages/question/AddPage.tsx | 3 +- src/Pages/question/Model/formUtil.ts | 11 +++-- src/Pages/question/useTableColumns.tsx | 10 +++-- src/Routes.tsx | 1 + src/enums/UserType.ts | 5 +++ src/translate/ar.json | 3 +- src/types/App.ts | 3 ++ src/types/Item.ts | 1 + src/types/UserType.ts | 5 +++ src/utils/hasAbility.ts | 5 ++- 13 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 src/Components/Drage/DragAndDropList.tsx create mode 100644 src/enums/UserType.ts create mode 100644 src/types/UserType.ts diff --git a/src/Components/Drage/DragAndDropList.tsx b/src/Components/Drage/DragAndDropList.tsx new file mode 100644 index 0000000..c035901 --- /dev/null +++ b/src/Components/Drage/DragAndDropList.tsx @@ -0,0 +1,51 @@ +import React, { useState } from 'react'; + +const DragAndDropList: React.FC = () => { + const [items, setItems] = useState(['Item 1', 'Item 2', 'Item 3', 'Item 4']); + const [draggedItemIndex, setDraggedItemIndex] = useState(null); + + const handleDragStart = (index: number) => { + setDraggedItemIndex(index); + }; + + const handleDragOver = (index: number) => { + if (index !== draggedItemIndex && draggedItemIndex !== null) { + const newItems = [...items]; + const draggedItem = newItems[draggedItemIndex]; + newItems.splice(draggedItemIndex, 1); + newItems.splice(index, 0, draggedItem); + setItems(newItems); + setDraggedItemIndex(index); + } + }; + + const handleDrop = () => { + setDraggedItemIndex(null); + }; + + return ( +
+ {items.map((item, index) => ( +
handleDragStart(index)} + onDragOver={() => handleDragOver(index)} + onDrop={handleDrop} + style={{ + padding: '8px', + margin: '4px', + border: '1px solid #ccc', + backgroundColor: '#f9f9f9', + cursor: 'move', + userSelect: 'none' + }} + > + {item} +
+ ))} +
+ ); +}; + +export default DragAndDropList; \ No newline at end of file diff --git a/src/Pages/Unit/Table.tsx b/src/Pages/Unit/Table.tsx index affed00..d838b77 100644 --- a/src/Pages/Unit/Table.tsx +++ b/src/Pages/Unit/Table.tsx @@ -10,11 +10,11 @@ const App: React.FC = () => { const { subject_id } = useParams(); const response = useGetAllUnit({ subject_id: subject_id, pagination: true }); const { setOldObjectToEdit } = useObjectToEdit(); - console.log(response?.data?.data, "response?.data"); + // console.log(response?.data?.data, "response?.data"); const data = response?.data?.data; const lastElement = response?.data?.data && response?.data?.data[data?.length - 1]; - console.log(lastElement); + // console.log(lastElement); useEffect(() => { if (lastElement) { diff --git a/src/Pages/lesson/Table.tsx b/src/Pages/lesson/Table.tsx index fa75fd7..2cb2934 100644 --- a/src/Pages/lesson/Table.tsx +++ b/src/Pages/lesson/Table.tsx @@ -11,11 +11,11 @@ const App: React.FC = () => { const response = useGetAllLesson({ unit_id: unit_id, pagination: true }); const { setOldObjectToEdit } = useObjectToEdit(); - console.log(response?.data?.data, "response?.data"); + // console.log(response?.data?.data, "response?.data"); const data = response?.data?.data; const lastElement = response?.data?.data && response?.data?.data[data?.length - 1]; - console.log(lastElement); + // console.log(lastElement); useEffect(() => { if (lastElement) { diff --git a/src/Pages/question/AddPage.tsx b/src/Pages/question/AddPage.tsx index 4fb8c70..4d79811 100644 --- a/src/Pages/question/AddPage.tsx +++ b/src/Pages/question/AddPage.tsx @@ -103,8 +103,7 @@ const AddPage: React.FC = () => { ) => { const DataToSend = structuredClone(values); console.log(DataToSend); - - return ; + setTagsSearch(null); const canAnswersBeShuffled = DataToSend?.canAnswersBeShuffled ? 1 : 0; if (isBseQuestion || DataToSend?.isBase === 1) { diff --git a/src/Pages/question/Model/formUtil.ts b/src/Pages/question/Model/formUtil.ts index fe0d6cb..59b5736 100644 --- a/src/Pages/question/Model/formUtil.ts +++ b/src/Pages/question/Model/formUtil.ts @@ -7,13 +7,15 @@ export const getInitialValues = (objectToEdit: Question): any => { const tags = objectToEdit?.tags?.map((item: any, index: number) => { return { ...item, key: index }; }); +console.log(objectToEdit?.canAnswersBeShuffled); return { id: objectToEdit?.id ?? null, content: objectToEdit?.content ?? "", image: objectToEdit?.image ?? "", subject_id: objectToEdit?.subject_id ?? "", - canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ?? 0, + canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ? 1 : 0, + hint: objectToEdit?.hint ?? "", isBase: 0, parent_id: objectToEdit?.parent_id ?? "", QuestionOptions: objectToEdit?.QuestionOptions ?? [], @@ -48,7 +50,8 @@ export const getInitialValuesBase = (objectToEdit: Question): any => { return { ...item, - canAnswersBeShuffled: item?.canAnswersBeShuffled ?? 0, + canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ? 1 : 0, + hint: objectToEdit?.hint ?? "", tags, }; }); @@ -62,8 +65,8 @@ export const getInitialValuesBase = (objectToEdit: Question): any => { subject_id: objectToEdit?.subject_id ?? "", isBase: 1, parent_id: objectToEdit?.parent_id ?? "", - canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ?? 0, - + canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ? 1 : 0, + hint: objectToEdit?.hint ?? "", Questions: questions, }; }; diff --git a/src/Pages/question/useTableColumns.tsx b/src/Pages/question/useTableColumns.tsx index 4300d26..26758f8 100644 --- a/src/Pages/question/useTableColumns.tsx +++ b/src/Pages/question/useTableColumns.tsx @@ -60,12 +60,14 @@ export const useColumns = () => { record?.isBase ? t("practical.yes") : t("practical.no"), }, { - title: `${t("columns.question_options_count")}`, - dataIndex: "name", - key: "name", + title: t("columns.canAnswersBeShuffled"), + dataIndex: "canAnswersBeShuffled", + key: "canAnswersBeShuffled", align: "center", - render: (text, record) => record?.question_options_count, + render: (text, record) => + record?.canAnswersBeShuffled ? t("practical.yes") : t("practical.no"), }, + { title: canAddQuestion ? (