Create toggle component

[MAILPOET-2738]
This commit is contained in:
Pavel Dohnal
2020-03-17 09:33:22 +01:00
committed by Veljko V
parent f9aca4fe57
commit c77a9f3137
4 changed files with 118 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
input[type=checkbox].mailpoet-toggle {
display: none;
// add default box-sizing for this scope
&,
&:after,
&:before,
*,
*:after,
*:before,
+ .mailpoet-toggle-button {
box-sizing: border-box;
&::selection {
background: none;
}
}
+ .mailpoet-toggle-button {
cursor: pointer;
display: block;
height: 24px;
outline: 0;
position: relative;
user-select: none;
width: 40px;
&:after,
&:before {
content: '';
display: block;
height: 22px;
position: relative;
width: 22px;
}
&:after {
left: -3px;
top: -3px;
}
&:before {
display: none;
}
}
&:checked + .mailpoet-toggle-button:after {
left: 14px;
}
}
$very-light-blue: #e5e9f8;
$apricot: #f5a278;
$pale-grey: #fdfdff;
// themes
.mailpoet-toggle-light {
+ .mailpoet-toggle-button {
background: $pale-grey;
border: solid 1px $very-light-blue;
border-radius: 2em;
padding: 2px;
transition: all .4s ease;
&:after {
background-color: #fff;
border: solid 1px $very-light-blue;
border-radius: 50%;
box-shadow: 0 4px 8px 0 rgba(220, 220, 220, .5);
transition: all .2s ease;
}
}
&:checked + .mailpoet-toggle-button {
background: $apricot;
border: solid 1px $apricot;
&:after {
border: solid 1px $apricot;
}
}
}

View File

@@ -30,6 +30,7 @@
@import 'components/reviewRequest'; @import 'components/reviewRequest';
@import 'components/stats'; @import 'components/stats';
@import 'components/importExport'; @import 'components/importExport';
@import 'components/toggle';
@import 'components/newsletterEditor/mixins/transitions'; @import 'components/newsletterEditor/mixins/transitions';
@import 'components/newsletterEditor/variables'; @import 'components/newsletterEditor/variables';
@import 'components/newsletterEditor/common'; @import 'components/newsletterEditor/common';

View File

@@ -0,0 +1,28 @@
import React from 'react';
type Props = {
checked: boolean,
onCheck: (checked: boolean) => void,
name?: string,
};
const Toggle = ({ checked, onCheck, name }: Props) => (
<>
<input
className="mailpoet-toggle mailpoet-toggle-light"
id={`mailpoet-toggle-${name}`}
type="checkbox"
checked={checked}
onChange={(event) => onCheck(event.target.checked)}
key={`toggle-input-${name}`}
/>
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
<label
className="mailpoet-toggle-button"
htmlFor={`mailpoet-toggle-${name}`}
key={`toggle-label-${name}`}
/>
</>
);
export default Toggle;

View File

@@ -5,9 +5,11 @@ import { useSelect } from '@wordpress/data';
import FormPlacementOption from './form_placement_option'; import FormPlacementOption from './form_placement_option';
import Icon from './below_pages_icon'; import Icon from './below_pages_icon';
import Modal from '../../../../common/modal/modal.jsx'; import Modal from '../../../../common/modal/modal.jsx';
import Toggle from '../../../../common/toggle';
const BelowPages = () => { const BelowPages = () => {
const [displaySettings, setDisplaySettings] = useState(false); const [displaySettings, setDisplaySettings] = useState(false);
const [test, setTest] = useState(true); // TODO debug only, remove
const placeFormBellowAllPages = useSelect( const placeFormBellowAllPages = useSelect(
(select) => select('mailpoet-form-editor').placeFormBellowAllPages(), (select) => select('mailpoet-form-editor').placeFormBellowAllPages(),
@@ -37,6 +39,11 @@ const BelowPages = () => {
<p> <p>
{MailPoet.I18n.t('placeFormBellowPagesDescription')} {MailPoet.I18n.t('placeFormBellowPagesDescription')}
</p> </p>
<Toggle
name="xz"
checked={test}
onCheck={setTest}
/>
</Modal> </Modal>
) )
} }