mirror of
https://github.com/penpot/penpot.git
synced 2025-05-11 15:26:39 +02:00
33 lines
1.2 KiB
Clojure
33 lines
1.2 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; 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) KALEIDOS INC
|
|
|
|
(ns app.main.features.pointer-map
|
|
"A frontend specific helpers for work with pointer-map feature"
|
|
(:require
|
|
[app.common.transit :as t]
|
|
[app.main.repo :as rp]
|
|
[beicon.v2.core :as rx]))
|
|
|
|
(defn resolve-file
|
|
[{:keys [id data] :as file}]
|
|
(letfn [(resolve-pointer [[key val :as kv]]
|
|
(if (t/pointer? val)
|
|
(->> (rp/cmd! :get-file-fragment {:file-id id :fragment-id @val})
|
|
(rx/map #(get % :content))
|
|
(rx/map #(vector key %)))
|
|
(rx/of kv)))
|
|
|
|
(resolve-pointers [coll]
|
|
(->> (rx/from (seq coll))
|
|
(rx/merge-map resolve-pointer)
|
|
(rx/reduce conj {})))]
|
|
|
|
(->> (rx/zip (resolve-pointers data)
|
|
(resolve-pointers (:pages-index data)))
|
|
(rx/take 1)
|
|
(rx/map (fn [[data pages-index]]
|
|
(let [data (assoc data :pages-index pages-index)]
|
|
(assoc file :data data)))))))
|