mirror of
https://github.com/logseq/logseq.git
synced 2026-05-01 01:16:27 +00:00
Core outliner operations refactoring (#4880)
* Add outliner nested transact! Copied the code mostly from https://github.com/logseq/logseq/pull/4671 by zhiyuan * refactor: insert-blocks * fix: insert-blocks * fix: move cursor to the last block when inserting * fix: replace the current block when inserting and its content is empty * keep only :insert-blocks * expose only :delete-blocks * Use existing implementations for move-nodes-up-down and indent/outdent. * fix editing state not updated immediately * fix editing status * fix: avoid recursive copy * fix: inserting blocks after an empty block * Implement move-blocks with insert-blocks * fix: block left * Implement move-blocks-up-down with move-blocks * fix: paste text * Implement indent-outdent-blocks with move-blocks * fix: indent/outdent * feat: multiple blocks drag && drop * fix: indent/outdent blocks * fix: drag drop * Port unit tests for outliner.core * enhance: open collapsed parent when indenting blocks * refactor: block selection * fix: indent/outdent blocks with different levels * Add instrument on invalid outliner structure * fix: can't write a block if the page has any outdated blocks * fix: editing status for empty page * fix: multiple drag & drop * fix: drag & drop disallows moving from parents to its child * fix: public property * fix: can't delete first empty block * Remove unused code * fix: e2e tests A workaround is to not select/highlight the block when pressing esc if it has fenced code. * remove unused code * Add batch transaction test * fix: update :block/page when dragging targets' children to another page * Add more tests * Simplify extract * Replace db/get-conn with db/get-db * Simplify extracting blocks from ast * Code cleanup * Code cleanup * Add outliner core fuzzy tests * Remove unused code * fix: cursor not jump to the upper block when pressing Enter in the beginning * fix: Enter in the beginning of a non-empty block * Fix lint warnings * Add editor random e2e tests * Fix typo * enhance: move some fns and add some comments * enhance(outliner): add page-block? util * fix: increase td width to prevent content overflow Signed-off-by: Yue Yang <g1enyy0ung@gmail.com> * First pass at file tests for file-sync Each action usually passes by 5th try * Fix two incorrect calls caught by tests * More test improvements - Easier auth setup - subdirectory is configurable - list graphs api also exercised * Address cleanup from #3839 - Remove unused translation key - Delete or TODO commented code - Capitalize notifications to users * fix quick capture template not working * enhance(sync): add logout * enhance: add logout i18n * fix(plugin): sometimes plugin settings of gui not work when entry from app settings * enable show-brackets? toggle for orgmode [[file:./pages/demo.org][demo]] * fix(sync): fix unfinishable sync loop * feature: logseq protocol; refactor persistGraph * fix: deeplink support * fix: broadcast persist graph on opening new graph with logseq protocol * feat: logseq protocol open action for page-name and uuid * fix: logseq protocol graph param validation * ux: copy logseq URL of block * enhance: remove the redundant 'open' from logseq protocol (v0.1) * ux: page dropdown button for copy page URL * chore: logseq protocol comments * don't create new contents file when changing format Logseq now creates a new contents file when users try to toggle the preferred format, which causes file duplications error. * fix pasting in src block not working on iOS close https://github.com/logseq/logseq/issues/4914 * fix playing video goes into editing mode on iOS * fix copy to clipboard failure on iOS * add Podfile item * fix mobile toolbar order not persisting after restart * test(e2e): add test for backspace and cursor pos (#4896) * test(e2e): add test for backspace and cursor pos * fix(test): refine, fix wrong helper * fix(ui): warn about illegal git commit interval * enhance(editor): allow global git cmd shortcut * style(settings): line-space of general/journals * enhance(editor): accept enter in dummy block Fix #4931 * fix editing state not updated immediately * fix: can't write a block if the page has any outdated blocks TODO: clean outdated blocks * fix: editing status for empty page * Random tree for outliner core tests * Add pre assertions and fn docs based on Zhiyuan's suggestions * Made some changes based on Gabriel's suggestions * fix: tests * fix: save current block before moving * Updated the timeout to 100ms based on llcc's suggestion https://github.com/logseq/logseq/pull/4880#discussion_r851966301 * api-insert-new-block! supports replace-empty-target? * fix: replace all :reuse-last-block? usage Co-authored-by: rcmerci <rcmerci@gmail.com> Co-authored-by: Yue Yang <g1enyy0ung@gmail.com> Co-authored-by: Gabriel Horner <gabriel@logseq.com> Co-authored-by: llcc <lzhes43@gmail.com> Co-authored-by: charlie <xyhp915@qq.com> Co-authored-by: Junyi Du <junyidu.cn@gmail.com> Co-authored-by: Andelf <andelf@gmail.com>
This commit is contained in:
@@ -143,7 +143,7 @@
|
||||
result-atom (:result (get @query-state k))]
|
||||
(when-let [component *query-component*]
|
||||
(add-query-component! k component))
|
||||
(when-let [db (conn/get-conn repo)]
|
||||
(when-let [db (conn/get-db repo)]
|
||||
(let [result (d/entity db id-or-lookup-ref)
|
||||
result-atom (or result-atom (atom nil))]
|
||||
(set! (.-state result-atom) result)
|
||||
@@ -160,7 +160,7 @@
|
||||
{:pre [(s/valid? ::react-query-keys k)]}
|
||||
(let [kv? (and (vector? k) (= :kv (first k)))
|
||||
k (vec (cons repo k))]
|
||||
(when-let [conn (conn/get-conn repo)]
|
||||
(when-let [db (conn/get-db repo)]
|
||||
(let [result-atom (get-query-cached-result k)]
|
||||
(when-let [component *query-component*]
|
||||
(add-query-component! k component))
|
||||
@@ -168,20 +168,20 @@
|
||||
result-atom
|
||||
(let [result (cond
|
||||
query-fn
|
||||
(query-fn conn nil nil)
|
||||
(query-fn db nil nil)
|
||||
|
||||
inputs-fn
|
||||
(let [inputs (inputs-fn)]
|
||||
(apply d/q query conn inputs))
|
||||
(apply d/q query db inputs))
|
||||
|
||||
kv?
|
||||
(d/entity conn (last k))
|
||||
(d/entity db (last k))
|
||||
|
||||
(seq inputs)
|
||||
(apply d/q query conn inputs)
|
||||
(apply d/q query db inputs)
|
||||
|
||||
:else
|
||||
(d/q query conn))
|
||||
(d/q query db))
|
||||
result (transform-fn result)
|
||||
result-atom (or result-atom (atom nil))]
|
||||
;; Don't notify watches now
|
||||
@@ -296,7 +296,7 @@
|
||||
(when (and repo-url
|
||||
(seq tx-data)
|
||||
(not (:skip-refresh? tx-meta)))
|
||||
(let [db (conn/get-conn repo-url)
|
||||
(let [db (conn/get-db repo-url)
|
||||
affected-keys (get-affected-queries-keys tx)]
|
||||
(doseq [[k cache] @query-state]
|
||||
(let [custom? (= :custom (second k))
|
||||
@@ -330,7 +330,7 @@
|
||||
([key]
|
||||
(sub-key-value (state/get-current-repo) key))
|
||||
([repo-url key]
|
||||
(when (conn/get-conn repo-url)
|
||||
(when (conn/get-db repo-url)
|
||||
(let [m (some-> (q repo-url [:kv key] {} key key) react)]
|
||||
(if-let [result (get m key)]
|
||||
result
|
||||
|
||||
Reference in New Issue
Block a user