cozy-ui-plus 5.1.1 → 5.2.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.
- package/CHANGELOG.md +11 -0
- package/dist/Contacts/AddModal/ContactForm/FieldInput.js +4 -0
- package/dist/Contacts/AddModal/ContactForm/FieldInputAccordion.js +2 -0
- package/dist/Contacts/AddModal/ContactForm/FieldInputArray.js +10 -4
- package/dist/Contacts/AddModal/ContactForm/FieldInputLayout.js +11 -9
- package/dist/Contacts/AddModal/ContactForm/FieldInputWrapper.js +5 -1
- package/dist/Contacts/AddModal/ContactForm/TextFieldCustomLabelSelect.js +7 -1
- package/dist/Contacts/AddModal/ContactForm/TextFieldPhone/index.js +17 -3
- package/dist/Contacts/AddModal/ContactForm/fieldsConfig.js +0 -5
- package/dist/Contacts/AddModal/ContactForm/helpers.js +16 -0
- package/dist/Contacts/AddModal/ContactForm/index.js +2 -0
- package/dist/Contacts/AddModal/types.js +1 -0
- package/dist/src/Contacts/AddModal/ContactForm/FieldInput.d.ts +3 -1
- package/dist/src/Contacts/AddModal/ContactForm/FieldInputAccordion.d.ts +2 -1
- package/dist/src/Contacts/AddModal/ContactForm/FieldInputArray.d.ts +2 -1
- package/dist/src/Contacts/AddModal/ContactForm/FieldInputLayout.d.ts +4 -8
- package/dist/src/Contacts/AddModal/ContactForm/FieldInputWrapper.d.ts +5 -1
- package/dist/src/Contacts/AddModal/ContactForm/TextFieldCustomLabelSelect.d.ts +4 -1
- package/dist/src/Contacts/AddModal/ContactForm/TextFieldPhone/index.d.ts +5 -1
- package/dist/src/Contacts/AddModal/ContactForm/helpers.d.ts +9 -2
- package/dist/src/Contacts/AddModal/ContactForm/index.d.ts +2 -1
- package/dist/src/Contacts/AddModal/types.d.ts +1 -0
- package/package.json +2 -2
- package/src/Contacts/AddModal/ContactForm/FieldInput.jsx +4 -0
- package/src/Contacts/AddModal/ContactForm/FieldInputAccordion.jsx +2 -0
- package/src/Contacts/AddModal/ContactForm/FieldInputArray.jsx +7 -2
- package/src/Contacts/AddModal/ContactForm/FieldInputLayout.jsx +8 -3
- package/src/Contacts/AddModal/ContactForm/FieldInputWrapper.jsx +8 -1
- package/src/Contacts/AddModal/ContactForm/TextFieldCustomLabelSelect.jsx +5 -0
- package/src/Contacts/AddModal/ContactForm/TextFieldPhone/index.jsx +22 -2
- package/src/Contacts/AddModal/ContactForm/fieldsConfig.jsx +0 -5
- package/src/Contacts/AddModal/ContactForm/helpers.js +14 -0
- package/src/Contacts/AddModal/ContactForm/index.jsx +2 -0
- package/src/Contacts/AddModal/types.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# [5.2.0](https://github.com/cozy/cozy-libs/compare/cozy-ui-plus@5.1.1...cozy-ui-plus@5.2.0) (2026-03-09)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **cozy-ui-plus:** Remove useless name on label field in ContactForm ([6769cf4](https://github.com/cozy/cozy-libs/commit/6769cf451d4388ea4db07ef34dce5ee9e4168253))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **cozy-ui-plus:** Add disable on ContactForm field ([56a0000](https://github.com/cozy/cozy-libs/commit/56a0000f0b457aa12c5d3725e67197c61e774e7b))
|
|
15
|
+
- **cozy-ui-plus:** Spread Contact in ContactForm ([e0f5279](https://github.com/cozy/cozy-libs/commit/e0f52797e922daffbd1264af454d093b75f6baf0))
|
|
16
|
+
|
|
6
17
|
## [5.1.1](https://github.com/cozy/cozy-libs/compare/cozy-ui-plus@5.1.0...cozy-ui-plus@5.1.1) (2026-03-05)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package cozy-ui-plus
|
|
@@ -53,6 +53,7 @@ var FieldInput = function FieldInput(_ref) {
|
|
|
53
53
|
subFields = _ref$attributes.subFields,
|
|
54
54
|
restAttributes = (0, _objectWithoutProperties2.default)(_ref$attributes, _excluded),
|
|
55
55
|
contacts = _ref.contacts,
|
|
56
|
+
contact = _ref.contact,
|
|
56
57
|
error = _ref.error,
|
|
57
58
|
helperText = _ref.helperText,
|
|
58
59
|
label = _ref.label,
|
|
@@ -109,6 +110,7 @@ var FieldInput = function FieldInput(_ref) {
|
|
|
109
110
|
id: id,
|
|
110
111
|
attributes: restAttributes,
|
|
111
112
|
name: name,
|
|
113
|
+
contact: contact,
|
|
112
114
|
component: _FieldInputWrapper.default,
|
|
113
115
|
onFocus: onFocus,
|
|
114
116
|
onClick: handleClick
|
|
@@ -133,6 +135,7 @@ var FieldInput = function FieldInput(_ref) {
|
|
|
133
135
|
attributes: labelProps,
|
|
134
136
|
name: "".concat(name, "Label"),
|
|
135
137
|
label: t('Contacts.AddModal.ContactForm.fields.label'),
|
|
138
|
+
contact: contact,
|
|
136
139
|
component: _FieldInputWrapper.default,
|
|
137
140
|
onFocus: onFocus
|
|
138
141
|
}))));
|
|
@@ -149,6 +152,7 @@ FieldInput.propTypes = {
|
|
|
149
152
|
contacts: _propTypes.default.shape({
|
|
150
153
|
data: _propTypes.default.arrayOf(_propTypes.default.object)
|
|
151
154
|
}),
|
|
155
|
+
contact: _propTypes.default.object,
|
|
152
156
|
// Destructuring props
|
|
153
157
|
id: _propTypes.default.string,
|
|
154
158
|
label: _propTypes.default.string
|
|
@@ -41,6 +41,7 @@ var FieldInputAccordion = function FieldInputAccordion(_ref) {
|
|
|
41
41
|
subFields = _ref$attributes.subFields,
|
|
42
42
|
restAttributes = (0, _objectWithoutProperties2.default)(_ref$attributes, _excluded),
|
|
43
43
|
contacts = _ref.contacts,
|
|
44
|
+
contact = _ref.contact,
|
|
44
45
|
error = _ref.error,
|
|
45
46
|
helperText = _ref.helperText;
|
|
46
47
|
(0, _twakeI18n.useExtendI18n)(_locales.locales);
|
|
@@ -58,6 +59,7 @@ var FieldInputAccordion = function FieldInputAccordion(_ref) {
|
|
|
58
59
|
}, /*#__PURE__*/_react.default.createElement(_FieldInput.default, {
|
|
59
60
|
attributes: restAttributes,
|
|
60
61
|
contacts: contacts,
|
|
62
|
+
contact: contact,
|
|
61
63
|
error: error,
|
|
62
64
|
helperText: helperText,
|
|
63
65
|
name: name,
|
|
@@ -43,6 +43,7 @@ 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
|
+
contact = _ref.contact,
|
|
46
47
|
formProps = _ref.formProps;
|
|
47
48
|
(0, _twakeI18n.useExtendI18n)(_locales.locales);
|
|
48
49
|
|
|
@@ -50,16 +51,20 @@ var FieldInputArray = function FieldInputArray(_ref) {
|
|
|
50
51
|
t = _useI18n.t;
|
|
51
52
|
|
|
52
53
|
var errors = formProps.errors;
|
|
54
|
+
var disabled = restAttributes.disabled,
|
|
55
|
+
isDisabled = restAttributes.isDisabled;
|
|
53
56
|
return /*#__PURE__*/_react.default.createElement(_reactFinalFormArrays.FieldArray, {
|
|
54
57
|
name: name
|
|
55
58
|
}, function (_ref2) {
|
|
56
59
|
var fields = _ref2.fields;
|
|
57
60
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, fields.map(function (nameWithIndex, index) {
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
var key = ((_fields$value$index = fields.value[index]) === null || _fields$value$index === void 0 ? void 0 : _fields$value$index.fieldId) || nameWithIndex;
|
|
61
|
-
var showRemove = (_fields$value$index2 = fields.value[index]) === null || _fields$value$index2 === void 0 ? void 0 : _fields$value$index2[name];
|
|
61
|
+
var field = fields.value[index];
|
|
62
|
+
var key = (field === null || field === void 0 ? void 0 : field.fieldId) || nameWithIndex;
|
|
62
63
|
var inputName = "".concat(nameWithIndex, ".").concat(name);
|
|
64
|
+
|
|
65
|
+
var _disabled = disabled || (isDisabled === null || isDisabled === void 0 ? void 0 : isDisabled(inputName, contact));
|
|
66
|
+
|
|
67
|
+
var showRemove = (field === null || field === void 0 ? void 0 : field[name]) && !_disabled;
|
|
63
68
|
var isError = (0, _helpers.makeIsRequiredError)(restAttributes.required, formProps);
|
|
64
69
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
65
70
|
key: key,
|
|
@@ -69,6 +74,7 @@ var FieldInputArray = function FieldInputArray(_ref) {
|
|
|
69
74
|
}, /*#__PURE__*/_react.default.createElement(_FieldInput.default, {
|
|
70
75
|
attributes: restAttributes,
|
|
71
76
|
contacts: contacts,
|
|
77
|
+
contact: contact,
|
|
72
78
|
error: isError,
|
|
73
79
|
helperText: isError ? errors[inputName] : null,
|
|
74
80
|
name: inputName,
|
|
@@ -29,17 +29,12 @@ var _helpers = require("./helpers");
|
|
|
29
29
|
|
|
30
30
|
var _locales = require("./locales");
|
|
31
31
|
|
|
32
|
-
var _excluded = ["
|
|
33
|
-
_excluded2 = ["name", "label"];
|
|
32
|
+
var _excluded = ["name", "label", "layout", "icon", "isSecondary"];
|
|
34
33
|
|
|
35
34
|
var FieldInputLayout = function FieldInputLayout(_ref) {
|
|
36
|
-
var
|
|
37
|
-
layout = _ref$attributes.layout,
|
|
38
|
-
icon = _ref$attributes.icon,
|
|
39
|
-
isSecondary = _ref$attributes.isSecondary,
|
|
40
|
-
validate = _ref$attributes.validate,
|
|
41
|
-
attributes = (0, _objectWithoutProperties2.default)(_ref$attributes, _excluded),
|
|
35
|
+
var attributes = _ref.attributes,
|
|
42
36
|
contacts = _ref.contacts,
|
|
37
|
+
contact = _ref.contact,
|
|
43
38
|
showSecondaryFields = _ref.showSecondaryFields,
|
|
44
39
|
formProps = _ref.formProps;
|
|
45
40
|
(0, _twakeI18n.useExtendI18n)(_locales.locales);
|
|
@@ -50,7 +45,10 @@ var FieldInputLayout = function FieldInputLayout(_ref) {
|
|
|
50
45
|
var errors = formProps.errors;
|
|
51
46
|
var name = attributes.name,
|
|
52
47
|
label = attributes.label,
|
|
53
|
-
|
|
48
|
+
layout = attributes.layout,
|
|
49
|
+
icon = attributes.icon,
|
|
50
|
+
isSecondary = attributes.isSecondary,
|
|
51
|
+
restAttributes = (0, _objectWithoutProperties2.default)(attributes, _excluded);
|
|
54
52
|
var isError = (0, _helpers.makeIsRequiredError)(restAttributes.required, formProps);
|
|
55
53
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
56
54
|
className: (0, _classnames.default)('u-mt-1', {
|
|
@@ -69,15 +67,18 @@ var FieldInputLayout = function FieldInputLayout(_ref) {
|
|
|
69
67
|
}, layout === 'array' ? /*#__PURE__*/_react.default.createElement(_FieldInputArray.default, {
|
|
70
68
|
attributes: attributes,
|
|
71
69
|
contacts: contacts,
|
|
70
|
+
contact: contact,
|
|
72
71
|
formProps: formProps
|
|
73
72
|
}) : layout === 'accordion' ? /*#__PURE__*/_react.default.createElement(_FieldInputAccordion.default, {
|
|
74
73
|
attributes: attributes,
|
|
75
74
|
contacts: contacts,
|
|
75
|
+
contact: contact,
|
|
76
76
|
error: isError,
|
|
77
77
|
helperText: isError ? errors[name] : null
|
|
78
78
|
}) : /*#__PURE__*/_react.default.createElement(_FieldInput.default, {
|
|
79
79
|
attributes: restAttributes,
|
|
80
80
|
contacts: contacts,
|
|
81
|
+
contact: contact,
|
|
81
82
|
error: isError,
|
|
82
83
|
helperText: isError ? errors[name] : null,
|
|
83
84
|
name: name,
|
|
@@ -91,6 +92,7 @@ FieldInputLayout.propTypes = {
|
|
|
91
92
|
contacts: _propTypes.default.shape({
|
|
92
93
|
data: _propTypes.default.arrayOf(_propTypes.default.object)
|
|
93
94
|
}),
|
|
95
|
+
contact: _propTypes.default.object,
|
|
94
96
|
formProps: _propTypes.default.object
|
|
95
97
|
};
|
|
96
98
|
var _default = FieldInputLayout;
|
|
@@ -21,7 +21,7 @@ var _TextFieldSelect = _interopRequireDefault(require("./TextFieldSelect"));
|
|
|
21
21
|
|
|
22
22
|
var _types = require("../types");
|
|
23
23
|
|
|
24
|
-
var _excluded = ["component"],
|
|
24
|
+
var _excluded = ["component", "layout", "icon", "isSecondary", "validate"],
|
|
25
25
|
_excluded2 = ["input", "attributes", "variant", "fullWidth"];
|
|
26
26
|
|
|
27
27
|
// component used to flatten props to ensure compatibility
|
|
@@ -30,6 +30,10 @@ var FieldInputWrapper = function FieldInputWrapper(_ref) {
|
|
|
30
30
|
var input = _ref.input,
|
|
31
31
|
_ref$attributes = _ref.attributes,
|
|
32
32
|
component = _ref$attributes.component,
|
|
33
|
+
layout = _ref$attributes.layout,
|
|
34
|
+
icon = _ref$attributes.icon,
|
|
35
|
+
isSecondary = _ref$attributes.isSecondary,
|
|
36
|
+
validate = _ref$attributes.validate,
|
|
33
37
|
restAttributes = (0, _objectWithoutProperties2.default)(_ref$attributes, _excluded),
|
|
34
38
|
variant = _ref.variant,
|
|
35
39
|
fullWidth = _ref.fullWidth,
|
|
@@ -27,7 +27,7 @@ var _CustomLabelDialog = _interopRequireDefault(require("../CustomLabelDialog"))
|
|
|
27
27
|
|
|
28
28
|
var _types = require("../types");
|
|
29
29
|
|
|
30
|
-
var _excluded = ["name", "value", "options", "customLabelOptions", "onChange"];
|
|
30
|
+
var _excluded = ["name", "value", "options", "disabled", "isDisabled", "contact", "customLabelOptions", "onChange"];
|
|
31
31
|
|
|
32
32
|
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); }
|
|
33
33
|
|
|
@@ -37,6 +37,9 @@ var TextFieldCustomLabelSelect = function TextFieldCustomLabelSelect(_ref) {
|
|
|
37
37
|
var name = _ref.name,
|
|
38
38
|
value = _ref.value,
|
|
39
39
|
options = _ref.options,
|
|
40
|
+
disabled = _ref.disabled,
|
|
41
|
+
isDisabled = _ref.isDisabled,
|
|
42
|
+
contact = _ref.contact,
|
|
40
43
|
customLabelOptions = _ref.customLabelOptions,
|
|
41
44
|
_onChange = _ref.onChange,
|
|
42
45
|
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
@@ -77,10 +80,13 @@ var TextFieldCustomLabelSelect = function TextFieldCustomLabelSelect(_ref) {
|
|
|
77
80
|
|
|
78
81
|
var _options = options.concat(customOption);
|
|
79
82
|
|
|
83
|
+
var _disabled = disabled || (isDisabled === null || isDisabled === void 0 ? void 0 : isDisabled(name, contact));
|
|
84
|
+
|
|
80
85
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TextFieldSelect.default, (0, _extends2.default)({}, props, {
|
|
81
86
|
name: name,
|
|
82
87
|
value: value,
|
|
83
88
|
options: _options,
|
|
89
|
+
disabled: _disabled,
|
|
84
90
|
onChange: function onChange(ev) {
|
|
85
91
|
if (ev.target.value === 'skip') {
|
|
86
92
|
return;
|
|
@@ -23,12 +23,18 @@ var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
|
|
|
23
23
|
|
|
24
24
|
var _FlagBottomSheet = _interopRequireDefault(require("./FlagBottomSheet"));
|
|
25
25
|
|
|
26
|
+
var _FlagImage = _interopRequireDefault(require("./FlagImage"));
|
|
27
|
+
|
|
26
28
|
var _FlagMenu = _interopRequireDefault(require("./FlagMenu"));
|
|
27
29
|
|
|
28
|
-
var _excluded = ["value", "onChange"];
|
|
30
|
+
var _excluded = ["name", "value", "disabled", "isDisabled", "contact", "onChange"];
|
|
29
31
|
|
|
30
32
|
var TextFieldPhone = function TextFieldPhone(_ref) {
|
|
31
|
-
var
|
|
33
|
+
var name = _ref.name,
|
|
34
|
+
value = _ref.value,
|
|
35
|
+
disabled = _ref.disabled,
|
|
36
|
+
isDisabled = _ref.isDisabled,
|
|
37
|
+
contact = _ref.contact,
|
|
32
38
|
_onChange = _ref.onChange,
|
|
33
39
|
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
34
40
|
|
|
@@ -50,13 +56,21 @@ var TextFieldPhone = function TextFieldPhone(_ref) {
|
|
|
50
56
|
setCountry = _usePhoneInput.setCountry;
|
|
51
57
|
|
|
52
58
|
var ResponsiveFlagMenu = isMobile ? _FlagBottomSheet.default : _FlagMenu.default;
|
|
59
|
+
|
|
60
|
+
var _disabled = disabled || (isDisabled === null || isDisabled === void 0 ? void 0 : isDisabled(name, contact));
|
|
61
|
+
|
|
53
62
|
return /*#__PURE__*/_react.default.createElement(_TextField.default, (0, _extends2.default)({
|
|
63
|
+
name: name,
|
|
54
64
|
value: inputValue,
|
|
55
65
|
inputRef: inputRef,
|
|
66
|
+
disabled: _disabled,
|
|
56
67
|
InputProps: {
|
|
57
68
|
startAdornment: /*#__PURE__*/_react.default.createElement(_InputAdornment.default, {
|
|
58
69
|
position: "start"
|
|
59
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
70
|
+
}, _disabled ? /*#__PURE__*/_react.default.createElement(_FlagImage.default, {
|
|
71
|
+
className: "u-ml-half",
|
|
72
|
+
iso2: country.iso2
|
|
73
|
+
}) : /*#__PURE__*/_react.default.createElement(ResponsiveFlagMenu, {
|
|
60
74
|
value: country.iso2,
|
|
61
75
|
setCountry: setCountry
|
|
62
76
|
}))
|
|
@@ -86,7 +86,6 @@ var fields = [{
|
|
|
86
86
|
layout: 'array',
|
|
87
87
|
component: _index.default,
|
|
88
88
|
label: {
|
|
89
|
-
name: 'phoneLabel',
|
|
90
89
|
select: true,
|
|
91
90
|
customLabelOptions: {
|
|
92
91
|
defaultType: '',
|
|
@@ -121,7 +120,6 @@ var fields = [{
|
|
|
121
120
|
type: 'email',
|
|
122
121
|
layout: 'array',
|
|
123
122
|
label: {
|
|
124
|
-
name: 'emailLabel',
|
|
125
123
|
select: true,
|
|
126
124
|
customLabelOptions: {
|
|
127
125
|
defaultType: '',
|
|
@@ -200,7 +198,6 @@ var fields = [{
|
|
|
200
198
|
type: 'text'
|
|
201
199
|
}],
|
|
202
200
|
label: {
|
|
203
|
-
name: 'addressLabel',
|
|
204
201
|
select: true,
|
|
205
202
|
customLabelOptions: {
|
|
206
203
|
defaultType: '',
|
|
@@ -228,7 +225,6 @@ var fields = [{
|
|
|
228
225
|
type: 'url',
|
|
229
226
|
isSecondary: true,
|
|
230
227
|
label: {
|
|
231
|
-
name: 'cozyLabel',
|
|
232
228
|
select: true,
|
|
233
229
|
customLabelOptions: {
|
|
234
230
|
defaultType: '',
|
|
@@ -273,7 +269,6 @@ var fields = [{
|
|
|
273
269
|
}))
|
|
274
270
|
},
|
|
275
271
|
label: {
|
|
276
|
-
name: 'relatedContactLabel',
|
|
277
272
|
select: true,
|
|
278
273
|
options: [{
|
|
279
274
|
value: '',
|
|
@@ -165,6 +165,14 @@ var hasExtendedAddress = function hasExtendedAddress(addressField) {
|
|
|
165
165
|
return extendedAddressKeys.includes(ext);
|
|
166
166
|
});
|
|
167
167
|
};
|
|
168
|
+
/**
|
|
169
|
+
* Items matching the given predicate function `shouldBeHead`
|
|
170
|
+
* are moved to the start of the array, preserving the order of the others.
|
|
171
|
+
*
|
|
172
|
+
* @param {Function} shouldBeHead - A predicate function that takes an item and returns true if it should be moved to the head of the array.
|
|
173
|
+
* @returns {Function} A function that takes an array of items and returns a new array with the matching item(s) moved to the front.
|
|
174
|
+
*/
|
|
175
|
+
|
|
168
176
|
|
|
169
177
|
exports.hasExtendedAddress = hasExtendedAddress;
|
|
170
178
|
|
|
@@ -175,6 +183,14 @@ var moveToHead = function moveToHead(shouldBeHead) {
|
|
|
175
183
|
}, []);
|
|
176
184
|
};
|
|
177
185
|
};
|
|
186
|
+
/**
|
|
187
|
+
* Moves items with the `primary` property set to true to the head of the array.
|
|
188
|
+
*
|
|
189
|
+
* @function
|
|
190
|
+
* @param {Array<Object>} items - The input array of items, each item optionally having a `primary` property.
|
|
191
|
+
* @returns {Array<Object>} The reordered array with 'primary' items at the front.
|
|
192
|
+
*/
|
|
193
|
+
|
|
178
194
|
|
|
179
195
|
exports.moveToHead = moveToHead;
|
|
180
196
|
var movePrimaryToHead = moveToHead(function (v) {
|
|
@@ -63,6 +63,7 @@ function getSubmitContactForm() {
|
|
|
63
63
|
*
|
|
64
64
|
* @param {object} params
|
|
65
65
|
* @param {{ data: Array<object> }} params.contacts
|
|
66
|
+
* @param {object} params.contact
|
|
66
67
|
* @param {import('cozy-client/types/types').IOCozyContact} params.contact
|
|
67
68
|
* @param {Object} params.customFieldsProps
|
|
68
69
|
* @param {func} params.onSubmit
|
|
@@ -135,6 +136,7 @@ var ContactForm = function ContactForm(_ref) {
|
|
|
135
136
|
key: index,
|
|
136
137
|
attributes: attributes,
|
|
137
138
|
contacts: contacts,
|
|
139
|
+
contact: contact,
|
|
138
140
|
showSecondaryFields: showSecondaryFields,
|
|
139
141
|
formProps: {
|
|
140
142
|
valid: valid,
|
|
@@ -100,6 +100,7 @@ var FieldInputWrapperPropTypes = {
|
|
|
100
100
|
label: _propTypes.default.string,
|
|
101
101
|
required: _propTypes.default.bool,
|
|
102
102
|
variant: _propTypes.default.string,
|
|
103
|
+
contact: _propTypes.default.object,
|
|
103
104
|
customLabelOptions: _propTypes.default.shape({
|
|
104
105
|
hide: _propTypes.default.bool,
|
|
105
106
|
defaultType: _propTypes.default.string.isRequired,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default FieldInput;
|
|
2
|
-
declare function FieldInput({ name, labelProps, className, attributes: { subFields, ...restAttributes }, contacts, error, helperText, label, isInvisible }: {
|
|
2
|
+
declare function FieldInput({ name, labelProps, className, attributes: { subFields, ...restAttributes }, contacts, contact, error, helperText, label, isInvisible }: {
|
|
3
3
|
name: any;
|
|
4
4
|
labelProps: any;
|
|
5
5
|
className: any;
|
|
@@ -8,6 +8,7 @@ declare function FieldInput({ name, labelProps, className, attributes: { subFiel
|
|
|
8
8
|
subFields: any;
|
|
9
9
|
};
|
|
10
10
|
contacts: any;
|
|
11
|
+
contact: any;
|
|
11
12
|
error: any;
|
|
12
13
|
helperText: any;
|
|
13
14
|
label: any;
|
|
@@ -23,6 +24,7 @@ declare namespace FieldInput {
|
|
|
23
24
|
export let contacts: PropTypes.Requireable<PropTypes.InferProps<{
|
|
24
25
|
data: PropTypes.Requireable<object[]>;
|
|
25
26
|
}>>;
|
|
27
|
+
export let contact: PropTypes.Requireable<object>;
|
|
26
28
|
export let id: PropTypes.Requireable<string>;
|
|
27
29
|
export let label: PropTypes.Requireable<string>;
|
|
28
30
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default FieldInputAccordion;
|
|
2
|
-
declare function FieldInputAccordion({ attributes: { name, label, subFields, ...restAttributes }, contacts, error, helperText }: {
|
|
2
|
+
declare function FieldInputAccordion({ attributes: { name, label, subFields, ...restAttributes }, contacts, contact, error, helperText }: {
|
|
3
3
|
attributes: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
name: any;
|
|
@@ -7,6 +7,7 @@ declare function FieldInputAccordion({ attributes: { name, label, subFields, ...
|
|
|
7
7
|
subFields: any;
|
|
8
8
|
};
|
|
9
9
|
contacts: any;
|
|
10
|
+
contact: any;
|
|
10
11
|
error: any;
|
|
11
12
|
helperText: any;
|
|
12
13
|
}): JSX.Element;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export default FieldInputArray;
|
|
2
|
-
declare function FieldInputArray({ attributes: { name, label, ...restAttributes }, contacts, formProps }: {
|
|
2
|
+
declare function FieldInputArray({ attributes: { name, label, ...restAttributes }, contacts, contact, formProps }: {
|
|
3
3
|
attributes: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
name: any;
|
|
6
6
|
label: any;
|
|
7
7
|
};
|
|
8
8
|
contacts: any;
|
|
9
|
+
contact: any;
|
|
9
10
|
formProps: any;
|
|
10
11
|
}): JSX.Element;
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
export default FieldInputLayout;
|
|
2
|
-
declare function FieldInputLayout({ attributes
|
|
3
|
-
attributes:
|
|
4
|
-
[x: string]: any;
|
|
5
|
-
layout: any;
|
|
6
|
-
icon: any;
|
|
7
|
-
isSecondary: any;
|
|
8
|
-
validate: any;
|
|
9
|
-
};
|
|
2
|
+
declare function FieldInputLayout({ attributes, contacts, contact, showSecondaryFields, formProps }: {
|
|
3
|
+
attributes: any;
|
|
10
4
|
contacts: any;
|
|
5
|
+
contact: any;
|
|
11
6
|
showSecondaryFields: any;
|
|
12
7
|
formProps: any;
|
|
13
8
|
}): JSX.Element;
|
|
@@ -17,6 +12,7 @@ declare namespace FieldInputLayout {
|
|
|
17
12
|
let contacts: PropTypes.Requireable<PropTypes.InferProps<{
|
|
18
13
|
data: PropTypes.Requireable<object[]>;
|
|
19
14
|
}>>;
|
|
15
|
+
let contact: PropTypes.Requireable<object>;
|
|
20
16
|
let formProps: PropTypes.Requireable<object>;
|
|
21
17
|
}
|
|
22
18
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export default FieldInputWrapper;
|
|
2
|
-
declare function FieldInputWrapper({ input, attributes: { component, ...restAttributes }, variant, fullWidth, ...props }: {
|
|
2
|
+
declare function FieldInputWrapper({ input, attributes: { component, layout, icon, isSecondary, validate, ...restAttributes }, variant, fullWidth, ...props }: {
|
|
3
3
|
[x: string]: any;
|
|
4
4
|
input: any;
|
|
5
5
|
attributes: {
|
|
6
6
|
[x: string]: any;
|
|
7
7
|
component: any;
|
|
8
|
+
layout: any;
|
|
9
|
+
icon: any;
|
|
10
|
+
isSecondary: any;
|
|
11
|
+
validate: any;
|
|
8
12
|
};
|
|
9
13
|
variant: any;
|
|
10
14
|
fullWidth: any;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export default TextFieldCustomLabelSelect;
|
|
2
|
-
declare function TextFieldCustomLabelSelect({ name, value, options, customLabelOptions, onChange, ...props }: {
|
|
2
|
+
declare function TextFieldCustomLabelSelect({ name, value, options, disabled, isDisabled, contact, customLabelOptions, onChange, ...props }: {
|
|
3
3
|
[x: string]: any;
|
|
4
4
|
name: any;
|
|
5
5
|
value: any;
|
|
6
6
|
options: any;
|
|
7
|
+
disabled: any;
|
|
8
|
+
isDisabled: any;
|
|
9
|
+
contact: any;
|
|
7
10
|
customLabelOptions: any;
|
|
8
11
|
onChange: any;
|
|
9
12
|
}): JSX.Element;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export default TextFieldPhone;
|
|
2
|
-
declare function TextFieldPhone({ value, onChange, ...props }: {
|
|
2
|
+
declare function TextFieldPhone({ name, value, disabled, isDisabled, contact, onChange, ...props }: {
|
|
3
3
|
[x: string]: any;
|
|
4
|
+
name: any;
|
|
4
5
|
value: any;
|
|
6
|
+
disabled: any;
|
|
7
|
+
isDisabled: any;
|
|
8
|
+
contact: any;
|
|
5
9
|
onChange: any;
|
|
6
10
|
}): JSX.Element;
|
|
@@ -8,8 +8,15 @@ export function makeTypeAndLabel(itemLabel?: string): {
|
|
|
8
8
|
label?: string;
|
|
9
9
|
};
|
|
10
10
|
export function hasExtendedAddress(addressField: object): boolean;
|
|
11
|
-
export function moveToHead(shouldBeHead:
|
|
12
|
-
|
|
11
|
+
export function moveToHead(shouldBeHead: Function): Function;
|
|
12
|
+
/**
|
|
13
|
+
* Moves items with the `primary` property set to true to the head of the array.
|
|
14
|
+
*
|
|
15
|
+
* @function
|
|
16
|
+
* @param {Array<Object>} items - The input array of items, each item optionally having a `primary` property.
|
|
17
|
+
* @returns {Array<Object>} The reordered array with 'primary' items at the front.
|
|
18
|
+
*/
|
|
19
|
+
export const movePrimaryToHead: Function;
|
|
13
20
|
export function createAddress({ address, oldContact, t }: {
|
|
14
21
|
address: any;
|
|
15
22
|
oldContact: any;
|
|
@@ -83,6 +83,7 @@ export namespace FieldInputWrapperPropTypes {
|
|
|
83
83
|
export let label: PropTypes.Requireable<string>;
|
|
84
84
|
export let required: PropTypes.Requireable<boolean>;
|
|
85
85
|
export let variant: PropTypes.Requireable<string>;
|
|
86
|
+
export let contact: PropTypes.Requireable<object>;
|
|
86
87
|
export let customLabelOptions: PropTypes.Requireable<PropTypes.InferProps<{
|
|
87
88
|
hide: PropTypes.Requireable<boolean>;
|
|
88
89
|
defaultType: PropTypes.Validator<string>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cozy-ui-plus",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"description": "Cozy-ui-plus is an extension of cozy-ui and provides components based on cozy-client",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"react-dom": "^16 || ^17 || ^18",
|
|
74
74
|
"twake-i18n": ">=0.3.0"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "44e6a2a8eed748de2328226d11b2d0b9db102f12"
|
|
77
77
|
}
|
|
@@ -19,6 +19,7 @@ const FieldInput = ({
|
|
|
19
19
|
className,
|
|
20
20
|
attributes: { subFields, ...restAttributes },
|
|
21
21
|
contacts,
|
|
22
|
+
contact,
|
|
22
23
|
error,
|
|
23
24
|
helperText,
|
|
24
25
|
label,
|
|
@@ -62,6 +63,7 @@ const FieldInput = ({
|
|
|
62
63
|
id={id}
|
|
63
64
|
attributes={restAttributes}
|
|
64
65
|
name={name}
|
|
66
|
+
contact={contact}
|
|
65
67
|
component={FieldInputWrapper}
|
|
66
68
|
onFocus={onFocus}
|
|
67
69
|
onClick={handleClick}
|
|
@@ -87,6 +89,7 @@ const FieldInput = ({
|
|
|
87
89
|
attributes={labelProps}
|
|
88
90
|
name={`${name}Label`}
|
|
89
91
|
label={t('Contacts.AddModal.ContactForm.fields.label')}
|
|
92
|
+
contact={contact}
|
|
90
93
|
component={FieldInputWrapper}
|
|
91
94
|
onFocus={onFocus}
|
|
92
95
|
/>
|
|
@@ -107,6 +110,7 @@ FieldInput.propTypes = {
|
|
|
107
110
|
contacts: PropTypes.shape({
|
|
108
111
|
data: PropTypes.arrayOf(PropTypes.object)
|
|
109
112
|
}),
|
|
113
|
+
contact: PropTypes.object,
|
|
110
114
|
// Destructuring props
|
|
111
115
|
id: PropTypes.string,
|
|
112
116
|
label: PropTypes.string
|
|
@@ -12,6 +12,7 @@ import { locales } from './locales'
|
|
|
12
12
|
const FieldInputAccordion = ({
|
|
13
13
|
attributes: { name, label, subFields, ...restAttributes },
|
|
14
14
|
contacts,
|
|
15
|
+
contact,
|
|
15
16
|
error,
|
|
16
17
|
helperText
|
|
17
18
|
}) => {
|
|
@@ -25,6 +26,7 @@ const FieldInputAccordion = ({
|
|
|
25
26
|
<FieldInput
|
|
26
27
|
attributes={restAttributes}
|
|
27
28
|
contacts={contacts}
|
|
29
|
+
contact={contact}
|
|
28
30
|
error={error}
|
|
29
31
|
helperText={helperText}
|
|
30
32
|
name={name}
|
|
@@ -17,11 +17,13 @@ import { locales } from './locales'
|
|
|
17
17
|
const FieldInputArray = ({
|
|
18
18
|
attributes: { name, label, ...restAttributes },
|
|
19
19
|
contacts,
|
|
20
|
+
contact,
|
|
20
21
|
formProps
|
|
21
22
|
}) => {
|
|
22
23
|
useExtendI18n(locales)
|
|
23
24
|
const { t } = useI18n()
|
|
24
25
|
const { errors } = formProps
|
|
26
|
+
const { disabled, isDisabled } = restAttributes
|
|
25
27
|
|
|
26
28
|
return (
|
|
27
29
|
<FieldArray name={name}>
|
|
@@ -29,9 +31,11 @@ const FieldInputArray = ({
|
|
|
29
31
|
return (
|
|
30
32
|
<>
|
|
31
33
|
{fields.map((nameWithIndex, index) => {
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
+
const field = fields.value[index]
|
|
35
|
+
const key = field?.fieldId || nameWithIndex
|
|
34
36
|
const inputName = `${nameWithIndex}.${name}`
|
|
37
|
+
const _disabled = disabled || isDisabled?.(inputName, contact)
|
|
38
|
+
const showRemove = field?.[name] && !_disabled
|
|
35
39
|
const isError = makeIsRequiredError(
|
|
36
40
|
restAttributes.required,
|
|
37
41
|
formProps
|
|
@@ -47,6 +51,7 @@ const FieldInputArray = ({
|
|
|
47
51
|
<FieldInput
|
|
48
52
|
attributes={restAttributes}
|
|
49
53
|
contacts={contacts}
|
|
54
|
+
contact={contact}
|
|
50
55
|
error={isError}
|
|
51
56
|
helperText={isError ? errors[inputName] : null}
|
|
52
57
|
name={inputName}
|
|
@@ -12,16 +12,17 @@ import { makeIsRequiredError } from './helpers'
|
|
|
12
12
|
import { locales } from './locales'
|
|
13
13
|
|
|
14
14
|
const FieldInputLayout = ({
|
|
15
|
-
|
|
16
|
-
attributes: { layout, icon, isSecondary, validate, ...attributes }, // ⚠️ `layout` `icon` `isSecondary` `validate` here are removed from attributes to avoid DOM propagration
|
|
15
|
+
attributes,
|
|
17
16
|
contacts,
|
|
17
|
+
contact,
|
|
18
18
|
showSecondaryFields,
|
|
19
19
|
formProps
|
|
20
20
|
}) => {
|
|
21
21
|
useExtendI18n(locales)
|
|
22
22
|
const { t } = useI18n()
|
|
23
23
|
const { errors } = formProps
|
|
24
|
-
const { name, label, ...restAttributes } =
|
|
24
|
+
const { name, label, layout, icon, isSecondary, ...restAttributes } =
|
|
25
|
+
attributes
|
|
25
26
|
|
|
26
27
|
const isError = makeIsRequiredError(restAttributes.required, formProps)
|
|
27
28
|
|
|
@@ -42,12 +43,14 @@ const FieldInputLayout = ({
|
|
|
42
43
|
<FieldInputArray
|
|
43
44
|
attributes={attributes}
|
|
44
45
|
contacts={contacts}
|
|
46
|
+
contact={contact}
|
|
45
47
|
formProps={formProps}
|
|
46
48
|
/>
|
|
47
49
|
) : layout === 'accordion' ? (
|
|
48
50
|
<FieldInputAccordion
|
|
49
51
|
attributes={attributes}
|
|
50
52
|
contacts={contacts}
|
|
53
|
+
contact={contact}
|
|
51
54
|
error={isError}
|
|
52
55
|
helperText={isError ? errors[name] : null}
|
|
53
56
|
/>
|
|
@@ -55,6 +58,7 @@ const FieldInputLayout = ({
|
|
|
55
58
|
<FieldInput
|
|
56
59
|
attributes={restAttributes}
|
|
57
60
|
contacts={contacts}
|
|
61
|
+
contact={contact}
|
|
58
62
|
error={isError}
|
|
59
63
|
helperText={isError ? errors[name] : null}
|
|
60
64
|
name={name}
|
|
@@ -72,6 +76,7 @@ FieldInputLayout.propTypes = {
|
|
|
72
76
|
contacts: PropTypes.shape({
|
|
73
77
|
data: PropTypes.arrayOf(PropTypes.object)
|
|
74
78
|
}),
|
|
79
|
+
contact: PropTypes.object,
|
|
75
80
|
formProps: PropTypes.object
|
|
76
81
|
}
|
|
77
82
|
|
|
@@ -10,7 +10,14 @@ import { FieldInputWrapperPropTypes } from '../types'
|
|
|
10
10
|
// between Field from react-final-form and TextField from Mui
|
|
11
11
|
const FieldInputWrapper = ({
|
|
12
12
|
input,
|
|
13
|
-
attributes: {
|
|
13
|
+
attributes: {
|
|
14
|
+
component,
|
|
15
|
+
layout, // eslint-disable-line no-unused-vars
|
|
16
|
+
icon, // eslint-disable-line no-unused-vars
|
|
17
|
+
isSecondary, // eslint-disable-line no-unused-vars
|
|
18
|
+
validate, // eslint-disable-line no-unused-vars
|
|
19
|
+
...restAttributes
|
|
20
|
+
}, // ⚠️ `layout` `icon` `isSecondary` `validate` are removed from attributes to avoid DOM propagration, only used for business rules
|
|
14
21
|
variant,
|
|
15
22
|
fullWidth,
|
|
16
23
|
...props
|
|
@@ -11,6 +11,9 @@ const TextFieldCustomLabelSelect = ({
|
|
|
11
11
|
name,
|
|
12
12
|
value,
|
|
13
13
|
options,
|
|
14
|
+
disabled,
|
|
15
|
+
isDisabled,
|
|
16
|
+
contact,
|
|
14
17
|
customLabelOptions,
|
|
15
18
|
onChange,
|
|
16
19
|
...props
|
|
@@ -44,6 +47,7 @@ const TextFieldCustomLabelSelect = ({
|
|
|
44
47
|
}
|
|
45
48
|
]
|
|
46
49
|
const _options = options.concat(customOption)
|
|
50
|
+
const _disabled = disabled || isDisabled?.(name, contact)
|
|
47
51
|
|
|
48
52
|
return (
|
|
49
53
|
<>
|
|
@@ -52,6 +56,7 @@ const TextFieldCustomLabelSelect = ({
|
|
|
52
56
|
name={name}
|
|
53
57
|
value={value}
|
|
54
58
|
options={_options}
|
|
59
|
+
disabled={_disabled}
|
|
55
60
|
onChange={ev => {
|
|
56
61
|
if (ev.target.value === 'skip') {
|
|
57
62
|
return
|
|
@@ -6,10 +6,20 @@ import TextField from 'cozy-ui/transpiled/react/TextField'
|
|
|
6
6
|
import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints'
|
|
7
7
|
|
|
8
8
|
import FlagBottomSheet from './FlagBottomSheet'
|
|
9
|
+
import FlagImage from './FlagImage'
|
|
9
10
|
import FlagMenu from './FlagMenu'
|
|
10
11
|
|
|
11
|
-
const TextFieldPhone = ({
|
|
12
|
+
const TextFieldPhone = ({
|
|
13
|
+
name,
|
|
14
|
+
value,
|
|
15
|
+
disabled,
|
|
16
|
+
isDisabled,
|
|
17
|
+
contact,
|
|
18
|
+
onChange,
|
|
19
|
+
...props
|
|
20
|
+
}) => {
|
|
12
21
|
const { isMobile } = useBreakpoints()
|
|
22
|
+
|
|
13
23
|
const { inputValue, handlePhoneValueChange, inputRef, country, setCountry } =
|
|
14
24
|
usePhoneInput({
|
|
15
25
|
defaultCountry: 'fr',
|
|
@@ -21,15 +31,25 @@ const TextFieldPhone = ({ value, onChange, ...props }) => {
|
|
|
21
31
|
})
|
|
22
32
|
|
|
23
33
|
const ResponsiveFlagMenu = isMobile ? FlagBottomSheet : FlagMenu
|
|
34
|
+
const _disabled = disabled || isDisabled?.(name, contact)
|
|
24
35
|
|
|
25
36
|
return (
|
|
26
37
|
<TextField
|
|
38
|
+
name={name}
|
|
27
39
|
value={inputValue}
|
|
28
40
|
inputRef={inputRef}
|
|
41
|
+
disabled={_disabled}
|
|
29
42
|
InputProps={{
|
|
30
43
|
startAdornment: (
|
|
31
44
|
<InputAdornment position="start">
|
|
32
|
-
|
|
45
|
+
{_disabled ? (
|
|
46
|
+
<FlagImage className="u-ml-half" iso2={country.iso2} />
|
|
47
|
+
) : (
|
|
48
|
+
<ResponsiveFlagMenu
|
|
49
|
+
value={country.iso2}
|
|
50
|
+
setCountry={setCountry}
|
|
51
|
+
/>
|
|
52
|
+
)}
|
|
33
53
|
</InputAdornment>
|
|
34
54
|
)
|
|
35
55
|
}}
|
|
@@ -78,7 +78,6 @@ export const fields = [
|
|
|
78
78
|
layout: 'array',
|
|
79
79
|
component: TextFieldPhone,
|
|
80
80
|
label: {
|
|
81
|
-
name: 'phoneLabel',
|
|
82
81
|
select: true,
|
|
83
82
|
customLabelOptions: {
|
|
84
83
|
defaultType: '',
|
|
@@ -122,7 +121,6 @@ export const fields = [
|
|
|
122
121
|
type: 'email',
|
|
123
122
|
layout: 'array',
|
|
124
123
|
label: {
|
|
125
|
-
name: 'emailLabel',
|
|
126
124
|
select: true,
|
|
127
125
|
customLabelOptions: {
|
|
128
126
|
defaultType: '',
|
|
@@ -220,7 +218,6 @@ export const fields = [
|
|
|
220
218
|
}
|
|
221
219
|
],
|
|
222
220
|
label: {
|
|
223
|
-
name: 'addressLabel',
|
|
224
221
|
select: true,
|
|
225
222
|
customLabelOptions: {
|
|
226
223
|
defaultType: '',
|
|
@@ -254,7 +251,6 @@ export const fields = [
|
|
|
254
251
|
type: 'url',
|
|
255
252
|
isSecondary: true,
|
|
256
253
|
label: {
|
|
257
|
-
name: 'cozyLabel',
|
|
258
254
|
select: true,
|
|
259
255
|
customLabelOptions: {
|
|
260
256
|
defaultType: '',
|
|
@@ -303,7 +299,6 @@ export const fields = [
|
|
|
303
299
|
)
|
|
304
300
|
},
|
|
305
301
|
label: {
|
|
306
|
-
name: 'relatedContactLabel',
|
|
307
302
|
select: true,
|
|
308
303
|
options: [
|
|
309
304
|
{
|
|
@@ -134,9 +134,23 @@ export const hasExtendedAddress = addressField => {
|
|
|
134
134
|
)
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Items matching the given predicate function `shouldBeHead`
|
|
139
|
+
* are moved to the start of the array, preserving the order of the others.
|
|
140
|
+
*
|
|
141
|
+
* @param {Function} shouldBeHead - A predicate function that takes an item and returns true if it should be moved to the head of the array.
|
|
142
|
+
* @returns {Function} A function that takes an array of items and returns a new array with the matching item(s) moved to the front.
|
|
143
|
+
*/
|
|
137
144
|
export const moveToHead = shouldBeHead => items =>
|
|
138
145
|
items.reduce((arr, v) => (shouldBeHead(v) ? [v, ...arr] : [...arr, v]), [])
|
|
139
146
|
|
|
147
|
+
/**
|
|
148
|
+
* Moves items with the `primary` property set to true to the head of the array.
|
|
149
|
+
*
|
|
150
|
+
* @function
|
|
151
|
+
* @param {Array<Object>} items - The input array of items, each item optionally having a `primary` property.
|
|
152
|
+
* @returns {Array<Object>} The reordered array with 'primary' items at the front.
|
|
153
|
+
*/
|
|
140
154
|
export const movePrimaryToHead = moveToHead(v => v?.primary)
|
|
141
155
|
|
|
142
156
|
export const createAddress = ({ address, oldContact, t }) => {
|
|
@@ -37,6 +37,7 @@ export function getSubmitContactForm() {
|
|
|
37
37
|
*
|
|
38
38
|
* @param {object} params
|
|
39
39
|
* @param {{ data: Array<object> }} params.contacts
|
|
40
|
+
* @param {object} params.contact
|
|
40
41
|
* @param {import('cozy-client/types/types').IOCozyContact} params.contact
|
|
41
42
|
* @param {Object} params.customFieldsProps
|
|
42
43
|
* @param {func} params.onSubmit
|
|
@@ -94,6 +95,7 @@ const ContactForm = ({ contacts, contact, customFieldsProps, onSubmit }) => {
|
|
|
94
95
|
key={index}
|
|
95
96
|
attributes={attributes}
|
|
96
97
|
contacts={contacts}
|
|
98
|
+
contact={contact}
|
|
97
99
|
showSecondaryFields={showSecondaryFields}
|
|
98
100
|
formProps={{
|
|
99
101
|
valid,
|
|
@@ -93,6 +93,7 @@ export const FieldInputWrapperPropTypes = {
|
|
|
93
93
|
label: PropTypes.string,
|
|
94
94
|
required: PropTypes.bool,
|
|
95
95
|
variant: PropTypes.string,
|
|
96
|
+
contact: PropTypes.object,
|
|
96
97
|
customLabelOptions: PropTypes.shape({
|
|
97
98
|
hide: PropTypes.bool,
|
|
98
99
|
defaultType: PropTypes.string.isRequired,
|