내가 사용자라면 어떤 기능이 필요할까, 가설을 먼저 세워보았다.
따라서, Customize를 할 props를 많이 넘겨주고, Headless UI를 구현함으로써 확장성을 넓히고 사용자의 자유도를 높이고자 노력하였다.
Headless UI는 UI의 '머리' 부분인 즉, 보여지는 부분을 제거한 UI를 말한다. 라이브러리를 개발할 때 사용자에게 UI를 강제하지 않고, 로직만 제공하여 사용자가 원하는 대로 UI를 구현할 수 있게 한다. 이 방법은 사용자에게 더 많은 자유도를 제공하며, 라이브러리가 사용자의 디자인 시스템에 맞게 커스터마이징하는 데 도움이 된다.
제가 개발한 캘린더 라이브러리에서는 다음과 같은 다양한 prop들을 제공한다. 이들은 모두 사용자의 필요에 따라 선택적으로 사용할 수 있는 것들이다.
mainColor
, subMainColor
: 이 props들을 통해 사용자는 캘린더의 메인 색상과 서브 메인 색상을 원하는대로 설정할 수 있다.
isRectangular
, resetStyle
: 이 props들을 통해 사용자는 캘린더의 형태를 직사각형으로 설정하거나, 스타일을 초기화할 수 있다.
startDay
, language
: 이 props들을 통해 사용자는 캘린더의 시작 요일과 언어를 설정할 수 있다.
numMonths
, maximumMonths
: 이 props들을 통해 사용자는 한 번에 표시되는 달의 수와 캘린더가 표시할 수 있는 최대 달의 수를 설정할 수 있다.
defaultCheckIn
, defaultCheckOut
, showBookingDatesView
: 이 props들을 통해 사용자는 기본 체크인 날짜, 체크아웃 날짜를 설정하고, 예약 날짜를 보여줄 것인지 설정할 수 있다.
onCheckInOutChange
: 이 prop은 사용자가 체크인과 체크아웃 날짜를 변경할 때마다 호출되는 함수이다.
이렇게 하여 수많은 props들이 생기게 되었다!
import { Calendar } from "react-check-in-out-calendar";
function App() {
return (
<Calendar
mainColor="#ff6347"
subMainColor="#ffa07a"
startDay={0}
numMonths={2}
language="ko"
maximumMonths={12}
defaultCheckIn="2023-06-01"
defaultCheckOut="2023-06-15"
isRectangular={true}
onCheckInOutChange={(checkInDate, checkOutDate) => {
console.log("Check-in: ", checkInDate, " Check-out: ", checkOutDate);
}}
/>
);
}
이처럼 많은 optional props를 제공하는 이유는 다음과 같다.
따라서, 이런 방식으로 설정된 prop들은 사용자가 원하는 캘린더 UI를 쉽게 구현할 수 있도록 도와준다.
@media screen and (max-width: 768px) {
.calendar-container {
flex-direction: column;
}
}