json-joy
Version:
Collection of libraries for building collaborative editing apps.
35 lines (34 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CollaborativeInput = void 0;
const react_1 = require("react");
const collaborative_input_1 = require("collaborative-input");
class CollaborativeInputState {
constructor(props) {
this.props = props;
this.unbind = () => {
this._unbind?.();
this._unbind = void 0;
};
this.stop = this.unbind;
this.start = () => this.stop;
this.ref = (el) => {
if (!el)
return this.unbind();
const { str, polling } = this.props;
this._unbind = (0, collaborative_input_1.bind)(str, el, !!polling);
};
}
}
const CollaborativeInput = (props) => {
const { str, polling, inp, input, ...rest } = props;
// biome-ignore lint: hook dependency list manually managed
const state = (0, react_1.useMemo)(() => new CollaborativeInputState(props), [str, polling]);
// biome-ignore lint: hook dependency list manually managed
(0, react_1.useLayoutEffect)(state.start, [state]);
if (input)
return input(state.ref);
rest.ref = state.ref;
return (0, react_1.createElement)(rest.multiline ? 'textarea' : 'input', rest);
};
exports.CollaborativeInput = CollaborativeInput;