0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-04-13 07:21:40 -05:00

🐛 Fix allow a comment length of 750 chars and show error text if exceeded (#5810)

This commit is contained in:
luisδμ 2025-02-10 15:03:07 +01:00 committed by GitHub
parent f173e15bb3
commit 7fd0ca2243
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 43 additions and 15 deletions

View file

@ -38,6 +38,8 @@
(def r-mentions-split #"@\[[^\]]*\]\([^\)]*\)")
(def r-mentions #"@\[([^\]]*)\]\(([^\)]*)\)")
(def comment-max-length 750)
(defn- format-comment
[{:keys [content]}]
(->> (d/interleave-all
@ -442,7 +444,7 @@
[:map {:title "create-comment-thread"}
[:file-id ::sm/uuid]
[:position ::gpt/point]
[:content [:string {:max 750}]]
[:content [:string {:max comment-max-length}]]
[:page-id ::sm/uuid]
[:frame-id ::sm/uuid]
[:share-id {:optional true} [:maybe ::sm/uuid]]
@ -585,7 +587,7 @@
schema:create-comment
[:map {:title "create-comment"}
[:thread-id ::sm/uuid]
[:content [:string {:max 250}]]
[:content [:string {:max comment-max-length}]]
[:share-id {:optional true} [:maybe ::sm/uuid]]
[:mentions {:optional true} [::sm/set ::sm/uuid]]])
@ -655,7 +657,7 @@
schema:update-comment
[:map {:title "update-comment"}
[:id ::sm/uuid]
[:content [:string {:max 250}]]
[:content [:string {:max comment-max-length}]]
[:share-id {:optional true} [:maybe ::sm/uuid]]
[:mentions {:optional true} [::sm/set ::sm/uuid]]])

View file

@ -146,7 +146,7 @@
;; Input text for comments with mentions
(mf/defc comment-input*
{::mf/private true}
[{:keys [value placeholder max-length autofocus on-focus on-blur on-change on-esc on-ctrl-enter]}]
[{:keys [value placeholder autofocus on-focus on-blur on-change on-esc on-ctrl-enter]}]
(let [value (d/nilv value "")
prev-value (h/use-previous value)
@ -196,7 +196,7 @@
(dom/append-child! node (create-text-node)))
(let [new-input (parse-nodes node)]
(when (and on-change (<= (count new-input) max-length))
(when on-change
(on-change new-input))))))
handle-select
@ -637,6 +637,10 @@
:disabled is-disabled}
(tr "labels.post")]]))
(defn- exceeds-length?
[content]
(> (count content) 750))
(mf/defc comment-reply-form*
{::mf/props :obj
::mf/private true}
@ -644,7 +648,8 @@
(let [show-buttons? (mf/use-state false)
content (mf/use-state "")
disabled? (blank-content? @content)
disabled? (or (blank-content? @content)
(exceeds-length? @content))
on-focus
(mf/use-fn
@ -678,8 +683,10 @@
:on-blur on-blur
:on-focus on-focus
:on-ctrl-enter on-submit*
:on-change on-change
:max-length 750}]
:on-change on-change}]
(when (exceeds-length? @content)
[:div {:class (stl/css :error-text)}
(tr "errors.character-limit-exceeded")])
(when (or @show-buttons? (seq @content))
[:> comment-form-buttons* {:on-submit on-submit*
:on-cancel on-cancel
@ -690,7 +697,8 @@
[{:keys [content on-submit on-cancel]}]
(let [content (mf/use-state content)
disabled? (blank-content? @content)
disabled? (or (blank-content? @content)
(exceeds-length? @content))
on-change
(mf/use-fn
@ -706,8 +714,10 @@
{:value @content
:autofocus true
:on-ctrl-enter on-submit*
:on-change on-change
:max-length 750}]
:on-change on-change}]
(when (exceeds-length? @content)
[:div {:class (stl/css :error-text)}
(tr "errors.character-limit-exceeded")])
[:> comment-form-buttons* {:on-submit on-submit*
:on-cancel on-cancel
:is-disabled disabled?}]]))
@ -726,7 +736,8 @@
pos-x (* (:x position) zoom)
pos-y (* (:y position) zoom)
disabled? (blank-content? content)
disabled? (or (blank-content? content)
(exceeds-length? content))
on-esc
(mf/use-fn
@ -769,8 +780,10 @@
:autofocus true
:on-esc on-esc
:on-change on-change
:on-ctrl-enter on-submit*
:max-length 750}]
:on-ctrl-enter on-submit*}]
(when (exceeds-length? content)
[:div {:class (stl/css :error-text)}
(tr "errors.character-limit-exceeded")])
[:> comment-form-buttons* {:on-submit on-submit*
:on-cancel on-esc
:is-disabled disabled?}]]

View file

@ -22,6 +22,11 @@
color: var(--comment-subtitle-color);
}
.error-text {
@include bodySmallTypography;
color: var(--color-foreground-error);
}
.location {
color: var(--comment-subtitle-color);
display: flex;
@ -246,6 +251,7 @@
grid-template-columns: 1fr auto auto;
justify-content: flex-end;
gap: $s-8;
margin-top: $s-8;
}
.open-mentions-button {
@ -321,7 +327,6 @@
border: $s-1 solid var(--input-border-color);
color: var(--input-foreground-color);
height: $s-36;
margin-bottom: $s-8;
max-width: $s-260;
overflow-y: auto;
padding: $s-8;

View file

@ -1152,6 +1152,10 @@ msgstr "The fonts %s could not be loaded"
msgid "errors.cannot-upload"
msgstr "Cannot upload the media file."
#: src/app/main/ui/comments.cljs:689
msgid "errors.character-limit-exceeded"
msgstr "Character limit exceeded"
#: src/app/main/data/workspace.cljs:1463, src/app/main/data/workspace.cljs:1660
msgid "errors.clipboard-not-implemented"
msgstr "Your browser cannot do this operation"

View file

@ -1160,6 +1160,10 @@ msgstr "No se han podido cargar las fuentes %s"
msgid "errors.cannot-upload"
msgstr "No se puede cargar el archivo multimedia."
#: src/app/main/ui/comments.cljs:689
msgid "errors.character-limit-exceeded"
msgstr "Se ha superado el límite de caracteres"
#: src/app/main/data/workspace.cljs:1463, src/app/main/data/workspace.cljs:1660
msgid "errors.clipboard-not-implemented"
msgstr "Tu navegador no puede realizar esta operación"