Skip to content

Commit 36e6fd6

Browse files
authored
Merge pull request #90 from Team-Senifit/release-1.0.1
수정하기] 버그 2개 수정
2 parents 6719f66 + 2a6cb98 commit 36e6fd6

3 files changed

Lines changed: 42 additions & 10 deletions

File tree

src/app/(with-container)/record/panel/SurveyElderCard.tsx

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Box, Divider, Typography } from "@mui/material";
44
import SelectorCard from "./SelectorCard";
55
import SelectorRadio from "./SelectorRadio";
66
import SelectorTarget from "./SelectorTarget";
7-
import { useState, useEffect, useCallback } from "react";
7+
import { useState, useEffect, useCallback, useRef } from "react";
88
import { calculateAge } from "@/utils/calculateAge";
99
import dayjs from "dayjs";
1010
import { genderLabel, gradeLabel } from "@/types/IMember";
@@ -91,6 +91,16 @@ export default function ElderSurveyCard({
9191
hasDiscomfort: elder.hadTrouble ? "yes" : "none",
9292
parts: elder.troubleParts ?? [],
9393
});
94+
const [isMounted, setIsMounted] = useState(false);
95+
96+
// 부모가 바뀔 때만 실행되도록 함.
97+
const lastPresetAtt = useRef<Scale | undefined>(presetAtt);
98+
const lastPresetAbl = useRef<Scale | undefined>(presetAbl);
99+
const lastPresetTrouble = useRef<PresetTrouble | undefined>(presetTrouble);
100+
101+
useEffect(() => {
102+
setIsMounted(true);
103+
}, []);
94104

95105
const { isPhone, isTablet } = useMedia();
96106
const infoVariant = isPhone
@@ -128,21 +138,28 @@ export default function ElderSurveyCard({
128138
);
129139

130140
useEffect(() => {
131-
if (presetAtt) {
141+
if (presetAtt && presetAtt !== lastPresetAtt.current) {
142+
lastPresetAtt.current = presetAtt;
132143
setAtt(presetAtt);
133144
bubble({ attitudeScore: scoreOf[presetAtt] });
134145
}
135146
}, [presetAtt, bubble]);
136147

137148
useEffect(() => {
138-
if (presetAbl) {
149+
if (presetAbl && presetAbl !== lastPresetAbl.current) {
150+
lastPresetAbl.current = presetAbl;
139151
setAbl(presetAbl);
140152
bubble({ abilityScore: scoreOf[presetAbl] });
141153
}
142154
}, [presetAbl, bubble]);
143155

144156
useEffect(() => {
145-
if (presetTrouble) {
157+
if (
158+
presetTrouble &&
159+
(presetTrouble.hasDiscomfort !== lastPresetTrouble.current?.hasDiscomfort ||
160+
presetTrouble.parts !== lastPresetTrouble.current?.parts)
161+
) {
162+
lastPresetTrouble.current = presetTrouble;
146163
setTrouble(presetTrouble);
147164
bubble({
148165
hadTrouble: presetTrouble.hasDiscomfort === "yes",
@@ -174,7 +191,11 @@ export default function ElderSurveyCard({
174191
</Box>
175192
<Box sx={{ display: "flex", gap: 2, mt: 1 }}>
176193
<Typography variant={infoVariant}>
177-
{calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })}
194+
{isMounted
195+
? calculateAge(dayjs(elder.birthDate), {
196+
format: "YYYY-MM-DD",
197+
})
198+
: ""}
178199
</Typography>
179200
<Typography variant={infoVariant}>
180201
{genderLabel[elder.gender]}
@@ -189,7 +210,9 @@ export default function ElderSurveyCard({
189210
<ProfileIcon sx={{ fontSize: 24 }} />
190211
<Typography variant={infoVariant}>{elder.name}</Typography>
191212
<Typography variant={infoVariant}>
192-
{calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })}
213+
{isMounted
214+
? calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })
215+
: ""}
193216
</Typography>
194217
<Typography variant={infoVariant}>
195218
{genderLabel[elder.gender]}

src/app/(with-footer)/my-center/members/panel/MemberList.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from "@tanstack/react-query";
1414
import dayjs from "dayjs";
1515
import Link from "next/link";
16-
import React, { useState } from "react";
16+
import React, { useState, useEffect } from "react";
1717
import EmptyView from "./EmptyView";
1818

1919
const Member = ({
@@ -28,7 +28,12 @@ const Member = ({
2828
isDesktop: boolean;
2929
mutate: UseMutateFunction<void, Error, number, unknown>;
3030
}) => {
31+
const [isMounted, setIsMounted] = useState(false);
32+
useEffect(() => {
33+
setIsMounted(true);
34+
}, []);
3135
const [dialogOpen, setDialogOpen] = useState(false);
36+
const ageContent = isMounted ? `${calculateAge(dayjs(birthDate))}세` : "";
3237
return (
3338
<>
3439
<Stack
@@ -65,7 +70,7 @@ const Member = ({
6570
width: { phone: "3rem", desktop: "3.5rem" },
6671
}}
6772
>
68-
{`${calculateAge(dayjs(birthDate))}세`}
73+
{ageContent}
6974
</Typography>
7075
<Typography
7176
variant={isDesktop ? "Heading1" : "Headline1"}

src/app/(with-footer)/my-center/panel/MemberInfoCard.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { calculateAge } from "@/utils/calculateAge";
77
import { Button, Stack, Typography } from "@mui/material";
88
import dayjs from "dayjs";
99
import Link from "next/link";
10-
import React from "react";
10+
import React, { useState, useEffect } from "react";
1111
import EmptyView from "./EmptyView";
1212

1313
const MemberEditButton = ({ disabled }: { disabled: boolean }) => {
@@ -37,7 +37,11 @@ const MemberEditButton = ({ disabled }: { disabled: boolean }) => {
3737
};
3838

3939
const Member = ({ name, birthDate, memberRank, gender }: IMember) => {
40-
const age = calculateAge(dayjs(birthDate));
40+
const [isMounted, setIsMounted] = useState(false);
41+
useEffect(() => {
42+
setIsMounted(true);
43+
}, []);
44+
const age = isMounted ? calculateAge(dayjs(birthDate)) : "";
4145
return (
4246
<Stack direction={"row"} spacing={[1, 2]} alignItems={"center"}>
4347
<Typography

0 commit comments

Comments
 (0)