A reason why this issue was happening is that prev and next message
were set in a wrong way. An important thing is that list of messages is set
in descending order in terms of `timestamp` of a message, that means a
message with the most recent time is added at index 0.
That further means that getting an index of the previous message from the
current one is defined as `currentIndex + 1` and getting an index of the next
one is defined as `currentIndex - 1`.
Fixes#4417
- various issues on app start in console
- various issues when logging out in console
- `node_section` module delete method error
- SyntaxError: JSON.parse: Parse error from the MessageStore
Within this commit apart of `ChatContextMenuView` and `MessageContextMenuView`
some other things are fixed:
- pinned messages model (`asyncFetchChatMessagesTask`), which was corrupted most
likely by resolving conflicts
- `pinned by` part of the pinned messages
- set/remove local nickname for a contact
- contacts in a message list and pinned by name, contact in a pinned message list
and pinned by name, one to one chat details and chat tool bar are updated in a way
that they are responsive to the contact's updates
- pinned messages updated received from remote (from the `status-go`) is handled
Fixes#4366
- load more messages on scroll up for chat/channel added
- sending messages improved in terms of adding new messages to
appropriate position
- scroll to message added on the qml side
- qml connected to the sending message success/failed signals
- admin flag exposed to qml for chat/channel
- `CreateChannelPopup` updated
- `createPopup` function added to the `Global` singleton
- `PinnedMessagesPopup` component moved to `AppMain` and shared
among components beneath
- `NormalMessageView` component is removed since we work with `CompactMessageView`
and it's the only and default message component in the app.
- `useCompactMode` property removed from local settings since it's not in use as
well and corresponding code is updated accordingly
- `chatType` added to `Constants` to group chat type related values
- `messageContentType` added to `Constants` to group message content type related
values
- `MessageStore` maintained per message list now
- added new `ChatContentView` component used to display chat/channel content
- components updated to display messages from the new backend
- `StatusChatToolBar` appropriately updated
- mute/unmute feature added to chat/channel list as well as to `StatusChatToolBar`
The openPopup function was declared in AppMain
and used via dynamic scoping in many places in the
application. Moved function to Global component
and updated all places to call it via Global instead.
Closes#4267
Removed all dynamic scoping parts in wallet section plus
- Renamed Config to Global and added more functions there
- Moved changeAppSectionBySectionType function to Global
and updated all places where is used to call it from
Global instead
- Moved openLink function to Global and updated all places
where is used to call it from Global instead
- Moved errorSound to Global, introduced playErrorSound
function and updated all places where is used to call
this function from Global instead
Closes#4245
Changes done on the backend side related to the new chat/channel/categories model
are applied here. Necessary changes done on the `statusq` may be seen in PR-486.
Parts of the code which are not refactored yet are commented out.
Displayed chats/categories/channels since now are using refactored backend.
Apart of all properties we have, now we have 3 new added props which will be used
almost always when we need the following details about logged in user:
- `name` - this will return an ens name in a pretty form or an alias if ens name
was not set (verified). Apart of this there are still `username` and `ensName`
properties for fetching them when it's needed.
- `icon` - this will return a thumbnail image if it's set, otherwise it will
return identicon. Apart of this there are still `identicon` and `thumbnailImage`
properties for fetching them when it's needed.
- `isIdenticon` - this will return `false` if a thumbnail image is set, otherwise
it will return `true`
Changes done on the backend side related to the new chat/channel/categories model
are applied here. Necessary changes done on the `statusq` may be seen in PR-486.
Parts of the code which are not refactored yet are commented out.
Displayed chats/categories/channels since now are using refactored backend.
Fixes#4061
Most of the contact request code was already moved, but it wasn't hooked to the QML yet and also there were missing events and some code to improve.
- Selecting `currentIndex` based on the children placed in the `StackLayout`
component with id `appView` is sorted out since we were referring to the wrong
indexes there in case of walletv2, node and community sections.
- Places which call `Utils.getAppSectionIndex` are updated since we don't have
that method any more.
- Some parts which are not refactored yet are commented.
Enable ListView clip and modified ColumnLayout heigh to bound its painting to the needed content.
Adjust ListView spacing to allow the visualization of 5 members.
Closes#4386
There's a bug where the last active community will be set in local settings
and not removed when a user leaves a community.
This causes the app to start on an invalid screen/state as it still tries to
render the community view for a community that the user has just left.
This commit ensure we're resetting the last active community in the local settings
when a users leaves the community.
Fixes: #4094
This replaces the self-built components for the user list with StatusQ's
list item component and also addresses some of the quirks that existed in the UI
related to that original component.
The user list is now responsive and properly aligned.
**This depends on StatusQ v0.18.0**
Moved Message component & dependencies to shared
for usage import shared.views.chat 1.0 and accordingly
import shared.controls/panels.chat 1.0
Closes#3927
There was a bug in our store where an API wouldn't return a value.
This commit fixes this and also replaces the legacy `Input` component
with StatusInput
Fixes: #4082
Initial structure for MainModule containing ChatSectionModule and
CommunitySectionModule is added, as well as initial structure for
StartupModule containing OnboardingModule and LoginModule.
Order of execution is updated and adapted to the current app state.
Main module gets loaded once a user is successfully logged in.
Probably slipped through in the refactor: `getLinkStyle` was defined
in to places, was probably meant to live only in `Utils`.
In addition, it expected a `wrapper` expression which wasn't defined.
This commit fixes it by removing the second declaration of that function
and passing a third parameter to the one defined in `Utils`.
Turns out we've been accidentally resetting the channel's `position`
property to `0` by not sending it over to status-lib's underlying
`editCommunityChat` API.
This fixes it by using a newer version of status-lib which supports
the `position` paramter in `editCommunityChat` and then sending that
value along from the edit channel popup.
Fixes#3672
This was originally reported in https://github.com/status-im/StatusQ/issues/427, however it turns out
that the underlying component already handles this case correctly.
The reason the channel name is not vertically centered inside Status Desktop,
is because the returned value of `XSS.filterXss()` for the `subTitle` is never an empty string.
Trimming the return value fixes this.
This was a reference error as there's no `errors` object on `StatusValidator`.
When accessing errors exposed by `StatusInput` we need to dot into the component
reference.
Position view at chosen message when coming
from either search or notifications was not
working properly, especially when coming from
another channel (eg from desktop to test).
Added timer to delay positioning action until
the messages model is almost fully loaded so
that the view knows all indexes
Depends on #3562Closes#3592, #3683
Introduced Style.svg() Style.png() Style.emoji() and
Style.icon() in Style.qml. Those should be used to
set the source in Images instead of using relative
paths. Usage:
Image {
source: Style.svg("check)
....
Also moved all Singletons inside a new "utils"
folder and made it a QML module, to use
import utils 1.0 instead of relative paths
Closes#3678
Added animation to highlight selected message
from search popup. Currenly when a message is clicked
from the search results, the user is navigated to
that message but it's not clear where is the
message in the screen
Closes#3562
Moved the statusChatInput to the repeater in stackview so that each conversation has its own separate textInput area which maintains its own state
fixes#1351
formattedPlainTextFilter was not reset when suggestion
box was closed causing the insertMention function to be
called again even thought there was no mention in the
chat input
Closes#3535
Fixes#3606.
The “retry” link for failed messages was not aligned correctly in the light theme. This was due to setting the `verticalCenter` as well as `anchors.top` in some situations. `verticalCenter` has been removed in favour of setting the top and bottom anchors.
Fixes: #3473.
Sometimes when blocking users and changes channels, blocked user messages would still appear.
This PR fixes the issue by toggling a `hide` property on messages from a contact when that contact is blocked or unblocked. Previously, the messages were only removed from the view when the contact was blocked, but when the view was reloaded, that state was not tracked correctly.
In case clicked channel:
- exists in a community -> the app will switch you to it
- doesn't exist in a community, but exists in the public chat list -> the app
will switch to `Chat` section and also to the appropriate channel there
- doesn't exist in a community and doesn't exist in the public chat list -> the app
will switch to `Chat` section and join new channel
Fixes: #3489
When StatusQ switched to using `DelegateModel` in `StatusChatList` to enable drag and drop,
we lost the API `itemAt` which was previously exposed via the `Repeater` that was aliased as
`chatListItems`.
StatusQ now exposes `statusChatListItems` additionally so we can still access `model.itemAt`
which is used in this commit.
The only reason this is done here though, is because we need to update the profile picture of
contacts when we get a contact changed signal. Ideally, we handle contact changes including the
profile picture entirely in the backend and have it then just rerender the screen (instead of
using a `Connection`).
Fixes#3328
Closes#3410.
Re-enables open membership communities, with necessary changes in the Inivitation Bubble for one-on-one chats.
fix: add/edit communities components not appearing
On add/edit community popup load, some components below the thumbnail image picker were not appearing until the app window was resized. Removing the height of the ScrollView fixed the issue (on mac).
NOTE: this may require windows and linux users to test.
Closes#3307.
WalletV2 view can be toggled between normal wallet view and the SavedAddresses view.
Users can load, add, edit, and delete saved addresses.
Favouriting a saved address is out of scope, as is sending to a saved addresses, drilling down in to a saved address, and supporting multiple networks.
Updates components that utilised the StatusMinLengthValidator component to support the changes made to StatusQ.
### Notes
1. Depends on status-go PR https://github.com/status-im/status-go/pull/2356
2. Depends on StatusQ PR https://github.com/status-im/StatusQ/pull/394.
# Conflicts:
# src/app/wallet/v2/view.nim
# ui/app/AppLayouts/WalletV2/WalletV2Layout.qml
* The userlist toggle made persistent between restarts
* Members is enabled by default for communities
* Public channels changed title to "last seen"
instead of "Members"
Closes#3502
There was a breaking change introduced 8d32c1d933
which caused reference errors in various modals.
This commit fixes the modal to create and edit community channels
by ensuring we're accessing `contentItem` and also only setting
channel data when editing a channel.
Closes#3390
fixed to display online status only if is the current user and
if they have been active in the last 7 minutes. Respective color
is shown depending on if they are in "do not disturb" mode or they
have been active more than 5 minutes ago
Closes#3282
Avoid computation when it is not needed for the suggestion filter
This is quite visible when the member list contains 1000s of members.
It is the case when you load historical message (1 month)
This commit enables users to enter fully qualified ENS names manually
and marking them as mentions, which are then later being replaced with
pubkeys.
The changes do not prevent users from entering ENS names that don't exist.
There's also a fix that ensure prepended "@" signs are removed from the
items selected in the suggestions box.
Closes#3149
Removed all computation of suggestion from qml
Reuse user list in order to populate the suggestion box
As a side effect, the suggestion are not serialized from qml to
nim
Remove InputArea which seems not used anymore
fixes#3251
- Being able to react in timeline chat
- Once there is a reaction, being able to remove them or add new
- Height of the message taking in consideration if there is reaction or
not
As requested by design popup search added for the left side, click on a search
field (above channels list).
Refers to the changes requested by the issue-2934
Fixes: #2934
The transfer ownership popup triggered by the backup community baner button
was behaving weirdly because the banner from where it originates lives inside
a loader that is deactivated once the popup was opened.
Moving the logic that deactivates the loader into the onClosed handler of the
popup solves this issue.
Thanks to @pinebit for getting to the bottom of this!
Fixes#2997
Updated offset of the notification tooltip arrow based on if the members list is visible. The arrow should be in center when member list is visible else it should be right aligned as there is no place on the window
fixes#3102
Updated from PopupMenu to StatusPopMenu. Removed buttons not in design.
Also added left and right button functionalXity on memeber list
fixes#2956, #3162
Feature added. Firstly we check if the searched message is already displayed and if yes simply jump
to it, if not then we are loading new 20 messages in the past using cursor and check if the
searched message's id is among those received messages. We do that in a loop till we find the
message we are searching for.
Fixes: #3005
Searching messages by some term for a specific channel is added on the side of status-go and an
appropriate part on the side of nim is developed accordingly.
Fixes: #2912
Current code adapted to handle future changes on message search (like searching message in multiple
channels).
Memory leak which was happening in qml assigning (copying) MessageItem to qml variable messageItem
(where that qml variable messageItem was never deleted) is fixed.
Fixes: #2912
Searching messages by some term for a specific channel is added on the side of status-go and an
appropriate part on the side of nim is developed accordingly.
Fixes: #2912
Current code adapted to handle future changes on message search (like searching message in multiple
channels).
Memory leak which was happening in qml assigning (copying) MessageItem to qml variable messageItem
(where that qml variable messageItem was never deleted) is fixed.
Fixes: #2912
This broke during the modal refactoring because we're no longer relying
on `chatsModel.contextChannel`.
Passing the channel item to the popup ensures it's properly hydrated again.
Closes#3050
This also updates StatusQ as the underlying StatusListItem component wasn't able
to handle multi-line subtitles very well. Also it didn't support tertiaryTitle, which
is needed in this UI.
As described in #3015, when editing channels that belong to a category of a community,
after saving them, they'll get kicked out of the category.
This is because we haven't passed the category id along the API that performs the
save operation.
This commit ensures we have access to a category chats' `categoryId` and send it
over to `editCommunityChat` RPC API provided by status-go
Fixes#3015
There are a few issues with the popup's content when there are many channels in a community:
1. Channel items belonging to other categories would still take space in the list
1. Due to the longer list of channels, the delete button wouldn't be fully visible (scrolling down
helps here)
2. Scrolling down is hard because the `ListView` in use is `interactive`
3. Even when `interactive` is set to false, one would scroll the name input out of the viewport.
To solve these, this commit rearchitects the popup's content such that:
1. The name input is always static and in place
2. The scrollview starts with the channel list and ends with the channel list
3. The delete button is positioned below the scrollview
4. The scrollview has a max height of 300 so that the popup doesn't grow too big
5. Invisible channel items won't have a height anymore
The result is that the middle section of the popup becomes scrollable in case there's many
channel items, while both, the name input and the delete button stay in the viewport.
Fixes#3013
This was lost during the refactor to use StatusQ components because it wasn't
clear to me that community channel descriptions should be rendered there.
Fixes#2982
When right-clicking a community from the navbar and selecting "View community", Status Desktop
opens `CommunityMembersPopup` which looks like it was either never really finished or more of an
intermediate solution until a proper community profile popup was created.
That's why this commit replaces it with a `CommunityProfilePopup` instead.
In fact, this lead to changes in `CommunityProfilePopup` where the `activeCommunity` dependency
is entirely removed, which allows us to use this popup in various places given that it's hydrated
with proper data.
Because we're no longer relying on `activeCommunity` inside that popup, all of its children and
connected popups needed that same refactor as well, hence this PR introduces a few more changes.
Closes#2890
This replaces the modal popup with `StatusModal` in the `CreateCommunityPopup`
and also ensures that it adheres to the design.
There are still things to be refactored in here, primarily form control components.
Those will be tackled in future commits once they have been built in StatusQ
Closes#2882
There was a change in StatusQ that introduced dividers for modal footers
and headers, so we don't need to put them in the content manually anymore.
This commit removes the no longer needed ones.
Toast message is added when user access an existing community using community's private key. Toast
message with message that importing community is in progress is displayed while community is being
imported and once it is imported toast is closed and new one, which will be closed in 4 seconds,
with message that community is imported is displayed.
Fixes: #2467
The reason for this issue is a message where recipient accepted to share his address with sender.
In that message recipient's public key is set as a "from" property of a "Message" object and we
cannot determine which of two users has initiated transaction actually.
This is fixed checking if the "from" address from the "commandParameters" object of the "Message"
is contained as an address in the wallet of logged in user. If yes, means that currently logged in
user has initiated a transaction (he is a sender), otherwise currently logged in user is a
recipient.
We were just sending a transaction, without notifying message about that. Now we call
callPrivateRPC("acceptRequestTransaction".prefix, %* [transactionHash, messageId, signature])
and that notifies message about the change, but only on the sender side. Appropriate message
on the recipient side was not notified about the change. That need to be checked.
This commit refactors the `CommunityProfilePopup` to use `StatusModal`. Since it's made of
various popup content components, it also updates the memberlist, the overview and the
invite friends view, so it doesn't break the UI along the way.
Closes: #2885, #2887, #2888
There are two regressions introduced in 080767c338 where
the `CreateChannelPopup` isn't properly centered when triggered in edit mode,
and that the channel name field isn't hydrated with channel data.
This commits fixes both bugs.
This bug is happening if you have more than one private chat in the contacts column. How many chats
you have that many same notifications you will get. That's happening cause connection is made
between chatsModel.messageView and ChatsMessages component for each private chat, and for each of
them ChatsMessages component is maintained in StackLayout component what means all of them are
exist but only selected instance is visible. When new messageNotificationPushed signal is emitted
each qml component triggers its slot (regardless component is not currently visible it exists in
the background, it's not deleted) and that's why we see more than one OS' notification bubble for
the same notification.
That is fixed moving slot from ChatMessage component to ChatColumn component.
Fixes: #2551
Also fixes a bug where if the search was cleared, messages would after that appear all on top of each other.
Also leaves the popup live after closing so the search can be gone back to
The issue is happening randomly. I managed to catch it few times and hopefully fix it. Problem was
in leave proc in src/status/chat.nim cause we were sending activeChannelChanged signal from it what
started setting activeChannel to the value of the backToFirstChat variable, and while that process
was in progress setActiveChannelByIndex was called from activeChannel what caused another emit of
activeChannelChanged signal while the previous one was not completed. That caused new setting of
activeChannel with active channel index 0, what caused an app crash.
This is fixed by setting active channel to the first one from the list when we get a signal that
any channel from the list is removed. This way activeChannelChanged is broadcasted to the other
parts correctly.
Fixes: #2825
This issue is being happened randomly, no general rule, in my case it happens often when you accept
first contact from the list immediately after the app start, but the ticket says that it happens
when you click accept while context menu is opened.
Two places were threat for this crash and both are fixed here:
- getChannel proc, direct access by index to Chat element of the chats sequence,
- setChatItem proc, where we actually were setting chatItem and accessing its property without
checking if it is an empty object.
Fixes: #2837