diff --git a/packages/core/src/time.ts b/packages/core/src/time.ts index fadb0dc6dd..5cb82eb0d9 100644 --- a/packages/core/src/time.ts +++ b/packages/core/src/time.ts @@ -20,6 +20,12 @@ export function getDay (time: Timestamp): Timestamp { return date.getTime() } +export function getHour (time: Timestamp): Timestamp { + const date: Date = new Date(time) + date.setMinutes(0, 0, 0) + return date.getTime() +} + export function getDisplayTime (time: number): string { let options: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: 'numeric' } if (!isToday(time)) { @@ -37,6 +43,10 @@ export function isOtherDay (time1: Timestamp, time2: Timestamp): boolean { return getDay(time1) !== getDay(time2) } +export function isOtherHour (time1: Timestamp, time2: Timestamp): boolean { + return getHour(time1) !== getHour(time2) +} + function isToday (time: number): boolean { const current = new Date() const target = new Date(time) diff --git a/plugins/activity-resources/src/components/Activity.svelte b/plugins/activity-resources/src/components/Activity.svelte index c608d32bb0..3f47af0804 100644 --- a/plugins/activity-resources/src/components/Activity.svelte +++ b/plugins/activity-resources/src/components/Activity.svelte @@ -21,6 +21,7 @@ import ActivityExtensionComponent from './ActivityExtension.svelte' import ActivityFilter from './ActivityFilter.svelte' import { combineActivityMessages } from '../activityMessagesUtils' + import { canGroupMessages } from '../utils' export let object: Doc export let showCommenInput: boolean = true @@ -95,14 +96,16 @@
{#if filteredMessages.length} - {#each filteredMessages as message} + {#each filteredMessages as message, index} + {@const canGroup = canGroupMessages(message, filteredMessages[index - 1])} diff --git a/plugins/activity-resources/src/components/MessageTimestamp.svelte b/plugins/activity-resources/src/components/MessageTimestamp.svelte index 822a9f8518..8ebfcc10e6 100644 --- a/plugins/activity-resources/src/components/MessageTimestamp.svelte +++ b/plugins/activity-resources/src/components/MessageTimestamp.svelte @@ -19,6 +19,7 @@ import { getEmbeddedLabel } from '@hcengineering/platform' export let date: Timestamp + export let shortTime = false $: fullDate = new Date(date).toLocaleString('default', { minute: '2-digit', @@ -27,8 +28,14 @@ month: 'short', year: 'numeric' }) + + function getShortTime (date: Timestamp): string { + const options: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: 'numeric' } + + return new Date(date).toLocaleTimeString('default', options).split(' ')[0] + } - {getDisplayTime(date)} + {shortTime ? getShortTime(date) : getDisplayTime(date)} diff --git a/plugins/activity-resources/src/components/activity-message/ActivityMessagePresenter.svelte b/plugins/activity-resources/src/components/activity-message/ActivityMessagePresenter.svelte index 759b0b011a..49f5fb865a 100644 --- a/plugins/activity-resources/src/components/activity-message/ActivityMessagePresenter.svelte +++ b/plugins/activity-resources/src/components/activity-message/ActivityMessagePresenter.svelte @@ -13,7 +13,7 @@ // limitations under the License. --> {#if !isHidden} @@ -119,10 +130,16 @@ isActionsOpened = true }} > - {#if showNotify && !embedded} + {#if showNotify && !embedded && !isShort}
{/if} - {#if !embedded} + {#if embedded} +
+ {:else if isShort} + + + + {:else}
{#if $$slots.icon} @@ -137,33 +154,33 @@
{/if}
- {:else} -
{/if}
-
- {#if person} - - {:else} -
-
- {/if} + {#if !isShort} +
+ {#if person} + + {:else} +
+
+ {/if} - {#if !skipLabel} - - {/if} + {#if !skipLabel} + + {/if} + + {#if !skipLabel && showDatePreposition} + + + {/if} - {#if !skipLabel && showDatePreposition} - - {/if} - - - - -
+
+ {/if} @@ -203,7 +220,7 @@ position: relative; display: flex; flex-shrink: 0; - padding: 0.75rem 0.75rem 0.75rem 1rem; + padding: 0.5rem 0.75rem 0.5rem 1rem; gap: 1rem; //overflow: hidden; border: 1px solid transparent; @@ -243,6 +260,18 @@ visibility: visible; } + &:hover > .time { + visibility: visible; + } + + .time { + display: flex; + justify-content: end; + width: 2.5rem; + visibility: hidden; + margin-top: 0.125rem; + } + &.actionsOpened { &.borderedHover { border: 1px solid var(--global-ui-BackgroundColor); diff --git a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePresenter.svelte b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePresenter.svelte index a449ef867b..019171deaa 100644 --- a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePresenter.svelte +++ b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePresenter.svelte @@ -15,6 +15,7 @@ {#if isLoading} @@ -589,6 +602,7 @@ {#each displayMessages as message, index (message._id)} {@const isSelected = message._id === selectedMessageId} + {@const canGroup = canGroupChatMessages(message, displayMessages[index - 1])} {#if separatorIndex === index} @@ -609,6 +623,7 @@ withShowMore={false} attachmentImageSize="x-large" showLinksPreview={false} + type={canGroup ? 'short' : 'default'} hideLink />
@@ -633,7 +648,6 @@