fix: class ordered properties

pull/11177/head
Tienson Qin 2024-04-29 12:27:18 +08:00
parent 8275449b3c
commit 723f0a5bab
6 changed files with 46 additions and 44 deletions

3
deps/db/deps.edn vendored
View File

@ -7,7 +7,8 @@
cljs-bean/cljs-bean {:mvn/version "1.5.0"}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}
logseq/common {:local/root "../common"}
funcool/promesa {:mvn/version "4.0.2"}}
funcool/promesa {:mvn/version "4.0.2"}
org.flatland/ordered {:mvn/version "1.15.11"}}
:aliases
{:clj-kondo

View File

@ -28,6 +28,9 @@
[db current-key]
(:v (second (d/rseek-datoms db :avet :block/order current-key))))
(defn get-next-order
[db current-key]
(:v (second (d/seek-datoms db :avet :block/order current-key))))
(comment
(defn gen-n-keys
@ -36,6 +39,4 @@
(reset! *max-key (last ks))
ks))
(defn get-next-order
[db current-key]
(:v (first (d/seek-datoms db :avet :block/order current-key)))))
)

View File

@ -1,7 +1,8 @@
(ns logseq.db.frontend.property
"Property related fns for DB graphs and frontend/datascript usage"
(:require [datascript.core :as d]
[clojure.string :as string]))
[clojure.string :as string]
[flatland.ordered.map :refer [ordered-map]]))
;; Main property vars
;; ==================
@ -22,7 +23,8 @@
* :attribute - Property keyword that is saved to a datascript attribute outside of :block/properties
* :closed-values - Vec of closed-value maps for properties with choices. Map
has keys :value, :db-ident, :uuid and :icon"
{:block/alias {:original-name "Alias"
(ordered-map
:block/alias {:original-name "Alias"
:attribute :block/alias
:schema {:type :page
:cardinality :many
@ -185,7 +187,7 @@
{:type :checkbox
:hide? true
:view-context :page
:public? true}}})
:public? true}}))
(def built-in-properties
(->> built-in-properties*
@ -196,7 +198,7 @@
(if (:name v)
v
(assoc v :name (keyword (string/lower-case (name k)))))]))
(into {})))
(into (ordered-map))))
(def db-attribute-properties
"Internal properties that are also db schema attributes"
@ -291,9 +293,8 @@
(defn get-class-ordered-properties
[class-entity]
(let [properties (map :db/ident (:class/schema.properties class-entity))
ordered (get-in class-entity [:block/schema :properties])]
(concat ordered (remove (set ordered) properties))))
(->> (:class/schema.properties class-entity)
(sort-by :block/order)))
(defn property-created-block?
"`block` has been created in a property and it's not a closed value."

View File

@ -375,9 +375,6 @@
(cond-> (select-keys m [:block/name :block/type :block/original-name :block/schema])
(seq props)
(assoc :block/properties (update-keys props name))
(seq (:class/schema.properties m))
(assoc-in [:block/schema :properties] (mapv (partial block-uuid->name-please-fixme m)
(map :block/uuid (:class/schema.properties m))))
(seq (get-in m [:block/schema :classes]))
(update-in [:block/schema :classes] #(mapv block-uuid->name %))))))
set)))))

View File

@ -43,6 +43,7 @@
:onDragEnd (fn [event]
(let [active-id (.-id (.-active event))
over-id (.-id (.-over event))]
(js/console.dir event)
(when-not (= active-id over-id)
(let [old-index (.indexOf ids active-id)
new-index (.indexOf ids over-id)
@ -62,7 +63,10 @@
(do
(set-items new-items)
(on-drag-end new-values {:active-id active-id
:over-id over-id})))))))
:over-id over-id
:direction (if (> new-index old-index)
:down
:up)})))))))
(set-active-id nil)))}
sortable-opts {:items items
:strategy verticalListSortingStrategy}

View File

@ -717,35 +717,31 @@
(rum/defc properties-section < rum/reactive db-mixins/query
[block properties opts]
(let [class? (:class-schema? opts)]
(when (seq properties)
(when (seq properties)
;; Sort properties by :block/order
(let [properties' (sort-by (fn [[k _v]]
(:block/order (db/entity k))) properties)
choices (map (fn [[k v]]
{:id (subs (str k) 1)
:value k
:content (property-cp block k v opts)}) properties')]
(if class?
(dnd/items choices
{:on-drag-end (fn [properties _]
(let [schema (assoc (:block/schema block)
:properties properties)]
(when (seq properties)
(db-property-handler/class-set-schema! (state/get-current-repo) (:block/uuid block) schema))))})
(dnd/items choices
{:on-drag-end (fn [_ {:keys [active-id over-id]}]
(let [over (db/entity (keyword over-id))
active (db/entity (keyword active-id))
over-order (:block/order over)
prev-order (db-order/get-prev-order (db/get-db) over-order)
new-order (db-order/gen-key prev-order over-order)]
(db/transact! (state/get-current-repo)
[{:db/id (:db/id active)
:block/order new-order}
(outliner-core/block-with-updated-at
{:db/id (:db/id block)})]
{:outliner-op :save-block})))}))))))
(let [properties' (sort-by (fn [[k _v]]
(:block/order (db/entity k))) properties)
choices (map (fn [[k v]]
{:id (subs (str k) 1)
:value k
:content (property-cp block k v opts)}) properties')]
(dnd/items choices
{:on-drag-end (fn [_ {:keys [active-id over-id direction]}]
(let [move-down? (= direction :down)
over (db/entity (keyword over-id))
active (db/entity (keyword active-id))
over-order (:block/order over)
new-order (if move-down?
(let [next-order (db-order/get-next-order (db/get-db) over-order)]
(db-order/gen-key over-order next-order))
(let [prev-order (db-order/get-prev-order (db/get-db) over-order)]
(db-order/gen-key prev-order over-order)))]
(db/transact! (state/get-current-repo)
[{:db/id (:db/id active)
:block/order new-order}
(outliner-core/block-with-updated-at
{:db/id (:db/id block)})]
{:outliner-op :save-block})))}))))
(defn- async-load-classes!
[block]
@ -776,8 +772,9 @@
block-properties (:block/properties block)
properties (if (and class-schema? page-configure?)
(->> (db-property/get-class-ordered-properties block)
(map :db/ident)
(map #(vector % %)))
(sort-by first block-properties))
block-properties)
remove-built-in-properties (fn [properties]
(remove (fn [property]
(let [id (if (vector? property) (first property) property)]
@ -831,6 +828,7 @@
result []]
(if-let [class (first classes)]
(let [cur-properties (->> (db-property/get-class-ordered-properties class)
(map :db/ident)
(remove properties)
(remove hide-with-property-id))]
(recur (rest classes)