bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/video-provider/queries.ts
2024-06-17 08:35:11 -03:00

120 lines
2.0 KiB
TypeScript

import { gql } from '@apollo/client';
import type { User } from './types';
interface Voice {
floor: boolean;
lastFloorTime: string;
}
export interface VideoStreamsResponse {
user_camera: {
streamId: string;
user: User;
voice?: Voice;
}[];
}
export interface GridUsersResponse {
user: User[];
}
export interface OwnVideoStreamsResponse {
user_camera: {
streamId: string;
}[];
}
export const VIDEO_STREAMS_SUBSCRIPTION = gql`
subscription VideoStreams {
user_camera {
streamId
user {
name
userId
nameSortable
pinned
away
disconnected
emoji
role
avatar
color
presenter
clientType
raiseHand
isModerator
reactionEmoji
}
voice {
floor
lastFloorTime
}
}
}
`;
export const OWN_VIDEO_STREAMS_QUERY = gql`
query OwnVideoStreams($userId: String!, $streamIdPrefix: String!) {
user_camera(
where: {
userId: { _eq: $userId },
streamId: { _like: $streamIdPrefix }
},
) {
streamId
}
}
`;
export const VIEWERS_IN_WEBCAM_COUNT_SUBSCRIPTION = gql`
subscription ViewerVideoStreams {
user_camera_aggregate(where: {
user: { role: { _eq: "VIEWER" }, presenter: { _eq: false } }
}) {
aggregate {
count
}
}
}
`;
export const GRID_USERS_SUBSCRIPTION = gql`
subscription GridUsers($exceptUserIds: [String]!, $limit: Int!) {
user(
where: {
userId: {
_nin: $exceptUserIds,
},
},
limit: $limit,
order_by: {
nameSortable: asc,
userId: asc,
},
) {
name
userId
nameSortable
pinned
away
disconnected
emoji
role
avatar
color
presenter
clientType
raiseHand
isModerator
reactionEmoji
}
}
`;
export default {
OWN_VIDEO_STREAMS_QUERY,
VIDEO_STREAMS_SUBSCRIPTION,
VIEWERS_IN_WEBCAM_COUNT_SUBSCRIPTION,
GRID_USERS_SUBSCRIPTION,
};