cozy-sharing 33.5.1 → 33.6.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/SharingProvider.spec.js +242 -113
  3. package/dist/components/FederatedFolder/FederatedFolderModal.js +1 -4
  4. package/dist/components/Recipient/LinkRecipient.js +40 -17
  5. package/dist/components/Recipient/LinkRecipientPermissions.js +7 -6
  6. package/dist/components/Recipient/MemberRecipient.js +1 -4
  7. package/dist/components/Recipient/MemberRecipientPermissions.js +4 -6
  8. package/dist/components/Recipient/RecipientConfirm.js +1 -4
  9. package/dist/components/Recipient/RecipientList.js +2 -0
  10. package/dist/components/ShareByEmail.js +1 -4
  11. package/dist/components/ShareDialogCozyToCozy.js +1 -4
  12. package/dist/components/ShareModal/ShareModal.js +1 -5
  13. package/dist/components/ShareModal/SharingDetailsModal.js +6 -38
  14. package/dist/components/SharedDrive/EditSharedDriveModal.js +1 -4
  15. package/dist/components/WhoHasAccess.js +4 -0
  16. package/dist/state.js +5 -4
  17. package/dist/state.spec.js +44 -27
  18. package/dist/styles/share.styl +0 -21
  19. package/dist/stylesheet.css +0 -22
  20. package/locales/en.json +1 -2
  21. package/locales/fr.json +1 -2
  22. package/locales/ru.json +1 -2
  23. package/locales/vi.json +1 -2
  24. package/package.json +2 -2
  25. package/src/SharingProvider.spec.jsx +115 -1
  26. package/src/components/Recipient/LinkRecipient.jsx +50 -15
  27. package/src/components/Recipient/LinkRecipientPermissions.jsx +27 -20
  28. package/src/components/Recipient/MemberRecipient.jsx +1 -1
  29. package/src/components/Recipient/MemberRecipientPermissions.jsx +10 -5
  30. package/src/components/Recipient/RecipientList.jsx +2 -0
  31. package/src/components/ShareModal/ShareModal.jsx +1 -5
  32. package/src/components/ShareModal/SharingDetailsModal.jsx +3 -47
  33. package/src/components/WhoHasAccess.jsx +3 -0
  34. package/src/state.js +5 -13
  35. package/src/state.spec.js +63 -29
  36. package/src/styles/share.styl +0 -21
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
2
  import PropTypes from 'prop-types';
4
3
  import React, { useState } from 'react';
@@ -21,6 +20,37 @@ import { FADE_IN_DURATION } from '../../helpers/recipients';
21
20
  import { useSharingContext } from '../../hooks/useSharingContext';
22
21
  import { ShareRestrictionModal } from '../ShareRestrictionModal/ShareRestrictionModal';
23
22
 
