diff --git a/view/next-project/src/components/sponsoractivities/DetailModal.tsx b/view/next-project/src/components/sponsoractivities/DetailModal.tsx index dd0587783..3ab23caea 100644 --- a/view/next-project/src/components/sponsoractivities/DetailModal.tsx +++ b/view/next-project/src/components/sponsoractivities/DetailModal.tsx @@ -157,25 +157,35 @@ const DetailModal: FC = (props) => { - {props.sponsorActivitiesViewItem.styleDetail.map((styleDetail, index) => ( - - -
{styleDetail.sponsorStyle.style}
- - -
{styleDetail.sponsorStyle.feature}
- - -
{styleDetail.sponsorStyle.price} 円
+ {props.sponsorActivitiesViewItem.styleDetail ? ( + props.sponsorActivitiesViewItem.styleDetail.map((styleDetail, index) => ( + + +
{styleDetail.sponsorStyle.style}
+ + +
{styleDetail.sponsorStyle.feature}
+ + +
{styleDetail.sponsorStyle.price} 円
+ + + )) + ) : ( + + +
+ 協賛スタイルを登録してください +
- ))} + )} diff --git a/view/next-project/src/components/sponsoractivities/EditModal.tsx b/view/next-project/src/components/sponsoractivities/EditModal.tsx index 607e7ba7a..549b23735 100644 --- a/view/next-project/src/components/sponsoractivities/EditModal.tsx +++ b/view/next-project/src/components/sponsoractivities/EditModal.tsx @@ -21,7 +21,7 @@ interface ModalProps { sponsorStyles: SponsorStyle[]; sponsors: Sponsor[]; users: User[]; - sponsorStyleDetails: ActivityStyle[]; + sponsorStyleDetails: ActivityStyle[] | null; activityStyles: ActivityStyle[]; setIsOpen: (isOpen: boolean) => void; } @@ -44,14 +44,14 @@ export default function EditModal(props: ModalProps) { ...props.sponsorActivity, expense: Number((props.sponsorActivity.expense / 11).toFixed(1)), }); - const initStyleIds = sponsorStyleDetails.map( - (sponsorStyleDetail) => sponsorStyleDetail.sponsorStyleID, - ); + const initStyleIds = sponsorStyleDetails + ? sponsorStyleDetails.map((sponsorStyleDetail) => sponsorStyleDetail.sponsorStyleID) + : []; const [selectedStyleIds, setSelectedStyleIds] = useState(initStyleIds); - const [isStyleError, setIsStyleError] = useState(false); + const [isStyleError, setIsStyleError] = useState(!sponsorStyleDetails); useEffect(() => { - if (selectedStyleIds.length === 0) { + if (selectedStyleIds && selectedStyleIds.length === 0) { setIsStyleError(true); } else { setIsStyleError(false); @@ -69,6 +69,7 @@ export default function EditModal(props: ModalProps) { }, [sponsorStyles]); const isSelectSponsorBooth = useMemo(() => { + if (!selectedStyleIds) return false; const isBooth = selectedStyleIds.some((id) => { return sponsorStyles[id - 1]?.style === '企業ブース'; }); @@ -125,6 +126,11 @@ export default function EditModal(props: ModalProps) { // 協賛企業の登録の更新を行い、ページをリロード const submit = (data: SponsorActivity) => { + if (!selectedStyleIds) { + setIsStyleError(true); + return; + } + const { expense, userID, sponsorID, ...rest } = data; const submitData: SponsorActivity = { expense: Math.round(expense * 11), @@ -138,6 +144,8 @@ export default function EditModal(props: ModalProps) { // 協賛企業を更新 const updateSponsorStyle = async (data: SponsorActivity) => { + if (!selectedStyleIds) return; + const updateSponsorStyleUrl = process.env.CSR_API_URI + '/activities/' + data.id; await put(updateSponsorStyleUrl, data); @@ -175,7 +183,11 @@ export default function EditModal(props: ModalProps) {
selectedStyleIds.includes(Number(option.value)))} + values={ + selectedStyleIds + ? styleOotions.filter((option) => selectedStyleIds.includes(Number(option.value))) + : [] + } onChange={(value) => { setSelectedStyleIds(value.map((v) => Number(v.value))); }} diff --git a/view/next-project/src/components/sponsoractivities/OpenEditModalButton.tsx b/view/next-project/src/components/sponsoractivities/OpenEditModalButton.tsx index 353268261..b007235d1 100644 --- a/view/next-project/src/components/sponsoractivities/OpenEditModalButton.tsx +++ b/view/next-project/src/components/sponsoractivities/OpenEditModalButton.tsx @@ -29,9 +29,11 @@ const OpenEditModalButton: React.FC = (props) => { const onOpen = () => { setIsOpen(true); }; - const sponsorStyleDetails = props.sponsorStyleDetails.map((sponsorStyleDetail) => { - return sponsorStyleDetail.activityStyle; - }); + const sponsorStyleDetails = props.sponsorStyleDetails + ? props.sponsorStyleDetails.map((sponsorStyleDetail) => { + return sponsorStyleDetail.activityStyle; + }) + : null; return ( <> diff --git a/view/next-project/src/pages/sponsoractivities/index.tsx b/view/next-project/src/pages/sponsoractivities/index.tsx index 0866ea7d8..dd6b0c690 100644 --- a/view/next-project/src/pages/sponsoractivities/index.tsx +++ b/view/next-project/src/pages/sponsoractivities/index.tsx @@ -136,13 +136,14 @@ export default function SponsorActivities(props: Props) { - {sponsorActivitiesItem.styleDetail.map((styleDetail) => ( - - - - - - ))} + {sponsorActivitiesItem.styleDetail && + sponsorActivitiesItem.styleDetail.map((styleDetail) => ( + + + + + + ))}
{styleDetail.sponsorStyle.style}{styleDetail.sponsorStyle.feature}{styleDetail.sponsorStyle.price}円
{styleDetail.sponsorStyle.style}{styleDetail.sponsorStyle.feature}{styleDetail.sponsorStyle.price}円
@@ -240,12 +241,16 @@ export default function SponsorActivities(props: Props) { className='py-3' >
- {sponsorActivitiesItem.styleDetail.map((styleDetail) => ( -
-

{`${styleDetail.sponsorStyle.style} / ${styleDetail.sponsorStyle.feature} / ${styleDetail.sponsorStyle.price} 円`}

-

-
- ))} + {sponsorActivitiesItem.styleDetail ? ( + sponsorActivitiesItem.styleDetail.map((styleDetail) => ( +
+

{`${styleDetail.sponsorStyle.style} / ${styleDetail.sponsorStyle.feature} / ${styleDetail.sponsorStyle.price} 円`}

+

+
+ )) + ) : ( +
協賛スタイルを登録してください
+ )}