twilio-conversations-hooks
Version:
Package containing React Hooks for Twilio Conversations
68 lines (67 loc) • 2.98 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = require("react");
const TwilioContext_1 = __importDefault(require("../contexts/TwilioContext"));
const useConversation = (uniqueName) => {
const [loading, setLoading] = react_1.useState(false);
const [messages, setMessages] = react_1.useState([]);
const [typing, setTyping] = react_1.useState('');
const { conversations } = react_1.useContext(TwilioContext_1.default);
const conversation = conversations === null || conversations === void 0 ? void 0 : conversations.find(conversation => conversation.uniqueName === uniqueName);
react_1.useEffect(() => {
if (conversation) {
join();
}
}, [conversation]);
const sendMessage = (message) => __awaiter(void 0, void 0, void 0, function* () {
yield (conversation === null || conversation === void 0 ? void 0 : conversation.sendMessage(message));
});
const join = () => __awaiter(void 0, void 0, void 0, function* () {
setLoading(true);
if (conversation) {
if (conversation.status !== 'joined') {
yield conversation.join();
}
// @ts-ignore
conversation.on('messageAdded', (message) => {
setMessages(messages => [...messages, message]);
});
// @ts-ignore
conversation.on('typingStarted', (member) => {
setTyping(member.identity);
});
// @ts-ignore
conversation.on('typingEnded', (member) => {
setTyping('');
});
const messages = yield conversation.getMessages();
setMessages(messages.items);
}
setLoading(false);
});
const sendTyping = () => __awaiter(void 0, void 0, void 0, function* () {
if (conversation) {
yield conversation.typing();
}
});
return {
messages,
loading,
sendMessage,
sendTyping,
typing
};
};
exports.default = useConversation;
;