Skip to content

qpounodb/frontend-hw-2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ React Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ β„–2

Π’ Π΄Π°Π½Π½ΠΎΠΌ домашнСм Π·Π°Π΄Π°Π½ΠΈΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для вашСго Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±Ρ‰ΠΈΠ΅ трСбования:

  1. Если Π² трСбованиях ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ пропс className, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ css-классы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ css-классы, Π½ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ….
  2. ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ className Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ classnames
  3. ИмСнованиС css-классов Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ согласно ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π‘Π­Πœ
  4. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΡŽΠ±Ρ‹Ρ… пропсов
  5. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ управляСмым (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π° лишь ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± измСнСниях Π½Π°Π²Π΅Ρ€Ρ…. А Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ пропсам со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ послС дСйствий)
  6. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС пропсов React.InputHTMLAttributes<HTMLElement> Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ элСмСнты
  7. Из ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ export, Π½Π΅ default.

1. Loader

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π›ΠΎΠ°Π΄Π΅Ρ€

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ Π»ΠΎΠ°Π΄Π΅Ρ€Π°: GitHub, E-commerce, Food, Crypto

ВрСбования:

/** Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π»ΠΎΠ°Π΄Π΅Ρ€Π° */
enum LoaderSize {
    s = 's',
    m = 'm',
    l = 'l'
}

/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Loader */
type LoaderProps = {
    /**
     * Π˜Π΄Π΅Ρ‚ Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.
     * По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - true, для удобства использования
     * Если false, Ρ‚ΠΎ Π»ΠΎΠ°Π΄Π΅Ρ€ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ
     */
    loading?: boolean;
    /**
     * Π Π°Π·ΠΌΠ΅Ρ€ Π»ΠΎΠ°Π΄Π΅Ρ€Π°. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ пропса, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ css-класс loader_size-{size}
     * По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Ρ€Π°Π·ΠΌΠ΅Ρ€ - LoaderSize.m, css-класс - loader_size-m
     */
    size?: LoaderSize;
    /**
     * Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ CSS-классы.
     */
    className?: string;
};

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

<Loader />  // стандартный Π»ΠΎΠ°Π΄Π΅Ρ€

<Loader size={LoaderSize.l} />  // Π»ΠΎΠ°Π΄Π΅Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° L

<Loader loading={isLoading} />  // Π»ΠΎΠ°Π΄Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ isLoading=false

2. WithLoader

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ WithLoader.

ВрСбования:

  1. ВсСгда ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ элСмСнты (children)
  2. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ loading=true ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Loader
  3. Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Loader
/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ WithLoader */
export type WithLoaderProps = React.PropsWithChildren<{
  loading: boolean;
}>;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

<WithLoader loading={isLoading}>
  <div>БСмантичСская вСрстка нашС всС!</div>
</WithLoader>

3. Button

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Кнопка.

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠ½ΠΎΠΏΠΊΠΈ: GitHub, E-commerce, Food, Crypto

ВрСбования:

  1. Кнопка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ html-Ρ‚Π΅Π³ button ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всС Π΅Π³ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ html-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
  2. Кнопка ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ пропсы ButtonProps ΠΈ удовлСтворяСт ΠΈΡ… трСбованиям, описанным Π½ΠΈΠΆΠ΅
  3. ВСкст ΠΊΠ½ΠΎΠΏΠΊΠΈ/Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт пСрСдаСтся Π² качСствС children
  4. ИмСнованиС css-классов:
    • Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΊΠ½ΠΎΠΏΠΊΠΈ: .button
    • Класс-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ: .button_disabled
    • Класс-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° раскраску ΠΊΠ½ΠΎΠΏΠΊΠΈ: .button_color-primary, .button_color-secondary
/** Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ раскраски ΠΊΠ½ΠΎΠΏΠΊΠΈ */
enum ButtonColor {
    /** Основная, акцСнтная ΠΊΠ½ΠΎΠΏΠΊΠ° */
    primary = 'primary',
    /** ВторостСпСнная ΠΊΠ½ΠΎΠΏΠΊΠ° */
    secondary = 'secondary'
}
 
 /** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button */
export type ButtonProps = React.PropsWithChildren<{
    /**
     * Если true, Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ вмСстС с children отобраТаСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Loader
     * Π’Π°ΠΊΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² состояниС disabled
     * По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - false
     */
    loading?: boolean;
    /** Π¦Π²Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -  ButtonColor.primary*/
    color?: ButtonColor;
}> & React.ButtonHTMLAttributes<HTMLButtonElement>;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

// Кнопка с тСкстом "ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ", Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π² консоль "Письмо ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ" ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ 
<Button onClick={() => console.log('Письмо ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ')}>
  ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ
</Button>

// ВторостСпСнная ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Loader ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…
<Button
  color={ButtonColor.secondary}
  loading={isLoading}
>
  ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ
</Button>

// Кнопка с элСмСнтом Π² качСствС содСрТимого
<Button>
  <span>Модная кнопка</span>
</Button>

// Заблокированная ΠΊΠ½ΠΎΠΏΠΊΠ° с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ классом
<Button className="some-outer-class" disabled>
  ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ
</Button>

// Кнопка с пропсом Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ
<Button onMouseOver={() => console.log('Π£Π±Π΅Ρ€ΠΈ ΠΎΡ‚ мСня курсор!')}>
  ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ
</Button>

4. Card

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° (Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ списка).

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ: GitHub, E-commerce, Food, Crypto

ВрСбования:

  1. Для изобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ html-Ρ‚Π΅Π³ img
