platform/plugins/love/src/index.ts
Denis Bykhov e2f48dc7ea
Improve office click handler (#5751)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2024-06-07 15:29:30 +05:00

163 lines
3.6 KiB
TypeScript

import { Person } from '@hcengineering/contact'
import { Class, Doc, Ref, Space } from '@hcengineering/core'
import { Drive } from '@hcengineering/drive'
import { NotificationType } from '@hcengineering/notification'
import { Asset, IntlString, Metadata, Plugin, plugin } from '@hcengineering/platform'
import { Preference } from '@hcengineering/preference'
import { Action } from '@hcengineering/view'
export const loveId = 'love' as Plugin
export const GRID_WIDTH = 15
export enum RoomAccess {
Open,
Knock,
DND
}
export enum RoomType {
Video,
Audio,
Reception
}
export interface Floor extends Doc {
name: string
}
export interface Room extends Doc {
name: string
type: RoomType
access: RoomAccess
floor: Ref<Floor>
width: number
height: number
x: number
y: number
}
export interface Office extends Room {
person: Ref<Person> | null
}
// transient data for status
export interface ParticipantInfo extends Doc {
// isActive: boolean (disabled until server connection to check it for all active rooms)
person: Ref<Person>
name: string
room: Ref<Room>
x: number
y: number
}
export interface RoomInfo extends Doc {
persons: Ref<Person>[]
room: Ref<Room>
isOffice: boolean
}
export enum RequestStatus {
Pending,
Approved,
Rejected
}
export interface JoinRequest extends Doc {
person: Ref<Person>
room: Ref<Room>
status: RequestStatus
}
export interface Invite extends Doc {
from: Ref<Person>
target: Ref<Person>
room: Ref<Room>
status: RequestStatus
}
export interface DevicesPreference extends Preference {
micEnabled: boolean
noiseCancellation: boolean
blurRadius: number
camEnabled: boolean
}
export * from './utils'
const love = plugin(loveId, {
class: {
Room: '' as Ref<Class<Room>>,
Floor: '' as Ref<Class<Floor>>,
Office: '' as Ref<Class<Office>>,
ParticipantInfo: '' as Ref<Class<ParticipantInfo>>,
JoinRequest: '' as Ref<Class<JoinRequest>>,
DevicesPreference: '' as Ref<Class<DevicesPreference>>,
RoomInfo: '' as Ref<Class<RoomInfo>>,
Invite: '' as Ref<Class<Invite>>
},
action: {
ToggleMic: '' as Ref<Action>,
ToggleVideo: '' as Ref<Action>
},
string: {
Office: '' as IntlString,
Room: '' as IntlString,
IsKnocking: '' as IntlString,
KnockingLabel: '' as IntlString,
InivitingLabel: '' as IntlString,
InvitingYou: '' as IntlString,
RoomType: '' as IntlString,
Knock: '' as IntlString,
Open: '' as IntlString,
DND: '' as IntlString
},
ids: {
MainFloor: '' as Ref<Floor>,
Reception: '' as Ref<Room>,
InviteNotification: '' as Ref<NotificationType>,
KnockNotification: '' as Ref<NotificationType>
},
icon: {
Love: '' as Asset,
LeaveRoom: '' as Asset,
EnterRoom: '' as Asset,
Mic: '' as Asset,
MicEnabled: '' as Asset,
MicDisabled: '' as Asset,
Cam: '' as Asset,
CamEnabled: '' as Asset,
CamDisabled: '' as Asset,
SharingEnabled: '' as Asset,
SharingDisabled: '' as Asset,
Open: '' as Asset,
Knock: '' as Asset,
DND: '' as Asset,
Record: '' as Asset,
StopRecord: '' as Asset,
Invite: '' as Asset
},
metadata: {
WebSocketURL: '' as Metadata<string>,
ServiceEnpdoint: '' as Metadata<string>
},
space: {
Rooms: '' as Ref<Space>,
Drive: '' as Ref<Drive>
}
})
export const roomAccessIcon = {
[RoomAccess.Open]: love.icon.Open,
[RoomAccess.Knock]: love.icon.Knock,
[RoomAccess.DND]: love.icon.DND
}
export const roomAccessLabel = {
[RoomAccess.Open]: love.string.Open,
[RoomAccess.Knock]: love.string.Knock,
[RoomAccess.DND]: love.string.DND
}
export default love