mirror of
https://github.com/penpot/penpot.git
synced 2026-08-01 19:06:18 +00:00
Add new implementation for create and delete project events.
For backend integration.
This commit is contained in:
parent
63bcae9dc1
commit
c4e8a881c1
@ -37,9 +37,17 @@
|
|||||||
:layout [sc/required sc/string]
|
:layout [sc/required sc/string]
|
||||||
:width [sc/required sc/integer]
|
:width [sc/required sc/integer]
|
||||||
:height [sc/required sc/integer]
|
:height [sc/required sc/integer]
|
||||||
|
:data [sc/required]
|
||||||
:project [sc/required sc/uuid]})
|
:project [sc/required sc/uuid]})
|
||||||
|
|
||||||
(def ^:static +update-page-schema+
|
(def ^:static +update-page-schema+
|
||||||
|
{:name [sc/required sc/string]
|
||||||
|
:width [sc/required sc/integer]
|
||||||
|
:height [sc/required sc/integer]
|
||||||
|
:data [sc/required]
|
||||||
|
:layout [sc/required sc/string]})
|
||||||
|
|
||||||
|
(def ^:static +update-page-metadata-schema+
|
||||||
{:name [sc/required sc/string]
|
{:name [sc/required sc/string]
|
||||||
:width [sc/required sc/integer]
|
:width [sc/required sc/integer]
|
||||||
:height [sc/required sc/integer]
|
:height [sc/required sc/integer]
|
||||||
@ -126,7 +134,7 @@
|
|||||||
|
|
||||||
(defn update-page
|
(defn update-page
|
||||||
[{:keys [id name width height layout] :as data}]
|
[{:keys [id name width height layout] :as data}]
|
||||||
(sc/validate! +create-page-schema+ data)
|
(sc/validate! +update-page-schema+ data)
|
||||||
(reify
|
(reify
|
||||||
rs/UpdateEvent
|
rs/UpdateEvent
|
||||||
(-apply-update [_ state]
|
(-apply-update [_ state]
|
||||||
@ -157,28 +165,35 @@
|
|||||||
(defn create-project
|
(defn create-project
|
||||||
[{:keys [name width height layout] :as data}]
|
[{:keys [name width height layout] :as data}]
|
||||||
(sc/validate! +project-schema+ data)
|
(sc/validate! +project-schema+ data)
|
||||||
(let [uuid (random-uuid)]
|
(letfn [(on-success [project]
|
||||||
|
(rx/of (rs/swap #(stpr/assoc-project % project))
|
||||||
|
(create-page (assoc data
|
||||||
|
:project (:id project)
|
||||||
|
:name "Page 1"
|
||||||
|
:data []))))
|
||||||
|
(on-failure [err]
|
||||||
|
(println "on-failure" err)
|
||||||
|
(uum/error (tr "errors.create-project")))]
|
||||||
(reify
|
(reify
|
||||||
rs/UpdateEvent
|
rs/WatchEvent
|
||||||
(-apply-update [_ state]
|
(-apply-watch [_ state]
|
||||||
(let [proj {:id uuid
|
(->> (rp/do :create/project {:name name})
|
||||||
:name name
|
(rx/from-promise)
|
||||||
:created (dt/now)}]
|
(rx/mapcat on-success)
|
||||||
(stpr/assoc-project state proj)))
|
(rx/catch on-failure))))))
|
||||||
|
|
||||||
rs/EffectEvent
|
|
||||||
(-apply-effect [_ state]
|
|
||||||
(rs/emit! (create-page {:name "Page 1"
|
|
||||||
:layout layout
|
|
||||||
:width width
|
|
||||||
:height height
|
|
||||||
:project uuid}))))))
|
|
||||||
(defn delete-project
|
(defn delete-project
|
||||||
[proj]
|
[proj]
|
||||||
(reify
|
(letfn [(on-success [_]
|
||||||
rs/UpdateEvent
|
(rs/swap #(stpr/dissoc-project % proj)))
|
||||||
(-apply-update [_ state]
|
(on-failure [e]
|
||||||
(stpr/dissoc-project state proj))))
|
(uum/error (tr "errors.delete-project")))]
|
||||||
|
(reify
|
||||||
|
rs/WatchEvent
|
||||||
|
(-apply-watch [_ state]
|
||||||
|
(->> (rp/do :delete/project proj)
|
||||||
|
(p/map on-success)
|
||||||
|
(p/err on-failure))))))
|
||||||
|
|
||||||
(defn go-to
|
(defn go-to
|
||||||
"A shortcut event that redirects the user to the
|
"A shortcut event that redirects the user to the
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user