         (st/emit! (dw/decrease-zoom)))
       (scroll/scroll-to-point dom mouse-point scroll-position))))
 
-(defn- workspace-render
+(mx/defcs workspace
+  {:did-remount workspace-did-remount
+   :will-mount workspace-will-mount
+   :will-unmount workspace-will-unmount
+   :did-mount workspace-did-mount
+   :mixins [mx/static
+            mx/reactive
+            shortcuts-mixin
+            (mx/local)]}
   [own]
   (let [{:keys [flags zoom page] :as workspace} (mx/react wb/workspace-ref)
         left-sidebar? (not (empty? (keep flags [:layers :sitemap

            [uxbox.main.data.pages :as udp]
            [uxbox.main.data.history :as udh]
            [uxbox.main.data.undo :as udu]
            [uxbox.util.dom :as dom]
            [uxbox.util.geom.point :as gpt]
            [uxbox.util.data :refer (classnames)]
            [uxbox.util.mixins :as mx :include-macros true]
            [uxbox.main.ui.messages :as uum]
            [uxbox.main.ui.confirm]
            [uxbox.main.ui.workspace.images]

;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) 2015-2017 Andrey Antukh <niwi@niwi.nz>
;; Copyright (c) 2015-2017 Juan de la Cruz <delacruzgarciajuan@gmail.com>

(ns uxbox.main.ui.workspace
  (:require [beicon.core :as rx]
            [uxbox.main.constants :as c]
            [potok.core :as ptk]
            [uxbox.store :as st]
