socket-io.ts 988 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import io, { Socket } from 'socket.io-client';
  2. import { SWRResponse } from 'swr';
  3. import useSWRImmutable from 'swr/immutable';
  4. import loggerFactory from '~/utils/logger';
  5. const logger = loggerFactory('growi:cli:stores:socket-io');
  6. const socketFactory = (namespace: string): Socket => {
  7. const socket = io(namespace, {
  8. transports: ['websocket'],
  9. });
  10. socket.on('connect_error', (error) => {
  11. logger.error(namespace, error);
  12. });
  13. socket.on('error', (error) => {
  14. logger.error(namespace, error);
  15. });
  16. return socket;
  17. };
  18. const useSocket = (namespace: string): SWRResponse<Socket, Error> => {
  19. const swrResponse = useSWRImmutable(namespace, null);
  20. if (swrResponse.data === undefined) {
  21. swrResponse.mutate(socketFactory(namespace));
  22. }
  23. return swrResponse;
  24. };
  25. export const useDefaultSocket = (): SWRResponse<Socket, Error> => {
  26. return useSocket('/');
  27. };
  28. export const useAdminSocket = (): SWRResponse<Socket, Error> => {
  29. return useSocket('/admin');
  30. };