npm package: @smatch-corp/admin-front-property
Description: 매물 관리 관련 컴포넌트 라이브러리
Latest version: 0.1.12

# @smatch-corp/admin-front-property

매물 관리 관련 컴포넌트 라이브러리

## 설치 방법

```bash
# npm 사용 시
npm install @smatch-corp/admin-front-property

# pnpm 사용 시
pnpm add @smatch-corp/admin-front-property

# yarn 사용 시
yarn add @smatch-corp/admin-front-property
```

## 사용 방법

이 라이브러리는 매물 컬렉션 관리를 위한 React 컴포넌트를 제공합니다.

### CSS 스타일시트 추가

날짜 선택 기능을 위한 Flatpickr 스타일을 사용하는 방법은 다음과 같습니다:

#### 방법 1: CSS 파일 직접 임포트
```tsx
// 전역 CSS 파일에서 import (Next.js의 global.css 또는 _app.tsx에서)
import 'flatpickr/dist/flatpickr.css';
```

#### 방법 2: 인라인 스타일 사용 (CSS 임포트 없이 사용)
```tsx
import { useFlatpickrStyles } from '@smatch-corp/admin-front-property';

function MyComponent() {
  // 스타일 주입 훅 사용
  const { injectStyles } = useFlatpickrStyles();
  
  // 컴포넌트 마운트 시 스타일 주입
  React.useEffect(() => {
    injectStyles();
  }, [injectStyles]);
  
  return (
    // 컴포넌트 내용
  );
}
```

#### 방법 3: Provider 컴포넌트 사용 (앱 전체에 적용)
```tsx
import { FlatpickrProvider } from '@smatch-corp/admin-front-property';
import { QueryClient } from '@tanstack/react-query';

// 선택적: 사용자 정의 QueryClient 설정
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      refetchOnWindowFocus: false,
      retry: 2,
    },
  },
});

// Next.js의 _app.tsx 또는 앱의 최상위 컴포넌트
function MyApp({ Component, pageProps }) {
  return (
    <FlatpickrProvider queryClient={queryClient}> {/* queryClient는 선택사항 */}
      <Component {...pageProps} />
    </FlatpickrProvider>
  );
}

export default MyApp;
```

#### 방법 4: 통합 Provider 사용 (AllInOneProvider)
```tsx
import { AllInOneProvider } from '@smatch-corp/admin-front-property';
import { QueryClient } from '@tanstack/react-query';

// 선택적: 사용자 정의 QueryClient 설정
const queryClient = new QueryClient();

// Next.js의 _app.tsx
function MyApp({ Component, pageProps }) {
  return (
    <AllInOneProvider 
      queryClient={queryClient} // 선택사항: 사용자 정의 QueryClient
      baseUrl="https://api.example.com" // 선택사항: API 기본 URL
    >
      <Component {...pageProps} />
    </AllInOneProvider>
  );
}

export default MyApp;
```

> **주의**: 
> - Node.js 패키지에서는 전역 CSS를 직접 가져올 수 없으므로, 위 방법 중 하나를 사용해야 합니다.
> - `FlatpickrProvider`와 `AllInOneProvider`는 내부적으로 `QueryClientProvider`를 포함하고 있어 @tanstack/react-query 설정도 함께 제공합니다. 별도로 QueryClientProvider를 추가할 필요가 없습니다.
> - `AllInOneProvider`는 flatpickr 스타일과 API 설정을 모두 제공하는 통합 Provider입니다.

### 컴포넌트 사용 예시

```tsx
import React from 'react';
import { 
  PropertyCollectionList, 
  PropertyCollectionCreate, 
  PropertyCollectionEdit,
  useApi
} from '@smatch-corp/admin-front-property';

// 컬렉션 목록 컴포넌트
export default function CollectionsPage() {
  return (
    <div>
      <h1>매물 컬렉션 목록</h1>
      <PropertyCollectionList 
        onViewDetail={(collection) => {
          // 상세 페이지로 이동
          console.log('컬렉션 상세 보기:', collection);
        }}
        onEdit={(collection) => {
          // 수정 페이지로 이동
          console.log('컬렉션 수정하기:', collection);
        }}
      />
    </div>
  );
}
```

### API 직접 사용하기

컴포넌트를 사용하지 않고 API를 직접 호출할 수도 있습니다:

```tsx
import { useApi } from '@smatch-corp/admin-front-property';

function MyComponent() {
  const { propertyCollectionRepository } = useApi();
  
  const fetchCollections = async () => {
    try {
      const result = await propertyCollectionRepository.findAllPage({
        page: 0,
        size: 10,
        request: {
          // 필요한 요청 파라미터
        }
      });
      console.log('컬렉션 목록:', result.content);
      return result;
    } catch (error) {
      console.error('컬렉션 조회 중 오류 발생:', error);
      throw error;
    }
  };
  
  // ...
}
```

## 컴포넌트 목록

### PropertyCollectionList

매물 컬렉션 목록을 표시하는 컴포넌트입니다.

```tsx
<PropertyCollectionList 
  onViewDetail={(collection) => {}}
  onEdit={(collection) => {}}
  onDelete={(collection) => {}}
  onCreateClick={() => {}}
  onCreateSuccess={() => {}}
  showCreateFormInline={true}
/>
```

### PropertyCollectionCreate

매물 컬렉션을 생성하는 폼 컴포넌트입니다.

```tsx
<PropertyCollectionCreate 
  onSuccess={() => {}}
/>
```

### PropertyCollectionEdit

매물 컬렉션을 수정하는 폼 컴포넌트입니다.

```tsx
<PropertyCollectionEdit 
  id="컬렉션ID"
  onSuccess={() => {}}
  onCancel={() => {}}
/>
```

## 라이센스

MIT