@etsoo/materialui
Version:
TypeScript Material-UI Implementation
50 lines (49 loc) • 1.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OperationMessageContainer = OperationMessageContainer;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = __importDefault(require("react"));
const MessageUtils_1 = require("./MessageUtils");
/**
* Operation message container
* 操作消息容器
* @param props Props
* @returns Component
*/
function OperationMessageContainer(props) {
const { handler, timeout = 200 } = props;
const refs = react_1.default.useRef({ seed: 0, mounted: false });
const resetSeed = () => {
if (refs.current.seed > 0) {
clearTimeout(refs.current.seed);
refs.current.seed = 0;
}
};
react_1.default.useEffect(() => {
const my = typeof handler === "function"
? handler
: (_user, isSelf, message) => {
const [types, callback, id] = handler;
if (id == null || id === message.id) {
// Check types & isSelf
if (isSelf ||
!types.includes(message.operationType) ||
!refs.current.mounted)
return;
resetSeed();
refs.current.seed = window.setTimeout(callback, timeout);
}
};
MessageUtils_1.MessageUtils.onOperationMessage(my);
refs.current.mounted = true;
return () => {
resetSeed();
refs.current.mounted = false;
MessageUtils_1.MessageUtils.offOperationMessage(my);
};
}, []);
return (0, jsx_runtime_1.jsx)(react_1.default.Fragment, {});
}