From c2c281d9c6cc79a5a7f622ed2722cd89432fd7c5 Mon Sep 17 00:00:00 2001 From: erikseppanen Date: Thu, 6 Oct 2022 10:59:39 -0400 Subject: [PATCH] [13939] Implement system message into quo2 components (#14061) --- resources/images/icons/delete16@2x.png | Bin 0 -> 667 bytes resources/images/icons/delete16@3x.png | Bin 0 -> 940 bytes resources/images/icons/pin16@2x.png | Bin 0 -> 441 bytes resources/images/icons/pin16@3x.png | Bin 0 -> 585 bytes resources/images/icons/timeout12@2x.png | Bin 0 -> 327 bytes resources/images/icons/timeout12@3x.png | Bin 0 -> 440 bytes .../images/mock/user_picture_female2@2x.png | Bin 0 -> 13064 bytes .../images/mock/user_picture_male4@2x.png | Bin 0 -> 15305 bytes .../images/mock/user_picture_male5@2x.png | Bin 0 -> 9884 bytes src/quo2/components/avatars/icon_avatar.cljs | 7 +- src/quo2/components/avatars/user_avatar.cljs | 70 ++++---- .../components/messages/system_message.cljs | 162 ++++++++++++++++++ src/quo2/foundations/colors.cljs | 8 +- src/quo2/screens/avatars/icon_avatar.cljs | 2 +- src/quo2/screens/avatars/user_avatar.cljs | 15 +- src/quo2/screens/main.cljs | 6 +- src/quo2/screens/messages/system_message.cljs | 68 ++++++++ src/status_im/react_native/resources.cljs | 17 +- translations/en.json | 5 + 19 files changed, 307 insertions(+), 53 deletions(-) create mode 100644 resources/images/icons/delete16@2x.png create mode 100644 resources/images/icons/delete16@3x.png create mode 100644 resources/images/icons/pin16@2x.png create mode 100644 resources/images/icons/pin16@3x.png create mode 100644 resources/images/icons/timeout12@2x.png create mode 100644 resources/images/icons/timeout12@3x.png create mode 100644 resources/images/mock/user_picture_female2@2x.png create mode 100644 resources/images/mock/user_picture_male4@2x.png create mode 100644 resources/images/mock/user_picture_male5@2x.png create mode 100644 src/quo2/components/messages/system_message.cljs create mode 100644 src/quo2/screens/messages/system_message.cljs diff --git a/resources/images/icons/delete16@2x.png b/resources/images/icons/delete16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..45b9ad9b0bb7deb843f4ceee92d472341af84ad1 GIT binary patch literal 667 zcmV;M0%ZM(P)kZK08`zd=?%yY-~^Ntbb5pK1Z__MH)uFPvh1!L!3-?eMGSvg#Ckl% zGByD_mg0d8-%MgfQr`RY{`3sIF}etZWFYSKM7*iY^!gHk5b#7SdrBZW;$h$NCqjz@7ZRQ?3d4(}6fOAXbV!7IgrSTbq6H zwZu|v$gSgbxlR0;tjVqZ;`*9Y{dKuBaeGEh& z6oLteoPdTuf#K+i zIgb?r!7ljVhF9<<&?Yz=CI}}GZh^cGur)(0uzC=Z3qq>Nf(RaPcZFy=&*zgs{S9Af z0pltm%T)+QZUI^?4P&VkJdxd~83arMe*)>a*fjeJPjnC+mRn@w+Y6mOpJsXj7^KAOV@ z-9J{ozpT0OdNay`ai*%)Q$(6iq~m%2qcz^q01s*B!}9@uK&Aiy002ovPDHLkV1iec B9OeK3 literal 0 HcmV?d00001 diff --git a/resources/images/icons/delete16@3x.png b/resources/images/icons/delete16@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..059a32bf6d692b7bb49100477c52c1d7818e9c3e GIT binary patch literal 940 zcmV;d15^BoP)n*?FfC%&nb6jppkdct(;M^#zzNE-JKzK*Cuq1qm)()>x`bs{b!W&-cL-X* zQyi;LBoJGnM7E`r%;ekHQuHD{z4s*f37GMJVQ@r^*BccuuHJi);!1Q6;Q*@&`21;5 zL3Jwu)~U#~p9O>bl%Tg8iJu`XVNHQ~zVeP9dnRqE)13=(ybB9hQDA}BKT5ETJThdB z_J!zfq9hfRWPz`2)8MzVwKAl-7CrYpc>6R<-{?KSASU{-M$LbG8b`mrq6DQZpnRU8 z`dzDTU5ewayW6kqP>0*;I*E9-OiYxrz?{Fdr)Cnjg8>ET@%w+ZkE63r&402?udjv! z@Yq#!_8A2!Wr2DA?1Y9ra0?k;itehJT%D}OfDR8A>j_%yvwKJc_Av(QT*es(K>|zJMN0j6sgnT+0P0M$@DbjqQtG=V8hju|Ptu zz`!~;<&v(F3%xHYA5vMQ$99Lz{pd?2`QfJShqj>LrsbD?xGBewYvayPxm{=wBTitM zjZQ7GH8D=+LC1g(QC@-3U6Q?kBcyhM6+%px1=#JTXpW%*qtWk%Obm>jeMNyFR;Nlg zkP9uPN=6D)VF5a2HfcRRNDbr-9qKxH+i2LdKzieHX91Q8V&=w$Tq0csF|7_iFcG}8 z0;fh2$PEkNjG+Z+S3WV3c(6M$S>2`uvZqg<2LUX@d64mc>1rQvMT97K04t0XNG7lo zS5VO`AYED@4q%y{c9iy}&4qL%5?4F1GPnKR*wZYKpfb6$(BMqN%Ct$4a8@8qWoUso z%yx!CE5>~=?LT`igIND|wLy{ZVTF+blliR7##JQ3&_F1U1%`V8tq=`ZhrLYob!aMO ztN{6FDy_#Fi~RZ6{HZDGc1KTWnaUa~KndS=ww$#4iKyamLS2wRyPBfD_D%mI*Sh8N zdYj#uxxP+E3eyAF(BD~rkpbnqddj7MIx+r1e2~qR+JgpjG>6|!lYGz(xt38OLP58S zYxLTJeOh@3uPA&&(@*+V-qIYrMuBhHe&>uX1CygiIB(}2_>37d`uqjllN*2phQv_- O0000{dVUM3-r2lrRboM&mP_I=5P7?{fSfS+Go!MP|)>t<;Qn0DuGcs2Csk%bn6Fj zZ&nC103!g!_Q4Ec0$?LHWMjHQmz_`p)Xf(tCJUq!D};kWP3C!+&(>qNH1{;tk${4y!!0~4RVE^0B%6pv4b0M1vo*u2}Pn3%Pf${0u<~9lr(7)k7uTW z; z)75R;J-jzEYW3**{r7m%CEoJCcH%ld)q}eiA{oF|k6+b|VozQY;w@e)fIoRf6AAI_ zCjb)1>anvkG0Fh#sV8(N8LnU zZ-ZsfHJD{-HXI$Fm`tA(SNsz2BYR7SqoW4}>N!hS*RX3$9iL18&o7QPKp+qZ1on+D X6R7f`9MPZ)00000NkvXXu0mjfZfE!l literal 0 HcmV?d00001 diff --git a/resources/images/icons/timeout12@2x.png b/resources/images/icons/timeout12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a09af30b03577726862af763be362154d75bcc0 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9E$svykh8Km+7D9BhG zCp-m;Z4x3U~s>FcbkqPFkJ@+CX(#q$67kk2vo<(_kK=d!<51qePiJ+>q& z)M91J!q4718X*T(Jn3UA_D`0~XizQJH#utyL9*B{Hx^K6>lti^K_>x`$dNMAkM`_*1> zYR%=3+xA#x_?uaGzD{T`Ze1LCXhY8R_fj`24RvoiZE0;Ue;7~_;*yclwEwhl+FBp3 Uy{B@4{$*hBboFyt=akR{0M5jIjQ{`u literal 0 HcmV?d00001 diff --git a/resources/images/icons/timeout12@3x.png b/resources/images/icons/timeout12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe2e6d302f1b200f472d84611b5136625621090 GIT binary patch literal 440 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 z%0D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 b9mf9yY8u+N+oUAS00000NkvXXu0mjf=9~XZ literal 0 HcmV?d00001 diff --git a/resources/images/mock/user_picture_male5@2x.png b/resources/images/mock/user_picture_male5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2eff8701404af455c9d0642bd39c2c56930ec702 GIT binary patch literal 9884 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 O0000 profile-picture - blank? - false?) - outer-dimensions (get-in sizes [size :outer]) - inner-dimensions (get-in sizes [size (if ring? - :inner - :outer)]) - font-size (get-in sizes [size :font-size]) - icon-text (if-not (or (blank? first-initial-letter) - (blank? initials)) - (if small? - first-initial-letter - initials) - "")] - [rn/view {:style {:width outer-dimensions - :height outer-dimensions + identicon? (contains? identicon-sizes size) + small? (contains? small-sizes size) + outer-dimensions (get-in sizes [size :outer]) + inner-dimensions (get-in sizes [size (if ring? + :inner + :outer)]) + font-size (get-in sizes [size :font-size]) + icon-text (if-not (or (blank? first-initial-letter) + (blank? initials)) + (if small? + first-initial-letter + initials) + "")] + [rn/view {:style {:width outer-dimensions + :height outer-dimensions :border-radius outer-dimensions}} (when (and ring? identicon?) - [icons/icon :main-icons/identicon-ring {:width outer-dimensions - :height outer-dimensions - :size outer-dimensions + [icons/icon :main-icons/identicon-ring {:width outer-dimensions + :height outer-dimensions + :size outer-dimensions :no-color true}]) - (if using-profile-picture? - [react/image {:style (container-styling inner-dimensions outer-dimensions) - :source {:uri profile-picture}}] + (if profile-picture + ;; display image + [rn/image {:style (container-styling inner-dimensions outer-dimensions) + :source profile-picture}] + ;; else display initials [container inner-dimensions outer-dimensions [text/text {:weight :semi-bold - :size font-size - :style {:color colors/white-opa-70}} + :size font-size + :style {:color colors/white-opa-70}} (upper-case icon-text)]]) [dot-indicator size status-indicator? online? ring? (dark?)]])) diff --git a/src/quo2/components/messages/system_message.cljs b/src/quo2/components/messages/system_message.cljs new file mode 100644 index 0000000000..ef6dc5db55 --- /dev/null +++ b/src/quo2/components/messages/system_message.cljs @@ -0,0 +1,162 @@ +(ns quo2.components.messages.system-message + (:require [status-im.i18n.i18n :as i18n] + [quo.react-native :as rn] + [status-im.utils.core :as utils] + [quo.theme :as theme] + [quo2.components.buttons.button :as button] + [quo2.components.markdown.text :as text] + [quo2.reanimated :as ra] + [quo2.foundations.colors :as colors] + [quo2.components.avatars.user-avatar :as user-avatar] + [quo2.components.avatars.icon-avatar :as icon-avatar])) + +(def themes-landed {:pinned colors/primary-50-opa-5 + :added colors/primary-50-opa-5 + :deleted colors/danger-50-opa-5}) + +(def themes + {:light {:text colors/neutral-100 + :time colors/neutral-50 + :bg {:default colors/white + :pressed colors/neutral-5 + :landed themes-landed}} + :dark {:text colors/white + :time colors/neutral-40 + :bg {:default colors/neutral-90 + :pressed colors/neutral-80 + :landed themes-landed}}}) + +(defn get-color [& keys] + (reduce (fn [acc k] (get acc k (reduced acc))) + ((theme/get-theme) themes) (vec keys))) + +(defn sm-timestamp [timestamp-str] + [rn/view {:margin-left 6} + [text/text {:size :label + :style {:color (get-color :time) + :text-transform :none}} + timestamp-str]]) + +(defn sm-icon [{:keys [icon color opacity]}] + [rn/view {:align-items :center + :margin-right 8} + [icon-avatar/icon-avatar {:size :medium + :icon icon + :color color + :opacity opacity}]]) + +(defn sm-user-avatar [image] + [rn/view {:margin-right 4} + [user-avatar/user-avatar {:status-indicator? false + :online? false + :size :xxxs + :profile-picture image + :ring? false}]]) + +(defmulti sm-render :type) + +(defmethod sm-render :deleted [{:keys [state action timestamp-str]}] + [rn/view {:align-items :center + :justify-content :space-between + :flex 1 + :flex-direction :row} + [rn/view {:align-items :center + :flex-direction :row} + [sm-icon {:icon :main-icons/delete16 + :color :danger + :opacity (if (= state :landed) 0 5)}] + [text/text {:size :paragraph-2 + :style {:color (get-color :text) + :margin-right 5}} + (i18n/label (if action :message-deleted-for-you :message-deleted))] + (when (nil? action) [sm-timestamp timestamp-str])] + (when action [button/button {:size 24 + :before :main-icons/timeout + :type :grey} (i18n/label :undo)])]) + +(defmethod sm-render :added [{:keys [state mentions timestamp-str]}] + [rn/view {:align-items :center + :flex-direction :row} + [sm-icon {:icon :main-icons/add-user16 + :color :primary + :opacity (if (= state :landed) 0 5)}] + [sm-user-avatar (:image (first mentions))] + [text/text {:weight :semi-bold + :size :paragraph-2} + (:name (first mentions))] + [text/text {:size :paragraph-2 + :style {:color (get-color :text) + :margin-left 3 + :margin-right 3}} + (i18n/label :added)] + [sm-user-avatar (:image (second mentions))] + [text/text {:weight :semi-bold + :size :paragraph-2} + (:name (second mentions))] + [sm-timestamp timestamp-str]]) + +(defmethod sm-render :pinned [{:keys [state pinned-by content timestamp-str]}] + [rn/view {:flex-direction :row + :flex 1 + :align-items :center} + [sm-icon {:icon :main-icons/pin16 + :color :primary + :opacity (if (= state :landed) 0 5)}] + [rn/view {:flex-direction :column + :flex 1} + [rn/view {:align-items :baseline + :flex-direction :row} + [text/text {:size :paragraph-2 + :weight :semi-bold + :style {:color (get-color :text)}} + (utils/truncate-str pinned-by 18)] + [rn/view {:margin-left 4 + :margin-right 2} + [text/text {:size :paragraph-2 + :style {:color (get-color :text)}} + (i18n/label :pinned-a-message)]] + [sm-timestamp timestamp-str]] + [rn/view {:flex-direction :row} + [rn/view {:flex-direction :row + :margin-right 4} + [sm-user-avatar (:image (:mentions content))] + [text/text {:weight :semi-bold + :size :label} + (:name (:mentions content))]] + (when (seq (:text content)) + [rn/view {:margin-right 20 + :flex-direction :row + :flex 1} + [text/text {:size :label + :style {:color (get-color :text)} + :number-of-lines 1 + :ellipsize-mode :tail} + (:text content)]]) + [rn/view {:justify-content :flex-end + :flex-direction :row + :min-width 10} + (when (seq (:info content)) + [text/text {:size :label + :style {:color (get-color :time)}} + (utils/truncate-str (:info content) 24)])]]]]) + +(defn system-message [{:keys [type] :as message}] + [:f> + (fn [] + (let [sv-color (ra/use-shared-value (get-color :bg :landed type))] + (ra/animate-shared-value-with-delay + sv-color (get-color :bg :default type) 0 :linear 1000) + [ra/touchable-opacity + {:on-press #(ra/set-shared-value + sv-color (get-color :bg :pressed type)) + :style (ra/apply-animations-to-style + {:background-color sv-color} + {:flex-direction :row + :flex 1 + :border-radius 16 + :padding-vertical 9 + :padding-horizontal 11 + :width 359 + :height 52 + :background-color sv-color})} + [sm-render message]]))]) diff --git a/src/quo2/foundations/colors.cljs b/src/quo2/foundations/colors.cljs index bc4a28091a..6b5bd0f969 100644 --- a/src/quo2/foundations/colors.cljs +++ b/src/quo2/foundations/colors.cljs @@ -119,6 +119,7 @@ ;;;; Customization +;; Colors for customizing profiles and communities themes (def customization {:primary {50 primary-50 ;; User can also use primary color as customisation color 60 primary-60} @@ -145,6 +146,11 @@ :beige {50 "#CAAE93" 60 "#AA927C"}}) +(def colors-map (merge {:danger {50 danger-50 + 60 danger-60} + :success {50 success-50 + 60 success-60}} customization)) + (def custom-color "(custom-color color suffix opacity) color :primary/:purple/... @@ -155,7 +161,7 @@ ([color suffix] (custom-color color suffix nil)) ([color suffix opacity] - (let [base-color (get-in customization [(keyword color) suffix])] + (let [base-color (get-in colors-map [(keyword color) suffix])] (if opacity (alpha base-color (/ opacity 100)) base-color)))))) (defn custom-color-by-theme diff --git a/src/quo2/screens/avatars/icon_avatar.cljs b/src/quo2/screens/avatars/icon_avatar.cljs index 6dd0ea69aa..5a658cf67b 100644 --- a/src/quo2/screens/avatars/icon_avatar.cljs +++ b/src/quo2/screens/avatars/icon_avatar.cljs @@ -19,7 +19,7 @@ :type :select :options [{:key :main-icons/placeholder20 :value "Placeholder"} - {:key :main-icons/walelt + {:key :main-icons/wallet :value "Wallet"} {:key :main-icons/play :value "Play"}]} diff --git a/src/quo2/screens/avatars/user_avatar.cljs b/src/quo2/screens/avatars/user_avatar.cljs index 411a9643bd..50e7caaf0d 100644 --- a/src/quo2/screens/avatars/user_avatar.cljs +++ b/src/quo2/screens/avatars/user_avatar.cljs @@ -3,7 +3,8 @@ [quo2.foundations.colors :as colors] [quo.previews.preview :as preview] [quo2.components.avatars.user-avatar :as quo2] - [reagent.core :as reagent])) + [reagent.core :as reagent] + [status-im.react-native.resources :as resources])) (def descriptor [{:label "Size:" :key :size @@ -32,9 +33,15 @@ {:label "Full name separated by space" :key :full-name :type :text} - {:label "Profile Picture URL" - :key :profile-picture - :type :text}]) + {:label "Profile Picture" + :key :profile-picture + :type :select + :options [{:value "None" + :key nil} + {:value "Alicia Keys" + :key (resources/get-mock-image :user-picture-female2)} + {:value "pedro.eth" + :key (resources/get-mock-image :user-picture-male4)}]}]) (defn cool-preview [] (let [state (reagent/atom {:full-name "A Y" diff --git a/src/quo2/screens/main.cljs b/src/quo2/screens/main.cljs index 586c6eb318..700567abb2 100644 --- a/src/quo2/screens/main.cljs +++ b/src/quo2/screens/main.cljs @@ -25,6 +25,7 @@ [quo2.screens.list-items.channel :as channel] [quo2.screens.markdown.text :as text] [quo2.screens.messages.gap :as messages-gap] + [quo2.screens.messages.system-message :as system-message] [quo2.screens.notifications.activity-logs :as activity-logs] [quo2.screens.reactions.react :as react] [quo2.screens.selectors.disclaimer :as disclaimer] @@ -96,7 +97,10 @@ :component text/preview-text}] :messages [{:name :gap :insets {:top false} - :component messages-gap/preview-messages-gap}] + :component messages-gap/preview-messages-gap} + {:name :system-messages + :insets {:top false} + :component system-message/preview-system-message}] :navigation [{:name :bottom-nav-tab :insets {:top false} :component bottom-nav-tab/preview-bottom-nav-tab} diff --git a/src/quo2/screens/messages/system_message.cljs b/src/quo2/screens/messages/system_message.cljs new file mode 100644 index 0000000000..987dffc29e --- /dev/null +++ b/src/quo2/screens/messages/system_message.cljs @@ -0,0 +1,68 @@ +(ns quo2.screens.messages.system-message + (:require [reagent.core :as reagent] + [status-im.react-native.resources :as resources] + [quo.react-native :as rn] + [quo.previews.preview :as preview] + [quo2.components.messages.system-message :as system-message] + [quo2.foundations.colors :as colors])) + +(def descriptor [{:label "Message Type" + :key :type + :type :select + :options [{:value "Message pinned" + :key :pinned} + {:value "User added" + :key :added} + {:value "Message deleted" + :key :deleted}]} + {:label "Action" + :key :action + :type :select + :options [{:value "none" + :key nil} + {:value "Undo" + :key :undo}]} + {:label "Pinned By" + :key :pinned-by + :type :text} + {:label "Content Text" + :key :content-text + :type :text} + {:label "Content Info" + :key :content-info + :type :text} + {:label "Timestamp" + :key :timestamp-str + :type :text}]) + +(defn finalize-state [state] + (merge @state + {:mentions [{:name "Alicia Keys" + :image (resources/get-mock-image :user-picture-female2)} + {:name "pedro.eth" + :image (resources/get-mock-image :user-picture-male4)}] + :content {:text (:content-text @state) + :info (:content-info @state) + :mentions {:name "Alisher" + :image (resources/get-mock-image :user-picture-male5)}}})) +(defn preview [] + (let [state (reagent/atom {:type :deleted + :pinned-by "Steve" + :content-text "Hello! This is an example of a pinned message!" + :content-info "3 photos" + :timestamp-str "09:41"})] + (fn [] + [rn/touchable-without-feedback {:on-press rn/dismiss-keyboard!} + [rn/view {:padding-bottom 150} + [preview/customizer state descriptor] + [rn/view {:padding-vertical 60 + :align-items :center} + [system-message/system-message (finalize-state state)]]]]))) + +(defn preview-system-message [] + [rn/view {:background-color (colors/theme-colors colors/white colors/neutral-90) + :flex 1} + [rn/flat-list {:flex 1 + :header [preview] + :key-fn str + :keyboardShouldPersistTaps :always}]]) diff --git a/src/status_im/react_native/resources.cljs b/src/status_im/react_native/resources.cljs index d8b0aebe5c..d81e251b5c 100644 --- a/src/status_im/react_native/resources.cljs +++ b/src/status_im/react_native/resources.cljs @@ -55,13 +55,16 @@ :podcasts (js/require "../resources/images/ui/podcasts.png")}) (def mock-images - {:photo1 (js/require "../resources/images/mock/photo1.png") - :photo2 (js/require "../resources/images/mock/photo2.png") - :photo3 (js/require "../resources/images/mock/photo3.png") - :community-banner (js/require "../resources/images/mock/community-banner.png") - :community-logo (js/require "../resources/images/mock/community-logo.png") - :gif (js/require "../resources/images/mock/gif.png") - :sticker (js/require "../resources/images/mock/sticker.png")}) + {:photo1 (js/require "../resources/images/mock/photo1.png") + :photo2 (js/require "../resources/images/mock/photo2.png") + :photo3 (js/require "../resources/images/mock/photo3.png") + :community-banner (js/require "../resources/images/mock/community-banner.png") + :community-logo (js/require "../resources/images/mock/community-logo.png") + :gif (js/require "../resources/images/mock/gif.png") + :sticker (js/require "../resources/images/mock/sticker.png") + :user-picture-female2 (js/require "../resources/images/mock/user_picture_female2.png") + :user-picture-male4 (js/require "../resources/images/mock/user_picture_male4.png") + :user-picture-male5 (js/require "../resources/images/mock/user_picture_male5.png")}) (defn get-theme-image [k] (get ui (when (colors/dark?) (keyword (str (name k) "-dark"))) (get ui k))) diff --git a/translations/en.json b/translations/en.json index b4dcd37dc3..3d7010e905 100644 --- a/translations/en.json +++ b/translations/en.json @@ -20,6 +20,7 @@ "active-online": "Online", "active-unknown": "Unknown", "add": "Add", + "added": "added", "add-a-watch-account": "Add a watch-only address", "add-account": "Add an account", "add-account-description": "You can import any type of Ethereum account to add it to your Status wallet", @@ -856,6 +857,8 @@ "members-active-none": "no members", "members-title": "Members", "message": "Message", + "message-deleted": "Message deleted", + "message-deleted-for-you": "Message deleted for you", "message-not-sent": "Message not sent", "message-options-cancel": "Cancel", "message-reply": "Reply", @@ -1302,6 +1305,7 @@ "last-backup-performed": "Last backup performed:", "unable-to-read-this-code": "Unable to read this code", "unblock-contact": "Unblock this user", + "undo": "Undo", "unknown-status-go-error": "Unknown status-go error", "unlock": "Unlock", "unpair-card": "Unpair card", @@ -1653,6 +1657,7 @@ "accept-and-continue": "Accept and continue", "empty-activity-center": "Your chat notifications\nwill appear here", "pinned-messages": "Pinned messages", + "pinned-a-message": "pinned a message", "pin": "Pin", "unpin": "Unpin", "no-pinned-messages": "No pinned messages",