@nitrogenbuilder/client-core
Version:
Nitrogen Builder Core Client
58 lines (49 loc) • 1.31 kB
text/typescript
import createSocket from './createSocket.js';
// USED IN RSC COMPONENTS (NOT HOOKS) (NextJS App Dir)
export class NitrogenData {
static instance: NitrogenData;
static data: any = {};
static socket: any = 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: any) => {
console.log('connected from hook');
socket.emit('usePageData', {
type: 'page',
id: '123',
});
socket.on('pageData', (newData: any) => {
// console.log(`got data`, JSON.stringify(newData));
NitrogenData.data = newData;
});
},
() => {
console.log('disconnected');
// TODO: try to reconnect
}
);
NitrogenData.socket = newSocket;
}
getData(requestedData: any = {}) {
if (requestedData?.moduleId) {
return (
NitrogenData.data?.data?.find(
(d: any) => d.id === requestedData.moduleId
) || {}
);
}
return NitrogenData.data;
}
}
// TODO: Reference ./index.ts TODO
//export const nitrogenData = new NitrogenData();