Changes:
1. StatusToastMessage now supports dynamic content height
2. Add new StatusToastMessage type: Danger
3. Update StatusToastMessage to support RichText content
4. Fix StatusQ sanboxapp compilation
5. Add the new StatusToastMessage content to sandbox
Because of https://bugreports.qt.io/browse/QTBUG-90740 inline context menu causes tests for StatusChatInput crashing (stack overflow) on 5.15.2 (this version is used on CI). The easiest option to solve that problem is moving inline component to a separate file.
Closes: #12435
- track the import progress manually as
`root.store.getCommunityDetails(key)` can optionally return `null`
immediately if the community is not known and launch an async task
- as an additional measure, since the above async call sometimes never
finishes, add a `Timer` that unsets the internal `loading` state
Fixes#12358
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
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
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
Adding LinkPreviewMiniCard component based on Figma designs. This component is similar to LinkPreviewCard, but has less info and a different format.
There is also some additional functionality attached to this card: close button, reload button and hovered state. The LinkPreviewMiniCard can have multiple states, based on content type and loading state.
+ Adding storybook page
Figma design: https://www.figma.com/file/Mr3rqxxgKJ2zMQ06UAKiWL/💬-Chat⎜Desktop?type=design&node-id=22341-184809&mode=design&t=151TjdzkzI7flR4P-0
- add a popup asking the user before clicking on an unfurled link
preview
- add a checkbox for the above popup to remember the trust for such
domain
- use local Settings to persist the "trust domain" locally; for
global persistence across devices, see
https://github.com/status-im/status-go/issues/4132Closes#12388
* feat(Communities): Introduce pending states for kick, ban and unban actions
Close#11795
* feat(Communities): Show bannedMembers pending states on the UI
* feat(Communities:) make kick, ban and unban methods async
* feat(Communities): add signal about community membership status change
* fix(Communities): move membership managment to to the appropriate model
* chore: review fixes
- Button from community column.
- Button from community overview.
- Updated storybook pages (settings overview related) according to new components requirements.
Part of #12174
1. A dropdown arrow should not be visible in the context of selecting token
2. Unnecessary padding added when expanding balances in the send modal popup
fixes #12254,#12256
Enable user action to repeat a Send transaction from the activity view
(HistoryView) and details view (TransactionDetailView).
Extend AppMain send modal entry and SendModal API to allow for selecting
all the required parameters for repeating a transaction.
Optimize update of start timestamp for activity filter only when user
attempts to open the filter panel.
Closes#12122
- Updated `CollectibleDetailsView` to show owner and tMaster token collectible types with the correct design.
- Updated `CollectiblesView` to show owner and tMaster token collectible types with the correct design.
- Modified send footer option if collectible selected is an owner token.
- Added logic to wallet rootstore to handle selected collectible data.
- Reverted changes on property selectAccount in sendModal
Closes#12172
- Applied new design to transfer ownership popup.
- Added support in storybook.
- Added navigation to transfer ownership popup from community settings / owner token footer.
- Added navigation to transfer ownership popup from community settings / overview.
- Linked wallet send modal to the transactions popup with the needed pre-populated data.
Closes#12171
Implementing the new design for the following preview types:
- Community and channel
- General link previews (Youtube, github etc)
- Image link preview
The storybook implementation has all these links available for testing.
Missing features in the app:
- Logo (favicon)
- Community card
- Image preview details (title, domain name)
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
* Adjust cancel button for chat delete/leave dialog
Show the Cancel button for both 1-to-1 chats
and channels. Also use the "normal" cancel
button type instead, otherwise both confirm and
cancel dialog actions are buttons in red color.
* Ask for confirmation before clearing chat history
Also move the context menu action to the
bottom section along with delete/leave chat,
since both are irreversible operations.
* Adjustments to chat context menu
- To show the vertical section separator if either
"clear history" or "delete/leave" destructive actions are
enabled.
- Show either the "clear history" or the "delete/leave"
actions in red, but not both at the same time.
* feat(Communities): Refactor token holder list item to separate file
Close#11858
* feat(Communities): Use contact details for community member info
* feat(Communities): reuse StatusMemberListItem for member token holder
* Review fixes
Co-authored-by: Michał Iskierko <61889657+endulab@users.noreply.github.com>
---------
Co-authored-by: Michał Iskierko <61889657+endulab@users.noreply.github.com>
Fixes: #11480
* hook up join popup to permission model
* fix chats not being put in the permission model
* make it work with channel permissions as well
---------
Co-authored-by: Jonathan Rainville <rainville.jonathan@gmail.com>
- It adds proxy of wallet accounts only in a single place (wallet root store) and pass the tuned model through the rest of views.
- It updates `storybook` accordingly.
Closes#11829
* rename `fetchMessageByMessageId` to `getMessageByMessageId`
* move reply clicking logic to `StatusMessageReply`
* make message found animation faster
* `asyncGetMessageById`
It improves workaround for QTBUG-87804 in StatusDropdown, to work
nicely whenever content is set via contentItem or not. The same
solution is added to StatusDialog.
Closes: #11768
Restrict the character set to basically 7-bit ASCII plus some punctuation
in community/chat/profile related popups in order to:
- reduce the risk of impersonation (UTF-8 characters might look the same
despite being a different codepoint)
- narrow down the set of characters in order to keep the new share URL
format short
Closes#11307
- fix missing profile image
- fix displaying wrong name when a nickname or ENS name is present
- fix ID verification flow ignoring nickname
- fix empty results when a contact has only an alias name
- fix needlessly requesting contact details several times (and
overwriting it); we get this info already from Popups.qml
- switch the popup to `StatusDialog` and fix hardcoded height
Fixes#11726
Bump Status GO to support session based activity requests
Transaction module was replaced by activity module,
this change removes the old code.
Details:
- Remove transaction.Item and use the DTO directly
- Replace the still using missing functionality
- Remove old way of fetching transactions in response to the history event
- Use activity filter to provide history for "recents" in Send.
Closes#11339
Also: refactor(communities), moved request to join funcs to communities module
This is needed because we can now request to join from the Import popup
Closes#11242
This partially addresses #11186 as it implements the delete
functionality for community tokens.
If a deployment failed, users have the ability to delete the added
community token from the list.
The retry functionality will be implemented in a follow up commit.
Needs: https://github.com/status-im/status-go/pull/3794
- display an info box when in wallet testnet mode with a CTA to disable
it (functionality enabled for production builds only)
- the CTA can be tested/seen via OverviewSettingsPanelPage storybook page
Closes#11468
- Added `storybook` support to change minted tokens model with Owner and TMaster tokens.
- Added new properties into the `tokenModel` model.
- Extended `CollectiblesView` to allow Owner and TMaster tokens representation.
- Updated `MintedTokensView` in order to display Owner and TMaster tokens.
- Added logic to `enable/disable` MINT and AIRDROP token depending on the owner / tmaster tokens deploy state.
- Added temp buttons in MINT and AIRDROP pages that keeps enabled the flows although owner and tmaster backend is not ready.
- Extended navigation from outsite to minting section, depending on user profile and owner and tmaster states.
- Hide footer options in case of owner token item visualized.
- Added retry flow.
Closes#11299
Adding the export control node popup. The popup is behind an authentication wall.
1. Create ExportControlNodePopup qml
2. Add the popup in storybook
3. Create authentication flow with qml callback to open the popup after authentication
4. Add the popup open action in Global.qml
- It creates a generic `TokenInfoPanel` that will be reused in different mint token views.
- It creates new `EditOwnerTokenView` and storybook page support.
- It adds new `EditOwnerTokenView` into the minting flow, linking sign transaction flow and adding needed method to the store to do the deployment.
Closes#11296
- labels changed in Figma, updated in the app
- `Show encrypted QR of keypairs on device` is displayed only if needed now,
for this I had to add account/keypair `operability` feature, so far it handles only
displaying a context menu option, later in a separate issue a proper functionality
will be added
- wallet related toast notifications moved to the proper place (`AppMain.qml`, where
actually all notifications should be handled), not in the place where they occurs, we
need to review other notifications as well and move them there
Adjst burning and minting flows to handle assets.
Supplies are passed from qml to nim as strings - "2" for ERC721, "1.5" for ERC20
String amounts are converted to Uint256 type. Additionally ERC20 amounts are converted to basic units (wei-like, decimals=18).
Uint256 values are passed to backend functions and then coverted to strings which can be converted to bigInt.BigInt types.
Supply and RemainingSupply are exposed to qml as floats.
Issue #11129
1. Adding OverviewSettingsFooter.qml according to design
2. Adding the footer to storybook
3. Add the footer in the overview page
4. Remove the squish tests for the old footer
- It creates specific token artwork panel for owner token and token master token representation.
- It adds support to new component in storybook.
Closes#11294
- Renamed main `CommunitiesPortal` folder to `Communities`.
- Created new `layouts` folder.
- Moved layout files from chat to communities.
- Created new `helpers` folder.
- Moved helpers files from chat to communities.
- Moved `controls/community` files from chat to communities `controls`.
- Moved `panels/communities` files from chat to communities `panels`.
- Moved `popups/community` files from chat to communities `popups`.
- Moved `views/community` files from chat to communities `views`.
- Moved `CommunityBanner` file from shared to `Communities/controls`. Only used in communities context.
- Moved `CommunitySettingsView` and `CommunityColumnView` files from chat to communities `views`.
- Moved `PermissionsStore.qml` file to `shared/stores`.
- Updated imports.
- Updated storybook.
Part of #6204
Refactor code to use the token identity instead of token code
Removed the debugging activity view as now we have the API integrated
in the history view
Fixed the activity type in the activity entry
Closes: #11025
- introduce StatusButton storybook page with controls to play around
with the its options and variants
- StatusBaseButton: make the content item horizontally centered by
default
- StatusBaseButton: remove `textAlignment` and fix `textFillWidth` for
the intended usage
- fixup usage of the 2 above options which were introduced merely as a
workaround, mostly in wallet + corresponding storybook pages
Fixes#10903
Bumps status-go to include the new API.
Add a new RecipientsModel to the activity controller.
Extends the activity Controller with API to access and manage data in
the RecipientsModel.
Resolving addresses to names remains to be implemented.
Updates #10025
- differentiate between "Close" and "Leave" a community where the former
applies to spectated communities
- move the "leave community" confirmation popup to a shared place
(Popups.qml), extend it with the outro message and reuse it everywhere
- don't let admins leave a community
- some minor cleanups and dead code removals
Fixes#10963
Bump status-go with the refactoring of hasMore and add offset
Add support for continuously loading activity in the wallet API.
Extend the debugging demo with continuously loading
Closes#10994
- Created `TokenObject` files and use them inside `CommunityNewTokenView` instead of plain properties.
- Updated `CommunityTokenView` to use `TokenObject` properties instead of plain properties.
- Updated store calls to use `TokenObject` properties instead of plain properties.
- Remote destruct properties renames.
- Airdrop navigation extended passing token type (asset or collectible).
- Updated `storybook` according to new changes.
Bump status-go to include the async API changes
Handle the wallet-activity-filtering-done event
Propagate the has more flag
Extend the debugging UX
Update #10994
Detect the MIME type using `QMimeDatabase` from the actual content and
save it in that same format using `QSaveFile`, as `QImage` does NOT
support saving a GIF
Fixes#10747
- 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)
- 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)
* feat(Chat): Display MutualStateUpdate system messages in 1-to-1 chats
* feat(ActivityCenter): Add AC notification when a user get removed by another contact
* fix: crutch fixing segfault on contact removal
- do no let text/input overflow our overall width
- set the scrollview horizontal padding to 0, the content item has its
own margins already
Fixes#10915
- It refactors `SettingsPageLayout`.
- It adds `retry mint` and `delete` options when deploy process fails.
- It renames `RemotelyDestructAlertPopup` to generic name `AlertPopup`.
- Added assets list UI.
- Added shape rectangle for empty lists.
- Added filter by asset / by collectible
- Updated storybook accordingly.
- Added flow to open token view depending on type
Closes#10625
Fixes#9736
When pasting the chat key of a user to whom you already sent a request to, but for which they haven't answered yet, we open the popup instead of doing nothing.
If you paste the chat key of a user you are not a contact at all and sent no request, it opens the contact request popup as before.
Also, same as before, if you paste the key of a mutual contact, their name will show in the suggestion list.
Bumps status-go HEAD to include required changes
Updates Nim filter components and APIs to follow API changes in
status-go
Complete the debugging code
Add TODO placeholders to be completed in follow up PRs: collectibles ...
General improvements and refactoring
Closes#10634
Add the possibility of retrieving the data of wallet activity based
on the given filter criteria.
Major changes:
- Bump status-go with the new equivalent API
- Add temporary developer tools
- Debugging ActivityView QML component to test filter and display
the activity
- Add activity Nim package and synchronous controller and model
Considerations
- Have the model synchronous for the first iteration and then move to
async while implementing the fetching mechanism
- Use QtObject instances in the model instead of roles over items as
agreed with the team
- Simplify the implementation by having a simple presentation layer
using backend (service also in the future)
- Small required fixes and improvements
Closes: #10633
Updates #10366
- Added property `remotelyDestructState` and `burnState` in `CommunityCollectibleView`.
- Added `fire` and `loading` icons while destruct/burn is in progress.
- Added short animation when destruct/burn process is completed.
- Renamed `Constants.DeployState` to `Constants.BackendProcessState`, more generic one that can be used for different processes.
- Updated `storybook` with new options to test animation.
Closes#10603
Replaced basic image selector to `EditCroppedImagePanel` component in mint token workflow.
Extended `NoImageUploadedPanel` to allow custom texts and some sizing improvements.
UI part of #10317
- Updated expected model roles (removed `selfDestruct` and `selfDestructAmount`)
- Self destruct tokens list management is now done inside `SelfDestructPopup).
- Store receives a js array with {walletAddress, amount} roles.
- replace qml owners model with Nim one
- get token owners from wallet service
- keeping owners cache in community_tokens/service and refresh every 10 minutes
Issue #10254
- CommunitiesPortalLayout was the last piece still unconditionally loaded
on startup -> fixed
- extract the `communitiesStore` into AppMain to be able to reuse it from
other components
- move the import/create community dialogs to `Popups` (reusability)
- cleanup and remove some dead code, fix warnings
Iterates #6204
Also:
test(suite_communities): Fixed community related tests
- A new intermediate popup is now displayed when user clicks on `Create New Community` button from `Community Portal`.
- Reformulated `tst_communityPermissions` since now it is a default option without the need of activating it from experimental feature's section.
Closes#10115
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
- move the add/edit FAB icon to the topright corner as designed
- prepare UI changes for being able to delete banner/logo (missing impl
in status-go)
Fixes: #9680
- expose "isEnsVerified" as model role
- fix returning "ensName" when the user is not ensVerified
- react to nickname updates correctly
- fix sorting in the user/member list view
the contact details are fetched imperatively in these popups (not via
model updates), so we need to setup a signal to be able to react to those
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
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
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
```
Implementation of rounded corner line has been changed from Canvas to
plain Rectangle, fixing problem with Canvas not repainting when
dependent properties are changed.
Closes: #9668
Implement the UI part of Profile/Settings/Showcase:
- Communities/Accounts/Collectibles/Assets tabs
- drag and drop of items between "hidden" and "in showcase" sections
- ability to set individual items' visibility
- persistency (showcase saved across restarts), not exposed yet due to
missing backend API
Closes#9936
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.
Fix balance in loading state to use loading component instead of 0
Fix width of some components in loading state.
Remove property modelDataValid in favor of existing isModelDataValid.
Fix loading items not always properly removed before adding new
transactions.
Fixes#9617
... 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 `-___-`
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
Correctly clear the chat input
We enable/disable the chat input on various occasions (switching
channels, communities, checking for the person being a contact, etc.).
When we do so, we clear the text of the input which causes all sorts of
internal handlers to get fired, namely the `onTextChanged` part which
parses the text, emojis etc... which is very time consuming. More fixes
here in the followup commits; but by using `clear()` it's much faster,
resets correctly the internal state and also doesn't fire when the input
had been empty already before. Found with QML profiler