@panneau/intl 1.0.0-alpha.2 → 1.0.0-alpha.205

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/es/index.js CHANGED
@@ -2,9 +2,11 @@ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
2
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
3
3
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
4
4
  import _createClass from '@babel/runtime/helpers/createClass';
5
- import React, { useContext, useMemo } from 'react';
5
+ import { useLocales, LocalesProvider, useResource } from '@panneau/core/contexts';
6
6
  import PropTypes from 'prop-types';
7
- import { IntlContext, IntlProvider as IntlProvider$1 } from 'react-intl';
7
+ import React, { useContext, useMemo } from 'react';
8
+ import { IntlContext, IntlProvider as IntlProvider$1, useIntl, FormattedMessage } from 'react-intl';
9
+ import { PropTypes as PropTypes$1 } from '@panneau/core';
8
10
 
9
11
  var IntlManager = /*#__PURE__*/function () {
10
12
  function IntlManager() {
@@ -40,15 +42,13 @@ var IntlManager = /*#__PURE__*/function () {
40
42
  }, {
41
43
  key: "getMessages",
42
44
  value: function getMessages(locale) {
43
- var localeObj = this.locales.find(function (it) {
45
+ var _ref = this.locales.find(function (it) {
44
46
  return it.locale === locale;
45
- }) || null;
47
+ }) || {},
48
+ _ref$messages = _ref.messages,
49
+ messages = _ref$messages === void 0 ? null : _ref$messages;
46
50
 
47
- if (localeObj === null) {
48
- return null;
49
- }
50
-
51
- return localeObj.messages;
51
+ return messages;
52
52
  }
53
53
  }]);
54
54
 
