Fixed StatusBaseButton to expose a property to load either normal
icon or a round one.
Implemented new wallet navigation according to design in Figma.
Fixed regression: small accounts icons in accounts list view.
Updated wallet test.
Fixes#8598
since this component is performance critical, optimize it some more by
extracting some common constants so that they don't have to revaluted
every time
- Updated initial dropdown view for assets and collectibles to directly show the list of corresponding elements.
- Updated assets and collectibles panel when an item is selected, according to new design.
- Updated collectibles logic when amount is 1.
- Added collectibles group item as part of the selectable's options.
- Updated `storybook` according to new changes.
- Created reusable `TokenItem` component.
- Updated `CommunityPermissionsHelpers`.
Closes#9043
The date parsing is time consuming and it needs to be used with care in the delegate
perf(chatScroll): Fix StatusDateGroupLabel comment - standaloneMonthName
perf(chatScroll): fix comments on Optimise timestamps
perf(chatScroll): Optimise timestamps - bring back comment
perf(chatScroll): fix activity notification
Provide the needed data from the nim model directly to the delegate. This way whenever a delegate needs to display the data it doesn't need to reach the backend.
perf(chatScroll): Fix comments on Avoid calling the backend on delegate creation/binding
perf(chatScroll): Avoid calling the backend on delegate creation/binding - add TODO comment on senderColorHash default
perf(chatScroll): merge quotedMessageAuthor details
perf(chatScroll): Fix nim tests
perf(chatScroll): Fix merge error - messages_model.nim
Adding .pragma library to the js libraries because the entry point on these libraries were called multiple times. There is no need to share the qml context with these libraries.
Use find() instead of forEach() on emoji array to find an item
Use the colors defined by design:
```
Light theme: Light Desktop / Blue 20% (4360DF 20%)
Dark theme: Dark Desktop / Blue 20% (869EFF 20%)
```
Fixes#8271
- replace StackLayout with Loaders, activate them lazily and never unload
when staying inside the Settings sections
- drop some imperative code
- faster startup, subsection load times and quick switching between subsections
Fixes#8781
This is to ensure users don't get confused with the fact there's
more checkboxes to check in the modal until they can continue.
Depending on viewport size, checkboxes can be hidden but it's not
obvious that the area is scrollable.
See #8651Closes#8651
Because we've switched to `QuotedMessage` as an attached payload to
messages to make message replies data more reliable, we lost some of
the author information in imported messages, that was available prior
to that move.
This commit introduces `quotedMessageAuthorDisplayName` and
`quotedMessageAuthorAvatar` to our model so it can be set in case
we can't retrieve contact details for a given message (which is always
the case for imported messages)
- Logic related to operators removed.
- Dropdown `and/or` removed.
- Updated `PermissionItem` to display only the tag and not the operator.
- Updated `storybook` according to new changes.
Fixes#8500
Adds the action to copy the right-clicked message's text.
It copies the unparsed text (no html).
For that, I had to add it in the MessageItem and expose it in the model.
I also fixed the copy MessageId action that didn't show + didn't work even if it would have shown.
Plus some small cleanups.
Adds `deleted` to the QuotedMessage object so that on the frontend, we can show "Delete message" only when we know the message was deleted.
Otherwise, when we don't know the quoted message, we show "Unknown message [...]"
Exposed new properties in `SettingsDirtyToastMessage` to customise buttons texts.
Exposed new properties in `SettingsPageLayout` to customise dirty toast buttons texts.
Fixes#9046
- another bit on the road to reduce startup time and be more conservative
towards RAM usage
- remove more imperative JS code
- only preload/prepare the currently active community, not all of them on
startup
Fixes#8782
- follow the order of properties that `ProfileUtils.displayName()` uses
elsewhere in the application
- prefer nickname or ensName over displayName if the user has them
Fixes: #8691
- make the left/right padding and internal spacing consistent with the
Figma design
- the padding itself got broken by a behavior-incompatible change introduced in
17aaec2d53 (diff-451194c72ab50ea2586b6f1d6521b81d9a93206069788117326788be28b638fd);
this change is however correct but we can no longer rely on the
implementation detail that used to "reset" the left/right padding to its
default value when we set `leftPadding: 0`
Fixes#8910
Considerations:
- Change validation mode for StatusText to have validity from the start
- Don't show a color selection if the selected color doesn't match the
available color palette
- Don't enable button if nothing changed
- Tests
- Add test for validation mode that shows how the valid property
behaves based on findings.
- Fix text to expect valid on no input for the default control
Fixes: #8211
We always take the plain text from the clipboard but even the plaintext
can contain HTML tags, so escape those and wrap the result in a `<div
style='white-space: pre-wrap'>foo</div>` container. That way we preserve
not only the linebreaks but also any whitespace or tags.
Fixes#8919
Added `StatusStepper` component which displays total number of steps which need to be passed,
marking each completed step based on `completedSteps` property.
Needed for importing a Keycard into the app flow.
Corresponding page in API Documentation added.
Profile fetching (display name and identity images) implemented on the status-go side and
integrated in the desktop app.
Signal notifying about the progress while fetching backed up data from waku implemented on
the status-go side and integrated in the desktop app.
`I already use Status -> Enter a seed phrase` and `I already use Status -> Login with Keycard`
updated so they match figma now.
Fixes: #8467
Added padding between messages as specified in Figma:
topPadding - 8 if the current message has header, 2 otherwise
bottomPadding - 8 if both current and next message have header, 2 otherwise
- Updated `StatusItemSelector` API to allow other asset sizes and leftPadding.
- Applied different asset size in holdings tags in `NewPermissionView` to fit the design.
- Changed `StatusListItemTag` API. Now it is based on `Control` component.
- Updated needed qml files to fit with the new `StatusListItemTag` API.
- Added `elide` property in `Text` component to better visualise the content when a specific width is forced.
1. Don't allow mention invalidation by altering mention with mouse or keyboard
2. Don't allow mention duplication on the same position
3. Clean mentions after text with mentions changes
4. Fix mention selection
5. Make sure mention is separated by text with valid separators (we're using only space)
6. Cursor will consider the mention as an object and will jump over it as it would be a single character (placing cursor inside leaves room for mention invalidation)
- Fixed test scenarios broken due to new user profile design.
- Added new verifications in social links: github, youtube, discord and telegram.
- Scenario statements reorganization.
Fixes#8281
Fixes#8848
I'm not 100% sure why the issue is fixed by this, but I was able to pin point the source with a bisect and by running the Squish test for public chats over and over.
feat(CommunitySettings): Implement UI for`edit`, `duplicate` and `remove` actions in community permissions page
- Enabled `duplicate` action (mocked).
- Enabled `delete` action (mocked) and added / updated navigations in case all permissions are removed.
- Added delete confirmation popup.
- Enabled `edit` action (mocked) where changes are detected and the `dirty changes toast` appears properly.
Closes#8581
HTML doesn't know about TextEdit's wrapMode line count so
when text was a quote it was seeing it as single line thus
painting a singleline height quoteline.
Closes#8109
Fixes#7643
This adds the backend to resend. It then hooks the button to it.
This also adds a visual state for when we are sending. This gives a good indication that a message was sent.
Added property `previousPageName` into `SettingsPageLayout`.
Added needed slots in `CommunitySettingsView` to get `previousPageName` property changes and display the correct string.
Renamed `updateState` method to `navigateBack` to have a better accurate name.
Fixes#8455
- Created page and added editor for specific page.
- Created needed mocked models.
- Added background in permission related pages to ensure correct dark mode visualization.
- Added `CommunityPermissionsSettingsPanel`.
- Created panel item editor and basic panel editor layout for `CommunityPermissionsSettingsPanelPage`. Still not linked to a model.
- Added mocked data for collectibles and tokens.
- Created `ChannelsModel` mocked data.
- Added edit / duplicate / remove signals logs.
- Created `CommunityPermissionsView` and integrated into the flow.
- Created `PermissionItem` component.
- Added `holdingsListModel`, `permissionsObjectModel` and `channelsListModel` flows with mocked data.
- Added `isPrivate` permission property.
- Added button header in `SettingsPageLayout`
- Added signals/methods for edit/duplicate/remove permissions
- Created new file `OperatorsUtils.qml` specific for `Operators`
Fix a bunch of problems with handling sound/notifications related options
coming from the backend:
- `volume` and `notificationSoundsEnabled` live in a different settings
object; adjust the stores for that
- unbreak loading the actual wav/mp3 files (was never working on Linux
outside of AppImage!) -> use "qrc:/", same as the NIM backend does
- fix the volume scaling (backend has [1,100], QML is [0, 1])
- simplify our Audio QML item interface; no need for an extra property
and resolving the URL twice (which results in broken scenarios mentioned
above); we know which sounds we want to load
Closes#8668
Status allows for importing communities via their private keys.
There's a requested feature that users should be able to import a community via
its public key as well.
This will behave differently as private keys won't give users ownership
of the communities. When importing via a (compressed) public key, Status
will try to fetch information about the community from the network. If it
finds such information, it'll load it into the app and create
a communitiy view from which users can then request access.
If it can't find a community or community information in the network,
the user will get a dedicated error message.
This commit also refactors the `ImportCommunityPopup` such that it uses
`StatusDialog` and updates the copy accordingly since importing via
public key is now possible as well.
Closes#8339
- rework the way social links are displayed/editted; we now only allow to
enter a so called "handle" and then substitute that in the final URL
template
- move the "icon" model role to NIM backend
This has several advantages:
- we display only the "handle" and don't have to elide some long URL
- we won't let users enter random URLs into their profile and spoof the
viewing part into clicking it
Additionally, make the social link "button" clickable -> navigate to the
target URL, and make the tooltip behave as "usual" (on mouse hover).
Fixes#4943
The custom OS notifications we have in place make it possible to click
the notification and go to the right place in the app, but it causes a
big issue in Windows; it breaks the tray icon, it becomes no longer
clickable.
The easy fix I did here is the go back to using the QML sendMessage
function. It works fine to send the notif and the tray icon keeps
working. The only downside is we lose context when clicking on the
notification, so it doesn't navigate to the chat.
IMO, this is a good tradeoff.
- 01: Keycard settings menu labelling - fixed in this commit
- 02: Modal title renaming - not developed yet
- 03: Additional decision diamond and flow - not developed yet
- 04: Modal title renaming - not developed yet
- 05: Modal title renaming - done in issue #7035
- 06: Copy change - fixed in this commit
Fixes: #8458
- reduce the file size by about 5%-20% w/o any change in visual quality
- profile_fetching_* images replaced by the resolution we need;
originally it was 1700x1700 and about 4MB each(!)
- when calling `Utils.getColorHashAsJson()` we don't actually need to
issue ID verification requests at all and there might be situations when
we know beforehand that we don't need the ENS verification either
- change these helper functions' syntax and do early returns in that case
- in MessageContextMenuView, the "contact details" were duplicated, so
remove one
- remove dead code, fix some warnings
- recognize parentheses, `(` and `)` respectively, as part of a URL when
linkifying the hyperlink; these are valid URL characters
- also correct the "status-im" deep link prefix to the new form
Fixes: #8512
This aims at bringing the notifcation display closer to what regular
messages look like, namely:
- show compressed chat keys
- don't show identicon rings for ENS names
- fix timestamps and their tooltips (`notification` isn't part of StatusMessage!)
- unbreak clicking outside of the whole popup overlay (`activityCenter`
is undefined)
- fix blurry checkmark icon for marking notification as read
This adds support for receiving copied images from the clipboard
and pasting it into the chat input.
After pasting, chat input will recognize the image and render a preview
similar to how it would do it when selecting images via the file dialog.
**Also important to note**:
At the time of this PR, it seems that desktop only supports sending
jpegs to status-go. I'm not sure if this was deliberately done this way
because the protocol says it supports jpg, png, webp and gif.
Because of this, pasting for example pngs will work, however
transparency will be lost (which is also most likely the cause of #8820)
This PR operates on that assumption. So while it adds support for
copy/pasting images, it does not address the lack of file type support.
Closes#3395
For some reason stickers are not loaded for the first time. User has now
the ability to retry the loading procedure. Retry action loads stickers
successfully in most cases.
fixes: #7995
Enabling the community archive protocol could fail when another app is
using the same port that is specified as torrent client port.
This would cause the app to crash.
With these changes we:
1. No longer crash the app but output an error in the logs
2. We popup a dialog telling the user that the specified pord is in use
Closes#7328
similar to the profile dialog, we need to add an opacity mask in front of
the contentItem to ensure the rounded corners at the bottom are preserved
when we have no margins/padding inside the popup
Fixes#7759
- Added specific `bdd_hooks.py` for `tst_passwordStrength`.
- Updated `tst_passwordStrength` screenshots (now taken when input is focused).
- Restored `tst_statusLoginPassword` scenarios.
- `tst_statusSignUp` will only contain positive signup test case.
- Created new test case tst_signUpSeedPhraseNegativeCases`.
- Created new test case `tst_signUpNegativeCases` with specific `bdd_hooks.py`.
Closes#8013
The profile fetching view is part of the onboarding process. This view should be displayed on existing user onboarding flow, while the profile is being fetched in the backend.
It has 3 states:
1. Fetching in progress
2. Fetching completed
3. Fetching error
Prior to this commit we were merely checking if the message in question
was the last one.
With this commit we now check whether there's a reply in the first place
and whether the reply-to-message is the correct one.
We also distinguish whether the message we're replying to is the one
from the loggedin user (and not someone else's)
Adds a networks proxy model to be used with the original source model
for visualization and independent selection of isEnabled (as isActive) for a custom
purpose.
Use the proxy in the receive modal dialog for selection of networks
to be included in the address. This way the view follows the original
model but allows independent selection of networks.
Closes: #8180
Quick integration of fetching balance in the current chart view.
The proper implementation requires refactoring the QML views to separate
price chart, that depends only on the token and chain, from balance that
depends on token, chain and address.
Closes: #7662
Applied the following solution agreed with design team: When a user types their message, hitting enter, or pressing send, should automatically create the chat and send the message, removing the 'To' input field and Confirm/Reject buttons (that means, directly navigating to the new created chat).
Fixes#7706
- do not restrict NicknamePopup's regexp to ASCII characters
- a similar thing could be done to the user's DisplayName but currently
that's blocked on status-go side
- uses RXValidator from dotherside
Needs status-im/dotherside/pull/74
Fixes#8115
Since tertiary action for the keycard popup module is always used to cancel/invalidate
the current flow, it's renamed now to cancel action (avoids confusion this way and it
seems more intuitive. It doesn't set any state. It should be defined if it's possible to cancel
the flow from the current state.
This commit fixes a scrolling on macOS using trackpad in the context
of Add Wallet Account using seed-phrase.
Considerations:
The scrolling of advanced input with seed-phrase selected was failing
when mouse pointer was moving over a word phrase.
Scrolling of the popup content in AddAccountModal would not work
when the mouse pointer was over a StatusSeedPhraseInput form
the ImportSeedPhrasePanel
The identified root cause is StatusBaseInput's flicker which captures
the mouse wheel event. It seems the trackpad wheel events are handled
differently on macOS by the flicker and not propagated to the parent.
Fixes#5355
When typing at non-end position (in channel name filed) cursor
is no longer jumping to the end. Additionally binding loop
on "contentWidth" is fixed.
Closes: #7805
closed
Otherwise, the loader stays active, which requires users to hit CTRL-F
twice to reopen it again (because it'll first deactivate, then activate
again).
Fixes#7989
There was a requested design change where no longer wanted to have
checkboxes to decide which files will be included for a discord import,
but rather have an "X" button that enables users to remove items.
This commit implements this refactor.
In addition, it ensures that the already loaded discord categories and
channels that have been extracted from validation, are kept in sync as
well.
Meaning, if a user removes a file from the file list, the corresponding
channel will be removed as well.
If there's not channel in a given category, the category will be removed
as well.
Closes#8125#8126
- Created `bdd_hooks` that contain the sing up steps just only once in the feature start and the needed start steps depending on the test case.
- Updated feature files removing sign up steps and given/when/then reorganization.
Closes#8026
An issue with adding wallet account was happening only for a new user,
the reason for that was incorrectly set keystore path and keystore file couldn't
be found on the statusgo side because of that.
Setting `visible` or `enabled` to `false` stops mouse events from being
propagated -> hide the original message using `opacity` instead
Fixes links being unclickable when the gradient/mask is in effect
Closes#8116
Property bindings were added for showMessageLinksSwitch in order for it to change the checked state whenever previewableSites model has any item checked or displayChatImages setting is true.
There are two main changes in the model -> view relationship:
1. The model coming from the store becomes the only source of truth and the UI will only change when the model changes. This means that when another UI component from settings menu wants to change some setting it needs to update the model, not UI components directly.
2. When the store will provide a new model we will update only rows that are different in the current model.
Those have been changed in status-go, resulting in wrong visualization
of import warnings and errors.
This commit adjusts them so they match the correct codes again.
so that we always have a higher version than the latest stable release
(0.7.x at the moment), giving us a buffer to further bump it to 0.8.9x as
we approach the 0.9.x series
- fill the senderId just like other messages
- add some checks in Utils since the "publicKey" (ID) coming Discord
isn't in the format we'd normally expect
Closes#6678
due to the refactor, StatusMessage is no longer the toplevel item inside
the delegate, so adjust the functions
some minor cleanups and dead code removals; striving for keeping the
number of properties and bindings inside a ListView delegate at a minimum
chore(@storybook): add language & currency settings view to storybook
chore(@storybook): add language & currency settings view to storybook
fix storybook menu
remove qsTr
This adds the ProfileDialogView to storybook pages
For now, there's just one control to switch between own profile and
another profile; more to come in later PRs.
The mocked global objects (mainModuleInst and globalUtilsInst) are
injected via QML
Fixes: #7820
Prior to this commit we would reset the file list (and categories and
channels) whenever the `CreateCommunityPopup` was closed.
This made sense because at that point we could assume that the user has
decided to somehow stop the process of an import, so the next time the
modal is opened again, we want that data to be reset.
However, it turned out that this introduced a bug in the scenario where
and import is running, and while it's running, when the user decides to
hide the progress modal, it would reset the warnings count, resulting in
the progress banner to show an invalid state until the next progress
signal was emitted.
We don't want to reset this data every time we close the modal. We only
want to reset it when we know there's no import in progress.
Fixes#7787
- wrap everything we can in AppMain with a (async) Loader
- do not access globals w/o a proper store
- drop some dead code
Although I wasn't able to completely fix the bug, the ~50% improvement in
startup time is still worth trying imho. On my machine, the startup time
went down from ~7s to under 4s.
Related: #7292
- qml_base.ts is created as a reference point for translators
- qml_en.ts is a minimal overlay translation, providing just the needed
plural forms
- adjust the script to generate the above TS files
- fixup some leftover qsTrId() calls and the qmake file
Remove the workaround, to the approach of using the complete last word event,
for three letters seed-words. The three letters condition introduced
another side effect when completing the "sentence" and made the
_internal.mnemonicInput contain an extra duplicate word.
Unify the event `doneInsertingWord` generation for the internal purpose
with the external. This will trigger a secondary for some usage but
I see no problem with even in other usages.
Fix corner case when user enters a correct seed word that is not singular
and uses the mouse to jump. In that case the doneInsertingWord is not triggered
Fixes: #7715
Keycard settings view - UI - developed in a way that list of keycards is displayed
if there is at least one keycard set up. If the a keycard is locked or gets locked it
will be correctly marked in red. Selecting keycard from the list, its details may be
seen and additional flows may be run for it (so far only unlock flow is developed).
Fixes: #7025
Updated `Create` and `Confirm` password views according to new design decisions taken to give consistency to the onboarding screens (related to font-size).
Updated related squish test cases: Screenshots updated with new font-size and refactored some objectNames and objects that where using `text` property instead of `objectName`.
Updated `Input` components to `StatusPasswordInput` ones.
Fixes#7447
This workflow doesn't save the keystore files which are required in order
to create new wallet accounts. It is not yet clear how to proceed with
saving the keystore files without an accountId.
See `setupAccountKeycard` which is missing `storeAccount*` calls vs
working workflow done in `setupAccount`
Closes: #7867
Enabled restart info popup after language is changed --> Workaround to temporary resolve the crash we have when language is changed (`startupModule` is null and some qml bindings are still calling this dead pointer) so, change language will not retranslate and instead, also on mac and win, the app will need a restart to apply the new language.
Disabled retranslations for all os on the corresponding service.
Will temporary fix#7709
- user is able to see community without being a member
- invitation bubble always display "Go to Community"
- join community buttons are displayed in community view
main part of: #7072
This broke with the introduction of discord messages because we were
setting the `assetSettings.isImage = true` when `isDiscordMessage`.
This has overriden the default config for all non discord messages which
check for whether the asset source includes `("data")`.
There was an issue where imported messages from third-party services
would cause super laggy scroll behaviour in the chat view.
The reason for that is that on scroll, the app keeps calling
`getVerificationRequestFrom()` on the chatkey of the community.
Typically the results of these requests are cached so that it should
perform the call only once, but because there's no actual verification
request/contact for the community chat key (all third-party messages are
signed by the community), the call keeps on happening over and over.
This commit adds a flag to `getContactDetailsAsJson` and `isEnsVerified`
to control whether or not the call to `getVerificationRequestFrom`
should in fact be made (which should not be the case for imported
messages).
The result of this is a smoother scrolling experience.
Fixes#7767
- 'Settings' title removed and it is shown instead the Community name and number of members
- Overview icon updated according to the design
- Icon of members size updated according to the design
- The spaces between edges of the Secondary Nav tab and items updated according to the design
Fixes#6785
This adds the UI plus all necessary models and signal handling to render
discord import progress in the desktop application.
It also introduces message handling for discord chat message types.
Requires status-im/status-go#2826 to function
Co-authored with @caybro
- remove the extra spinner (ok'ed by John and Benj)
- use the more modern StatusIcon, w/o the unconditional ColorOverlay
- some minor cleanup
Closes: #7645
Direct binding was causing problems with height calculation in some
environments (qt 5.15) and lack of binding in other (5.14). This is
a solution which seems to work in both cases.
Closes: #7703
Created new `suite_messaging` where all related chat tests will be migrated to.
- `tst_ChatFlow` has been moved to new `suite_messaging`. It still contains some broken tests.
- `tst_groupChat` has been moved to new `suite_messaging`. It is now working (but it relies on the mailserver so could fail sometimes).
- `tst_statusLoginPassword` has been moved to new `suite_onboarding`.
- It has been needed to move some object definitions from `chat_names.py` to `global_names.py` since they are shared between different suites.
- Some other minor object and steps definitions have been moved to fit with the new structure.
Closes#7624
The create a group chat related objects have been updated according to new qml changes.
Now these tests are working (if they don't work it is bc of mailserver reliability).
"the user lands on the signed in app" step incorporates the following verifications (main screen is ready):
- Splash screen animation is loaded and ended.
- Banners that appear in the main screen are closed before starting other actions (secure seed phrase, connection information and update app information banners).
Additionally:
- communities grid made scrollable
- filtering done using SortFilterProxyModel
- various adjustments to the design
- clear input button added to the search input
Closes: #6360
Actually this is not a signing transaction, but rather authenticating logged in
user when he wants to send a transaction. An authentication is done by entering
password(regular user) or pin(keycard user).
A real signing transaction feature will be (hopefully) added in a near future where
we're going to sign a transaction on a keycard which corresponds to a certain
account, a user wants to send a transaction from.
To sum up... this change just removes password from the send modal and introduces
`Authenticate` flow instead.
Fixes: #7510
The RootStore was calling checkRecentHistory on the wallet section View
instead of the transaction View.
Still the workflow is broken due to the 20 minutes timer that calls
the checkRecentHistory and hangs the the main thread (UI) for a long time
Fixes: #7266
- don't display identicon rings for contacts with an ENS name
- prefer the at-form (@foo-user) whenever possible, and don't display their
username or pubkey unless they are locally given a nickname
- show compressed keys everywhere instead of the regular ones
Fixes: #7319Fixes: #7515