PHP Classes

File: src/components/inputs/Input.tsx

Recommend this page to a friend!
  Classes of Maniruzzaman Akash   WordPress React Plugin Kit   src/components/inputs/Input.tsx   Download  
File: src/components/inputs/Input.tsx
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: WordPress React Plugin Kit
Environment to develop new WordPress plugins
Author: By
Last change:
Date: 1 year ago
Size: 5,199 bytes
 

Contents

Class file image Download
/** * Internal dependencies */ import Select2Input, { Select2SingleRow } from './Select2Input'; import SwitchCheckbox from './SwitchCheckbox'; export interface InputProps { /** * Input type - text, email, password, number, textarea, select, switch, multiselect */ type: string; /** * Input name or ID. */ id?: string; /** * Input shown value. */ value?: string | number; /** * Input placeholder text. */ placeHolder?: string; /** * Input class. */ inputClass?: string; /** * If select2 is type, then pass options. */ options?: Array<Select2SingleRow>; /** * On change input. */ onChange?: (val: any) => void; /** * On input handle. */ onInput?: (val: any) => void; /** * For textarea input, rows. */ rows?: number; /** * For textarea input, cols. */ cols?: number; /** * Custom button style. */ style?: any; /** * Autocomplete enable or not. */ autoComplete?: string; /** * Min value. */ min?: number; /** * Max value. */ max?: number; } export const InputDefaultProps = { type: 'text', id: '', value: '', placeHolder: '', inputClass: '', onChange: () => {}, onInput: () => {}, rows: 4, cols: 90, style: {}, autoComplete: 'off', min: 0, }; const Input = (props: InputProps) => { const { type, placeHolder, inputClass, onChange, onInput, id, value, options, rows, cols, style, autoComplete, min, max, } = props; const getClassName = () => { let className = `bg-white transition px-4 rounded-md font-medium text-sm border border-solid !border-gray-lite !shadow-none focus:!outline-none focus:!border-gray-dark focus:!shadow-gray-dark required:border-red-500`; switch (type) { case 'text': case 'number': case 'email': case 'search': className += ` h-9`; break; case 'textarea': className += ` w-full`; break; case 'checkbox': className += ` !h-6 !w-6 !appearance-none !indeterminate:bg-gray-300`; break; default: break; } if (inputClass?.length) { className = `${inputClass} ${className}`; } return className; }; const changeInput = (e: any) => { const { name, value } = e.target; if (typeof onChange === 'function') { onChange({ name, value }); } }; return ( <> {(type === 'text' || type === 'number' || type === 'checkbox' || type === 'radio' || type === 'email' || type === 'search') && ( <input type={type} placeholder={placeHolder} className={getClassName()} style={style} onChange={changeInput} onInput={onInput} name={id} checked={type === 'checkbox' && value == '1' ? true : false} id={id} value={value} min={min} max={max} autoComplete={autoComplete} /> )} {type === 'switch' && ( <SwitchCheckbox enabled={value == '1' || value == 'true'} setEnabled={(val: any) => { if (typeof onChange === 'function') { onChange({ name: id, value: val ? true : false }); } }} /> )} {type === 'textarea' && ( <textarea placeholder={placeHolder} className={getClassName()} style={style} onChange={changeInput} onInput={onInput} id={id} name={id} value={value} rows={rows} cols={cols} autoComplete={autoComplete} ></textarea> )} {(type === 'select' || type === 'multiselect') && ( <Select2Input defaultValue={value} isMulti={type === 'multiselect'} options={typeof options !== 'undefined' ? options : []} placeholder={placeHolder} onChange={(val) => { if (typeof onChange === 'function') { onChange({ name: id, value: val }); } }} /> )} </> ); }; Input.defaultProps = InputDefaultProps; export default Input;