23
+ var LinkRecipientTextReadOnly = function LinkRecipientTextReadOnly(_ref) {
24
+ var textPrimary = _ref.textPrimary,
25
+ textSecondary = _ref.textSecondary;
26
+ return /*#__PURE__*/React.createElement(ListItemText, {
27
+ primary: /*#__PURE__*/React.createElement("div", {
28
+ className: "u-flex u-flex-items-center"
29
+ }, /*#__PURE__*/React.createElement(Typography, null, textPrimary)),
30
+ secondary: textSecondary
31
+ });
32
+ };
33
+
34
+ var LinkRecipientText = function LinkRecipientText(_ref2) {
35
+ var onClick = _ref2.onClick,
36
+ textPrimary = _ref2.textPrimary,
37
+ textSecondary = _ref2.textSecondary;
38
+ return /*#__PURE__*/React.createElement(ListItemText, {
39
+ onClick: onClick,
40
+ primary: /*#__PURE__*/React.createElement("div", {
41
+ className: "u-flex u-flex-items-center"
42
+ }, /*#__PURE__*/React.createElement(Typography, {
43
+ className: "u-c-pointer "
44
+ }, textPrimary), /*#__PURE__*/React.createElement(IconButton, {
45
+ size: "small",
46
+ className: "u-ml-half"
47
+ }, /*#__PURE__*/React.createElement(Icon, {
48
+ icon: Gear
49
+ }))),
50
+ secondary: textSecondary
51
+ });
52
+ };
53
+
24
54
  var LinkRecipient = function LinkRecipient(props) {
25
55
  var _useI18n = useI18n(),
26
56
  t = _useI18n.t,
@@ -36,7 +66,8 @@ var LinkRecipient = function LinkRecipient(props) {
36
66
  var recipientConfirmationData = props.recipientConfirmationData,
37
67
  verifyRecipient = props.verifyRecipient,
38
68
  fadeIn = props.fadeIn,
39
- document = props.document;
69
+ document = props.document,
70
+ isReadOnly = props.isReadOnly;
40
71
 
41
72
  var _useState = useState(false),
42
73
  _useState2 = _slicedToArray(_useState, 2),
@@ -54,9 +85,7 @@ var LinkRecipient = function LinkRecipient(props) {
54
85
  var RightPart = recipientConfirmationData ? /*#__PURE__*/React.createElement(RecipientConfirm, {
55
86
  recipientConfirmationData: recipientConfirmationData,
56
87
  verifyRecipient: verifyRecipient
57
- }) : /*#__PURE__*/React.createElement(LinkRecipientPermissions, _extends({}, props, {
58
- className: "u-flex-shrink-0"
59
- }));
88
+ }) : /*#__PURE__*/React.createElement(LinkRecipientPermissions, props);
60
89
  return /*#__PURE__*/React.createElement(Fade, {
61
90
  in: true,
62
91
  timeout: fadeIn ? FADE_IN_DURATION : 0
@@ -70,21 +99,15 @@ var LinkRecipient = function LinkRecipient(props) {
70
99
  innerBorder: true
71
100
  }, /*#__PURE__*/React.createElement(Icon, {
72
101
  icon: LinkIcon
73
- }))), /*#__PURE__*/React.createElement(ListItemText, {
102
+ }))), isReadOnly ? /*#__PURE__*/React.createElement(LinkRecipientTextReadOnly, {
103
+ textPrimary: textPrimary,
104
+ textSecondary: textSecondary
105
+ }) : /*#__PURE__*/React.createElement(LinkRecipientText, {
74
106
  onClick: function onClick() {
75
107
  return setOpenShareRestrictionModal(true);
76
108
  },
77
- primary: /*#__PURE__*/React.createElement("div", {
78
- className: "u-flex u-flex-items-center"
79
- }, /*#__PURE__*/React.createElement(Typography, {
80
- className: "u-c-pointer "
81
- }, textPrimary), /*#__PURE__*/React.createElement(IconButton, {
82
- size: "small",
83
- className: "u-ml-half"
84
- }, /*#__PURE__*/React.createElement(Icon, {
85
- icon: Gear
86
- }))),
87
- secondary: textSecondary
109
+ textPrimary: textPrimary,
110
+ textSecondary: textSecondary
88
111
  }), RightPart, openShareRestrictionModal && /*#__PURE__*/React.createElement(ShareRestrictionModal, {
89
112
  file: document,
90
113
  onClose: function onClose() {
@@ -4,6 +4,7 @@ import React, { useState, useRef } from 'react';
4
4
  import ActionsMenu from 'cozy-ui/transpiled/react/ActionsMenu';
5
5
  import { makeActions, divider } from 'cozy-ui/transpiled/react/ActionsMenu/Actions';
6
6
  import DropdownButton from 'cozy-ui/transpiled/react/DropdownButton';
7
+ import Typography from 'cozy-ui/transpiled/react/Typography';
7
8
  import { useI18n } from 'twake-i18n';
8
9
  import { revokeLink } from './actions/revokeLink';
9
10
  import { setReadOnlySharedPermission } from './actions/setReadOnlySharedPermission';
@@ -14,8 +15,8 @@ import { useSharingContext } from '../../hooks/useSharingContext';
14
15
  import { WRITE_PERMS, READ_ONLY_PERMS } from '../ShareRestrictionModal/helpers';
15
16
 
16
17
  var LinkRecipientPermissions = function LinkRecipientPermissions(_ref) {
17
- var className = _ref.className,
18
- document = _ref.document;
18
+ var document = _ref.document,
19
+ isReadOnly = _ref.isReadOnly;
19
20
 
20
21
  var _useI18n = useI18n(),
21
22
  t = _useI18n.t;
@@ -72,9 +73,10 @@ var LinkRecipientPermissions = function LinkRecipientPermissions(_ref) {
72
73
  setType: handleSetType,
73
74
  handleRevocation: handleRevocation
74
75
  });
75
- return /*#__PURE__*/React.createElement("div", {
76
- className: className
77
- }, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
76
+ var shouldShowMenu = !isReadOnly;
77
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !shouldShowMenu && /*#__PURE__*/React.createElement(Typography, {
78
+ variant: "body2"
79
+ }, t("Share.type.".concat(type))), shouldShowMenu && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
78
80
  ref: buttonRef,
79
81
  textVariant: "body2",
80
82
  onClick: toggleMenu
@@ -88,7 +90,6 @@ var LinkRecipientPermissions = function LinkRecipientPermissions(_ref) {
88
90
  };
89
91
 
90
92
  LinkRecipientPermissions.propTypes = {
91
- className: PropTypes.string,
92
93
  document: PropTypes.object.isRequired
93
94
  };
94
95
  export default LinkRecipientPermissions;
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
2
  var _excluded = ["instance", "isOwner", "status", "recipientConfirmationData", "verifyRecipient", "fadeIn"];
4
3
  import PropTypes from 'prop-types';
@@ -41,9 +40,7 @@ var MemberRecipient = function MemberRecipient(props) {
41
40
  var RightPart = recipientConfirmationData ? /*#__PURE__*/React.createElement(RecipientConfirm, {
42
41
  recipientConfirmationData: recipientConfirmationData,
43
42
  verifyRecipient: verifyRecipient
44
- }) : /*#__PURE__*/React.createElement(MemberRecipientPermissions, _extends({}, props, {
45
- className: "u-flex-shrink-0"
46
- }));
43
+ }) : /*#__PURE__*/React.createElement(MemberRecipientPermissions, props);
47
44
  return /*#__PURE__*/React.createElement(Fade, {
48
45
  in: true,
49
46
  timeout: fadeIn ? FADE_IN_DURATION : 0
@@ -21,11 +21,11 @@ var log = minilog('MemberRecipientPermissions');
21
21
 
22
22
  var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
23
23
  var isOwner = _ref.isOwner,
24
+ isReadOnly = _ref.isReadOnly,
24
25
  status = _ref.status,
25
26
  instance = _ref.instance,
26
27
  type = _ref.type,
27
28
  document = _ref.document,
28
- className = _ref.className,
29
29
  onRevoke = _ref.onRevoke,
30
30
  onRevokeSelf = _ref.onRevokeSelf,
31
31
  sharingId = _ref.sharingId,
@@ -55,7 +55,7 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
55
55
 
56
56
  var instanceMatchesClient = instance !== undefined && instance === client.options.uri;
57
57
  var contactIsOwner = status === 'owner';
58
- var shouldShowMenu = !revoking && !contactIsOwner && (instanceMatchesClient && !isOwner || isOwner);
58
+ var shouldShowMenu = !isReadOnly && !revoking && !contactIsOwner && (instanceMatchesClient && !isOwner || isOwner);
59
59
  var toggleMenu = useCallback(function () {
60
60
  setMenuDisplayed(function (displayed) {
61
61
  return !displayed;
@@ -147,11 +147,9 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
147
147
  type: type !== null && type !== void 0 ? type : 'one-way',
148
148
  setType: setType
149
149
  });
150
- return /*#__PURE__*/React.createElement("div", {
151
- className: className
152
- }, revoking && /*#__PURE__*/React.createElement(Spinner, null), !shouldShowMenu && !revoking && /*#__PURE__*/React.createElement(Typography, {
150
+ return /*#__PURE__*/React.createElement(React.Fragment, null, revoking && /*#__PURE__*/React.createElement(Spinner, null), !shouldShowMenu && /*#__PURE__*/React.createElement(Typography, {
153
151
  variant: "body2"
154
- }, t("Share.status.".concat(status))), shouldShowMenu && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
152
+ }, contactIsOwner ? t("Share.status.".concat(status)) : t("Share.type.".concat(type))), shouldShowMenu && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
155
153
  ref: buttonRef,
156
154
  "aria-controls": "simple-menu",
157
155
  "aria-haspopup": "true",
@@ -18,10 +18,7 @@ var modalStyles = {
18
18
  "share-dialog-scrollable-body": "share__share-dialog-scrollable-body___2O5UT",
19
19
  "share-dialog-members": "share__share-dialog-members___CNHKJ",
20
20
  "share-byemail-onlybylink": "share__share-byemail-onlybylink___29W-t",
21
- "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG",
22
- "share-details-created": "share__share-details-created___z3nvO",
23
- "share-details-perm": "share__share-details-perm___3HjxK",
24
- "share-details-perm-desc": "share__share-details-perm-desc___3HyHu"
21
+ "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG"
25
22
  };
26
23
  /**
27
24
  * Displays the confirmation interface that allows to confirm or reject a recipient
@@ -10,6 +10,7 @@ var RecipientList = function RecipientList(_ref) {
10
10
  recipientsToBeConfirmed = _ref.recipientsToBeConfirmed,
11
11
  isOwner = _ref.isOwner,
12
12
  isSharedDrive = _ref.isSharedDrive,
13
+ isReadOnly = _ref.isReadOnly,
13
14
  document = _ref.document,
14
15
  documentType = _ref.documentType,
15
16
  onRevoke = _ref.onRevoke,
@@ -39,6 +40,7 @@ var RecipientList = function RecipientList(_ref) {
39
40
  key: recipient.index,
40
41
  isOwner: isOwner,
41
42
  isSharedDrive: isSharedDrive,
43
+ isReadOnly: isReadOnly,
42
44
  document: document,
43
45
  documentType: documentType,
44
46
  onRevoke: onRevoke,
@@ -23,10 +23,7 @@ var styles = {
23
23
  "share-dialog-scrollable-body": "share__share-dialog-scrollable-body___2O5UT",
24
24
  "share-dialog-members": "share__share-dialog-members___CNHKJ",
25
25
  "share-byemail-onlybylink": "share__share-byemail-onlybylink___29W-t",
26
- "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG",
27
- "share-details-created": "share__share-details-created___z3nvO",
28
- "share-details-perm": "share__share-details-perm___3HjxK",
29
- "share-details-perm-desc": "share__share-details-perm-desc___3HyHu"
26
+ "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG"
30
27
  };
31
28
  export var ShareByEmail = function ShareByEmail(_ref) {
32
29
  var document = _ref.document,
@@ -41,10 +41,7 @@ var styles = {
41
41
  "share-dialog-scrollable-body": "share__share-dialog-scrollable-body___2O5UT",
42
42
  "share-dialog-members": "share__share-dialog-members___CNHKJ",
43
43
  "share-byemail-onlybylink": "share__share-byemail-onlybylink___29W-t",
44
- "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG",
45
- "share-details-created": "share__share-details-created___z3nvO",
46
- "share-details-perm": "share__share-details-perm___3HjxK",
47
- "share-details-perm-desc": "share__share-details-perm-desc___3HyHu"
44
+ "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG"
48
45
  };
49
46
 
50
47
  var SharingContent = function SharingContent(_ref) {
@@ -29,8 +29,6 @@ export var ShareModal = withLocales(function (props) {
29
29
  isOwner = _useSharingContext.isOwner,
30
30
  canReshare = _useSharingContext.canReshare,
31
31
  documentType = _useSharingContext.documentType,
32
- getOwner = _useSharingContext.getOwner,
33
- getSharingType = _useSharingContext.getSharingType,
34
32
  getRecipients = _useSharingContext.getRecipients,
35
33
  revokeSelf = _useSharingContext.revokeSelf,
36
34
  allLoaded = _useSharingContext.allLoaded;
@@ -75,11 +73,9 @@ export var ShareModal = withLocales(function (props) {
75
73
  }
76
74
 
77
75
  return /*#__PURE__*/React.createElement(SharingDetailsModal, _extends({
76
+ recipients: getRecipients(document.id),
78
77
  document: document,
79
78
  documentType: documentType,
80
- owner: getOwner(document.id),
81
- sharingType: getSharingType(document.id),
82
- recipients: getRecipients(document.id),
83
79
  onRevoke: revokeSelf,
84
80
  onRevokeSelf: handleRevokeSelf
85
81
  }, rest));
@@ -1,11 +1,7 @@
1
- import cx from 'classnames';
2
1
  import PropTypes from 'prop-types';
3
2
  import React from 'react';
4
3
  import { Dialog } from 'cozy-ui/transpiled/react/CozyDialogs';
5
- import Divider from 'cozy-ui/transpiled/react/Divider';
6
- import useBreakpoints from 'cozy-ui/transpiled/react/providers/Breakpoints';
7
4
  import { useI18n } from 'twake-i18n';
8
- import { getDisplayName } from '../../models';
9
5
  var styles = {
10
6
  "share-modal-content": "share__share-modal-content___1iqEq",
11
7
  "coz-form": "share__coz-form___1ICST",
@@ -22,17 +18,11 @@ var styles = {
22
18
  "share-dialog-scrollable-body": "share__share-dialog-scrollable-body___2O5UT",
23
19
  "share-dialog-members": "share__share-dialog-members___CNHKJ",
24
20
  "share-byemail-onlybylink": "share__share-byemail-onlybylink___29W-t",
25
- "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG",
26
- "share-details-created": "share__share-details-created___z3nvO",
27
- "share-details-perm": "share__share-details-perm___3HjxK",
28
- "share-details-perm-desc": "share__share-details-perm-desc___3HyHu"
21
+ "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG"
29
22
  };
30
- import OwnerIdentity from '../Identity/OwnerIdentity';
31
23
  import WhoHasAccess from '../WhoHasAccess';
32
24
  export var SharingDetailsModal = function SharingDetailsModal(_ref) {
33
25
  var onClose = _ref.onClose,
34
- sharingType = _ref.sharingType,
35
- owner = _ref.owner,
36
26
  recipients = _ref.recipients,
37
27
  document = _ref.document,
38
28
  _ref$documentType = _ref.documentType,
@@ -41,11 +31,7 @@ export var SharingDetailsModal = function SharingDetailsModal(_ref) {
41
31
  onRevokeSelf = _ref.onRevokeSelf;
42
32
 
43
33
  var _useI18n = useI18n(),
44
- t = _useI18n.t,
45
- f = _useI18n.f;
46
-
47
- var _useBreakpoints = useBreakpoints(),
48
- isMobile = _useBreakpoints.isMobile;
34
+ t = _useI18n.t;
49
35
 
50
36
  return /*#__PURE__*/React.createElement(Dialog, {
51
37
  disableGutters: true,
@@ -55,32 +41,14 @@ export var SharingDetailsModal = function SharingDetailsModal(_ref) {
55
41
  title: t("".concat(documentType, ".share.details.title")),
56
42
  content: /*#__PURE__*/React.createElement("div", {
57
43
  className: styles['share-modal-content']
58
- }, /*#__PURE__*/React.createElement("div", {
59
- className: cx(styles['share-details'], isMobile ? 'u-ph-1 u-pt-1-half' : 'u-ph-2 u-pt-1')
60
- }, owner ? /*#__PURE__*/React.createElement(OwnerIdentity, {
61
- name: t("".concat(documentType, ".share.sharedBy"), {
62
- name: getDisplayName(owner)
63
- }),
64
- url: owner.instance
65
- }) : null, /*#__PURE__*/React.createElement("div", {
66
- className: styles['share-details-created']
67
- }, t("".concat(documentType, ".share.details.createdAt"), {
68
- date: f(document.created_at || null, 'do LLLL yyyy')
69
- })), /*#__PURE__*/React.createElement("div", {
70
- className: styles['share-details-perm']
71
- }, t("".concat(documentType, ".share.details.").concat(sharingType === 'one-way' ? 'ro' : 'rw'))), /*#__PURE__*/React.createElement("div", {
72
- className: styles['share-details-perm-desc']
73
- }, t("".concat(documentType, ".share.details.desc.").concat(sharingType === 'one-way' ? 'ro' : 'rw')))), /*#__PURE__*/React.createElement(Divider, {
74
- className: "u-mv-1"
75
- }), /*#__PURE__*/React.createElement(WhoHasAccess, {
76
- title: t('Share.recipients.accessCount', {
77
- count: recipients.length
78
- }),
44
+ }, /*#__PURE__*/React.createElement(WhoHasAccess, {
45
+ isReadOnly: true,
79
46
  recipients: recipients,
80
47
  document: document,
81
48
  documentType: documentType,
82
49
  onRevoke: onRevoke,
83
- onRevokeSelf: onRevokeSelf
50
+ onRevokeSelf: onRevokeSelf,
51
+ link: "ok"
84
52
  }))
85
53
  });
86
54
  };
@@ -37,10 +37,7 @@ var styles = {
37
37
  "share-dialog-scrollable-body": "share__share-dialog-scrollable-body___2O5UT",
38
38
  "share-dialog-members": "share__share-dialog-members___CNHKJ",
39
39
  "share-byemail-onlybylink": "share__share-byemail-onlybylink___29W-t",
40
- "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG",
41
- "share-details-created": "share__share-details-created___z3nvO",
42
- "share-details-perm": "share__share-details-perm___3HjxK",
43
- "share-details-perm-desc": "share__share-details-perm-desc___3HyHu"
40
+ "aligned-dropdown-button": "share__aligned-dropdown-button___3crgG"
44
41
  };
45
42
  import { default as DumbShareByEmail } from '../ShareByEmail';
46
43
  import WhoHasAccess from '../WhoHasAccess';
@@ -32,6 +32,8 @@ var WhoHasAccess = function WhoHasAccess(_ref2) {
32
32
  isOwner = _ref2$isOwner === void 0 ? false : _ref2$isOwner,
33
33
  _ref2$isSharedDrive = _ref2.isSharedDrive,
34
34
  isSharedDrive = _ref2$isSharedDrive === void 0 ? false : _ref2$isSharedDrive,
35
+ _ref2$isReadOnly = _ref2.isReadOnly,
36
+ isReadOnly = _ref2$isReadOnly === void 0 ? false : _ref2$isReadOnly,
35
37
  _ref2$showOwner = _ref2.showOwner,
36
38
  showOwner = _ref2$showOwner === void 0 ? true : _ref2$showOwner,
37
39
  recipients = _ref2.recipients,
@@ -53,6 +55,7 @@ var WhoHasAccess = function WhoHasAccess(_ref2) {
53
55
  }, /*#__PURE__*/React.createElement(RecipientWaitingForConfirmationAlert, {
54
56
  recipientsToBeConfirmed: recipientsToBeConfirmed
55
57
  }), /*#__PURE__*/React.createElement(List, null, link && /*#__PURE__*/React.createElement(LinkRecipient, {
58
+ isReadOnly: isReadOnly,
56
59
  document: document,
57
60
  documentType: documentType,
58
61
  onRevoke: onRevoke,
@@ -66,6 +69,7 @@ var WhoHasAccess = function WhoHasAccess(_ref2) {
66
69
  recipientsToBeConfirmed: recipientsToBeConfirmed,
67
70
  isOwner: isOwner,
68
71
  isSharedDrive: isSharedDrive,
72
+ isReadOnly: isReadOnly,
69
73
  document: document,
70
74
  documentType: documentType,
71
75
  onRevoke: onRevoke,
package/dist/state.js CHANGED
@@ -237,7 +237,7 @@ var byDocId = function byDocId() {
237
237
  case REVOKE_GROUP:
238
238
  case REVOKE_RECIPIENT:
239
239
  case UPDATE_SHARING:
240
- if (!isSharingADrive(action.sharing) && areAllRecipientsRevoked(action.sharing)) {
240
+ if (areAllRecipientsRevoked(action.sharing)) {
241
241
  return forgetSharing(state, action.sharing);
242
242
  }
243
243
 
@@ -337,7 +337,7 @@ var sharings = function sharings() {
337
337
  case UPDATE_SHARING:
338
338
  case REVOKE_GROUP:
339
339
  case REVOKE_RECIPIENT:
340
- if (!isSharingADrive(action.sharing) && areAllRecipientsRevoked(action.sharing)) {
340
+ if (areAllRecipientsRevoked(action.sharing)) {
341
341
  return state.filter(function (s) {
342
342
  return s.id !== action.sharing.id;
343
343
  });
@@ -374,7 +374,8 @@ var sharedPaths = function sharedPaths() {
374
374
 
375
375
  case REVOKE_GROUP:
376
376
  case REVOKE_RECIPIENT:
377
- if (!isSharingADrive(action.sharing) && areAllRecipientsRevoked(action.sharing)) {
377
+ case UPDATE_SHARING:
378
+ if (areAllRecipientsRevoked(action.sharing)) {
378
379
  return state.filter(function (p) {
379
380
  return p !== action.path;
380
381
  });
@@ -435,7 +436,7 @@ export var canReshare = function canReshare(state, docId, instanceUri) {
435
436
  var me = sharing.attributes.members.find(matchingInstanceName(instanceUri));
436
437
 
437
438
  if (sharing.drive) {
438
- return me && !me.read_only;
439
+ return !sharing.org_drive && me && !me.read_only;
439
440
  } else {
440
441
  return sharing.attributes.open_sharing === true && me && !me.read_only;
441
442
  }
@@ -4,7 +4,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
4
4
 
5
5
  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; }
6
6
 
7
- import reducer, { receiveSharings, addSharing, addSharingLink, updateSharingLink, revokeSharingLink, getRecipients, getRecipientsFromSharing, revokeRecipient, revokeSelf, updateSharing, matchingInstanceName, getSharingLink, hasSharedParent, hasSharedChild, getSharedDocIdsBySharings, getSharingType, getPermissionDocIds, getDocumentSharingType, getSharedParentPath, getExternalSharingIds, getRecipientsWithGroups } from './state';
7
+ import reducer, { receiveSharings, addSharing, addSharingLink, updateSharingLink, revokeSharingLink, getRecipients, getRecipientsFromSharing, revokeGroup, revokeRecipient, revokeSelf, updateSharing, matchingInstanceName, getSharingLink, hasSharedParent, hasSharedChild, getSharedDocIdsBySharings, getSharingType, getPermissionDocIds, getDocumentSharingType, getSharedParentPath, getExternalSharingIds, getRecipientsWithGroups } from './state';
8
8
  import { SHARING_1, SHARING_2, SHARING_3, SHARING_READ_ONLY, PERM_1, PERM_2, PERM_WITHOUT_DOC, SHARING_NO_ACTIVE, SHARING_WITH_SHORTCUT, APPS } from '../__tests__/fixtures';
9
9
  describe('Sharing state', function () {
10
10
  it('should have a default state', function () {
@@ -106,7 +106,7 @@ describe('Sharing state', function () {
106
106
  });
107
107
  expect(state.sharings).toEqual([SHARING_1, SHARED_DRIVE_WITHOUT_RECIPIENTS]);
108
108
  });
109
- it('should not forget shared drives without recipients when updating', function () {
109
+ it('should forget shared drives without recipients when updating', function () {
110
110
  var SHARED_DRIVE_WITHOUT_RECIPIENTS = _objectSpread(_objectSpread({}, SHARING_1), {}, {
111
111
  id: 'shared_drive_no_recipients',
112
112
  attributes: _objectSpread(_objectSpread({}, SHARING_1.attributes), {}, {
@@ -139,15 +139,45 @@ describe('Sharing state', function () {
139
139
  });
140
140
 
141
141
  var state = reducer(initialState, updateSharing(updatedSharing));
142
- expect(state.byDocId).toEqual({
143
- shared_drive_folder: {
144
- sharings: [SHARED_DRIVE_WITHOUT_RECIPIENTS.id],
145
- permissions: []
146
- }
147
- });
148
- expect(state.sharings).toEqual([updatedSharing]);
142
+ expect(state.byDocId).toEqual({});
143
+ expect(state.sharings).toEqual([]);
149
144
  });
150
- it('should not remove shared drive path when revoking last recipient', function () {
145
+ it('should forget a shared drive when revoking its last group', function () {
146
+ var SHARED_DRIVE_WITH_GROUP = _objectSpread(_objectSpread({}, SHARING_1), {}, {
147
+ id: 'shared_drive_group',
148
+ attributes: _objectSpread(_objectSpread({}, SHARING_1.attributes), {}, {
149
+ drive: true,
150
+ members: [{
151
+ status: 'owner',
152
+ name: 'Jane Doe',
153
+ email: 'jane@doe.com',
154
+ instance: 'http://cozy.tools:8080'
155
+ }],
156
+ groups: [{
157
+ name: 'Last group',
158
+ addedBy: 0
159
+ }],
160
+ rules: [{
161
+ title: 'My Shared Drive',
162
+ doctype: 'io.cozy.files',
163
+ values: ['shared_drive_group_folder'],
164
+ add: 'sync',
165
+ update: 'sync',
166
+ remove: 'sync'
167
+ }]
168
+ })
169
+ });
170
+
171
+ var sharedDrivePath = '/shared_drive_group_folder';
172
+ var initialState = reducer(reducer(undefined, receiveSharings({
173
+ sharings: [SHARED_DRIVE_WITH_GROUP]
174
+ })), addSharing(SHARED_DRIVE_WITH_GROUP, sharedDrivePath));
175
+ var state = reducer(initialState, revokeGroup(SHARED_DRIVE_WITH_GROUP, 0, sharedDrivePath));
176
+ expect(state.byDocId).toEqual({});
177
+ expect(state.sharings).toEqual([]);
178
+ expect(state.sharedPaths).toEqual([]);
179
+ });
180
+ it('should forget a shared drive when revoking last recipient', function () {
151
181
  var SHARED_DRIVE_WITH_ONE_RECIPIENT = _objectSpread(_objectSpread({}, SHARING_1), {}, {
152
182
  id: 'shared_drive_one_recipient',
153
183
  attributes: _objectSpread(_objectSpread({}, SHARING_1.attributes), {}, {
@@ -178,23 +208,10 @@ describe('Sharing state', function () {
178
208
  var initialState = reducer(reducer(undefined, receiveSharings({
179
209
  sharings: [SHARED_DRIVE_WITH_ONE_RECIPIENT]
180
210
  })), addSharing(SHARED_DRIVE_WITH_ONE_RECIPIENT, sharedDrivePath));
181
-
182
- var sharingAfterRevoke = _objectSpread(_objectSpread({}, SHARED_DRIVE_WITH_ONE_RECIPIENT), {}, {
183
- attributes: _objectSpread(_objectSpread({}, SHARED_DRIVE_WITH_ONE_RECIPIENT.attributes), {}, {
184
- members: [SHARED_DRIVE_WITH_ONE_RECIPIENT.attributes.members[0], _objectSpread(_objectSpread({}, SHARED_DRIVE_WITH_ONE_RECIPIENT.attributes.members[1]), {}, {
185
- status: 'revoked'
186
- })]
187
- })
188
- });
189
-
190
- var state = reducer(initialState, revokeRecipient(sharingAfterRevoke, 1, sharedDrivePath));
191
- expect(state.sharedPaths).toContain(sharedDrivePath);
192
- expect(state.byDocId).toEqual({
193
- shared_drive_folder: {
194
- sharings: [SHARED_DRIVE_WITH_ONE_RECIPIENT.id],
195
- permissions: []
196
- }
197
- });
211
+ var state = reducer(initialState, revokeRecipient(SHARED_DRIVE_WITH_ONE_RECIPIENT, 1, sharedDrivePath));
212
+ expect(state.byDocId).toEqual({});
213
+ expect(state.sharings).toEqual([]);
214
+ expect(state.sharedPaths).toEqual([]);
198
215
  });
199
216
  it('should index received permissions', function () {
200
217
  var state = reducer(undefined, receiveSharings({
@@ -74,24 +74,3 @@
74
74
  input[type=text]
75
75
  width 100%
76
76
 
77
- .share-details-created
78
- .share-details-perm
79
- font-size 1rem
80
- margin 0.5rem 0 0.5rem 3.5rem
81
- padding-left 1.5rem
82
- background-position 0 center
83
- background-repeat no-repeat
84
-
85
- .share-details-created
86
- background-image embedurl('../assets/icons/icon-calendar-16.svg')
87
-
88
- .share-details-perm
89
- background-image embedurl('../assets/icons/icon-pen-16.svg')
90
- margin-bottom .2rem
91
-
92
- .share-details-perm-desc
93
- font-size .875rem
94
- margin 0 0 0.5rem 3.5rem
95
- padding-left 1.5rem
96
- line-height 1.5
97
- color var(--secondaryTextColor)
@@ -339,28 +339,6 @@
339
339
  input[type=text] {
340
340
  width: 100%;
341
341
  }
342
- .share__share-details-created___z3nvO,
343
- .share__share-details-perm___3HjxK {
344
- font-size: 1rem;
345
- margin: 0.5rem 0 0.5rem 3.5rem;
346
- padding-left: 1.5rem;
347
- background-position: 0 center;
348
- background-repeat: no-repeat;
349
- }
350
- .share__share-details-created___z3nvO {
351
- background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iMTZweCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIyNC4wMDAwMDAsIC0xOTIuMDAwMDAwKSI+CiAgICAgICAgPGcgaWQ9InNsaWNlcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuMDAwMDAwLCAzMi4wMDAwMDApIj48L2c+CiAgICAgICAgPHBhdGggZD0iTTIzNywxOTMgTDI0MCwxOTMgTDI0MCwxOTUgTDIyNCwxOTUgTDIyNCwxOTMgTDIyNywxOTMgTDIyNywxOTIgTDIyOSwxOTIgTDIyOSwxOTMgTDIzNSwxOTMgTDIzNSwxOTIgTDIzNywxOTIgTDIzNywxOTMgWiBNMjI0LDE5NiBMMjQwLDE5NiBMMjQwLDIwNi45OTc1MjcgQzI0MCwyMDcuNTUxMTc3IDIzOS41NTUzNjksMjA4IDIzOC45OTkxMjgsMjA4IEwyMjUuMDAwODcyLDIwOCBDMjI0LjQ0ODEwNiwyMDggMjI0LDIwNy41NDQyMzkgMjI0LDIwNi45OTc1MjcgTDIyNCwxOTYgWiBNMjI2LDE5OCBMMjI2LDIwNiBMMjM4LDIwNiBMMjM4LDE5OCBMMjI2LDE5OCBaIE0yMzIsMjAxIEwyMzcsMjAxIEwyMzcsMjA1IEwyMzIsMjA1IEwyMzIsMjAxIFoiIGlkPSJjYWxlbmRhciIgZmlsbD0iIzk1OTk5RCI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=");
352
- }
353
- .share__share-details-perm___3HjxK {
354
- background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBmaWxsPSIjOTU5OTlEIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMDEuNSw5OS41IEwxOTIsMTA5LjAyNTM5MSBMMTkyLDExMiBMMTk1LjAzNzcyLDExMiBMMjA0LjUsMTAyLjUgTDIwMS41LDk5LjUgWiBNMjA2LjkxMjE1NCw5Ni45MTIxNTQxIEMyMDYuMTMyMjQzLDk2LjEzMjI0MjkgMjA0Ljg2OTE0NCw5Ni4xMzA4NTU2IDIwNC4wODkyNjQsOTYuOTEwNzM2MSBMMjAzLDk4IEwyMDYuMDMwNzYyLDEwMSBMMjA3LjA5MjI3MSw5OS45MjUyNjYzIEMyMDcuODY5NzM4LDk5LjEzODExMzQgMjA3Ljg2Mzc3Nyw5Ny44NjM3NzcyIDIwNy4wODc4NDYsOTcuMDg3ODQ1OSBMMjA2LjkxMjE1NCw5Ni45MTIxNTQxIFogTTE5OSwxMTAgTDIwNC45OTcwNzEsMTEwIEMyMDUuNTUwOTczLDExMCAyMDYsMTEwLjQ0Mzg2NSAyMDYsMTExIEMyMDYsMTExLjU1MjI4NSAyMDUuNTUzNjg5LDExMiAyMDUuMDAyNDU1LDExMiBMMTk3LDExMiBMMTk5LDExMCBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTkyIC05NikiLz4KPC9zdmc+Cg==");
355
- margin-bottom: 0.2rem;
356
- }
357
- .share__share-details-perm-desc___3HyHu {
358
- font-size: 0.875rem;
359
- margin: 0 0 0.5rem 3.5rem;
360
- padding-left: 1.5rem;
361
- line-height: 1.5;
362
- color: var(--secondaryTextColor);
363
- }
364
342
  /* imported from autosuggest.styl */
365
343
 
366
344
  .autosuggest__container___1Yro7 {
package/locales/en.json CHANGED
@@ -23,8 +23,7 @@
23
23
  "you": "You",
24
24
  "anyoneWithTheLink": "Anyone with the link",
25
25
  "linkWithPassword": "Anyone with a password",
26
- "expires": "Until %{date}",
27
- "accessCount": "%{count} people have access"
26
+ "expires": "Until %{date}"
28
27
  },
29
28
  "create-cozy": "Create |||| Create my Twake",
30
29
  "members": {
package/locales/fr.json CHANGED
@@ -23,8 +23,7 @@
23
23
  "you": "Vous",
24
24
  "anyoneWithTheLink": "Tous les utilisateurs qui ont le lien",
25
25
  "linkWithPassword": "Tous les utilisateurs avec le mot de passe",
26
- "expires": "Jusqu'au %{date}",
27
- "accessCount": "%{count} personnes y ont accès"
26
+ "expires": "Jusqu'au %{date}"
28
27
  },
29
28
  "create-cozy": "Créer |||| Créer mon Twake",
30
29
  "members": {
package/locales/ru.json CHANGED
@@ -23,8 +23,7 @@
23
23
  "you": "Вы",
24
24
  "anyoneWithTheLink": "Любой, у кого есть ссылка",
25
25
  "linkWithPassword": "Любой с паролем",
26
- "expires": "До %{date}",
27
- "accessCount": "%{count} человек имеют доступ"
26
+ "expires": "До %{date}"
28
27
  },
29
28
  "create-cozy": "Создать |||| Создать мой Twake",
30
29
  "members": {
package/locales/vi.json CHANGED
@@ -23,8 +23,7 @@
23
23
  "you": "Bạn",
24
24
  "anyoneWithTheLink": "Bất kỳ ai có liên kết",
25
25
  "linkWithPassword": "Bất kỳ ai có mật khẩu",
26
- "expires": "Cho đến %{date}",
27
- "accessCount": "%{count} người có quyền truy cập"
26
+ "expires": "Cho đến %{date}"
28
27
  },
29
28
  "create-cozy": "Tạo |||| Tạo Twake của tôi",
30
29
  "members": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cozy-sharing",
3
- "version": "33.5.1",
3
+ "version": "33.6.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": "15b85b5aef628416e919342a040ec758783473f0"
86
+ "gitHead": "10aa2298384087fd396bbfce29c1198d80244361"
87
87
  }