{"version":3,"file":"chat-ae1cff2c.js","sources":["../../../app/javascript/audio/tadah_16.ogg","../../../app/javascript/composeables/chat.js"],"sourcesContent":["export default \"__VITE_ASSET__4bf9f668__\"","import store from '@/store/index';\nimport useHttp from '@/composeables/http';\nimport notify from '@/composeables/notify';\nimport { usePage } from '@inertiajs/vue3';\nimport messageSound from '../audio/tadah_16.ogg';\nimport { copyToClipboard } from '@/composeables/helpers';\nimport orderBy from 'lodash/orderBy';\n\nvar channelEventListener = {};\nvar streamListener = null;\n\nexport async function setupChat() {\n const $http = useHttp();\n if (store.getters.session.user.id && store.getters.client) {\n const userID = String(store.getters.session.user.id);\n let user = null;\n user = await connectStreamUser(userID, $http);\n store.dispatch('updateStreamUser', user.me);\n if (user && user.me.unread_channels !== undefined) {\n var unreadChannelsCount = user.me.unread_channels || 0;\n }\n const res = await $http.get('/messaging_folders');\n store.dispatch('setFolders', res.data.folders);\n await store.dispatch('setChannels');\n store.dispatch('setChannelLoaded');\n store.dispatch(\n 'setUnreadChannelsCount',\n unreadChannelsCount - getRequestChannelsUnreadCount() + requestChannelsCount()\n );\n store.dispatch('setStreamUsers');\n watchChannels();\n streamListener = store.getters.client.on(async event => {\n if (event.type === 'connection.changed' && !event.online) {\n await connectStreamUser(userID, $http);\n }\n if (event.cid) {\n // that's a hack for reactivity dont remove this\n let channel = store.getters.channels.find(c => c.cid === event.cid);\n if (channel) {\n store.dispatch('addStreamChannel', channel);\n }\n }\n if ((event.unread_channels !== undefined && event.cid) || event.type === 'notification.invited') {\n let eventChannel = store.state.channels.find(c => c.cid === event.cid);\n if (eventChannel && (notInCurrentChat(event.cid) || event.type != 'message.new')) {\n store.dispatch(\n 'setUnreadChannelsCount',\n event.unread_channels - getRequestChannelsUnreadCount() + requestChannelsCount()\n );\n }\n }\n if (\n (event.type == 'notification.removed_from_channel' && event.member.invited) ||\n event.type == 'notification.invite_rejected'\n ) {\n store.dispatch('setUnreadChannelsCount', store.getters.unreadChannelsCount - 1);\n }\n if (event.type === 'notification.invited') {\n store.dispatch('setUnreadChannelsCount', store.getters.unreadChannelsCount + 1);\n notify(\n {\n group: 'app',\n type: 'chat',\n payload: {\n title: 'Chat Request',\n channel: event.channel,\n member: event.member,\n received_at: event.received_at\n }\n },\n store.getters.longNotification\n );\n } else if (event.type === 'user.updated') {\n if (store.getters.streamUser.id === event.user.id) {\n store.dispatch('updateStreamUser', event.user);\n }\n }\n });\n }\n}\n\nasync function connectStreamUser(userID, httpClient) {\n let user = await store.getters.client.connectUser(\n {\n id: String(store.getters.session.user.id)\n },\n async () => {\n const response = await httpClient.post('/chat_token', { userID });\n return response.data.token;\n }\n );\n return user;\n}\n\nfunction watchChannels() {\n store.state.channels.forEach(channel => {\n listenToMessages(channel);\n });\n}\n\nexport function listenToMessages(channel) {\n const client = store.getters.client;\n channel.off('message.new', () => {});\n channelEventListener[channel.cid] = channel.on('message.new', event => {\n let user = client.user;\n let channelMuted = store.state.mutedChannels && store.state.mutedChannels.includes(channel.cid);\n if (channelMuted) {\n channel.markRead();\n }\n if (\n event.user.id != user.id &&\n channel.data.notification_users &&\n channel.data.notification_users.includes(user.id) &&\n !event.message.activity_status &&\n notInCurrentChat(event.cid) &&\n !channelMuted\n ) {\n notify(\n {\n group: 'app',\n type: 'chat',\n payload: {\n title: 'New Message',\n message: event.message,\n member: event.user,\n channel_id: event.channel_id,\n received_at: event.received_at\n }\n },\n store.getters.shortNotification\n );\n if (client.user.message_notification_sound) {\n var audio = new Audio(messageSound);\n audio.play();\n }\n }\n });\n}\n\nexport function unsubscribeToMessages(channelId) {\n if (channelEventListener[channelId]) {\n channelEventListener[channelId].unsubscribe();\n }\n}\n\nexport function unsubscribeStreamChannel() {\n if (streamListener) {\n streamListener.unsubscribe();\n }\n}\n\nexport function getChannelName(channel, userData = null) {\n let user = userData || store.getters.streamUser;\n let channelData = channel.data || channel;\n let channelMembers = Object.values(channel.members || channel.state.members);\n if (channelData.direct_messaging) {\n let cMember = channelMembers.find(x => x.user.id != user.id);\n return cMember ? cMember.user.name : 'Unnamed';\n } else if (channelData.direct_group_messaging) {\n var channelName = channelData.nameUpdated\n ? channelData.name\n : Object.values(channelMembers)\n .filter(x => x.user_id != user.id && !x.invite_rejected_at)\n .map(x => x.user.name.trim())\n .sort()\n .join(', ');\n return channelName != '' ? channelName : 'Unnamed';\n }\n return channelData.name;\n}\n\nexport function getUserName(member, streamUsers) {\n let user = store.getters.streamUsers.find(x => x.id === member.id);\n if (user) {\n return user.name;\n } else {\n return member.name;\n }\n}\n\nexport function getUserSubtitle(user) {\n const userCompanies = user.companies_data?.map(c => c.name) || [];\n if (userCompanies.length > 0 && user.role_title !== null && user.role_title !== '') {\n return `${user.role_title} at ${userCompanies.join(', ')}`;\n } else if (user.role_title !== null && user.team_name !== null && user.role_title !== '') {\n return `${user.role_title} at ${user.team_name}`;\n } else if (userCompanies.length > 0) {\n return `Works at ${userCompanies.join(', ')}`;\n } else if (user.team_name) {\n return `Works at ${user.team_name}`;\n } else if (user.role_title !== '') {\n return user.role_title;\n } else {\n return '';\n }\n}\n\nexport function getCompaniesByCategory(category, users, selectedCompanies = []) {\n let usersByCategory = [];\n let companies = [];\n if (category === 'All Companies') {\n usersByCategory = users;\n } else {\n usersByCategory = users.filter(user =>\n user.company_categories ? user.company_categories.includes(category) : false\n );\n }\n let data = {};\n usersByCategory.forEach(user => {\n const userCompanies = user.companies_data?.map(c => c.name) || [];\n userCompanies.forEach(company => {\n data = setCompanyData(company, data, user);\n });\n });\n if (data) {\n Object.keys(data).map(comp =>\n companies.push({\n name: comp,\n image: data[comp].company_image,\n users: data[comp].users.sort((a, b) => a.name.localeCompare(b.name)),\n description: data[comp].description,\n founding_year: data[comp].founding_year,\n location: data[comp].location,\n company_uid: data[comp].company_uid,\n category: getCompanyCategory(data[comp].users),\n selected: selectedCompanies.includes(comp),\n opened: selectedCompanies.includes(comp)\n })\n );\n }\n return orderBy(\n companies,\n function (c) {\n return c.name;\n },\n 'asc'\n );\n}\n\nexport function setCompanyData(company, dataObj, user) {\n let data = dataObj;\n data[company] = data[company] || {};\n if (data[company].users) {\n data[company].users.push(user);\n } else {\n data[company].users = [user];\n }\n data[company].company_image = data[company].company_image\n ? data[company].company_image\n : user.companies_data?.length\n ? user.companies_data[0].image\n : null;\n if (!data[company].company_uid) {\n data[company].company_uid =\n user.companies_data && user.companies_data.some(c => c.name === company)\n ? user.companies_data.find(c => c.name === company).company_uid\n : null;\n }\n if (!data[company].description) {\n data[company].description =\n user.companies_data && user.companies_data.some(c => c.name === company)\n ? user.companies_data.find(c => c.name === company).description\n : null;\n }\n if (!data[company].founding_year) {\n data[company].founding_year =\n user.companies_data && user.companies_data.some(c => c.name === company)\n ? user.companies_data.find(c => c.name === company).founding_year\n : null;\n }\n if (!data[company].location) {\n data[company].location =\n user.companies_data && user.companies_data.some(c => c.name === company)\n ? user.companies_data.find(c => c.name === company).location\n : null;\n }\n return data;\n}\n\nexport function getCompanyCategory(users) {\n let categories = [];\n let userWithCategory = users.filter(x => x.company_categories && x.company_categories.length > 0);\n userWithCategory.map(user => {\n user.company_categories.map(x => categories.push(x));\n });\n let uniqCategories = [...new Set(categories)];\n return uniqCategories.join(', ');\n}\n\nexport function getImageObject(channel) {\n if (channel.data.direct_messaging) {\n let channelMembers = Object.values(channel.state.members);\n return channelMembers.filter(x => x.user_id !== store.getters.streamUser.id)[0].user;\n } else {\n return channel.data;\n }\n}\n\nexport function isGIF(message) {\n let attachments = message.attachments || [];\n attachments = attachments.filter(a => !a.type || a.type == 'giphy').length;\n return attachments ? true : false;\n}\n\nexport function isImage(message) {\n let attachments = message.attachments || [];\n attachments = attachments.filter(a => a.type && a.type == 'image').length;\n return attachments ? true : false;\n}\n\nexport function isVideo(message) {\n let attachments = message.attachments || [];\n attachments = attachments.filter(a => a.type && a.type == 'video').length;\n return attachments ? true : false;\n}\n\nexport function isFile(message) {\n let attachments = message.attachments || [];\n attachments = attachments.filter(a => a.type && a.type == 'file').length;\n return attachments ? true : false;\n}\n\nexport function displayMessage(message) {\n if (message.attachments && message.attachments.length) {\n if (!message.text || (!message.attachments[0].title && message.attachments[0].og_scrape_url === message.text)) {\n return false;\n }\n }\n return true;\n}\n\nexport function activityMessage(message, channel) {\n const activityProminentText = {\n created: ['created'],\n added: [','],\n removed: ['removed', ','],\n demoted: ['demoted to member'],\n promoted: ['promoted to admin'],\n join: [],\n leave: ['left'],\n invited: []\n };\n if (message) {\n let messageText = message.text;\n if (channel && messageText) {\n messageText = messageText.replace(/(<([^>]+)>)/gi, '');\n if (message.activity_status) {\n activityProminentText[message.activity_status].forEach(replaceText => {\n messageText = messageText.replace(\n new RegExp(replaceText, 'gi'),\n `${replaceText}`\n );\n });\n }\n messageText = messageText.replace(/{{channel_name}}/gi, channel.data.name);\n }\n if (message.activity_members) {\n message.activity_members.forEach(member => {\n messageText = messageText.replace(\n new RegExp(`{{user:${member.id}}}`, 'gi'),\n `${getUserName(member)}`\n );\n });\n }\n return messageText;\n }\n return '';\n}\n\nexport function getUserByName(member) {\n let user = store.getters.streamUsers.find(x => x.id === member.id);\n if (user) {\n return user;\n } else {\n return member;\n }\n}\n\nexport function getColor() {\n let color = '#';\n for (let i = 0; i < 3; i++)\n color += ('0' + Math.floor(((1 + Math.random()) * Math.pow(16, 2)) / 2).toString(16)).slice(-2);\n return color;\n}\n\nexport async function saveNotificationPreference(users, channel, notificationSelected) {\n let notificationUsers = channel.data.notification_users || [];\n if (notificationSelected == 'all') {\n notificationUsers.push(...users);\n } else {\n notificationUsers = notificationUsers.filter(x => !users.includes(x));\n }\n await channel.updatePartial({\n set: {\n notification_users: notificationUsers\n }\n });\n store.dispatch('setChannels');\n}\n\nexport function notInCurrentChat(cid) {\n const page = usePage();\n const url = page.url;\n let miniChats =\n (localStorage.getItem('selectedChats') && !localStorage.getItem('selectedChats').includes(cid)) ||\n (localStorage.getItem('closedChats') && localStorage.getItem('closedChats').includes(cid)) ||\n !localStorage.getItem('selectedChats');\n return (\n (url.includes('/messenger') && localStorage.getItem('chosenChannel') !== cid) ||\n (!url.includes('/messenger') && miniChats)\n );\n}\n\nexport function getRequestChannelsUnreadCount() {\n let count = 0;\n store.state.channels.map(c =>\n Object.values(c.state.members).some(\n u => u.invited && !u.request_rejected_at && u.user_id === store.getters.client.user.id\n )\n ? (count += c.state.unreadCount > 0 ? 1 : 0)\n : null\n );\n return count;\n}\n\nexport function requestChannelsCount() {\n let count = 0;\n store.state.channels.map(c =>\n Object.values(c.state.members).some(\n u => u.invited && !u.invite_accepted_at && !u.invite_rejected_at && u.user_id === store.getters.client.user.id\n )\n ? (count += 1)\n : null\n );\n return count;\n}\n\nexport function broadcastChannelAndAdmin(channel) {\n return (\n !channel.data.broadcast_channel ||\n (channel.data.broadcast_channel &&\n channel.data.channel_admins &&\n channel.data.channel_admins.includes(store.getters.client.userID))\n );\n}\n\nexport function generateShareLink(channelId) {\n let link = window.location.href.replace(window.location.search, '') + '?uuid=' + channelId;\n copyToClipboard(link);\n}\n\nexport default {\n getChannelName,\n getUserName,\n getUserSubtitle,\n getCompaniesByCategory,\n getImageObject,\n displayMessage,\n isGIF,\n isImage,\n isVideo,\n isFile,\n activityMessage,\n getUserByName,\n getColor,\n saveNotificationPreference,\n notInCurrentChat,\n getRequestChannelsUnreadCount,\n requestChannelsCount,\n setupChat,\n unsubscribeToMessages,\n listenToMessages,\n unsubscribeStreamChannel,\n broadcastChannelAndAdmin\n};\n"],"names":["messageSound","channelEventListener","streamListener","setupChat","$http","useHttp","store","userID","user","connectStreamUser","unreadChannelsCount","res","getRequestChannelsUnreadCount","requestChannelsCount","watchChannels","event","channel","c","notInCurrentChat","notify","httpClient","listenToMessages","client","channelMuted","audio","unsubscribeToMessages","channelId","unsubscribeStreamChannel","getChannelName","userData","channelData","channelMembers","cMember","x","channelName","getUserName","member","streamUsers","getUserSubtitle","userCompanies","_a","getCompaniesByCategory","category","users","selectedCompanies","usersByCategory","companies","data","company","setCompanyData","comp","a","b","getCompanyCategory","orderBy","dataObj","categories","getImageObject","isGIF","message","attachments","isImage","isVideo","isFile","displayMessage","activityMessage","activityProminentText","messageText","replaceText","getUserByName","getColor","color","i","saveNotificationPreference","notificationSelected","notificationUsers","cid","url","usePage","miniChats","count","u","broadcastChannelAndAdmin","generateShareLink","link","copyToClipboard"],"mappings":"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"}