Skip to content

Commit

Permalink
Update AmityUIKit v4.0.0-beta16
Browse files Browse the repository at this point in the history
  • Loading branch information
nrlnishan committed Aug 2, 2024
1 parent 5495152 commit 71674b1
Show file tree
Hide file tree
Showing 47 changed files with 1,287 additions and 368 deletions.
28 changes: 22 additions & 6 deletions UpstraUIKit/AmityUIKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@
68B30A7C2B70E38B006A4102 /* AmityStoryCommentSettingsScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B30A752B70E38B006A4102 /* AmityStoryCommentSettingsScreenViewModelProtocol.swift */; };
68B30A7D2B70E38B006A4102 /* AmityStoryCommentSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B30A762B70E38B006A4102 /* AmityStoryCommentSettingsScreenViewModel.swift */; };
68B30A7E2B70E38B006A4102 /* AmityStoryCommentSettingsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B30A782B70E38B006A4102 /* AmityStoryCommentSettingsItem.swift */; };
68D959D42C4A41F3005DC4FA /* SharedFrameworks in Frameworks */ = {isa = PBXBuildFile; productRef = 68D959D32C4A41F3005DC4FA /* SharedFrameworks */; };
68F0EE062BC6BBDF004B3AA4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 68F0EE052BC6BBDF004B3AA4 /* PrivacyInfo.xcprivacy */; };
68F5D9FA2B481E4000A9FA0D /* AmityUIKit4.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68F5D9F92B481E4000A9FA0D /* AmityUIKit4.framework */; };
720D599A2525BDB1009734EF /* DispatchGroupWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 720D59992525BDB1009734EF /* DispatchGroupWrapper.swift */; };
Expand Down Expand Up @@ -491,7 +490,12 @@
A0B68B6126E7238E007D7B5B /* AmityPostLiveStreamTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A0B68B5F26E7238E007D7B5B /* AmityPostLiveStreamTableViewCell.xib */; };
A0E2B23226B7B68200F1C4D5 /* AmityPostGalleryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E2B23026B7B68200F1C4D5 /* AmityPostGalleryViewController.swift */; };
A0E2B23326B7B68200F1C4D5 /* AmityPostGalleryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A0E2B23126B7B68200F1C4D5 /* AmityPostGalleryViewController.xib */; };
A959BBD02C5D012B00E23ABB /* SharedFrameworks in Frameworks */ = {isa = PBXBuildFile; productRef = A959BBCF2C5D012B00E23ABB /* SharedFrameworks */; };
A98B3BC12914BD7700C0A56D /* AmityCommentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98B3BC02914BD7700C0A56D /* AmityCommentViewLayout.swift */; };
A9E106532C3B9498002BB4A1 /* TextHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E106522C3B9498002BB4A1 /* TextHighlighter.swift */; };
A9E106552C3B9511002BB4A1 /* AmityMentionListProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E106542C3B9511002BB4A1 /* AmityMentionListProvider.swift */; };
A9E106572C3B954D002BB4A1 /* AmityMentionTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E106562C3B954D002BB4A1 /* AmityMentionTextEditor.swift */; };
A9E106592C3B9582002BB4A1 /* ASCMentionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E106582C3B9582002BB4A1 /* ASCMentionManager.swift */; };
A9E890F529F8F43C00A22B35 /* AmityReactionUsersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E890F429F8F43C00A22B35 /* AmityReactionUsersViewController.swift */; };
A9E890F729F933D900A22B35 /* AmityReactionUsersViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9E890F629F933D900A22B35 /* AmityReactionUsersViewController.xib */; };
A9E890FB29F93DCE00A22B35 /* AmityReactionUserTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E890F929F93DCE00A22B35 /* AmityReactionUserTableViewCell.swift */; };
Expand Down Expand Up @@ -1160,6 +1164,10 @@
A0E2B23026B7B68200F1C4D5 /* AmityPostGalleryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityPostGalleryViewController.swift; sourceTree = "<group>"; };
A0E2B23126B7B68200F1C4D5 /* AmityPostGalleryViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AmityPostGalleryViewController.xib; sourceTree = "<group>"; };
A98B3BC02914BD7700C0A56D /* AmityCommentViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityCommentViewLayout.swift; sourceTree = "<group>"; };
A9E106522C3B9498002BB4A1 /* TextHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextHighlighter.swift; sourceTree = "<group>"; };
A9E106542C3B9511002BB4A1 /* AmityMentionListProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityMentionListProvider.swift; sourceTree = "<group>"; };
A9E106562C3B954D002BB4A1 /* AmityMentionTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityMentionTextEditor.swift; sourceTree = "<group>"; };
A9E106582C3B9582002BB4A1 /* ASCMentionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ASCMentionManager.swift; sourceTree = "<group>"; };
A9E890F429F8F43C00A22B35 /* AmityReactionUsersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityReactionUsersViewController.swift; sourceTree = "<group>"; };
A9E890F629F933D900A22B35 /* AmityReactionUsersViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AmityReactionUsersViewController.xib; sourceTree = "<group>"; };
A9E890F929F93DCE00A22B35 /* AmityReactionUserTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmityReactionUserTableViewCell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1332,7 +1340,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
68D959D42C4A41F3005DC4FA /* SharedFrameworks in Frameworks */,
A959BBD02C5D012B00E23ABB /* SharedFrameworks in Frameworks */,
68F5D9FA2B481E4000A9FA0D /* AmityUIKit4.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -4426,6 +4434,10 @@
isa = PBXGroup;
children = (
D42E1B89274CED5C006C41ED /* AmityMentionManager.swift */,
A9E106522C3B9498002BB4A1 /* TextHighlighter.swift */,
A9E106542C3B9511002BB4A1 /* AmityMentionListProvider.swift */,
A9E106562C3B954D002BB4A1 /* AmityMentionTextEditor.swift */,
A9E106582C3B9582002BB4A1 /* ASCMentionManager.swift */,
);
path = Manager;
sourceTree = "<group>";
Expand Down Expand Up @@ -4495,7 +4507,7 @@
);
name = AmityUIKit;
packageProductDependencies = (
68D959D32C4A41F3005DC4FA /* SharedFrameworks */,
A959BBCF2C5D012B00E23ABB /* SharedFrameworks */,
);
productName = UpstraUIKit;
productReference = 72A3503024EA811500DA9D46 /* AmityUIKit.framework */;
Expand Down Expand Up @@ -4810,6 +4822,7 @@
72A3511C24EA820800DA9D46 /* AmityGalleryCollectionView.swift in Sources */,
72A3514524EA820800DA9D46 /* AmityColorSet.swift in Sources */,
72A3514424EA820800DA9D46 /* AmitySettings.swift in Sources */,
A9E106572C3B954D002BB4A1 /* AmityMentionTextEditor.swift in Sources */,
B7A9242324F42873001F4B49 /* AmityNewsfeedViewController.swift in Sources */,
B7B31C5C250F4ACF000AC6E4 /* IndicatorInfo.swift in Sources */,
0D43B17A25D8330800E6B604 /* AmityFeedScreenViewModel.swift in Sources */,
Expand Down Expand Up @@ -4992,6 +5005,7 @@
97D723DB2695B133000735F5 /* AmityUserFollowersScreenViewModelProtocol.swift in Sources */,
721C8C87262D1EA100BA576C /* AmityCommentEditorViewController.swift.swift in Sources */,
72A3514124EA820800DA9D46 /* AmityComunity.swift in Sources */,
A9E106552C3B9511002BB4A1 /* AmityMentionListProvider.swift in Sources */,
B788B935252D8B71002F4F12 /* AmityTrendingCommunityScreenViewModelProtocol.swift in Sources */,
A0A903B226BA749B002949B2 /* Protocol.swift in Sources */,
A9E890FE29F93F9B00A22B35 /* AmityReactionUsersScreenViewModel.swift in Sources */,
Expand Down Expand Up @@ -5066,6 +5080,7 @@
97D7C4A9264BF91000EA24F5 /* AmityChannelMemberViewController.swift in Sources */,
97D0EBB026A14A8800E9FE6A /* AmityPendingPostsDetailScreenViewModel.swift in Sources */,
78C1C4AD25F3EE0500D6F092 /* AmitySettingsItemTextContentTableViewCell.swift in Sources */,
A9E106532C3B9498002BB4A1 /* TextHighlighter.swift in Sources */,
0D95687A25D58F1C00DE98FD /* AmityPostComposable.swift in Sources */,
0DD94A6325A783250066FA0B /* AmityCommunityProfileScreenViewModel.swift in Sources */,
72A3515624EA820800DA9D46 /* AmityMessageListConstant.swift in Sources */,
Expand Down Expand Up @@ -5218,6 +5233,7 @@
72A3512624EA820800DA9D46 /* AmityGalleryCollectionViewCell.swift in Sources */,
B70D2BC82577200F00E2D56B /* AmityMessageAudioController.swift in Sources */,
72354424252F2D09006F9872 /* AmityHUD.swift in Sources */,
A9E106592C3B9582002BB4A1 /* ASCMentionManager.swift in Sources */,
0D12BD2B25D4307100D3E4BC /* AmityPostHeaderProtocol.swift in Sources */,
72A351A524EA821900DA9D46 /* AmityIconSet.swift in Sources */,
72DAC85B2614734E00422325 /* CommunityNotificationSettingItem.swift in Sources */,
Expand Down Expand Up @@ -5296,7 +5312,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.3;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -5354,7 +5370,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.3;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
Expand Down Expand Up @@ -5507,7 +5523,7 @@
/* End XCConfigurationList section */

/* Begin XCSwiftPackageProductDependency section */
68D959D32C4A41F3005DC4FA /* SharedFrameworks */ = {
A959BBCF2C5D012B00E23ABB /* SharedFrameworks */ = {
isa = XCSwiftPackageProductDependency;
productName = SharedFrameworks;
};
Expand Down
10 changes: 6 additions & 4 deletions UpstraUIKit/AmityUIKit4/AmityUIKit4.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@
68D4358D2B984698004482D7 /* AmityCommunityModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D4358C2B984698004482D7 /* AmityCommunityModel.swift */; };
68D4358F2B984889004482D7 /* AmityTextEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D4358E2B984889004482D7 /* AmityTextEditorView.swift */; };
68D435962BA0DCDE004482D7 /* AmityViewBuildable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D435952BA0DCDE004482D7 /* AmityViewBuildable.swift */; };
68D959D22C4A41E7005DC4FA /* SharedFrameworks in Frameworks */ = {isa = PBXBuildFile; productRef = 68D959D12C4A41E7005DC4FA /* SharedFrameworks */; };
68D9BCC92C32FC2B0082685B /* StoryAdView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D9BCC82C32FC2B0082685B /* StoryAdView.swift */; };
68D9BCCB2C348F420082685B /* UIKitStoryPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D9BCCA2C348F420082685B /* UIKitStoryPaginator.swift */; };
68D9BCCD2C348FB50082685B /* StoryFixedFrequencyAdInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D9BCCC2C348FB50082685B /* StoryFixedFrequencyAdInjector.swift */; };
Expand Down Expand Up @@ -300,6 +299,7 @@
A955BA842C228B9300585C59 /* AdAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = A955BA832C228B9300585C59 /* AdAsset.swift */; };
A955BA862C228BAF00585C59 /* AdSeenEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A955BA852C228BAF00585C59 /* AdSeenEvent.swift */; };
A955BA882C228BD500585C59 /* SDKModel+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A955BA872C228BD500585C59 /* SDKModel+Extension.swift */; };
A959BBD22C5D015300E23ABB /* SharedFrameworks in Frameworks */ = {isa = PBXBuildFile; productRef = A959BBD12C5D015300E23ABB /* SharedFrameworks */; };
A9634BD32BD5275200EF6E83 /* MessageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9634BD22BD5275200EF6E83 /* MessageCache.swift */; };
A96B90EA2BF5B5D000DC7DEB /* ReactionListContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96B90E92BF5B5D000DC7DEB /* ReactionListContent.swift */; };
A96B90EC2BF5B60900DC7DEB /* ReactionListHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96B90EB2BF5B60900DC7DEB /* ReactionListHeader.swift */; };
Expand Down Expand Up @@ -709,6 +709,7 @@
A955BA832C228B9300585C59 /* AdAsset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdAsset.swift; sourceTree = "<group>"; };
A955BA852C228BAF00585C59 /* AdSeenEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdSeenEvent.swift; sourceTree = "<group>"; };
A955BA872C228BD500585C59 /* SDKModel+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SDKModel+Extension.swift"; sourceTree = "<group>"; };
A959BBD32C5D016000E23ABB /* AmityUIKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AmityUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A9634BD22BD5275200EF6E83 /* MessageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCache.swift; sourceTree = "<group>"; };
A96B90E92BF5B5D000DC7DEB /* ReactionListContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionListContent.swift; sourceTree = "<group>"; };
A96B90EB2BF5B60900DC7DEB /* ReactionListHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionListHeader.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -807,7 +808,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
68D959D22C4A41E7005DC4FA /* SharedFrameworks in Frameworks */,
A959BBD22C5D015300E23ABB /* SharedFrameworks in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1229,6 +1230,7 @@
684AE10D2B0C5D2000FD7270 /* Frameworks */ = {
isa = PBXGroup;
children = (
A959BBD32C5D016000E23ABB /* AmityUIKit.framework */,
689EE69A2BECC07800927D51 /* AmityUIKit.framework */,
684AE1332B0C968F00FD7270 /* AmitySDK.xcframework */,
684AE1342B0C968F00FD7270 /* Realm.xcframework */,
Expand Down Expand Up @@ -2309,7 +2311,7 @@
);
name = AmityUIKit4;
packageProductDependencies = (
68D959D12C4A41E7005DC4FA /* SharedFrameworks */,
A959BBD12C5D015300E23ABB /* SharedFrameworks */,
);
productName = AmityUIKit4;
productReference = 684AE0F12B0C5B0200FD7270 /* AmityUIKit4.framework */;
Expand Down Expand Up @@ -3059,7 +3061,7 @@
/* End XCConfigurationList section */

/* Begin XCSwiftPackageProductDependency section */
68D959D12C4A41E7005DC4FA /* SharedFrameworks */ = {
A959BBD12C5D015300E23ABB /* SharedFrameworks */ = {
isa = XCSwiftPackageProductDependency;
productName = SharedFrameworks;
};
Expand Down
32 changes: 29 additions & 3 deletions UpstraUIKit/AmityUIKit4/AmityUIKit4/Ads/Engine/AdEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -277,15 +277,15 @@ extension AdEngine {
// AdEngine query ads filtering by activeness, readiness, and placement, then use AdSupplier to determine which ads to recommend.
// This is the entry points for paginator.
public func getRecommendedAds(count: Int, placement: AmityAdPlacement, communityId: String?) -> [AmityAd] {
let applicableAds = getApplicableAds(placement: placement)
let applicableAds = getApplicableAds(placement: placement, communityId: communityId)

// Ask supplier to provide us with relevant ads
return AdSupplier.shared.recommendAds(count: count, placement: placement, communityId: communityId, from: applicableAds)
}

// Determines ads which suits for given placement & whose assets are downloaded & ready to be used.
private func getApplicableAds(placement: AmityAdPlacement) -> [AmityAd] {
return ads.filter {
private func getApplicableAds(placement: AmityAdPlacement, communityId: String?) -> [AmityAd] {
let readyAds = ads.filter {

// Criteria 1: Placement should be valid.
let isPlacementValid = $0.placements.contains(placement)
Expand All @@ -311,6 +311,32 @@ extension AdEngine {

return isPlacementValid && isEndDateValid && isAssetReady
}

// Find if any ready ads targets matches community id
if let communityId {
let targetedAds = readyAds.filter { ad in
let commIds = ad.target?.communityIds ?? []
return commIds.contains(communityId)
}

// If there are no ads which target particular communities, we return non targeted ads
if targetedAds.isEmpty {
let nonTargetedAds = readyAds.filter { ad in
let commIds = ad.target?.communityIds ?? []
return commIds.isEmpty
}
return nonTargetedAds
}

return targetedAds
} else {
let nonTargetedAds = readyAds.filter { ad in
let commIds = ad.target?.communityIds ?? []
return commIds.isEmpty
}

return nonTargetedAds
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ class MentionListProvider {

// Repositories
private var userRepository: AmityUserRepository = AmityUserRepository(client: AmityUIKitManagerInternal.shared.client)
private var channelMembersRepository: AmityChannelMembership?
private var channelMembersRepo: AmityChannelMembership?
private var communityMembersRepo: AmityCommunityMembership?
private var communityRepository: AmityCommunityRepository = AmityCommunityRepository(client: AmityUIKitManagerInternal.shared.client)

// Collection
Expand Down Expand Up @@ -51,7 +52,7 @@ class MentionListProvider {
}
case .message(let subChannelId):
if let channelId = subChannelId {
channelMembersRepository = AmityChannelMembership(client: client, andChannel: channelId)
channelMembersRepo = AmityChannelMembership(client: client, andChannel: channelId)
}
}

Expand Down Expand Up @@ -116,6 +117,7 @@ class MentionListProvider {
}

private func setupCommunity(withId communityId: String) {
communityMembersRepo = AmityCommunityMembership(client: AmityUIKitManagerInternal.shared.client, andCommunityId: communityId)
communityToken = communityRepository.getCommunity(withId: communityId).observe { [weak self] liveObject, error in
if liveObject.dataStatus == .fresh {
self?.communityToken?.invalidate()
Expand All @@ -135,7 +137,7 @@ class MentionListProvider {
mentionListToken = nil
mentionListToken?.invalidate()

channelMembersCollection = channelMembersRepository?.searchMembers(displayName: displayName, filterBuilder: builder, roles: [])
channelMembersCollection = channelMembersRepo?.searchMembers(displayName: displayName, filterBuilder: builder, roles: [], includeDeleted: false)
mentionListToken = channelMembersCollection?.observe({ [weak self] liveCollection, _, error in
self?.handleSearchResponse(with: liveCollection)
})
Expand All @@ -155,7 +157,7 @@ class MentionListProvider {
mentionListToken = nil
mentionListToken?.invalidate()

communityMembersCollection = communityRepository.searchMembers(communityId: communityId, displayName: displayName, membership: .member, roles: [], sortBy: .lastCreated)
communityMembersCollection = communityMembersRepo?.searchMembers(keyword: displayName, filter: [.member], roles: [], sortBy: .lastCreated, includeDeleted: false)
mentionListToken = communityMembersCollection?.observe { [weak self] liveCollection, _, error in
self?.handleSearchResponse(with: liveCollection)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,6 @@ protocol MentionTextEditorDelegate: AnyObject {
func didUpdateAttributedText(text: NSAttributedString)
}

extension AmityMention: CustomStringConvertible {

public var description: String {
return "Mention: \(self.userId ?? "") | Index: \(self.index) | Length: \(self.length)"
}
}

/// Highlights mentions in Text Editor
class MentionTextEditor {

Expand Down
Loading

0 comments on commit 71674b1

Please sign in to comment.