signal-desktop/sticker-creator/elements/LabeledInput.tsx

43 lines
974 B
TypeScript
Raw Normal View History

2020-10-30 20:34:04 +00:00
// Copyright 2019-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
2019-12-17 20:25:57 +00:00
import * as React from 'react';
import * as styles from './LabeledInput.scss';
import { Inline } from './Typography';
export type Props = {
children: React.ReactNode;
placeholder?: string;
value?: string;
onChange?: (value: string) => unknown;
};
2022-11-18 00:45:19 +00:00
export const LabeledInput = React.memo(function LabeledInputInner({
children,
value,
placeholder,
onChange,
}: Props) {
const handleChange = React.useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
if (onChange !== undefined) {
onChange(e.currentTarget.value);
}
},
[onChange]
);
2019-12-17 20:25:57 +00:00
2022-11-18 00:45:19 +00:00
return (
<label className={styles.container}>
<Inline className={styles.label}>{children}</Inline>
<input
type="text"
className={styles.input}
placeholder={placeholder}
value={value}
onChange={handleChange}
/>
</label>
);
});