dunji

카카오 우편번호 서비스(Kakao Postcode)의 Lustre 전용 Gleam 래퍼.

Lustre TEA 패턴에 맞춰 Effect(msg)를 반환하는 API를 제공한다.

빠른 시작

import dunji
import dunji/address.{type Address}

type Msg {
  UserClickedSearch
  GotAddress(Address)
}

fn update(model, msg) {
  case msg {
    UserClickedSearch ->
      #(model, dunji.open_default(on_complete: GotAddress))
    GotAddress(addr) ->
      #(Model(..model, address: Some(addr)), effect.none())
  }
}

Types

팝업 닫힘 상태.

pub type CloseState {
  ForceClose
  CompleteClose
}

Constructors

  • ForceClose

    사용자가 닫기 버튼을 클릭.

  • CompleteClose

    사용자가 주소를 선택하여 닫힘.

검색 이벤트 정보.

pub type SearchData {
  SearchData(query: String, count: Int)
}

Constructors

  • SearchData(query: String, count: Int)

embed 모드에서 크기 변경 정보.

pub type Size {
  Size(width: Int, height: Int)
}

Constructors

  • Size(width: Int, height: Int)

Values

pub fn embed(
  selector selector: String,
  options options: options.Options,
  on_complete on_complete: fn(address.Address) -> msg,
  on_close on_close: option.Option(fn(CloseState) -> msg),
  on_resize on_resize: option.Option(fn(Size) -> msg),
  on_search on_search: option.Option(fn(SearchData) -> msg),
) -> effect.Effect(msg)

카카오 우편번호 서비스를 DOM 요소에 임베드한다.

selector는 대상 요소의 CSS 선택자 (예: "#address-search").

예시

dunji.embed(
  selector: "#postcode-container",
  options: options.default(),
  on_complete: GotAddress,
  on_close: None,
  on_resize: None,
  on_search: None,
)
pub fn embed_default(
  selector selector: String,
  on_complete on_complete: fn(address.Address) -> msg,
) -> effect.Effect(msg)

기본 옵션으로 DOM 요소에 임베드하는 편의 함수.

dunji.embed_default(selector: "#container", on_complete: GotAddress)
pub fn open(
  options options: options.Options,
  on_complete on_complete: fn(address.Address) -> msg,
  on_close on_close: option.Option(fn(CloseState) -> msg),
  on_search on_search: option.Option(fn(SearchData) -> msg),
) -> effect.Effect(msg)

카카오 우편번호 서비스를 팝업으로 연다.

예시

// 기본 사용
dunji.open(
  options: options.default(),
  on_complete: GotAddress,
  on_close: None,
  on_search: None,
)

// 콜백 추가
dunji.open(
  options: options.default() |> options.animation(True),
  on_complete: GotAddress,
  on_close: Some(GotClose),
  on_search: None,
)
pub fn open_default(
  on_complete on_complete: fn(address.Address) -> msg,
) -> effect.Effect(msg)

기본 옵션으로 팝업을 여는 편의 함수.

dunji.open_default(on_complete: GotAddress)
Search Document