Browse Source

Use dnd-kit instead of beautiful-dnd

Tienson Qin 2 years ago
parent
commit
b44e4d7d1f

+ 2 - 1
package.json

@@ -90,6 +90,8 @@
         "@capacitor/status-bar": "^5.0.0",
         "@capawesome/capacitor-background-task": "^5.0.0",
         "@capgo/capacitor-navigation-bar": "^6.0.0",
+        "@dnd-kit/core": "^6.0.8",
+        "@dnd-kit/sortable": "^7.0.2",
         "@emoji-mart/data": "^1.1.2",
         "@emoji-mart/react": "^1.1.1",
         "@excalidraw/excalidraw": "0.15.3",
@@ -137,7 +139,6 @@
         "pixi.js": "6.2.0",
         "posthog-js": "1.10.2",
         "react": "17.0.2",
-        "react-beautiful-dnd": "^13.1.1",
         "react-dom": "17.0.2",
         "react-grid-layout": "0.16.6",
         "react-intersection-observer": "^9.3.5",

+ 5 - 8
src/main/frontend/components/container.cljs

@@ -122,16 +122,13 @@
                           (let [name (:block/name e)
                                 icon (get-page-icon e)]
                             {:id (str (:db/id e))
-                             :content (page-name name icon false)}))
+                             :value name
+                             :content [:li.favorite-item (page-name name icon false)]}))
                         favorite-entities)]
          (dnd-component/items favorites
-                              {:droppable-id "favorites-droppable"
-                               :on-drag-end (fn [{:keys [source destination]}]
-                                              (page-handler/reorder-favorites!
-                                               {:target (:index source)
-                                                :to (:index destination)}))
-                               :parent-node :ul.favorites.text-sm
-                               :child-node :li.favorite-item}))))))
+                              {:on-drag-end (fn [favorites]
+                                              (page-handler/reorder-favorites! favorites))
+                               :parent-node :ul.favorites.text-sm}))))))
 
 (rum/defc recent-pages < rum/reactive db-mixins/query
   [t]

+ 98 - 46
src/main/frontend/components/dnd.cljs

@@ -1,53 +1,105 @@
 (ns frontend.components.dnd
-  (:require ["react-beautiful-dnd" :refer [Droppable Draggable DragDropContext]]
-            [frontend.rum :as r]
-            [rum.core :as rum]
+  (:require [rum.core :as rum]
             [cljs-bean.core :as bean]
-            [medley.core :as medley]))
+            ["@dnd-kit/sortable" :refer [useSortable arrayMove SortableContext sortableKeyboardCoordinates verticalListSortingStrategy] :as sortable]
+            ["@dnd-kit/utilities" :refer [CSS]]
+            ["@dnd-kit/core" :refer [DndContext closestCenter KeyboardSensor PointerSensor useSensor useSensors DragOverlay]]
+            ["react-dom" :refer [createPortal]]
+            [frontend.rum :as r]
+            [frontend.util :as util]))
 
-(def droppable (r/adapt-class Droppable))
-(def draggable (r/adapt-class Draggable))
-(def drag-drop-context (r/adapt-class DragDropContext))
+(defn- reorder-items
+  "Reorder items after moving 'target' to 'to'.
+  Both `target` and `to` are indices."
+  [items {:keys [target to]}]
+  (let [items (vec items)]
+    (if (and target to (not= target to))
+      (let [result (->>
+                    (if (< target to)
+                      [(util/safe-subvec items 0 target)
+                       (util/safe-subvec items (inc target) (inc to))
+                       [(nth items target)]
+                       (util/safe-subvec items (inc to) (count items))]
+                      [(util/safe-subvec items 0 to)
+                       [(nth items target)]
+                       (util/safe-subvec items to target)
+                       (util/safe-subvec items (inc target) (count items))])
+                    (apply concat)
+                    (vec))]
+        (if (= (count items) (count result))
+          result
+          (do
+            (js/console.error "Reorder failed:")
+            (prn :reorder-data {:items items
+                                :target target
+                                :to to})
+            items)))
+      items)))
 
