1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-02 22:52:21 +01:00

51 lines
2.2 KiB
TypeScript
Raw Normal View History

import React from 'react';
import { FormControlledComponent } from '../../models/form-component';
import { FieldPath } from 'react-hook-form/dist/types/path';
import { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types';
import { Controller, Path } from 'react-hook-form';
import Switch from 'react-switch';
import { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';
interface FormSwitchProps<TFieldValues, TContext extends object> extends FormControlledComponent<TFieldValues, TContext>, AbstractFormItemProps<TFieldValues> {
defaultValue?: boolean,
2022-04-27 15:36:36 +02:00
onChange?: (value: boolean) => void,
}
/**
* This component is a wrapper for react-switch, to use with react-hook-form.
*/
2022-05-10 15:22:01 +02:00
export const FormSwitch = <TFieldValues, TContext extends object>({ id, label, tooltip, className, error, rules, disabled, control, defaultValue, formState, warning, onChange }: FormSwitchProps<TFieldValues, TContext>) => {
2022-04-27 15:36:36 +02:00
/**
* The following callback will trigger the onChange callback, if it was passed to this component,
* when the selected option changes.
*/
const onChangeCb = (newValue: boolean): void => {
if (typeof onChange === 'function') {
onChange(newValue);
}
};
return (
<AbstractFormItem id={id} formState={formState} label={label}
2022-04-27 15:36:36 +02:00
className={`form-switch ${className || ''}`} tooltip={tooltip}
2022-05-10 15:22:01 +02:00
disabled={disabled}
rules={rules} error={error} warning={warning}>
<Controller name={id as FieldPath<TFieldValues>}
control={control}
defaultValue={defaultValue as UnpackNestedValue<FieldPathValue<TFieldValues, Path<TFieldValues>>>}
rules={rules}
render={({ field: { onChange, value, ref } }) =>
2022-04-27 15:36:36 +02:00
<Switch onChange={val => {
onChange(val);
onChangeCb(val);
}}
checked={value as boolean || false}
2022-04-27 15:36:36 +02:00
height={19}
width={40}
ref={ref}
2022-05-10 15:22:01 +02:00
disabled={typeof disabled === 'function' ? disabled(id) : disabled} />
} />
</AbstractFormItem>
);
};