From e12a42eb4989f6581738cad67e752c5ea4fa300c Mon Sep 17 00:00:00 2001 From: rcmerci Date: Thu, 6 Nov 2025 22:04:18 +0800 Subject: [PATCH] feat(rtc,e2ee): add e2ee settings --- deps/shui/src/logseq/shui/hooks.cljs | 25 +++++ src/main/frontend/components/settings.cljs | 104 +++++++++++++++------ src/main/frontend/handler/user.cljs | 3 +- src/main/frontend/rum.cljs | 28 +----- src/main/frontend/worker/rtc/crypt.cljs | 24 +++-- 5 files changed, 120 insertions(+), 64 deletions(-) diff --git a/deps/shui/src/logseq/shui/hooks.cljs b/deps/shui/src/logseq/shui/hooks.cljs index 3d386b2a4f..5a3989753d 100644 --- a/deps/shui/src/logseq/shui/hooks.cljs +++ b/deps/shui/src/logseq/shui/hooks.cljs @@ -132,3 +132,28 @@ :onMouseUp #(clear % true) :onMouseLeave #(clear % false) :onTouchEnd #(clear % true)})) + +(defn- use-atom-fn + [a getter-fn setter-fn] + (let [[val set-val] (use-state (getter-fn @a))] + (use-effect! + (fn [] + (let [id (str (random-uuid))] + (add-watch a id (fn [_ _ prev-state next-state] + (let [prev-value (getter-fn prev-state) + next-value (getter-fn next-state)] + (when-not (= prev-value next-value) + (set-val next-value))))) + #(remove-watch a id))) + []) + [val #(swap! a setter-fn %)])) + +(defn use-atom + "(use-atom my-atom)" + [a] + (use-atom-fn a identity (fn [_ v] v))) + +(defn use-atom-in + [a ks] + (let [ks (if (keyword? ks) [ks] ks)] + (use-atom-fn a #(get-in % ks) (fn [a' v] (assoc-in a' ks v))))) diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index e092f25a27..cb0177ca2d 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -1161,38 +1161,80 @@ [:<>]) -(rum/defcs settings-collaboration < rum/reactive - (rum/local "" ::invite-email) - {:will-mount (fn [state] - (rtc-handler/user-user-type :graph<->user/user-type} users] - [:div.flex.flex-row.items-center.gap-2 {:key (str "user-" user-name)} - [:div user-name] - (when user-email [:div.opacity-50.text-sm user-email]) - (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])])] - [:div.flex.flex-col.gap-4.mt-4 - (shui/input - {:placeholder "Email address" - :on-change #(reset! *invite-email (util/evalue %))}) - (shui/button - {:on-click (fn [] - (let [user-email @*invite-email - graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))] - (when-not (string/blank? user-email) - (when graph-uuid - (rtc-handler/user-user-type :graph<->user/user-type} users] + [:div.flex.flex-row.items-center.gap-2 {:key (str "user-" user-name)} + [:div user-name] + (when user-email [:div.opacity-50.text-sm user-email]) + (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])])] + [:div.flex.flex-col.gap-4.mt-4 + (shui/input + {:placeholder "Email address" + :on-change #(set-invite-email! (util/evalue %))}) + (shui/button + {:on-click (fn [] + (let [user-email invite-email + graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))] + (when-not (string/blank? user-email) + (when graph-uuid + (rtc-handler/ (p/let [r (state/ (p/let [key-pair (state/js (map-keys->camel-case new-options :html-props true)) new-children))))) -(defn use-atom-fn - [a getter-fn setter-fn] - (let [[val set-val] (use-state (getter-fn @a))] - (hooks/use-effect! - (fn [] - (let [id (str (random-uuid))] - (add-watch a id (fn [_ _ prev-state next-state] - (let [prev-value (getter-fn prev-state) - next-value (getter-fn next-state)] - (when-not (= prev-value next-value) - (set-val next-value))))) - #(remove-watch a id))) - []) - [val #(swap! a setter-fn %)])) - -(defn use-atom - "(use-atom my-atom)" - [a] - (use-atom-fn a identity (fn [_ v] v))) - -(defn use-atom-in - [a ks] - (let [ks (if (keyword? ks) [ks] ks)] - (use-atom-fn a #(get-in % ks) (fn [a' v] (assoc-in a' ks v))))) +(def use-atom hooks/use-atom) +(def use-atom-in hooks/use-atom-in) (defn use-mounted [] diff --git a/src/main/frontend/worker/rtc/crypt.cljs b/src/main/frontend/worker/rtc/crypt.cljs index ccc53c2678..783cf1e30b 100644 --- a/src/main/frontend/worker/rtc/crypt.cljs +++ b/src/main/frontend/worker/rtc/crypt.cljs @@ -118,15 +118,13 @@ [] (m/sp (c.m/