-(rum/defc drag-content
-  [item provided _snapshot opts]
-  (let [child-opts (merge {:ref (.-innerRef provided)}
-                          (bean/->clj (.-draggableProps provided))
-                          (bean/->clj (.-dragHandleProps provided))
-                          (:child-opts opts))]
-    [(:child-node opts)
-     (assoc child-opts :key (str (:droppable-id opts) "-" (:id item)))
-     (:content item)]))
+(def dnd-context (r/adapt-class DndContext))
+(def sortable-context (r/adapt-class SortableContext))
+(def drag-overlay (r/adapt-class DragOverlay))
 
-(rum/defc drop-content
-  [col provided _snapshot opts]
-  (let [parent-opts (merge {:ref (.-innerRef provided)}
-                           (bean/->clj (.-droppableProps provided))
-                           (:parent-opts opts))]
-    [(:parent-node opts)
-     parent-opts
-     (for [[idx item] (medley/indexed col)]
-       (draggable
-        {:draggableId (str (:id item))
-         :key (str (:id item))
-         :index idx}
-        (fn [provided snapshot]
-          (drag-content item provided snapshot opts))))
-     (.-placeholder provided)]))
+(rum/defc sortable-item
+  [props children]
+  (let [sortable (useSortable #js {:id (:id props)})
+        attributes (.-attributes sortable)
+        listeners (.-listeners sortable)
+        set-node-ref (.-setNodeRef sortable)
+        transform (.-transform sortable)
+        transition (.-transition sortable)
+        style #js {:transform ((.-toString (.-Transform CSS)) transform)
+                   :transition transition}]
+    [:div (merge
+           {:ref set-node-ref
+            :style style}
+           (bean/->clj attributes)
+           (bean/->clj listeners))
+     children]))
 
 (rum/defc items
-  [col {:keys [droppable-id on-drag-end
-               parent-node child-node
-               parent-opts child-opts]
-        :or {parent-node :div
-             child-node :div}
-        :as opts}]
-  (drag-drop-context
-   {:on-drag-end (fn [result-js]
-                   (let [result (bean/->clj result-js)]
-                     (on-drag-end result)))}
-
-   (droppable
-    {:droppableId droppable-id}
-    (fn [provided snapshot]
-      (drop-content col provided snapshot opts)))))
+  [col {:keys [on-drag-end parent-node]}]
+  (let [[items set-items] (rum/use-state col)
+        [active-id set-active-id] (rum/use-state nil)
+        sensors (useSensors (useSensor PointerSensor)
+                            (useSensor KeyboardSensor #js {:coordinateGetter sortableKeyboardCoordinates}))
+        ids (map :id col)
+        dnd-opts {:sensors sensors
+                  :collisionDetection closestCenter
+                  :onDragStart (fn [event]
+                                 (set-active-id (.-id (.-active event))))
+                  :onDragEnd (fn [event]
+                               (let [active-id (.-id (.-active event))
+                                     over-id (.-id (.-over event))]
+                                 (when-not (= active-id over-id)
+                                   (let [old-index (.indexOf ids active-id)
+                                         new-index (.indexOf ids over-id)
+                                         new-items (reorder-items items {:target old-index
+                                                                         :to new-index})]
+                                     (set-items new-items)
+                                     (when (fn? on-drag-end)
+                                       (on-drag-end (mapv :value new-items)))))
+                                 (set-active-id nil)))}
+        sortable-opts {:items items
+                       :strategy verticalListSortingStrategy}
+        children (for [item items]
+                   (let [id (str (:id item))]
+                     (rum/with-key
+                       (sortable-item {:key id
+                                       :id id}
+                                      (:content item))
+                       id)))
+        children' (if parent-node
+                    [parent-node children]
+                    children)]
+    (dnd-context
+     dnd-opts
+     (sortable-context sortable-opts children')
+     ;; (createPortal
+     ;;  (drag-overlay
+     ;;   (when active-id
+     ;;     (sortable-item {:key active-id
+     ;;                     :id active-id}
+     ;;                    (:content (first (filter (fn [{:keys [id]}] (= id active-id)) items))))))
+     ;;  js/document.body)
+     )))

+ 16 - 24
src/main/frontend/components/property.cljs

@@ -11,7 +11,6 @@
             [frontend.handler.db-based.property :as db-property-handler]
             [frontend.handler.notification :as notification]
             [frontend.handler.property :as property-handler]
-            [frontend.handler.reorder :as reorder-handler]
             [frontend.handler.property.util :as pu]
             [frontend.mixins :as mixins]
             [frontend.modules.shortcut.core :as shortcut]
@@ -246,20 +245,17 @@
      (let [choices (mapv (fn [id]
                            (let [item (assoc (get values id) :id id)]
                              {:id (str id)
-                              :content (choice-item-content property item values order *property-schema *property-name dropdown-opts)}))
+                              :value id
+                              :content [:li
+                                        (choice-item-content property item values order *property-schema *property-name dropdown-opts)]}))
                          order)]
        (dnd/items choices
-                  {:droppable-id "enum-droppable"
-                   :on-drag-end (fn [{:keys [source destination]}]
-                                  (let [opts {:target (:index source)
-                                              :to (:index destination)}
-                                        new-order (reorder-handler/reorder-items order opts)]
-                                    (when (seq new-order)
-                                      (swap! *property-schema assoc :enum-config {:values values
-                                                                                  :order new-order})
-                                      (update-property! property @*property-name @*property-schema))))
-                   :parent-node :ul.list-none
-                   :child-node :li}))
+                  {:on-drag-end (fn [new-order]
+                                  (when (seq new-order)
+                                    (swap! *property-schema assoc :enum-config {:values values
+                                                                                :order new-order})
+                                    (update-property! property @*property-name @*property-schema)))
+                   :parent-node :ul.list-none}))
      (ui/dropdown
       (fn [{:keys [toggle-fn]}]
         [:a.fade-link.flex.flex-row.items-center.gap-1.leading-8 {:on-click toggle-fn}
@@ -671,19 +667,15 @@
       (if class?
         (let [choices (map (fn [[k v]]
                              {:id (str k)
-                              :content (property-cp block k v opts)}) properties)]
+                              :content [:li
+                                        (property-cp block k v opts)]}) properties)]
           (dnd/items choices
-                     {:droppable-id (str "class-schema-" (:db/id block))
-                      :on-drag-end (fn [{:keys [source destination]}]
-                                     (let [opts {:target (:index source)
-                                                 :to (:index destination)}
-                                           properties' (reorder-handler/reorder-items (map first properties) opts)
-                                           schema (assoc (:block/schema block)
-                                                         :properties properties')]
-                                       (when (seq properties')
+                     {:on-drag-end (fn [properties]
+                                     (let [schema (assoc (:block/schema block)
+                                                         :properties properties)]
+                                       (when (seq properties)
                                          (property-handler/class-set-schema! (state/get-current-repo) (:block/uuid block) schema))))
-                      :parent-node :ul.list-none
-                      :child-node :li}))
+                      :parent-node :ul.list-none}))
         (for [[k v] properties]
           (property-cp block k v opts))))))
 

