UNPKG

@data-client/react

Version:

Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch

25 lines (22 loc) 3.28 kB
'use client'; import { useEffect } from 'react'; import useController from './useController.js'; /** * Keeps a resource fresh by subscribing to updates. * @see https://dataclient.io/docs/api/useSubscription */ export default function useSubscription(endpoint, ...args) { const controller = useController(); const key = args[0] !== null ? endpoint.key(...args) : ''; useEffect(() => { if (!key) return; // typescript cannot infer truthy key means args is not null const cleanedArgs = args; controller.subscribe(endpoint, ...cleanedArgs); return () => { controller.unsubscribe(endpoint, ...cleanedArgs); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [controller, key]); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VDb250cm9sbGVyIiwidXNlU3Vic2NyaXB0aW9uIiwiZW5kcG9pbnQiLCJhcmdzIiwiY29udHJvbGxlciIsImtleSIsImNsZWFuZWRBcmdzIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlU3Vic2NyaXB0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5pbXBvcnQge1xuICBFbmRwb2ludEludGVyZmFjZSxcbiAgU2NoZW1hLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBOSSxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlciBmcm9tICcuL3VzZUNvbnRyb2xsZXIuanMnO1xuXG4vKipcbiAqIEtlZXBzIGEgcmVzb3VyY2UgZnJlc2ggYnkgc3Vic2NyaWJpbmcgdG8gdXBkYXRlcy5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL3VzZVN1YnNjcmlwdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdWJzY3JpcHRpb248XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICBGZXRjaEZ1bmN0aW9uLFxuICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQgfCBmYWxzZVxuICA+LFxuPihlbmRwb2ludDogRSwgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdKSB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSB1c2VDb250cm9sbGVyKCk7XG5cbiAgY29uc3Qga2V5ID0gYXJnc1swXSAhPT0gbnVsbCA/IGVuZHBvaW50LmtleSguLi5hcmdzKSA6ICcnO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAvLyB0eXBlc2NyaXB0IGNhbm5vdCBpbmZlciB0cnV0aHkga2V5IG1lYW5zIGFyZ3MgaXMgbm90IG51bGxcbiAgICBjb25zdCBjbGVhbmVkQXJncyA9IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuXG4gICAgY29udHJvbGxlci5zdWJzY3JpYmUoZW5kcG9pbnQsIC4uLmNsZWFuZWRBcmdzKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udHJvbGxlci51bnN1YnNjcmliZShlbmRwb2ludCwgLi4uY2xlYW5lZEFyZ3MpO1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtjb250cm9sbGVyLCBrZXldKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFPWixTQUFTQSxTQUFTLFFBQVEsT0FBTztBQUVqQyxPQUFPQyxhQUFhLE1BQU0sb0JBQW9COztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBU0MsZUFBZUEsQ0FNckNDLFFBQVcsRUFBRSxHQUFHQyxJQUFtRCxFQUFFO0VBQ3JFLE1BQU1DLFVBQVUsR0FBR0osYUFBYSxDQUFDLENBQUM7RUFFbEMsTUFBTUssR0FBRyxHQUFHRixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHRCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxHQUFHRixJQUFJLENBQUMsR0FBRyxFQUFFO0VBRXpESixTQUFTLENBQUMsTUFBTTtJQUNkLElBQUksQ0FBQ00sR0FBRyxFQUFFO0lBQ1Y7SUFDQSxNQUFNQyxXQUFXLEdBQUdILElBQW1DO0lBRXZEQyxVQUFVLENBQUNHLFNBQVMsQ0FBQ0wsUUFBUSxFQUFFLEdBQUdJLFdBQVcsQ0FBQztJQUM5QyxPQUFPLE1BQU07TUFDWEYsVUFBVSxDQUFDSSxXQUFXLENBQUNOLFFBQVEsRUFBRSxHQUFHSSxXQUFXLENBQUM7SUFDbEQsQ0FBQzs7SUFFRDtFQUNGLENBQUMsRUFBRSxDQUFDRixVQUFVLEVBQUVDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCIiwiaWdub3JlTGlzdCI6W119