@entropic-bond/localize-react 1.6.8 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entropic-bond-localize-react.js +1645 -0
- package/lib/entropic-bond-localize-react.umd.cjs +39 -0
- package/package.json +31 -24
- package/lib/index.js +0 -19
- package/lib/index.js.map +0 -1
- package/lib/locale.js +0 -149
- package/lib/locale.js.map +0 -1
- package/lib/locale.spec.js +0 -107
- package/lib/locale.spec.js.map +0 -1
- package/lib/localized-component.js +0 -131
- package/lib/localized-component.js.map +0 -1
- package/lib/react-localizer.spec.js +0 -185
- package/lib/react-localizer.spec.js.map +0 -1
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
-
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
-
__setModuleDefault(result, mod);
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
32
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
33
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
34
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
35
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
36
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
37
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
-
};
|
|
43
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
const react_1 = __importStar(require("react"));
|
|
45
|
-
const react_2 = require("@testing-library/react");
|
|
46
|
-
const fetch_mock_1 = __importDefault(require("fetch-mock"));
|
|
47
|
-
const locale_1 = require("./locale");
|
|
48
|
-
const localized_component_1 = require("./localized-component");
|
|
49
|
-
let loadedSpy = jest.fn();
|
|
50
|
-
let LocalizedWithDecorator = class LocalizedWithDecorator extends react_1.Component {
|
|
51
|
-
constructor(props) {
|
|
52
|
-
super(props);
|
|
53
|
-
this.state = {
|
|
54
|
-
someState: 'a decorator nice starting point',
|
|
55
|
-
locale: {}
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
onLoadLocale(locale) {
|
|
59
|
-
loadedSpy(locale);
|
|
60
|
-
}
|
|
61
|
-
render() {
|
|
62
|
-
return (react_1.default.createElement("div", null,
|
|
63
|
-
react_1.default.createElement("p", { "data-testid": "casa" },
|
|
64
|
-
"Casa es ",
|
|
65
|
-
this.state.locale.house),
|
|
66
|
-
react_1.default.createElement("span", null, this.state.someState)));
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
LocalizedWithDecorator = __decorate([
|
|
70
|
-
(0, localized_component_1.localize)('LocalizedWithDecorator')
|
|
71
|
-
], LocalizedWithDecorator);
|
|
72
|
-
class LocalizedWithClass extends localized_component_1.LocalizedComponent {
|
|
73
|
-
constructor(props) {
|
|
74
|
-
super(props);
|
|
75
|
-
this.state = Object.assign(Object.assign({}, this.state), { someState: 'a class nice starting point' });
|
|
76
|
-
}
|
|
77
|
-
onLoadLocale(locale) {
|
|
78
|
-
loadedSpy(locale);
|
|
79
|
-
}
|
|
80
|
-
render() {
|
|
81
|
-
return (react_1.default.createElement("div", null,
|
|
82
|
-
react_1.default.createElement("p", { "data-testid": "casa" },
|
|
83
|
-
"Casa es ",
|
|
84
|
-
this.state.locale.house),
|
|
85
|
-
react_1.default.createElement("span", null, this.state.someState)));
|
|
86
|
-
}
|
|
87
|
-
className() {
|
|
88
|
-
return 'LocalizedWithClass';
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function LocalizedWithHook() {
|
|
92
|
-
const locale = (0, localized_component_1.useLocale)('LocalizedWithHook');
|
|
93
|
-
return (react_1.default.createElement("div", null,
|
|
94
|
-
react_1.default.createElement("p", { "data-testid": "casa" },
|
|
95
|
-
"Casa es ",
|
|
96
|
-
locale.house)));
|
|
97
|
-
}
|
|
98
|
-
describe('React Component Localizer', () => {
|
|
99
|
-
beforeEach(() => {
|
|
100
|
-
fetch_mock_1.default.mock('locales/en.json', () => {
|
|
101
|
-
return {
|
|
102
|
-
"hi": "Hello",
|
|
103
|
-
"LocalizedWithClass": {
|
|
104
|
-
"house": "albergo",
|
|
105
|
-
"car": {
|
|
106
|
-
"sedan": "Sedan",
|
|
107
|
-
"coupe": "Coupe"
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
"LocalizedWithDecorator": {
|
|
111
|
-
"house": "maison"
|
|
112
|
-
},
|
|
113
|
-
"LocalizedWithHook": {
|
|
114
|
-
"house": "morada"
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
});
|
|
118
|
-
locale_1.Locale.config({
|
|
119
|
-
localePath: 'locales'
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
afterEach(() => {
|
|
123
|
-
fetch_mock_1.default.restore();
|
|
124
|
-
loadedSpy.mockReset();
|
|
125
|
-
});
|
|
126
|
-
it('should render localized word with decorator', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
127
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithDecorator, null));
|
|
128
|
-
const elem = yield wrapper.findByText('Casa es maison');
|
|
129
|
-
expect(elem).toBeInTheDocument();
|
|
130
|
-
}));
|
|
131
|
-
it('should render localized word by extending class', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithClass, null));
|
|
133
|
-
const elem = yield wrapper.findByText('Casa es albergo');
|
|
134
|
-
expect(elem).toBeInTheDocument();
|
|
135
|
-
}));
|
|
136
|
-
it('should not overwrite state of localized class', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
137
|
-
const classWrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithClass, null));
|
|
138
|
-
const decoratorWrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithDecorator, null));
|
|
139
|
-
expect(yield classWrapper.findByText('a class nice starting point')).toBeInTheDocument();
|
|
140
|
-
expect(yield decoratorWrapper.findByText('a decorator nice starting point')).toBeInTheDocument();
|
|
141
|
-
}));
|
|
142
|
-
it('should render localized word with hook', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
143
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithHook, null));
|
|
144
|
-
const elem = yield wrapper.findByText('Casa es morada');
|
|
145
|
-
expect(elem).toBeInTheDocument();
|
|
146
|
-
}));
|
|
147
|
-
it('should wait locale json to load', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
148
|
-
locale_1.Locale.config({
|
|
149
|
-
locale: 'en'
|
|
150
|
-
});
|
|
151
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithDecorator, null));
|
|
152
|
-
const elem = yield wrapper.findByText('Casa es maison');
|
|
153
|
-
expect(elem).toBeInTheDocument();
|
|
154
|
-
}));
|
|
155
|
-
it('should notify on locale loaded with decorator', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
156
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithDecorator, null));
|
|
157
|
-
yield wrapper.findByText('Casa es maison');
|
|
158
|
-
expect(loadedSpy).toHaveBeenCalledWith(expect.objectContaining({ house: 'maison' }));
|
|
159
|
-
}));
|
|
160
|
-
it('should notify on locale loaded with class', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
161
|
-
const wrapper = (0, react_2.render)(react_1.default.createElement(LocalizedWithClass, null));
|
|
162
|
-
yield wrapper.findByText('Casa es albergo');
|
|
163
|
-
expect(loadedSpy).toHaveBeenCalledWith(expect.objectContaining({ house: 'albergo' }));
|
|
164
|
-
}));
|
|
165
|
-
it('should get a safe translation', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
166
|
-
const locale = yield locale_1.Locale.instance.get('LocalizedWithClass');
|
|
167
|
-
const loc = (0, localized_component_1.createSafeLocalizerFor)(locale);
|
|
168
|
-
expect((0, localized_component_1.safeLocalize)(locale, 'house')).toBe('albergo');
|
|
169
|
-
expect(loc('house')).toBe('albergo');
|
|
170
|
-
expect((0, localized_component_1.safeLocalize)(locale, 'car.sedan')).toBe('Sedan');
|
|
171
|
-
expect(loc('car.sedan')).toBe('Sedan');
|
|
172
|
-
expect((0, localized_component_1.safeLocalize)(locale, 'notExistingKey')).toBe('notExistingKey');
|
|
173
|
-
expect(loc('notExistingKey')).toBe('notExistingKey');
|
|
174
|
-
}));
|
|
175
|
-
it('should throw error when trying to get a translation from a non existing locale', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
176
|
-
const locale = yield locale_1.Locale.instance.get('LocalizedWithClass');
|
|
177
|
-
const loc = (0, localized_component_1.createSafeLocalizerFor)(locale, true);
|
|
178
|
-
expect(() => loc('carSedan')).toThrow();
|
|
179
|
-
}));
|
|
180
|
-
it('should not throw when locale is undefined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
181
|
-
const loc = (0, localized_component_1.createSafeLocalizerFor)(undefined);
|
|
182
|
-
expect(() => loc('house')).not.toThrow();
|
|
183
|
-
}));
|
|
184
|
-
});
|
|
185
|
-
//# sourceMappingURL=react-localizer.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react-localizer.spec.js","sourceRoot":"","sources":["../src/react-localizer.spec.tsx"],"names":[],"mappings":"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"}
|