From 7d28a4d397ac51b31774e1eb76e03ae67d71847d Mon Sep 17 00:00:00 2001 From: "philipp.monz" <philipp.monz@fairkom.eu> Date: Fri, 2 Jun 2023 14:35:28 +0200 Subject: [PATCH] Spinner during fetch --- .../{registerwork => bundel}/Spinner.jsx | 0 .../registerwork/registerworkFileUpload.jsx | 11 +- Frontend/src/pages/MyWorksPage.jsx | 110 +++++++++-------- Frontend/src/pages/SearchWorksPage.jsx | 111 ++++++++++-------- 4 files changed, 130 insertions(+), 102 deletions(-) rename Frontend/src/components/{registerwork => bundel}/Spinner.jsx (100%) diff --git a/Frontend/src/components/registerwork/Spinner.jsx b/Frontend/src/components/bundel/Spinner.jsx similarity index 100% rename from Frontend/src/components/registerwork/Spinner.jsx rename to Frontend/src/components/bundel/Spinner.jsx diff --git a/Frontend/src/components/registerwork/registerworkFileUpload.jsx b/Frontend/src/components/registerwork/registerworkFileUpload.jsx index bfc633a..1c1bb33 100644 --- a/Frontend/src/components/registerwork/registerworkFileUpload.jsx +++ b/Frontend/src/components/registerwork/registerworkFileUpload.jsx @@ -1,10 +1,11 @@ -import React, { useState, useCallback } from "react"; -import FormatService from "../../services/FormatService"; +import React, { useCallback, useState } from "react"; + import ApiService from "../../services/ApiService"; -import { useDropzone } from "react-dropzone"; -import { XIcon } from "@heroicons/react/outline"; -import Spinner from "./Spinner"; import EasyTrans from "../bundel/EasyTrans"; +import FormatService from "../../services/FormatService"; +import Spinner from "../bundel/Spinner"; +import { XIcon } from "@heroicons/react/outline"; +import { useDropzone } from "react-dropzone"; const RegisterWorkFileUpload = (props) => { const [fileUploaded, setFileUploaded] = useState(false); diff --git a/Frontend/src/pages/MyWorksPage.jsx b/Frontend/src/pages/MyWorksPage.jsx index 9ea817f..18cfaa4 100644 --- a/Frontend/src/pages/MyWorksPage.jsx +++ b/Frontend/src/pages/MyWorksPage.jsx @@ -3,6 +3,7 @@ import React, { useEffect, useState } from "react"; import ApiService from "../services/ApiService"; import EasyTrans from "../components/bundel/EasyTrans"; import Pagination from "../components/bundel/Pagination"; +import Spinner from "../components/bundel/Spinner"; import UserWorkListElement from "../components/bundel/UserWorkListElement"; import WorkTypIcon from "../components/registerwork/WorkTypIcon"; @@ -14,9 +15,11 @@ const MyWorksPage = () => { const [totalPages, setTotalPages] = useState(); const [totalElements, setTotalElements] = useState(); const [pagination, setPagination] = useState(); + const [isLoading, setIsLoading] = useState(true); useEffect(() => { const fetchData = async () => { + setIsLoading(true); try { const result = await ApiService.getUserWorkList2(page, itemsPerPage); setUserWorkList(result?.content); @@ -25,7 +28,8 @@ const MyWorksPage = () => { setPagination(result?.pageable); } catch (error) { console.error("Error:", error); - throw error; + } finally { + setIsLoading(false); } }; @@ -34,55 +38,65 @@ const MyWorksPage = () => { return ( <> - <div className="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8 my-2"> - {workView ? ( - userWorkList.length > 0 ? ( - userWorkList.map((userWork) => { - return ( - <UserWorkListElement - key={userWork.id} - userWork={userWork} - searchWork={true} - editable="true" - ></UserWorkListElement> - ); - }) + {isLoading ? ( + <div className="flex justify-center"> + <div className="flex justify-center column p-10"> + <Spinner /> + </div> + </div> + ) : ( + <div className="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8 my-2"> + {workView ? ( + userWorkList.length > 0 ? ( + userWorkList.map((userWork) => { + return ( + <UserWorkListElement + key={userWork.id} + userWork={userWork} + searchWork={true} + editable="true" + ></UserWorkListElement> + ); + }) + ) : ( + <div className="flex items-center justify-center "> + <p className="text-2xl text-gray-500"> + <EasyTrans>NoElementsFound</EasyTrans> + </p> + </div> + ) ) : ( - <div className="flex items-center justify-center "> - <p className="text-2xl text-gray-500"><EasyTrans>NoElementsFound</EasyTrans></p> - </div> - ) - ) : ( - <div className="grid grid-cols-1 gap-y-10 sm:grid-cols-2 gap-x-6 lg:grid-cols-3 xl:grid-cols-4 xl:gap-x-8"> - {userWorkList.map((work) => ( - <a key={work.id} href={work.href} className="group"> - <div className="aspect-w-1 aspect-h-1 bg-fairbrightgreen rounded-lg overflow-hidden xl:aspect-w-7 xl:aspect-h-8"> - <div className="flex justify-center items-center w-full h-full"> - <WorkTypIcon - type="Document" //TODO Worktype zurückgeben work.type - className="w-full h-full object-center object-cover group-hover:opacity-75" - ></WorkTypIcon> + <div className="grid grid-cols-1 gap-y-10 sm:grid-cols-2 gap-x-6 lg:grid-cols-3 xl:grid-cols-4 xl:gap-x-8"> + {userWorkList.map((work) => ( + <a key={work.id} href={work.href} className="group"> + <div className="aspect-w-1 aspect-h-1 bg-fairbrightgreen rounded-lg overflow-hidden xl:aspect-w-7 xl:aspect-h-8"> + <div className="flex justify-center items-center w-full h-full"> + <WorkTypIcon + type="Document" //TODO Worktype zurückgeben work.type + className="w-full h-full object-center object-cover group-hover:opacity-75" + ></WorkTypIcon> + </div> </div> - </div> - <h3 className="text-sm text-gray-700">{work.licence}</h3> - <p className="mt-1 text-lg font-medium text-gray-900"> - {work.title} - </p> - </a> - ))} - </div> - )} - {totalElements == 0 ?? ( - <Pagination - page={page} - setPage={setPage} - totalPages={totalPages} - itemsPerPage={itemsPerPage} - setItemsPerPage={setItemsPerPage} - totalElements={totalElements} - /> - )} - </div> + <h3 className="text-sm text-gray-700">{work.licence}</h3> + <p className="mt-1 text-lg font-medium text-gray-900"> + {work.title} + </p> + </a> + ))} + </div> + )} + {totalElements == 0 ?? ( + <Pagination + page={page} + setPage={setPage} + totalPages={totalPages} + itemsPerPage={itemsPerPage} + setItemsPerPage={setItemsPerPage} + totalElements={totalElements} + /> + )} + </div> + )} </> ); }; diff --git a/Frontend/src/pages/SearchWorksPage.jsx b/Frontend/src/pages/SearchWorksPage.jsx index 044423d..bf7770f 100644 --- a/Frontend/src/pages/SearchWorksPage.jsx +++ b/Frontend/src/pages/SearchWorksPage.jsx @@ -4,6 +4,7 @@ import ApiService from "../services/ApiService"; import Controlbar from "../components/bundel/Controlbar"; import EasyTrans from "../components/bundel/EasyTrans"; import Pagination from "../components/bundel/Pagination"; +import Spinner from "../components/bundel/Spinner"; import UserWorkListElement from "../components/bundel/UserWorkListElement"; import WorkTypIcon from "../components/registerwork/WorkTypIcon"; @@ -21,9 +22,10 @@ const SearchWorksPage = () => { const [licence, setLicence] = useState(); const [sort, setSort] = useState("asc"); const [selectedTags, setSelectedTags] = useState([]); + const [isLoading, setIsLoading] = useState(true); const fetchData = async () => { - console.log(selectedTags); + setIsLoading(true); try { const result = await ApiService.getPublicWorkList( title, @@ -41,7 +43,8 @@ const SearchWorksPage = () => { setPagination(result?.pageable); } catch (error) { console.error("Error:", error); - throw error; + } finally { + setIsLoading(false); } }; @@ -82,56 +85,66 @@ const SearchWorksPage = () => { selectedTags={selectedTags} setSelectedTags={setSelectedTags} ></Controlbar> - <div className="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8 my-2"> - {workView ? ( - userWorkList.length > 0 ? ( - userWorkList.map((userWork, index) => { - console.log(userWork); - return ( - <UserWorkListElement - key={index} - userWork={userWork} - searchWork={true} - editable="false" - ></UserWorkListElement> - ); - }) - ) : ( + {isLoading ? ( + <div className="flex justify-center"> + <div className="flex justify-center column p-10"> + <Spinner /> + </div> + </div> + ) : ( + <div className="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8 my-2"> + {workView ? ( + userWorkList.length > 0 ? ( + userWorkList.map((userWork, index) => { + console.log(userWork); + return ( + <UserWorkListElement + key={index} + userWork={userWork} + searchWork={true} + editable="false" + ></UserWorkListElement> + ); + }) + ) : ( <div className="flex items-center justify-center "> - <p className="text-2xl text-gray-500"><EasyTrans>NoElementsFound</EasyTrans></p> + <p className="text-2xl text-gray-500"> + <EasyTrans>NoElementsFound</EasyTrans> + </p> </div> - ) - ) : ( - <div className="grid grid-cols-1 gap-y-10 sm:grid-cols-2 gap-x-6 lg:grid-cols-3 xl:grid-cols-4 xl:gap-x-8"> - {userWorkList.map((work) => ( - <a key={work.id} href={work.href} className="group"> - <div className="aspect-w-1 aspect-h-1 bg-fairbrightgreen rounded-lg overflow-hidden xl:aspect-w-7 xl:aspect-h-8"> - <div className="flex justify-center items-center w-full h-full"> - <WorkTypIcon - type="Document" //TODO Worktype zurückgeben work.type - className="w-full h-full object-center object-cover group-hover:opacity-75" - ></WorkTypIcon> + ) + ) : ( + <div className="grid grid-cols-1 gap-y-10 sm:grid-cols-2 gap-x-6 lg:grid-cols-3 xl:grid-cols-4 xl:gap-x-8"> + {userWorkList.map((work) => ( + <a key={work.id} href={work.href} className="group"> + <div className="aspect-w-1 aspect-h-1 bg-fairbrightgreen rounded-lg overflow-hidden xl:aspect-w-7 xl:aspect-h-8"> + <div className="flex justify-center items-center w-full h-full"> + <WorkTypIcon + type="Document" //TODO Worktype zurückgeben work.type + className="w-full h-full object-center object-cover group-hover:opacity-75" + ></WorkTypIcon> + </div> </div> - </div> - <h3 className="mt-4 text-sm text-gray-700">{work.licence}</h3> - <p className="mt-1 text-lg font-medium text-gray-900"> - {work.title} - </p> - </a> - ))} - </div> - )} - {totalElements == 0 ?? ( - <Pagination - page={page} - setPage={setPage} - totalPages={totalPages} - itemsPerPage={itemsPerPage} - setItemsPerPage={setItemsPerPage} - totalElements={totalElements} - /> - )} - </div> + <h3 className="mt-4 text-sm text-gray-700">{work.licence}</h3> + <p className="mt-1 text-lg font-medium text-gray-900"> + {work.title} + </p> + </a> + ))} + </div> + )} + {totalElements == 0 ?? ( + <Pagination + page={page} + setPage={setPage} + totalPages={totalPages} + itemsPerPage={itemsPerPage} + setItemsPerPage={setItemsPerPage} + totalElements={totalElements} + /> + )} + </div> + )} </div> ); }; -- GitLab