Эх сурвалжийг харах

Rename view models to stores

Sergey 2 жил өмнө
parent
commit
934c7d1a63

+ 22 - 18
Chat.xcodeproj/project.pbxproj

@@ -16,9 +16,9 @@
 		2F60459F288D869B008F005E /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F60459E288D869B008F005E /* ChatListView.swift */; };
 		2F6045A9288E9B2C008F005E /* XMPPFramework in Frameworks */ = {isa = PBXBuildFile; productRef = 2F6045A8288E9B2C008F005E /* XMPPFramework */; };
 		2F6045AB288E9B2C008F005E /* XMPPFrameworkSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 2F6045AA288E9B2C008F005E /* XMPPFrameworkSwift */; };
-		2F6045B0288E9D3E008F005E /* ChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6045AF288E9D3E008F005E /* ChatListViewModel.swift */; };
+		2F6045B0288E9D3E008F005E /* ChatListStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6045AF288E9D3E008F005E /* ChatListStore.swift */; };
 		2F6045B3288EA0E6008F005E /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6045B2288EA0E6008F005E /* LoginView.swift */; };
-		2F6045B6288EA10B008F005E /* LoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6045B5288EA10B008F005E /* LoginViewModel.swift */; };
+		2F6045B6288EA10B008F005E /* LoginStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6045B5288EA10B008F005E /* LoginStore.swift */; };
 		2F6E936828F8714600FAF0E5 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6E936728F8714600FAF0E5 /* Message.swift */; };
 		2F6E936A28F8D63600FAF0E5 /* ChatListCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6E936928F8D63600FAF0E5 /* ChatListCellView.swift */; };
 		2F6E936C28F8D74600FAF0E5 /* MessageTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6E936B28F8D74600FAF0E5 /* MessageTextField.swift */; };
@@ -27,8 +27,8 @@
 		2FB65BD828F9D2C000007021 /* RoomsListCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB65BD728F9D2C000007021 /* RoomsListCellView.swift */; };
 		2FB65BDA28F9EE9300007021 /* ChatMessageListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB65BD928F9EE9300007021 /* ChatMessageListView.swift */; };
 		2FCB75E728A425580097BD1D /* RoomsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCB75E628A425580097BD1D /* RoomsListView.swift */; };
-		2FCB75EA28A425900097BD1D /* RoomsListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCB75E928A425900097BD1D /* RoomsListViewModel.swift */; };
-		2FCB75ED28A42B1E0097BD1D /* ChatViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCB75EC28A42B1E0097BD1D /* ChatViewModel.swift */; };
+		2FCB75EA28A425900097BD1D /* RoomsListStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCB75E928A425900097BD1D /* RoomsListStore.swift */; };
+		2FCB75ED28A42B1E0097BD1D /* ChatStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCB75EC28A42B1E0097BD1D /* ChatStore.swift */; };
 		2FFCDFBC28F6EA1800D9FA9D /* XMPPController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FFCDFBB28F6EA1800D9FA9D /* XMPPController.swift */; };
 /* End PBXBuildFile section */
 
@@ -42,9 +42,9 @@
 		2F604598288D7E00008F005E /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = "<group>"; };
 		2F60459B288D8000008F005E /* MessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageView.swift; sourceTree = "<group>"; };
 		2F60459E288D869B008F005E /* ChatListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = "<group>"; };
-		2F6045AF288E9D3E008F005E /* ChatListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListViewModel.swift; sourceTree = "<group>"; };
+		2F6045AF288E9D3E008F005E /* ChatListStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListStore.swift; sourceTree = "<group>"; };
 		2F6045B2288EA0E6008F005E /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
-		2F6045B5288EA10B008F005E /* LoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModel.swift; sourceTree = "<group>"; };
+		2F6045B5288EA10B008F005E /* LoginStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginStore.swift; sourceTree = "<group>"; };
 		2F6E936728F8714600FAF0E5 /* Message.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = "<group>"; };
 		2F6E936928F8D63600FAF0E5 /* ChatListCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListCellView.swift; sourceTree = "<group>"; };
 		2F6E936B28F8D74600FAF0E5 /* MessageTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageTextField.swift; sourceTree = "<group>"; };
@@ -53,8 +53,8 @@
 		2FB65BD728F9D2C000007021 /* RoomsListCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomsListCellView.swift; sourceTree = "<group>"; };
 		2FB65BD928F9EE9300007021 /* ChatMessageListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageListView.swift; sourceTree = "<group>"; };
 		2FCB75E628A425580097BD1D /* RoomsListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomsListView.swift; sourceTree = "<group>"; };
-		2FCB75E928A425900097BD1D /* RoomsListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomsListViewModel.swift; sourceTree = "<group>"; };
-		2FCB75EC28A42B1E0097BD1D /* ChatViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatViewModel.swift; sourceTree = "<group>"; };
+		2FCB75E928A425900097BD1D /* RoomsListStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomsListStore.swift; sourceTree = "<group>"; };
+		2FCB75EC28A42B1E0097BD1D /* ChatStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatStore.swift; sourceTree = "<group>"; };
 		2FF4F6B328B3BF4900BB62E1 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
 		2FFCDFBB28F6EA1800D9FA9D /* XMPPController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XMPPController.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
@@ -102,7 +102,7 @@
 				2F604598288D7E00008F005E /* ChatView.swift */,
 				2FB65BD928F9EE9300007021 /* ChatMessageListView.swift */,
 				2F6E936B28F8D74600FAF0E5 /* MessageTextField.swift */,
