# Chat List
## Join or start a public chat
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/AddChat.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/AddChat.qml#L52)
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn.qml#L32)
key source file: [`ui/app/AppLayouts/Chat/components/PublicChatPopup.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/components/PublicChatPopup.qml#L31)
key source file: [`src/app/chat/view.nim`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/src/app/chat/view.nim#L588)
key source file: [`src/status/chat.nim`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/src/status/chat.nim#L131)
key source file: [`src/status/libstatus/chat.nim`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/src/status/libstatus/chat.nim#L21)
The public channel is joined by calling `chatsModel.joinChat(channelName.text, Constants.chatTypePublic)`
On the backend, the join action calls `status_chat.saveChat`, and adds a mailserver optic, it also emits a `channelJoined` event which will cause the UI to display that new channel
## Search for a Chat
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/AddChat.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn.qml#L93)
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#L41)
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml#L44)
The searchbox is aliased to as `searchStr`
```
property alias searchStr: searchBox.text
```
The ChannelList receives this as a paramter to the chat list and this is then passed to each member of the channel list
```
ChannelList {
id: channelList
searchStr: contactsColumn.searchStr.toLowerCase()
channelModel: chatsModel.chats
}
```
The filtering works by checking the search string against the channel name and using this to set the item as visible or invisible
```
property bool isVisible: searchStr === "" || name.includes(searchStr)
```
## Suggested Channels
key source file: [`ui/app/AppLayouts/Chat/data/channelList.js`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/data/channelList.js#L1)
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/EmptyView.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/EmptyView.qml#L120)
key source file: [`ui/app/AppLayouts/Chat/components/SuggestedChannels.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/components/SuggestedChannels.qml#L9)
key source file: [`ui/app/AppLayouts/Chat/components/SuggestedChannel.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/components/SuggestedChannel.qml#L5)
## Badges
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml#L167)
### unread message counter
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#L38)
key source file: [`src/status/chat/chat.nim`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/src/status/chat/chat.nim#L72)
This information comes from the property `unviewedMessagesCount` which is defined for each channel on the `channelListContent.channelModel`
### mentions @
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#L39)
key source file: [`src/status/chat/chat.nim`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/src/status/chat/chat.nim#L76)
This information comes from the property `hasMentions` which is defined for each channel on the `channelListContent.channelModel`
## Context menu
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/Channel.qml#L188)
key source file: [`ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/ContactsColumn/ChannelList.qml#L76)
key source file: [`ui/app/AppLayouts/Chat/components/ChannelContextMenu.qml`](https://github.com/status-im/status-desktop/blob/65a0cfbcd30eb7bde4e24cdb1680b3e03d8b1992/ui/app/AppLayouts/Chat/components/ChannelContextMenu.qml#L8)