@amaui/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("@amaui/utils");
const useSubscription = (amauiSubscription, 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 : amauiSubscription === null || amauiSubscription === void 0 ? void 0 : amauiSubscription.value]);
react_1.default.useEffect(() => {
if (value !== undefined) {
if ((0, utils_1.is)('function', amauiSubscription.init))
amauiSubscription.init(Object.assign(Object.assign({}, value), { loaded: true }));
}
}, []);
react_1.default.useEffect(() => {
if (!(0, utils_1.is)('function', amauiSubscription === null || amauiSubscription === void 0 ? void 0 : amauiSubscription.subscribe))
return;
const subscription = amauiSubscription.subscribe(async (valueItem) => {
if ((0, utils_1.is)('function', method))
await method(valueItem, setResponse);
else
setResponse([valueItem]);
});
if (amauiSubscription.value !== undefined)
setResponse([amauiSubscription.value]);
return () => {
if (subscription)
subscription.unsubscribe();
};
}, [amauiSubscription]);
return response[0];
};
exports.default = useSubscription;
;