mirror of
https://github.com/hcengineering/platform.git
synced 2025-02-22 12:22:24 +00:00
Fix email notifications, fix collaborators aligment (#5062)
Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>
This commit is contained in:
parent
bfcf86115d
commit
decc0c5d5d
@ -19,17 +19,18 @@
|
|||||||
DisplayDocUpdateMessage,
|
DisplayDocUpdateMessage,
|
||||||
DocUpdateMessageViewlet
|
DocUpdateMessageViewlet
|
||||||
} from '@hcengineering/activity'
|
} from '@hcengineering/activity'
|
||||||
import { Action, Component } from '@hcengineering/ui'
|
import { Action, Component, Icon } from '@hcengineering/ui'
|
||||||
import { getClient } from '@hcengineering/presentation'
|
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||||
import { IntlString } from '@hcengineering/platform'
|
import { IntlString } from '@hcengineering/platform'
|
||||||
import { AttachedDoc, Collection, Doc } from '@hcengineering/core'
|
import { AttachedDoc, Class, Collection, Doc, Ref } from '@hcengineering/core'
|
||||||
import { AttributeModel } from '@hcengineering/view'
|
import { AttributeModel } from '@hcengineering/view'
|
||||||
|
import { createEventDispatcher } from 'svelte'
|
||||||
|
import { buildRemovedDoc, checkIsObjectRemoved } from '@hcengineering/view-resources'
|
||||||
|
|
||||||
import { getAttributeModel, getCollectionAttribute } from '../../activityMessagesUtils'
|
import { getAttributeModel, getCollectionAttribute } from '../../activityMessagesUtils'
|
||||||
import BaseMessagePreview from '../activity-message/BaseMessagePreview.svelte'
|
import BaseMessagePreview from '../activity-message/BaseMessagePreview.svelte'
|
||||||
import DocUpdateMessageContent from './DocUpdateMessageContent.svelte'
|
import DocUpdateMessageContent from './DocUpdateMessageContent.svelte'
|
||||||
import DocUpdateMessageAttributes from './DocUpdateMessageAttributes.svelte'
|
import DocUpdateMessageAttributes from './DocUpdateMessageAttributes.svelte'
|
||||||
import { createEventDispatcher } from 'svelte'
|
|
||||||
|
|
||||||
export let value: DisplayDocUpdateMessage
|
export let value: DisplayDocUpdateMessage
|
||||||
export let readonly = false
|
export let readonly = false
|
||||||
@ -40,6 +41,8 @@
|
|||||||
const hierarchy = client.getHierarchy()
|
const hierarchy = client.getHierarchy()
|
||||||
const dispatch = createEventDispatcher()
|
const dispatch = createEventDispatcher()
|
||||||
|
|
||||||
|
const objectQuery = createQuery()
|
||||||
|
|
||||||
let viewlet: DocUpdateMessageViewlet | undefined
|
let viewlet: DocUpdateMessageViewlet | undefined
|
||||||
let objectName: IntlString | undefined = undefined
|
let objectName: IntlString | undefined = undefined
|
||||||
let collectionName: IntlString | undefined = undefined
|
let collectionName: IntlString | undefined = undefined
|
||||||
@ -61,6 +64,19 @@
|
|||||||
attributeModel = model
|
attributeModel = model
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$: viewlet?.component && loadObject(value.objectId, value.objectClass)
|
||||||
|
|
||||||
|
async function loadObject (_id: Ref<Doc>, _class: Ref<Class<Doc>>): Promise<void> {
|
||||||
|
const isObjectRemoved = await checkIsObjectRemoved(client, _id, _class)
|
||||||
|
|
||||||
|
if (isObjectRemoved) {
|
||||||
|
object = await buildRemovedDoc(client, _id, _class)
|
||||||
|
} else {
|
||||||
|
objectQuery.query(_class, { _id }, (res) => {
|
||||||
|
object = res[0]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
function onClick (event: MouseEvent): void {
|
function onClick (event: MouseEvent): void {
|
||||||
event.stopPropagation()
|
event.stopPropagation()
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
@ -69,9 +85,11 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<BaseMessagePreview message={value} {type} {readonly} {actions} on:click>
|
<BaseMessagePreview message={value} {type} {readonly} {actions} on:click>
|
||||||
<span class="textContent overflow-label" class:contentOnly={type === 'content-only'}>
|
<span class="textContent overflow-label flex-presenter" class:contentOnly={type === 'content-only'}>
|
||||||
{#if viewlet?.component && object}
|
{#if viewlet?.component && object}
|
||||||
<div class="customContent">
|
<span class="customContent flex-presenter">
|
||||||
|
<Icon size="small" icon={viewlet.icon ?? activity.icon.Activity} />
|
||||||
|
<span class="ml-2" />
|
||||||
{#each value?.previousMessages ?? [] as msg}
|
{#each value?.previousMessages ?? [] as msg}
|
||||||
<Component
|
<Component
|
||||||
is={viewlet.component}
|
is={viewlet.component}
|
||||||
@ -89,7 +107,7 @@
|
|||||||
onClick
|
onClick
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</span>
|
||||||
{:else if value.action === 'create' || value.action === 'remove'}
|
{:else if value.action === 'create' || value.action === 'remove'}
|
||||||
<DocUpdateMessageContent
|
<DocUpdateMessageContent
|
||||||
message={value}
|
message={value}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
export let disabled: boolean = false
|
export let disabled: boolean = false
|
||||||
export let inline: boolean = false
|
export let inline: boolean = false
|
||||||
export let accent: boolean = false
|
export let accent: boolean = false
|
||||||
|
export let compact = false
|
||||||
|
|
||||||
$: employee = $employeeByIdStore.get((value as PersonAccount)?.person as Ref<Employee>)
|
$: employee = $employeeByIdStore.get((value as PersonAccount)?.person as Ref<Employee>)
|
||||||
|
|
||||||
@ -38,9 +39,9 @@
|
|||||||
{#if value}
|
{#if value}
|
||||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||||
{#if employee}
|
{#if employee}
|
||||||
<EmployeePresenter value={employee} {disabled} {inline} {accent} {avatarSize} on:accent-color />
|
<EmployeePresenter value={employee} {disabled} {inline} {accent} {avatarSize} {compact} on:accent-color />
|
||||||
{:else if person}
|
{:else if person}
|
||||||
<PersonPresenter value={person} {disabled} {inline} {accent} {avatarSize} on:accent-color />
|
<PersonPresenter value={person} {disabled} {inline} {accent} {avatarSize} {compact} on:accent-color />
|
||||||
{:else}
|
{:else}
|
||||||
<div class="flex-row-center">
|
<div class="flex-row-center">
|
||||||
<Avatar size={avatarSize} />
|
<Avatar size={avatarSize} />
|
||||||
|
@ -25,10 +25,11 @@
|
|||||||
export let disabled: boolean = false
|
export let disabled: boolean = false
|
||||||
export let inline: boolean = false
|
export let inline: boolean = false
|
||||||
export let accent: boolean = false
|
export let accent: boolean = false
|
||||||
|
export let compact = false
|
||||||
|
|
||||||
$: account = $personAccountByIdStore.get(value)
|
$: account = $personAccountByIdStore.get(value)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if account}
|
{#if account}
|
||||||
<PersonAccountPresenter value={account} {disabled} {inline} {avatarSize} {accent} on:accent-color />
|
<PersonAccountPresenter value={account} {disabled} {inline} {avatarSize} {accent} {compact} on:accent-color />
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -48,9 +48,9 @@
|
|||||||
$: hasDifferentChanges = added.length > 0 && removed.length > 0
|
$: hasDifferentChanges = added.length > 0 && removed.length > 0
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="root">
|
<span class="root">
|
||||||
<Icon icon={activity.icon.Activity} size="small" />
|
<Icon icon={activity.icon.Activity} size="small" />
|
||||||
<div class="label">
|
<span class="label">
|
||||||
{#if hasDifferentChanges}
|
{#if hasDifferentChanges}
|
||||||
<Label label={notification.string.ChangedCollaborators} />:
|
<Label label={notification.string.ChangedCollaborators} />:
|
||||||
{:else if added.length > 0}
|
{:else if added.length > 0}
|
||||||
@ -58,30 +58,30 @@
|
|||||||
{:else if removed.length > 0}
|
{:else if removed.length > 0}
|
||||||
<Label label={notification.string.RemovedCollaborators} />:
|
<Label label={notification.string.RemovedCollaborators} />:
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</span>
|
||||||
|
|
||||||
{#if added.length > 0}
|
{#if added.length > 0}
|
||||||
<div class="row">
|
<span class="row">
|
||||||
{#if hasDifferentChanges}
|
{#if hasDifferentChanges}
|
||||||
<IconAdd size={'x-small'} fill={'var(--theme-trans-color)'} />
|
<IconAdd size={'x-small'} fill={'var(--theme-trans-color)'} />
|
||||||
{/if}
|
{/if}
|
||||||
{#each added as add}
|
{#each added as add}
|
||||||
<PersonAccountRefPresenter value={add} avatarSize="card" />
|
<PersonAccountRefPresenter value={add} avatarSize="card" compact />
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="antiHSpacer"></div>
|
<span class="antiHSpacer"></span>
|
||||||
{#if removed.length > 0}
|
{#if removed.length > 0}
|
||||||
<div class="row">
|
<span class="row">
|
||||||
{#if hasDifferentChanges}
|
{#if hasDifferentChanges}
|
||||||
<IconDelete size={'x-small'} fill={'var(--theme-trans-color)'} />
|
<IconDelete size={'x-small'} fill={'var(--theme-trans-color)'} />
|
||||||
{/if}
|
{/if}
|
||||||
{#each removed as remove}
|
{#each removed as remove}
|
||||||
<PersonAccountRefPresenter value={remove} avatarSize="card" />
|
<PersonAccountRefPresenter value={remove} avatarSize="card" compact />
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</span>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.root {
|
.root {
|
||||||
|
Loading…
Reference in New Issue
Block a user