stream-chat
Version:
JS SDK for the Stream Chat API
65 lines (64 loc) • 3.46 kB
TypeScript
import { StateStore } from './store';
import type { StreamChat } from './client';
import type { Event, PartialPollUpdate, PollAnswer, PollData, PollEnrichData, PollOptionData, PollResponse, PollVote, QueryVotesFilters, QueryVotesOptions, VoteSort } from './types';
export declare const isVoteAnswer: (vote: PollVote | PollAnswer) => vote is PollAnswer;
export type PollAnswersQueryParams = {
filter?: QueryVotesFilters;
options?: QueryVotesOptions;
sort?: VoteSort;
};
export type PollOptionVotesQueryParams = {
filter: {
option_id: string;
} & QueryVotesFilters;
options?: QueryVotesOptions;
sort?: VoteSort;
};
type OptionId = string;
export type PollState = Omit<PollResponse, 'own_votes' | 'id'> & {
lastActivityAt: Date;
maxVotedOptionIds: OptionId[];
ownVotesByOptionId: Record<OptionId, PollVote>;
ownAnswer?: PollAnswer;
};
type PollInitOptions = {
client: StreamChat;
poll: PollResponse;
};
export declare class Poll {
readonly state: StateStore<PollState>;
id: string;
private client;
constructor({ client, poll }: PollInitOptions);
private getInitialStateFromPollResponse;
private upsertOfflineDb;
reinitializeState: (poll: PollInitOptions["poll"]) => void;
get data(): PollState;
handlePollUpdated: (event: Event) => void;
handlePollClosed: (event: Event) => void;
handleVoteCasted: (event: Event) => void;
handleVoteChanged: (event: Event) => void;
handleVoteRemoved: (event: Event) => void;
query: (id: string) => Promise<PollResponse>;
update: (data: Exclude<PollData, "id">) => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
partialUpdate: (partialPollObject: PartialPollUpdate) => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
close: () => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
delete: () => Promise<import("./types").APIResponse>;
createOption: (option: PollOptionData) => Promise<import("./types").APIResponse & import("./types").CreatePollOptionAPIResponse>;
updateOption: (option: PollOptionData) => Promise<import("./types").APIResponse & import("./types").CreatePollOptionAPIResponse>;
deleteOption: (optionId: string) => Promise<import("./types").APIResponse>;
castVote: (optionId: string, messageId: string) => Promise<import("./types").APIResponse & import("./types").CastVoteAPIResponse>;
removeVote: (voteId: string, messageId: string) => Promise<import("./types").APIResponse & {
vote: PollVote;
}>;
addAnswer: (answerText: string, messageId: string) => Promise<import("./types").APIResponse & import("./types").CastVoteAPIResponse>;
removeAnswer: (answerId: string, messageId: string) => Promise<import("./types").APIResponse & {
vote: PollVote;
}>;
queryAnswers: (params: PollAnswersQueryParams) => Promise<import("./types").APIResponse & import("./types").PollAnswersAPIResponse>;
queryOptionVotes: (params: PollOptionVotesQueryParams) => Promise<import("./types").APIResponse & import("./types").PollVotesAPIResponse>;
}
export declare function extractPollData(pollResponse: PollResponse): PollData;
export declare function mapPollStateToResponse(poll: Poll): PollResponse;
export declare function extractPollEnrichedData(pollResponse: PollResponse): Omit<PollEnrichData, 'own_votes' | 'latest_answers'>;
export {};