Package

@mycrm-ui/react

mycrm UI를 React 앱에 연결하기 위한 공통 React 컴포넌트, 컨텍스트, 훅 모음입니다. Portal, ErrorBoundary, Provider 계층을 통해 CRM UI 기능을 안정적으로 조립할 수 있습니다.

widgets

컴포넌트

공통 React 컴포넌트 모음입니다. Portal과 ErrorBoundary를 제공합니다.

import { Portal, ErrorBoundary } from '@mycrm-ui/react'

// Portal: 특정 DOM 노드에 자식을 렌더링
<Portal container={document.body}>
  <Modal />
</Portal>

// ErrorBoundary: 컴포넌트 에러 경계
<ErrorBoundary
  fallback={(error) => <div>오류 발생: {error.message}</div>}
  onError={(error, info) => console.error(error, info)}
>
  <App />
</ErrorBoundary>
share

컨텍스트

테마와 로케일을 관리하는 Provider/Hook 쌍을 제공합니다.

import { ThemeProvider, useTheme, LocaleProvider, useLocale } from '@mycrm-ui/react'

// 테마
<ThemeProvider defaultTheme="light">
  <App />
</ThemeProvider>

function MyComponent() {
  const { theme, setTheme } = useTheme()
  return <button onClick={() => setTheme('dark')}>다크 모드</button>
}

// 로케일
<LocaleProvider defaultLocale="ko-KR">
  <App />
</LocaleProvider>

function MyComponent() {
  const { locale, setLocale } = useLocale()
}
link

디바운스, 외부 클릭 감지, 크기 관찰 등 재사용 가능한 커스텀 훅입니다.

import { useDebounce, useClickOutside, useResizeObserver, useId } from '@mycrm-ui/react'

// 값 디바운스
const debouncedSearch = useDebounce(searchTerm, 300)

// 외부 클릭 감지
const ref = useRef<HTMLDivElement>(null)
useClickOutside(ref, () => setOpen(false))

// 엘리먼트 크기 감지
const size = useResizeObserver(ref)  // { width, height } | null

// 고유 ID 생성
const id = useId('input')  // 'input-abc123'
설명
useDebounce값 변경을 지연 (ms 단위)
useClickOutsideref 외부 클릭 시 콜백 실행
useResizeObserver엘리먼트 크기 변화 감지
useId접두사 기반 고유 ID 생성