Create toggle component
[MAILPOET-2738]
This commit is contained in:
82
assets/css/src/components/_toggle.scss
Normal file
82
assets/css/src/components/_toggle.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -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';
|
||||||
|
28
assets/js/src/common/toggle.tsx
Normal file
28
assets/js/src/common/toggle.tsx
Normal 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;
|
@@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user