cozy-sharing 11.0.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/components/Avatar/GroupAvatar.js +13 -0
  3. package/dist/components/Avatar/GroupAvatar.stories.js +10 -0
  4. package/dist/components/Avatar/MemberAvatar.js +20 -1
  5. package/dist/components/Recipient/GroupRecipient.js +49 -0
  6. package/dist/components/Recipient/GroupRecipient.stories.js +41 -0
  7. package/dist/components/Recipient/GroupRecipientPermissions.js +71 -0
  8. package/dist/components/Recipient/GroupRecipientPermissions.stories.js +37 -0
  9. package/dist/components/Recipient/MemberRecipient.stories.js +11 -1
  10. package/dist/components/Recipient/MemberRecipientPermissions.js +31 -40
  11. package/dist/components/Recipient/MemberRecipientPermissions.stories.js +30 -4
  12. package/dist/components/Recipient/RecipientList.js +16 -1
  13. package/dist/components/Recipient/RecipientList.stories.js +28 -0
  14. package/dist/components/Recipient/actions/permission.js +33 -0
  15. package/dist/components/Recipient/actions/revokeGroup.js +41 -0
  16. package/dist/components/Recipient/actions/revokeMember.js +41 -0
  17. package/dist/components/ShareByEmail.js +8 -29
  18. package/dist/components/ShareByEmail.spec.js +1 -1
  19. package/dist/components/ShareDialogCozyToCozy.js +2 -2
  20. package/dist/components/ShareDialogCozyToCozy.spec.js +1 -1
  21. package/dist/components/ShareDialogTwoStepsConfirmationContainer.js +2 -2
  22. package/dist/components/ShareDialogTwoStepsConfirmationContainer.spec.js +1 -1
  23. package/dist/components/ShareModal/EditableSharingModal.js +43 -42
  24. package/dist/components/ShareModal/EditableSharingModal.spec.js +2 -2
  25. package/dist/components/ShareModal.js +4 -4
  26. package/dist/components/ShareRecipientsInput.js +7 -7
  27. package/dist/components/ShareRecipientsInput.spec.js +2 -2
  28. package/dist/helpers/recipients.js +38 -0
  29. package/dist/helpers/successMessage.spec.js +1 -1
  30. package/dist/propTypes.js +1 -1
  31. package/dist/queries/queries.js +1 -1
  32. package/dist/state.js +58 -2
  33. package/dist/state.spec.js +190 -10
  34. package/locales/en.json +24 -30
  35. package/locales/fr.json +24 -30
  36. package/package.json +2 -2
  37. package/src/components/Avatar/GroupAvatar.jsx +10 -0
  38. package/src/components/Avatar/GroupAvatar.stories.jsx +13 -0
  39. package/src/components/Avatar/MemberAvatar.jsx +11 -0
  40. package/src/components/Recipient/GroupRecipient.jsx +56 -0
  41. package/src/components/Recipient/GroupRecipient.stories.jsx +38 -0
  42. package/src/components/Recipient/GroupRecipientPermissions.jsx +77 -0
  43. package/src/components/Recipient/GroupRecipientPermissions.stories.jsx +41 -0
  44. package/src/components/Recipient/MemberRecipient.stories.jsx +12 -1
  45. package/src/components/Recipient/MemberRecipientPermissions.jsx +37 -53
  46. package/src/components/Recipient/MemberRecipientPermissions.stories.jsx +31 -4
  47. package/src/components/Recipient/RecipientList.jsx +18 -1
  48. package/src/components/Recipient/RecipientList.stories.jsx +34 -0
  49. package/src/components/Recipient/actions/permission.js +31 -0
  50. package/src/components/Recipient/actions/revokeGroup.js +39 -0
  51. package/src/components/Recipient/actions/revokeMember.js +39 -0
  52. package/src/components/ShareByEmail.jsx +14 -32
  53. package/src/components/ShareByEmail.spec.jsx +1 -1
  54. package/src/components/ShareDialogCozyToCozy.jsx +2 -2
  55. package/src/components/ShareDialogCozyToCozy.spec.jsx +1 -1
  56. package/src/components/ShareDialogTwoStepsConfirmationContainer.jsx +2 -2
  57. package/src/components/ShareDialogTwoStepsConfirmationContainer.spec.jsx +1 -1
  58. package/src/components/ShareModal/EditableSharingModal.jsx +48 -46
  59. package/src/components/ShareModal/EditableSharingModal.spec.jsx +1 -1
  60. package/src/components/ShareModal.jsx +4 -4
  61. package/src/components/ShareRecipientsInput.jsx +9 -9
  62. package/src/components/ShareRecipientsInput.spec.jsx +2 -2
  63. package/src/helpers/recipients.js +45 -0
  64. package/src/helpers/successMessage.spec.js +1 -1
  65. package/src/propTypes.js +1 -1
  66. package/src/queries/queries.js +1 -1
  67. package/src/state.js +53 -2
  68. package/src/state.spec.js +230 -9
