로고SEED Design
Select Box

Check Select Box

이 문서는 정리 중이에요. 문의 내용은 #_design_core 채널을 찾아주세요.

import { VStack } from "@seed-design/react";
import { CheckSelectBox, CheckSelectBoxGroup } from "seed-design/ui/select-box";

export default function CheckSelectBoxPreview() {
  return (
    <CheckSelectBoxGroup>
      <VStack gap="spacingY.componentDefault">
        <CheckSelectBox label="Apple" defaultChecked />
        <CheckSelectBox
          label="Melon"
          description="Elit cupidatat dolore fugiat enim veniam culpa."
        />
        <CheckSelectBox label="Mango" />
      </VStack>
    </CheckSelectBoxGroup>
  );
}

Installation

npx @seed-design/cli@latest add select-box
pnpm dlx @seed-design/cli@latest add select-box
yarn dlx @seed-design/cli@latest add select-box
bun x @seed-design/cli@latest add select-box

Props

CheckSelectBox

PropTypeDefault
asChild?
boolean
false
indeterminate?
boolean
-
onCheckedChange?
((checked: boolean) => void)
-
defaultChecked?
boolean
-
checked?
boolean
-
required?
boolean
-
invalid?
boolean
-
disabled?
boolean
-
rootRef?
Ref<HTMLLabelElement>
-
inputProps?
InputHTMLAttributes<HTMLInputElement>
-
description?
string
-
label?
string
-

Examples

React Hook Form

import { HStack, VStack } from "@seed-design/react";
import { useCallback, type FormEvent } from "react";
import { useController, useForm } from "react-hook-form";
import { ActionButton } from "seed-design/ui/action-button";
import { CheckSelectBox, CheckSelectBoxGroup } from "seed-design/ui/select-box";

const POSSIBLE_FRUIT_VALUES = ["apple", "melon", "mango"] as const;

type FormValues = Record<(typeof POSSIBLE_FRUIT_VALUES)[number], boolean>;

export default function CheckSelectBoxReactHookForm() {
  const { handleSubmit, reset, setValue, control } = useForm<FormValues>({
    defaultValues: {
      apple: false,
      melon: true,
      mango: false,
    },
  });

  const onValid = useCallback((data: FormValues) => {
    window.alert(JSON.stringify(data, null, 2));
  }, []);

  const onReset = useCallback(
    (event: FormEvent) => {
      event.preventDefault();
      reset();
    },
    [reset],
  );

  return (
    <VStack gap="x3" width="full" as="form" onSubmit={handleSubmit(onValid)} onReset={onReset}>
      <CheckSelectBoxGroup>
        <VStack gap="spacingY.componentDefault">
          {POSSIBLE_FRUIT_VALUES.map((name) => {
            const {
              field: { value, ...restProps },
              fieldState: { invalid },
            } = useController({ name, control });

            return (
              <CheckSelectBox
                key={name}
                label={name}
                checked={value}
                inputProps={restProps}
                invalid={invalid}
              />
            );
          })}
        </VStack>
      </CheckSelectBoxGroup>
      <HStack gap="x2">
        <ActionButton type="reset" variant="neutralWeak">
          초기화
        </ActionButton>
        <ActionButton type="button" variant="neutralWeak" onClick={() => setValue("mango", true)}>
          mango 선택
        </ActionButton>
        <ActionButton type="submit" flexGrow={1}>
          제출
        </ActionButton>
      </HStack>
    </VStack>
  );
}

Last updated on