mirror of
https://github.com/penpot/penpot.git
synced 2025-05-22 01:06:12 +02:00
fix token update
This commit is contained in:
parent
d147d844fb
commit
0dca047339
6 changed files with 104 additions and 30 deletions
|
@ -564,6 +564,41 @@
|
||||||
new-elems
|
new-elems
|
||||||
(remove p? after))))
|
(remove p? after))))
|
||||||
|
|
||||||
|
(defn addm-at-index
|
||||||
|
"Insert an element in an ordered map at an arbitrary index"
|
||||||
|
[coll index key element]
|
||||||
|
(assert (ordered-map? coll))
|
||||||
|
(-> (ordered-map)
|
||||||
|
(into (take index coll))
|
||||||
|
(assoc key element)
|
||||||
|
(into (drop index coll))))
|
||||||
|
|
||||||
|
(defn insertm-at-index
|
||||||
|
"Insert a map {k v} of elements in an ordered map at an arbitrary index"
|
||||||
|
[coll index new-elems]
|
||||||
|
(assert (ordered-map? coll))
|
||||||
|
(-> (ordered-map)
|
||||||
|
(into (take index coll))
|
||||||
|
(into new-elems)
|
||||||
|
(into (drop index coll))))
|
||||||
|
|
||||||
|
(defn adds-at-index
|
||||||
|
"Insert an element in an ordered set at an arbitrary index"
|
||||||
|
[coll index element]
|
||||||
|
(assert (ordered-set? coll))
|
||||||
|
(-> (ordered-set)
|
||||||
|
(into (take index coll))
|
||||||
|
(conj element)
|
||||||
|
(into (drop index coll))))
|
||||||
|
|
||||||
|
(defn inserts-at-index
|
||||||
|
"Insert a list of elements in an ordered set at an arbitrary index"
|
||||||
|
[coll index new-elems]
|
||||||
|
(assert (ordered-set? coll))
|
||||||
|
(-> (ordered-set)
|
||||||
|
(into (take index coll))
|
||||||
|
(into new-elems)
|
||||||
|
(into (drop index coll))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Data Parsing / Conversion
|
;; Data Parsing / Conversion
|
||||||
|
|
|
@ -312,6 +312,7 @@
|
||||||
[:set-id ::sm/uuid]
|
[:set-id ::sm/uuid]
|
||||||
[:set-name :string]
|
[:set-name :string]
|
||||||
[:id ::sm/uuid]
|
[:id ::sm/uuid]
|
||||||
|
[:name :string]
|
||||||
[:token ::cto/token]]]
|
[:token ::cto/token]]]
|
||||||
|
|
||||||
[:del-token
|
[:del-token
|
||||||
|
@ -798,15 +799,15 @@
|
||||||
(ctob/add-token-in-set set-name (ctob/make-token token))))))
|
(ctob/add-token-in-set set-name (ctob/make-token token))))))
|
||||||
|
|
||||||
(defmethod process-change :mod-token
|
(defmethod process-change :mod-token
|
||||||
[data {:keys [set-id set-name id token]}]
|
[data {:keys [set-name id name token]}]
|
||||||
(-> data
|
(-> data
|
||||||
(ctol/update-token data set-id id merge token)
|
(ctol/update-token id merge token)
|
||||||
(update :tokens-lib
|
(update :tokens-lib
|
||||||
#(-> %
|
#(-> %
|
||||||
(ctob/ensure-tokens-lib)
|
(ctob/ensure-tokens-lib)
|
||||||
(ctob/update-token-in-set
|
(ctob/update-token-in-set
|
||||||
set-name
|
set-name
|
||||||
(:name token)
|
name
|
||||||
(fn [old-token]
|
(fn [old-token]
|
||||||
(ctob/make-token (merge old-token token))))))))
|
(ctob/make-token (merge old-token token))))))))
|
||||||
|
|
||||||
|
|
|
@ -765,10 +765,10 @@
|
||||||
(apply-changes-local)))
|
(apply-changes-local)))
|
||||||
|
|
||||||
(defn update-token
|
(defn update-token
|
||||||
[changes set-id set-name {:keys [id] :as token} prev-token]
|
[changes set-id set-name {:keys [id name] :as token} {prev-name :name :as prev-token}]
|
||||||
(-> changes
|
(-> changes
|
||||||
(update :redo-changes conj {:type :mod-token :set-id set-id :set-name set-name :id id :token token})
|
(update :redo-changes conj {:type :mod-token :set-id set-id :set-name set-name :id id :name prev-name :token token})
|
||||||
(update :undo-changes conj {:type :mod-token :set-id set-id :set-name set-name :id id :token (or prev-token token)})
|
(update :undo-changes conj {:type :mod-token :set-id set-id :set-name set-name :id id :name name :token (or prev-token token)})
|
||||||
(apply-changes-local)))
|
(apply-changes-local)))
|
||||||
|
|
||||||
(defn delete-token
|
(defn delete-token
|
||||||
|
|
|
@ -75,13 +75,13 @@
|
||||||
(TokenSet. name
|
(TokenSet. name
|
||||||
description
|
description
|
||||||
(dt/now)
|
(dt/now)
|
||||||
(cond-> tokens
|
(if (= (:name token) (:name token'))
|
||||||
(not= (:name token) (:name token'))
|
(assoc tokens (:name token') token')
|
||||||
(dissoc (:name token))
|
(let [index (d/index-of (keys tokens) (:name token))]
|
||||||
|
(-> tokens
|
||||||
:always ; TODO: if token is renamed,
|
(dissoc (:name token))
|
||||||
(assoc (:name token') token')))) ; it sould remain in
|
(d/addm-at-index index (:name token') token'))))))
|
||||||
this)) ; the same position
|
this))
|
||||||
|
|
||||||
(delete-token [_ token-name]
|
(delete-token [_ token-name]
|
||||||
(TokenSet. name
|
(TokenSet. name
|
||||||
|
@ -180,13 +180,13 @@
|
||||||
(let [set' (-> (make-token-set (f set))
|
(let [set' (-> (make-token-set (f set))
|
||||||
(assoc :modified-at (dt/now)))]
|
(assoc :modified-at (dt/now)))]
|
||||||
(check-token-set! set')
|
(check-token-set! set')
|
||||||
(TokensLib. (cond-> sets
|
(TokensLib. (if (= (:name set) (:name set'))
|
||||||
(not= (:name set) (:name set'))
|
(assoc sets (:name set') set')
|
||||||
(dissoc (:name set))
|
(let [index (d/index-of (keys sets) (:name set))]
|
||||||
|
(-> sets
|
||||||
:always ; TODO: if set is renamed,
|
(dissoc (:name set))
|
||||||
(assoc (:name set') set')) ; it sould remain in
|
(d/addm-at-index index (:name set') set'))))
|
||||||
themes)) ; the same position
|
themes))
|
||||||
this))
|
this))
|
||||||
|
|
||||||
(delete-set [_ set-name]
|
(delete-set [_ set-name]
|
||||||
|
@ -220,7 +220,7 @@
|
||||||
#(update-token % token-name f))
|
#(update-token % token-name f))
|
||||||
themes)
|
themes)
|
||||||
this))
|
this))
|
||||||
|
|
||||||
(delete-token-from-set [this set-name token-name]
|
(delete-token-from-set [this set-name token-name]
|
||||||
(if (contains? sets set-name)
|
(if (contains? sets set-name)
|
||||||
(TokensLib. (update sets set-name
|
(TokensLib. (update sets set-name
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
(ns common-tests.types.tokens-lib-test
|
(ns common-tests.types.tokens-lib-test
|
||||||
(:require
|
(:require
|
||||||
|
[app.common.data :as d]
|
||||||
[app.common.fressian :as fres]
|
[app.common.fressian :as fres]
|
||||||
[app.common.time :as dt]
|
[app.common.time :as dt]
|
||||||
[app.common.transit :as tr]
|
[app.common.transit :as tr]
|
||||||
|
@ -143,18 +144,21 @@
|
||||||
(let [tokens-lib (-> (ctob/make-tokens-lib)
|
(let [tokens-lib (-> (ctob/make-tokens-lib)
|
||||||
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
|
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
|
||||||
(ctob/add-token-in-set "test-token-set"
|
(ctob/add-token-in-set "test-token-set"
|
||||||
(ctob/make-token :name "test-token"
|
(ctob/make-token :name "test-token-1"
|
||||||
|
:type :boolean
|
||||||
|
:value true))
|
||||||
|
(ctob/add-token-in-set "test-token-set"
|
||||||
|
(ctob/make-token :name "test-token-2"
|
||||||
:type :boolean
|
:type :boolean
|
||||||
:value true)))
|
:value true)))
|
||||||
|
|
||||||
tokens-lib' (-> tokens-lib
|
tokens-lib' (-> tokens-lib
|
||||||
(ctob/update-token-in-set "test-token-set" "test-token"
|
(ctob/update-token-in-set "test-token-set" "test-token-1"
|
||||||
(fn [token]
|
(fn [token]
|
||||||
(assoc token
|
(assoc token
|
||||||
:name "updated-name"
|
|
||||||
:description "some description"
|
:description "some description"
|
||||||
:value false)))
|
:value false)))
|
||||||
(ctob/update-token-in-set "not-existing-set" "test-token"
|
(ctob/update-token-in-set "not-existing-set" "test-token-1"
|
||||||
(fn [token]
|
(fn [token]
|
||||||
(assoc token
|
(assoc token
|
||||||
:name "no-effect")))
|
:name "no-effect")))
|
||||||
|
@ -165,14 +169,47 @@
|
||||||
|
|
||||||
token-set (ctob/get-set tokens-lib "test-token-set")
|
token-set (ctob/get-set tokens-lib "test-token-set")
|
||||||
token-set' (ctob/get-set tokens-lib' "test-token-set")
|
token-set' (ctob/get-set tokens-lib' "test-token-set")
|
||||||
token (get-in token-set [:tokens "test-token"])
|
token (get-in token-set [:tokens "test-token-1"])
|
||||||
|
token' (get-in token-set' [:tokens "test-token-1"])]
|
||||||
|
|
||||||
|
(t/is (= (ctob/set-count tokens-lib') 1))
|
||||||
|
(t/is (= (count (:tokens token-set')) 2))
|
||||||
|
(t/is (= (d/index-of (keys (:tokens token-set')) "test-token-1") 0))
|
||||||
|
(t/is (= (:name token') "test-token-1"))
|
||||||
|
(t/is (= (:description token') "some description"))
|
||||||
|
(t/is (= (:value token') false))
|
||||||
|
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
|
||||||
|
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
|
||||||
|
|
||||||
|
(t/deftest rename-token
|
||||||
|
(let [tokens-lib (-> (ctob/make-tokens-lib)
|
||||||
|
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
|
||||||
|
(ctob/add-token-in-set "test-token-set"
|
||||||
|
(ctob/make-token :name "test-token-1"
|
||||||
|
:type :boolean
|
||||||
|
:value true))
|
||||||
|
(ctob/add-token-in-set "test-token-set"
|
||||||
|
(ctob/make-token :name "test-token-2"
|
||||||
|
:type :boolean
|
||||||
|
:value true)))
|
||||||
|
|
||||||
|
tokens-lib' (-> tokens-lib
|
||||||
|
(ctob/update-token-in-set "test-token-set" "test-token-1"
|
||||||
|
(fn [token]
|
||||||
|
(assoc token
|
||||||
|
:name "updated-name"))))
|
||||||
|
|
||||||
|
token-set (ctob/get-set tokens-lib "test-token-set")
|
||||||
|
token-set' (ctob/get-set tokens-lib' "test-token-set")
|
||||||
|
token (get-in token-set [:tokens "test-token-1"])
|
||||||
token' (get-in token-set' [:tokens "updated-name"])]
|
token' (get-in token-set' [:tokens "updated-name"])]
|
||||||
|
|
||||||
(t/is (= (ctob/set-count tokens-lib') 1))
|
(t/is (= (ctob/set-count tokens-lib') 1))
|
||||||
(t/is (= (count (:tokens token-set')) 1))
|
(t/is (= (count (:tokens token-set')) 2))
|
||||||
|
(t/is (= (d/index-of (keys (:tokens token-set')) "updated-name") 0))
|
||||||
(t/is (= (:name token') "updated-name"))
|
(t/is (= (:name token') "updated-name"))
|
||||||
(t/is (= (:description token') "some description"))
|
(t/is (= (:description token') nil))
|
||||||
(t/is (= (:value token') false))
|
(t/is (= (:value token') true))
|
||||||
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
|
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
|
||||||
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
|
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,8 @@
|
||||||
create-set?
|
create-set?
|
||||||
(pcb/add-token-set token-set))
|
(pcb/add-token-set token-set))
|
||||||
|
|
||||||
prev-token (d/seek #(= (:id %) (:id token)) (:tokens token-set)) ; TODO
|
prev-token-id (d/seek #(= % (:id token)) (:tokens token-set))
|
||||||
|
prev-token (get-token-data-from-token-id prev-token-id)
|
||||||
create-token? (not prev-token)
|
create-token? (not prev-token)
|
||||||
|
|
||||||
changes (if create-token?
|
changes (if create-token?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue