fix(ToggleSwitch): selected option slider left offset
This commit is contained in:
parent
732367e65c
commit
68a38e7359
2 changed files with 23 additions and 33 deletions
|
@ -1,10 +1,13 @@
|
||||||
import React, { useRef } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import s0 from 'c/ToggleSwitch.module.scss';
|
import s0 from 'c/ToggleSwitch.module.scss';
|
||||||
|
|
||||||
function ToggleSwitch2({ options, value, name, onChange }) {
|
function ToggleSwitch({ options, value, name, onChange }) {
|
||||||
const idxRef = useRef(null);
|
const idxSelected = useMemo(() => options.map(o => o.value).indexOf(value), [
|
||||||
|
options,
|
||||||
|
value
|
||||||
|
]);
|
||||||
const w = (100 / options.length).toPrecision(3);
|
const w = (100 / options.length).toPrecision(3);
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -13,11 +16,10 @@ function ToggleSwitch2({ options, value, name, onChange }) {
|
||||||
className={s0.slider}
|
className={s0.slider}
|
||||||
style={{
|
style={{
|
||||||
width: w + '%',
|
width: w + '%',
|
||||||
left: idxRef.current * w + '%'
|
left: idxSelected * w + '%'
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{options.map((o, idx) => {
|
{options.map((o, idx) => {
|
||||||
if (value === o.value) idxRef.current = idx;
|
|
||||||
const id = `${name}-${o.label}`;
|
const id = `${name}-${o.label}`;
|
||||||
let className = idx === 0 ? '' : 'border-left';
|
let className = idx === 0 ? '' : 'border-left';
|
||||||
return (
|
return (
|
||||||
|
@ -39,11 +41,11 @@ function ToggleSwitch2({ options, value, name, onChange }) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleSwitch2.propTypes = {
|
ToggleSwitch.propTypes = {
|
||||||
options: PropTypes.array,
|
options: PropTypes.array,
|
||||||
value: PropTypes.string,
|
value: PropTypes.string,
|
||||||
name: PropTypes.string,
|
name: PropTypes.string,
|
||||||
onChange: PropTypes.func
|
onChange: PropTypes.func
|
||||||
};
|
};
|
||||||
|
|
||||||
export default React.memo(ToggleSwitch2);
|
export default React.memo(ToggleSwitch);
|
||||||
|
|
40
yarn.lock
40
yarn.lock
|
@ -723,10 +723,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.12.0"
|
regenerator-runtime "^0.12.0"
|
||||||
|
|
||||||
"@babel/runtime@^7.0.0":
|
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.5":
|
||||||
version "7.4.2"
|
version "7.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc"
|
||||||
integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA==
|
integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.13.2"
|
regenerator-runtime "^0.13.2"
|
||||||
|
|
||||||
|
@ -737,13 +737,6 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.12.0"
|
regenerator-runtime "^0.12.0"
|
||||||
|
|
||||||
"@babel/runtime@^7.1.5":
|
|
||||||
version "7.4.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc"
|
|
||||||
integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==
|
|
||||||
dependencies:
|
|
||||||
regenerator-runtime "^0.13.2"
|
|
||||||
|
|
||||||
"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
|
"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
|
||||||
version "7.4.0"
|
version "7.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
|
||||||
|
@ -2931,9 +2924,9 @@ eslint-module-utils@^2.3.0:
|
||||||
pkg-dir "^2.0.0"
|
pkg-dir "^2.0.0"
|
||||||
|
|
||||||
eslint-plugin-flowtype@^3.4.2:
|
eslint-plugin-flowtype@^3.4.2:
|
||||||
version "3.6.0"
|
version "3.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.6.0.tgz#375a3d77f5dbd3a0d2c3554fadcd1d0735a6eb2e"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.6.1.tgz#99cfa3a30e8a2c9ea40c507b25ea9a320af4ceae"
|
||||||
integrity sha512-7wRfgzXteB9jswXreGG64FlOdscV4z4hIW2lS+mC5t1K2QQkUDh7A+95dB4nU7io8zIOq4cRpftF+41xvMCtiA==
|
integrity sha512-VVuPKb5kgWFhxCkAMpL5wi44AK+4nkxa3XXZVa2PKf00n4INNbdKmZC0tT8qeNTHoDPYMXbqak4tGC9YtIOqGw==
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.17.11"
|
lodash "^4.17.11"
|
||||||
|
|
||||||
|
@ -4976,12 +4969,7 @@ mem@^4.0.0:
|
||||||
mimic-fn "^2.0.0"
|
mimic-fn "^2.0.0"
|
||||||
p-is-promise "^2.0.0"
|
p-is-promise "^2.0.0"
|
||||||
|
|
||||||
"memoize-one@>=3.1.1 <6":
|
"memoize-one@>=3.1.1 <6", memoize-one@^5.0.0:
|
||||||
version "5.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.0.tgz#d55007dffefb8de7546659a1722a5d42e128286e"
|
|
||||||
integrity sha512-7g0+ejkOaI9w5x6LvQwmj68kUj6rxROywPSCqmclG/HBacmFnZqhVscQ8kovkn9FBCNJmOz6SY42+jnvZzDWdw==
|
|
||||||
|
|
||||||
memoize-one@^5.0.0:
|
|
||||||
version "5.0.4"
|
version "5.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.4.tgz#005928aced5c43d890a4dfab18ca908b0ec92cbc"
|
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.4.tgz#005928aced5c43d890a4dfab18ca908b0ec92cbc"
|
||||||
integrity sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==
|
integrity sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==
|
||||||
|
@ -6695,9 +6683,9 @@ react-router@5.0.0:
|
||||||
tiny-warning "^1.0.0"
|
tiny-warning "^1.0.0"
|
||||||
|
|
||||||
react-window@^1.5.0:
|
react-window@^1.5.0:
|
||||||
version "1.7.1"
|
version "1.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.7.1.tgz#c1db640415b97b85bc0a1c66eb82dadabca39b86"
|
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.7.2.tgz#2e1528d5b9991e863302bfe74cb52d0ff7082e78"
|
||||||
integrity sha512-y4/Qc98agCtHulpeI5b6K2Hh8J7TeZIfvccBVesfqOFx4CS+TSUpnJl1/ipeXzhfvzPwvVEmaU/VosQ6O5VhTg==
|
integrity sha512-GK1gxSeGPLBDSQhPmYhCYrtf5MkGK8rwVjeyPgxZLvLRw0wvyzKZPMc/jfemiGNGfuJyW3kx1z6QR9uK7r2XdA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.0.0"
|
"@babel/runtime" "^7.0.0"
|
||||||
memoize-one ">=3.1.1 <6"
|
memoize-one ">=3.1.1 <6"
|
||||||
|
@ -8256,9 +8244,9 @@ watchpack@^1.5.0:
|
||||||
neo-async "^2.5.0"
|
neo-async "^2.5.0"
|
||||||
|
|
||||||
webpack-bundle-analyzer@^3.0.3:
|
webpack-bundle-analyzer@^3.0.3:
|
||||||
version "3.2.0"
|
version "3.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.2.0.tgz#0630d298e88511d036d7c823705d7b852593d5c4"
|
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f"
|
||||||
integrity sha512-F6bwrg5TBb9HsHZCltH1L5F091ELQ+/i67MEH7jWkYRvVp53eONNneGaIXSdOQUiXUyd3RnkITWRfWvSVQGnZQ==
|
integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn "^6.0.7"
|
acorn "^6.0.7"
|
||||||
acorn-walk "^6.1.1"
|
acorn-walk "^6.1.1"
|
||||||
|
|
Loading…
Reference in a new issue