package/CHANGELOG.md CHANGED
@@ -3,6 +3,31 @@
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
+ # [11.1.0](https://github.com/cozy/cozy-libs/compare/cozy-sharing@11.0.1...cozy-sharing@11.1.0) (2024-03-21)
7
+
8
+
9
+ ### Features
10
+
11
+ * Add groups to recipients ([4be590d](https://github.com/cozy/cozy-libs/commit/4be590d8280fe9198fb56d32d2ff55665864e746))
12
+ * Add groups to recipients if flag ([4ac2199](https://github.com/cozy/cozy-libs/commit/4ac21990174d1312ee8d5b452e524db6c53429a9))
13
+ * Extract logic from onRecipientPick to an helper ([2d08da1](https://github.com/cozy/cozy-libs/commit/2d08da1fb5a767819d8d89bd3e59f8d9927cceea))
14
+ * **RecipientList:** Show recipient groups ([60d155c](https://github.com/cozy/cozy-libs/commit/60d155c53702782863a777c649e786deeb64a314))
15
+
16
+
17
+
18
+
19
+
20
+ ## [11.0.1](https://github.com/cozy/cozy-libs/compare/cozy-sharing@11.0.0...cozy-sharing@11.0.1) (2024-03-12)
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * **sharing:** Handle memory leak in self removal ([f9a9384](https://github.com/cozy/cozy-libs/commit/f9a9384fabb8892e35be0a270452ee501bd6b1a6))
26
+
27
+
28
+
29
+
30
+
6
31
  # [11.0.0](https://github.com/cozy/cozy-libs/compare/cozy-sharing@10.4.1...cozy-sharing@11.0.0) (2024-03-11)
7
32
 
8
33
 
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import Avatar from 'cozy-ui/transpiled/react/Avatar';
3
+ import TeamIcon from 'cozy-ui/transpiled/react/Icons/Team';
4
+
5
+ var GroupAvatar = function GroupAvatar(_ref) {
6
+ var size = _ref.size;
7
+ return /*#__PURE__*/React.createElement(Avatar, {
8
+ icon: TeamIcon,
9
+ size: size
10
+ });
11
+ };
12
+
13
+ export { GroupAvatar };
@@ -0,0 +1,10 @@
1
+ import { GroupAvatar } from './GroupAvatar';
2
+ var meta = {
3
+ component: GroupAvatar,
4
+ args: {}
5
+ };
6
+ export default meta;
7
+ export var Default = {
8
+ name: 'Default',
9
+ args: {}
10
+ };
@@ -1,16 +1,34 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
4
  var _excluded = ["recipient"];
5
+
6
+ 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; }
7
+
8
+ 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; }
9
+
4
10
  import React from 'react';
5
11
  import { useClient } from 'cozy-client';
6
12
  import Avatar from 'cozy-ui/transpiled/react/Avatar';
7
13
  import { getDisplayName, getInitials } from '../../models';
14
+ import logger from '../../logger';
8
15
 
9
16
  var MemberAvatar = function MemberAvatar(_ref) {
10
17
  var recipient = _ref.recipient,
11
18
  rest = _objectWithoutProperties(_ref, _excluded);
12
19
 
13
- var client = useClient();
20
+ var client = useClient(); // There are cases when due to apparent memory leaks, the recipient does not exist
21
+ // This will trigger an unhanded error in the Avatar component and crash the app
22
+ // At the moment, we are not sure where is the root cause of this cascading undefined props
23
+ // Nevertheless, we can prevent the crash by returning null if the recipient is undefined
24
+
25
+ if (!recipient) {
26
+ // eslint-disable-next-line
27
+ logger.warn('RecipientAvatar: recipient is missing, see props:', _objectSpread({
28
+ recipient: recipient
29
+ }, rest));
30
+ return null;
31
+ }
14
32
  /**
15
33
  * avatarPath is always the same for a recipient, but image
16
34
  * can be different since the stack generate it on the fly.
@@ -21,6 +39,7 @@ var MemberAvatar = function MemberAvatar(_ref) {
21
39
  * status changes
22
40
  */
23
41
 
42
+
24
43
  var image = recipient.avatarPath && recipient.status ? "".concat(client.options.uri).concat(recipient.avatarPath, "?v=").concat(recipient.status) : null;
25
44
  return /*#__PURE__*/React.createElement(Avatar, _extends({
26
45
  image: image,
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { useClient } from 'cozy-client';
3
+ import Fade from 'cozy-ui/transpiled/react/Fade';
4
+ import ListItem from 'cozy-ui/transpiled/react/ListItem';
5
+ import ListItemIcon from 'cozy-ui/transpiled/react/ListItemIcon';
6
+ import ListItemSecondaryAction from 'cozy-ui/transpiled/react/ListItemSecondaryAction';
7
+ import ListItemText from 'cozy-ui/transpiled/react/ListItemText';
8
+ import Typography from 'cozy-ui/transpiled/react/Typography';
9
+ import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n';
10
+ import { GroupRecipientPermissions } from './GroupRecipientPermissions';
11
+ import { FADE_IN_DURATION } from '../../helpers/recipients';
12
+ import { GroupAvatar } from '../Avatar/GroupAvatar';
13
+
14
+ var GroupRecipient = function GroupRecipient(props) {
15
+ var name = props.name,
16
+ members = props.members,
17
+ fadeIn = props.fadeIn;
18
+
19
+ var _useI18n = useI18n(),
20
+ t = _useI18n.t;
21
+
22
+ var client = useClient();
23
+ var nbMember = members.length;
24
+ var nbMemberReady = members.filter(function (member) {
25
+ return !['revoked', 'mail-not-sent'].includes(member.status);
26
+ }).length;
27
+ var isCurrentInstanceInsideMembers = members.some(function (member) {
28
+ return member.instance === client.options.uri;
29
+ });
30
+ return /*#__PURE__*/React.createElement(Fade, {
31
+ in: true,
32
+ timeout: fadeIn ? FADE_IN_DURATION : 0
33
+ }, /*#__PURE__*/React.createElement(ListItem, {
34
+ disableGutters: true
35
+ }, /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(GroupAvatar, {
36
+ size: "small"
37
+ })), /*#__PURE__*/React.createElement(ListItemText, {
38
+ primary: /*#__PURE__*/React.createElement(Typography, {
39
+ className: "u-ellipsis",
40
+ variant: "body1"
41
+ }, name),
42
+ secondary: t('GroupRecipient.secondary', {
43
+ nbMember: nbMember,
44
+ nbMemberReady: nbMemberReady
45
+ }) + (isCurrentInstanceInsideMembers ? " (".concat(t('GroupRecipient.secondary_you'), ")") : '')
46
+ }), /*#__PURE__*/React.createElement(ListItemSecondaryAction, null, /*#__PURE__*/React.createElement(GroupRecipientPermissions, props))));
47
+ };
48
+
49
+ export { GroupRecipient };
@@ -0,0 +1,41 @@
1
+ import { GroupRecipient } from './GroupRecipient';
2
+ var meta = {
3
+ component: GroupRecipient,
4
+ args: {
5
+ name: 'Family',
6
+ isOwner: true,
7
+ read_only: false,
8
+ members: [{
9
+ status: 'ready'
10
+ }, {
11
+ status: 'mail-not-sent'
12
+ }, {
13
+ status: 'pending'
14
+ }, {
15
+ status: 'revoked'
16
+ }],
17
+ groupIndex: 0
18
+ }
19
+ };
20
+ export default meta;
21
+ export var Default = {
22
+ name: 'Default',
23
+ args: {}
24
+ };
25
+ export var InstanceInsideMembers = {
26
+ name: 'Instance inside members',
27
+ args: {
28
+ isOwner: false,
29
+ instance: 'http://alice.cozy.localhost:8080',
30
+ members: [{
31
+ status: 'ready',
32
+ instance: 'http://alice.cozy.localhost:8080'
33
+ }, {
34
+ status: 'mail-not-sent'
35
+ }, {
36
+ status: 'pending'
37
+ }, {
38
+ status: 'revoked'
39
+ }]
40
+ }
41
+ };
@@ -0,0 +1,71 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import React, { useState, useRef } from 'react';
3
+ import { useClient } from 'cozy-client';
4
+ import ActionsMenu from 'cozy-ui/transpiled/react/ActionsMenu';
5
+ import { makeActions, divider } from 'cozy-ui/transpiled/react/ActionsMenu/Actions';
6
+ import DropdownButton from 'cozy-ui/transpiled/react/DropdownButton';
7
+ import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n';
8
+ import { permission } from './actions/permission';
9
+ import { revokeGroup } from './actions/revokeGroup';
10
+
11
+ var GroupRecipientPermissions = function GroupRecipientPermissions(_ref) {
12
+ var isOwner = _ref.isOwner,
13
+ instance = _ref.instance,
14
+ _ref$read_only = _ref.read_only,
15
+ isReadOnly = _ref$read_only === void 0 ? false : _ref$read_only,
16
+ className = _ref.className;
17
+
18
+ var _useI18n = useI18n(),
19
+ t = _useI18n.t;
20
+
21
+ var buttonRef = useRef();
22
+ var client = useClient();
23
+
24
+ var _useState = useState(false),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ isMenuDisplayed = _useState2[0],
27
+ setMenuDisplayed = _useState2[1];
28
+
29
+ var instanceMatchesClient = instance !== undefined && instance === client.options.uri;
30
+ var shouldShowMenu = instanceMatchesClient && !isOwner || isOwner;
31
+
32
+ var toggleMenu = function toggleMenu() {
33
+ return setMenuDisplayed(!isMenuDisplayed);
34
+ };
35
+
36
+ var hideMenu = function hideMenu() {
37
+ return setMenuDisplayed(false);
38
+ };
39
+
40
+ var handleRevocation = function handleRevocation() {// TODO : Need to be implemented
41
+ };
42
+
43
+ var type = isReadOnly ? 'one-way' : 'two-way';
44
+ var actions = makeActions([permission, divider, revokeGroup], {
45
+ t: t,
46
+ type: type,
47
+ isOwner: isOwner,
48
+ handleRevocation: handleRevocation
49
+ });
50
+ return /*#__PURE__*/React.createElement("div", {
51
+ className: className
52
+ }, shouldShowMenu && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
53
+ ref: buttonRef,
54
+ "aria-controls": "simple-menu",
55
+ "aria-haspopup": "true",
56
+ onClick: toggleMenu,
57
+ textVariant: "body2"
58
+ }, t("Share.type.".concat(type)).toLowerCase()), /*#__PURE__*/React.createElement(ActionsMenu, {
59
+ ref: buttonRef,
60
+ open: isMenuDisplayed,
61
+ actions: actions,
62
+ anchorOrigin: {
63
+ vertical: 'bottom',
64
+ horizontal: 'right'
65
+ },
66
+ autoClose: true,
67
+ onClose: hideMenu
68
+ })));
69
+ };
70
+
71
+ export { GroupRecipientPermissions };
@@ -0,0 +1,37 @@
1
+ import { GroupRecipientPermissions } from './GroupRecipientPermissions';
2
+ var meta = {
3
+ component: GroupRecipientPermissions,
4
+ args: {
5
+ onRevoke: function onRevoke() {},
6
+ onRevokeSelf: function onRevokeSelf() {},
7
+ type: 'two-way',
8
+ status: 'ready',
9
+ groupIndex: 0
10
+ },
11
+ argTypes: {
12
+ status: {
13
+ control: 'select',
14
+ options: ['ready', 'mail-not-sent', 'pending', 'seen', 'owner'],
15
+ defaultValue: 'ready'
16
+ },
17
+ type: {
18
+ control: 'select',
19
+ options: ['one-way', 'two-way'],
20
+ defaultValue: 'two-way'
21
+ }
22
+ }
23
+ };
24
+ export default meta;
25
+ export var Owner = {
26
+ name: 'Owner',
27
+ args: {
28
+ isOwner: true
29
+ }
30
+ };
31
+ export var Self = {
32
+ name: 'Self',
33
+ args: {
34
+ isOwner: false,
35
+ instance: 'http://alice.cozy.localhost:8080'
36
+ }
37
+ };
@@ -7,7 +7,10 @@ var meta = {
7
7
  status: 'ready',
8
8
  recipientConfirmationData: null,
9
9
  verifyRecipient: function verifyRecipient() {},
10
- fadeIn: true
10
+ fadeIn: true,
11
+ type: 'two-way',
12
+ onRevoke: function onRevoke() {},
13
+ onRevokeSelf: function onRevokeSelf() {}
11
14
  },
12
15
  argTypes: {
13
16
  status: {
@@ -29,6 +32,13 @@ export var Owner = {
29
32
  status: 'owner'
30
33
  }
31
34
  };
35
+ export var SameInstance = {
36
+ name: 'SameInstance',
37
+ args: {
38
+ isOwner: false,
39
+ instance: 'http://alice.cozy.localhost:8080'
40
+ }
41
+ };
32
42
  export var RecipientConfirm = {
33
43
  name: 'RecipientConfirm',
34
44
  args: {
@@ -3,15 +3,14 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import React, { useState, useRef, useCallback } from 'react';
5
5
  import { useClient } from 'cozy-client';
6
+ import ActionsMenu from 'cozy-ui/transpiled/react/ActionsMenu';
7
+ import { makeActions, divider } from 'cozy-ui/transpiled/react/ActionsMenu/Actions';
6
8
  import DropdownButton from 'cozy-ui/transpiled/react/DropdownButton';
7
- import Icon from 'cozy-ui/transpiled/react/Icon';
8
- import EyeIcon from 'cozy-ui/transpiled/react/Icons/Eye';
9
- import RenameIcon from 'cozy-ui/transpiled/react/Icons/Rename';
10
- import TrashIcon from 'cozy-ui/transpiled/react/Icons/Trash';
11
9
  import Spinner from 'cozy-ui/transpiled/react/Spinner';
12
10
  import Typography from 'cozy-ui/transpiled/react/Typography';
13
- import ActionMenu, { ActionMenuItem } from 'cozy-ui/transpiled/react/deprecated/ActionMenu';
14
11
  import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n';
12
+ import { permission } from './actions/permission';
13
+ import { revokeMember } from './actions/revokeMember';
15
14
 
16
15
  var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
17
16
  var isOwner = _ref.isOwner,
@@ -19,12 +18,11 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
19
18
  instance = _ref.instance,
20
19
  type = _ref.type,
21
20
  document = _ref.document,
22
- documentType = _ref.documentType,
23
21
  className = _ref.className,
24
22
  onRevoke = _ref.onRevoke,
25
23
  onRevokeSelf = _ref.onRevokeSelf,
26
24
  sharingId = _ref.sharingId,
27
- index = _ref.index;
25
+ memberIndex = _ref.memberIndex;
28
26
 
29
27
  var _useI18n = useI18n(),
30
28
  t = _useI18n.t;
@@ -40,21 +38,21 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
40
38
  var _useState3 = useState(false),
41
39
  _useState4 = _slicedToArray(_useState3, 2),
42
40
  isMenuDisplayed = _useState4[0],
43
- setIsMenuDisplayed = _useState4[1];
41
+ setMenuDisplayed = _useState4[1];
44
42
 
45
43
  var instanceMatchesClient = instance !== undefined && instance === client.options.uri;
46
44
  var contactIsOwner = status === 'owner';
47
45
  var shouldShowMenu = !revoking && !contactIsOwner && (instanceMatchesClient && !isOwner || isOwner);
48
46
 
49
- var showMenu = function showMenu() {
50
- return setIsMenuDisplayed(true);
47
+ var toggleMenu = function toggleMenu() {
48
+ return setMenuDisplayed(!isMenuDisplayed);
51
49
  };
52
50
 
53
51
  var hideMenu = function hideMenu() {
54
- return setIsMenuDisplayed(false);
52
+ return setMenuDisplayed(false);
55
53
  };
56
54
 
57
- var onRevokeClick = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
55
+ var handleRevocation = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
58
56
  return _regeneratorRuntime.wrap(function _callee$(_context) {
59
57
  while (1) switch (_context.prev = _context.next) {
60
58
  case 0:
@@ -66,7 +64,7 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
66
64
  }
67
65
 
68
66
  _context.next = 4;
69
- return onRevoke(document, sharingId, index);
67
+ return onRevoke(document, sharingId, memberIndex);
70
68
 
71
69
  case 4:
72
70
  _context.next = 8;
@@ -84,41 +82,34 @@ var MemberRecipientPermissions = function MemberRecipientPermissions(_ref) {
84
82
  return _context.stop();
85
83
  }
86
84
  }, _callee);
87
- })), [isOwner, onRevoke, onRevokeSelf, document, sharingId, index]);
88
- var PermissionIcon = type === 'two-way' ? RenameIcon : EyeIcon;
85
+ })), [isOwner, onRevoke, onRevokeSelf, document, sharingId, memberIndex]);
86
+ var actions = makeActions([permission, divider, revokeMember], {
87
+ t: t,
88
+ type: type,
89
+ isOwner: isOwner,
90
+ handleRevocation: handleRevocation
91
+ });
89
92
  return /*#__PURE__*/React.createElement("div", {
90
93
  className: className
91
94
  }, revoking && /*#__PURE__*/React.createElement(Spinner, null), !shouldShowMenu && !revoking && /*#__PURE__*/React.createElement(Typography, {
92
95
  variant: "body2"
93
96
  }, t("Share.status.".concat(status)).toLowerCase()), shouldShowMenu && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownButton, {
94
- onClick: showMenu,
95
97
  ref: buttonRef,
98
+ "aria-controls": "simple-menu",
99
+ "aria-haspopup": "true",
100
+ onClick: toggleMenu,
96
101
  textVariant: "body2"
97
- }, t("Share.type.".concat(type)).toLowerCase()), isMenuDisplayed && /*#__PURE__*/React.createElement(ActionMenu, {
98
- onClose: hideMenu,
99
- popperOptions: {
100
- placement: 'bottom-end',
101
- strategy: 'fixed'
102
+ }, t("Share.type.".concat(type)).toLowerCase()), /*#__PURE__*/React.createElement(ActionsMenu, {
103
+ ref: buttonRef,
104
+ open: isMenuDisplayed,
105
+ actions: actions,
106
+ anchorOrigin: {
107
+ vertical: 'bottom',
108
+ horizontal: 'right'
102
109
  },
103
- anchorElRef: buttonRef
104
- }, /*#__PURE__*/React.createElement(ActionMenuItem, {
105
- left: /*#__PURE__*/React.createElement(Icon, {
106
- icon: PermissionIcon,
107
- color: "var(--primaryTextColor)"
108
- })
109
- }, t("Share.type.".concat(type))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement(ActionMenuItem, {
110
- onClick: onRevokeClick,
111
- left: /*#__PURE__*/React.createElement(Icon, {
112
- icon: TrashIcon,
113
- color: "var(--errorColor)"
114
- })
115
- }, /*#__PURE__*/React.createElement(Typography, {
116
- className: "u-error",
117
- variant: "body1"
118
- }, isOwner ? t("".concat(documentType, ".share.revoke.title")) : t("".concat(documentType, ".share.revokeSelf.title"))), /*#__PURE__*/React.createElement(Typography, {
119
- variant: "caption",
120
- color: "textSecondary"
121
- }, isOwner ? t("".concat(documentType, ".share.revoke.desc")) : t("".concat(documentType, ".share.revokeSelf.desc")))))));
110
+ autoClose: true,
111
+ onClose: hideMenu
112
+ })));
122
113
  };