@@ -57,38 +57,21 @@ var IntlManager = /*#__PURE__*/function () {
57
57
 
58
58
  var intlManager = new IntlManager();
59
59
 
60
- var defaultLocales = ['en', 'fr'];
61
- var LocalesContext = /*#__PURE__*/React.createContext(defaultLocales);
62
- var useLocales = function useLocales() {
63
- return useContext(LocalesContext);
64
- };
65
- var useOtherLocales = function useOtherLocales() {
66
- var locales = useLocales();
67
-
68
- var _useContext = useContext(IntlContext),
69
- locale = _useContext.locale;
70
-
71
- var otherLocales = useMemo(function () {
72
- return locales.filter(function (it) {
73
- return it !== locale;
74
- });
75
- }, [locales, locale]);
76
- return otherLocales;
77
- };
78
- var propTypes = {
60
+ var propTypes$1 = {
79
61
  intlManager: PropTypes.instanceOf(IntlManager),
80
62
  locale: PropTypes.string,
81
63
  locales: PropTypes.arrayOf(PropTypes.string),
82
64
  extraMessages: PropTypes.objectOf(PropTypes.string),
83
65
  children: PropTypes.node
84
66
  };
85
- var defaultProps = {
67
+ var defaultProps$1 = {
86
68
  intlManager: intlManager,
87
69
  locale: null,
88
70
  locales: null,
89
71
  extraMessages: null,
90
72
  children: null
91
73
  };
74
+
92
75
  var IntlProvider = function IntlProvider(_ref) {
93
76
  var intlManager = _ref.intlManager,
94
77
  locale = _ref.locale,
@@ -103,20 +86,70 @@ var IntlProvider = function IntlProvider(_ref) {
103
86
  _ref2$messages = _ref2.messages,
104
87
  previousMessages = _ref2$messages === void 0 ? null : _ref2$messages;
105
88
 
89
+ var managerMessages = intlManager !== null ? intlManager.getMessages(locale) : null;
106
90
  var messages = useMemo(function () {
107
- var currentMessages = intlManager.getMessages(locale);
108
91
 
109
- return _objectSpread(_objectSpread(_objectSpread({}, currentMessages), extraMessages), previousLocale === locale ? previousMessages : null);
110
- }, [locale, previousLocale, previousMessages, extraMessages]);
92
+ return _objectSpread(_objectSpread(_objectSpread({}, previousLocale === locale ? previousMessages : null), managerMessages), extraMessages);
93
+ }, [managerMessages, locale, previousLocale, previousMessages, extraMessages]);
111
94
  return /*#__PURE__*/React.createElement(IntlProvider$1, {
112
95
  locale: locale,
113
96
  messages: messages
114
- }, /*#__PURE__*/React.createElement(LocalesContext.Provider, {
115
- value: locales || previousLocales
97
+ }, /*#__PURE__*/React.createElement(LocalesProvider, {
98
+ locales: locales || previousLocales
116
99
  }, children));
117
100
  };
118
- IntlProvider.propTypes = propTypes;
119
- IntlProvider.defaultProps = defaultProps;
120
101
 
121
- export default intlManager;
122
- export { IntlManager, IntlProvider, LocalesContext, useLocales, useOtherLocales };
102
+ IntlProvider.propTypes = propTypes$1;
103
+ IntlProvider.defaultProps = defaultProps$1;
104
+
105
+ var propTypes = {
106
+ resource: PropTypes$1.resource,
107
+ values: PropTypes.object,
108
+ // eslint-disable-line react/forbid-prop-types,
109
+ id: PropTypes.string.isRequired,
110
+ defaultMessage: PropTypes.string,
111
+ description: PropTypes.string
112
+ };
113
+ var defaultProps = {
114
+ resource: null,
115
+ values: null,
116
+ defaultMessage: null,
117
+ description: null
118
+ };
119
+
120
+ var ResourceMessage = function ResourceMessage(_ref) {
121
+ var resource = _ref.resource,
122
+ values = _ref.values,
123
+ id = _ref.id,
124
+ defaultMessage = _ref.defaultMessage,
125
+ description = _ref.description;
126
+ var contextResource = useResource();
127
+
128
+ var _useIntl = useIntl(),
129
+ messages = _useIntl.messages;
130
+
131
+ var _ref2 = resource || contextResource || {},
132
+ resourceId = _ref2.id,
133
+ _ref2$name = _ref2.name,
134
+ name = _ref2$name === void 0 ? null : _ref2$name,
135
+ _ref2$intl = _ref2.intl;
136
+
137
+ _ref2$intl = _ref2$intl === void 0 ? {} : _ref2$intl;
138
+ var resourceValues = _ref2$intl.values;
139
+ var resourceMessageId = id.replace(/^resources\./, "resources.".concat(resourceId, "."));
140
+ var message = {
141
+ id: typeof messages[resourceMessageId] !== 'undefined' ? resourceMessageId : id,
142
+ defaultMessage: defaultMessage,
143
+ description: description
144
+ };
145
+ return /*#__PURE__*/React.createElement(FormattedMessage, Object.assign({
146
+ values: _objectSpread(_objectSpread({
147
+ name: name
148
+ }, resourceValues), values)
149
+ }, message));
150
+ };
151
+
152
+ ResourceMessage.propTypes = propTypes;
153
+ ResourceMessage.defaultProps = defaultProps;
154
+
155
+ export { IntlManager, IntlProvider, ResourceMessage, intlManager as default };
package/lib/index.js CHANGED
@@ -6,9 +6,11 @@ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
6
6
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
7
7
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
8
8
  var _createClass = require('@babel/runtime/helpers/createClass');
9
- var React = require('react');
9
+ var contexts = require('@panneau/core/contexts');
10
10
  var PropTypes = require('prop-types');
11
+ var React = require('react');
11
12
  var reactIntl = require('react-intl');
13
+ var core = require('@panneau/core');
12
14
 
13
15
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
16
 
@@ -16,26 +18,26 @@ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
16
18
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
17
19
  var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
18
20
  var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
19
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
20
21
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
23
 
22
24
  var IntlManager = /*#__PURE__*/function () {
23
25
  function IntlManager() {
24
- _classCallCheck__default['default'](this, IntlManager);
26
+ _classCallCheck__default["default"](this, IntlManager);
25
27
 
26
28
  this.locales = [];
27
29
  }
28
30
 
29
- _createClass__default['default'](IntlManager, [{
31
+ _createClass__default["default"](IntlManager, [{
30
32
  key: "addLocale",
31
33
  value: function addLocale(locale, messages) {
32
34
  var replace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
33
35
  var currentLocale = this.getLocale(locale);
34
- this.locales = [].concat(_toConsumableArray__default['default'](currentLocale !== null ? this.locales.filter(function (it) {
36
+ this.locales = [].concat(_toConsumableArray__default["default"](currentLocale !== null ? this.locales.filter(function (it) {
35
37
  return it.locale !== locale;
36
38
  }) : this.locales), [{
37
39
  locale: locale,
38
- messages: currentLocale !== null && !replace ? _objectSpread__default['default'](_objectSpread__default['default']({}, currentLocale.messages), messages) : messages
40
+ messages: currentLocale !== null && !replace ? _objectSpread__default["default"](_objectSpread__default["default"]({}, currentLocale.messages), messages) : messages
39
41
  }]);
40
42
  }
41
43
  }, {
@@ -53,15 +55,13 @@ var IntlManager = /*#__PURE__*/function () {
53
55
  }, {
54
56
  key: "getMessages",
55
57
  value: function getMessages(locale) {
56
- var localeObj = this.locales.find(function (it) {
58
+ var _ref = this.locales.find(function (it) {
57
59
  return it.locale === locale;
58
- }) || null;
60
+ }) || {},
61
+ _ref$messages = _ref.messages,
62
+ messages = _ref$messages === void 0 ? null : _ref$messages;
59
63
 
60
- if (localeObj === null) {
61
- return null;
62
- }
63
-
64
- return localeObj.messages;
64
+ return messages;
65
65
  }
66
66
  }]);
67
67
 
@@ -70,45 +70,28 @@ var IntlManager = /*#__PURE__*/function () {
70
70
 
71
71
  var intlManager = new IntlManager();
72
72
 
73
- var defaultLocales = ['en', 'fr'];
74
- var LocalesContext = /*#__PURE__*/React__default['default'].createContext(defaultLocales);
75
- var useLocales = function useLocales() {
76
- return React.useContext(LocalesContext);
77
- };
78
- var useOtherLocales = function useOtherLocales() {
79
- var locales = useLocales();
80
-
81
- var _useContext = React.useContext(reactIntl.IntlContext),
82
- locale = _useContext.locale;
83
-
84
- var otherLocales = React.useMemo(function () {
85
- return locales.filter(function (it) {
86
- return it !== locale;
87
- });
88
- }, [locales, locale]);
89
- return otherLocales;
73
+ var propTypes$1 = {
74
+ intlManager: PropTypes__default["default"].instanceOf(IntlManager),
75
+ locale: PropTypes__default["default"].string,
76
+ locales: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
77
+ extraMessages: PropTypes__default["default"].objectOf(PropTypes__default["default"].string),
78
+ children: PropTypes__default["default"].node
90
79
  };
91
- var propTypes = {
92
- intlManager: PropTypes__default['default'].instanceOf(IntlManager),
93
- locale: PropTypes__default['default'].string,
94
- locales: PropTypes__default['default'].arrayOf(PropTypes__default['default'].string),
95
- extraMessages: PropTypes__default['default'].objectOf(PropTypes__default['default'].string),
96
- children: PropTypes__default['default'].node
97
- };
98
- var defaultProps = {
80
+ var defaultProps$1 = {
99
81
  intlManager: intlManager,
100
82
  locale: null,
101
83
  locales: null,
102
84
  extraMessages: null,
103
85
  children: null
104
86
  };
87
+
105
88
  var IntlProvider = function IntlProvider(_ref) {
106
89
  var intlManager = _ref.intlManager,
107
90
  locale = _ref.locale,
108
91
  locales = _ref.locales,
109
92
  children = _ref.children,
110
93
  extraMessages = _ref.extraMessages;
111
- var previousLocales = useLocales();
94
+ var previousLocales = contexts.useLocales();
112
95
 
113
96
  var _ref2 = React.useContext(reactIntl.IntlContext) || {},
114
97
  _ref2$locale = _ref2.locale,
@@ -116,24 +99,73 @@ var IntlProvider = function IntlProvider(_ref) {
116
99
  _ref2$messages = _ref2.messages,
117
100
  previousMessages = _ref2$messages === void 0 ? null : _ref2$messages;
118
101
 
102
+ var managerMessages = intlManager !== null ? intlManager.getMessages(locale) : null;
119
103
  var messages = React.useMemo(function () {
120
- var currentMessages = intlManager.getMessages(locale);
121
104
 
122
- return _objectSpread__default['default'](_objectSpread__default['default'](_objectSpread__default['default']({}, currentMessages), extraMessages), previousLocale === locale ? previousMessages : null);
123
- }, [locale, previousLocale, previousMessages, extraMessages]);
124
- return /*#__PURE__*/React__default['default'].createElement(reactIntl.IntlProvider, {
105
+ return _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, previousLocale === locale ? previousMessages : null), managerMessages), extraMessages);
106
+ }, [managerMessages, locale, previousLocale, previousMessages, extraMessages]);
107
+ return /*#__PURE__*/React__default["default"].createElement(reactIntl.IntlProvider, {
125
108
  locale: locale,
126
109
  messages: messages
127
- }, /*#__PURE__*/React__default['default'].createElement(LocalesContext.Provider, {
128
- value: locales || previousLocales
110
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.LocalesProvider, {
111
+ locales: locales || previousLocales
129
112
  }, children));
130
113
  };
131
- IntlProvider.propTypes = propTypes;
132
- IntlProvider.defaultProps = defaultProps;
114
+
115
+ IntlProvider.propTypes = propTypes$1;
116
+ IntlProvider.defaultProps = defaultProps$1;
117
+
118
+ var propTypes = {
119
+ resource: core.PropTypes.resource,
120
+ values: PropTypes__default["default"].object,
121
+ // eslint-disable-line react/forbid-prop-types,
122
+ id: PropTypes__default["default"].string.isRequired,
123
+ defaultMessage: PropTypes__default["default"].string,
124
+ description: PropTypes__default["default"].string
125
+ };
126
+ var defaultProps = {
127
+ resource: null,
128
+ values: null,
129
+ defaultMessage: null,
130
+ description: null
131
+ };
132
+
133
+ var ResourceMessage = function ResourceMessage(_ref) {
134
+ var resource = _ref.resource,
135
+ values = _ref.values,
136
+ id = _ref.id,
137
+ defaultMessage = _ref.defaultMessage,
138
+ description = _ref.description;
139
+ var contextResource = contexts.useResource();
140
+
141
+ var _useIntl = reactIntl.useIntl(),
142
+ messages = _useIntl.messages;
143
+
144
+ var _ref2 = resource || contextResource || {},
145
+ resourceId = _ref2.id,
146
+ _ref2$name = _ref2.name,
147
+ name = _ref2$name === void 0 ? null : _ref2$name,
148
+ _ref2$intl = _ref2.intl;
149
+
150
+ _ref2$intl = _ref2$intl === void 0 ? {} : _ref2$intl;
151
+ var resourceValues = _ref2$intl.values;
152
+ var resourceMessageId = id.replace(/^resources\./, "resources.".concat(resourceId, "."));
153
+ var message = {
154
+ id: typeof messages[resourceMessageId] !== 'undefined' ? resourceMessageId : id,
155
+ defaultMessage: defaultMessage,
156
+ description: description
157
+ };
158
+ return /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, Object.assign({
159
+ values: _objectSpread__default["default"](_objectSpread__default["default"]({
160
+ name: name
161
+ }, resourceValues), values)
162
+ }, message));
163
+ };
164
+
165
+ ResourceMessage.propTypes = propTypes;
166
+ ResourceMessage.defaultProps = defaultProps;
133
167
 
134
168
  exports.IntlManager = IntlManager;
135
169
  exports.IntlProvider = IntlProvider;
136
- exports.LocalesContext = LocalesContext;
137
- exports.default = intlManager;
138
- exports.useLocales = useLocales;
139
- exports.useOtherLocales = useOtherLocales;
170
+ exports.ResourceMessage = ResourceMessage;
171
+ exports["default"] = intlManager;