From e47899ae5cb5a8f8b73d2d551cd12b468b3d9315 Mon Sep 17 00:00:00 2001 From: Wang Sijie Date: Sun, 24 Apr 2022 11:43:32 +0800 Subject: [PATCH] feat(console): add component checkbox (#576) * feat(console): add component checkbox * fix: merge icons * fix: svg color --- .../console/src/components/Checkbox/Icon.tsx | 73 +++++++++++++++++++ .../src/components/Checkbox/index.module.scss | 44 +++++++++++ .../console/src/components/Checkbox/index.tsx | 23 ++++++ .../components/SignInMethodsForm.tsx | 27 ++++--- .../components/index.module.scss | 4 + 5 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 packages/console/src/components/Checkbox/Icon.tsx create mode 100644 packages/console/src/components/Checkbox/index.module.scss create mode 100644 packages/console/src/components/Checkbox/index.tsx diff --git a/packages/console/src/components/Checkbox/Icon.tsx b/packages/console/src/components/Checkbox/Icon.tsx new file mode 100644 index 000000000..598b164bf --- /dev/null +++ b/packages/console/src/components/Checkbox/Icon.tsx @@ -0,0 +1,73 @@ +import React from 'react'; + +type Props = { + className?: string; +}; + +const Icon = ({ className }: Props) => ( + + + + + + + + + + + + + + + + +); + +export default Icon; diff --git a/packages/console/src/components/Checkbox/index.module.scss b/packages/console/src/components/Checkbox/index.module.scss new file mode 100644 index 000000000..aef8ecc03 --- /dev/null +++ b/packages/console/src/components/Checkbox/index.module.scss @@ -0,0 +1,44 @@ +@use '@/scss/underscore' as _; + +.checkbox { + position: relative; + display: inline-flex; + align-items: center; + + .icon { + width: 20px; + height: 20px; + margin-right: _.unit(2); + + > svg { + display: none; + color: var(--color-neutral-60); + + &:first-child { + color: var(--color-primary); + } + } + } + + input { + position: absolute; + width: 20px; + height: 20px; + left: 0; + top: 0; + margin: 0; + opacity: 0%; + } + + input:checked:not(:disabled) ~ .icon > svg:nth-child(1), + input:not(:checked):not(:disabled) ~ .icon > svg:nth-child(2), + input:checked:disabled ~ .icon > svg:nth-child(3), + input:not(:checked):disabled ~ .icon > svg:nth-child(4) { + display: block; + } + + label { + font: var(--font-body-medium); + color: var(--color-text); + } +} diff --git a/packages/console/src/components/Checkbox/index.tsx b/packages/console/src/components/Checkbox/index.tsx new file mode 100644 index 000000000..2a0dbe0ca --- /dev/null +++ b/packages/console/src/components/Checkbox/index.tsx @@ -0,0 +1,23 @@ +import { nanoid } from 'nanoid'; +import React, { InputHTMLAttributes, ReactNode, useState } from 'react'; + +import Icon from './Icon'; +import * as styles from './index.module.scss'; + +type Props = Omit, 'type'> & { + label?: ReactNode; +}; + +const Checkbox = ({ label, disabled, ...rest }: Props) => { + const [id] = useState(nanoid()); + + return ( +
+ + + {label && } +
+ ); +}; + +export default Checkbox; diff --git a/packages/console/src/pages/SignInExperience/components/SignInMethodsForm.tsx b/packages/console/src/pages/SignInExperience/components/SignInMethodsForm.tsx index 135def2a6..5a6ad5a55 100644 --- a/packages/console/src/pages/SignInExperience/components/SignInMethodsForm.tsx +++ b/packages/console/src/pages/SignInExperience/components/SignInMethodsForm.tsx @@ -3,6 +3,7 @@ import React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; +import Checkbox from '@/components/Checkbox'; import FormField from '@/components/FormField'; import Select from '@/components/Select'; import Switch from '@/components/Switch'; @@ -43,23 +44,21 @@ const SignInMethodsForm = () => { label={t('sign_in_exp.sign_in_methods.enable_secondary_description')} /> {signInMethods.map((method) => ( -
- {/* TODO: LOG-2187 checkbox component */} - + + {t('sign_in_exp.sign_in_methods.methods', { context: method })} + {primaryMethod === method && ( + + {t('sign_in_exp.sign_in_methods.methods_primary_tag')} + + )} + + } disabled={primaryMethod === method} {...register(`signInMethods.${method}`)} /> -
))} diff --git a/packages/console/src/pages/SignInExperience/components/index.module.scss b/packages/console/src/pages/SignInExperience/components/index.module.scss index 65a964647..da96d6db7 100644 --- a/packages/console/src/pages/SignInExperience/components/index.module.scss +++ b/packages/console/src/pages/SignInExperience/components/index.module.scss @@ -9,3 +9,7 @@ .primaryTag { color: var(--color-caption); } + +.method { + margin-top: _.unit(2); +}