@nitrogenbuilder/client-core
Version:
Nitrogen Builder Core Client
43 lines (42 loc) • 1.47 kB
JavaScript
import createSocket from './createSocket.js';
// USED IN RSC COMPONENTS (NOT HOOKS) (NextJS App Dir)
export class NitrogenData {
static instance;
static data = {};
static socket = null;
constructor() {
if (NitrogenData.instance) {
return NitrogenData.instance;
}
NitrogenData.instance = this;
if (NitrogenData.socket) {
console.log('socket already exists');
return;
}
console.log('creating socket from hook');
// FIXME: THIS IS NOT BEING CLEANED UP ON HOT RELOAD CAUSING MULTIPLE SOCKETS TO BE CREATED
const newSocket = createSocket((socket) => {
console.log('connected from hook');
socket.emit('usePageData', {
type: 'page',
id: '123',
});
socket.on('pageData', (newData) => {
// console.log(`got data`, JSON.stringify(newData));
NitrogenData.data = newData;
});
}, () => {
console.log('disconnected');
// TODO: try to reconnect
});
NitrogenData.socket = newSocket;
}
getData(requestedData = {}) {
if (requestedData?.moduleId) {
return (NitrogenData.data?.data?.find((d) => d.id === requestedData.moduleId) || {});
}
return NitrogenData.data;
}
}
// TODO: Reference ./index.ts TODO
//export const nitrogenData = new NitrogenData();