platform/plugins/chunter-resources/src/components/EditChannelDescriptionTab.svelte
Andrey Sobolev 7621bccf22
UBER-1074: Svelte 4 (#4014)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
2023-11-20 17:01:43 +07:00

86 lines
2.6 KiB
Svelte

<!--
//
// Copyright © 2022 Hardcore Engineering Inc.
//
// 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.
-->
<script lang="ts">
import { Channel, ChunterSpace } from '@hcengineering/chunter'
import { getCurrentAccount } from '@hcengineering/core'
import { getClient } from '@hcengineering/presentation'
import { Button, EditBox } from '@hcengineering/ui'
import { createEventDispatcher } from 'svelte'
import chunter from '../plugin'
import EditChannelDescriptionAttachments from './EditChannelDescriptionAttachments.svelte'
export let channel: ChunterSpace
const client = getClient()
const dispatch = createEventDispatcher()
function isCommonChannel (channel?: ChunterSpace): channel is Channel {
return channel?._class === chunter.class.Channel
}
function onTopicChange (ev: Event) {
if (!isCommonChannel(channel)) {
return
}
const newTopic = (ev.target as HTMLInputElement).value
client.update(channel, { topic: newTopic })
}
function onDescriptionChange (ev: Event) {
if (channel == null) {
return
}
const newDescription = (ev.target as HTMLInputElement).value
client.update(channel, { description: newDescription })
}
async function leaveChannel (): Promise<void> {
await client.update(channel, {
$pull: { members: getCurrentAccount()._id }
})
dispatch('close')
}
</script>
{#if channel}
<div class="flex-col flex-gap-3">
{#if isCommonChannel(channel)}
<EditBox
label={chunter.string.Topic}
bind:value={channel.topic}
placeholder={chunter.string.Topic}
autoFocus
on:change={onTopicChange}
/>
<EditBox
label={chunter.string.ChannelDescription}
bind:value={channel.description}
placeholder={chunter.string.ChannelDescription}
on:change={onDescriptionChange}
/>
<Button
label={chunter.string.LeaveChannel}
justify={'left'}
size={'x-large'}
on:click={() => {
leaveChannel()
}}
/>
{/if}
<EditChannelDescriptionAttachments {channel} />
</div>
{/if}