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 |