🎯 Todo List 화면에 ν˜„μž¬ μ‹œκ°„μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

// TodoHead.js
const TodoHead = () => {
  //@TODO ν˜„μž¬ μ‹œκ°„μ„ ν‘œμ‹œν•΄μ•Όν•©λ‹ˆλ‹€.
  const [date] = useState(new Date().toLocaleDateString('en-US', DATE_FORM));
  const [time, setTime] = useState(new Date().toLocaleTimeString('en-US', TIME_FORM));

  useEffect(() => {
    const timer = setInterval(() => {
      setTime(new Date().toLocaleTimeString('en-US', TIME_FORM));
    }, 1000);
    return () => {
      clearInterval(timer);
    };
  }, []);

  return (
    <TodoHeadBlock>
      <p>{date}</p>
      <p>{time}</p>
    </TodoHeadBlock>
  );
};

// utils/constants.ts
export const DATE_FORM: Intl.DateTimeFormatOptions = {
  year: 'numeric',
  weekday: 'long',
  month: 'long',
  day: 'numeric',
};

export const TIME_FORM: Intl.DateTimeFormatOptions = {
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
};
// TodoHead.tsx
const TodoHeadBlock = styled.div`
  padding-top: 52px;
  padding-bottom: 24px;
  border-bottom: 3px solid #33bb77;

  p {
    text-align: center;
    color: #119955;
    padding-top: 5px;
  }

  p:first-child {
    font-size: 26px;
  }
  p:last-child {
    font-size: 22px;
  }
`;

🎯 To/do ν•­λͺ©μ— μ™„λ£Œ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ Todoκ°€ μ™„λ£Œλ  수 μžˆλ„λ‘ μ™„μ„±ν•©λ‹ˆλ‹€.


// TodoItem.tsx
const TodoItem = ({ toggleTodo, removeTodo, todo }: TodoItemProps) => {
  const { id, text, done, startDate, deadline } = todo;

  const handleCompleteToggle = useCallback((id) => {
    toggleTodo(id);
  }, []);

  return (
    <TodoItemBlock>
      <CheckCircle done={done} onClick={() => handleCompleteToggle(id)}>
        {done && <CheckOutlined />}
      </CheckCircle>
			...
		<TodoItemBlock>
	)
}
// useTodo
const toggleTodo = (id: number) => {
    setTodoState((prevState) =>
      prevState.map((todo: Itodo) =>
        todo.id === id
          ? {
              ...todo,
              done: !todo.done,
            }
          : todo,
      ),
    );
  };