Replace Toggle with a custom component
This commit is contained in:
parent
5720d396fc
commit
541d48c5ab
|
@ -1,13 +1,37 @@
|
||||||
import React from 'react';
|
import clsx from 'clsx';
|
||||||
import ReactToggle, { ToggleProps } from 'react-toggle';
|
import React, { useRef } from 'react';
|
||||||
|
|
||||||
|
interface IToggle extends Pick<React.InputHTMLAttributes<HTMLInputElement>, 'id' | 'checked' | 'onChange' | 'required'> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/** A glorified checkbox. Wrapper around react-toggle. */
|
/** A glorified checkbox. Wrapper around react-toggle. */
|
||||||
const Toggle: React.FC<ToggleProps> = ({ icons = false, ...rest }) => {
|
const Toggle: React.FC<IToggle> = ({ id, checked, onChange, required }) => {
|
||||||
|
const input = useRef<HTMLInputElement>(null);
|
||||||
|
|
||||||
|
const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
input.current?.focus();
|
||||||
|
input.current?.click();
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactToggle
|
<button
|
||||||
icons={icons}
|
className='w-9 rounded-full bg-gray-500 p-0.5'
|
||||||
{...rest}
|
onClick={handleClick}
|
||||||
|
>
|
||||||
|
<div className={clsx('h-4.5 w-4.5 rounded-full bg-white transition-transform', { 'translate-x-3': checked })} />
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={id}
|
||||||
|
ref={input}
|
||||||
|
type='checkbox'
|
||||||
|
className='sr-only'
|
||||||
|
checked={checked}
|
||||||
|
onChange={onChange}
|
||||||
|
required={required}
|
||||||
/>
|
/>
|
||||||
|
</button>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,6 @@ const FilterField: StreamfieldComponent<IFilterField> = ({ value, onChange }) =>
|
||||||
<Toggle
|
<Toggle
|
||||||
checked={value.whole_word}
|
checked={value.whole_word}
|
||||||
onChange={handleChange('whole_word')}
|
onChange={handleChange('whole_word')}
|
||||||
icons={false}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Text tag='span' theme='muted'>
|
<Text tag='span' theme='muted'>
|
||||||
|
@ -212,28 +211,24 @@ const EditFilter: React.FC<IEditFilter> = ({ params }) => {
|
||||||
<List>
|
<List>
|
||||||
<ListItem label={intl.formatMessage(messages.home_timeline)}>
|
<ListItem label={intl.formatMessage(messages.home_timeline)}>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='home_timeline'
|
|
||||||
checked={homeTimeline}
|
checked={homeTimeline}
|
||||||
onChange={({ target }) => setHomeTimeline(target.checked)}
|
onChange={({ target }) => setHomeTimeline(target.checked)}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem label={intl.formatMessage(messages.public_timeline)}>
|
<ListItem label={intl.formatMessage(messages.public_timeline)}>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='public_timeline'
|
|
||||||
checked={publicTimeline}
|
checked={publicTimeline}
|
||||||
onChange={({ target }) => setPublicTimeline(target.checked)}
|
onChange={({ target }) => setPublicTimeline(target.checked)}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem label={intl.formatMessage(messages.notifications)}>
|
<ListItem label={intl.formatMessage(messages.notifications)}>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='notifications'
|
|
||||||
checked={notifications}
|
checked={notifications}
|
||||||
onChange={({ target }) => setNotifications(target.checked)}
|
onChange={({ target }) => setNotifications(target.checked)}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem label={intl.formatMessage(messages.conversations)}>
|
<ListItem label={intl.formatMessage(messages.conversations)}>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='conversations'
|
|
||||||
checked={conversations}
|
checked={conversations}
|
||||||
onChange={({ target }) => setConversations(target.checked)}
|
onChange={({ target }) => setConversations(target.checked)}
|
||||||
/>
|
/>
|
||||||
|
@ -241,7 +236,6 @@ const EditFilter: React.FC<IEditFilter> = ({ params }) => {
|
||||||
{features.filtersV2 && (
|
{features.filtersV2 && (
|
||||||
<ListItem label={intl.formatMessage(messages.accounts)}>
|
<ListItem label={intl.formatMessage(messages.accounts)}>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='accounts'
|
|
||||||
checked={accounts}
|
checked={accounts}
|
||||||
onChange={({ target }) => setAccounts(target.checked)}
|
onChange={({ target }) => setAccounts(target.checked)}
|
||||||
/>
|
/>
|
||||||
|
@ -255,7 +249,6 @@ const EditFilter: React.FC<IEditFilter> = ({ params }) => {
|
||||||
hint={intl.formatMessage(features.filtersV2 ? messages.hide_hint : messages.drop_hint)}
|
hint={intl.formatMessage(features.filtersV2 ? messages.hide_hint : messages.drop_hint)}
|
||||||
>
|
>
|
||||||
<Toggle
|
<Toggle
|
||||||
name='hide'
|
|
||||||
checked={hide}
|
checked={hide}
|
||||||
onChange={({ target }) => setHide(target.checked)}
|
onChange={({ target }) => setHide(target.checked)}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -98,7 +98,6 @@ const EditAnnouncementModal: React.FC<IEditAnnouncementModal> = ({ onClose }) =>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<HStack alignItems='center' space={2}>
|
<HStack alignItems='center' space={2}>
|
||||||
<Toggle
|
<Toggle
|
||||||
icons={false}
|
|
||||||
checked={allDay}
|
checked={allDay}
|
||||||
onChange={onChangeAllDay}
|
onChange={onChangeAllDay}
|
||||||
/>
|
/>
|
||||||
|
|
Loading…
Reference in New Issue