@onesy/ui-react
Version:
UI for React
39 lines (38 loc) • 1.74 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importDefault(require("react"));
const utils_1 = require("@onesy/utils");
const useSubscription = (onesySubscription, method, value) => {
// an array of the value
// we are getting the same reference value
// from some of the subscriptions
// in order for rerender to be made
const [response, setResponse] = react_1.default.useState([value !== undefined ? value : onesySubscription === null || onesySubscription === void 0 ? void 0 : onesySubscription.value]);
react_1.default.useEffect(() => {
if (value !== undefined) {
if ((0, utils_1.is)('function', onesySubscription.init))
onesySubscription.init(Object.assign(Object.assign({}, value), { loaded: true }));
}
}, []);
react_1.default.useEffect(() => {
if (!(0, utils_1.is)('function', onesySubscription === null || onesySubscription === void 0 ? void 0 : onesySubscription.subscribe))
return;
const subscription = onesySubscription.subscribe(async (valueItem) => {
if ((0, utils_1.is)('function', method))
await method(valueItem, setResponse);
else
setResponse([valueItem]);
});
if (onesySubscription.value !== undefined)
setResponse([onesySubscription.value]);
return () => {
if (subscription)
subscription.unsubscribe();
};
}, [onesySubscription]);
return response[0];
};
exports.default = useSubscription;
;