@react-native-localize-ext/react
Version:
make i18n in react-native much smoother
41 lines (40 loc) • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.I18nProvider = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importStar(require("react"));
const hoist_non_react_statics_1 = tslib_1.__importDefault(require("hoist-non-react-statics"));
const utils_1 = require("./utils");
exports.I18nProvider = (...i18nList) => {
return function (WrappedComponent) {
class I18nComponent extends react_1.PureComponent {
constructor() {
super(...arguments);
this.state = {
sign: utils_1.getSignatures(i18nList),
};
this.listeners = [];
}
componentDidMount() {
this.listeners = i18nList.map((i18n, index) => {
return i18n._.listen(() => {
const data = this.state.sign.split(utils_1.SPLIT_STR);
data[index] = utils_1.getSignature(i18n);
this.setState({
sign: data.join(utils_1.SPLIT_STR),
});
});
});
}
componentWillUnmount() {
this.listeners.forEach((unListen) => unListen());
}
render() {
const { sign } = this.state;
return react_1.default.createElement(WrappedComponent, Object.assign({}, this.props, { "$i18n$": sign }));
}
}
I18nComponent.displayName = `I18n(${WrappedComponent.displayName || WrappedComponent.name})`;
return hoist_non_react_statics_1.default(I18nComponent, WrappedComponent);
};
};