diff --git a/package-lock.json b/package-lock.json index 014aa23..dd28697 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8015,6 +8015,14 @@ "side-channel": "^1.0.2" } }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -13442,6 +13450,16 @@ "workbox-webpack-plugin": "5.1.4" } }, + "react-sortable-hoc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-sortable-hoc/-/react-sortable-hoc-2.0.0.tgz", + "integrity": "sha512-JZUw7hBsAHXK7PTyErJyI7SopSBFRcFHDjWW5SWjcugY0i6iH7f+eJkY8cJmGMlZ1C9xz1J3Vjz0plFpavVeRg==", + "requires": { + "@babel/runtime": "^7.2.0", + "invariant": "^2.2.4", + "prop-types": "^15.5.7" + } + }, "react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", diff --git a/package.json b/package.json index 80dab34..f1df699 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "4.0.0", + "react-sortable-hoc": "^2.0.0", "react-use": "^15.3.4", "redux": "^4.0.5", "styled-components": "^5.2.1", diff --git a/src/components/main-app/sidebar-wrapper/colors-input.js b/src/components/main-app/sidebar-wrapper/colors-input.js index e95ce26..d3995f8 100644 --- a/src/components/main-app/sidebar-wrapper/colors-input.js +++ b/src/components/main-app/sidebar-wrapper/colors-input.js @@ -1,4 +1,10 @@ import React, { useState, Fragment } from 'react'; +import { + SortableContainer, + SortableElement, + arrayMove, +} from 'react-sortable-hoc'; +// TODO: remove array-move library import { StringParam, useQueryParam } from 'use-query-params'; import { URL_COLORS, URL_UPDATE_PUSH } from 'config'; import { ReactComponent as CloseSVG } from 'assets/svg/close.svg'; @@ -9,6 +15,7 @@ const popover = { position: 'absolute', zIndex: '3', }; + const cover = { position: 'fixed', top: '0px', @@ -25,6 +32,9 @@ const deleteColor = (key, colorsArray, onChangeColor) => { } }; +const SortableItem = SortableElement(({ children }) => children); +const SortableList = SortableContainer(({ children }) => children); + export default function ColorsInput() { const [colors, onChangeColor] = useQueryParam(URL_COLORS, StringParam); const [itemColorStatus, setItemColorStatus] = useState(null); @@ -44,6 +54,11 @@ export default function ColorsInput() { onChangeColor(getColorsString(tempColorsArray), URL_UPDATE_PUSH); }; + const sortColor = ({ oldIndex, newIndex }) => { + let tempColorsArray = arrayMove(colorsArray, oldIndex, newIndex); + onChangeColor(getColorsString(tempColorsArray), URL_UPDATE_PUSH); + }; + return ( <>