cozy-sharing 32.1.2 → 32.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +27 -0
- package/AGENTS.md +7 -0
- package/CHANGELOG.md +18 -0
- package/dist/RefreshableSharings.spec.js +40 -0
- package/dist/assets/illustrations/illustration-shared-drives.svg +1 -0
- package/dist/components/EditLinkPermissionDialog.js +72 -0
- package/dist/components/EditLinkPermissionDialog.spec.js +48 -0
- package/dist/components/FederatedFolder/DumbFederatedFolderModal.js +65 -0
- package/dist/components/FederatedFolder/DumbFederatedFolderModal.spec.js +107 -0
- package/dist/components/FederatedFolder/FederatedFolderModal.js +41 -4
- package/dist/components/FederatedFolder/FederatedFolderModal.jsx.tmp.179197.1773939270471 +172 -0
- package/dist/components/FederatedFolder/FederatedFolderModal.spec.js +79 -8
- package/dist/components/Recipient/actions/revokeGroup.js +42 -0
- package/dist/components/Recipient/actions/revokeMember.js +42 -0
- package/dist/components/Recipient/actions/revokeSharedDriveMember.js +41 -0
- package/dist/components/ShareAutosuggest.js +1 -0
- package/dist/components/ShareAutosuggest.spec.js +12 -4
- package/dist/components/ShareDialogCozyToCozy.spec.js +55 -8
- package/dist/components/ShareDiscardChangesModal.js +35 -0
- package/dist/components/ShareModal/ShareModal copy.js +43 -0
- package/dist/components/ShareModal/ShareModal.spec.js +197 -0
- package/dist/components/ShareModal/ShareModalBatchContainer.js +276 -0
- package/dist/components/ShareModal/ShareModalBatchContainer.spec.js +131 -0
- package/dist/components/ShareModal/SharedDriveEditModal.js +59 -0
- package/dist/components/ShareRecipientsInput.js +13 -3
- package/dist/components/ShareRecipientsInput.spec.js +63 -4
- package/dist/components/SharedDrive/DumbSharedDriveModal.js +78 -0
- package/dist/components/SharedDrive/DumbSharedDriveModal.spec.js +126 -0
- package/dist/components/SharedDrive/SharedDriveEditModal.js +110 -0
- package/dist/components/SharedDrive/SharedDriveModal copy.js +356 -0
- package/dist/components/SharedDrive/helpers.js +102 -0
- package/dist/components/SharedDrive/helpers.spec.js +208 -0
- package/dist/components/SharedDriveEditModal.js +43 -0
- package/dist/components/SharedFolder/DumbBatchSharedFolderModal.spec.js +321 -0
- package/dist/components/SharedStatus.js +61 -0
- package/dist/components/SharedStatus.spec.js +44 -0
- package/dist/components/Sharesubmit.js +28 -0
- package/dist/components/__snapshots__/SharedStatus.spec.js.snap +94 -0
- package/dist/helpers/owner.js +14 -0
- package/dist/helpers/owner.spec.js +34 -0
- package/dist/hooks/useConfirmDiscardChanges.js +33 -0
- package/dist/hooks/useContactsAndGroups.js +65 -0
- package/dist/hooks/useSharedDrive.js +130 -0
- package/dist/hooks/useSharedDriveContactsAndGroups.js +65 -0
- package/dist/propTypes.js +26 -0
- package/dist/styles/shareddrive.styl +8 -0
- package/locales/en.json +10 -5
- package/locales/fr.json +10 -5
- package/locales/ru.json +10 -5
- package/locales/vi.json +10 -5
- package/package.json +2 -2
- package/src/components/FederatedFolder/FederatedFolderModal.jsx +184 -138
- package/src/components/FederatedFolder/FederatedFolderModal.spec.jsx +47 -0
- package/src/components/ShareAutosuggest.jsx +1 -0
- package/src/components/ShareAutosuggest.spec.jsx +10 -5
- package/src/components/ShareDialogCozyToCozy.spec.jsx +50 -4
- package/src/components/ShareDiscardChangesModal.jsx +40 -0
- package/src/components/ShareRecipientsInput.jsx +11 -6
- package/src/components/ShareRecipientsInput.spec.jsx +59 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
|
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
+
|
|
6
|
+
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) { _defineProperty(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; }
|
|
7
|
+
|
|
8
|
+
import { useQueryAll, isQueryLoading } from 'cozy-client';
|
|
9
|
+
import flag from 'cozy-flags';
|
|
10
|
+
import { getContactsFromGroupId } from '../helpers/contacts';
|
|
11
|
+
import { buildReachableContactsQuery, buildContactGroupsQuery, buildUnreachableContactsWithGroupsQuery } from '../queries/queries';
|
|
12
|
+
/**
|
|
13
|
+
* Custom hook to fetch and process contacts and groups for sharing
|
|
14
|
+
* @param {Array} currentRecipients - Array of current recipients to filter out from groups
|
|
15
|
+
* @returns {Object} Object containing contactsAndGroups array and isLoading boolean
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
var useContactsAndGroups = function useContactsAndGroups() {
|
|
19
|
+
var currentRecipients = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
20
|
+
var reachableContactsQuery = buildReachableContactsQuery();
|
|
21
|
+
var reachableContactsResult = useQueryAll(reachableContactsQuery.definition, reachableContactsQuery.options);
|
|
22
|
+
var unreachableContactsWithGroupsQuery = buildUnreachableContactsWithGroupsQuery();
|
|
23
|
+
var unreachableContactsWithGroupsResult = useQueryAll(unreachableContactsWithGroupsQuery.definition, _objectSpread(_objectSpread({}, unreachableContactsWithGroupsQuery.options), {}, {
|
|
24
|
+
enabled: !!flag('sharing.show-recipient-groups')
|
|
25
|
+
}));
|
|
26
|
+
var contactGroupsQuery = buildContactGroupsQuery();
|
|
27
|
+
var contactGroupsResult = useQueryAll(contactGroupsQuery.definition, contactGroupsQuery.options);
|
|
28
|
+
var isLoading = isQueryLoading(reachableContactsResult) || reachableContactsResult.hasMore || isQueryLoading(contactGroupsResult) || contactGroupsResult.hasMore || flag('sharing.show-recipient-groups') && (isQueryLoading(unreachableContactsWithGroupsResult) || unreachableContactsWithGroupsResult.hasMore);
|
|
29
|
+
var currentRecipientGroups = currentRecipients.map(function (_ref) {
|
|
30
|
+
var id = _ref.id;
|
|
31
|
+
return id;
|
|
32
|
+
}).filter(Boolean);
|
|
33
|
+
var contactGroups = (contactGroupsResult.data || []).filter(function (_ref2) {
|
|
34
|
+
var _id = _ref2._id;
|
|
35
|
+
return !flag('sharing.show-recipient-groups') || !currentRecipientGroups.includes(_id);
|
|
36
|
+
}).map(function (contactGroup) {
|
|
37
|
+
var reachableMembers = getContactsFromGroupId(reachableContactsResult.data, contactGroup.id).map(function (contact) {
|
|
38
|
+
return _objectSpread(_objectSpread({}, contact), {}, {
|
|
39
|
+
isReachable: true
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (flag('sharing.show-recipient-groups') !== true) {
|
|
44
|
+
return _objectSpread(_objectSpread({}, contactGroup), {}, {
|
|
45
|
+
members: reachableMembers
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var unreachableMembers = getContactsFromGroupId(unreachableContactsWithGroupsResult.data, contactGroup.id).map(function (contact) {
|
|
50
|
+
return _objectSpread(_objectSpread({}, contact), {}, {
|
|
51
|
+
isReachable: false
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
return _objectSpread(_objectSpread({}, contactGroup), {}, {
|
|
55
|
+
members: [].concat(_toConsumableArray(reachableMembers), _toConsumableArray(unreachableMembers))
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
var contactsAndGroups = [].concat(_toConsumableArray(reachableContactsResult.data || []), _toConsumableArray(contactGroups));
|
|
59
|
+
return {
|
|
60
|
+
contactsAndGroups: contactsAndGroups,
|
|
61
|
+
isLoading: isLoading
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default useContactsAndGroups;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
|
+
import { useState, useEffect } from 'react';
|
|
5
|
+
import { useClient } from 'cozy-client';
|
|
6
|
+
import { useAlert } from 'cozy-ui/transpiled/react/providers/Alert';
|
|
7
|
+
import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n';
|
|
8
|
+
import { buildSharingsByIdQuery } from '../queries/queries';
|
|
9
|
+
/**
|
|
10
|
+
* Separates sharing members into recipients and read-only recipients
|
|
11
|
+
* @param {Array} members - Array of sharing members
|
|
12
|
+
* @returns {Object} Object containing recipients and readOnlyRecipients arrays
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
var separateMembersByPermission = function separateMembersByPermission(members) {
|
|
16
|
+
return members.reduce(function (acc, member) {
|
|
17
|
+
if (member.status !== 'owner') {
|
|
18
|
+
if (member.read_only === true) {
|
|
19
|
+
acc.readOnlyRecipients.push(member);
|
|
20
|
+
} else {
|
|
21
|
+
acc.recipients.push(member);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return acc;
|
|
26
|
+
}, {
|
|
27
|
+
recipients: [],
|
|
28
|
+
readOnlyRecipients: []
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Custom hook to fetch shared drive data
|
|
33
|
+
* @param {string} sharedDriveId - The ID of the shared drive to fetch
|
|
34
|
+
* @returns {Object} Object containing shared drive data and loading state
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
export var useSharedDrive = function useSharedDrive(sharedDriveId) {
|
|
39
|
+
var client = useClient();
|
|
40
|
+
|
|
41
|
+
var _useI18n = useI18n(),
|
|
42
|
+
t = _useI18n.t;
|
|
43
|
+
|
|
44
|
+
var _useAlert = useAlert(),
|
|
45
|
+
showAlert = _useAlert.showAlert;
|
|
46
|
+
|
|
47
|
+
var _useState = useState(null),
|
|
48
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
49
|
+
sharedDrive = _useState2[0],
|
|
50
|
+
setSharedDrive = _useState2[1];
|
|
51
|
+
|
|
52
|
+
var _useState3 = useState(false),
|
|
53
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
54
|
+
isLoading = _useState4[0],
|
|
55
|
+
setIsLoading = _useState4[1];
|
|
56
|
+
|
|
57
|
+
useEffect(function () {
|
|
58
|
+
var fetchSharedDrive = /*#__PURE__*/function () {
|
|
59
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
60
|
+
var _yield$client$query2, sharing, sharedDriveName, sharedDriveRecipients;
|
|
61
|
+
|
|
62
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
63
|
+
while (1) switch (_context.prev = _context.next) {
|
|
64
|
+
case 0:
|
|
65
|
+
if (sharedDriveId) {
|
|
66
|
+
_context.next = 3;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
setSharedDrive(null);
|
|
71
|
+
return _context.abrupt("return");
|
|
72
|
+
|
|
73
|
+
case 3:
|
|
74
|
+
setIsLoading(true);
|
|
75
|
+
_context.prev = 4;
|
|
76
|
+
_context.next = 7;
|
|
77
|
+
return client.query(buildSharingsByIdQuery(sharedDriveId).definition);
|
|
78
|
+
|
|
79
|
+
case 7:
|
|
80
|
+
_yield$client$query2 = _context.sent;
|
|
81
|
+
sharing = _yield$client$query2.data;
|
|
82
|
+
|
|
83
|
+
if (sharing) {
|
|
84
|
+
sharedDriveName = sharing.rules[0].title || '';
|
|
85
|
+
sharedDriveRecipients = separateMembersByPermission(sharing.members);
|
|
86
|
+
setSharedDrive({
|
|
87
|
+
name: sharedDriveName,
|
|
88
|
+
recipients: sharedDriveRecipients
|
|
89
|
+
});
|
|
90
|
+
} else {
|
|
91
|
+
setSharedDrive(null);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
_context.next = 16;
|
|
95
|
+
break;
|
|
96
|
+
|
|
97
|
+
case 12:
|
|
98
|
+
_context.prev = 12;
|
|
99
|
+
_context.t0 = _context["catch"](4);
|
|
100
|
+
setSharedDrive(null);
|
|
101
|
+
showAlert({
|
|
102
|
+
message: t('SharedDrive.sharedDriveModal.fetchErrorNotification'),
|
|
103
|
+
severity: 'error',
|
|
104
|
+
variant: 'filled'
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
case 16:
|
|
108
|
+
_context.prev = 16;
|
|
109
|
+
setIsLoading(false);
|
|
110
|
+
return _context.finish(16);
|
|
111
|
+
|
|
112
|
+
case 19:
|
|
113
|
+
case "end":
|
|
114
|
+
return _context.stop();
|
|
115
|
+
}
|
|
116
|
+
}, _callee, null, [[4, 12, 16, 19]]);
|
|
117
|
+
}));
|
|
118
|
+
|
|
119
|
+
return function fetchSharedDrive() {
|
|
120
|
+
return _ref.apply(this, arguments);
|
|
121
|
+
};
|
|
122
|
+
}();
|
|
123
|
+
|
|
124
|
+
fetchSharedDrive();
|
|
125
|
+
}, [sharedDriveId, client, showAlert, t]);
|
|
126
|
+
return {
|
|
127
|
+
sharedDrive: sharedDrive,
|
|
128
|
+
isLoading: isLoading
|
|
129
|
+
};
|
|
130
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
|
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
+
|
|
6
|
+
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) { _defineProperty(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; }
|
|
7
|
+
|
|
8
|
+
import { useQueryAll, isQueryLoading } from 'cozy-client';
|
|
9
|
+
import flag from 'cozy-flags';
|
|
10
|
+
import { getContactsFromGroupId } from '../helpers/contacts';
|
|
11
|
+
import { buildReachableContactsQuery, buildContactGroupsQuery, buildUnreachableContactsWithGroupsQuery } from '../queries/queries';
|
|
12
|
+
/**
|
|
13
|
+
* Custom hook to fetch and process contacts and groups for sharing
|
|
14
|
+
* @param {Array} currentRecipients - Array of current recipients to filter out from groups
|
|
15
|
+
* @returns {Object} Object containing contactsAndGroups array and isLoading boolean
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
var useContactsAndGroups = function useContactsAndGroups() {
|
|
19
|
+
var currentRecipients = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
20
|
+
var reachableContactsQuery = buildReachableContactsQuery();
|
|
21
|
+
var reachableContactsResult = useQueryAll(reachableContactsQuery.definition, reachableContactsQuery.options);
|
|
22
|
+
var unreachableContactsWithGroupsQuery = buildUnreachableContactsWithGroupsQuery();
|
|
23
|
+
var unreachableContactsWithGroupsResult = useQueryAll(unreachableContactsWithGroupsQuery.definition, _objectSpread(_objectSpread({}, unreachableContactsWithGroupsQuery.options), {}, {
|
|
24
|
+
enabled: !!flag('sharing.show-recipient-groups')
|
|
25
|
+
}));
|
|
26
|
+
var contactGroupsQuery = buildContactGroupsQuery();
|
|
27
|
+
var contactGroupsResult = useQueryAll(contactGroupsQuery.definition, contactGroupsQuery.options);
|
|
28
|
+
var isLoading = isQueryLoading(reachableContactsResult) || reachableContactsResult.hasMore || isQueryLoading(contactGroupsResult) || contactGroupsResult.hasMore || flag('sharing.show-recipient-groups') && (isQueryLoading(unreachableContactsWithGroupsResult) || unreachableContactsWithGroupsResult.hasMore);
|
|
29
|
+
var currentRecipientGroups = currentRecipients.map(function (_ref) {
|
|
30
|
+
var id = _ref.id;
|
|
31
|
+
return id;
|
|
32
|
+
}).filter(Boolean);
|
|
33
|
+
var contactGroups = (contactGroupsResult.data || []).filter(function (_ref2) {
|
|
34
|
+
var _id = _ref2._id;
|
|
35
|
+
return !flag('sharing.show-recipient-groups') || !currentRecipientGroups.includes(_id);
|
|
36
|
+
}).map(function (contactGroup) {
|
|
37
|
+
var reachableMembers = getContactsFromGroupId(reachableContactsResult.data, contactGroup.id).map(function (contact) {
|
|
38
|
+
return _objectSpread(_objectSpread({}, contact), {}, {
|
|
39
|
+
isReachable: true
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (flag('sharing.show-recipient-groups') !== true) {
|
|
44
|
+
return _objectSpread(_objectSpread({}, contactGroup), {}, {
|
|
45
|
+
members: reachableMembers
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var unreachableMembers = getContactsFromGroupId(unreachableContactsWithGroupsResult.data, contactGroup.id).map(function (contact) {
|
|
50
|
+
return _objectSpread(_objectSpread({}, contact), {}, {
|
|
51
|
+
isReachable: false
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
return _objectSpread(_objectSpread({}, contactGroup), {}, {
|
|
55
|
+
members: [].concat(_toConsumableArray(reachableMembers), _toConsumableArray(unreachableMembers))
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
var contactsAndGroups = [].concat(_toConsumableArray(reachableContactsResult.data || []), _toConsumableArray(contactGroups));
|
|
59
|
+
return {
|
|
60
|
+
contactsAndGroups: contactsAndGroups,
|
|
61
|
+
isLoading: isLoading
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default useContactsAndGroups;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import { Contact, Group } from './models';
|
|
3
|
+
export var contactsResponseType = PropTypes.shape({
|
|
4
|
+
count: PropTypes.number,
|
|
5
|
+
data: PropTypes.arrayOf(Contact.propType),
|
|
6
|
+
definition: PropTypes.object,
|
|
7
|
+
fetchMore: PropTypes.func,
|
|
8
|
+
fetchStatus: PropTypes.string,
|
|
9
|
+
hasMore: PropTypes.bool,
|
|
10
|
+
id: PropTypes.string,
|
|
11
|
+
lastError: PropTypes.string,
|
|
12
|
+
lastFetch: PropTypes.number,
|
|
13
|
+
lastUpdate: PropTypes.number
|
|
14
|
+
});
|
|
15
|
+
export var contactGroupsResponseType = PropTypes.shape({
|
|
16
|
+
count: PropTypes.number,
|
|
17
|
+
data: PropTypes.arrayOf(Group.propType),
|
|
18
|
+
definition: PropTypes.object,
|
|
19
|
+
fetchMore: PropTypes.func,
|
|
20
|
+
fetchStatus: PropTypes.string,
|
|
21
|
+
hasMore: PropTypes.bool,
|
|
22
|
+
id: PropTypes.string,
|
|
23
|
+
lastError: PropTypes.string,
|
|
24
|
+
lastFetch: PropTypes.number,
|
|
25
|
+
lastUpdate: PropTypes.number
|
|
26
|
+
});
|
package/locales/en.json
CHANGED
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"shareByEmail": {
|
|
129
129
|
"subtitle": "By email",
|
|
130
130
|
"emailPlaceholder": "Add contacts",
|
|
131
|
-
"send": "
|
|
131
|
+
"send": "Done",
|
|
132
132
|
"singleContactSuccess": "You sent an invite to %{email}.",
|
|
133
133
|
"contactSuccess": "You sent an invite to %{smart_count} contact. |||| You sent an invite to %{smart_count} contacts.",
|
|
134
134
|
"singleGroupSuccess": "You sent an invite to the members of the %{groupName} group.",
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
"subtitle": "By email",
|
|
197
197
|
"email": "To:",
|
|
198
198
|
"emailPlaceholder": "Enter the email address or name of the recipient",
|
|
199
|
-
"send": "
|
|
199
|
+
"send": "Done",
|
|
200
200
|
"singleContactSuccess": "You sent an invite to %{email}.",
|
|
201
201
|
"contactSuccess": "You sent an invite to %{smart_count} contact. |||| You sent an invite to %{smart_count} contacts.",
|
|
202
202
|
"singleGroupSuccess": "You sent an invite to the members of the %{groupName} group.",
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"subtitle": "By email",
|
|
266
266
|
"email": "email",
|
|
267
267
|
"emailPlaceholder": "Enter the email address or name of the recipient",
|
|
268
|
-
"send": "
|
|
268
|
+
"send": "Done",
|
|
269
269
|
"singleContactSuccess": "You sent an invite to %{email}.",
|
|
270
270
|
"contactSuccess": "You sent an invite to %{smart_count} contact. |||| You sent an invite to %{smart_count} contacts.",
|
|
271
271
|
"singleGroupSuccess": "You sent an invite to the members of the %{groupName} group.",
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"subtitle": "By email",
|
|
330
330
|
"email": "Send to:",
|
|
331
331
|
"emailPlaceholder": "Enter the email address or name of the recipient",
|
|
332
|
-
"send": "
|
|
332
|
+
"send": "Done",
|
|
333
333
|
"error": {
|
|
334
334
|
"addingRecipient": "An error occurred while adding the recipient. Please try again."
|
|
335
335
|
},
|
|
@@ -382,6 +382,11 @@
|
|
|
382
382
|
"content": "You cannot share %{documentName} with more than %{limit} members.",
|
|
383
383
|
"confirm": "I understand"
|
|
384
384
|
},
|
|
385
|
+
"ShareDiscardChangesModal": {
|
|
386
|
+
"title": "Discard the changes you haven't saved?",
|
|
387
|
+
"cancel": "Cancel",
|
|
388
|
+
"discard": "Discard"
|
|
389
|
+
},
|
|
385
390
|
"GroupRecipient": {
|
|
386
391
|
"secondary": "%{memberCount} member |||| %{memberCount} members",
|
|
387
392
|
"secondary_you": "including you"
|
|
@@ -436,7 +441,7 @@
|
|
|
436
441
|
},
|
|
437
442
|
"FederatedFolder": {
|
|
438
443
|
"title": "Shared folder",
|
|
439
|
-
"share": "
|
|
444
|
+
"share": "Done",
|
|
440
445
|
"shareTitle": "Share \"%{name}\"",
|
|
441
446
|
"successNotification": "Folder has been shared",
|
|
442
447
|
"errorNotification": "Error while sharing folder",
|
package/locales/fr.json
CHANGED
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"shareByEmail": {
|
|
126
126
|
"subtitle": "Par email",
|
|
127
127
|
"emailPlaceholder": "Ajouter des contacts",
|
|
128
|
-
"send": "
|
|
128
|
+
"send": "Terminé",
|
|
129
129
|
"singleContactSuccess": "Vous avez envoyé une invitation à %{email}.",
|
|
130
130
|
"contactSuccess": "Vous avez invité %{smart_count} contact. |||| Vous avez invité %{smart_count} contacts.",
|
|
131
131
|
"singleGroupSuccess": "Vous avez invité les membres du groupe %{groupName}.",
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
"subtitle": "Par email",
|
|
194
194
|
"email": "À :",
|
|
195
195
|
"emailPlaceholder": "Saisissez le courriel ou le nom du destinataire.",
|
|
196
|
-
"send": "
|
|
196
|
+
"send": "Terminé",
|
|
197
197
|
"singleContactSuccess": "Vous avez envoyé une invitation à %{email}.",
|
|
198
198
|
"contactSuccess": "Vous avez invité %{smart_count} contact. |||| Vous avez invité %{smart_count} contacts.",
|
|
199
199
|
"singleGroupSuccess": "Vous avez invité les membres du groupe %{groupName}.",
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
"subtitle": "Par email",
|
|
264
264
|
"email": "e-mail",
|
|
265
265
|
"emailPlaceholder": "Saisissez l'email ou le nom du destinataire.",
|
|
266
|
-
"send": "
|
|
266
|
+
"send": "Terminé",
|
|
267
267
|
"singleContactSuccess": "Vous avez envoyé une invitation à %{email}.",
|
|
268
268
|
"contactSuccess": "Vous avez invité %{smart_count} contact. |||| Vous avez invité %{smart_count} contacts.",
|
|
269
269
|
"singleGroupSuccess": "Vous avez invité les membres du groupe %{groupName}.",
|
|
@@ -327,7 +327,7 @@
|
|
|
327
327
|
"subtitle": "Par email",
|
|
328
328
|
"email": "Envoyer à :",
|
|
329
329
|
"emailPlaceholder": "Saisissez le courriel ou le nom du destinataire.",
|
|
330
|
-
"send": "
|
|
330
|
+
"send": "Terminé",
|
|
331
331
|
"error": {
|
|
332
332
|
"addingRecipient": "Une erreur s'est produite lors de l'ajout du destinataire. Veuillez réessayer."
|
|
333
333
|
},
|
|
@@ -380,6 +380,11 @@
|
|
|
380
380
|
"content": "Vous ne pouvez pas partager %{documentName} à plus de %{limit} membres.",
|
|
381
381
|
"confirm": "J'ai compris"
|
|
382
382
|
},
|
|
383
|
+
"ShareDiscardChangesModal": {
|
|
384
|
+
"title": "Abandonner les modifications non enregistrées ?",
|
|
385
|
+
"cancel": "Annuler",
|
|
386
|
+
"discard": "Abandonner"
|
|
387
|
+
},
|
|
383
388
|
"GroupRecipient": {
|
|
384
389
|
"secondary": "%{memberCount} membre |||| %{memberCount} membres",
|
|
385
390
|
"secondary_you": "dont vous"
|
|
@@ -434,7 +439,7 @@
|
|
|
434
439
|
},
|
|
435
440
|
"FederatedFolder": {
|
|
436
441
|
"title": "Dossier partagé",
|
|
437
|
-
"share": "
|
|
442
|
+
"share": "Terminé",
|
|
438
443
|
"shareTitle": "Partager \"%{name}\"",
|
|
439
444
|
"successNotification": "Le dossier a été partagé",
|
|
440
445
|
"errorNotification": "Erreur lors du partage du dossier",
|
package/locales/ru.json
CHANGED
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"shareByEmail": {
|
|
129
129
|
"subtitle": "По электронной почте",
|
|
130
130
|
"emailPlaceholder": "Добавить контакты",
|
|
131
|
-
"send": "
|
|
131
|
+
"send": "Готово",
|
|
132
132
|
"singleContactSuccess": "Вы отправили приглашение на %{email}.",
|
|
133
133
|
"contactSuccess": "Вы отправили приглашение %{smart_count} контакту. |||| Вы отправили приглашение %{smart_count} контактам.",
|
|
134
134
|
"singleGroupSuccess": "Вы отправили приглашение участникам группы %{groupName}.",
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
"subtitle": "По электронной почте",
|
|
197
197
|
"email": "Кому:",
|
|
198
198
|
"emailPlaceholder": "Введите адрес электронной почты или имя получателя",
|
|
199
|
-
"send": "
|
|
199
|
+
"send": "Готово",
|
|
200
200
|
"singleContactSuccess": "Вы отправили приглашение на %{email}.",
|
|
201
201
|
"contactSuccess": "Вы отправили приглашение %{smart_count} контакту. |||| Вы отправили приглашение %{smart_count} контактам.",
|
|
202
202
|
"singleGroupSuccess": "Вы отправили приглашение участникам группы %{groupName}.",
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"subtitle": "По электронной почте",
|
|
266
266
|
"email": "эл. почта",
|
|
267
267
|
"emailPlaceholder": "Введите адрес электронной почты или имя получателя",
|
|
268
|
-
"send": "
|
|
268
|
+
"send": "Готово",
|
|
269
269
|
"singleContactSuccess": "Вы отправили приглашение на %{email}.",
|
|
270
270
|
"contactSuccess": "Вы отправили приглашение %{smart_count} контакту. |||| Вы отправили приглашение %{smart_count} контактам.",
|
|
271
271
|
"singleGroupSuccess": "Вы отправили приглашение участникам группы %{groupName}.",
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"subtitle": "По электронной почте",
|
|
330
330
|
"email": "Отправить:",
|
|
331
331
|
"emailPlaceholder": "Введите адрес электронной почты или имя получателя",
|
|
332
|
-
"send": "
|
|
332
|
+
"send": "Готово",
|
|
333
333
|
"error": {
|
|
334
334
|
"addingRecipient": "Произошла ошибка при добавлении получателя. Пожалуйста, попробуйте еще раз."
|
|
335
335
|
},
|
|
@@ -382,6 +382,11 @@
|
|
|
382
382
|
"content": "Вы не можете предоставить общий доступ к %{documentName} более чем %{limit} участникам.",
|
|
383
383
|
"confirm": "Понятно"
|
|
384
384
|
},
|
|
385
|
+
"ShareDiscardChangesModal": {
|
|
386
|
+
"title": "Отменить несохраненные изменения?",
|
|
387
|
+
"cancel": "Отмена",
|
|
388
|
+
"discard": "Отменить"
|
|
389
|
+
},
|
|
385
390
|
"GroupRecipient": {
|
|
386
391
|
"secondary": "%{memberCount} участник |||| %{memberCount} участников",
|
|
387
392
|
"secondary_you": "включая вас"
|
|
@@ -436,7 +441,7 @@
|
|
|
436
441
|
},
|
|
437
442
|
"FederatedFolder": {
|
|
438
443
|
"title": "Общая папка",
|
|
439
|
-
"share": "
|
|
444
|
+
"share": "Готово",
|
|
440
445
|
"shareTitle": "Поделиться \"%{name}\"",
|
|
441
446
|
"successNotification": "Папка была расшарена",
|
|
442
447
|
"errorNotification": "Ошибка при расшаривании папки",
|
package/locales/vi.json
CHANGED
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"shareByEmail": {
|
|
129
129
|
"subtitle": "Bằng email",
|
|
130
130
|
"emailPlaceholder": "Thêm liên hệ",
|
|
131
|
-
"send": "
|
|
131
|
+
"send": "Xong",
|
|
132
132
|
"singleContactSuccess": "Bạn đã gửi lời mời đến %{email}.",
|
|
133
133
|
"contactSuccess": "Bạn đã gửi lời mời đến %{smart_count} liên hệ. |||| Bạn đã gửi lời mời đến %{smart_count} liên hệ.",
|
|
134
134
|
"singleGroupSuccess": "Bạn đã gửi lời mời đến các thành viên của nhóm %{groupName}.",
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
"subtitle": "Bằng email",
|
|
197
197
|
"email": "Đến:",
|
|
198
198
|
"emailPlaceholder": "Nhập địa chỉ email hoặc tên người nhận",
|
|
199
|
-
"send": "
|
|
199
|
+
"send": "Xong",
|
|
200
200
|
"singleContactSuccess": "Bạn đã gửi lời mời đến %{email}.",
|
|
201
201
|
"contactSuccess": "Bạn đã gửi lời mời đến %{smart_count} liên hệ. |||| Bạn đã gửi lời mời đến %{smart_count} liên hệ.",
|
|
202
202
|
"singleGroupSuccess": "Bạn đã gửi lời mời đến các thành viên của nhóm %{groupName}.",
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"subtitle": "Bằng email",
|
|
266
266
|
"email": "email",
|
|
267
267
|
"emailPlaceholder": "Nhập địa chỉ email hoặc tên người nhận",
|
|
268
|
-
"send": "
|
|
268
|
+
"send": "Xong",
|
|
269
269
|
"singleContactSuccess": "Bạn đã gửi lời mời đến %{email}.",
|
|
270
270
|
"contactSuccess": "Bạn đã gửi lời mời đến %{smart_count} liên hệ. |||| Bạn đã gửi lời mời đến %{smart_count} liên hệ.",
|
|
271
271
|
"singleGroupSuccess": "Bạn đã gửi lời mời đến các thành viên của nhóm %{groupName}.",
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"subtitle": "Bằng email",
|
|
330
330
|
"email": "Gửi đến:",
|
|
331
331
|
"emailPlaceholder": "Nhập địa chỉ email hoặc tên người nhận",
|
|
332
|
-
"send": "
|
|
332
|
+
"send": "Xong",
|
|
333
333
|
"error": {
|
|
334
334
|
"addingRecipient": "Đã xảy ra lỗi khi thêm người nhận. Vui lòng thử lại."
|
|
335
335
|
},
|
|
@@ -382,6 +382,11 @@
|
|
|
382
382
|
"content": "Bạn không thể chia sẻ %{documentName} với nhiều hơn %{limit} thành viên.",
|
|
383
383
|
"confirm": "Tôi hiểu rồi"
|
|
384
384
|
},
|
|
385
|
+
"ShareDiscardChangesModal": {
|
|
386
|
+
"title": "Bạn có muốn bỏ các thay đổi chưa lưu?",
|
|
387
|
+
"cancel": "Hủy",
|
|
388
|
+
"discard": "Bỏ"
|
|
389
|
+
},
|
|
385
390
|
"GroupRecipient": {
|
|
386
391
|
"secondary": "%{memberCount} thành viên |||| %{memberCount} thành viên",
|
|
387
392
|
"secondary_you": "bao gồm cả bạn"
|
|
@@ -436,7 +441,7 @@
|
|
|
436
441
|
},
|
|
437
442
|
"FederatedFolder": {
|
|
438
443
|
"title": "Thư mục chia sẻ",
|
|
439
|
-
"share": "
|
|
444
|
+
"share": "Xong",
|
|
440
445
|
"shareTitle": "Chia sẻ \"%{name}\"",
|
|
441
446
|
"successNotification": "Thư mục đã được chia sẻ",
|
|
442
447
|
"errorNotification": "Lỗi khi chia sẻ thư mục",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cozy-sharing",
|
|
3
|
-
"version": "32.1
|
|
3
|
+
"version": "32.3.1",
|
|
4
4
|
"description": "Provides sharing login for React applications.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"author": "Cozy",
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"sideEffects": [
|
|
84
84
|
"*.css"
|
|
85
85
|
],
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "4f13f016ce5791e4cd1df4283ff8577ccb0cd58c"
|
|
87
87
|
}
|