/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Card */
type CardProps = {
    /** URL изобраТСния */
    image: string;
    /** Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ */
    title: React.ReactNode;
    /** Подзаголовок ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ */
    subtitle: React.ReactNode;
    /** Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ (Ρ„ΡƒΡ‚Π΅Ρ€/боковая Ρ‡Π°ΡΡ‚ΡŒ), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым */
    content?: React.ReactNode;
    /** Клик Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ */
    onClick?: React.MouseEventHandler;
};

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

// ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° 
<Card
    image="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
    title="ΠœΠ°Π½Π΄Π°Ρ€ΠΈΠ½"
    subtitle="ΠœΠ°Ρ€ΠΎΠΊΠΊΠΎ"
    onClick={() => console.log('ΠœΠ°Π½Π΄Π°Ρ€ΠΈΠ½ ΠΊΡƒΠΏΠ»Π΅Π½!')}
/>

// ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° с Π΄ΠΎΠΏ.ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ ΠΈ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ-ссылкой
<Card
    image="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
    title="ΠœΠ°Π½Π΄Π°Ρ€ΠΈΠ½"
    subtitle={<a href="/morocco">ΠœΠ°Ρ€ΠΎΠΊΠΊΠΎ</a>}
    content={<span><b>299Ρ€</b><i>5 ΠΎΡ‚Π·Ρ‹Π²ΠΎΠ²</i><span>}
/>

5. Input

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ПолС Π²Π²ΠΎΠ΄Π°.

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ½ΠΏΡƒΡ‚Π°: GitHub, E-commerce, Food, Crypto

ВрСбования:

  1. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ html-Ρ‚Π΅Π³ input
/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Input */
export type InputProps = Omit<
  React.InputHTMLAttributes<HTMLInputElement>,
  'onChange'
> & {
  /** Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля */
  value: string;
  /** Callback, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ»Π΅ */
  onChange: (value: string) => void;
};

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΏΠΎΠ»Π΅ 
<Input
    value="ΠšΡ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π±ΠΈΡ‚ΠΊΠΎΠΈΠ½?"
    onChange={(value: string) => console.log(value)}
/>

// Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с плСйсхолдСром
<Input
    value=""
    onChange={(value: string) => console.log(value)}
    placeholder="НачнитС Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ свой вопрос"
    disabled
/>

6. MultiDropdown

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π’Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список с мноТСствСнным Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ (Π€ΠΈΠ»ΡŒΡ‚Ρ€).

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ΄Ρ€ΠΎΠΏΠ΄Π°ΡƒΠ½Π°: GitHub, E-commerce, Food, Crypto,

ВрСбования:

  1. НС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ html-элСмСнт select
/** Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ для Π²Ρ‹Π±ΠΎΡ€Π° Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ */
type Option = {
    /** ΠšΠ»ΡŽΡ‡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° Π±Π΅ΠΊ/использования Π² ΠΊΠΎΠ΄Π΅ */
    key: string;
    /** Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, отобраТаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ */
    value: string;
};

/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Dropdown */
type MultiDropdownProps = {
    /** Массив Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² для Π²Ρ‹Π±ΠΎΡ€Π° */
    options: Option[];
    /** Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ значСния поля, массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым */
    value: Option[];
    /** Callback, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° */
    onChange: (value: Option[]) => void;
    /** Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π»ΠΈ Π΄Ρ€ΠΎΠΏΠ΄Π°ΡƒΠ½ */
    disabled?: boolean;
    /** ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ значСния Π² строку. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ΡΡ Π² Π΄Ρ€ΠΎΠΏΠ΄Π°ΡƒΠ½Π΅ Π² качСствС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ значСния */
    pluralizeOptions: (value: Option[]) => string;
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ 
<MultiDropdown
    options={[
        { key: 'msk', value: 'Москва' },
        { key: 'spb', value: 'Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³' },
        { key: 'ekb', value: 'Π•ΠΊΠ°Ρ‚Π΅Ρ€ΠΈΠ½Π±ΡƒΡ€Π³' }
    ]}
    value={[{ key: 'msk', value: 'Москва' }]}
    onChange={(selected: Option[]) => console.log('Π’Ρ‹Π±Ρ€Π°Π½ΠΎ:', JSON.stringify(selected))}
    pluralizeOptions={() => ''}
/>

// Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€
<MultiDropdown
    disabled
    options={someOptions}
    value={currentValue}
    onChange={onChange}
    pluralizeOptions={(values: Option[]) => values.length === 0 ? 'Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π³ΠΎΡ€ΠΎΠ΄' : `Π’Ρ‹Π±Ρ€Π°Π½ΠΎ: ${values.length}`}
/>

// Π€ΠΈΠ»ΡŒΡ‚Ρ€, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ количСство Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²
<MultiDropdown
    options={someOptions}
    value={currentValue}
    onChange={onChange}
    pluralizeOptions={(values: Option[]) => `Π’Ρ‹Π±Ρ€Π°Π½ΠΎ: ${values.length}`}
/>

7. CheckBox

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ЧСкбокс.

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ чСкбокса: GitHub, E-commerce, Food, Crypto

ВрСбования:

  1. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ html-Ρ‚Π΅Π³ input
/** ΠŸΡ€ΠΎΠΏΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ CheckBox */
type CheckBoxProps = Omit<
  React.InputHTMLAttributes<HTMLInputElement>,
  'onChange'
> & {
    /** ВызываСтся ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° чСкбокс */
    onChange: (value: boolean) => void;
};

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ чСкбокс 
<CheckBox
  checked={checked}
  onChange={setChecked}
/>

// Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ чСкбокс 
<CheckBox
  disabled
  checked={checked}
  onChange={setChecked}
/>

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published