diff options
| author | 2023-10-17 12:46:06 +0200 | |
|---|---|---|
| committer | 2023-10-17 12:46:06 +0200 | |
| commit | 637f188ebec71fe4b0b80bbab4592d4c269d7d93 (patch) | |
| tree | 6e1136dee4d854af021e0a571a67038d32083e4b /web/source/settings/components/form | |
| parent | [chore]: Bump github.com/microcosm-cc/bluemonday from 1.0.25 to 1.0.26 (#2266) (diff) | |
| download | gotosocial-637f188ebec71fe4b0b80bbab4592d4c269d7d93.tar.xz | |
[feature] Allow import/export/creation of domain allows via admin panel (#2264)v0.12.0-rc1
* it's happening!
* aaa
* fix silly whoopsie
* it's working pa! it's working ma!
* model report parameters
* shuffle some more stuff around
* getting there
* oo hoo
* finish tidying up for now
* aaa
* fix use form submit errors
* peepee poo poo
* aaaaa
* ffff
* they see me typin', they hatin'
* boop
* aaa
* oooo
* typing typing tappa tappa
* almost done typing
* weee
* alright
* push it push it real good doo doo doo doo doo doo
* thingy no worky
* almost done
* mutation modifers not quite right
* hmm
* it works
* view blocks + allows nicely
* it works!
* typia install
* the old linterino
* linter plz
Diffstat (limited to 'web/source/settings/components/form')
| -rw-r--r-- | web/source/settings/components/form/inputs.tsx (renamed from web/source/settings/components/form/inputs.jsx) | 106 | 
1 files changed, 78 insertions, 28 deletions
| diff --git a/web/source/settings/components/form/inputs.jsx b/web/source/settings/components/form/inputs.tsx index f7a6beeda..1e0d8eaab 100644 --- a/web/source/settings/components/form/inputs.jsx +++ b/web/source/settings/components/form/inputs.tsx @@ -17,9 +17,28 @@  	along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ -const React = require("react"); +import React from "react"; + +import type { +	ReactNode, +	RefObject, +} from "react"; + +import type { +	FileFormInputHook, +	RadioFormInputHook, +	TextFormInputHook, +} from "../../lib/form/types"; + +export interface TextInputProps extends React.DetailedHTMLProps< +	React.InputHTMLAttributes<HTMLInputElement>, +	HTMLInputElement +> { +	label?: string; +	field: TextFormInputHook; +} -function TextInput({ label, field, ...inputProps }) { +export function TextInput({label, field, ...props}: TextInputProps) {  	const { onChange, value, ref } = field;  	return ( @@ -27,16 +46,25 @@ function TextInput({ label, field, ...inputProps }) {  			<label>  				{label}  				<input -					type="text" -					{...{ onChange, value, ref }} -					{...inputProps} +					onChange={onChange} +					value={value} +					ref={ref as RefObject<HTMLInputElement>} +					{...props}  				/>  			</label>  		</div>  	);  } -function TextArea({ label, field, ...inputProps }) { +export interface TextAreaProps extends React.DetailedHTMLProps< +	React.TextareaHTMLAttributes<HTMLTextAreaElement>, +	HTMLTextAreaElement +> { +	label?: string; +	field: TextFormInputHook; +} + +export function TextArea({label, field, ...props}: TextAreaProps) {  	const { onChange, value, ref } = field;  	return ( @@ -44,16 +72,25 @@ function TextArea({ label, field, ...inputProps }) {  			<label>  				{label}  				<textarea -					type="text" -					{...{ onChange, value, ref }} -					{...inputProps} +					onChange={onChange} +					value={value} +					ref={ref as RefObject<HTMLTextAreaElement>} +					{...props}  				/>  			</label>  		</div>  	);  } -function FileInput({ label, field, ...inputProps }) { +export interface FileInputProps extends React.DetailedHTMLProps< +	React.InputHTMLAttributes<HTMLInputElement>, +	HTMLInputElement +> { +	label?: string; +	field: FileFormInputHook; +} + +export function FileInput({ label, field, ...props }: FileInputProps) {  	const { onChange, ref, infoComponent } = field;  	return ( @@ -66,15 +103,16 @@ function FileInput({ label, field, ...inputProps }) {  				<input  					type="file"  					className="hidden" -					{...{ onChange, ref }} -					{...inputProps} +					onChange={onChange} +					ref={ref ? ref as RefObject<HTMLInputElement> : undefined} +					{...props}  				/>  			</label>  		</div>  	);  } -function Checkbox({ label, field, ...inputProps }) { +export function Checkbox({ label, field, ...inputProps }) {  	const { onChange, value } = field;  	return ( @@ -91,16 +129,29 @@ function Checkbox({ label, field, ...inputProps }) {  	);  } -function Select({ label, field, options, children, ...inputProps }) { +export interface SelectProps extends React.DetailedHTMLProps< +	React.SelectHTMLAttributes<HTMLSelectElement>, +	HTMLSelectElement +> { +	label?: string; +	field: TextFormInputHook; +	children?: ReactNode; +	options: React.JSX.Element; +} + +export function Select({ label, field, children, options, ...props }: SelectProps) {  	const { onChange, value, ref } = field;  	return (  		<div className="form-field select">  			<label> -				{label} {children} +				{label} +				{children}  				<select -					{...{ onChange, value, ref }} -					{...inputProps} +					onChange={onChange} +					value={value} +					ref={ref as RefObject<HTMLSelectElement>} +					{...props}  				>  					{options}  				</select> @@ -109,7 +160,15 @@ function Select({ label, field, options, children, ...inputProps }) {  	);  } -function RadioGroup({ field, label, ...inputProps }) { +export interface RadioGroupProps extends React.DetailedHTMLProps< +	React.InputHTMLAttributes<HTMLInputElement>, +	HTMLInputElement +> { +	label?: string; +	field: RadioFormInputHook; +} + +export function RadioGroup({ label, field, ...props }: RadioGroupProps) {  	return (  		<div className="form-field radio">  			{Object.entries(field.options).map(([value, radioLabel]) => ( @@ -120,7 +179,7 @@ function RadioGroup({ field, label, ...inputProps }) {  						value={value}  						checked={field.value == value}  						onChange={field.onChange} -						{...inputProps} +						{...props}  					/>  					{radioLabel}  				</label> @@ -129,12 +188,3 @@ function RadioGroup({ field, label, ...inputProps }) {  		</div>  	);  } - -module.exports = { -	TextInput, -	TextArea, -	FileInput, -	Checkbox, -	Select, -	RadioGroup -};
\ No newline at end of file | 
