Initial implementation of the JoinRoomScreen. (#2684)
* Update Compound and use super button for room directory.
This commit is contained in:
@@ -446,6 +446,7 @@
|
|||||||
69C7B956B74BEC3DB88224EA /* NavigationSplitCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78913D6E120D46138E97C107 /* NavigationSplitCoordinatorTests.swift */; };
|
69C7B956B74BEC3DB88224EA /* NavigationSplitCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78913D6E120D46138E97C107 /* NavigationSplitCoordinatorTests.swift */; };
|
||||||
69DE29C3E3180BB17D840690 /* ProgressCursorModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C8E13A1FBA717B0C277ECC /* ProgressCursorModifier.swift */; };
|
69DE29C3E3180BB17D840690 /* ProgressCursorModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C8E13A1FBA717B0C277ECC /* ProgressCursorModifier.swift */; };
|
||||||
6A0E7551E0D1793245F34CDD /* ClientError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A267106B9585D3D0CFC0D /* ClientError.swift */; };
|
6A0E7551E0D1793245F34CDD /* ClientError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A267106B9585D3D0CFC0D /* ClientError.swift */; };
|
||||||
|
6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */; };
|
||||||
6AD722DD92E465E56D2885AB /* BugReportScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */; };
|
6AD722DD92E465E56D2885AB /* BugReportScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */; };
|
||||||
6AEB650311F694A5702255C9 /* UserProfileScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B4932E4EFBC8FAC10972CD /* UserProfileScreenCoordinator.swift */; };
|
6AEB650311F694A5702255C9 /* UserProfileScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B4932E4EFBC8FAC10972CD /* UserProfileScreenCoordinator.swift */; };
|
||||||
6AECC84BE14A13440120FED8 /* NSESettingsProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FB4F169D653296023ED65E6 /* NSESettingsProtocol.swift */; };
|
6AECC84BE14A13440120FED8 /* NSESettingsProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FB4F169D653296023ED65E6 /* NSESettingsProtocol.swift */; };
|
||||||
@@ -516,8 +517,10 @@
|
|||||||
7A71AEF419904209BB8C2833 /* UserAgentBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F2529D434C750ED78ADF1ED /* UserAgentBuilder.swift */; };
|
7A71AEF419904209BB8C2833 /* UserAgentBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F2529D434C750ED78ADF1ED /* UserAgentBuilder.swift */; };
|
||||||
7B1605C6FFD4D195F264A684 /* RoomPollsHistoryScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40233F2989AD49906BB310D /* RoomPollsHistoryScreenViewModelTests.swift */; };
|
7B1605C6FFD4D195F264A684 /* RoomPollsHistoryScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40233F2989AD49906BB310D /* RoomPollsHistoryScreenViewModelTests.swift */; };
|
||||||
7B5DAB915357BE596529BF25 /* MapTilerStaticMapProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20872C3887F835958CE2F1D0 /* MapTilerStaticMapProtocol.swift */; };
|
7B5DAB915357BE596529BF25 /* MapTilerStaticMapProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20872C3887F835958CE2F1D0 /* MapTilerStaticMapProtocol.swift */; };
|
||||||
|
7B66DA4E7E5FE4D1A0FCEAA4 /* JoinRoomScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEAB5662310AE73D93815134 /* JoinRoomScreenViewModelProtocol.swift */; };
|
||||||
7BB31E67648CF32D2AB5E502 /* RoomScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE3C90E487B255B735D73C8 /* RoomScreenViewModel.swift */; };
|
7BB31E67648CF32D2AB5E502 /* RoomScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE3C90E487B255B735D73C8 /* RoomScreenViewModel.swift */; };
|
||||||
7BF368A78E6D9AFD222F25AF /* SecureBackupScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE094FCB6387D268C436161 /* SecureBackupScreenViewModel.swift */; };
|
7BF368A78E6D9AFD222F25AF /* SecureBackupScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE094FCB6387D268C436161 /* SecureBackupScreenViewModel.swift */; };
|
||||||
|
7C0E29E0279866C62EC67A28 /* JoinRoomScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5127D6EA05B2E45D0A7D59 /* JoinRoomScreenViewModelTests.swift */; };
|
||||||
7C1A7B594B2F8143F0DD0005 /* ElementXAttributeScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = C024C151639C4E1B91FCC68B /* ElementXAttributeScope.swift */; };
|
7C1A7B594B2F8143F0DD0005 /* ElementXAttributeScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = C024C151639C4E1B91FCC68B /* ElementXAttributeScope.swift */; };
|
||||||
7C384A8E54A4B60A14CDE8E5 /* WaitlistScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */; };
|
7C384A8E54A4B60A14CDE8E5 /* WaitlistScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */; };
|
||||||
7C6376192F578E0BA801BFEC /* AnalyticsSettingsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C64A14EE89928207E3B42B /* AnalyticsSettingsScreenModels.swift */; };
|
7C6376192F578E0BA801BFEC /* AnalyticsSettingsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C64A14EE89928207E3B42B /* AnalyticsSettingsScreenModels.swift */; };
|
||||||
@@ -739,6 +742,7 @@
|
|||||||
AF33B9044498211C3D82F1E1 /* UNTextInputNotificationResponse+Creator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */; };
|
AF33B9044498211C3D82F1E1 /* UNTextInputNotificationResponse+Creator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */; };
|
||||||
AF8BFA37791E1756EE243E08 /* SettingsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8F0ED874DF8C9A51B0AB6F /* SettingsScreenCoordinator.swift */; };
|
AF8BFA37791E1756EE243E08 /* SettingsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8F0ED874DF8C9A51B0AB6F /* SettingsScreenCoordinator.swift */; };
|
||||||
AFA1F2543DFF7B45DF68ACD6 /* CompletionSuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 170BF6F7923A5C3792442F27 /* CompletionSuggestionModels.swift */; };
|
AFA1F2543DFF7B45DF68ACD6 /* CompletionSuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 170BF6F7923A5C3792442F27 /* CompletionSuggestionModels.swift */; };
|
||||||
|
AFE2AB612A1460E49578D746 /* JoinRoomScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDCCD2F6B405C14B9BCE94E /* JoinRoomScreenCoordinator.swift */; };
|
||||||
B04E9EB589CE99C3929E817A /* HomeScreenRecoveryKeyConfirmationBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05512FB13987D221B7205DE0 /* HomeScreenRecoveryKeyConfirmationBanner.swift */; };
|
B04E9EB589CE99C3929E817A /* HomeScreenRecoveryKeyConfirmationBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05512FB13987D221B7205DE0 /* HomeScreenRecoveryKeyConfirmationBanner.swift */; };
|
||||||
B0CB16349B96262AA65A04AF /* Version in Frameworks */ = {isa = PBXBuildFile; productRef = A05AF81DDD14AD58CB0E1B9B /* Version */; };
|
B0CB16349B96262AA65A04AF /* Version in Frameworks */ = {isa = PBXBuildFile; productRef = A05AF81DDD14AD58CB0E1B9B /* Version */; };
|
||||||
B1069F361E604D5436AE9FFD /* StaticLocationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B06663F7858E45882E63471 /* StaticLocationScreen.swift */; };
|
B1069F361E604D5436AE9FFD /* StaticLocationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B06663F7858E45882E63471 /* StaticLocationScreen.swift */; };
|
||||||
@@ -925,6 +929,7 @@
|
|||||||
DDE7B4771452300C103B1EB8 /* RoomDirectoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6210134203BE1F2DD5C679 /* RoomDirectoryCell.swift */; };
|
DDE7B4771452300C103B1EB8 /* RoomDirectoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6210134203BE1F2DD5C679 /* RoomDirectoryCell.swift */; };
|
||||||
DDFBDEE1DC32BDD5488F898C /* ClientProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2F96CCBEAAA7F2185BFA354 /* ClientProxyMock.swift */; };
|
DDFBDEE1DC32BDD5488F898C /* ClientProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2F96CCBEAAA7F2185BFA354 /* ClientProxyMock.swift */; };
|
||||||
DE4F8C4E0F1DB4832F09DE97 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D6764D6976D235926FE5FC /* HomeScreenViewModel.swift */; };
|
DE4F8C4E0F1DB4832F09DE97 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D6764D6976D235926FE5FC /* HomeScreenViewModel.swift */; };
|
||||||
|
DEDBD3E9CFCC9F20CAC79881 /* JoinRoomScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */; };
|
||||||
DF004A5B2EABBD0574D06A04 /* SplashScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854BCEAF2A832176FAACD2CB /* SplashScreenCoordinator.swift */; };
|
DF004A5B2EABBD0574D06A04 /* SplashScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854BCEAF2A832176FAACD2CB /* SplashScreenCoordinator.swift */; };
|
||||||
DF05F9C9D3D977EB77E13692 /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 385D4C28F9DC5CF53BD9ECDB /* DeviceKit */; };
|
DF05F9C9D3D977EB77E13692 /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 385D4C28F9DC5CF53BD9ECDB /* DeviceKit */; };
|
||||||
DF504B10A4918F971A57BEF2 /* PostHogAnalyticsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */; };
|
DF504B10A4918F971A57BEF2 /* PostHogAnalyticsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */; };
|
||||||
@@ -1000,6 +1005,7 @@
|
|||||||
EEB9C1555C63B93CA9C372C2 /* EmojiPickerScreenHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5E29E9A22F45534FBD5B58 /* EmojiPickerScreenHeaderView.swift */; };
|
EEB9C1555C63B93CA9C372C2 /* EmojiPickerScreenHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5E29E9A22F45534FBD5B58 /* EmojiPickerScreenHeaderView.swift */; };
|
||||||
EEC40663922856C65D1E0DF5 /* KeychainControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */; };
|
EEC40663922856C65D1E0DF5 /* KeychainControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */; };
|
||||||
EF0D0155DD104C7A41A2EB0E /* PlainMentionBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE78FA0011E07920AE83135 /* PlainMentionBuilder.swift */; };
|
EF0D0155DD104C7A41A2EB0E /* PlainMentionBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE78FA0011E07920AE83135 /* PlainMentionBuilder.swift */; };
|
||||||
|
EF47D802A404A53F15D5D4B6 /* JoinRoomScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD7C0A2750998C2D77AD00F /* JoinRoomScreenViewModel.swift */; };
|
||||||
EF5009AC03212227131C8AF2 /* RoomNotificationSettingsProxyProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */; };
|
EF5009AC03212227131C8AF2 /* RoomNotificationSettingsProxyProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */; };
|
||||||
EF7924005216B8189898F370 /* BackgroundTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA028DCD4157F9A1F999827 /* BackgroundTaskProtocol.swift */; };
|
EF7924005216B8189898F370 /* BackgroundTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA028DCD4157F9A1F999827 /* BackgroundTaskProtocol.swift */; };
|
||||||
EF890DEF0479E66548F2BA23 /* AppLockTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490BEADEFB2D6B7C9F618AE8 /* AppLockTimer.swift */; };
|
EF890DEF0479E66548F2BA23 /* AppLockTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490BEADEFB2D6B7C9F618AE8 /* AppLockTimer.swift */; };
|
||||||
@@ -1205,6 +1211,7 @@
|
|||||||
12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenCoordinator.swift; sourceTree = "<group>"; };
|
12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
||||||
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
||||||
|
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = "<group>"; };
|
||||||
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
1423AB065857FA546444DB15 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
|
1423AB065857FA546444DB15 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
|
||||||
142808B69851451AC32A2CEA /* RoomSummaryDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryDetails.swift; sourceTree = "<group>"; };
|
142808B69851451AC32A2CEA /* RoomSummaryDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryDetails.swift; sourceTree = "<group>"; };
|
||||||
@@ -1244,6 +1251,7 @@
|
|||||||
1C21A715237F2B6D6E80998C /* SecureBackupControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerProtocol.swift; sourceTree = "<group>"; };
|
1C21A715237F2B6D6E80998C /* SecureBackupControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerProtocol.swift; sourceTree = "<group>"; };
|
||||||
1C7F63EB1525E697CAEB002B /* BlankFormCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlankFormCoordinator.swift; sourceTree = "<group>"; };
|
1C7F63EB1525E697CAEB002B /* BlankFormCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlankFormCoordinator.swift; sourceTree = "<group>"; };
|
||||||
1CC575D1895FA62591451A93 /* RoomMemberDetailsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsScreen.swift; sourceTree = "<group>"; };
|
1CC575D1895FA62591451A93 /* RoomMemberDetailsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsScreen.swift; sourceTree = "<group>"; };
|
||||||
|
1CD7C0A2750998C2D77AD00F /* JoinRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
1D56469A9EE0CFA2B7BA9760 /* SessionVerificationControllerProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationControllerProxyProtocol.swift; sourceTree = "<group>"; };
|
1D56469A9EE0CFA2B7BA9760 /* SessionVerificationControllerProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationControllerProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
1D652E78832289CD9EB64488 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
1D652E78832289CD9EB64488 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
1D67E616BCA82D8A1258D488 /* NetworkMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitor.swift; sourceTree = "<group>"; };
|
1D67E616BCA82D8A1258D488 /* NetworkMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitor.swift; sourceTree = "<group>"; };
|
||||||
@@ -1365,6 +1373,7 @@
|
|||||||
39C0D861FC397AC34BCF089E /* KeychainControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerMock.swift; sourceTree = "<group>"; };
|
39C0D861FC397AC34BCF089E /* KeychainControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerMock.swift; sourceTree = "<group>"; };
|
||||||
3B5E97E9615A158C76B2AB77 /* DateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTests.swift; sourceTree = "<group>"; };
|
3B5E97E9615A158C76B2AB77 /* DateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTests.swift; sourceTree = "<group>"; };
|
||||||
3BC1B7CB061C9865B2B91B56 /* QRCodeLoginScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModel.swift; sourceTree = "<group>"; };
|
3BC1B7CB061C9865B2B91B56 /* QRCodeLoginScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
|
3BDCCD2F6B405C14B9BCE94E /* JoinRoomScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
3C1A3D524D63815B28FA4D62 /* EmojiCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCategory.swift; sourceTree = "<group>"; };
|
3C1A3D524D63815B28FA4D62 /* EmojiCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCategory.swift; sourceTree = "<group>"; };
|
||||||
3C368CAB3063EF275357ECD4 /* LoginScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginScreenViewModel.swift; sourceTree = "<group>"; };
|
3C368CAB3063EF275357ECD4 /* LoginScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
3C3E67E09FE5A35D73818C39 /* AppLockScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenModels.swift; sourceTree = "<group>"; };
|
3C3E67E09FE5A35D73818C39 /* AppLockScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenModels.swift; sourceTree = "<group>"; };
|
||||||
@@ -1653,6 +1662,7 @@
|
|||||||
86376BEE425704AEE197CA54 /* PillContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillContext.swift; sourceTree = "<group>"; };
|
86376BEE425704AEE197CA54 /* PillContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillContext.swift; sourceTree = "<group>"; };
|
||||||
8642512079EEFD622E3AA66B /* BlockedUsersScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreenModels.swift; sourceTree = "<group>"; };
|
8642512079EEFD622E3AA66B /* BlockedUsersScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreenModels.swift; sourceTree = "<group>"; };
|
||||||
86873A768B13069BB5CAECF6 /* InvitesScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitesScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
86873A768B13069BB5CAECF6 /* InvitesScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitesScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreen.swift; sourceTree = "<group>"; };
|
||||||
86A6F283BC574FDB96ABBB07 /* DeveloperOptionsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModel.swift; sourceTree = "<group>"; };
|
86A6F283BC574FDB96ABBB07 /* DeveloperOptionsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
86C8CE2630F54D5FE1591786 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
86C8CE2630F54D5FE1591786 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
88410BD213FDF9B28E8B671F /* UserDetailsEditScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreen.swift; sourceTree = "<group>"; };
|
88410BD213FDF9B28E8B671F /* UserDetailsEditScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreen.swift; sourceTree = "<group>"; };
|
||||||
@@ -2001,6 +2011,7 @@
|
|||||||
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
||||||
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
||||||
DD97F9661ABF08CE002054A2 /* AppLockServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceTests.swift; sourceTree = "<group>"; };
|
DD97F9661ABF08CE002054A2 /* AppLockServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceTests.swift; sourceTree = "<group>"; };
|
||||||
|
DE5127D6EA05B2E45D0A7D59 /* JoinRoomScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
DE7C80EF77AD102053D3646E /* RoundedLabelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedLabelItem.swift; sourceTree = "<group>"; };
|
DE7C80EF77AD102053D3646E /* RoundedLabelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedLabelItem.swift; sourceTree = "<group>"; };
|
||||||
DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaFileHandleProxy.swift; sourceTree = "<group>"; };
|
DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaFileHandleProxy.swift; sourceTree = "<group>"; };
|
||||||
DF05DA24F71B455E8EFEBC3B /* SessionVerificationViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationViewModelTests.swift; sourceTree = "<group>"; };
|
DF05DA24F71B455E8EFEBC3B /* SessionVerificationViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -2073,6 +2084,7 @@
|
|||||||
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
||||||
EE6BFF453838CF6C3982C5A3 /* RoomDirectorySearchScreenScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchScreenScreenViewModelTests.swift; sourceTree = "<group>"; };
|
EE6BFF453838CF6C3982C5A3 /* RoomDirectorySearchScreenScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchScreenScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
EEAA2832D93EC7D2608703FB /* NSEUserSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSEUserSession.swift; sourceTree = "<group>"; };
|
EEAA2832D93EC7D2608703FB /* NSEUserSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSEUserSession.swift; sourceTree = "<group>"; };
|
||||||
|
EEAB5662310AE73D93815134 /* JoinRoomScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
EF13BFD415CA84B1272E94F8 /* PINTextFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PINTextFieldTests.swift; sourceTree = "<group>"; };
|
EF13BFD415CA84B1272E94F8 /* PINTextFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PINTextFieldTests.swift; sourceTree = "<group>"; };
|
||||||
EF1593DD87F974F8509BB619 /* ElementAnimations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementAnimations.swift; sourceTree = "<group>"; };
|
EF1593DD87F974F8509BB619 /* ElementAnimations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementAnimations.swift; sourceTree = "<group>"; };
|
||||||
EF98A02DED04075F7CF0C721 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; };
|
EF98A02DED04075F7CF0C721 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
@@ -3373,6 +3385,14 @@
|
|||||||
path = SupportingFiles;
|
path = SupportingFiles;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
6792D400AF30A6F2ACD426E4 /* View */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */,
|
||||||
|
);
|
||||||
|
path = View;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
679E9837ECA8D6776079D16E /* RoomScreen */ = {
|
679E9837ECA8D6776079D16E /* RoomScreen */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -3549,6 +3569,7 @@
|
|||||||
505208F28007C0FEC14E1FF0 /* HomeScreenViewModelTests.swift */,
|
505208F28007C0FEC14E1FF0 /* HomeScreenViewModelTests.swift */,
|
||||||
CC14E5209C262530E19BC4C1 /* InvitesScreenViewModelTests.swift */,
|
CC14E5209C262530E19BC4C1 /* InvitesScreenViewModelTests.swift */,
|
||||||
845DDBDE5A0887E73D38B826 /* InviteUsersViewModelTests.swift */,
|
845DDBDE5A0887E73D38B826 /* InviteUsersViewModelTests.swift */,
|
||||||
|
DE5127D6EA05B2E45D0A7D59 /* JoinRoomScreenViewModelTests.swift */,
|
||||||
FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */,
|
FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */,
|
||||||
6E5725BC6C63604CB769145B /* LegalInformationScreenViewModelTests.swift */,
|
6E5725BC6C63604CB769145B /* LegalInformationScreenViewModelTests.swift */,
|
||||||
C070FD43DC6BF4E50217965A /* LocalizationTests.swift */,
|
C070FD43DC6BF4E50217965A /* LocalizationTests.swift */,
|
||||||
@@ -4880,6 +4901,7 @@
|
|||||||
B53CA9BECD3F97805E1432D0 /* HomeScreen */,
|
B53CA9BECD3F97805E1432D0 /* HomeScreen */,
|
||||||
E3EA13D6E41AD76151C2D100 /* InvitesScreen */,
|
E3EA13D6E41AD76151C2D100 /* InvitesScreen */,
|
||||||
F12966DF3DA87FEF21348D60 /* InviteUsersScreen */,
|
F12966DF3DA87FEF21348D60 /* InviteUsersScreen */,
|
||||||
|
FFD7C58CA6A7D6BBC2F584B5 /* JoinRoomScreen */,
|
||||||
948DD12A5533BE1BC260E437 /* LocationSharing */,
|
948DD12A5533BE1BC260E437 /* LocationSharing */,
|
||||||
73E032ADD008D63812791D97 /* LogViewerScreen */,
|
73E032ADD008D63812791D97 /* LogViewerScreen */,
|
||||||
87E2774157D9C4894BCFF3F8 /* MediaPickerScreen */,
|
87E2774157D9C4894BCFF3F8 /* MediaPickerScreen */,
|
||||||
@@ -5165,6 +5187,18 @@
|
|||||||
path = Audio;
|
path = Audio;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
FFD7C58CA6A7D6BBC2F584B5 /* JoinRoomScreen */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
3BDCCD2F6B405C14B9BCE94E /* JoinRoomScreenCoordinator.swift */,
|
||||||
|
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */,
|
||||||
|
1CD7C0A2750998C2D77AD00F /* JoinRoomScreenViewModel.swift */,
|
||||||
|
EEAB5662310AE73D93815134 /* JoinRoomScreenViewModelProtocol.swift */,
|
||||||
|
6792D400AF30A6F2ACD426E4 /* View */,
|
||||||
|
);
|
||||||
|
path = JoinRoomScreen;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -5722,6 +5756,7 @@
|
|||||||
A23B8B27A1436A1049EEF68E /* InfoPlistReader.swift in Sources */,
|
A23B8B27A1436A1049EEF68E /* InfoPlistReader.swift in Sources */,
|
||||||
A216C83ADCF32BA5EF8A6FBC /* InviteUsersViewModelTests.swift in Sources */,
|
A216C83ADCF32BA5EF8A6FBC /* InviteUsersViewModelTests.swift in Sources */,
|
||||||
266C4DF893F2947DCCEF327B /* InvitesScreenViewModelTests.swift in Sources */,
|
266C4DF893F2947DCCEF327B /* InvitesScreenViewModelTests.swift in Sources */,
|
||||||
|
7C0E29E0279866C62EC67A28 /* JoinRoomScreenViewModelTests.swift in Sources */,
|
||||||
EEC40663922856C65D1E0DF5 /* KeychainControllerTests.swift in Sources */,
|
EEC40663922856C65D1E0DF5 /* KeychainControllerTests.swift in Sources */,
|
||||||
CC961529F9F1854BEC3272C9 /* LayoutMocks.swift in Sources */,
|
CC961529F9F1854BEC3272C9 /* LayoutMocks.swift in Sources */,
|
||||||
8AC256AF0EC54658321C9241 /* LegalInformationScreenViewModelTests.swift in Sources */,
|
8AC256AF0EC54658321C9241 /* LegalInformationScreenViewModelTests.swift in Sources */,
|
||||||
@@ -6070,6 +6105,11 @@
|
|||||||
2AD59AD5B09498EF8B3B04EC /* InvitesScreenModels.swift in Sources */,
|
2AD59AD5B09498EF8B3B04EC /* InvitesScreenModels.swift in Sources */,
|
||||||
C287BE1802AD432F3D848D8E /* InvitesScreenViewModel.swift in Sources */,
|
C287BE1802AD432F3D848D8E /* InvitesScreenViewModel.swift in Sources */,
|
||||||
BD6D98676111DA8FC2BE4908 /* InvitesScreenViewModelProtocol.swift in Sources */,
|
BD6D98676111DA8FC2BE4908 /* InvitesScreenViewModelProtocol.swift in Sources */,
|
||||||
|
6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */,
|
||||||
|
AFE2AB612A1460E49578D746 /* JoinRoomScreenCoordinator.swift in Sources */,
|
||||||
|
DEDBD3E9CFCC9F20CAC79881 /* JoinRoomScreenModels.swift in Sources */,
|
||||||
|
EF47D802A404A53F15D5D4B6 /* JoinRoomScreenViewModel.swift in Sources */,
|
||||||
|
7B66DA4E7E5FE4D1A0FCEAA4 /* JoinRoomScreenViewModelProtocol.swift in Sources */,
|
||||||
E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */,
|
E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */,
|
||||||
1FE593ECEC40A43789105D80 /* KeychainController.swift in Sources */,
|
1FE593ECEC40A43789105D80 /* KeychainController.swift in Sources */,
|
||||||
FD29471C72872F8B7580E3E1 /* KeychainControllerMock.swift in Sources */,
|
FD29471C72872F8B7580E3E1 /* KeychainControllerMock.swift in Sources */,
|
||||||
@@ -7434,7 +7474,7 @@
|
|||||||
repositoryURL = "https://github.com/element-hq/compound-ios";
|
repositoryURL = "https://github.com/element-hq/compound-ios";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = revision;
|
kind = revision;
|
||||||
revision = ed63ed56655956c950a3b9c55e2010fdf1a2d11d;
|
revision = 43310aaaced1a0861c39894bb1086067375326be;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
F76A08D0EA29A07A54F4EB4D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
F76A08D0EA29A07A54F4EB4D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/element-hq/compound-ios",
|
"location" : "https://github.com/element-hq/compound-ios",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "ed63ed56655956c950a3b9c55e2010fdf1a2d11d"
|
"revision" : "43310aaaced1a0861c39894bb1086067375326be"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
15
ElementX/Resources/Assets.xcassets/images/join-room-graphic.imageset/Contents.json
vendored
Normal file
15
ElementX/Resources/Assets.xcassets/images/join-room-graphic.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "join-room-graphic.svg",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"preserves-vector-representation" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
47
ElementX/Resources/Assets.xcassets/images/join-room-graphic.imageset/join-room-graphic.svg
vendored
Normal file
47
ElementX/Resources/Assets.xcassets/images/join-room-graphic.imageset/join-room-graphic.svg
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<svg width="199" height="144" viewBox="0 0 199 144" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="32.5" cy="32" r="32" fill="url(#paint0_linear_570_20378)" fill-opacity="0.9"/>
|
||||||
|
<circle cx="32.5" cy="32" r="32" fill="url(#paint1_linear_570_20378)" fill-opacity="0.2"/>
|
||||||
|
<circle cx="32.5" cy="32" r="32" fill="url(#paint2_linear_570_20378)" fill-opacity="0.6"/>
|
||||||
|
<rect x="80.5" y="11.7856" width="88" height="16" rx="8" fill="url(#paint3_linear_570_20378)" fill-opacity="0.9"/>
|
||||||
|
<rect x="80.5" y="11.7856" width="88" height="16" rx="8" fill="url(#paint4_linear_570_20378)" fill-opacity="0.8"/>
|
||||||
|
<rect x="80.5" y="36.2141" width="68" height="16" rx="8" fill="#E3E8F0"/>
|
||||||
|
<rect x="152.5" y="36.2141" width="46" height="16" rx="8" fill="#E3E8F0"/>
|
||||||
|
<circle cx="32.5" cy="112" r="32" fill="#AC3BA8" fill-opacity="0.3"/>
|
||||||
|
<circle cx="32.5" cy="112" r="32" fill="url(#paint5_linear_570_20378)" fill-opacity="0.5"/>
|
||||||
|
<rect x="80.5" y="94" width="88" height="16" rx="8" fill="#AC3BA8" fill-opacity="0.3"/>
|
||||||
|
<rect x="80.5" y="94" width="88" height="16" rx="8" fill="url(#paint6_linear_570_20378)" fill-opacity="0.25"/>
|
||||||
|
<rect x="72.5" y="102" width="44" height="28" rx="14" fill="#F4F6FA"/>
|
||||||
|
<circle cx="84.5001" cy="114.964" r="4" fill="#C1C6CD"/>
|
||||||
|
<circle cx="94.4997" cy="116.964" r="4" fill="#C1C6CD"/>
|
||||||
|
<circle cx="104.5" cy="116.964" r="4" fill="#C1C6CD"/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="paint0_linear_570_20378" x1="32.5" y1="0" x2="32.5" y2="64" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0D5CBD"/>
|
||||||
|
<stop offset="1" stop-color="#0DBDA8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint1_linear_570_20378" x1="32.5" y1="0" x2="32.5" y2="64" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0.535" stop-color="white"/>
|
||||||
|
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint2_linear_570_20378" x1="32.5" y1="7.45058e-09" x2="33" y2="144.5" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0.085" stop-color="white"/>
|
||||||
|
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint3_linear_570_20378" x1="124.5" y1="11.7856" x2="124.5" y2="27.7856" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0D5CBD"/>
|
||||||
|
<stop offset="1" stop-color="#0DBDA8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint4_linear_570_20378" x1="124.5" y1="11.7856" x2="125" y2="42.9999" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="white"/>
|
||||||
|
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint5_linear_570_20378" x1="32.5" y1="80" x2="32.5" y2="144" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="white"/>
|
||||||
|
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint6_linear_570_20378" x1="124.5" y1="94" x2="124.5" y2="110" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="white"/>
|
||||||
|
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -196,6 +196,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
|||||||
case .roomMemberDetails:
|
case .roomMemberDetails:
|
||||||
userSessionFlowCoordinator?.handleAppRoute(route, animated: true)
|
userSessionFlowCoordinator?.handleAppRoute(route, animated: true)
|
||||||
case .room(let roomID):
|
case .room(let roomID):
|
||||||
|
// check that the room is joined here, if not use a joinRoom route.
|
||||||
if isExternalURL {
|
if isExternalURL {
|
||||||
userSessionFlowCoordinator?.handleAppRoute(route, animated: true)
|
userSessionFlowCoordinator?.handleAppRoute(route, animated: true)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ internal enum Asset {
|
|||||||
internal static let stopRecording = ImageAsset(name: "images/stop-recording")
|
internal static let stopRecording = ImageAsset(name: "images/stop-recording")
|
||||||
internal static let settingsIconWithBadge = ImageAsset(name: "images/settings-icon-with-badge")
|
internal static let settingsIconWithBadge = ImageAsset(name: "images/settings-icon-with-badge")
|
||||||
internal static let joinRoomBackground = ImageAsset(name: "images/join-room-background")
|
internal static let joinRoomBackground = ImageAsset(name: "images/join-room-background")
|
||||||
|
internal static let joinRoomGraphic = ImageAsset(name: "images/join-room-graphic")
|
||||||
internal static let launchBackground = ImageAsset(name: "images/launch-background")
|
internal static let launchBackground = ImageAsset(name: "images/launch-background")
|
||||||
internal static let locationMarkerShape = ImageAsset(name: "images/location-marker-shape")
|
internal static let locationMarkerShape = ImageAsset(name: "images/location-marker-shape")
|
||||||
internal static let mediaPause = ImageAsset(name: "images/media-pause")
|
internal static let mediaPause = ImageAsset(name: "images/media-pause")
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ enum RoomAvatarSizeOnScreen {
|
|||||||
case details
|
case details
|
||||||
case notificationSettings
|
case notificationSettings
|
||||||
case roomDirectorySearch
|
case roomDirectorySearch
|
||||||
|
case joinRoom
|
||||||
|
|
||||||
var value: CGFloat {
|
var value: CGFloat {
|
||||||
switch self {
|
switch self {
|
||||||
@@ -110,6 +111,8 @@ enum RoomAvatarSizeOnScreen {
|
|||||||
return 52
|
return 52
|
||||||
case .details:
|
case .details:
|
||||||
return 70
|
return 70
|
||||||
|
case .joinRoom:
|
||||||
|
return 96
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ struct RoomDirectorySearchView: View {
|
|||||||
Button(action: onTap) {
|
Button(action: onTap) {
|
||||||
Label(L10n.screenRoomlistRoomDirectoryButtonTitle, icon: \.listBulleted)
|
Label(L10n.screenRoomlistRoomDirectoryButtonTitle, icon: \.listBulleted)
|
||||||
}
|
}
|
||||||
.buttonStyle(.compound(.secondary))
|
.buttonStyle(.compound(.super))
|
||||||
.padding(.horizontal, 16)
|
.padding(.horizontal, 16)
|
||||||
.padding(.vertical, 8)
|
.padding(.vertical, 8)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Combine
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct JoinRoomScreenCoordinatorParameters {
|
||||||
|
let roomID: String
|
||||||
|
let roomName: String
|
||||||
|
let avatarURL: URL?
|
||||||
|
let interaction: JoinRoomScreenInteraction
|
||||||
|
let clientProxy: ClientProxyProtocol
|
||||||
|
}
|
||||||
|
|
||||||
|
enum JoinRoomScreenCoordinatorAction {
|
||||||
|
case joined
|
||||||
|
case cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
final class JoinRoomScreenCoordinator: CoordinatorProtocol {
|
||||||
|
private let parameters: JoinRoomScreenCoordinatorParameters
|
||||||
|
private let viewModel: JoinRoomScreenViewModelProtocol
|
||||||
|
|
||||||
|
private var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
|
private let actionsSubject: PassthroughSubject<JoinRoomScreenCoordinatorAction, Never> = .init()
|
||||||
|
var actionsPublisher: AnyPublisher<JoinRoomScreenCoordinatorAction, Never> {
|
||||||
|
actionsSubject.eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parameters: JoinRoomScreenCoordinatorParameters) {
|
||||||
|
self.parameters = parameters
|
||||||
|
|
||||||
|
viewModel = JoinRoomScreenViewModel(roomID: parameters.roomID,
|
||||||
|
roomName: parameters.roomName,
|
||||||
|
avatarURL: parameters.avatarURL,
|
||||||
|
interaction: parameters.interaction,
|
||||||
|
clientProxy: parameters.clientProxy)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
viewModel.actionsPublisher.sink { [weak self] action in
|
||||||
|
MXLog.info("Coordinator: received view model action: \(action)")
|
||||||
|
|
||||||
|
guard let self else { return }
|
||||||
|
switch action {
|
||||||
|
case .joined:
|
||||||
|
actionsSubject.send(.joined)
|
||||||
|
case .cancelled:
|
||||||
|
actionsSubject.send(.cancelled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.store(in: &cancellables)
|
||||||
|
}
|
||||||
|
|
||||||
|
func toPresentable() -> AnyView {
|
||||||
|
AnyView(JoinRoomScreen(context: viewModel.context))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum JoinRoomScreenViewModelAction {
|
||||||
|
case joined
|
||||||
|
case cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
struct JoinRoomScreenViewState: BindableState {
|
||||||
|
// Maybe use room summary details or similar here??
|
||||||
|
let roomID: String
|
||||||
|
let roomName: String
|
||||||
|
let avatarURL: URL?
|
||||||
|
|
||||||
|
let interaction: JoinRoomScreenInteraction
|
||||||
|
|
||||||
|
var isJoining = false
|
||||||
|
|
||||||
|
var bindings = JoinRoomScreenViewStateBindings()
|
||||||
|
|
||||||
|
var title: String {
|
||||||
|
switch interaction {
|
||||||
|
case .knock:
|
||||||
|
L10n.screenJoinRoomTitleKnock
|
||||||
|
case .join, .invited:
|
||||||
|
L10n.screenJoinRoomTitleNoPreview
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var subtitle: String {
|
||||||
|
switch interaction {
|
||||||
|
case .knock:
|
||||||
|
L10n.screenJoinRoomSubtitleKnock
|
||||||
|
case .join, .invited:
|
||||||
|
L10n.screenJoinRoomSubtitleNoPreview
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct JoinRoomScreenViewStateBindings {
|
||||||
|
var alertInfo: AlertInfo<JoinRoomScreenAlertType>?
|
||||||
|
}
|
||||||
|
|
||||||
|
enum JoinRoomScreenAlertType {
|
||||||
|
case joinFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
enum JoinRoomScreenInteraction {
|
||||||
|
case knock
|
||||||
|
case join
|
||||||
|
case invited
|
||||||
|
}
|
||||||
|
|
||||||
|
enum JoinRoomScreenViewAction {
|
||||||
|
case knock
|
||||||
|
case join
|
||||||
|
case acceptInvite
|
||||||
|
case declineInvite
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Combine
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
typealias JoinRoomScreenViewModelType = StateStoreViewModel<JoinRoomScreenViewState, JoinRoomScreenViewAction>
|
||||||
|
|
||||||
|
class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewModelProtocol {
|
||||||
|
private let clientProxy: ClientProxyProtocol
|
||||||
|
|
||||||
|
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
||||||
|
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
||||||
|
actionsSubject.eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
init(roomID: String, roomName: String, avatarURL: URL?, interaction: JoinRoomScreenInteraction, clientProxy: ClientProxyProtocol) {
|
||||||
|
self.clientProxy = clientProxy
|
||||||
|
|
||||||
|
super.init(initialViewState: JoinRoomScreenViewState(roomID: roomID,
|
||||||
|
roomName: roomName,
|
||||||
|
avatarURL: avatarURL,
|
||||||
|
interaction: interaction))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Public
|
||||||
|
|
||||||
|
override func process(viewAction: JoinRoomScreenViewAction) {
|
||||||
|
MXLog.info("View model: received view action: \(viewAction)")
|
||||||
|
|
||||||
|
switch viewAction {
|
||||||
|
case .knock:
|
||||||
|
break
|
||||||
|
case .join:
|
||||||
|
Task { await joinRoom() }
|
||||||
|
case .acceptInvite:
|
||||||
|
break
|
||||||
|
case .declineInvite:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Private
|
||||||
|
|
||||||
|
private func joinRoom() async {
|
||||||
|
state.isJoining = true
|
||||||
|
switch await clientProxy.joinRoom(state.roomID) {
|
||||||
|
case .success:
|
||||||
|
actionsSubject.send(.joined)
|
||||||
|
case .failure(let error):
|
||||||
|
state.bindings.alertInfo = .init(id: .joinFailed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Combine
|
||||||
|
|
||||||
|
@MainActor
|
||||||
|
protocol JoinRoomScreenViewModelProtocol {
|
||||||
|
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> { get }
|
||||||
|
var context: JoinRoomScreenViewModelType.Context { get }
|
||||||
|
}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Compound
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct JoinRoomScreen: View {
|
||||||
|
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
|
||||||
|
|
||||||
|
@ObservedObject var context: JoinRoomScreenViewModel.Context
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
FullscreenDialog(topPadding: 80, background: .bloom) {
|
||||||
|
mainContent
|
||||||
|
} bottomContent: {
|
||||||
|
buttons
|
||||||
|
}
|
||||||
|
.background()
|
||||||
|
.backgroundStyle(.compound.bgCanvasDefault)
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
|
.toolbar { toolbar }
|
||||||
|
}
|
||||||
|
|
||||||
|
var mainContent: some View {
|
||||||
|
VStack(spacing: 16) {
|
||||||
|
LoadableAvatarImage(url: context.viewState.avatarURL,
|
||||||
|
name: context.viewState.roomName,
|
||||||
|
contentID: context.viewState.roomID,
|
||||||
|
avatarSize: .room(on: .joinRoom),
|
||||||
|
imageProvider: context.imageProvider)
|
||||||
|
.dynamicTypeSize(dynamicTypeSize < .accessibility1 ? dynamicTypeSize : .accessibility1)
|
||||||
|
|
||||||
|
VStack(spacing: 8) {
|
||||||
|
Text(context.viewState.title)
|
||||||
|
.font(.compound.headingMDBold)
|
||||||
|
.foregroundStyle(.compound.textPrimary)
|
||||||
|
.multilineTextAlignment(.center)
|
||||||
|
|
||||||
|
Text(context.viewState.subtitle)
|
||||||
|
.font(.compound.bodyMD)
|
||||||
|
.foregroundStyle(.compound.textSecondary)
|
||||||
|
.multilineTextAlignment(.center)
|
||||||
|
}
|
||||||
|
|
||||||
|
Image(asset: Asset.Images.joinRoomGraphic)
|
||||||
|
.padding(.top, 40)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
var buttons: some View {
|
||||||
|
switch context.viewState.interaction {
|
||||||
|
case .knock:
|
||||||
|
Button(L10n.screenJoinRoomKnockAction) { context.send(viewAction: .knock) }
|
||||||
|
.buttonStyle(.compound(.primary))
|
||||||
|
case .join:
|
||||||
|
Button(L10n.screenJoinRoomJoinAction) { context.send(viewAction: .join) }
|
||||||
|
.buttonStyle(.compound(.super))
|
||||||
|
case .invited:
|
||||||
|
ViewThatFits {
|
||||||
|
HStack(spacing: 8) { inviteButtons }
|
||||||
|
VStack(spacing: 16) { inviteButtons }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
var inviteButtons: some View {
|
||||||
|
Button(L10n.actionDecline) { context.send(viewAction: .acceptInvite) }
|
||||||
|
.buttonStyle(.compound(.secondary))
|
||||||
|
Button(L10n.actionAccept) { context.send(viewAction: .declineInvite) }
|
||||||
|
.buttonStyle(.compound(.primary))
|
||||||
|
}
|
||||||
|
|
||||||
|
@ToolbarContentBuilder
|
||||||
|
var toolbar: some ToolbarContent {
|
||||||
|
ToolbarItem(placement: .principal) {
|
||||||
|
RoomHeaderView(roomID: context.viewState.roomID,
|
||||||
|
roomName: context.viewState.roomName,
|
||||||
|
avatarURL: context.viewState.avatarURL,
|
||||||
|
imageProvider: context.imageProvider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Previews
|
||||||
|
|
||||||
|
struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
|
static let knockViewModel = makeViewModel(interaction: .knock)
|
||||||
|
static let joinViewModel = makeViewModel(interaction: .join)
|
||||||
|
static let inviteViewModel = makeViewModel(interaction: .invited)
|
||||||
|
|
||||||
|
static var previews: some View {
|
||||||
|
NavigationStack {
|
||||||
|
JoinRoomScreen(context: knockViewModel.context)
|
||||||
|
}
|
||||||
|
.previewDisplayName("Knock")
|
||||||
|
|
||||||
|
NavigationStack {
|
||||||
|
JoinRoomScreen(context: joinViewModel.context)
|
||||||
|
}
|
||||||
|
.previewDisplayName("Join")
|
||||||
|
|
||||||
|
NavigationStack {
|
||||||
|
JoinRoomScreen(context: inviteViewModel.context)
|
||||||
|
}
|
||||||
|
.previewDisplayName("Invite")
|
||||||
|
}
|
||||||
|
|
||||||
|
static func makeViewModel(interaction: JoinRoomScreenInteraction) -> JoinRoomScreenViewModel {
|
||||||
|
JoinRoomScreenViewModel(roomID: "6",
|
||||||
|
roomName: "Room Name",
|
||||||
|
avatarURL: nil,
|
||||||
|
interaction: interaction,
|
||||||
|
clientProxy: ClientProxyMock(.init()))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,72 +19,47 @@ import Foundation
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RoomHeaderView: View {
|
struct RoomHeaderView: View {
|
||||||
@ObservedObject var context: RoomScreenViewModel.Context
|
let roomID: String
|
||||||
|
let roomName: String
|
||||||
|
let avatarURL: URL?
|
||||||
|
|
||||||
|
let imageProvider: ImageProviderProtocol?
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
HStack(spacing: 12) {
|
HStack(spacing: 12) {
|
||||||
roomAvatar
|
roomAvatar
|
||||||
.accessibilityHidden(true)
|
.accessibilityHidden(true)
|
||||||
Text(context.viewState.roomTitle)
|
Text(roomName)
|
||||||
.font(.compound.bodyLGSemibold)
|
.font(.compound.bodyLGSemibold)
|
||||||
.accessibilityIdentifier(A11yIdentifiers.roomScreen.name)
|
.accessibilityIdentifier(A11yIdentifiers.roomScreen.name)
|
||||||
}
|
}
|
||||||
// Leading align whilst using the principal toolbar position.
|
// Leading align whilst using the principal toolbar position.
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
// Using a button stops it from getting truncated in the navigation bar
|
|
||||||
.onTapGesture {
|
|
||||||
context.send(viewAction: .displayRoomDetails)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ViewBuilder private var roomAvatar: some View {
|
private var roomAvatar: some View {
|
||||||
LoadableAvatarImage(url: context.viewState.roomAvatarURL,
|
LoadableAvatarImage(url: avatarURL,
|
||||||
name: context.viewState.roomTitle,
|
name: roomName,
|
||||||
contentID: context.viewState.roomID,
|
contentID: roomID,
|
||||||
avatarSize: .room(on: .timeline),
|
avatarSize: .room(on: .timeline),
|
||||||
imageProvider: context.imageProvider)
|
imageProvider: imageProvider)
|
||||||
.accessibilityIdentifier(A11yIdentifiers.roomScreen.avatar)
|
.accessibilityIdentifier(A11yIdentifiers.roomScreen.avatar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RoomHeaderView_Previews: PreviewProvider, TestablePreview {
|
struct RoomHeaderView_Previews: PreviewProvider, TestablePreview {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
bodyPlain
|
RoomHeaderView(roomID: "1",
|
||||||
bodyEncrypted
|
roomName: "Some Room name",
|
||||||
}
|
avatarURL: URL.picturesDirectory,
|
||||||
|
imageProvider: MockMediaProvider())
|
||||||
@ViewBuilder
|
|
||||||
static var bodyPlain: some View {
|
|
||||||
let viewModel = RoomScreenViewModel(roomProxy: RoomProxyMock(with: .init(name: "Some Room name", avatarURL: URL.picturesDirectory)),
|
|
||||||
timelineController: MockRoomTimelineController(),
|
|
||||||
mediaProvider: MockMediaProvider(),
|
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
|
||||||
voiceMessageMediaManager: VoiceMessageMediaManagerMock(),
|
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
|
||||||
application: ApplicationMock.default,
|
|
||||||
appSettings: ServiceLocator.shared.settings,
|
|
||||||
analyticsService: ServiceLocator.shared.analytics,
|
|
||||||
notificationCenter: NotificationCenterMock())
|
|
||||||
|
|
||||||
RoomHeaderView(context: viewModel.context)
|
|
||||||
.previewLayout(.sizeThatFits)
|
.previewLayout(.sizeThatFits)
|
||||||
.padding()
|
.padding()
|
||||||
}
|
|
||||||
|
RoomHeaderView(roomID: "1",
|
||||||
@ViewBuilder
|
roomName: "Some Room name",
|
||||||
static var bodyEncrypted: some View {
|
avatarURL: nil,
|
||||||
let viewModel = RoomScreenViewModel(roomProxy: RoomProxyMock(with: .init(name: "Some Room name")),
|
imageProvider: MockMediaProvider())
|
||||||
timelineController: MockRoomTimelineController(),
|
|
||||||
mediaProvider: MockMediaProvider(),
|
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
|
||||||
voiceMessageMediaManager: VoiceMessageMediaManagerMock(),
|
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
|
||||||
application: ApplicationMock.default,
|
|
||||||
appSettings: ServiceLocator.shared.settings,
|
|
||||||
analyticsService: ServiceLocator.shared.analytics,
|
|
||||||
notificationCenter: NotificationCenterMock())
|
|
||||||
|
|
||||||
RoomHeaderView(context: viewModel.context)
|
|
||||||
.previewLayout(.sizeThatFits)
|
.previewLayout(.sizeThatFits)
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,14 @@ struct RoomScreen: View {
|
|||||||
// .principal + .primaryAction works better than .navigation leading + trailing
|
// .principal + .primaryAction works better than .navigation leading + trailing
|
||||||
// as the latter disables interaction in the action button for rooms with long names
|
// as the latter disables interaction in the action button for rooms with long names
|
||||||
ToolbarItem(placement: .principal) {
|
ToolbarItem(placement: .principal) {
|
||||||
RoomHeaderView(context: context)
|
RoomHeaderView(roomID: context.viewState.roomID,
|
||||||
|
roomName: context.viewState.roomTitle,
|
||||||
|
avatarURL: context.viewState.roomAvatarURL,
|
||||||
|
imageProvider: context.imageProvider)
|
||||||
|
// Using a button stops it from getting truncated in the navigation bar
|
||||||
|
.onTapGesture {
|
||||||
|
context.send(viewAction: .displayRoomDetails)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !ProcessInfo.processInfo.isiOSAppOnMac {
|
if !ProcessInfo.processInfo.isiOSAppOnMac {
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:47d269397c823468762d9c7fd7075a6f998b4180f4ef5c126d13623348ba02b2
|
||||||
|
size 2089420
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1df7a389ffbf315811e1605cb542a01ae560e977872c49e15092dc0f7432b1eb
|
||||||
|
size 2053936
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cf9c852e2d1618056391d08faacfbe402be84ced71793364e25e4e1fd0a84481
|
||||||
|
size 2057420
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5df7c700584320710a80633c4b06b1045886a88a32ba112a692560b58ce5eaf0
|
||||||
|
size 2123755
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8945225fb83489edf46bb1454770b0c55d2265b8b330ecd16079534c1fc2ef76
|
||||||
|
size 2087732
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e60ad9a4485f37882412ec46821127ea0f605f9abe435598f43d8bc2d5279c83
|
||||||
|
size 2104307
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5e17277315e799bbac0caf145de342a624bfc80357aa63f297334fe8d6c81367
|
||||||
|
size 826589
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4e45734de2938d98904d8b7c19a44b997fb1f6447839f60909e79c1e620096fd
|
||||||
|
size 806983
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a0f4de3f95f6242680a8b8b52939fd2a3a79a299d8dea6d5609244038c95bc1a
|
||||||
|
size 811524
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d0bca263cdc71f987ef6b0f4f3d70f4779ea3865a603f752fc5e3ae773c9f394
|
||||||
|
size 857464
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:171a0753cc99267b93c83f3bc2caf9546d2d72c685251f9fe70796556db5fc3e
|
||||||
|
size 837228
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a88bb18fd0311c7c380f76a7c1364a1eb844f708835425b8a22abcc12997c25c
|
||||||
|
size 851763
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:4268ac08be6b463369ec4e0c934231e997b033e45baed23df03cb35869007272
|
oid sha256:74663f8e4eb478dd77a5776fae6c8e7cf5669afefdbe3d81d645f5149a7c369b
|
||||||
size 82475
|
size 102035
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:e267a3678f60b674ec7078a2f5c2ccec2c54c5d18fed5954f0abe00f4fa6aee4
|
oid sha256:bd608f8bbc19d99aae193cefeffea78a18fe7f90f7cf36954c7eaf17be1101e3
|
||||||
size 88868
|
size 107314
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:e0d8ffab7621673199dc80f52821ba7777e889454b530d95da212a929aefbca3
|
oid sha256:9d8f2fe2b6221152af219876bae7f5eea2ef13b80a6a361737e2e65000bef447
|
||||||
size 40309
|
size 51457
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:fbdc78f06c3ea80474b399722c2bbfd31cfd4ff79cb7e0b0729e87a41587b3be
|
oid sha256:83833e81ea928633b3ddbb2df6933093c49f9008f4520fd7d02def0b60588d9c
|
||||||
size 47531
|
size 58896
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:3a78eb43053c130a296430bc9c26a6e1f51cd90854f28f65822980a21a9c69fd
|
oid sha256:0d8b960df58dfcceddd04e6b738b0470fed90b5094241bfc908edf445aede761
|
||||||
size 17056
|
size 17145
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:3a78eb43053c130a296430bc9c26a6e1f51cd90854f28f65822980a21a9c69fd
|
oid sha256:0d8b960df58dfcceddd04e6b738b0470fed90b5094241bfc908edf445aede761
|
||||||
size 17056
|
size 17145
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:caa01deca1c554a2809eaef83a5bac2a19018d3bf9ed023da26bc822d2af80f4
|
oid sha256:b1c69feb82dedba852ca45ca32e927ca8df49fb6aafbdbef9fdd3c5daebf5d4f
|
||||||
size 12731
|
size 12770
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:caa01deca1c554a2809eaef83a5bac2a19018d3bf9ed023da26bc822d2af80f4
|
oid sha256:b1c69feb82dedba852ca45ca32e927ca8df49fb6aafbdbef9fdd3c5daebf5d4f
|
||||||
size 12731
|
size 12770
|
||||||
|
|||||||
46
UnitTests/Sources/JoinRoomScreenViewModelTests.swift
Normal file
46
UnitTests/Sources/JoinRoomScreenViewModelTests.swift
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2022 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
|
||||||
|
@testable import ElementX
|
||||||
|
|
||||||
|
@MainActor
|
||||||
|
class JoinRoomScreenViewModelTests: XCTestCase {
|
||||||
|
var viewModel: JoinRoomScreenViewModelProtocol!
|
||||||
|
|
||||||
|
var context: JoinRoomScreenViewModelType.Context {
|
||||||
|
viewModel.context
|
||||||
|
}
|
||||||
|
|
||||||
|
func testInteraction() async throws {
|
||||||
|
setupViewModel()
|
||||||
|
|
||||||
|
let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .joined }
|
||||||
|
context.send(viewAction: .join)
|
||||||
|
try await deferred.fulfill()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func setupViewModel(throwing: Bool = false) {
|
||||||
|
let clientProxy = ClientProxyMock(.init())
|
||||||
|
clientProxy.joinRoomReturnValue = throwing ? .failure(.sdkError(ClientProxyMockError.generic)) : .success(())
|
||||||
|
viewModel = JoinRoomScreenViewModel(roomID: "1",
|
||||||
|
roomName: "Room Name",
|
||||||
|
avatarURL: nil,
|
||||||
|
interaction: .join,
|
||||||
|
clientProxy: clientProxy)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,7 +53,7 @@ packages:
|
|||||||
# path: ../matrix-rust-sdk
|
# path: ../matrix-rust-sdk
|
||||||
Compound:
|
Compound:
|
||||||
url: https://github.com/element-hq/compound-ios
|
url: https://github.com/element-hq/compound-ios
|
||||||
revision: ed63ed56655956c950a3b9c55e2010fdf1a2d11d
|
revision: 43310aaaced1a0861c39894bb1086067375326be
|
||||||
# path: ../compound-ios
|
# path: ../compound-ios
|
||||||
AnalyticsEvents:
|
AnalyticsEvents:
|
||||||
url: https://github.com/matrix-org/matrix-analytics-events
|
url: https://github.com/matrix-org/matrix-analytics-events
|
||||||
|
|||||||
Reference in New Issue
Block a user