mirror of
https://github.com/penpot/penpot.git
synced 2025-06-07 21:01:39 +02:00
✨ Moves cursor to position when clicking in the text box
This commit is contained in:
parent
b4b12e68bf
commit
69e256ab86
4 changed files with 44 additions and 2 deletions
|
@ -101,6 +101,13 @@
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(d/update-in-when state [:workspace-editor-state id] ted/editor-select-all))))
|
(d/update-in-when state [:workspace-editor-state id] ted/editor-select-all))))
|
||||||
|
|
||||||
|
(defn cursor-to-end
|
||||||
|
[{:keys [id] :as shape}]
|
||||||
|
(ptk/reify ::cursor-to-end
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [_ state]
|
||||||
|
(d/update-in-when state [:workspace-editor-state id] ted/cursor-to-end))))
|
||||||
|
|
||||||
;; --- Helpers
|
;; --- Helpers
|
||||||
|
|
||||||
(defn- shape-current-values
|
(defn- shape-current-values
|
||||||
|
|
|
@ -126,7 +126,13 @@
|
||||||
(fn [_ state]
|
(fn [_ state]
|
||||||
(st/emit! (dwt/update-editor-state shape (ted/editor-split-block state)))
|
(st/emit! (dwt/update-editor-state shape (ted/editor-split-block state)))
|
||||||
"handled"))
|
"handled"))
|
||||||
]
|
|
||||||
|
on-click
|
||||||
|
(mf/use-callback
|
||||||
|
(fn [event]
|
||||||
|
(when (dom/class? (dom/get-target event) "DraftEditor-root")
|
||||||
|
(st/emit! (dwt/cursor-to-end shape)))
|
||||||
|
(st/emit! (dwt/focus-editor))))]
|
||||||
|
|
||||||
(mf/use-layout-effect on-mount)
|
(mf/use-layout-effect on-mount)
|
||||||
|
|
||||||
|
@ -135,7 +141,7 @@
|
||||||
:style {:cursor cur/text
|
:style {:cursor cur/text
|
||||||
:width (:width shape)
|
:width (:width shape)
|
||||||
:height (:height shape)}
|
:height (:height shape)}
|
||||||
:on-click (st/emitf (dwt/focus-editor))
|
:on-click on-click
|
||||||
:class (dom/classnames
|
:class (dom/classnames
|
||||||
:align-top (= (:vertical-align content "top") "top")
|
:align-top (= (:vertical-align content "top") "top")
|
||||||
:align-center (= (:vertical-align content) "center")
|
:align-center (= (:vertical-align content) "center")
|
||||||
|
|
|
@ -92,3 +92,7 @@
|
||||||
(defn remove-editor-blur-selection
|
(defn remove-editor-blur-selection
|
||||||
[state]
|
[state]
|
||||||
(impl/removeBlurSelectionEntity state))
|
(impl/removeBlurSelectionEntity state))
|
||||||
|
|
||||||
|
(defn cursor-to-end
|
||||||
|
[state]
|
||||||
|
(impl/cursorToEnd state))
|
||||||
|
|
|
@ -56,6 +56,18 @@ function getSelectAllSelection(state) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getCursorInEndPosition(state) {
|
||||||
|
const content = state.getCurrentContent();
|
||||||
|
const lastBlock = content.getBlockMap().last();
|
||||||
|
|
||||||
|
return new SelectionState({
|
||||||
|
"anchorKey": lastBlock.getKey(),
|
||||||
|
"anchorOffset": lastBlock.getLength(),
|
||||||
|
"focusKey": lastBlock.getKey(),
|
||||||
|
"focusOffset": lastBlock.getLength()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function selectAll(state) {
|
export function selectAll(state) {
|
||||||
return EditorState.forceSelection(state, getSelectAllSelection(state));
|
return EditorState.forceSelection(state, getSelectAllSelection(state));
|
||||||
}
|
}
|
||||||
|
@ -209,3 +221,16 @@ export function removeInlineStylePrefix(contentState, selectionState, stylePrefi
|
||||||
return block.set("characterList", chars);
|
return block.set("characterList", chars);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function cursorToEnd(state) {
|
||||||
|
const newSelection = getCursorInEndPosition(state);
|
||||||
|
const selection = state.getSelection();
|
||||||
|
|
||||||
|
let content = state.getCurrentContent();
|
||||||
|
content = Modifier.applyEntity(content, newSelection, null);
|
||||||
|
|
||||||
|
state = EditorState.forceSelection(state, newSelection);
|
||||||
|
state = EditorState.push(state, content, "apply-entity");
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue