SyntaxGameServer/RCCService2018/content/internal/Chat/Modules/LuaChat/Components/GroupDetailDialogs/ParticipantDialog.lua

96 lines
3.1 KiB
Lua

local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local CoreGui = game:GetService("CoreGui")
local LuaApp = CoreGui.RobloxGui.Modules.LuaApp
local LuaChat = CoreGui.RobloxGui.Modules.LuaChat
local GenericDialogType = require(LuaChat.Components.GroupDetailDialogs.GenericDialogType)
local DialogComponents = require(LuaChat.Components.DialogComponents)
local WebApi = require(LuaChat.WebApi)
local ConversationModel = require(LuaChat.Models.Conversation)
local SetRoute = require(LuaChat.Actions.SetRoute)
local DialogInfo = require(LuaChat.DialogInfo)
local NotificationType = require(LuaApp.Enum.NotificationType)
local Intent = DialogInfo.Intent
local PARTICIPANT_VIEW = 1
local PARTICIPANT_REPORT = 2
local PARTICIPANT_REMOVE = 3
local ParticipantDialog = {}
function ParticipantDialog.new(appState, titleKey, options, conversationId, conversation, userId)
local self = {}
setmetatable(self, {__index = ParticipantDialog})
self.appState = appState
self.dialog = DialogComponents.OptionDialog.new(appState, titleKey, options, userId)
self.conversationId = conversationId
self.conversation = conversation
if conversation ~= nil then
if conversation.initiator == tostring(Players.LocalPlayer.UserId)
and conversation.conversationType == ConversationModel.Type.MULTI_USER_CONVERSATION then
self.dialog.optionGuis[PARTICIPANT_REMOVE].Visible = true
else
self.dialog.optionGuis[PARTICIPANT_REMOVE].Visible = false
end
self.dialog:Resize()
end
self.dialogConnection = self.dialog.selected:connect(function(optionId, userIdSelected)
local user = self.appState.store:getState().Users[userIdSelected]
if user == nil then
return
end
if optionId == PARTICIPANT_VIEW then
if user and user.id and (type(user.id) == 'string' or type(user.id) == 'number') then
GuiService:BroadcastNotification(WebApi.MakeUserProfileUrl(user.id),
NotificationType.VIEW_PROFILE)
else
print("Bad input to RequestNativeView, show error prompt here")
end
elseif optionId == PARTICIPANT_REPORT then
if user and user.id and (type(user.id) == 'string' or type(user.id) == 'number') then
GuiService:BroadcastNotification(WebApi.MakeReportUserUrl(user.id, conversationId),
NotificationType.REPORT_ABUSE)
else
print("Bad input to RequestNativeView, show error prompt here")
end
elseif optionId == PARTICIPANT_REMOVE then
local messageArguments = {
USERNAME = user.name,
}
self.appState.store:dispatch(SetRoute(Intent.GenericDialog, {
dialog = GenericDialogType.RemoveUserDialog,
dialogParameters = {
titleKey = "Feature.Chat.Action.RemoveUser",
messageKey = "Feature.Chat.Message.RemoveUser",
cancelTitleKey = "Feature.Chat.Action.Cancel",
confirmationTitleKey = "Feature.Chat.Action.Remove",
conversation = self.conversation,
user = user,
messageArguments = messageArguments
}
}
))
end
end)
return self
end
function ParticipantDialog:Destruct()
if self.dialogConnection then
self.dialogConnection:disconnect()
end
self.dialog:Destruct()
end
return ParticipantDialog