From d9ad540aff501951b56e8c42e8f97dc2fc87bd5d Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 9 Jun 2022 18:08:18 +0100 Subject: [PATCH 1/3] query for unlinked refs after 500 ms, then show unlinked refs --- src/cljs/athens/views/pages/node_page.cljs | 108 +++++++++++---------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/src/cljs/athens/views/pages/node_page.cljs b/src/cljs/athens/views/pages/node_page.cljs index 9b665f3b04..428400de73 100644 --- a/src/cljs/athens/views/pages/node_page.cljs +++ b/src/cljs/athens/views/pages/node_page.cljs @@ -336,54 +336,52 @@ (dispatch [:unlinked-references/link-all unlinked-str-ids title])) (swap! state assoc unlinked? false) (reset! unlinked-refs []))] - [:> PageReferences {:defaultIsOpen false - :count (count @unlinked-refs) - :showIfEmpty true - :refs @unlinked-refs - :title "Unlinked References" - :extras (r/as-element [:> Button {:variant "link" - :size "sm" - :flexShrink 0 - :onClick link-all-unlinked} - "Link all"]) - :onOpen #(let [un-refs (get-unlinked-references (patterns/escape-str title))] - (swap! state assoc unlinked? true) - (reset! unlinked-refs un-refs)) - :onClose #(swap! state assoc unlinked? false)} - (doall - (for [[[group-title] group] @unlinked-refs] - [:> ReferenceGroup - {:title group-title - :onClickTitle (fn [e] - (let [shift? (.-shiftKey e) - parsed-title (parse-renderer/parse-title group-title)] - (rf/dispatch [:reporting/navigation {:source :main-unlinked-refs ; NOTE: this isn't always `:main-unlinked-refs` it can also be `:right-pane-unlinked-refs` - :target :page - :pane (if shift? - :right-pane - :main-pane)}]) - (router/navigate-page parsed-title e)))} - (doall - (for [block group] - [:> ReferenceBlock - {:key (str "ref-" (:block/uid block)) - :actions (when unlinked? - (r/as-element [:> Button {:marginTop "1.5em" - :size "xs" - :flex "0 0" - :float "right" - :variant "link" - :onClick (fn [] - (let [hm (into (hash-map) @unlinked-refs) - new-unlinked-refs (->> (update-in hm [group-title] #(filter (fn [{:keys [block/uid]}] - (= uid (:block/uid block))) - %)) - seq)] - ;; ctrl-z doesn't work though, because Unlinked Refs aren't reactive to datascript. - (reset! unlinked-refs new-unlinked-refs) - (dispatch [:unlinked-references/link block title])))} - "Link"]))} - [ref-comp block]]))]))])) + + [:> PageReferences {:defaultIsOpen (get @state unlinked?) + :count (count @unlinked-refs) + :showIfEmpty true + :refs @unlinked-refs + :title "Unlinked References" + :extras (r/as-element [:> Button {:variant "link" + :size "sm" + :flexShrink 0 + :onClick link-all-unlinked} + "Link all"]) + :onOpen #(swap! state assoc unlinked? true) + :onClose #(swap! state assoc unlinked? false)} + (for [[[group-title] group] @unlinked-refs] + [:> ReferenceGroup + {:title group-title + :onClickTitle (fn [e] + (let [shift? (.-shiftKey e) + parsed-title (parse-renderer/parse-title group-title)] + (rf/dispatch [:reporting/navigation {:source :main-unlinked-refs ; NOTE: this isn't always `:main-unlinked-refs` it can also be `:right-pane-unlinked-refs` + :target :page + :pane (if shift? + :right-pane + :main-pane)}]) + (router/navigate-page parsed-title e)))} + (doall + (for [block group] + [:> ReferenceBlock + {:key (str "ref-" (:block/uid block)) + :actions (when unlinked? + (r/as-element [:> Button {:marginTop "1.5em" + :size "xs" + :flex "0 0" + :float "right" + :variant "link" + :onClick (fn [] + (let [hm (into (hash-map) @unlinked-refs) + new-unlinked-refs (->> (update-in hm [group-title] #(filter (fn [{:keys [block/uid]}] + (= uid (:block/uid block))) + %)) + seq)] + ;; ctrl-z doesn't work though, because Unlinked Refs aren't reactive to datascript. + (reset! unlinked-refs new-unlinked-refs) + (dispatch [:unlinked-references/link block title])))} + "Link"]))} + [ref-comp block]]))])])) ;; TODO: where to put page-level link filters? @@ -401,12 +399,16 @@ (reset! state init-state) (reset! unlinked-refs []) (reset! block-uid (:block/uid node))) - (let [{:block/keys [children uid] title :node/title} node + (let [{:block/keys [children uid] title :node/title} node {:alert/keys [message confirm-fn cancel-fn confirm-text] alert-show :alert/show} @state - daily-note? (dates/is-daily-note uid) - on-daily-notes? (= :home @(subscribe [:current-route/name])) - is-current-route? (or (= @(subscribe [:current-route/uid]) uid) - (= @(subscribe [:current-route/page-title]) title))] + daily-note? (dates/is-daily-note uid) + on-daily-notes? (= :home @(subscribe [:current-route/name])) + is-current-route? (or (= @(subscribe [:current-route/uid]) uid) + (= @(subscribe [:current-route/page-title]) title))] + + (js/setTimeout + #(reset! unlinked-refs (get-unlinked-references (patterns/escape-str title))) + 500) (sync-title title state) From e1cbb9ab033c945cfb068fb31338d17dcc10856d Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 13 Jun 2022 16:58:28 +0100 Subject: [PATCH 2/3] revert doall --- src/cljs/athens/views/pages/node_page.cljs | 67 +++++++++++----------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/src/cljs/athens/views/pages/node_page.cljs b/src/cljs/athens/views/pages/node_page.cljs index 428400de73..1826d63673 100644 --- a/src/cljs/athens/views/pages/node_page.cljs +++ b/src/cljs/athens/views/pages/node_page.cljs @@ -349,39 +349,40 @@ "Link all"]) :onOpen #(swap! state assoc unlinked? true) :onClose #(swap! state assoc unlinked? false)} - (for [[[group-title] group] @unlinked-refs] - [:> ReferenceGroup - {:title group-title - :onClickTitle (fn [e] - (let [shift? (.-shiftKey e) - parsed-title (parse-renderer/parse-title group-title)] - (rf/dispatch [:reporting/navigation {:source :main-unlinked-refs ; NOTE: this isn't always `:main-unlinked-refs` it can also be `:right-pane-unlinked-refs` - :target :page - :pane (if shift? - :right-pane - :main-pane)}]) - (router/navigate-page parsed-title e)))} - (doall - (for [block group] - [:> ReferenceBlock - {:key (str "ref-" (:block/uid block)) - :actions (when unlinked? - (r/as-element [:> Button {:marginTop "1.5em" - :size "xs" - :flex "0 0" - :float "right" - :variant "link" - :onClick (fn [] - (let [hm (into (hash-map) @unlinked-refs) - new-unlinked-refs (->> (update-in hm [group-title] #(filter (fn [{:keys [block/uid]}] - (= uid (:block/uid block))) - %)) - seq)] - ;; ctrl-z doesn't work though, because Unlinked Refs aren't reactive to datascript. - (reset! unlinked-refs new-unlinked-refs) - (dispatch [:unlinked-references/link block title])))} - "Link"]))} - [ref-comp block]]))])])) + (doall + (for [[[group-title] group] @unlinked-refs] + [:> ReferenceGroup + {:title group-title + :onClickTitle (fn [e] + (let [shift? (.-shiftKey e) + parsed-title (parse-renderer/parse-title group-title)] + (rf/dispatch [:reporting/navigation {:source :main-unlinked-refs ; NOTE: this isn't always `:main-unlinked-refs` it can also be `:right-pane-unlinked-refs` + :target :page + :pane (if shift? + :right-pane + :main-pane)}]) + (router/navigate-page parsed-title e)))} + (doall + (for [block group] + [:> ReferenceBlock + {:key (str "ref-" (:block/uid block)) + :actions (when unlinked? + (r/as-element [:> Button {:marginTop "1.5em" + :size "xs" + :flex "0 0" + :float "right" + :variant "link" + :onClick (fn [] + (let [hm (into (hash-map) @unlinked-refs) + new-unlinked-refs (->> (update-in hm [group-title] #(filter (fn [{:keys [block/uid]}] + (= uid (:block/uid block))) + %)) + seq)] + ;; ctrl-z doesn't work though, because Unlinked Refs aren't reactive to datascript. + (reset! unlinked-refs new-unlinked-refs) + (dispatch [:unlinked-references/link block title])))} + "Link"]))} + [ref-comp block]]))]))])) ;; TODO: where to put page-level link filters? From 2de50f4faa9e9b74b877d9a987469d7a84f9f242 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 13 Jun 2022 17:06:45 +0100 Subject: [PATCH 3/3] rfct --- src/cljs/athens/views/pages/node_page.cljs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cljs/athens/views/pages/node_page.cljs b/src/cljs/athens/views/pages/node_page.cljs index 1826d63673..48f1eadf63 100644 --- a/src/cljs/athens/views/pages/node_page.cljs +++ b/src/cljs/athens/views/pages/node_page.cljs @@ -405,12 +405,10 @@ daily-note? (dates/is-daily-note uid) on-daily-notes? (= :home @(subscribe [:current-route/name])) is-current-route? (or (= @(subscribe [:current-route/uid]) uid) - (= @(subscribe [:current-route/page-title]) title))] - - (js/setTimeout - #(reset! unlinked-refs (get-unlinked-references (patterns/escape-str title))) - 500) + (= @(subscribe [:current-route/page-title]) title)) + get-and-reset-unlinked-refs #(reset! unlinked-refs (get-unlinked-references (patterns/escape-str title)))] + (js/setTimeout get-and-reset-unlinked-refs 500) (sync-title title state) [:<>