123
114
 
124
115
  export default MemberRecipientPermissions;
@@ -1,10 +1,36 @@
1
1
  import MemberRecipientPermissions from './MemberRecipientPermissions';
2
2
  var meta = {
3
3
  component: MemberRecipientPermissions,
4
- args: {}
4
+ args: {
5
+ onRevoke: function onRevoke() {},
6
+ onRevokeSelf: function onRevokeSelf() {},
7
+ type: 'two-way',
8
+ status: 'ready'
9
+ },
10
+ argTypes: {
11
+ status: {
12
+ control: 'select',
13
+ options: ['ready', 'mail-not-sent', 'pending', 'seen', 'owner'],
14
+ defaultValue: 'ready'
15
+ },
16
+ type: {
17
+ control: 'select',
18
+ options: ['one-way', 'two-way'],
19
+ defaultValue: 'two-way'
20
+ }
21
+ }
5
22
  };
6
23
  export default meta;
7
- export var Default = {
8
- name: 'Default',
9
- args: {}
24
+ export var Owner = {
25
+ name: 'Owner',
26
+ args: {
27
+ isOwner: true
28
+ }
29
+ };
30
+ export var Self = {
31
+ name: 'Self',
32
+ args: {
33
+ isOwner: false,
34
+ instance: 'http://alice.cozy.localhost:8080'
35
+ }
10
36
  };
@@ -1,5 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import React from 'react';
3
+ import { GroupRecipient } from './GroupRecipient';
3
4
  import MemberRecipient from './MemberRecipient';
4
5
  import { usePrevious } from '../../helpers/hooks';
5
6
  import { filterAndReworkRecipients } from '../../helpers/recipients';
@@ -19,8 +20,22 @@ var RecipientList = function RecipientList(_ref) {
19
20
  var recipientConfirmationData = recipientsToBeConfirmed.find(function (user) {
20
21
  return user.email === recipient.email;
21
22
  });
23
+ var isGroupRecipient = recipient.members;
24
+
25
+ if (isGroupRecipient) {
26
+ return /*#__PURE__*/React.createElement(GroupRecipient, _extends({}, recipient, {
27
+ isOwner: isOwner,
28
+ key: recipient.index,
29
+ document: document,
30
+ documentType: documentType,
31
+ onRevoke: onRevoke,
32
+ onRevokeSelf: onRevokeSelf,
33
+ fadeIn: recipient.hasBeenJustAdded
34
+ }));
35
+ }
36
+
22
37
  return /*#__PURE__*/React.createElement(MemberRecipient, _extends({}, recipient, {
23
- key: "key_r_".concat(recipient.index),
38
+ key: recipient.index,
24
39
  isOwner: isOwner,
25
40
  document: document,
26
41
  documentType: documentType,
@@ -1,3 +1,4 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
1
2
  import { RecipientList } from './RecipientList';
2
3
  import { recipients } from '../../../.storybook/fixtures/recipients';
3
4
  var meta = {
@@ -23,4 +24,31 @@ export var Owner = {
23
24
  args: {
24
25
  isOwner: true
25
26
  }
27
+ };
28
+ export var WithGroup = {
29
+ name: 'With group',
30
+ args: {
31
+ recipients: [].concat(_toConsumableArray(recipients), [{
32
+ id: '2c8d4d5abbec5b4606a1ebe01a021dfd',
33
+ name: 'Famille',
34
+ addedBy: 0,
35
+ read_only: false,
36
+ index: 0,
37
+ members: [{
38
+ status: 'pending',
39
+ email: 'ben@gmail.com',
40
+ only_in_groups: true,
41
+ groups: [0],
42
+ type: 'two-way',
43
+ index: 1
44
+ }, {
45
+ status: 'pending',
46
+ email: 'bob@gmail.com',
47
+ only_in_groups: true,
48
+ groups: [0],
49
+ type: 'two-way',
50
+ index: 2
51
+ }]
52
+ }])
53
+ }
26
54
  };
@@ -0,0 +1,33 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { forwardRef } from 'react';
3
+ import ActionsMenuItem from 'cozy-ui/transpiled/react/ActionsMenu/ActionsMenuItem';
4
+ import Icon from 'cozy-ui/transpiled/react/Icon';
5
+ import EyeIcon from 'cozy-ui/transpiled/react/Icons/Eye';
6
+ import RenameIcon from 'cozy-ui/transpiled/react/Icons/Rename';
7
+ import ListItemIcon from 'cozy-ui/transpiled/react/ListItemIcon';
8
+ import ListItemText from 'cozy-ui/transpiled/react/ListItemText';
9
+
10
+ var permission = function permission(_ref) {
11
+ var t = _ref.t,
12
+ type = _ref.type;
13
+ var title = t("Share.type.".concat(type));
14
+ var icon = type === 'two-way' ? RenameIcon : EyeIcon;
15
+ return {
16
+ name: 'permission',
17
+ label: title,
18
+ icon: icon,
19
+ action: null,
20
+ Component: /*#__PURE__*/forwardRef(function RevokeItem(props, ref) {
21
+ return /*#__PURE__*/React.createElement(ActionsMenuItem, _extends({}, props, {
22
+ ref: ref,
23
+ button: false
24
+ }), /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(Icon, {
25
+ icon: icon
26
+ })), /*#__PURE__*/React.createElement(ListItemText, {
27
+ primary: title
28
+ }));
29
+ })
30
+ };
31
+ };
32
+
33
+ export { permission };
@@ -0,0 +1,41 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { forwardRef } from 'react';
3
+ import ActionsMenuItem from 'cozy-ui/transpiled/react/ActionsMenu/ActionsMenuItem';
4
+ import Icon from 'cozy-ui/transpiled/react/Icon';
5
+ import ForbiddenIcon from 'cozy-ui/transpiled/react/Icons/Forbidden';
6
+ import ListItemIcon from 'cozy-ui/transpiled/react/ListItemIcon';
7
+ import ListItemText from 'cozy-ui/transpiled/react/ListItemText';
8
+ import Typography from 'cozy-ui/transpiled/react/Typography';
9
+
10
+ var revokeGroup = function revokeGroup(_ref) {
11
+ var t = _ref.t,
12
+ isOwner = _ref.isOwner,
13
+ handleRevocation = _ref.handleRevocation;
14
+ var revokeType = isOwner ? 'revoke' : 'revokeSelf';
15
+ var title = t("RevokeGroupItem.".concat(revokeType, ".title"));
16
+ var desc = t("RevokeGroupItem.".concat(revokeType, ".desc"));
17
+ var icon = ForbiddenIcon;
18
+ return {
19
+ name: 'revokeMember',
20
+ label: title,
21
+ icon: icon,
22
+ action: function action() {
23
+ handleRevocation();
24
+ },
25
+ Component: /*#__PURE__*/forwardRef(function RevokeMemberItem(props, ref) {
26
+ return /*#__PURE__*/React.createElement(ActionsMenuItem, _extends({}, props, {
27
+ ref: ref
28
+ }), /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(Icon, {
29
+ icon: icon,
30
+ color: "var(--errorColor)"
31
+ })), /*#__PURE__*/React.createElement(ListItemText, {
32
+ primary: /*#__PURE__*/React.createElement(Typography, {
33
+ color: "error"
34
+ }, title),
35
+ secondary: desc
36
+ }));
37
+ })
38
+ };
39
+ };
40
+
41
+ export { revokeGroup };