Skip to content

Commit 5647b4e

Browse files
committed
feat: 태스크 수정이 요구사항대로 되도록 수정
태스크 이름의 길이가 칸을 넘어갈 시 말줄임표 표시 예상 시간과 실제 시간이 소수점 2자리수 이하일 시 수정 불가 알림 담당자 이름이 칸을 넘어갈 시 말줄임표 표시
1 parent 491a799 commit 5647b4e

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

frontend/src/components/backlog/TaskBlock.tsx

+27-9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { useModal } from "../../hooks/common/modal/useModal";
1313
import { MOUSE_KEY } from "../../constants/event";
1414
import ConfirmModal from "../common/ConfirmModal";
1515
import TrashCan from "../../assets/icons/trash-can.svg?react";
16+
import isIntegerOrOneDecimalPlace from "../../utils/isIntegerOrOneDecimalPlace";
1617

1718
const TaskBlock = ({
1819
id,
@@ -64,7 +65,7 @@ const TaskBlock = ({
6465
const { open, close } = useModal();
6566

6667
const assignedMemberName = useMemo(() => {
67-
if (assignedMemberId === null) {
68+
if (assignedMemberId === null || myInfo.id === -1) {
6869
return "";
6970
}
7071

@@ -89,7 +90,10 @@ const TaskBlock = ({
8990
emitTaskUpdateEvent({ id, title: data as string });
9091
}
9192
function updateExpectedTime<T>(data: T) {
92-
if (!data || data === String(expectedTime)) {
93+
if (
94+
data === String(expectedTime) ||
95+
(data === "" && expectedTime === null)
96+
) {
9397
return;
9498
}
9599

@@ -98,7 +102,12 @@ const TaskBlock = ({
98102
return;
99103
}
100104

101-
if (!isNaN(Number(data)) && (Number(data) >= 100 || Number(data) < 0)) {
105+
if (
106+
!isNaN(Number(data)) &&
107+
(Number(data) >= 100 ||
108+
Number(data) < 0 ||
109+
!isIntegerOrOneDecimalPlace(Number(data)))
110+
) {
102111
alert(
103112
"예상 시간은 0이상, 100미만의 정수 또는 소수점 한 자릿수여야 합니다."
104113
);
@@ -108,7 +117,7 @@ const TaskBlock = ({
108117
emitTaskUpdateEvent({ id, expectedTime: Number(data) });
109118
}
110119
function updateActualTime<T>(data: T) {
111-
if (!data || data === String(actualTime)) {
120+
if (data === String(actualTime) || (data === "" && actualTime === null)) {
112121
return;
113122
}
114123

@@ -117,7 +126,12 @@ const TaskBlock = ({
117126
return;
118127
}
119128

120-
if (!isNaN(Number(data)) && (Number(data) >= 100 || Number(data) < 0)) {
129+
if (
130+
!isNaN(Number(data)) &&
131+
(Number(data) >= 100 ||
132+
Number(data) < 0 ||
133+
!isIntegerOrOneDecimalPlace(Number(data)))
134+
) {
121135
alert(
122136
"실제 시간은 0이상, 100미만의 정수 또는 소수점 한 자릿수여야 합니다."
123137
);
@@ -177,7 +191,7 @@ const TaskBlock = ({
177191
>
178192
<p className="w-[4rem]">Task-{displayId}</p>
179193
<div
180-
className="w-[25rem] min-h-[1.5rem] hover:cursor-pointer"
194+
className="w-[25rem] min-h-[1.5rem] hover:cursor-pointer truncate"
181195
ref={titleRef}
182196
onClick={() => handleTitleUpdating(true)}
183197
>
@@ -189,15 +203,19 @@ const TaskBlock = ({
189203
type="text"
190204
/>
191205
) : (
192-
<span>{title}</span>
206+
<span title={title}>{title}</span>
193207
)}
194208
</div>
195209
<div
196210
className="w-12 min-h-[1.5rem] hover:cursor-pointer relative"
197211
onClick={handleAssignedMemberUpdateOpen}
198212
>
199-
<div className="w-full min-h-[1.5rem]" ref={assignedMemberRef}>
200-
{assignedMemberId && <p>{assignedMemberName}</p>}
213+
<div className="w-full min-h-[1.5rem] " ref={assignedMemberRef}>
214+
{assignedMemberId && (
215+
<p className="truncate" title={assignedMemberName}>
216+
{assignedMemberName}
217+
</p>
218+
)}
201219
</div>
202220
{assignedMemberUpdating && (
203221
<AssignedMemberDropdown onOptionClick={updateAssignedMember} />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const isIntegerOrOneDecimalPlace = (number: number) => {
2+
const numberString = number.toString();
3+
const dotIndex = numberString.indexOf(".");
4+
5+
if (dotIndex === -1) {
6+
return true;
7+
}
8+
9+
const decimalPart = numberString.slice(dotIndex + 1);
10+
11+
return decimalPart.length === 1;
12+
};
13+
14+
export default isIntegerOrOneDecimalPlace;

0 commit comments

Comments
 (0)