(ns frontend.db.rtc.debug-ui "Debug UI for rtc module" (:require [fipp.edn :as fipp] [frontend.common.missionary :as c.m] [frontend.db :as db] [frontend.handler.db-based.rtc-flows :as rtc-flows] [frontend.handler.user :as user] [frontend.state :as state] [frontend.ui :as ui] [frontend.util :as util] [logseq.db.frontend.schema :as db-schema] [logseq.shui.ui :as shui] [missionary.core :as m] [promesa.core :as p] [rum.core :as rum])) (defonce debug-state (:rtc/state @state/state)) (defn- stop [] (p/do! (state/ (get state ::sub-log-canceler) deref)] (canceler)) state)} [state] (let [debug-state* (rum/react debug-state) rtc-logs @(get state ::logs) rtc-state (:rtc-state debug-state*) rtc-lock (:rtc-lock debug-state*)] [:div {:on-click (fn [^js e] (when-let [^js btn (.closest (.-target e) ".ui__button")] (.setAttribute btn "disabled" "true") (js/setTimeout #(.removeAttribute btn "disabled") 2000)))} [:div.flex.gap-2.flex-wrap.items-center.pb-3 (shui/button {:size :sm :on-click (fn [_] (p/let [new-state (state/user-user-type :graph<->user-grant-by-user]))) graph-list)))))} (shui/tabler-icon "download") "graph-list") (shui/button {:size :sm :on-click #(c.m/run-task (user/new-task--upload-user-avatar "TEST_AVATAR") :upload-test-avatar)} (shui/tabler-icon "upload") "upload-test-avatar")] [:div.pb-4 [:pre.select-text (-> {:user-uuid (user/user-uuid) :graph (:graph-uuid debug-state*) :rtc-state rtc-state :rtc-logs rtc-logs :local-tx (:local-tx debug-state*) :pending-block-update-count (:unpushed-block-update-count debug-state*) :remote-graphs (:remote-graphs debug-state*) :online-users (:online-users debug-state*) :auto-push? (:auto-push? debug-state*) :remote-profile? (:remote-profile? debug-state*) :current-page (state/get-current-page) :blocks-count (when-let [page (state/get-current-page)] (count (:block/_page (db/get-page page)))) :schema-version {:app (db-schema/schema-version->string db-schema/version) :local-graph (:local-graph-schema-version debug-state*) :remote-graph (str (:remote-graph-schema-version debug-state*))}} (fipp/pprint {:width 20}) with-out-str)]] (if (nil? rtc-lock) (shui/button {:variant :outline :class "text-green-rx-09 border-green-rx-10 hover:text-green-rx-10" :on-click (fn [] (let [token (state/get-auth-id-token)] (state/ (:grant-access-to-user debug-state*) parse-uuid) user-email (when-not user-uuid (:grant-access-to-user debug-state*))] (when-let [graph-uuid (:graph-uuid debug-state*)] (state/ user-uuid vector) (some-> user-email vector)))))}) [:b "➡️"] [:input.form-input.my-2.py-1 {:on-change (fn [e] (swap! debug-state assoc :grant-access-to-user (util/evalue e))) :on-focus (fn [e] (let [v (.-value (.-target e))] (when (= v "input email or user-uuid here") (set! (.-value (.-target e)) "")))) :placeholder "input email or user-uuid here"}]]) [:hr.my-2] [:div.flex.flex-row.items-center.gap-2 (ui/button (str "download graph to") {:icon "download" :class "mr-2" :on-click (fn [] (when-let [graph-name (:download-graph-to-repo debug-state*)] (when-let [{:keys [graph-uuid graph-schema-version]} (:graph-uuid-to-download debug-state*)] (prn :download-graph graph-uuid graph-schema-version :to graph-name) (p/let [token (state/get-auth-id-token) download-info-uuid (state/> (state/get-auth-id-token) (state/ {:devices (:devices keys-state) :graph-aes-key-jwk (:aes-key-jwk keys-state)} (fipp/pprint {:width 20}) with-out-str)]] (shui/button {:size :sm :on-click (fn [_] (when-let [device-uuid (not-empty (:remove-device-device-uuid keys-state))] (when-let [token (state/get-auth-id-token)] (state/