{
diff --git a/frontend/src/pages/download-feedback/DownloadFeedback.jsx b/frontend/src/pages/download-feedback/DownloadFeedback.jsx
new file mode 100644
index 00000000..2738f7e7
--- /dev/null
+++ b/frontend/src/pages/download-feedback/DownloadFeedback.jsx
@@ -0,0 +1,138 @@
+import React, { useState } from "react";
+import "./style.scss";
+import { Row, Col, Typography, Select, Space, Button } from "antd";
+import { api } from "../../lib";
+import { useNotification } from "../../util";
+import { MonitoringRoundSelector } from "../../components";
+import { globalSelectProps } from "../../lib/util";
+
+const { Title } = Typography;
+
+const handleSelectFilter = (input, option) =>
+ option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+
+const DownloadFeedback = () => {
+ const { notify } = useNotification();
+
+ const [iscoSelected, setIscoSelected] = useState(null);
+ const [selectedMonitoringRound, setSelectedMonitoringRound] = useState(null);
+ const [downloading, setDownloading] = useState(false);
+ const [iscoOptions, setIscoOptions] = React.useState([]);
+
+ React.useEffect(() => {
+ api.get("/isco_type/mine").then((res) => {
+ setIscoOptions(
+ res.data
+ .filter((x) => x.id !== 1 || x.name.toLowerCase() !== "all")
+ .map((x) => ({
+ label: x.name,
+ value: x.id,
+ }))
+ );
+ });
+ }, []);
+
+ const handleDownloadFeedback = () => {
+ if (!selectedMonitoringRound) {
+ notify({
+ type: "error",
+ message: "Monitoring Round is mandatory",
+ });
+ return;
+ }
+ setDownloading(true);
+ let params = `monitoring_round=${selectedMonitoringRound}`;
+ if (iscoSelected) {
+ params += `&isco_type_id=${iscoSelected}`;
+ }
+ api
+ .get(`/feedback/download?${params}`, { responseType: "blob" })
+ .then((res) => {
+ const url = window.URL.createObjectURL(new Blob([res.data]));
+ const link = document.createElement("a");
+ link.href = url;
+ const dateStr = new Date()
+ .toISOString()
+ .split("T")[0]
+ .replaceAll("-", "");
+ link.setAttribute("download", `feedback_export_${dateStr}.xlsx`);
+ document.body.appendChild(link);
+ link.click();
+ link.parentNode.removeChild(link);
+ })
+ .catch((e) => {
+ const { status } = e.response || {};
+ notify({
+ type: "error",
+ message:
+ status === 404
+ ? "No feedback data available."
+ : "Something went wrong.",
+ });
+ console.error(e);
+ })
+ .finally(() => {
+ setDownloading(false);
+ });
+ };
+
+ return (
+
+
+
+
+
+
+ Download Feedback
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default DownloadFeedback;
diff --git a/frontend/src/pages/download-feedback/style.scss b/frontend/src/pages/download-feedback/style.scss
new file mode 100644
index 00000000..c9f09aef
--- /dev/null
+++ b/frontend/src/pages/download-feedback/style.scss
@@ -0,0 +1,30 @@
+@import "../../variables";
+
+#root {
+ #download-feedback {
+ .page-title-wrapper {
+ border-bottom: 1px solid #777777;
+ }
+
+ .page-title {
+ margin: 40px 0 20px 0;
+ }
+
+ .filter-wrapper {
+ padding: 24px 0;
+ font-size: 14px;
+
+ .isco-dropdown-wrapper {
+ width: 18rem;
+ }
+
+ .monitoring-round-selector {
+ width: 12rem;
+ }
+ }
+
+ .ant-btn {
+ height: 32px;
+ }
+ }
+}
diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js
index f895f76b..d169f30d 100644
--- a/frontend/src/pages/index.js
+++ b/frontend/src/pages/index.js
@@ -21,3 +21,4 @@ export { default as ManageDownload } from "./requested-download/ManageDownload";
export { default as DataCleaning } from "./data-cleaning/DataCleaning";
export { default as DownloadReport } from "./download-report/DownloadReport";
export { default as ManageRoadmap } from "./manage-roadmap/ManageRoadmap";
+export { default as DownloadFeedback } from "./download-feedback/DownloadFeedback";
diff --git a/frontend/src/static/ui-text.js b/frontend/src/static/ui-text.js
index e904a976..240e8677 100644
--- a/frontend/src/static/ui-text.js
+++ b/frontend/src/static/ui-text.js
@@ -38,6 +38,7 @@ const uiText = {
navDownload: "Download",
navImpressum: "Impressum",
navFaq: "FAQ",
+ navDownloadFeedback: "Download Feedback",
// Form
formChangePwd: "Change Password",
formEmail: "Email Address",
@@ -339,6 +340,7 @@ const uiText = {
navDownload: "Download",
navImpressum: "Impressum",
navFaq: "FAQ",
+ navDownloadFeedback: "Download Feedback",
// Form
formChangePwd: "Passwort ändern",
formEmail: "Emailadresse",