mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-09 19:27:44 +02:00
233 lines
8.4 KiB
TypeScript
233 lines
8.4 KiB
TypeScript
//
|
|
// Copyright © 2020 Anticrm Platform Contributors.
|
|
//
|
|
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 { type ActivityMessage } from '@hcengineering/activity'
|
|
import chunter, { type Channel, type ChatMessage, type DirectMessage } from '@hcengineering/chunter'
|
|
import { type Resources } from '@hcengineering/platform'
|
|
import { MessageBox, getClient } from '@hcengineering/presentation'
|
|
import { getLocation, navigate, showPopup } from '@hcengineering/ui'
|
|
import { writable } from 'svelte/store'
|
|
|
|
import ChannelCreatedMessage from './components/activity/ChannelCreatedMessage.svelte'
|
|
import MembersChangedMessage from './components/activity/MembersChangedMessage.svelte'
|
|
import ChannelHeader from './components/ChannelHeader.svelte'
|
|
import ChannelIcon from './components/ChannelIcon.svelte'
|
|
import ChannelPanel from './components/ChannelPanel.svelte'
|
|
import ChannelPresenter from './components/ChannelPresenter.svelte'
|
|
import ChannelPreview from './components/ChannelPreview.svelte'
|
|
import ChatMessageInput from './components/chat-message/ChatMessageInput.svelte'
|
|
import ChatMessagePresenter from './components/chat-message/ChatMessagePresenter.svelte'
|
|
import ChatMessagePreview from './components/chat-message/ChatMessagePreview.svelte'
|
|
import ChatMessagesPresenter from './components/chat-message/ChatMessagesPresenter.svelte'
|
|
import Chat from './components/chat/Chat.svelte'
|
|
import CreateChannel from './components/chat/create/CreateChannel.svelte'
|
|
import CreateDirectChat from './components/chat/create/CreateDirectChat.svelte'
|
|
import ChunterBrowser from './components/chat/specials/ChunterBrowser.svelte'
|
|
import SavedMessages from './components/chat/specials/SavedMessages.svelte'
|
|
import ConvertDmToPrivateChannelModal from './components/ConvertDmToPrivateChannel.svelte'
|
|
import DirectIcon from './components/DirectIcon.svelte'
|
|
import DmHeader from './components/DmHeader.svelte'
|
|
import DmPresenter from './components/DmPresenter.svelte'
|
|
import EditChannel from './components/EditChannel.svelte'
|
|
import ChatMessageNotificationLabel from './components/notification/ChatMessageNotificationLabel.svelte'
|
|
import JoinChannelNotificationPresenter from './components/notification/JoinChannelNotificationPresenter.svelte'
|
|
import ThreadNotificationPresenter from './components/notification/ThreadNotificationPresenter.svelte'
|
|
import ThreadMessagePresenter from './components/threads/ThreadMessagePresenter.svelte'
|
|
import ThreadMessagePreview from './components/threads/ThreadMessagePreview.svelte'
|
|
import ThreadParentPresenter from './components/threads/ThreadParentPresenter.svelte'
|
|
import Threads from './components/threads/Threads.svelte'
|
|
import ThreadView from './components/threads/ThreadView.svelte'
|
|
import ThreadViewPanel from './components/threads/ThreadViewPanel.svelte'
|
|
import ChatWidget from './components/ChatWidget.svelte'
|
|
import ChatWidgetTab from './components/ChatWidgetTab.svelte'
|
|
import WorkbenchTabExtension from './components/WorkbenchTabExtension.svelte'
|
|
import DirectMessageButton from './components/DirectMessageButton.svelte'
|
|
import EmployeePresenter from './components/ChunterEmployeePresenter.svelte'
|
|
import InlineCommentThread from './components/inline-comment/InlineCommentThread.svelte'
|
|
|
|
import {
|
|
chunterSpaceLinkFragmentProvider,
|
|
closeChatWidgetTab,
|
|
getMessageLink,
|
|
getMessageLocation,
|
|
getThreadLink,
|
|
locationDataResolver,
|
|
openChannelInSidebar,
|
|
openChannelInSidebarAction,
|
|
openThreadInSidebar,
|
|
replyToThread
|
|
} from './navigation'
|
|
import {
|
|
ChannelTitleProvider,
|
|
DirectTitleProvider,
|
|
canCopyMessageLink,
|
|
canDeleteMessage,
|
|
canReplyToThread,
|
|
dmIdentifierProvider,
|
|
getDmName,
|
|
getTitle,
|
|
getUnreadThreadsCount,
|
|
leaveChannelAction,
|
|
removeChannelAction,
|
|
translateMessage,
|
|
showOriginalMessage,
|
|
canTranslateMessage,
|
|
startConversationAction
|
|
} from './utils'
|
|
|
|
export { default as ChannelEmbeddedContent } from './components/ChannelEmbeddedContent.svelte'
|
|
export { default as ChatMessageInput } from './components/chat-message/ChatMessageInput.svelte'
|
|
export { default as ChatMessagePopup } from './components/chat-message/ChatMessagePopup.svelte'
|
|
export { default as ChatMessagesPresenter } from './components/chat-message/ChatMessagesPresenter.svelte'
|
|
export { default as Header } from './components/Header.svelte'
|
|
export { default as ThreadView } from './components/threads/ThreadView.svelte'
|
|
|
|
export async function ArchiveChannel (channel: Channel, evt: any, props?: { afterArchive?: () => void }): Promise<void> {
|
|
showPopup(MessageBox, {
|
|
label: chunter.string.ArchiveChannel,
|
|
message: chunter.string.ArchiveConfirm,
|
|
richMessage: true,
|
|
action: async () => {
|
|
const client = getClient()
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
await client.update(channel, { archived: true })
|
|
if (props?.afterArchive != null) props.afterArchive()
|
|
|
|
const loc = getLocation()
|
|
if (loc.path[3] === channel._id) {
|
|
loc.path.length = 3
|
|
navigate(loc)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
async function UnarchiveChannel (channel: Channel): Promise<void> {
|
|
showPopup(MessageBox, {
|
|
label: chunter.string.UnarchiveChannel,
|
|
message: chunter.string.UnarchiveConfirm,
|
|
action: async () => {
|
|
const client = getClient()
|
|
await client.update(channel, { archived: false })
|
|
}
|
|
})
|
|
}
|
|
|
|
async function ConvertDmToPrivateChannel (dm: DirectMessage): Promise<void> {
|
|
showPopup(ConvertDmToPrivateChannelModal, {
|
|
label: chunter.string.ConvertToPrivate,
|
|
dm
|
|
})
|
|
}
|
|
|
|
export const userSearch = writable('')
|
|
|
|
export async function chunterBrowserVisible (): Promise<boolean> {
|
|
return false
|
|
}
|
|
|
|
export function chatMessagesFilter (message: ActivityMessage): boolean {
|
|
return message._class === chunter.class.ChatMessage
|
|
}
|
|
|
|
export async function deleteChatMessage (message: ChatMessage): Promise<void> {
|
|
const client = getClient()
|
|
|
|
await client.remove(message)
|
|
}
|
|
|
|
export { replyToThread } from './navigation'
|
|
|
|
export default async (): Promise<Resources> => ({
|
|
filter: {
|
|
ChatMessagesFilter: chatMessagesFilter
|
|
},
|
|
component: {
|
|
CreateChannel,
|
|
CreateDirectChat,
|
|
ThreadParentPresenter,
|
|
ThreadViewPanel,
|
|
ChannelHeader,
|
|
ChannelPanel,
|
|
ChannelPresenter,
|
|
ChannelPreview,
|
|
ChunterBrowser,
|
|
DmHeader,
|
|
DmPresenter,
|
|
EditChannel,
|
|
ThreadView,
|
|
SavedMessages,
|
|
ChatMessagePresenter,
|
|
ChatMessageInput,
|
|
ChatMessagesPresenter,
|
|
Chat,
|
|
ThreadMessagePresenter,
|
|
Threads,
|
|
DirectIcon,
|
|
ChannelIcon,
|
|
ChatMessageNotificationLabel,
|
|
ThreadNotificationPresenter,
|
|
ThreadMessagePreview,
|
|
ChatMessagePreview,
|
|
JoinChannelNotificationPresenter,
|
|
ChatWidget,
|
|
ChatWidgetTab,
|
|
WorkbenchTabExtension,
|
|
DirectMessageButton,
|
|
EmployeePresenter,
|
|
InlineCommentThread
|
|
},
|
|
activity: {
|
|
ChannelCreatedMessage,
|
|
MembersChangedMessage
|
|
},
|
|
function: {
|
|
GetDmName: getDmName,
|
|
ChunterBrowserVisible: chunterBrowserVisible,
|
|
GetFragment: getTitle,
|
|
GetLink: getMessageLink,
|
|
DirectTitleProvider,
|
|
ChannelTitleProvider,
|
|
DmIdentifierProvider: dmIdentifierProvider,
|
|
CanDeleteMessage: canDeleteMessage,
|
|
CanCopyMessageLink: canCopyMessageLink,
|
|
GetChunterSpaceLinkFragment: chunterSpaceLinkFragmentProvider,
|
|
GetUnreadThreadsCount: getUnreadThreadsCount,
|
|
GetThreadLink: getThreadLink,
|
|
ReplyToThread: replyToThread,
|
|
CanReplyToThread: canReplyToThread,
|
|
GetMessageLink: getMessageLocation,
|
|
CloseChatWidgetTab: closeChatWidgetTab,
|
|
OpenChannelInSidebar: openChannelInSidebar,
|
|
CanTranslateMessage: canTranslateMessage,
|
|
OpenThreadInSidebar: openThreadInSidebar,
|
|
LocationDataResolver: locationDataResolver
|
|
},
|
|
actionImpl: {
|
|
ArchiveChannel,
|
|
UnarchiveChannel,
|
|
ConvertDmToPrivateChannel,
|
|
DeleteChatMessage: deleteChatMessage,
|
|
LeaveChannel: leaveChannelAction,
|
|
RemoveChannel: removeChannelAction,
|
|
ReplyToThread: replyToThread,
|
|
OpenInSidebar: openChannelInSidebarAction,
|
|
TranslateMessage: translateMessage,
|
|
ShowOriginalMessage: showOriginalMessage,
|
|
StartConversation: startConversationAction
|
|
}
|
|
})
|