diff --git a/client/src/app/api/models.ts b/client/src/app/api/models.ts index aaf47dc38..63a2a3e4d 100644 --- a/client/src/app/api/models.ts +++ b/client/src/app/api/models.ts @@ -646,6 +646,10 @@ export type HubFile = { path: string; }; +export interface LooseQuestionnaire { + [key: string]: any; +} + export interface Questionnaire { id: number; name: string; @@ -653,12 +657,15 @@ export interface Questionnaire { revision: number; questions: number; rating: string; - createTime: string; required: boolean; - builtin?: boolean; sections: Section[]; thresholds: Thresholds; riskMessages: RiskMessages; + builtin?: boolean; + createTime?: string; + createUser?: string; + updateTime?: string; + updateUser?: string; } export interface RiskMessages { diff --git a/client/src/app/pages/assessment-management/assessment-settings/components/export-questionnaire-dropdown-item.tsx b/client/src/app/pages/assessment-management/assessment-settings/components/export-questionnaire-dropdown-item.tsx index 126df5b7a..803f2f9c2 100644 --- a/client/src/app/pages/assessment-management/assessment-settings/components/export-questionnaire-dropdown-item.tsx +++ b/client/src/app/pages/assessment-management/assessment-settings/components/export-questionnaire-dropdown-item.tsx @@ -10,11 +10,7 @@ export const ExportQuestionnaireDropdownItem: React.FC< IExportQuestionnaireDropdownItemProps > = ({ id }) => { const { t } = useTranslation(); - const { - mutate: downloadFile, - isLoading, - isError, - } = useDownloadQuestionnaire(); + const { mutate: downloadFile } = useDownloadQuestionnaire(); const handleDownload = () => { downloadFile(id); diff --git a/client/src/app/queries/questionnaires.ts b/client/src/app/queries/questionnaires.ts index 9dd379020..d56d4aab9 100644 --- a/client/src/app/queries/questionnaires.ts +++ b/client/src/app/queries/questionnaires.ts @@ -1,5 +1,6 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import axios, { AxiosError } from "axios"; +import yaml from "js-yaml"; import { QUESTIONNAIRES, @@ -9,7 +10,7 @@ import { getQuestionnaires, updateQuestionnaire, } from "@app/api/rest"; -import { Questionnaire } from "@app/api/models"; +import { LooseQuestionnaire, Questionnaire } from "@app/api/models"; import saveAs from "file-saver"; export const QuestionnairesQueryKey = "questionnaires"; @@ -121,7 +122,7 @@ export const downloadQuestionnaire = async ( try { const response = await axios.get(url, { - responseType: "blob", + responseType: "text", headers: { Accept: "application/x-yaml", }, @@ -131,13 +132,24 @@ export const downloadQuestionnaire = async ( throw new Error("Network response was not ok when downloading file."); } - const blob = new Blob([response.data]); + const yamlData = yaml.load(response.data) as LooseQuestionnaire; + + delete yamlData.createUser; + delete yamlData.updateUser; + delete yamlData.createTime; + delete yamlData.id; + + const newYamlData = yaml.dump(yamlData); + + const blob = new Blob([newYamlData], { type: "application/x-yaml" }); + saveAs(blob, `questionnaire-${id}.yaml`); } catch (error) { console.error("There was an error downloading the file:", error); throw error; } }; + export const useDownloadQuestionnaire = () => { return useMutation({ mutationFn: downloadQuestionnaire }); };