Replace Toggle with a custom component

environments/review-groups-tog-ycn9lp/deployments/3017
Alex Gleason 1 year ago
parent 5720d396fc
commit 541d48c5ab
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7

@ -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…
Cancel
Save