🐛(frontend) fix issue when no template

A bug occured when no template was
available. This commit fixes this issue.
This commit is contained in:
Anthony LC
2024-07-02 17:05:01 +02:00
committed by Anthony LC
parent a393cd4df0
commit edffbbaf99
2 changed files with 30 additions and 37 deletions

View File

@@ -1,5 +1,5 @@
import { Button } from '@openfun/cunningham-react'; import { Button } from '@openfun/cunningham-react';
import React, { useMemo, useState } from 'react'; import React, { useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Box, DropButton, IconOptions, Text } from '@/components'; import { Box, DropButton, IconOptions, Text } from '@/components';
@@ -12,8 +12,6 @@ import {
import { ModalAddMembers } from '@/features/docs/members/members-add'; import { ModalAddMembers } from '@/features/docs/members/members-add';
import { ModalGridMembers } from '@/features/docs/members/members-grid/'; import { ModalGridMembers } from '@/features/docs/members/members-grid/';
import { TemplatesOrdering, useTemplates } from '../api/useTemplates';
import { ModalPDF } from './ModalPDF'; import { ModalPDF } from './ModalPDF';
interface DocToolBoxProps { interface DocToolBoxProps {
@@ -22,9 +20,6 @@ interface DocToolBoxProps {
export const DocToolBox = ({ doc }: DocToolBoxProps) => { export const DocToolBox = ({ doc }: DocToolBoxProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { data: templates } = useTemplates({
ordering: TemplatesOrdering.BY_CREATED_ON_DESC,
});
const [isModalAddMembersOpen, setIsModalAddMembersOpen] = useState(false); const [isModalAddMembersOpen, setIsModalAddMembersOpen] = useState(false);
const [isModalGridMembersOpen, setIsModalGridMembersOpen] = useState(false); const [isModalGridMembersOpen, setIsModalGridMembersOpen] = useState(false);
const [isModalUpdateOpen, setIsModalUpdateOpen] = useState(false); const [isModalUpdateOpen, setIsModalUpdateOpen] = useState(false);
@@ -32,23 +27,6 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => {
const [isModalPDFOpen, setIsModalPDFOpen] = useState(false); const [isModalPDFOpen, setIsModalPDFOpen] = useState(false);
const [isDropOpen, setIsDropOpen] = useState(false); const [isDropOpen, setIsDropOpen] = useState(false);
const templateOptions = useMemo(() => {
if (!templates?.pages) {
return [];
}
const templateOptions = templates.pages
.map((page) =>
page.results.map((template) => ({
label: template.title,
value: template.id,
})),
)
.flat();
return templateOptions;
}, [templates?.pages]);
return ( return (
<Box $margin="big" $position="absolute" $css="right:1rem;"> <Box $margin="big" $position="absolute" $css="right:1rem;">
<DropButton <DropButton
@@ -141,11 +119,7 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => {
/> />
)} )}
{isModalPDFOpen && ( {isModalPDFOpen && (
<ModalPDF <ModalPDF onClose={() => setIsModalPDFOpen(false)} doc={doc} />
onClose={() => setIsModalPDFOpen(false)}
templateOptions={templateOptions}
doc={doc}
/>
)} )}
{isModalUpdateOpen && ( {isModalUpdateOpen && (
<ModalUpdateDoc onClose={() => setIsModalUpdateOpen(false)} doc={doc} /> <ModalUpdateDoc onClose={() => setIsModalUpdateOpen(false)} doc={doc} />

View File

@@ -9,25 +9,25 @@ import {
useToastProvider, useToastProvider,
} from '@openfun/cunningham-react'; } from '@openfun/cunningham-react';
import { t } from 'i18next'; import { t } from 'i18next';
import { useEffect, useState } from 'react'; import { useEffect, useMemo, useState } from 'react';
import { Box, Text } from '@/components'; import { Box, Text } from '@/components';
import { useDocStore } from '@/features/docs/doc-editor/'; import { useDocStore } from '@/features/docs/doc-editor/';
import { Doc } from '@/features/docs/doc-management'; import { Doc } from '@/features/docs/doc-management';
import { useCreatePdf } from '../api/useCreatePdf'; import { useCreatePdf } from '../api/useCreatePdf';
import { TemplatesOrdering, useTemplates } from '../api/useTemplates';
import { adaptBlockNoteHTML, downloadFile } from '../utils'; import { adaptBlockNoteHTML, downloadFile } from '../utils';
interface ModalPDFProps { interface ModalPDFProps {
onClose: () => void; onClose: () => void;
templateOptions: {
label: string;
value: string;
}[];
doc: Doc; doc: Doc;
} }
export const ModalPDF = ({ onClose, templateOptions, doc }: ModalPDFProps) => { export const ModalPDF = ({ onClose, doc }: ModalPDFProps) => {
const { data: templates } = useTemplates({
ordering: TemplatesOrdering.BY_CREATED_ON_DESC,
});
const { toast } = useToastProvider(); const { toast } = useToastProvider();
const { docsStore } = useDocStore(); const { docsStore } = useDocStore();
const { const {
@@ -38,9 +38,28 @@ export const ModalPDF = ({ onClose, templateOptions, doc }: ModalPDFProps) => {
isPending, isPending,
error, error,
} = useCreatePdf(); } = useCreatePdf();
const [templateIdSelected, setTemplateIdSelected] = useState<string>( const [templateIdSelected, setTemplateIdSelected] = useState<string>();
templateOptions?.[0].value,
); const templateOptions = useMemo(() => {
if (!templates?.pages) {
return [];
}
const templateOptions = templates.pages
.map((page) =>
page.results.map((template) => ({
label: template.title,
value: template.id,
})),
)
.flat();
if (templateOptions.length) {
setTemplateIdSelected(templateOptions[0].value);
}
return templateOptions;
}, [templates?.pages]);
useEffect(() => { useEffect(() => {
if (!error) { if (!error) {