-				2FCB75EC28A42B1E0097BD1D /* ChatViewModel.swift */,
+				2FCB75EC28A42B1E0097BD1D /* ChatStore.swift */,
 				2F60459B288D8000008F005E /* MessageView.swift */,
 			);
 			path = Chat;
@@ -113,7 +113,7 @@
 			children = (
 				2FCB75E628A425580097BD1D /* RoomsListView.swift */,
 				2FB65BD728F9D2C000007021 /* RoomsListCellView.swift */,
-				2FCB75E928A425900097BD1D /* RoomsListViewModel.swift */,
+				2FCB75E928A425900097BD1D /* RoomsListStore.swift */,
 			);
 			path = Rooms;
 			sourceTree = "<group>";
@@ -160,7 +160,7 @@
 			children = (
 				2F60459E288D869B008F005E /* ChatListView.swift */,
 				2F6E936928F8D63600FAF0E5 /* ChatListCellView.swift */,
-				2F6045AF288E9D3E008F005E /* ChatListViewModel.swift */,
+				2F6045AF288E9D3E008F005E /* ChatListStore.swift */,
 			);
 			path = ChatList;
 			sourceTree = "<group>";
@@ -169,7 +169,7 @@
 			isa = PBXGroup;
 			children = (
 				2F6045B2288EA0E6008F005E /* LoginView.swift */,
-				2F6045B5288EA10B008F005E /* LoginViewModel.swift */,
+				2F6045B5288EA10B008F005E /* LoginStore.swift */,
 			);
 			path = Auth;
 			sourceTree = "<group>";
@@ -251,15 +251,15 @@
 			buildActionMask = 2147483647;
 			files = (
 				2FFCDFBC28F6EA1800D9FA9D /* XMPPController.swift in Sources */,
-				2FCB75ED28A42B1E0097BD1D /* ChatViewModel.swift in Sources */,
+				2FCB75ED28A42B1E0097BD1D /* ChatStore.swift in Sources */,
 				2F24E94828F2FC8A007ECE97 /* AppDelegate.swift in Sources */,
 				2F81974C28ACFDEA008D8C45 /* Room.swift in Sources */,
 				2FB65BDA28F9EE9300007021 /* ChatMessageListView.swift in Sources */,
 				2F6E936C28F8D74600FAF0E5 /* MessageTextField.swift in Sources */,
 				2F60459C288D8000008F005E /* MessageView.swift in Sources */,
 				2F6E936828F8714600FAF0E5 /* Message.swift in Sources */,
-				2F6045B0288E9D3E008F005E /* ChatListViewModel.swift in Sources */,
-				2FCB75EA28A425900097BD1D /* RoomsListViewModel.swift in Sources */,
+				2F6045B0288E9D3E008F005E /* ChatListStore.swift in Sources */,
+				2FCB75EA28A425900097BD1D /* RoomsListStore.swift in Sources */,
 				2F81974828ACEDC8008D8C45 /* User.swift in Sources */,
 				2FCB75E728A425580097BD1D /* RoomsListView.swift in Sources */,
 				2F6045B3288EA0E6008F005E /* LoginView.swift in Sources */,
@@ -267,7 +267,7 @@
 				2FB65BD828F9D2C000007021 /* RoomsListCellView.swift in Sources */,
 				2F60458C288D787F008F005E /* ContentView.swift in Sources */,
 				2F604599288D7E00008F005E /* ChatView.swift in Sources */,
-				2F6045B6288EA10B008F005E /* LoginViewModel.swift in Sources */,
+				2F6045B6288EA10B008F005E /* LoginStore.swift in Sources */,
 				2F6E936A28F8D63600FAF0E5 /* ChatListCellView.swift in Sources */,
 				2F60458A288D787F008F005E /* ChatApp.swift in Sources */,
 			);
