|
734 | 734 | No-op if prev-sibling-block has children.
|
735 | 735 | Otherwise delete block and join with previous block
|
736 | 736 | If prev-block has children"
|
737 |
| - [uid value] |
738 |
| - (let [root-embed? (= (some-> (str "#editable-uid-" uid) |
739 |
| - js/document.querySelector |
740 |
| - (.. (closest ".block-embed")) |
741 |
| - (. -firstChild) |
742 |
| - (.getAttribute "data-uid")) |
743 |
| - uid) |
744 |
| - db @db/dsdb |
745 |
| - [uid embed-id] (common-db/uid-and-embed-id uid) |
746 |
| - block (common-db/get-block db [:block/uid uid]) |
747 |
| - {:block/keys [children order] :or {children []}} block |
748 |
| - parent (common-db/get-parent db [:block/uid uid]) |
749 |
| - prev-block-uid (common-db/prev-block-uid db uid) |
750 |
| - prev-block (common-db/get-block db [:block/uid prev-block-uid]) |
751 |
| - prev-sib-order (dec (:block/order block)) |
752 |
| - prev-sib (some->> (common-db/prev-sib db uid prev-sib-order) |
753 |
| - (common-db/get-block db)) |
754 |
| - event (cond |
755 |
| - (or (not parent) |
756 |
| - root-embed? |
757 |
| - (and (not-empty children) (not-empty (:block/children prev-sib))) |
758 |
| - (and (not-empty children) (= parent prev-block))) |
759 |
| - nil |
760 |
| - |
761 |
| - (and (empty? children) (:node/title parent) (zero? order) (clojure.string/blank? value)) |
762 |
| - [:backspace/delete-only-child uid] |
763 |
| - |
764 |
| - :else |
765 |
| - [:backspace/delete-merge-block {:uid uid |
766 |
| - :value value |
767 |
| - :prev-block-uid prev-block-uid |
768 |
| - :embed-id embed-id |
769 |
| - :prev-block prev-block}])] |
770 |
| - (log/debug "[Backspace] args:" (pr-str {:uid uid |
771 |
| - :value value}) |
772 |
| - ", event:" (pr-str event)) |
773 |
| - (when event |
774 |
| - {:fx [[:dispatch event]]}))) |
| 737 | + ([uid value] |
| 738 | + (backspace uid value nil)) |
| 739 | + ([uid value maybe-local-updates] |
| 740 | + (let [root-embed? (= (some-> (str "#editable-uid-" uid) |
| 741 | + js/document.querySelector |
| 742 | + (.. (closest ".block-embed")) |
| 743 | + (. -firstChild) |
| 744 | + (.getAttribute "data-uid")) |
| 745 | + uid) |
| 746 | + db @db/dsdb |
| 747 | + [uid embed-id] (common-db/uid-and-embed-id uid) |
| 748 | + block (common-db/get-block db [:block/uid uid]) |
| 749 | + {:block/keys [children order] :or {children []}} block |
| 750 | + parent (common-db/get-parent db [:block/uid uid]) |
| 751 | + prev-block-uid (common-db/prev-block-uid db uid) |
| 752 | + prev-block (common-db/get-block db [:block/uid prev-block-uid]) |
| 753 | + prev-sib-order (dec (:block/order block)) |
| 754 | + prev-sib (some->> (common-db/prev-sib db uid prev-sib-order) |
| 755 | + (common-db/get-block db)) |
| 756 | + event (cond |
| 757 | + (or (not parent) |
| 758 | + root-embed? |
| 759 | + (and (not-empty children) (not-empty (:block/children prev-sib))) |
| 760 | + (and (not-empty children) (= parent prev-block))) |
| 761 | + nil |
| 762 | + |
| 763 | + (and (empty? children) (:node/title parent) (zero? order) (clojure.string/blank? value)) |
| 764 | + [:backspace/delete-only-child uid] |
| 765 | + |
| 766 | + maybe-local-updates |
| 767 | + [:backspace/delete-merge-block-with-save {:uid uid |
| 768 | + :value value |
| 769 | + :prev-block-uid prev-block-uid |
| 770 | + :embed-id embed-id |
| 771 | + :prev-block prev-block |
| 772 | + :local-update maybe-local-updates}] |
| 773 | + :else |
| 774 | + [:backspace/delete-merge-block {:uid uid |
| 775 | + :value value |
| 776 | + :prev-block-uid prev-block-uid |
| 777 | + :embed-id embed-id |
| 778 | + :prev-block prev-block}])] |
| 779 | + (log/debug "[Backspace] args:" (pr-str {:uid uid |
| 780 | + :value value}) |
| 781 | + ", event:" (pr-str event)) |
| 782 | + (when event |
| 783 | + {:fx [[:dispatch event]]})))) |
775 | 784 |
|
776 | 785 |
|
777 | 786 | ;; todo(abhinav) -- stateless backspace
|
778 | 787 | ;; will pick db value of backspace/delete instead of current state
|
779 | 788 | ;; which might not be same as blur is not yet called
|
780 | 789 | (reg-event-fx
|
781 | 790 | :backspace
|
782 |
| - (fn [_ [_ uid value]] |
783 |
| - (backspace uid value))) |
| 791 | + (fn [_ [_ uid value maybe-local-updates]] |
| 792 | + (backspace uid value maybe-local-updates))) |
784 | 793 |
|
785 | 794 |
|
786 | 795 | (reg-event-fx
|
|
886 | 895 | (count (:block/string prev-block))]]]]})))
|
887 | 896 |
|
888 | 897 |
|
| 898 | +(reg-event-fx |
| 899 | + :backspace/delete-merge-block-with-save |
| 900 | + (fn [_ [_ {:keys [uid value prev-block-uid embed-id local-update] :as args}]] |
| 901 | + (log/debug ":backspace/delete-merge-block-with-save args:" (pr-str args)) |
| 902 | + (let [op (graph-ops/build-block-merge-with-updated-op @db/dsdb |
| 903 | + uid |
| 904 | + prev-block-uid |
| 905 | + value |
| 906 | + local-update) |
| 907 | + event (common-events/build-atomic-event op)] |
| 908 | + {:fx [[:dispatch-n [[:resolve-transact-forward event] |
| 909 | + [:editing/uid |
| 910 | + (cond-> prev-block-uid |
| 911 | + embed-id (str "-embed-" embed-id)) |
| 912 | + (count local-update)]]]]}))) |
| 913 | + |
| 914 | + |
889 | 915 | ;; Atomic events end ==========
|
890 | 916 |
|
891 | 917 |
|
|
0 commit comments