cozy-ui-plus 3.1.2 → 4.1.0

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.
Files changed (119) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/AppSections/Sections.js +5 -7
  3. package/dist/AppSections/components/AppsSection.js +2 -2
  4. package/dist/AppTile/index.js +3 -3
  5. package/dist/Contacts/AddModal/ContactAddressDialog/index.js +4 -4
  6. package/dist/Contacts/AddModal/ContactForm/FieldInput.js +6 -10
  7. package/dist/Contacts/AddModal/ContactForm/FieldInputAccordion.js +4 -4
  8. package/dist/Contacts/AddModal/ContactForm/FieldInputArray.js +7 -9
  9. package/dist/Contacts/AddModal/ContactForm/FieldInputLayout.js +6 -8
  10. package/dist/Contacts/AddModal/ContactForm/FieldInputWrapper.js +1 -1
  11. package/dist/Contacts/AddModal/ContactForm/TextFieldCustomLabelSelect.js +3 -3
  12. package/dist/Contacts/AddModal/ContactForm/TextFieldSelect.js +4 -4
  13. package/dist/Contacts/AddModal/ContactForm/helpers.js +90 -33
  14. package/dist/Contacts/AddModal/ContactForm/index.js +10 -5
  15. package/dist/Contacts/AddModal/ContactForm/locales/index.js +4 -4
  16. package/dist/Contacts/AddModal/CustomLabelDialog/index.js +4 -4
  17. package/dist/Contacts/AddModal/index.js +4 -4
  18. package/dist/Contacts/GroupsSelect/GroupCreation.js +3 -3
  19. package/dist/Contacts/GroupsSelect/GroupsSelectProvider.js +3 -3
  20. package/dist/Contacts/GroupsSelect/SelectBox/Control.js +4 -4
  21. package/dist/Contacts/GroupsSelect/useGroupSelect.js +4 -4
  22. package/dist/Contacts/Header/GroupsSelection.js +4 -4
  23. package/dist/Contacts/Header/ImportDropdown.js +4 -4
  24. package/dist/Contacts/Header/index.js +4 -4
  25. package/dist/ContactsList/Contacts/ContactIdentity.js +4 -4
  26. package/dist/ContactsList/ContactsList.js +3 -3
  27. package/dist/ContactsList/locales/withContactsListLocales.js +2 -4
  28. package/dist/ContactsListModal/ContactsListContent.js +3 -3
  29. package/dist/ContactsListModal/ContactsListModal.js +3 -3
  30. package/dist/ContactsListModal/withContactsListLocales.js +2 -4
  31. package/dist/Dialogs/AuthentificationDialog/index.js +2 -2
  32. package/dist/Dialogs/AuthentificationDialog/withSpecificDialogsLocales.js +2 -4
  33. package/dist/FilePicker/FilePickerBodyItem.js +3 -3
  34. package/dist/FilePicker/FilePickerFooter.js +3 -3
  35. package/dist/FilePicker/docs/DemoProvider.js +3 -3
  36. package/dist/ListItem/ExpandedAttributes/ExpandedAttribute.js +3 -3
  37. package/dist/ListItem/ExpandedAttributes/index.js +3 -3
  38. package/dist/ListItem/ListItemBase/Renaming/RenameDialog.js +3 -3
  39. package/dist/ListItem/ListItemFile/ExpirationAnnotation.js +3 -3
  40. package/dist/ListItem/ListItemFile/SecondaryText.js +3 -3
  41. package/dist/ListItem/hoc/withListItemLocales.js +2 -4
  42. package/dist/Paywall/Paywall.js +3 -3
  43. package/dist/Paywall/locales/withPaywallLocales.js +2 -4
  44. package/dist/Qualification/QualificationGrid/index.js +3 -3
  45. package/dist/Qualification/QualificationGrid/locales/withLocales.js +2 -4
  46. package/dist/Qualification/QualificationModal/index.js +4 -4
  47. package/dist/Storage/StorageButton.js +4 -4
  48. package/dist/Storage/StorageProgress.js +4 -4
  49. package/dist/UploadQueue/Item.js +3 -3
  50. package/dist/UploadQueue/Pending.js +3 -3
  51. package/dist/UploadQueue/RemainingTime.js +3 -3
  52. package/dist/UploadQueue/index.js +4 -6
  53. package/dist/src/Contacts/AddModal/ContactForm/FieldInput.d.ts +2 -6
  54. package/dist/src/Contacts/AddModal/ContactForm/FieldInputArray.d.ts +2 -6
  55. package/dist/src/Contacts/AddModal/ContactForm/helpers.d.ts +4 -2
  56. package/dist/test/I18n.d.ts +1 -1
  57. package/package.json +7 -5
  58. package/src/AppSections/Readme.md +1 -1
  59. package/src/AppSections/Sections.jsx +1 -2
  60. package/src/AppSections/components/AppsSection.jsx +1 -1
  61. package/src/AppSections/helpers.spec.js +1 -1
  62. package/src/AppTile/AppTile.spec.jsx +1 -2
  63. package/src/AppTile/Readme.md +1 -1
  64. package/src/AppTile/index.jsx +1 -1
  65. package/src/Contacts/AddModal/ContactAddressDialog/index.jsx +1 -1
  66. package/src/Contacts/AddModal/ContactForm/FieldInput.jsx +4 -9
  67. package/src/Contacts/AddModal/ContactForm/FieldInputAccordion.jsx +1 -1
  68. package/src/Contacts/AddModal/ContactForm/FieldInputArray.jsx +8 -5
  69. package/src/Contacts/AddModal/ContactForm/FieldInputLayout.jsx +4 -4
  70. package/src/Contacts/AddModal/ContactForm/FieldInputWrapper.jsx +1 -1
  71. package/src/Contacts/AddModal/ContactForm/TextFieldCustomLabelSelect.jsx +1 -2
  72. package/src/Contacts/AddModal/ContactForm/TextFieldSelect.jsx +1 -1
  73. package/src/Contacts/AddModal/ContactForm/helpers.js +65 -17
  74. package/src/Contacts/AddModal/ContactForm/helpers.spec.js +344 -1
  75. package/src/Contacts/AddModal/ContactForm/index.jsx +11 -6
  76. package/src/Contacts/AddModal/ContactForm/locales/en.json +1 -1
  77. package/src/Contacts/AddModal/ContactForm/locales/fr.json +1 -1
  78. package/src/Contacts/AddModal/ContactForm/locales/ru.json +1 -1
  79. package/src/Contacts/AddModal/ContactForm/locales/vi.json +1 -1
  80. package/src/Contacts/AddModal/CustomLabelDialog/index.jsx +1 -1
  81. package/src/Contacts/AddModal/index.jsx +1 -1
  82. package/src/Contacts/GroupsSelect/GroupCreation.jsx +1 -1
  83. package/src/Contacts/GroupsSelect/GroupsSelectProvider.jsx +1 -2
  84. package/src/Contacts/GroupsSelect/SelectBox/Control.jsx +1 -1
  85. package/src/Contacts/GroupsSelect/useGroupSelect.jsx +1 -1
  86. package/src/Contacts/Header/GroupsSelection.jsx +1 -1
  87. package/src/Contacts/Header/ImportDropdown.jsx +1 -1
  88. package/src/Contacts/Header/index.jsx +1 -1
  89. package/src/ContactsList/Contacts/ContactIdentity.jsx +1 -1
  90. package/src/ContactsList/ContactsList.jsx +1 -1
  91. package/src/ContactsList/locales/withContactsListLocales.jsx +1 -1
  92. package/src/ContactsListModal/ContactsListContent.jsx +1 -1
  93. package/src/ContactsListModal/ContactsListModal.jsx +1 -1
  94. package/src/ContactsListModal/Readme.md +1 -1
  95. package/src/ContactsListModal/withContactsListLocales.jsx +1 -1
  96. package/src/Dialogs/AuthentificationDialog/index.jsx +1 -1
  97. package/src/Dialogs/AuthentificationDialog/withSpecificDialogsLocales.jsx +1 -1
  98. package/src/FilePicker/FilePickerBodyItem.jsx +1 -1
  99. package/src/FilePicker/FilePickerFooter.jsx +1 -1
  100. package/src/FilePicker/docs/DemoProvider.jsx +1 -1
  101. package/src/ListItem/ExpandedAttributes/ExpandedAttribute.jsx +1 -1
  102. package/src/ListItem/ExpandedAttributes/index.jsx +1 -1
  103. package/src/ListItem/ListItemBase/Renaming/RenameDialog.jsx +1 -1
  104. package/src/ListItem/ListItemFile/ExpirationAnnotation.jsx +1 -1
  105. package/src/ListItem/ListItemFile/SecondaryText.jsx +1 -1
  106. package/src/ListItem/hoc/withListItemLocales.jsx +1 -1
  107. package/src/Paywall/Paywall.jsx +1 -1
  108. package/src/Paywall/locales/withPaywallLocales.jsx +1 -1
  109. package/src/Qualification/QualificationGrid/index.jsx +1 -1
  110. package/src/Qualification/QualificationGrid/locales/withLocales.jsx +1 -1
  111. package/src/Qualification/QualificationModal/index.jsx +1 -1
  112. package/src/Storage/StorageButton.jsx +1 -1
  113. package/src/Storage/StorageProgress.jsx +1 -1
  114. package/src/UploadQueue/Item.jsx +1 -1
  115. package/src/UploadQueue/Pending.jsx +1 -1
  116. package/src/UploadQueue/RemainingTime.jsx +1 -1
  117. package/src/UploadQueue/index.jsx +1 -2
  118. package/src/UploadQueue/index.spec.jsx +48 -34
  119. package/test/I18n.js +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.1.0](https://github.com/cozy/cozy-libs/compare/cozy-ui-plus@4.0.0...cozy-ui-plus@4.1.0) (2025-12-10)
7
+
8
+ ### Features
9
+
10
+ - **ui-plus:** Add possibility to overrides fields in Contacts AddModal ([7224485](https://github.com/cozy/cozy-libs/commit/72244856a99c879d54b1317e402a095afcb8b3f6))
11
+ - **ui-plus:** Change required logic for Contacts AddModal ([cdd5650](https://github.com/cozy/cozy-libs/commit/cdd565070ddb98a515c63ee9f2026b4e2fa1532d))
12
+ - **ui-plus:** Contacts AddModal form input values are now overridable ([50e7502](https://github.com/cozy/cozy-libs/commit/50e7502e5143e0479941c8aeabe67e90796a735c))
13
+
14
+ # [4.0.0](https://github.com/cozy/cozy-libs/compare/cozy-ui-plus@3.1.2...cozy-ui-plus@4.0.0) (2025-12-04)
15
+
16
+ ### Features
17
+
18
+ - Add twake-i18n in packages ([f8689a9](https://github.com/cozy/cozy-libs/commit/f8689a9a58dc6384ccf494a19fd1afb595da39f0))
19
+
20
+ ### BREAKING CHANGES
21
+
22
+ - You must have `twake-i18n >= 0.3.0` and `cozy-ui >= 135.0.0`
23
+
6
24
  ## [3.1.2](https://github.com/cozy/cozy-libs/compare/cozy-ui-plus@3.1.1...cozy-ui-plus@3.1.2) (2025-12-04)
7
25
 
8
26
  **Note:** Version bump only for package cozy-ui-plus
@@ -29,14 +29,12 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
29
29
 
30
30
  var _react = _interopRequireWildcard(require("react"));
31
31
 
32
+ var _twakeI18n = require("twake-i18n");
33
+
32
34
  var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
33
35
 
34
36
  var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
35
37
 
36
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
37
-
38
- var _withOnlyLocales = _interopRequireDefault(require("cozy-ui/transpiled/react/providers/I18n/withOnlyLocales"));
39
-
40
38
  var catUtils = _interopRequireWildcard(require("./categories"));
41
39
 
42
40
  var _AppsSection = _interopRequireDefault(require("./components/AppsSection"));
@@ -402,9 +400,9 @@ var SectionsWrapper = function SectionsWrapper(_ref5) {
402
400
  var config = _ref5.config,
403
401
  props = (0, _objectWithoutProperties2.default)(_ref5, _excluded);
404
402
  var i18nConfig = (0, _generateI18nConfig.generateI18nConfig)(config === null || config === void 0 ? void 0 : config.categories);
405
- (0, _I18n.useExtendI18n)(i18nConfig);
403
+ (0, _twakeI18n.useExtendI18n)(i18nConfig);
406
404
 
407
- var _useI18n = (0, _I18n.useI18n)(),
405
+ var _useI18n = (0, _twakeI18n.useI18n)(),
408
406
  t = _useI18n.t;
409
407
 
410
408
  var breakpoints = (0, _Breakpoints.useBreakpoints)();
@@ -456,6 +454,6 @@ Sections.defaultProps = {
456
454
  })
457
455
  };
458
456
 
459
- var _default = (0, _withOnlyLocales.default)(locales)(SectionsWrapper);
457
+ var _default = (0, _twakeI18n.withOnlyLocales)(locales)(SectionsWrapper);
460
458
 
461
459
  exports.default = _default;
@@ -17,7 +17,7 @@ var _react = _interopRequireWildcard(require("react"));
17
17
 
18
18
  var _Breakpoints = _interopRequireDefault(require("cozy-ui/transpiled/react/providers/Breakpoints"));
19
19
 
20
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
20
+ var _twakeI18n = require("twake-i18n");
21
21
 
22
22
  var _AppTile = _interopRequireDefault(require("../../AppTile"));
23
23
 
@@ -61,7 +61,7 @@ var AppsSection = function AppsSection(_ref) {
61
61
  var _useBreakpoints = (0, _Breakpoints.default)(),
62
62
  isMobile = _useBreakpoints.isMobile;
63
63
 
64
- var _useI18n = (0, _I18n.useI18n)(),
64
+ var _useI18n = (0, _twakeI18n.useI18n)(),
65
65
  t = _useI18n.t;
66
66
 
67
67
  var apps = (0, _react.useMemo)(function () {
@@ -17,14 +17,14 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
18
  var _react = _interopRequireDefault(require("react"));
19
19
 
20
+ var _twakeI18n = require("twake-i18n");
21
+
20
22
  var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
21
23
 
22
24
  var _WrenchCircle = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/WrenchCircle"));
23
25
 
24
26
  var _Tile = _interopRequireWildcard(require("cozy-ui/transpiled/react/Tile"));
25
27
 
26
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
27
-
28
28
  var _helpers = require("./helpers");
29
29
 
30
30
  var _AppIcon = _interopRequireDefault(require("../AppIcon"));
@@ -103,7 +103,7 @@ var getAppIconProps = function getAppIconProps() {
103
103
  };
104
104
  };
105
105
 
106
- var useI18n = (0, _I18n.createUseI18n)(locales);
106
+ var useI18n = (0, _twakeI18n.createUseI18n)(locales);
107
107
 
108
108
  var AppTile = function AppTile(_ref) {
109
109
  var app = _ref.app,
@@ -13,12 +13,12 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _reactFinalForm = require("react-final-form");
15
15
 
16
+ var _twakeI18n = require("twake-i18n");
17
+
16
18
  var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
17
19
 
18
20
  var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
19
21
 
20
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
21
-
22
22
  var _helpers = require("./helpers");
23
23
 
24
24
  var _locales = require("./locales");
@@ -31,9 +31,9 @@ var ContactAddressModal = function ContactAddressModal(_ref) {
31
31
  var onClose = _ref.onClose,
32
32
  name = _ref.name,
33
33
  subFields = _ref.subFields;
34
- (0, _I18n.useExtendI18n)(_locales.locales);
34
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
35
35
 
36
- var _useI18n = (0, _I18n.useI18n)(),
36
+ var _useI18n = (0, _twakeI18n.useI18n)(),
37
37
  t = _useI18n.t;
38
38
 
39
39
  var _useForm = (0, _reactFinalForm.useForm)(),
@@ -21,7 +21,7 @@ var _react = _interopRequireWildcard(require("react"));
21
21
 
22
22
  var _reactFinalForm = require("react-final-form");
23
23
 
24
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
24
+ var _twakeI18n = require("twake-i18n");
25
25
 
26
26
  var _FieldInputWrapper = _interopRequireDefault(require("./FieldInputWrapper"));
27
27
 
@@ -56,8 +56,7 @@ var FieldInput = function FieldInput(_ref) {
56
56
  error = _ref.error,
57
57
  helperText = _ref.helperText,
58
58
  label = _ref.label,
59
- isInvisible = _ref.isInvisible,
60
- required = _ref.required;
59
+ isInvisible = _ref.isInvisible;
61
60
 
62
61
  var _useState = (0, _react.useState)((0, _uniqueId.default)('field_')),
63
62
  _useState2 = (0, _slicedToArray2.default)(_useState, 1),
@@ -79,9 +78,9 @@ var FieldInput = function FieldInput(_ref) {
79
78
  isRelatedContactDialogOpen = _useState8[0],
80
79
  setIsRelatedContactDialogOpen = _useState8[1];
81
80
 
82
- (0, _I18n.useExtendI18n)(_locales.locales);
81
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
83
82
 
84
- var _useI18n = (0, _I18n.useI18n)(),
83
+ var _useI18n = (0, _twakeI18n.useI18n)(),
85
84
  t = _useI18n.t;
86
85
 
87
86
  var handleClick = function handleClick() {
@@ -104,7 +103,6 @@ var FieldInput = function FieldInput(_ref) {
104
103
  'u-dn': isInvisible
105
104
  })
106
105
  }, /*#__PURE__*/_react.default.createElement(_reactFinalForm.Field, {
107
- required: required,
108
106
  error: error,
109
107
  helperText: helperText,
110
108
  label: label,
@@ -153,12 +151,10 @@ FieldInput.propTypes = {
153
151
  }),
154
152
  // Destructuring props
155
153
  id: _propTypes.default.string,
156
- label: _propTypes.default.string,
157
- required: _propTypes.default.bool
154
+ label: _propTypes.default.string
158
155
  };
159
156
  FieldInput.defaultProps = {
160
- labelProps: null,
161
- required: false
157
+ labelProps: null
162
158
  };
163
159
  var _default = FieldInput;
164
160
  exports.default = _default;
@@ -13,6 +13,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
13
13
 
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
 
16
+ var _twakeI18n = require("twake-i18n");
17
+
16
18
  var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
17
19
 
18
20
  var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
@@ -21,8 +23,6 @@ var _Dropdown = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/D
21
23
 
22
24
  var _Dropup = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Dropup"));
23
25
 
24
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
25
-
26
26
  var _FieldInput = _interopRequireDefault(require("./FieldInput"));
27
27
 
28
28
  var _locales = require("./locales");
@@ -43,9 +43,9 @@ var FieldInputAccordion = function FieldInputAccordion(_ref) {
43
43
  contacts = _ref.contacts,
44
44
  error = _ref.error,
45
45
  helperText = _ref.helperText;
46
- (0, _I18n.useExtendI18n)(_locales.locales);
46
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
47
47
 
48
- var _useI18n = (0, _I18n.useI18n)(),
48
+ var _useI18n = (0, _twakeI18n.useI18n)(),
49
49
  t = _useI18n.t;
50
50
 
51
51
  var _useState = (0, _react.useState)(false),
@@ -15,6 +15,8 @@ var _react = _interopRequireDefault(require("react"));
15
15
 
16
16
  var _reactFinalFormArrays = require("react-final-form-arrays");
17
17
 
18
+ var _twakeI18n = require("twake-i18n");
19
+
18
20
  var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
19
21
 
20
22
  var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
@@ -27,8 +29,6 @@ var _Plus = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Plus"
27
29
 
28
30
  var _ListItemIcon = _interopRequireDefault(require("cozy-ui/transpiled/react/ListItemIcon"));
29
31
 
30
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
31
-
32
32
  var _FieldInput = _interopRequireDefault(require("./FieldInput"));
33
33
 
34
34
  var _helpers = require("./helpers");
@@ -43,15 +43,13 @@ var FieldInputArray = function FieldInputArray(_ref) {
43
43
  label = _ref$attributes.label,
44
44
  restAttributes = (0, _objectWithoutProperties2.default)(_ref$attributes, _excluded),
45
45
  contacts = _ref.contacts,
46
- _ref$formProps = _ref.formProps,
47
- valid = _ref$formProps.valid,
48
- submitFailed = _ref$formProps.submitFailed,
49
- errors = _ref$formProps.errors;
50
- (0, _I18n.useExtendI18n)(_locales.locales);
46
+ formProps = _ref.formProps;
47
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
51
48
 
52
- var _useI18n = (0, _I18n.useI18n)(),
49
+ var _useI18n = (0, _twakeI18n.useI18n)(),
53
50
  t = _useI18n.t;
54
51
 
52
+ var errors = formProps.errors;
55
53
  return /*#__PURE__*/_react.default.createElement(_reactFinalFormArrays.FieldArray, {
56
54
  name: name
57
55
  }, function (_ref2) {
@@ -62,7 +60,7 @@ var FieldInputArray = function FieldInputArray(_ref) {
62
60
  var key = ((_fields$value$index = fields.value[index]) === null || _fields$value$index === void 0 ? void 0 : _fields$value$index.fieldId) || nameWithIndex;
63
61
  var showRemove = (_fields$value$index2 = fields.value[index]) === null || _fields$value$index2 === void 0 ? void 0 : _fields$value$index2[name];
64
62
  var inputName = "".concat(nameWithIndex, ".").concat(name);
65
- var isError = _helpers.fieldsRequired.includes(inputName) && !valid && submitFailed;
63
+ var isError = (0, _helpers.makeIsRequiredError)(restAttributes.required, formProps);
66
64
  return /*#__PURE__*/_react.default.createElement("div", {
67
65
  key: key,
68
66
  className: (0, _classnames.default)('u-flex u-flex-items-baseline', {
@@ -15,9 +15,9 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
16
  var _react = _interopRequireDefault(require("react"));
17
17
 
18
- var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
18
+ var _twakeI18n = require("twake-i18n");
19
19
 
20
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
20
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
21
21
 
22
22
  var _FieldInput = _interopRequireDefault(require("./FieldInput"));
23
23
 
@@ -41,18 +41,16 @@ var FieldInputLayout = function FieldInputLayout(_ref) {
41
41
  contacts = _ref.contacts,
42
42
  showSecondaryFields = _ref.showSecondaryFields,
43
43
  formProps = _ref.formProps;
44
- (0, _I18n.useExtendI18n)(_locales.locales);
44
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
45
45
 
46
- var _useI18n = (0, _I18n.useI18n)(),
46
+ var _useI18n = (0, _twakeI18n.useI18n)(),
47
47
  t = _useI18n.t;
48
48
 
49
- var valid = formProps.valid,
50
- submitFailed = formProps.submitFailed,
51
- errors = formProps.errors;
49
+ var errors = formProps.errors;
52
50
  var name = attributes.name,
53
51
  label = attributes.label,
54
52
  restAttributes = (0, _objectWithoutProperties2.default)(attributes, _excluded2);
55
- var isError = _helpers.fieldsRequired.includes(name) && !valid && submitFailed;
53
+ var isError = (0, _helpers.makeIsRequiredError)(restAttributes.required, formProps);
56
54
  return /*#__PURE__*/_react.default.createElement("div", {
57
55
  className: (0, _classnames.default)('u-mt-1', {
58
56
  'u-flex-items-center': !layout,
@@ -35,7 +35,7 @@ var FieldInputWrapper = function FieldInputWrapper(_ref) {
35
35
  fullWidth = _ref.fullWidth,
36
36
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded2);
37
37
  var Component = component || (restAttributes.customLabelOptions ? _TextFieldCustomLabelSelect.default : restAttributes !== null && restAttributes !== void 0 && restAttributes.select ? _TextFieldSelect.default : _TextField.default);
38
- return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, restAttributes, input, props, {
38
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, input, restAttributes, props, {
39
39
  variant: variant,
40
40
  fullWidth: fullWidth,
41
41
  minRows: "2"
@@ -15,7 +15,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
18
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
18
+ var _twakeI18n = require("twake-i18n");
19
19
 
20
20
  var _TextFieldSelect = _interopRequireDefault(require("./TextFieldSelect"));
21
21
 
@@ -40,9 +40,9 @@ var TextFieldCustomLabelSelect = function TextFieldCustomLabelSelect(_ref) {
40
40
  customLabelOptions = _ref.customLabelOptions,
41
41
  _onChange = _ref.onChange,
42
42
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
43
- (0, _I18n.useExtendI18n)(_locales.locales);
43
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
44
44
 
45
- var _useI18n = (0, _I18n.useI18n)(),
45
+ var _useI18n = (0, _twakeI18n.useI18n)(),
46
46
  t = _useI18n.t;
47
47
 
48
48
  var _useState = (0, _react.useState)(false),
@@ -15,12 +15,12 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
15
15
 
16
16
  var _react = _interopRequireDefault(require("react"));
17
17
 
18
+ var _twakeI18n = require("twake-i18n");
19
+
18
20
  var _MenuItem = _interopRequireDefault(require("cozy-ui/transpiled/react/MenuItem"));
19
21
 
20
22
  var _TextField = _interopRequireDefault(require("cozy-ui/transpiled/react/TextField"));
21
23
 
22
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
23
-
24
24
  var _locales = require("./locales");
25
25
 
26
26
  var _types = require("../types");
@@ -34,9 +34,9 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
34
34
  var TextFieldSelect = function TextFieldSelect(_ref) {
35
35
  var options = _ref.options,
36
36
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
37
- (0, _I18n.useExtendI18n)(_locales.locales);
37
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
38
38
 
39
- var _useI18n = (0, _I18n.useI18n)(),
39
+ var _useI18n = (0, _twakeI18n.useI18n)(),
40
40
  t = _useI18n.t;
41
41
 
42
42
  var _options = (0, _toConsumableArray2.default)(options.map(function (option) {
@@ -5,16 +5,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.validateFields = exports.removeRelatedContactRelationships = exports.removeField = exports.removeAsscociatedData = exports.moveToHead = exports.movePrimaryToHead = exports.makeTypeAndLabel = exports.makeRelatedContact = exports.makeItemLabel = exports.makeInitialCustomValue = exports.makeImppValues = exports.makeFields = exports.makeCustomLabel = exports.hasExtendedAddress = exports.getRelatedContactRelationships = exports.fieldsRequired = exports.createAddress = exports.addField = void 0;
8
+ exports.validateFields = exports.removeRelatedContactRelationships = exports.removeField = exports.removeAsscociatedData = exports.moveToHead = exports.movePrimaryToHead = exports.makeTypeAndLabel = exports.makeRelatedContact = exports.makeItemLabel = exports.makeIsRequiredError = exports.makeInitialCustomValue = exports.makeImppValues = exports.makeFields = exports.makeCustomLabel = exports.hasNoValues = exports.hasExtendedAddress = exports.getRelatedContactRelationships = exports.getFirstValueIfArray = exports.createAddress = exports.addField = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
13
 
16
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
15
 
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
18
  var _get = _interopRequireDefault(require("lodash/get"));
19
19
 
20
20
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
@@ -35,27 +35,69 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
35
35
 
36
36
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
37
37
 
38
- var fieldsRequired = ['givenName', 'familyName', 'email[0].email', 'cozy'];
38
+ var getFirstValueIfArray = function getFirstValueIfArray(values) {
39
+ return Object.keys(values).reduce(function (acc, key) {
40
+ var val = values[key];
41
+ acc[key] = Array.isArray(val) ? val[0] : val;
42
+ return acc;
43
+ }, {});
44
+ };
39
45
  /**
40
- * Returns errors if all required fields are empty
46
+ * Returns true if all fields have no values
41
47
  * @param {object} values - Fields values
42
- * @param {func} t - Translation function
48
+ * @param {import('../types').Field[]} fields - Fields configuration
49
+ * @returns {boolean} True if all fields have no values
50
+ */
51
+
52
+
53
+ exports.getFirstValueIfArray = getFirstValueIfArray;
54
+
55
+ var hasNoValues = function hasNoValues(values, fields) {
56
+ var _values = getFirstValueIfArray(values);
57
+
58
+ return fields.every(function (field) {
59
+ return !(0, _get.default)(_values, field.name);
60
+ });
61
+ };
62
+ /**
63
+ * Returns true if the input is required and the form is invalid
64
+ * @param {boolean} required - Whether the input is required
65
+ * @param {object} formProps - The form props
66
+ * @returns {boolean} True if the input is required and the form is invalid
67
+ */
68
+
69
+
70
+ exports.hasNoValues = hasNoValues;
71
+
72
+ var makeIsRequiredError = function makeIsRequiredError(required, formProps) {
73
+ var valid = formProps.valid,
74
+ submitFailed = formProps.submitFailed;
75
+ return required && !valid && submitFailed;
76
+ };
77
+ /**
78
+ * Returns errors for required fields that are empty
79
+ * @param {object} values - Fields values
80
+ * @param {import('../types').Field[]} fields - Fields configuration
81
+ * @param {Function} t - Translation function
43
82
  * @returns {object} Errors
44
83
  */
45
84
 
46
- exports.fieldsRequired = fieldsRequired;
47
85
 
48
- var validateFields = function validateFields(values, t) {
86
+ exports.makeIsRequiredError = makeIsRequiredError;
87
+
88
+ var validateFields = function validateFields(values, fields, t) {
49
89
  var errors = {};
90
+ var fieldsRequired = fields.filter(function (field) {
91
+ return field.required;
92
+ });
50
93
 
51
- if (fieldsRequired.every(function (field) {
52
- return !(0, _get.default)(values, field);
53
- })) {
54
- fieldsRequired.forEach(function (field) {
55
- errors[field] = t('Contacts.AddModal.ContactForm.fields.required');
56
- });
57
- }
94
+ var _values = getFirstValueIfArray(values);
58
95
 
96
+ fieldsRequired.forEach(function (field) {
97
+ if (!(0, _get.default)(_values, field.name)) {
98
+ errors[field.name] = field.layout === 'array' ? [(0, _defineProperty2.default)({}, field.name, t('Contacts.AddModal.ContactForm.fields.required'))] : t('Contacts.AddModal.ContactForm.fields.required');
99
+ }
100
+ });
59
101
  return errors;
60
102
  };
61
103
  /**
@@ -130,10 +172,10 @@ var movePrimaryToHead = moveToHead(function (v) {
130
172
  });
131
173
  exports.movePrimaryToHead = movePrimaryToHead;
132
174
 
133
- var createAddress = function createAddress(_ref) {
134
- var address = _ref.address,
135
- oldContact = _ref.oldContact,
136
- t = _ref.t;
175
+ var createAddress = function createAddress(_ref2) {
176
+ var address = _ref2.address,
177
+ oldContact = _ref2.oldContact,
178
+ t = _ref2.t;
137
179
  return address ? address.filter(function (val) {
138
180
  return val && val.address;
139
181
  }).map(function (addressField, index) {
@@ -149,9 +191,9 @@ var createAddress = function createAddress(_ref) {
149
191
  if (addressHasBeenModified) {
150
192
  // Use "code" instead "postcode", to be vcard 4.0 rfc 6350 compliant
151
193
  // eslint-disable-next-line no-unused-vars
152
- var _ref2 = oldContactAddress || {},
153
- postcode = _ref2.postcode,
154
- oldContactAddressCleaned = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
194
+ var _ref3 = oldContactAddress || {},
195
+ postcode = _ref3.postcode,
196
+ oldContactAddressCleaned = (0, _objectWithoutProperties2.default)(_ref3, _excluded);
155
197
 
156
198
  return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, oldContactAddressCleaned), {}, {
157
199
  formattedAddress: addressField.address,
@@ -229,10 +271,10 @@ exports.getRelatedContactRelationships = getRelatedContactRelationships;
229
271
  var removeRelatedContactRelationships = function removeRelatedContactRelationships(contact) {
230
272
  if (!(contact !== null && contact !== void 0 && contact.relationships)) return contact;
231
273
  var updatedContact = (0, _merge.default)({}, contact);
232
- var relationshipsWithoutRelatedContact = Object.entries(updatedContact.relationships).reduce(function (acc, _ref3) {
233
- var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
234
- relName = _ref4[0],
235
- relValue = _ref4[1];
274
+ var relationshipsWithoutRelatedContact = Object.entries(updatedContact.relationships).reduce(function (acc, _ref4) {
275
+ var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
276
+ relName = _ref5[0],
277
+ relValue = _ref5[1];
236
278
 
237
279
  if ('related' === relName) {
238
280
  acc[relName] = relValue;
@@ -257,10 +299,10 @@ exports.removeRelatedContactRelationships = removeRelatedContactRelationships;
257
299
 
258
300
  var removeAsscociatedData = function removeAsscociatedData(contact) {
259
301
  if (!contact) return {};
260
- return Object.entries(contact).reduce(function (cleanedContact, _ref5) {
261
- var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
262
- key = _ref6[0],
263
- value = _ref6[1];
302
+ return Object.entries(contact).reduce(function (cleanedContact, _ref6) {
303
+ var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
304
+ key = _ref7[0],
305
+ value = _ref7[1];
264
306
 
265
307
  // Add `groups` condition to keep the old implementation functional, see below
266
308
  if (!(value instanceof _cozyClient.Association) || key === 'groups') {
@@ -456,9 +498,24 @@ var makeFields = function makeFields(customFields, defaultFields) {
456
498
  }
457
499
 
458
500
  var fields = (0, _toConsumableArray2.default)(defaultFields);
459
- customFields.map(function (customField) {
460
- if (customField.position) {
461
- fields.splice(customField.position, 0, customField);
501
+ customFields.forEach(function (customField) {
502
+ var defaultField = fields.find(function (field) {
503
+ return field.name === customField.name;
504
+ });
505
+
506
+ var _field = defaultField || customField;
507
+
508
+ if (defaultField) {
509
+ Object.assign(_field, customField);
510
+ }
511
+
512
+ if (_field.position) {
513
+ if (defaultField) {
514
+ var fieldIndex = fields.indexOf(defaultField);
515
+ fields.splice(fieldIndex, 1);
516
+ }
517
+
518
+ fields.splice(_field.position, 0, _field);
462
519
  }
463
520
  });
464
521
  return fields;
@@ -19,12 +19,12 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _reactFinalForm = require("react-final-form");
21
21
 
22
+ var _twakeI18n = require("twake-i18n");
23
+
22
24
  var _HasMany = require("cozy-client/dist/associations/HasMany");
23
25
 
24
26
  var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
25
27
 
26
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
27
-
28
28
  var _FieldInputLayout = _interopRequireDefault(require("./FieldInputLayout"));
29
29
 
30
30
  var _contactToFormValues = _interopRequireDefault(require("./contactToFormValues"));
@@ -81,9 +81,9 @@ var ContactForm = function ContactForm(_ref) {
81
81
  showSecondaryFields = _useState2[0],
82
82
  setShowSecondaryFields = _useState2[1];
83
83
 
84
- (0, _I18n.useExtendI18n)(_locales.locales);
84
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
85
85
 
86
- var _useI18n = (0, _I18n.useI18n)(),
86
+ var _useI18n = (0, _twakeI18n.useI18n)(),
87
87
  t = _useI18n.t;
88
88
 
89
89
  var fields = customFieldsProps.fields,
@@ -104,9 +104,14 @@ var ContactForm = function ContactForm(_ref) {
104
104
  t: t
105
105
  }),
106
106
  validate: function validate(values) {
107
- return (0, _helpers.validateFields)(values, t);
107
+ return (0, _helpers.validateFields)(values, _fields, t);
108
108
  },
109
109
  onSubmit: function onSubmit(formValues) {
110
+ // avoid creating an empty contact
111
+ if ((0, _helpers.hasNoValues)(formValues, _fields)) {
112
+ return;
113
+ }
114
+
110
115
  return _onSubmit((0, _formValuesToContact.default)({
111
116
  formValues: formValues,
112
117
  oldContact: contact,
@@ -32,7 +32,7 @@ var en = {
32
32
  relationship: "Relationship",
33
33
  note: "Notes",
34
34
  label: "Label",
35
- required: "One of these fields must be filled in"
35
+ required: "All required fields must be filled in"
36
36
  },
37
37
  label: {
38
38
  none: "None",
@@ -107,7 +107,7 @@ var fr = {
107
107
  relationship: "Relation",
108
108
  note: "Notes",
109
109
  label: "Libell\xE9",
110
- required: "Un de ces champs doit \xEAtre renseign\xE9"
110
+ required: "Tous les champs requis doivent \xEAtre renseign\xE9s"
111
111
  },
112
112
  label: {
113
113
  none: "Aucun",
@@ -182,7 +182,7 @@ var ru = {
182
182
  relationship: "\u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435",
183
183
  note: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438",
184
184
  label: "\u041C\u0435\u0442\u043A\u0430",
185
- required: "\u041E\u0434\u043D\u043E \u0438\u0437 \u044D\u0442\u0438\u0445 \u043F\u043E\u043B\u0435\u0439 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043E"
185
+ required: "\u0412\u0441\u0435 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u043E\u043B\u044F \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u044B"
186
186
  },
187
187
  label: {
188
188
  none: "\u041D\u0435\u0442",
@@ -257,7 +257,7 @@ var vi = {
257
257
  relationship: "M\u1ED1i quan h\u1EC7",
258
258
  note: "Ghi ch\xFA",
259
259
  label: "Nh\xE3n",
260
- required: "M\u1ED9t trong nh\u1EEFng tr\u01B0\u1EDDng n\xE0y ph\u1EA3i \u0111\u01B0\u1EE3c \u0111i\u1EC1n"
260
+ required: "T\u1EA5t c\u1EA3 c\xE1c tr\u01B0\u1EDDng b\u1EAFt bu\u1ED9c ph\u1EA3i \u0111\u01B0\u1EE3c \u0111i\u1EC1n"
261
261
  },
262
262
  label: {
263
263
  none: "Kh\xF4ng c\xF3",
@@ -13,6 +13,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
 
16
+ var _twakeI18n = require("twake-i18n");
17
+
16
18
  var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
17
19
 
18
20
  var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
@@ -27,8 +29,6 @@ var _TextField = _interopRequireDefault(require("cozy-ui/transpiled/react/TextFi
27
29
 
28
30
  var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
29
31
 
30
- var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
31
-
32
32
  var _locales = require("./locales");
33
33
 
34
34
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -42,9 +42,9 @@ var CustomLabelDialog = function CustomLabelDialog(_ref) {
42
42
  onSubmit = _ref.onSubmit,
43
43
  onClose = _ref.onClose;
44
44
  var customValueObj = JSON.parse(customValue || '{}');
45
- (0, _I18n.useExtendI18n)(_locales.locales);
45
+ (0, _twakeI18n.useExtendI18n)(_locales.locales);
46
46
 
47
- var _useI18n = (0, _I18n.useI18n)(),
47
+ var _useI18n = (0, _twakeI18n.useI18n)(),
48
48
  t = _useI18n.t;
49
49
 
50
50
  var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),