Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
d4c44a1
Create separate love client
utkaka Sep 2, 2025
08c852c
Merge branch 'develop' of https://github.com/hcengineering/platform i…
utkaka Sep 2, 2025
e34da18
Add prepare connection
utkaka Sep 2, 2025
0b97cc7
Merge branch 'develop' into office-prepare-connection
utkaka Sep 3, 2025
089122a
Merge branch 'develop' into office-prepare-connection
utkaka Sep 3, 2025
d24682a
Merge branch 'develop' into office-prepare-connection
utkaka Sep 5, 2025
c5b8adc
Move track handlers to the livekit client
utkaka Sep 5, 2025
3e4db61
Minor fixes
utkaka Sep 8, 2025
49b241c
Move meetings related logic to meetingController
utkaka Sep 10, 2025
4206919
Fix accepting invites
utkaka Sep 10, 2025
d4c2e79
Add invite button to the employee popup
utkaka Sep 11, 2025
40023fd
Add Invite button to the meeting controls
utkaka Sep 15, 2025
69ea58f
Minor fixes
utkaka Sep 18, 2025
d792c75
Change widget control bar
utkaka Sep 19, 2025
380d842
Merge branch 'develop' into office-prepare-connection
utkaka Sep 22, 2025
53f1d6e
Cleanup logs
utkaka Sep 22, 2025
40db504
Fix checks
utkaka Sep 22, 2025
bda827f
Fix commented code
utkaka Sep 22, 2025
172851a
Rename file
utkaka Sep 23, 2025
8e35d28
Merge branch 'develop' into office-pulse-invites
utkaka Sep 23, 2025
50a1c06
Move pulse creation to the presentation package
utkaka Sep 24, 2025
4b0db01
Fix popup update function
utkaka Sep 24, 2025
8657534
Use pulse for meeting invites
utkaka Sep 24, 2025
e75c3ca
Remove old transient invite
utkaka Sep 25, 2025
3d78298
Use pulse for join requests
utkaka Sep 25, 2025
35ecbfc
Remove old transient join requests
utkaka Sep 25, 2025
4754eea
Merge branch 'develop' into office-pulse-invites
utkaka Sep 25, 2025
521db4e
Fix merged files
utkaka Sep 25, 2025
56d25d2
Remove unused import
utkaka Sep 25, 2025
bc6ccd4
Update plugins/love-resources/src/joinRequests.ts
utkaka Sep 26, 2025
d6dea29
Merge branch 'develop' into office-pulse-invites
utkaka Sep 26, 2025
1f4d3e2
Merge branch 'develop' into office-pulse-invites
utkaka Oct 2, 2025
ea0941a
Fix merge errors
utkaka Oct 2, 2025
acd197b
Fix validation
utkaka Oct 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 0 additions & 65 deletions models/love/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,13 @@ import {
import {
type DevicesPreference,
type Floor,
type Invite,
type JoinRequest,
loveId,
type Meeting,
type MeetingMinutes,
type MeetingStatus,
type MeetingSchedule,
type Office,
type ParticipantInfo,
type RequestStatus,
type Room,
type RoomAccess,
type RoomInfo,
Expand Down Expand Up @@ -163,31 +160,6 @@ export class TParticipantInfo extends TDoc implements ParticipantInfo {
account!: AccountUuid | null
}

@Model(love.class.JoinRequest, core.class.Doc, DOMAIN_TRANSIENT)
export class TJoinRequest extends TDoc implements JoinRequest {
@Prop(TypeRef(contact.class.Person), getEmbeddedLabel('From'))
person!: Ref<Person>

@Prop(TypeRef(love.class.Room), love.string.Room)
room!: Ref<Room>

status!: RequestStatus
}

@Model(love.class.Invite, core.class.Doc, DOMAIN_TRANSIENT)
export class TInvite extends TDoc implements Invite {
@Prop(TypeRef(contact.class.Person), getEmbeddedLabel('From'))
from!: Ref<Person>

@Prop(TypeRef(contact.class.Person), getEmbeddedLabel('Target'))
target!: Ref<Person>

@Prop(TypeRef(love.class.Room), love.string.Room)
room!: Ref<Room>

status!: RequestStatus
}

@Model(love.class.DevicesPreference, preference.class.Preference)
export class TDevicesPreference extends TPreference implements DevicesPreference {
blurRadius!: number
Expand Down Expand Up @@ -272,10 +244,8 @@ export function createModel (builder: Builder): void {
TFloor,
TOffice,
TParticipantInfo,
TJoinRequest,
TDevicesPreference,
TRoomInfo,
TInvite,
TMeeting,
TMeetingMinutes,
TMeetingSchedule
Expand Down Expand Up @@ -388,36 +358,6 @@ export function createModel (builder: Builder): void {
love.ids.LoveNotificationGroup
)

builder.createDoc(
notification.class.NotificationType,
core.space.Model,
{
hidden: false,
generated: false,
label: love.string.InivitingLabel,
group: love.ids.LoveNotificationGroup,
txClasses: [core.class.TxCreateDoc],
objectClass: love.class.Invite,
defaultEnabled: true
},
love.ids.InviteNotification
)

builder.createDoc(
notification.class.NotificationType,
core.space.Model,
{
hidden: false,
generated: false,
label: love.string.KnockingLabel,
group: love.ids.LoveNotificationGroup,
txClasses: [],
objectClass: love.class.JoinRequest,
defaultEnabled: true
},
love.ids.KnockNotification
)

builder.createDoc(notification.class.NotificationProviderDefaults, core.space.Model, {
provider: notification.providers.SoundNotificationProvider,
excludeIgnore: [love.ids.KnockNotification],
Expand Down Expand Up @@ -514,11 +454,6 @@ export function createModel (builder: Builder): void {
components: { input: { component: chunter.component.ChatMessageInput, props: { collection: 'messages' } } }
})

builder.mixin(love.class.JoinRequest, core.class.Class, core.mixin.TxAccessLevel, {
createAccessLevel: AccountRole.Guest,
removeAccessLevel: AccountRole.Guest
})

builder.mixin(love.class.ParticipantInfo, core.class.Class, core.mixin.TxAccessLevel, {
createAccessLevel: AccountRole.Guest,
updateAccessLevel: AccountRole.Guest
Expand Down
16 changes: 0 additions & 16 deletions models/server-love/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,6 @@ export function createModel (builder: Builder): void {
}
})

builder.createDoc(serverCore.class.Trigger, core.space.Model, {
trigger: serverLove.trigger.OnKnock,
txMatch: {
objectClass: love.class.JoinRequest,
_class: core.class.TxCreateDoc
}
})

builder.createDoc(serverCore.class.Trigger, core.space.Model, {
trigger: serverLove.trigger.OnInvite,
txMatch: {
objectClass: love.class.Invite,
_class: core.class.TxCreateDoc
}
})

builder.mixin(love.class.MeetingMinutes, core.class.Class, serverCore.mixin.SearchPresenter, {
searchIcon: love.icon.MeetingMinutes,
title: [['title']]
Expand Down
1 change: 1 addition & 0 deletions packages/presentation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
"@hcengineering/theme": "^0.6.5",
"@hcengineering/retry": "^0.6.0",
"@hcengineering/hulylake-client": "^0.6.0",
"@hcengineering/hulypulse-client": "^0.6.0",
"fast-equals": "^5.2.2",
"png-chunks-extract": "^1.0.0",
"svelte": "^4.2.20",
Expand Down
1 change: 1 addition & 0 deletions packages/presentation/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,4 @@ export * from './drawingCommand'
export * from './drawingCommandsProcessor'
export * from './link-preview'
export * from './communication'
export * from './pulse'
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import { HulypulseClient } from '@hcengineering/hulypulse-client'
import { getMetadata } from '@hcengineering/platform'
import presentation from '@hcengineering/presentation'
import presentation from './plugin'

let pulseclient: HulypulseClient | undefined

Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/popups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ export function showPopup (
id,
close: closePopupOp,
update: (props) => {
updatePopup(id, props)
updatePopup(id, { props })
}
}
}
Expand Down
1 change: 1 addition & 0 deletions plugins/love-resources/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"@hcengineering/emoji-resources": "^0.6.0",
"@hcengineering/theme": "^0.6.5",
"@hcengineering/account-client": "^0.6.0",
"@hcengineering/hulypulse-client": "^0.6.0",
"@livekit/krisp-noise-filter": "^0.3.0",
"@livekit/track-processors": "^0.5.6",
"livekit-client": "^2.15.6",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import { ActionIcon } from '@hcengineering/ui'
import love from '../plugin'
import { myInfo } from '../stores'
import { joinMeeting, kick, sendInvites } from '../meetings'
import { joinMeeting, kick } from '../meetings'
import { sendInvites } from '../invites'

export let room: Room
export let person: Ref<Person>
Expand All @@ -30,7 +31,7 @@
label={love.string.Invite}
icon={love.icon.Invite}
action={() => {
void sendInvites([person])
sendInvites([person])
}}
/>
{#if room.access === RoomAccess.Knock}
Expand Down
20 changes: 19 additions & 1 deletion plugins/love-resources/src/components/WorkbenchExtension.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
import love from '../plugin'
import { liveKitClient, lk } from '../utils'
import { lkSessionConnected } from '../liveKitClient'
import { subscribeInviteRequests, unsubscribeInviteRequests } from '../invites'
import { Room } from '@hcengineering/love'
import { subscribeJoinRequests, unsubscribeJoinRequests } from '../joinRequests'
import { Ref } from '@hcengineering/core'
import { myInfo } from '../stores'

let parentElement: HTMLDivElement

Expand Down Expand Up @@ -33,13 +38,26 @@
}
}

onMount(() => {
function subscribeRoomRequests (room: Ref<Room> | undefined): void {
unsubscribeJoinRequests()
.then(() => subscribeJoinRequests(room))
.catch((e) => {
console.log(e)
})
}

$: subscribeRoomRequests($myInfo?.room)

onMount(async () => {
pushRootBarComponent('left', love.component.ControlExt, 20)
lk.on(RoomEvent.TrackSubscribed, handleTrackSubscribed)
lk.on(RoomEvent.TrackUnsubscribed, handleTrackUnsubscribed)

await subscribeInviteRequests()
})

onDestroy(async () => {
await unsubscribeInviteRequests()
lk.off(RoomEvent.TrackSubscribed, handleTrackSubscribed)
lk.off(RoomEvent.TrackUnsubscribed, handleTrackUnsubscribed)
if ($lkSessionConnected) {
Expand Down
116 changes: 4 additions & 112 deletions plugins/love-resources/src/components/meeting/ControlExt.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,17 @@
-->
<script lang="ts">
import { IdMap, Ref, toIdMap } from '@hcengineering/core'
import { Invite, isOffice, JoinRequest, ParticipantInfo, RequestStatus, Room } from '@hcengineering/love'
import { createQuery, getClient } from '@hcengineering/presentation'
import {
closePopup,
eventToHTMLElement,
Location,
location,
PopupResult,
showPopup,
closeTooltip
} from '@hcengineering/ui'
import { isOffice, ParticipantInfo, Room } from '@hcengineering/love'
import { getClient } from '@hcengineering/presentation'
import { closePopup, eventToHTMLElement, Location, location, showPopup, closeTooltip } from '@hcengineering/ui'
import { onDestroy } from 'svelte'
import workbench from '@hcengineering/workbench'
import { closeWidget, sidebarStore } from '@hcengineering/workbench-resources'

import love from '../../plugin'
import { activeInvites, currentRoom, infos, myInfo, myInvites, myRequests, rooms } from '../../stores'
import { currentRoom, infos, myInfo, rooms } from '../../stores'
import { createMeetingWidget, getRoomName } from '../../utils'
import ActiveInvitesPopup from './invites/ActiveInvitesPopup.svelte'
import InvitePopup from './invites/InvitePopup.svelte'
import PersonActionPopup from '../PersonActionPopup.svelte'
import RequestPopup from './invites/RequestPopup.svelte'
import RequestingPopup from './invites/RequestingPopup.svelte'
import RoomPopup from '../RoomPopup.svelte'
import RoomButton from '../RoomButton.svelte'
import { leaveMeeting, currentMeetingRoom } from '../../meetings'
Expand Down Expand Up @@ -70,112 +58,19 @@

$: activeRooms = getActiveRooms($rooms, $infos)

const query = createQuery()
let requests: JoinRequest[] = []
query.query(love.class.JoinRequest, { status: RequestStatus.Pending }, (res) => {
requests = res
})

let activeRequest: JoinRequest | undefined = undefined
const joinRequestCategory = 'joinRequest'
function checkRequests (requests: JoinRequest[], $myInfo: ParticipantInfo | undefined): void {
if (activeRequest !== undefined) {
// try to find active request, if it not exists close popup
if (requests.find((r) => r._id === activeRequest?._id && r.room === $myInfo?.room) === undefined) {
closePopup(joinRequestCategory)
activeRequest = undefined
}
}
if (activeRequest === undefined) {
activeRequest = requests.find((r) => r.room === $myInfo?.room)
if (activeRequest !== undefined) {
showPopup(RequestPopup, { request: activeRequest }, undefined, undefined, undefined, {
category: joinRequestCategory,
overlay: false,
fixed: true
})
}
}
}

const myJoinRequestCategory = 'MyJoinRequest'
let myRequestsPopup: PopupResult | undefined = undefined

function checkMyRequests (requests: JoinRequest[]): void {
if (requests.length > 0) {
if (myRequestsPopup === undefined) {
myRequestsPopup = showPopup(RequestingPopup, { request: requests[0] }, undefined, undefined, undefined, {
category: myJoinRequestCategory,
overlay: false,
fixed: true
})
}
} else if (myRequestsPopup !== undefined) {
myRequestsPopup.close()
myRequestsPopup = undefined
}
}

$: checkMyRequests($myRequests)

$: checkRequests(requests, $myInfo)

function openRoom (room: Room): (e: MouseEvent) => void {
return (e: MouseEvent) => {
closeTooltip()
showPopup(RoomPopup, { room }, eventToHTMLElement(e))
}
}

let activeInvite: Invite | undefined = undefined
const inviteCategory = 'inviteReq'
function checkInvites (invites: Invite[]): void {
if (activeInvite !== undefined) {
// try to find active request, if it not exists close popup
if (invites.find((r) => r._id === activeInvite?._id) === undefined) {
closePopup(inviteCategory)
activeInvite = undefined
}
}
if (activeInvite === undefined) {
activeInvite = invites[0]
if (activeInvite !== undefined) {
showPopup(InvitePopup, { invite: activeInvite }, undefined, undefined, undefined, {
category: inviteCategory,
overlay: false,
fixed: true
})
}
}
}

$: checkInvites($myInvites)

const myInvitesCategory = 'myInvites'

let myInvitesPopup: PopupResult | undefined = undefined

function checkActiveInvites (invites: Invite[]): void {
if (invites.length > 0) {
if (myInvitesPopup === undefined) {
myInvitesPopup = showPopup(ActiveInvitesPopup, {}, undefined, undefined, undefined, {
category: myInvitesCategory,
overlay: false,
fixed: true
})
}
} else if (myInvitesPopup !== undefined) {
myInvitesPopup.close()
myInvitesPopup = undefined
}
}

$: reception = $rooms.find((f) => f._id === love.ids.Reception)

$: receptionParticipants = $infos.filter((p) => p.room === love.ids.Reception)

$: checkActiveInvites($activeInvites)

function checkActiveMeeting (loc: Location, meetingSessionConnected: boolean, room: Ref<Room> | undefined): void {
const meetingWidgetState = $sidebarStore.widgetsState.get(love.ids.MeetingWidget)
const isMeetingWidgetCreated = meetingWidgetState !== undefined
Expand Down Expand Up @@ -211,9 +106,6 @@

onDestroy(() => {
closePopup(myInvitesCategory)
closePopup(inviteCategory)
closePopup(joinRequestCategory)
closePopup(myJoinRequestCategory)
closeWidget(love.ids.MeetingWidget)
})

Expand Down
Loading
Loading