Commit Graph

262 Commits

Author SHA1 Message Date
Alex Jbanca 4a30d13bdc
feat(LinkPreviews): Integrate Link previews with the backend (#12523)
* feat(StatusQ): Adding numberToLocaleStringInCompactForm function to LocaleUtils

This function will format the number in a compact form
E.g: 1000 -> 1K; 1000000 -> 1M; 1100000 -> 1.1M

+ adding tests

fix(statusQ): Update numberToLocaleStringInCompactForm to return the locale number when greter than 999T

fix(StatusQ): extend the test_numberToLocaleStringInCompactForm with new data

* feat(LinkPreviews): Update the link preview area in StatusChatInput to use the new model

Changes:
1. Create a new component `LinkPreviewMiniCardDelegate.qml` that filters the model data to properly fill the link preview card with the needed data based on the preview type
2. Update storybook pages
3. Small updates to LinkPreviewMiniCard

* feat(LinkPreviews): Update the link previews in message history to use the new backend

Changes:
1. Create delegate items for LinkPreviewCard and gif link preview to clean the LinksMessageView component and filter the model data based on the preview type
2. Remove UserProfileCard and reuse the LinkPreviewCard to display contacts link previews
3. Update LinkPreviewCard so that it can accommodate status link previews (communities, channels, contacts). The generic properties (title, description, footer) have been dropped and replaced with specialised properties for each preview type.
4. Fix LinkPreviewCard layout to better accommodate different content variants (missing properties, long/short title, missing description, missing icon)
5. Fixing the link preview context menu and click actions

fix: Move inline components to separate files

Fixing the linux builds using Qt 5.15.2 affected by this bug:
https://bugreports.qt.io/browse/QTBUG-89180

* fix: Align LinkPreviewMiniCard implementation with LinkPreviewCard and remove state based model filtering
2023-10-25 18:20:02 +03:00
Alex Jbanca 8ac6eb8916 fix(LinkPreviews): Fixing gif hyperlink detection in StatusChatInput
The link preview model can be filtered, but the hyperlink detection needs an unfiltered model to properly highlight all URLs. This brought in the need to separate the urls model and the link previews model.
2023-10-25 09:58:38 +03:00
Igor Sirotin e5b68e8823
fix: messaging settings and url unfurling fixes (#12457)
* remove browser selection setting
* remove main whitelist settings. replace tenorGif setting with gifUnfurlingEnabled
* remove old unfurling
* move history nodes section
* disable outdated e2e tests step
* remove isGifWidgetEnabled setting
* fix: StatusMessage height when gif unfurling disabled

---------

Co-authored-by: Anastasiya Semenkevich <anastasija.ig@gmail.com>
2023-10-18 10:03:32 +01:00
Alex Jbanca fcd9567677 feat: Add settings card to control link previews settings in chat input
This commit adds the link preview settings card in the chat input area and connects the settings to the controller.

Not included in this commit: Backend for the preserving the settings, syncing the settings and enforcing the settings on the backend side.

Whenever an url is detected in the chat input area, the link preview settings card is presented. This card enables the user to choose one of the following options:

1. `Show for this message` - All the link previews in the current message will be loaded without asking again. The current message can be defined as the message currently typed/pasted in the chat input. Deleting or sending the current content is resetting this setting and the link preview settings card will be presented again when a new url is detected.
2. `Always show previews` - All the link previews will be loaded automatically. The link preview settings card will not be presented again (in the current state, this settings is enabled for the lifetime of the controller. This will change once the settings are preserved and synced)
3. `Never show previews` - No link preview will be loaded. Same as the `Always show previews` option, this will be preserved for the lifetime of the controller for now.
4. Dismiss (x button) - The link preview settings card will be dismissed. It will be loaded again when a new link preview is detected

The same options can be loaded as a context menu on the link preview card.

Changes:
1. Adding `LinkPreviewSettingsCard`
2. Adding the settings context menu to `LinkPreviewSettingsCard` and `LinkPreviewMiniCard`
3. Connect settings events to the nim controller
4. Adding the controller logic for settings change
5. Adding the link preview dismiss settings flag to the preserverd properties and use it as a condition to load the settings.
6. Adding/Updating corresponding storybook pages
2023-10-12 15:40:01 +03:00
Alex Jbanca 422bb2c064 feat: Generate link previews in StatusChatInput - Small updates + Add basic zoom to Storybook InspectionWindow 2023-10-12 14:08:28 +03:00
Alex Jbanca d32af78bc0 feat: Generate link previews in StatusChatInput - Adding hyperlink formatting to StatusChatInput
Introducing TextEditHyperlinksFormatter.qml. This component is attached to a text edit and will provide the hyperlinks formatting based on the urls detected in the text. The URL detection is implemented in the backend and this component will receive the urls as a model. The formatting is done using regular expressions and the hyperlinks are inserted automatically in the TextEdit component. The purpose of this component is to insert the hyperlinks, remove the hyperlinks and update the hyperlinks style when a specific hyperlink needs to be highlighted.

+ integrate in StatusChatInput
2023-10-12 14:08:28 +03:00
Alex Jbanca 3ce9d66d25 feat: Generate link previews in StatusChatInput - introduce ChatInputLinksPreviewArea
This component is a wrapper for LinkPreviewMiniCard and StatusChatInputImageArea. The purpose of this component is to arrange the cards in a row layout and provide scrolling behaviour. This component also has an opacity mask that will provide a fade out appearance when the items are scrolled out of view.

+ adding storybook page
+ integrate ChatInputLinksPreviewArea in StatusChatInput
2023-10-12 14:08:28 +03:00
Khushboo Mehta d19e95cb5b chore(@desktop/wallet): SendModal: complete storybook flow
closes #12244
2023-10-02 12:27:15 +02:00
Teodor M. Ionita 8969b410f4 fix(StatusChatInput): allow image drop only if currently visible
Fixes #10885
2023-09-25 14:08:18 +03:00
Shinnok e532abb448
fix(StatusChatInput): New handler method for large messages
Instead of silently cutting off user text beyond the 2000
char limit, handle it more gracefully within certain limits.

Closes #11767
2023-09-22 17:25:38 +03:00
Khushboo Mehta 76615b0bf7 fix(@desktop/wallet): Move selected recipient and send type to nim
fixes #12206
2023-09-21 15:34:00 +02:00
Khushboo Mehta 1d99d8ae97 chire(@desktop/wallet): Streamline send modal folder structure
fixes #12140
2023-09-15 13:43:59 +02:00
Alexandra Betouni ed065a94f9 fix(URLUnfurling): Updated image context menu
Also moved copyToClipboard function in Utils
and updated Chat section to use it from there

Closes #11941
2023-09-12 00:04:08 +03:00
Michał Cieślak f8347af7b7 StatusChatInput: remove unmaintained integration with ChatCommandsPopup
The functionality for sending/receiving funds directly from chat
is currently not supported, both code and designs are outdated.
This commit removes integration part but leaves ChatCommandsPopup
component for potential future use.

Closes: #12118
2023-09-11 14:37:16 +02:00
Dario Gabriel Lipicar 50ffbb9dce feat(@desktop/wallet): add collectibles list to send modal
Fixes #12072
2023-09-11 08:02:02 -03:00
Khushboo Mehta 330ccb58a6 chore(@desktop/wallet): Move send modal logic over to nim side
fixes #11881
2023-08-30 14:45:40 +02:00
Michał Cieślak 988e7ac8d0 chore(Utils): remove backend-dependent escapeHtml method from Utils
StringUtils::escapeHtml from StatusQ is used istead
2023-08-18 17:07:20 +02:00
Igor Sirotin 80fef2179a fix: chat input preserved properties bugs 2023-06-29 11:29:52 -04:00
Igor Sirotin 407179cd10
fix(ChatColumnView): hide input when no active chat (#11107) 2023-06-15 16:58:32 +03:00
Lukáš Tinkl 045dfe60a0 fix: Channel picker doesn't render 1-1 chats correctly
- expose `colorId` and `colorHash`, the latter only for non-ENS verified
users
- use them in the results :)

Fixes #11086
2023-06-15 11:13:36 +02:00
Igor Sirotin 4849230054
fix(ChatColumnView): fix input `Unblock` button state (#11073) 2023-06-14 18:09:46 +03:00
Lukáš Tinkl 0b94c2b541 fix: revert to not destroy popups on close by default
- causing too many regressions along the way
- most of our popups are already destroyed properly inside Popups.qml
- in general, a Popup (Dialog, Menu, etc.) can be manually destroyed iff
it had been created using `Component.createObject()`, otherwise it's gone
for good until restart
- manually enabled the destroy-on-close in verified cases

Fixes #10948 (maybe some other dupes)
2023-06-09 00:44:27 +02:00
Lukáš Tinkl 0f9f5de267 fix: [chat] @mentions no longer working
fixup undefined references which caused the users model to become
empty

Fixes #11005
2023-06-08 16:19:53 -04:00
Lukáš Tinkl 4bf09e2b84 fix(StatusChatInput): handle non standard DND MIME types
- most browsers will pass a standard `text/uri-list` MIME type, however
Chrome uses `text/x-moz-url` so we handle that separately
(`drop.hasUrls` is `false` in this case)
2023-06-08 15:33:46 +02:00
Igor Sirotin bc4492b53a
fix: Create only one instance of `StatusChatInput` (#10928)
* Chat input area preserved properties
* Fix emoji/gif/stickers popups open/close logic
2023-06-07 16:18:29 +03:00
Patryk Osmaczko 35a2dd5244 [Popups]: added destroy() function in all popups by default
Also switched StatusModal to derive from StatusDialog instead
of Popup type

Closes #10149
2023-06-02 14:28:39 +03:00
Jonathan Rainville 3760e5f5a7 chore(StatusChatInput): hide ChatCommands for now
Fixes #10893
2023-06-01 15:18:32 -04:00
Igor Sirotin 7eed470829
fix(StatusScrollView): Change implementation to inherit ScrollView (#10789) 2023-05-31 23:58:23 +03:00
Igor Sirotin 5ff4b5a435
fix(MessageContextMenu): Cleanup. Separate menu for profile. (#10729) 2023-05-19 19:07:50 +03:00
Boris Melnik df88984b45 feat(image-album): Display album of images in replies
Fixes: #9957
2023-05-02 11:24:48 +03:00
Lukáš Tinkl 9aebf588a1 fix: reduce Image cache
for everything that's not a user interface element, esp. for static/big
images or chat/message elements which get served from locally anyway from
status-go

Iterates #10339
2023-04-27 13:56:39 +02:00
Anthony Laibe 542e5fdb6c feat(@wallet): remove usage of wallet section current 2023-04-27 11:58:27 +02:00
Lukáš Tinkl e170af5115 chore: use the "next" icon consistently
instead of variations of "chevron-*" and rotation
2023-04-25 13:24:17 +02:00
Lukáš Tinkl 812c0e9705 fix: suggestions list displayed when mentioning, still searches by alias
explicitely leave out searching by the `alias` (3-word name); it's
already enabled as a fallback to `name`

Fixes #9738
2023-04-19 15:28:21 +02:00
Lukáš Tinkl a2a6287537 fix(StatusStickersPopup): fix reloading views with online status changes
- hide the market and other stuff that can't be used while offline
- recent stickers and already installed packs can still be used; they
will be sent when we return online
- when we return online, reload the views instead of closing the popup
- fix an evil NIM typo that prevented reloading the already installed
sticker packs
- remove the NIM parts that haven't been ported to the async nature; just
`loadStickers()` on the QMl side does the trick
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 7a5dbbd952 chore(StatusStickerButton): refactor to use StatusButton
- make it possible for StatusBaseButton to be icon-only (ie just icon, no
text, rounded if needed)
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 05e5b3dad6 fix(StatusStickerPackClickPopup): fix passing/parsing price
when trying to buy a sticker pack
2023-04-18 13:45:38 +02:00
Lukáš Tinkl bfe44ca4a8 fix(StatusStickerList): add scrollbar to the grid view
and remove unused properties
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 70fa0bf3b2 chore(StatusStickerMarket): add scroll bar
and extract the buyPopup component out of the delegate
2023-04-18 13:45:38 +02:00
Lukáš Tinkl e506bbfd6b fix(StatusStickerPackClickPopup): fix crash
the button to (un)install would be either greyed out or result in a crash:
- we were passing the popup a wrong store (w/o networkConnectionStore)
- the condition to `greyedOut` was inverted
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 86a58d3298 chore(StatusStickersPopup): unify the footer height
and fix spacing
2023-04-18 13:45:38 +02:00
Lukáš Tinkl b2f5cd2b35 fix(StatusStickersPopup): prevent overlapping load error
Fixes: when the Mainnet is unavailable you see overlap between error and
the downloaded sticker packs
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 0cd7e3650a fix(StatusStickerMarket): do not confirm enabling wallet
wallet is already enabled by default for users and there's no way to
enable it if it gets disabled by using an env var
2023-04-18 13:45:38 +02:00
Lukáš Tinkl 8d322092cf fix: `packId` is a string in NIM backend
fixes the currently selected sticker pack not being highlighted in the
popup footer

The strict equality operator would no longer yield true here:
```
property int selectedPackId
...
selected: stickerPackListView.selectedPackId === packId
```
2023-04-18 13:45:38 +02:00
Igor Sirotin aefa2b9f48
fix(StatusQ): StatusQ is QML module (#10207)
* StatusQ QML module
* qzxing is static lib again
* updated StatusQ resources
* fixed Emoji lookup
* added display to tests-imports ci
2023-04-14 11:18:56 +03:00
Jonathan Rainville fe64d0eb04 fix(mentions): fix @everyone inserting incorrectly sometimes
Fixes #10212

The problem was that we were detecting that the name was empty string and comparing to another empty string and inserting that, which is incorrect.

There was also a problem with the detection of the name being completely written. onKeyPressed didn't take into account the new letter added, onKeyReleased does.
2023-04-11 09:30:20 -04:00
Lukáš Tinkl 3f66e41929 fix: don't trigger emoji replacement prematurely
... and support all emoji ASCII aliases

- previously we used to trigger the emoji replacement immediately which
led to various bugs like being unable to get the `🍻` emoji ;)
- we now trigger the emoji replacement after typing a certain sequence
followed by a space and then check that word for a possible emoji match
- as a result, we now fully support ASCII aliases, not only those having
a length of 2 (e.g. `:D`) but all the longer ones, like `O_O`, `:-#` or
even `-___-`
2023-04-07 20:40:56 +02:00
Lukáš Tinkl 19e7c42cc2 chore: extract input cursor delegate into StatusCursorDelegate
- unified UI/UX; no code changes, just reduces code duplication
- use the correct OS/platform blink interval with
  `Qt.styleHints.cursorFlashTime`
2023-04-07 20:40:56 +02:00
Lukáš Tinkl 05b28e6f6c fix: unbreak handling "up" key event in multiline text
pressing the "down" key was working fine, the "up" key to move the
cursor to the previous line was broken

don't force the focus if it already has it and let the parent TextEdit
internals handle the event if we are not interested in it
2023-04-07 20:40:56 +02:00
Lukáš Tinkl c8877aaf97 fix: speed up emoji parsing and replacements
extract the invariant/const parts out of the inner loop
(`emojiJSON.emoji_json.filter`); greatly speeds up typing speed
2023-04-07 20:40:56 +02:00