Skip to content

Commit

Permalink
only trigger loaded event once
Browse files Browse the repository at this point in the history
  • Loading branch information
jamuhl committed Jul 6, 2018
1 parent d4d329f commit 1d73ad8
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 19 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,6 @@
### 11.3.5
- trigger loaded event only once per loaded namespace - consolidate all the loaded and done queued load calls [react-i18next 456 ](https://github.com/i18next/react-i18next/issues/456)

### 11.3.4
- fixes simplifyPluralSuffix: false cases for languages having only singular, plural [1069](https://github.com/i18next/i18next/issues/1069)

Expand Down
40 changes: 26 additions & 14 deletions i18next.js
Expand Up @@ -1133,7 +1133,6 @@ var PluralResolver = function () {
// COMPATIBILITY JSON
// v1
if (this.options.compatibilityJSON === 'v1') {
console.warn('here');
if (suffix === 1) return '';
if (typeof suffix === 'number') return '_plural_' + suffix.toString();
return returnSuffix();
Expand Down Expand Up @@ -1417,8 +1416,6 @@ var Connector = function (_EventEmitter) {
};

Connector.prototype.loaded = function loaded(name, err, data) {
var _this3 = this;

var _name$split = name.split('|'),
_name$split2 = slicedToArray(_name$split, 2),
lng = _name$split2[0],
Expand All @@ -1433,6 +1430,9 @@ var Connector = function (_EventEmitter) {
// set loaded
this.state[name] = err ? -1 : 2;

// consolidated loading done in this run - only emit once for a loaded namespace
var loaded = {};

// callback if ready
this.queue.forEach(function (q) {
pushPath(q.loaded, [lng], ns);
Expand All @@ -1441,7 +1441,16 @@ var Connector = function (_EventEmitter) {
if (err) q.errors.push(err);

if (q.pending.length === 0 && !q.done) {
_this3.emit('loaded', q.loaded);
// only do once per loaded -> this.emit('loaded', q.loaded);
Object.keys(q.loaded).forEach(function (l) {
if (!loaded[l]) loaded[l] = [];
if (q.loaded[l].length) {
q.loaded[l].forEach(function (ns) {
if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);
});
}
});

/* eslint no-param-reassign: 0 */
q.done = true;
if (q.errors.length) {
Expand All @@ -1452,6 +1461,9 @@ var Connector = function (_EventEmitter) {
}
});

// emit consolidated loaded event
this.emit('loaded', loaded);

// remove done load requests
this.queue = this.queue.filter(function (q) {
return !q.done;
Expand All @@ -1461,7 +1473,7 @@ var Connector = function (_EventEmitter) {
Connector.prototype.read = function read(lng, ns, fcName) {
var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;

var _this4 = this;
var _this3 = this;

var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;
var callback = arguments[5];
Expand All @@ -1471,7 +1483,7 @@ var Connector = function (_EventEmitter) {
return this.backend[fcName](lng, ns, function (err, data) {
if (err && data /* = retryFlag */ && tried < 5) {
setTimeout(function () {
_this4.read.call(_this4, lng, ns, fcName, tried + 1, wait * 2, callback);
_this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);
}, wait);
return;
}
Expand All @@ -1483,7 +1495,7 @@ var Connector = function (_EventEmitter) {


Connector.prototype.load = function load(languages, namespaces, callback) {
var _this5 = this;
var _this4 = this;

if (!this.backend) {
this.logger.warn('No backend was added via i18next.use. Will not load resources.');
Expand All @@ -1500,12 +1512,12 @@ var Connector = function (_EventEmitter) {
}

toLoad.toLoad.forEach(function (name) {
_this5.loadOne(name);
_this4.loadOne(name);
});
};

Connector.prototype.reload = function reload(languages, namespaces) {
var _this6 = this;
var _this5 = this;

if (!this.backend) {
this.logger.warn('No backend was added via i18next.use. Will not load resources.');
Expand All @@ -1516,13 +1528,13 @@ var Connector = function (_EventEmitter) {

languages.forEach(function (l) {
namespaces.forEach(function (n) {
_this6.loadOne(l + '|' + n, 're');
_this5.loadOne(l + '|' + n, 're');
});
});
};

Connector.prototype.loadOne = function loadOne(name) {
var _this7 = this;
var _this6 = this;

var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';

Expand All @@ -1532,10 +1544,10 @@ var Connector = function (_EventEmitter) {
ns = _name$split4[1];

this.read(lng, ns, 'read', null, null, function (err, data) {
if (err) _this7.logger.warn(prefix + 'loading namespace ' + ns + ' for language ' + lng + ' failed', err);
if (!err && data) _this7.logger.log(prefix + 'loaded namespace ' + ns + ' for language ' + lng, data);
if (err) _this6.logger.warn(prefix + 'loading namespace ' + ns + ' for language ' + lng + ' failed', err);
if (!err && data) _this6.logger.log(prefix + 'loaded namespace ' + ns + ' for language ' + lng, data);

_this7.loaded(name, err, data);
_this6.loaded(name, err, data);
});
};

Expand Down
4 changes: 2 additions & 2 deletions i18next.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "i18next",
"version": "11.3.4",
"version": "11.3.5",
"description": "i18next internationalization framework",
"main": "./index.js",
"jsnext:main": "dist/es/index.js",
Expand Down
17 changes: 16 additions & 1 deletion src/BackendConnector.js
Expand Up @@ -90,6 +90,9 @@ class Connector extends EventEmitter {
// set loaded
this.state[name] = err ? -1 : 2;

// consolidated loading done in this run - only emit once for a loaded namespace
const loaded = {};

// callback if ready
this.queue.forEach((q) => {
utils.pushPath(q.loaded, [lng], ns);
Expand All @@ -98,7 +101,16 @@ class Connector extends EventEmitter {
if (err) q.errors.push(err);

if (q.pending.length === 0 && !q.done) {
this.emit('loaded', q.loaded);
// only do once per loaded -> this.emit('loaded', q.loaded);
Object.keys(q.loaded).forEach(l => {
if (!loaded[l]) loaded[l] = [];
if (q.loaded[l].length) {
q.loaded[l].forEach(ns => {
if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);
});
}
});

/* eslint no-param-reassign: 0 */
q.done = true;
if (q.errors.length) {
Expand All @@ -109,6 +121,9 @@ class Connector extends EventEmitter {
}
});

// emit consolidated loaded event
this.emit('loaded', loaded);

// remove done load requests
this.queue = this.queue.filter(q => !q.done);
}
Expand Down
2 changes: 1 addition & 1 deletion src/PluralResolver.js
Expand Up @@ -138,7 +138,7 @@ class PluralResolver {

// COMPATIBILITY JSON
// v1
if (this.options.compatibilityJSON === 'v1') {console.warn('here')
if (this.options.compatibilityJSON === 'v1') {
if (suffix === 1) return '';
if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;
return returnSuffix();
Expand Down

0 comments on commit 1d73ad8

Please sign in to comment.