+ 2 - 8
src/main/frontend/handler/page.cljs

@@ -10,7 +10,6 @@
             [frontend.fs :as fs]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common.page :as page-common-handler]
-            [frontend.handler.reorder :as reorder-handler]
             [frontend.handler.config :as config-handler]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.plugin :as plugin-handler]
@@ -77,13 +76,8 @@
      (file-page-handler/rename! old-name new-name redirect?))))
 
 (defn reorder-favorites!
-  [opts]
-  (let [favorites (:favorites (state/get-config))
-        favorites' (->> (reorder-handler/reorder-items (:favorites (state/get-config))
-                                                       opts)
-                        (mapv util/safe-page-name-sanity-lc))]
-    (when (= (count favorites) (count favorites'))
-      (config-handler/set-config! :favorites favorites'))))
+  [favorites]
+  (config-handler/set-config! :favorites favorites))
 
 (defn has-more-journals?
   []

+ 0 - 31
src/main/frontend/handler/reorder.cljs

@@ -1,31 +0,0 @@
-(ns frontend.handler.reorder
-  "Reorder items"
-  (:require [frontend.util :as util]))
-
-(defn reorder-items
-  "Reorder items after moving 'target' to 'to'.
-  Both `target` and `to` are indices."
-  [items {:keys [target to]}]
-  (let [items (vec items)]
-    (if (and target to (not= target to))
-      (let [result (->>
-                    (if (< target to)
-                      [(util/safe-subvec items 0 target)
-                       (util/safe-subvec items (inc target) (inc to))
-                       [(nth items target)]
-                       (util/safe-subvec items (inc to) (count items))]
-                      [(util/safe-subvec items 0 to)
-                       [(nth items target)]
-                       (util/safe-subvec items to target)
-                       (util/safe-subvec items (inc target) (count items))])
-                    (apply concat)
-                    (vec))]
-        (if (= (count items) (count result))
-          result
-          (do
-            (js/console.error "Reorder failed:")
-            (prn :reorder-data {:items items
-                                :target target
-                                :to to})
-            items)))
-      items)))

+ 34 - 111
yarn.lock

@@ -177,13 +177,6 @@
   dependencies:
     regenerator-runtime "^0.14.0"
 
-"@babel/runtime@^7.15.4", "@babel/runtime@^7.9.2":
-  version "7.23.1"
-  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d"
-  integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==
-  dependencies:
-    regenerator-runtime "^0.14.0"
-
 "@babel/template@^7.22.15", "@babel/template@^7.22.5":
   version "7.22.15"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
@@ -313,6 +306,37 @@
   resolved "https://registry.yarnpkg.com/@capgo/capacitor-navigation-bar/-/capacitor-navigation-bar-6.0.6.tgz#e2c8d346298abf470d5a4583059fca34d4d4ff94"
   integrity sha512-X0w0BFB07vyb2BipWaok8itPgn6inR5zuZIJgZGhsJXYmmyVAwsTbSRZZluIrDbMzd3LHD4bfzbzFzU02tfG3g==
 
+"@dnd-kit/accessibility@^3.0.0":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz#3ccbefdfca595b0a23a5dc57d3de96bc6935641c"
+  integrity sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==
+  dependencies:
+    tslib "^2.0.0"
+
+"@dnd-kit/core@^6.0.8":
+  version "6.0.8"
+  resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005"
+  integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==
+  dependencies:
+    "@dnd-kit/accessibility" "^3.0.0"
+    "@dnd-kit/utilities" "^3.2.1"
+    tslib "^2.0.0"
+
+"@dnd-kit/sortable@^7.0.2":
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c"
+  integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==
+  dependencies:
+    "@dnd-kit/utilities" "^3.2.0"
+    tslib "^2.0.0"
+
+"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1":
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.1.tgz#53f9e2016fd2506ec49e404c289392cfff30332a"
+  integrity sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==
+  dependencies:
+    tslib "^2.0.0"
+
 "@electron/get@^2.0.0":
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
@@ -941,14 +965,6 @@
     "@types/vinyl-fs" "*"
     chokidar "^3.3.1"
 
-"@types/hoist-non-react-statics@^3.3.0":
-  version "3.3.2"
-  resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a"
-  integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw==
-  dependencies:
-    "@types/react" "*"
-    hoist-non-react-statics "^3.3.0"
-
 "@types/http-cache-semantics@*":
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41"
@@ -998,30 +1014,6 @@
   resolved "https://registry.yarnpkg.com/@types/picomatch/-/picomatch-2.3.1.tgz#ebb5c749fa246b78b9fe3cea7656c340e605f759"
   integrity sha512-Ejq9/KBsgfZZafGGdr9R7011EZhDzcAEMjoBl2W4eGNcZGhsUFMbUA0D+sHxjtAA1ldk3e6wapzXeyp0NSuM8Q==
 
-"@types/prop-types@*":
-  version "15.7.8"
-  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.8.tgz#805eae6e8f41bd19e88917d2ea200dc992f405d3"
-  integrity sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==
-
-"@types/react-redux@^7.1.20":
-  version "7.1.27"
-  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.27.tgz#1afb31f7354bf787e162c10ff3fa19bafa9e6b57"
-  integrity sha512-xj7d9z32p1K/eBmO+OEy+qfaWXtcPlN8f1Xk3Ne0p/ZRQ867RI5bQ/bpBtxbqU1AHNhKJSgGvld/P2myU2uYkg==
-  dependencies:
-    "@types/hoist-non-react-statics" "^3.3.0"
-    "@types/react" "*"
-    hoist-non-react-statics "^3.3.0"
-    redux "^4.0.0"
-
-"@types/react@*":
-  version "18.2.24"
-  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.24.tgz#3c7d68c02e0205a472f04abe4a0c1df35d995c05"
-  integrity sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==
-  dependencies:
-    "@types/prop-types" "*"
-    "@types/scheduler" "*"
-    csstype "^3.0.2"
-
 "@types/responselike@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
@@ -1029,11 +1021,6 @@
   dependencies:
     "@types/node" "*"
 
-"@types/scheduler@*":
-  version "0.16.4"
-  resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.4.tgz#fedc3e5b15c26dc18faae96bf1317487cb3658cf"
-  integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==
-
 "@types/slice-ansi@^4.0.0":
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/@types/slice-ansi/-/slice-ansi-4.0.0.tgz#eb40dfbe3ac5c1de61f6bcb9ed471f54baa989d6"
@@ -2245,13 +2232,6 @@ crypto-browserify@^3.11.0:
     randombytes "^2.0.0"
     randomfill "^1.0.3"
 
-css-box-model@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1"
-  integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==
-  dependencies:
-    tiny-invariant "^1.0.6"
-
 css-declaration-sorter@^6.3.1:
   version "6.4.1"
   resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71"
@@ -3812,7 +3792,7 @@ hmac-drbg@^1.0.1:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.1"
 
-hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
+hoist-non-react-statics@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
   integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -4859,11 +4839,6 @@ mem@^4.0.0:
     mimic-fn "^2.0.0"
     p-is-promise "^2.0.0"
 
-memoize-one@^5.1.1:
-  version "5.2.1"
-  resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
-  integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
-
 memorystream@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
@@ -6266,7 +6241,7 @@ prompts@^2.4.2:
     kleur "^3.0.3"
     sisteransi "^1.0.5"
 
[email protected], prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
[email protected], prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1:
   version "15.8.1"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
   integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -6366,11 +6341,6 @@ quick-lru@^5.1.1:
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
   integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
 
-raf-schd@^4.0.2:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a"
-  integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==
-
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -6386,19 +6356,6 @@ randomfill@^1.0.3:
     randombytes "^2.0.5"
     safe-buffer "^5.1.0"
 
-react-beautiful-dnd@^13.1.1:
-  version "13.1.1"
-  resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2"
-  integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==
-  dependencies:
-    "@babel/runtime" "^7.9.2"
-    css-box-model "^1.2.0"
-    memoize-one "^5.1.1"
-    raf-schd "^4.0.2"
-    react-redux "^7.2.0"
-    redux "^4.0.4"
-    use-memo-one "^1.1.1"
-
 [email protected]:
   version "17.0.2"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
@@ -6445,23 +6402,6 @@ react-is@^16.13.1, react-is@^16.7.0:
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
 
-react-is@^17.0.2:
-  version "17.0.2"
-  resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
-  integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-
-react-redux@^7.2.0:
-  version "7.2.9"
-  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d"
-  integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==
-  dependencies:
-    "@babel/runtime" "^7.15.4"
-    "@types/react-redux" "^7.1.20"
-    hoist-non-react-statics "^3.3.2"
-    loose-envify "^1.4.0"
-    prop-types "^15.7.2"
-    react-is "^17.0.2"
-
 [email protected]:
   version "1.11.1"
   resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.11.1.tgz#02ca6850afa7a22c1b3e623e64aef71ee252af69"
@@ -6631,13 +6571,6 @@ redent@^3.0.0:
     indent-string "^4.0.0"
     strip-indent "^3.0.0"
 
-redux@^4.0.0, redux@^4.0.4:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197"
-  integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
-  dependencies:
-    "@babel/runtime" "^7.9.2"
-
 regenerator-runtime@^0.13.4:
   version "0.13.11"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
@@ -7698,11 +7631,6 @@ timers-browserify@^2.0.4:
   dependencies:
     setimmediate "^1.0.4"
 
-tiny-invariant@^1.0.6:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642"
-  integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==
-
 tiny-typed-emitter@^2.0.3:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5"
@@ -7811,7 +7739,7 @@ tslib@^1.9.3:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
-tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0:
+tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
   integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -8073,11 +8001,6 @@ use-latest@^1.0.0:
   dependencies:
     use-isomorphic-layout-effect "^1.1.1"
 
-use-memo-one@^1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99"
-  integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==
-
 use@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"