@@ -396,6 +396,7 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = QPX4P42KC5;
@@ -413,8 +414,9 @@
 					"@executable_path/Frameworks",
 				);
 				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = sertrsv.Chat;
+				PRODUCT_BUNDLE_IDENTIFIER = sertrsv.xmppchat;
 				PRODUCT_NAME = Chat;
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				SDKROOT = iphoneos;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_VERSION = 5.0;
@@ -427,6 +429,7 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = QPX4P42KC5;
@@ -444,8 +447,9 @@
 					"@executable_path/Frameworks",
 				);
 				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = sertrsv.Chat;
+				PRODUCT_BUNDLE_IDENTIFIER = sertrsv.xmppchat;
 				PRODUCT_NAME = Chat;
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				SDKROOT = iphoneos;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_VERSION = 5.0;

+ 2 - 2
Chat/UI/Auth/LoginViewModel.swift → Chat/UI/Auth/LoginStore.swift

@@ -1,5 +1,5 @@
 //
-//  LoginViewModel.swift
+//  LoginStore.swift
 //  Chat
 //
 //  Created by Sergey Tarasov on 25.07.2022.
@@ -9,7 +9,7 @@ import Foundation
 import XMPPFramework
 import XMPPFrameworkSwift
 
-final class LoginViewModel: ObservableObject {
+final class LoginStore: ObservableObject {
     @Published var login: String = "test11@msg.sharix-app.org"
     @Published var password: String = "test11_-"
 

+ 6 - 6
Chat/UI/Auth/LoginView.swift

@@ -8,18 +8,18 @@
 import SwiftUI
 
 struct LoginView: View {
-    @ObservedObject var viewModel: LoginViewModel
+    @ObservedObject var store: LoginStore
 
     @Binding var authStatus: Bool
     var body: some View {
         VStack(alignment: .center, spacing: 16) {
-            TextField("Login", text: $viewModel.login)
+            TextField("Login", text: $store.login)
                 .textFieldStyle(.roundedBorder)
-            SecureField("Password", text: $viewModel.password)
+            SecureField("Password", text: $store.password)
                 .textFieldStyle(.roundedBorder)
                 .textContentType(.password)
             Button {
-                viewModel.login { success in
+                store.login { success in
                     if success {
                         authStatus = true
                     }
@@ -33,8 +33,8 @@ struct LoginView: View {
 }
 
 struct LoginView_Previews: PreviewProvider {
-    static var viewModel: LoginViewModel = LoginViewModel()
+    static var store: LoginStore = LoginStore()
     static var previews: some View {
-        LoginView(viewModel: viewModel, authStatus: .constant(false))
+        LoginView(store: store, authStatus: .constant(false))
     }
 }

+ 5 - 5
Chat/UI/Chat/ChatViewModel.swift → Chat/UI/Chat/ChatStore.swift

@@ -1,5 +1,5 @@
 //
-//  ChatViewModel.swift
+//  ChatStore.swift
 //  Chat
 //
 //  Created by Sergey Tarasov on 10.08.2022.
@@ -9,7 +9,7 @@ import Foundation
 import XMPPFramework
 import XMPPFrameworkSwift
 
-final class ChatViewModel: NSObject, ObservableObject {
+final class ChatStore: NSObject, ObservableObject {
 	let room: XMPPRoom
 	let storage: XMPPRoomMemoryStorage
 	let mam: XMPPMessageArchiveManagement
@@ -71,7 +71,7 @@ final class ChatViewModel: NSObject, ObservableObject {
 	}
 }
 
-extension ChatViewModel: XMPPRoomDelegate {
+extension ChatStore: XMPPRoomDelegate {
 	func xmppRoom(_ sender: XMPPRoom, didReceive message: XMPPMessage, fromOccupant occupantJID: XMPPJID) {
 		if let body = message.body,
 		   let id = message.originId,
@@ -81,7 +81,7 @@ extension ChatViewModel: XMPPRoomDelegate {
     }
 }
 
-extension ChatViewModel: XMPPRoomMemoryStorageDelegate {
+extension ChatStore: XMPPRoomMemoryStorageDelegate {
 	func xmppRoomMemoryStorage(
 		_ sender: XMPPRoomMemoryStorage!,
 		didReceiveMessage message: XMPPRoomMessageMemoryStorageObject!,
@@ -93,7 +93,7 @@ extension ChatViewModel: XMPPRoomMemoryStorageDelegate {
 	}
 }
 
-extension ChatViewModel: XMPPMessageArchiveManagementDelegate {
+extension ChatStore: XMPPMessageArchiveManagementDelegate {
 	func xmppMessageArchiveManagement(
 		_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement,
 		didReceiveMAMMessage message: XMPPMessage

+ 7 - 7
Chat/UI/Chat/ChatView.swift

@@ -14,20 +14,20 @@ extension CGFloat {
 }
 
 struct ChatView: View {
-    @StateObject var viewModel: ChatViewModel
+    @StateObject var store: ChatStore
 
     var body: some View {
         VStack(alignment: .center, spacing: 0) {
-			ChatMessageListView(messages: viewModel.messages)
+			ChatMessageListView(messages: store.messages)
             Divider()
-			MessageTextField(message: $viewModel.messageText, action: viewModel.sendMessage)
+			MessageTextField(message: $store.messageText, action: store.sendMessage)
         }
-        .navigationTitle(viewModel.room.roomJID.user ?? "Room")
+        .navigationTitle(store.room.roomJID.user ?? "Room")
         .navigationBarTitleDisplayMode(.inline)
         .toolbar {
             ToolbarItem(placement: .navigationBarTrailing) {
                 Button {
-                    viewModel.fetchMessages()
+                    store.fetchMessages()
                 } label: {
                     Image(systemName: "arrow.counterclockwise")
                 }
@@ -37,12 +37,12 @@ struct ChatView: View {
 }
 
 struct ChatView_Previews: PreviewProvider {
-    static var viewModel: ChatViewModel = ChatViewModel(with: "jid")
+    static var store: ChatStore = ChatStore(with: "jid")
 
     static var previews: some View {
         Group {
 			NavigationView {
-				ChatView(viewModel: viewModel)
+				ChatView(store: store)
 			}
         }
     }

+ 1 - 1
Chat/UI/ChatList/ChatListCellView.swift

@@ -13,7 +13,7 @@ struct ChatListCellView: View {
 
 	var body: some View {
 		NavigationLink {
-			ChatView(viewModel: ChatViewModel(with: jid))
+			ChatView(store: ChatStore(with: jid))
 		} label: {
 			HStack {
 				Image(systemName: "person.crop.circle")

+ 2 - 2
Chat/UI/ChatList/ChatListViewModel.swift → Chat/UI/ChatList/ChatListStore.swift

@@ -1,5 +1,5 @@
 //
-//  ChatListViewModel.swift
+//  ChatListStore.swift
 //  Chat
 //
 //  Created by Sergey Tarasov on 25.07.2022.
@@ -9,7 +9,7 @@ import Foundation
 import XMPPFramework
 import XMPPFrameworkSwift
 
-final class ChatListViewModel: NSObject, ObservableObject {
+final class ChatListStore: NSObject, ObservableObject {
     @Published var users: [User] = []
 
     var nicknames: [String] {

+ 6 - 8
Chat/UI/ChatList/ChatListView.swift

@@ -10,31 +10,29 @@ import XMPPFramework
 import XMPPFrameworkSwift
 
 struct ChatListView: View {
-	@StateObject var viewModel: ChatListViewModel = ChatListViewModel()
+	@StateObject var store: ChatListStore = ChatListStore()
 
     var body: some View {
         Group {
-			if viewModel.users.isEmpty {
+			if store.users.isEmpty {
 				ProgressView()
 			} else {
-				List(viewModel.users.indices, id: \.self) { index in
+				List(store.users.indices, id: \.self) { index in
 					ChatListCellView(
-						nickname: viewModel.nicknames[index],
-						jid: viewModel.users[index].id
+						nickname: store.nicknames[index],
+						jid: store.users[index].id
 					)
 				}
 				.listStyle(.plain)
 			}
 		}
 		.onAppear {
-			viewModel.fetchChatList()
+			store.fetchChatList()
 		}
     }
 }
 
 struct ChatListView_Previews: PreviewProvider {
-    static var viewModel: ChatListViewModel = ChatListViewModel()
-
     static var previews: some View {
 		NavigationView {
 			ChatListView()

+ 2 - 2
Chat/UI/ContentView.swift

@@ -8,7 +8,7 @@
 import SwiftUI
 
 struct ContentView: View {
-    @ObservedObject var loginViewModel: LoginViewModel = LoginViewModel()
+    @ObservedObject var loginStore: LoginStore = LoginStore()
 
     @State var authStatus: Bool = false
     @State var selectedTab: Tab = .rooms
@@ -43,7 +43,7 @@ struct ContentView: View {
                     .navigationBarTitle(returnNaviBarTitle(self.selectedTab))
                 }
             } else {
-                LoginView(viewModel: loginViewModel, authStatus: $authStatus)
+                LoginView(store: loginStore, authStatus: $authStatus)
             }
         }
     }

+ 1 - 1
Chat/UI/Rooms/RoomsListCellView.swift

@@ -48,7 +48,7 @@ struct RoomsListCellView: View {
 			.foregroundColor(.primary)
 			.lineLimit(1)
 			NavigationLink {
-				ChatView(viewModel: ChatViewModel(with: roomID))
+				ChatView(store: ChatStore(with: roomID))
 			} label: {
 				EmptyView()
 			}

+ 3 - 3
Chat/UI/Rooms/RoomsListViewModel.swift → Chat/UI/Rooms/RoomsListStore.swift

@@ -1,5 +1,5 @@
 //
-//  RoomsListViewModel.swift
+//  RoomsListStore.swift
 //  Chat
 //
 //  Created by Sergey Tarasov on 10.08.2022.
@@ -9,7 +9,7 @@ import Foundation
 import XMPPFramework
 import XMPPFrameworkSwift
 
-final class RoomsListViewModel: NSObject, ObservableObject {
+final class RoomsListStore: NSObject, ObservableObject {
 	@Published var rooms: [Room] = []
 
 	override init() {
@@ -22,7 +22,7 @@ final class RoomsListViewModel: NSObject, ObservableObject {
 	}
 }
 
-extension RoomsListViewModel: XMPPMUCLightDelegate {
+extension RoomsListStore: XMPPMUCLightDelegate {
 	func xmppMUCLight(_ sender: XMPPMUCLight, didDiscoverRooms rooms: [DDXMLElement], forServiceNamed serviceName: String) {
 		debugPrint(rooms)
 		self.rooms = rooms.map({ Room(id: $0.attributeStringValue(forName: "jid") ?? "", name: $0.attributeStringValue(forName: "name") ?? "") })

+ 9 - 9
Chat/UI/Rooms/RoomsListView.swift

@@ -8,17 +8,17 @@
 import SwiftUI
 
 struct RoomsListView: View {
-	@StateObject var viewModel: RoomsListViewModel = RoomsListViewModel()
+	@StateObject var store: RoomsListStore = RoomsListStore()
 
     var body: some View {
         Group {
-			if viewModel.rooms.isEmpty {
+			if store.rooms.isEmpty {
 				ProgressView()
 			} else {
-				List(viewModel.rooms.indices, id: \.self) { index in
+				List(store.rooms.indices, id: \.self) { index in
 					RoomsListCellView(
-						roomID: viewModel.rooms[index].id,
-						title: viewModel.rooms[index].name,
+						roomID: store.rooms[index].id,
+						title: store.rooms[index].name,
 						lastMessage: "Сообщение \(index)",
 						lastMessageTime: "14:\(Int.random(in: 10...50))",
 						unreadMessagesCount: Int.random(in: 1...100)
@@ -28,19 +28,19 @@ struct RoomsListView: View {
 			}
 		}
 		.onAppear {
-			viewModel.fetchRooms()
+			store.fetchRooms()
 		}
     }
 }
 
 struct RoomsListView_Previews: PreviewProvider {
-    static var viewModel: RoomsListViewModel = RoomsListViewModel()
+    static var store: RoomsListStore = RoomsListStore()
 
     static var previews: some View {
 		NavigationView {
-			RoomsListView(viewModel: viewModel)
+			RoomsListView(store: store)
 				.onAppear {
-					viewModel.rooms = [
+					store.rooms = [
 						.init(id: "Jid", name: "Room title 1"),
 						.init(id: "Jid", name: "Room title 2"),
 						.init(id: "Jid", name: "Room title 3"),