From ae9f66c9efe31afe0813073eb9a924ed836f73c8 Mon Sep 17 00:00:00 2001 From: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Date: Mon, 28 Nov 2022 11:20:49 +0000 Subject: [PATCH] InputField with suffix select (#5683) Co-authored-by: Peer Richelsen --- packages/ui/components/form/index.ts | 1 + packages/ui/components/form/inputs/Input.tsx | 56 ++++++++++++++----- .../components/form/inputs/inputs.stories.mdx | 5 +- packages/ui/components/index.ts | 1 + packages/ui/form/Select.tsx | 42 ++++++++++++++ packages/ui/index.tsx | 3 +- 6 files changed, 93 insertions(+), 15 deletions(-) diff --git a/packages/ui/components/form/index.ts b/packages/ui/components/form/index.ts index 7dea7d0ac9..af12055775 100644 --- a/packages/ui/components/form/index.ts +++ b/packages/ui/components/form/index.ts @@ -13,5 +13,6 @@ export { TextArea, TextAreaField, TextField, + InputFieldWithSelect, } from "./inputs/Input"; export { Label } from "./inputs/Label"; diff --git a/packages/ui/components/form/inputs/Input.tsx b/packages/ui/components/form/inputs/Input.tsx index 17ed40d75c..d5df01896b 100644 --- a/packages/ui/components/form/inputs/Input.tsx +++ b/packages/ui/components/form/inputs/Input.tsx @@ -6,19 +6,23 @@ import classNames from "@calcom/lib/classNames"; import { getErrorFromUnknown } from "@calcom/lib/errors"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { Alert, showToast, Skeleton, Tooltip } from "../../.."; +import { Alert, showToast, Skeleton, Tooltip, UnstyledSelect } from "../../.."; import { HintsOrErrors } from "./HintOrErrors"; import { Label } from "./Label"; -type InputProps = JSX.IntrinsicElements["input"]; +type InputProps = JSX.IntrinsicElements["input"] & { isFullWidth?: boolean }; -export const Input = forwardRef(function Input(props, ref) { +export const Input = forwardRef(function Input( + { isFullWidth = true, ...props }, + ref +) { return ( @@ -39,6 +43,9 @@ type InputFieldProps = { hintErrors?: string[]; addOnLeading?: ReactNode; addOnSuffix?: ReactNode; + inputIsFullWidth?: boolean; + /**@Default paddingX 12px */ + addOnPadding?: number; addOnFilled?: boolean; error?: string; labelSrOnly?: boolean; @@ -54,15 +61,13 @@ type AddonProps = { isFilled?: boolean; className?: string; error?: boolean; + paddingX?: number; }; -const Addon = ({ isFilled, children, className, error }: AddonProps) => ( +const Addon = ({ isFilled, children, className, error, paddingX = 12 }: AddonProps) => (
+ style={{ padding: `0 ${paddingX}px` }} + className={classNames("addon-wrapper h-9 border border-gray-300", isFilled && "bg-gray-100", className)}>
{children}
@@ -83,6 +88,8 @@ export const InputField = forwardRef(function addOnLeading, addOnSuffix, addOnFilled = true, + addOnPadding, + inputIsFullWidth, hint, hintErrors, labelSrOnly, @@ -107,13 +114,14 @@ export const InputField = forwardRef(function {addOnLeading || addOnSuffix ? (
{addOnLeading && ( - + {addOnLeading} )} (function ref={ref} /> {addOnSuffix && ( - + {addOnSuffix} )}
) : ( - + )} {hint &&
{hint}
} @@ -319,3 +334,18 @@ export function InputGroupBox(props: JSX.IntrinsicElements["div"]) {
); } + +export const InputFieldWithSelect = forwardRef< + HTMLInputElement, + InputFieldProps & { selectProps: typeof UnstyledSelect } +>(function EmailField(props, ref) { + return ( + } + /> + ); +}); diff --git a/packages/ui/components/form/inputs/inputs.stories.mdx b/packages/ui/components/form/inputs/inputs.stories.mdx index 891bfcfac5..52f4f2591c 100644 --- a/packages/ui/components/form/inputs/inputs.stories.mdx +++ b/packages/ui/components/form/inputs/inputs.stories.mdx @@ -1,6 +1,6 @@ import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs'; import { Examples, Example, Note, Title,CustomArgsTable, VariantRow,VariantsTable} from '@calcom/storybook/components' -import { Icon } from "@calcom/ui"; +import { Icon,Select,UnstyledSelect,InputFieldWithSelect } from "@calcom/ui"; import {InputField} from "./Input" @@ -35,6 +35,9 @@ Text fields allow users to input and edit text into the product. Usually appear Suffix}/> + + + diff --git a/packages/ui/components/index.ts b/packages/ui/components/index.ts index 91543fbaa1..0784a69a7a 100644 --- a/packages/ui/components/index.ts +++ b/packages/ui/components/index.ts @@ -22,6 +22,7 @@ export { TextArea, TextAreaField, TextField, + InputFieldWithSelect, } from "./form"; export { TopBanner } from "./top-banner"; export type { TopBannerProps } from "./top-banner"; diff --git a/packages/ui/form/Select.tsx b/packages/ui/form/Select.tsx index 822a2971f0..d09dcd78cb 100644 --- a/packages/ui/form/Select.tsx +++ b/packages/ui/form/Select.tsx @@ -61,3 +61,45 @@ function Select< } export default Select; + +export function UnstyledSelect< + Option, + IsMulti extends boolean = false, + Group extends GroupBase