npm install --save-dev laravel-echo pusher-js
import Pusher from 'pusher-js';
import Echo from 'laravel-echo';
declare global {
interface Window {
Pusher: typeof Pusher;
Echo: Echo;
}
}
export const pusher = new Pusher(process.env.NEXT_PUBLIC_PUSHER_KEY, {
cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER,
});
export const echo = () => {
if (typeof window === 'undefined') return;
window.Pusher = Pusher;
return new Echo({
broadcaster: 'pusher',
key: process.env.NEXT_PUBLIC_PUSHER_KEY,
cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER,
forceTLS: true,
});
};
useEffect(() => {
const channel = pusher.subscribe(CHANEL_NAME);
channel.bind(CHANEL_EVENT, (data: any) => {
setNotifications([...notifications, data]);
console.log(data);
});
return () => {
pusher.unsubscribe(CHANEL_NAME);
};
// using echo
echo()!
.channel(CHANEL_NAME);
.listen('.' + CHANEL_EVENT, (data: any) => {
console.log(data);
});
}, [router]);