@selfcommunity/react-ui 0.7.9-alpha.0 → 0.7.9-alpha.2

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 (174) hide show
  1. package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.d.ts +55 -0
  2. package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.js +117 -0
  3. package/lib/cjs/components/ChangeGroupCover/constants.d.ts +1 -0
  4. package/lib/cjs/components/ChangeGroupCover/constants.js +4 -0
  5. package/lib/cjs/components/ChangeGroupCover/index.d.ts +3 -0
  6. package/lib/cjs/components/ChangeGroupCover/index.js +5 -0
  7. package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.d.ts +57 -0
  8. package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +117 -0
  9. package/lib/cjs/components/ChangeGroupPicture/constants.d.ts +1 -0
  10. package/lib/cjs/components/ChangeGroupPicture/constants.js +4 -0
  11. package/lib/cjs/components/ChangeGroupPicture/index.d.ts +3 -0
  12. package/lib/cjs/components/ChangeGroupPicture/index.js +5 -0
  13. package/lib/cjs/components/CreateGroup/CreateGroup.d.ts +48 -0
  14. package/lib/cjs/components/CreateGroup/CreateGroup.js +187 -0
  15. package/lib/cjs/components/CreateGroup/constants.d.ts +1 -0
  16. package/lib/cjs/components/CreateGroup/constants.js +4 -0
  17. package/lib/cjs/components/CreateGroup/index.d.ts +3 -0
  18. package/lib/cjs/components/CreateGroup/index.js +5 -0
  19. package/lib/cjs/components/CreateGroupButton/CreateGroupButton.d.ts +38 -0
  20. package/lib/cjs/components/CreateGroupButton/CreateGroupButton.js +73 -0
  21. package/lib/cjs/components/CreateGroupButton/index.d.ts +3 -0
  22. package/lib/cjs/components/CreateGroupButton/index.js +5 -0
  23. package/lib/cjs/components/Group/Group.d.ts +67 -0
  24. package/lib/cjs/components/Group/Group.js +96 -0
  25. package/lib/cjs/components/Group/Skeleton.d.ts +22 -0
  26. package/lib/cjs/components/Group/Skeleton.js +42 -0
  27. package/lib/cjs/components/Group/constants.d.ts +1 -0
  28. package/lib/cjs/components/Group/constants.js +4 -0
  29. package/lib/cjs/components/Group/index.d.ts +4 -0
  30. package/lib/cjs/components/Group/index.js +8 -0
  31. package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +83 -0
  32. package/lib/cjs/components/GroupHeader/GroupHeader.js +137 -0
  33. package/lib/cjs/components/GroupHeader/Skeleton.d.ts +27 -0
  34. package/lib/cjs/components/GroupHeader/Skeleton.js +56 -0
  35. package/lib/cjs/components/GroupHeader/constants.d.ts +1 -0
  36. package/lib/cjs/components/GroupHeader/constants.js +4 -0
  37. package/lib/cjs/components/GroupHeader/index.d.ts +4 -0
  38. package/lib/cjs/components/GroupHeader/index.js +8 -0
  39. package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.d.ts +52 -0
  40. package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.js +100 -0
  41. package/lib/cjs/components/GroupInfoWidget/Skeleton.d.ts +21 -0
  42. package/lib/cjs/components/GroupInfoWidget/Skeleton.js +38 -0
  43. package/lib/cjs/components/GroupInfoWidget/constants.d.ts +1 -0
  44. package/lib/cjs/components/GroupInfoWidget/constants.js +4 -0
  45. package/lib/cjs/components/GroupInfoWidget/index.d.ts +4 -0
  46. package/lib/cjs/components/GroupInfoWidget/index.js +8 -0
  47. package/lib/cjs/components/GroupInviteButton/GroupInviteButton.d.ts +57 -0
  48. package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +259 -0
  49. package/lib/cjs/components/GroupInviteButton/index.d.ts +3 -0
  50. package/lib/cjs/components/GroupInviteButton/index.js +5 -0
  51. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +46 -0
  52. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +135 -0
  53. package/lib/cjs/components/GroupMembersButton/index.d.ts +3 -0
  54. package/lib/cjs/components/GroupMembersButton/index.js +5 -0
  55. package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.d.ts +79 -0
  56. package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +194 -0
  57. package/lib/cjs/components/GroupMembersWidget/Skeleton.d.ts +22 -0
  58. package/lib/cjs/components/GroupMembersWidget/Skeleton.js +38 -0
  59. package/lib/cjs/components/GroupMembersWidget/constants.d.ts +1 -0
  60. package/lib/cjs/components/GroupMembersWidget/constants.js +4 -0
  61. package/lib/cjs/components/GroupMembersWidget/index.d.ts +4 -0
  62. package/lib/cjs/components/GroupMembersWidget/index.js +8 -0
  63. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +79 -0
  64. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +194 -0
  65. package/lib/cjs/components/GroupRequestsWidget/Skeleton.d.ts +22 -0
  66. package/lib/cjs/components/GroupRequestsWidget/Skeleton.js +38 -0
  67. package/lib/cjs/components/GroupRequestsWidget/constants.d.ts +1 -0
  68. package/lib/cjs/components/GroupRequestsWidget/constants.js +4 -0
  69. package/lib/cjs/components/GroupRequestsWidget/index.d.ts +4 -0
  70. package/lib/cjs/components/GroupRequestsWidget/index.js +8 -0
  71. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +51 -0
  72. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +117 -0
  73. package/lib/cjs/components/GroupSubscribeButton/index.d.ts +3 -0
  74. package/lib/cjs/components/GroupSubscribeButton/index.js +5 -0
  75. package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.d.ts +4 -0
  76. package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.js +2 -3
  77. package/lib/cjs/components/NavigationMenuIconButton/index.d.ts +2 -1
  78. package/lib/cjs/components/NavigationMenuIconButton/index.js +3 -0
  79. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +5 -0
  80. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -2
  81. package/lib/cjs/components/User/User.d.ts +12 -0
  82. package/lib/cjs/components/User/User.js +5 -3
  83. package/lib/cjs/constants/Group.d.ts +2 -0
  84. package/lib/cjs/constants/Group.js +5 -0
  85. package/lib/cjs/index.d.ts +14 -2
  86. package/lib/cjs/index.js +34 -5
  87. package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.d.ts +55 -0
  88. package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.js +114 -0
  89. package/lib/esm/components/ChangeGroupCover/constants.d.ts +1 -0
  90. package/lib/esm/components/ChangeGroupCover/constants.js +1 -0
  91. package/lib/esm/components/ChangeGroupCover/index.d.ts +3 -0
  92. package/lib/esm/components/ChangeGroupCover/index.js +2 -0
  93. package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.d.ts +57 -0
  94. package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +114 -0
  95. package/lib/esm/components/ChangeGroupPicture/constants.d.ts +1 -0
  96. package/lib/esm/components/ChangeGroupPicture/constants.js +1 -0
  97. package/lib/esm/components/ChangeGroupPicture/index.d.ts +3 -0
  98. package/lib/esm/components/ChangeGroupPicture/index.js +2 -0
  99. package/lib/esm/components/CreateGroup/CreateGroup.d.ts +48 -0
  100. package/lib/esm/components/CreateGroup/CreateGroup.js +184 -0
  101. package/lib/esm/components/CreateGroup/constants.d.ts +1 -0
  102. package/lib/esm/components/CreateGroup/constants.js +1 -0
  103. package/lib/esm/components/CreateGroup/index.d.ts +3 -0
  104. package/lib/esm/components/CreateGroup/index.js +2 -0
  105. package/lib/esm/components/CreateGroupButton/CreateGroupButton.d.ts +38 -0
  106. package/lib/esm/components/CreateGroupButton/CreateGroupButton.js +70 -0
  107. package/lib/esm/components/CreateGroupButton/index.d.ts +3 -0
  108. package/lib/esm/components/CreateGroupButton/index.js +2 -0
  109. package/lib/esm/components/Group/Group.d.ts +67 -0
  110. package/lib/esm/components/Group/Group.js +93 -0
  111. package/lib/esm/components/Group/Skeleton.d.ts +22 -0
  112. package/lib/esm/components/Group/Skeleton.js +38 -0
  113. package/lib/esm/components/Group/constants.d.ts +1 -0
  114. package/lib/esm/components/Group/constants.js +1 -0
  115. package/lib/esm/components/Group/index.d.ts +4 -0
  116. package/lib/esm/components/Group/index.js +4 -0
  117. package/lib/esm/components/GroupHeader/GroupHeader.d.ts +83 -0
  118. package/lib/esm/components/GroupHeader/GroupHeader.js +134 -0
  119. package/lib/esm/components/GroupHeader/Skeleton.d.ts +27 -0
  120. package/lib/esm/components/GroupHeader/Skeleton.js +53 -0
  121. package/lib/esm/components/GroupHeader/constants.d.ts +1 -0
  122. package/lib/esm/components/GroupHeader/constants.js +1 -0
  123. package/lib/esm/components/GroupHeader/index.d.ts +4 -0
  124. package/lib/esm/components/GroupHeader/index.js +4 -0
  125. package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.d.ts +52 -0
  126. package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.js +97 -0
  127. package/lib/esm/components/GroupInfoWidget/Skeleton.d.ts +21 -0
  128. package/lib/esm/components/GroupInfoWidget/Skeleton.js +34 -0
  129. package/lib/esm/components/GroupInfoWidget/constants.d.ts +1 -0
  130. package/lib/esm/components/GroupInfoWidget/constants.js +1 -0
  131. package/lib/esm/components/GroupInfoWidget/index.d.ts +4 -0
  132. package/lib/esm/components/GroupInfoWidget/index.js +4 -0
  133. package/lib/esm/components/GroupInviteButton/GroupInviteButton.d.ts +57 -0
  134. package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +256 -0
  135. package/lib/esm/components/GroupInviteButton/index.d.ts +3 -0
  136. package/lib/esm/components/GroupInviteButton/index.js +2 -0
  137. package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +46 -0
  138. package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +132 -0
  139. package/lib/esm/components/GroupMembersButton/index.d.ts +3 -0
  140. package/lib/esm/components/GroupMembersButton/index.js +2 -0
  141. package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.d.ts +79 -0
  142. package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +191 -0
  143. package/lib/esm/components/GroupMembersWidget/Skeleton.d.ts +22 -0
  144. package/lib/esm/components/GroupMembersWidget/Skeleton.js +34 -0
  145. package/lib/esm/components/GroupMembersWidget/constants.d.ts +1 -0
  146. package/lib/esm/components/GroupMembersWidget/constants.js +1 -0
  147. package/lib/esm/components/GroupMembersWidget/index.d.ts +4 -0
  148. package/lib/esm/components/GroupMembersWidget/index.js +4 -0
  149. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +79 -0
  150. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +191 -0
  151. package/lib/esm/components/GroupRequestsWidget/Skeleton.d.ts +22 -0
  152. package/lib/esm/components/GroupRequestsWidget/Skeleton.js +34 -0
  153. package/lib/esm/components/GroupRequestsWidget/constants.d.ts +1 -0
  154. package/lib/esm/components/GroupRequestsWidget/constants.js +1 -0
  155. package/lib/esm/components/GroupRequestsWidget/index.d.ts +4 -0
  156. package/lib/esm/components/GroupRequestsWidget/index.js +4 -0
  157. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +51 -0
  158. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +114 -0
  159. package/lib/esm/components/GroupSubscribeButton/index.d.ts +3 -0
  160. package/lib/esm/components/GroupSubscribeButton/index.js +2 -0
  161. package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.d.ts +4 -0
  162. package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.js +3 -4
  163. package/lib/esm/components/NavigationMenuIconButton/index.d.ts +2 -1
  164. package/lib/esm/components/NavigationMenuIconButton/index.js +2 -0
  165. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +5 -0
  166. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +3 -3
  167. package/lib/esm/components/User/User.d.ts +12 -0
  168. package/lib/esm/components/User/User.js +5 -3
  169. package/lib/esm/constants/Group.d.ts +2 -0
  170. package/lib/esm/constants/Group.js +2 -0
  171. package/lib/esm/index.d.ts +14 -2
  172. package/lib/esm/index.js +41 -29
  173. package/lib/umd/react-ui.js +1 -1
  174. package/package.json +6 -6
@@ -0,0 +1,55 @@
1
+ export interface ChangeGroupCoverProps {
2
+ /**
3
+ * Id of the group. It is optional only for group creation modal.
4
+ * @default null
5
+ */
6
+ groupId?: number;
7
+ /**
8
+ * On change function.
9
+ * @default null
10
+ */
11
+ onChange?: (cover: any) => void;
12
+ /**
13
+ * Hides this component
14
+ * @default false
15
+ */
16
+ autoHide?: boolean;
17
+ /**
18
+ * Overrides or extends the styles applied to the component.
19
+ * @default null
20
+ */
21
+ className?: string;
22
+ /**
23
+ * Prop to handle cover loading in the create group modal.
24
+ * @default false
25
+ */
26
+ isCreationMode?: boolean;
27
+ /**
28
+ * Any other properties
29
+ */
30
+ [p: string]: any;
31
+ }
32
+ /**
33
+ * > API documentation for the Community-JS Change Group Cover component. Learn about the available props and the CSS API.
34
+ *
35
+ *
36
+ * This component renders a button that allows admins to edit the group cover and a popover that specifies format and sizes allowed.
37
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/ChangeGroupCover)
38
+
39
+ #### Import
40
+ ```jsx
41
+ import {ChangeGroupCover} from '@selfcommunity/react-ui';
42
+ ```
43
+
44
+ #### Component Name
45
+ The name `SCChangeGroupCoverButton` can be used when providing style overrides in the theme.
46
+
47
+ #### CSS
48
+
49
+ |Rule Name|Global class|Description|
50
+ |---|---|---|
51
+ |root|.SCChangeGroupCoverButton-root|Styles applied to the root element.|
52
+
53
+ * @param inProps
54
+ */
55
+ export default function ChangeGroupCover(inProps: ChangeGroupCoverProps): JSX.Element;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const styles_1 = require("@mui/material/styles");
6
+ const material_1 = require("@mui/material");
7
+ const react_core_1 = require("@selfcommunity/react-core");
8
+ const Icon_1 = tslib_1.__importDefault(require("@mui/material/Icon"));
9
+ const react_intl_1 = require("react-intl");
10
+ const classnames_1 = tslib_1.__importDefault(require("classnames"));
11
+ const system_1 = require("@mui/system");
12
+ const constants_1 = require("./constants");
13
+ const lab_1 = require("@mui/lab");
14
+ const api_services_1 = require("@selfcommunity/api-services");
15
+ const Errors_1 = require("../../constants/Errors");
16
+ const utils_1 = require("@selfcommunity/utils");
17
+ const classes = {
18
+ root: `${constants_1.PREFIX}-root`
19
+ };
20
+ const Root = (0, styles_1.styled)(lab_1.LoadingButton, {
21
+ name: constants_1.PREFIX,
22
+ slot: 'Root'
23
+ })(() => ({}));
24
+ const messages = (0, react_intl_1.defineMessages)({
25
+ errorLoadImage: {
26
+ id: 'ui.changeGroupCover.button.change.alertErrorImage',
27
+ defaultMessage: 'ui.changeGroupCover.button.change.alertErrorImage'
28
+ }
29
+ });
30
+ /**
31
+ * > API documentation for the Community-JS Change Group Cover component. Learn about the available props and the CSS API.
32
+ *
33
+ *
34
+ * This component renders a button that allows admins to edit the group cover and a popover that specifies format and sizes allowed.
35
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/ChangeGroupCover)
36
+
37
+ #### Import
38
+ ```jsx
39
+ import {ChangeGroupCover} from '@selfcommunity/react-ui';
40
+ ```
41
+
42
+ #### Component Name
43
+ The name `SCChangeGroupCoverButton` can be used when providing style overrides in the theme.
44
+
45
+ #### CSS
46
+
47
+ |Rule Name|Global class|Description|
48
+ |---|---|---|
49
+ |root|.SCChangeGroupCoverButton-root|Styles applied to the root element.|
50
+
51
+ * @param inProps
52
+ */
53
+ function ChangeGroupCover(inProps) {
54
+ //PROPS
55
+ const props = (0, system_1.useThemeProps)({
56
+ props: inProps,
57
+ name: constants_1.PREFIX
58
+ });
59
+ const { groupId, onChange, autoHide, className, isCreationMode = false } = props, rest = tslib_1.__rest(props, ["groupId", "onChange", "autoHide", "className", "isCreationMode"]);
60
+ //CONTEXT
61
+ const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
62
+ //STATE
63
+ let fileInput = (0, react_1.useRef)(null);
64
+ const [loading, setLoading] = (0, react_1.useState)(false);
65
+ const [alert, setAlert] = (0, react_1.useState)(null);
66
+ // INTL
67
+ const intl = (0, react_intl_1.useIntl)();
68
+ // Anonymous
69
+ if (!scUserContext.user) {
70
+ return null;
71
+ }
72
+ /**
73
+ * Handles file upload
74
+ * @param event
75
+ */
76
+ const handleUpload = (event) => {
77
+ fileInput = event.target.files[0];
78
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
79
+ };
80
+ /**
81
+ * Handles cover saving after upload action
82
+ */
83
+ function handleSave() {
84
+ setLoading(true);
85
+ const formData = new FormData();
86
+ // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
87
+ // @ts-ignore
88
+ formData.append('emotional_image_original', fileInput);
89
+ api_services_1.GroupService.changeGroupAvatarOrCover(groupId, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
90
+ .then((data) => {
91
+ onChange && onChange(data.emotional_image);
92
+ setLoading(false);
93
+ })
94
+ .catch((error) => {
95
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
96
+ setLoading(false);
97
+ setAlert(intl.formatMessage(messages.errorLoadImage));
98
+ });
99
+ }
100
+ /**
101
+ * If there is an error
102
+ */
103
+ if (alert) {
104
+ return (react_1.default.createElement(material_1.Alert, { color: "error", onClose: () => setAlert(null) }, alert));
105
+ }
106
+ /**
107
+ * Renders root object (if not hidden by autoHide prop)
108
+ */
109
+ if (!autoHide) {
110
+ return (react_1.default.createElement(react_1.default.Fragment, null,
111
+ react_1.default.createElement("input", { type: "file", onChange: handleUpload, ref: fileInput, hidden: true, accept: ".gif,.png,.jpg,.jpeg" }),
112
+ react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(classes.root, className), size: "medium", variant: "contained", disabled: loading, onClick: () => fileInput.current.click(), loading: loading }, rest),
113
+ react_1.default.createElement(Icon_1.default, null, "image"))));
114
+ }
115
+ return null;
116
+ }
117
+ exports.default = ChangeGroupCover;
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCChangeGroupCoverButton";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCChangeGroupCoverButton';
@@ -0,0 +1,3 @@
1
+ import ChangeGroupCover, { ChangeGroupCoverProps } from './ChangeGroupCover';
2
+ export default ChangeGroupCover;
3
+ export { ChangeGroupCoverProps };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const ChangeGroupCover_1 = tslib_1.__importDefault(require("./ChangeGroupCover"));
5
+ exports.default = ChangeGroupCover_1.default;
@@ -0,0 +1,57 @@
1
+ export interface ChangeGroupPictureProps {
2
+ /**
3
+ * Id of the group. It is optional only for group creation modal.
4
+ * @default null
5
+ */
6
+ groupId?: number;
7
+ /**
8
+ * On change function.
9
+ * @default null
10
+ */
11
+ onChange?: (cover: any) => void;
12
+ /**
13
+ * Hides this component
14
+ * @default false
15
+ */
16
+ autoHide?: boolean;
17
+ /**
18
+ * Overrides or extends the styles applied to the component.
19
+ * @default null
20
+ */
21
+ className?: string;
22
+ /**
23
+ * Prop to handle avatar loading in the create group modal.
24
+ * @default false
25
+ */
26
+ isCreationMode?: boolean;
27
+ /**
28
+ * Any other properties
29
+ */
30
+ [p: string]: any;
31
+ }
32
+ /**
33
+ * > API documentation for the Community-JS Change Group Picture component. Learn about the available props and the CSS API.
34
+ *
35
+ *
36
+ * This component renders a button that allows admins to manage their group pictures.
37
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/ChangeGroupPicture)
38
+
39
+ #### Import
40
+
41
+ ```jsx
42
+ import {ChangeGroupPicture} from '@selfcommunity/react-ui';
43
+ ```
44
+
45
+ #### Component Name
46
+
47
+ The name `SCChangeGroupPictureButton` can be used when providing style overrides in the theme.
48
+
49
+ #### CSS
50
+
51
+ |Rule Name|Global class|Description|
52
+ |---|---|---|
53
+ |root|.SCChangeGroupPictureButton-root|Styles applied to the root element.|
54
+
55
+ * @param inProps
56
+ */
57
+ export default function ChangeGroupPicture(inProps: ChangeGroupPictureProps): JSX.Element;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const styles_1 = require("@mui/material/styles");
6
+ const material_1 = require("@mui/material");
7
+ const Icon_1 = tslib_1.__importDefault(require("@mui/material/Icon"));
8
+ const react_core_1 = require("@selfcommunity/react-core");
9
+ const classnames_1 = tslib_1.__importDefault(require("classnames"));
10
+ const system_1 = require("@mui/system");
11
+ const constants_1 = require("./constants");
12
+ const Errors_1 = require("../../constants/Errors");
13
+ const api_services_1 = require("@selfcommunity/api-services");
14
+ const utils_1 = require("@selfcommunity/utils");
15
+ const react_intl_1 = require("react-intl");
16
+ const lab_1 = require("@mui/lab");
17
+ const messages = (0, react_intl_1.defineMessages)({
18
+ errorLoadImage: {
19
+ id: 'ui.changeGroupCover.button.change.alertErrorImage',
20
+ defaultMessage: 'ui.changeGroupCover.button.change.alertErrorImage'
21
+ }
22
+ });
23
+ const classes = {
24
+ root: `${constants_1.PREFIX}-root`
25
+ };
26
+ const Root = (0, styles_1.styled)(lab_1.LoadingButton, {
27
+ name: constants_1.PREFIX,
28
+ slot: 'Root'
29
+ })(() => ({}));
30
+ /**
31
+ * > API documentation for the Community-JS Change Group Picture component. Learn about the available props and the CSS API.
32
+ *
33
+ *
34
+ * This component renders a button that allows admins to manage their group pictures.
35
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/ChangeGroupPicture)
36
+
37
+ #### Import
38
+
39
+ ```jsx
40
+ import {ChangeGroupPicture} from '@selfcommunity/react-ui';
41
+ ```
42
+
43
+ #### Component Name
44
+
45
+ The name `SCChangeGroupPictureButton` can be used when providing style overrides in the theme.
46
+
47
+ #### CSS
48
+
49
+ |Rule Name|Global class|Description|
50
+ |---|---|---|
51
+ |root|.SCChangeGroupPictureButton-root|Styles applied to the root element.|
52
+
53
+ * @param inProps
54
+ */
55
+ function ChangeGroupPicture(inProps) {
56
+ //PROPS
57
+ const props = (0, system_1.useThemeProps)({
58
+ props: inProps,
59
+ name: constants_1.PREFIX
60
+ });
61
+ const { groupId, onChange, autoHide, className, isCreationMode = false } = props, rest = tslib_1.__rest(props, ["groupId", "onChange", "autoHide", "className", "isCreationMode"]);
62
+ //STATE
63
+ const [loading, setLoading] = (0, react_1.useState)(false);
64
+ const [alert, setAlert] = (0, react_1.useState)(null);
65
+ let fileInput = (0, react_1.useRef)(null);
66
+ //CONTEXT
67
+ const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
68
+ // INTL
69
+ const intl = (0, react_intl_1.useIntl)();
70
+ // Anonymous
71
+ if (!scUserContext.user) {
72
+ return null;
73
+ }
74
+ /**
75
+ * Handles avatar upload
76
+ * @param event
77
+ */
78
+ function handleUpload(event) {
79
+ fileInput = event.target.files[0];
80
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
81
+ }
82
+ /**
83
+ * Performs save avatar after upload
84
+ */
85
+ function handleSave() {
86
+ setLoading(true);
87
+ const formData = new FormData();
88
+ formData.append('image_original', fileInput);
89
+ api_services_1.GroupService.changeGroupAvatarOrCover(groupId, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
90
+ .then((data) => {
91
+ setLoading(false);
92
+ onChange && onChange(data.image_bigger);
93
+ })
94
+ .catch((error) => {
95
+ setAlert(intl.formatMessage(messages.errorLoadImage));
96
+ setLoading(false);
97
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
98
+ });
99
+ }
100
+ /**
101
+ * If there is an error
102
+ */
103
+ if (alert) {
104
+ return (react_1.default.createElement(material_1.Alert, { color: "error", onClose: () => setAlert(null) }, alert));
105
+ }
106
+ /**
107
+ * Renders the component (if not hidden by autoHide prop)
108
+ */
109
+ if (!autoHide) {
110
+ return (react_1.default.createElement(react_1.default.Fragment, null,
111
+ react_1.default.createElement("input", { type: "file", onChange: handleUpload, ref: fileInput, hidden: true, accept: ".gif,.png,.jpg,.jpeg" }),
112
+ react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(classes.root, className), size: "small", variant: "contained", disabled: loading, onClick: () => fileInput.current.click(), loading: loading }, rest),
113
+ react_1.default.createElement(Icon_1.default, null, "photo_camera"))));
114
+ }
115
+ return null;
116
+ }
117
+ exports.default = ChangeGroupPicture;
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCChangeGroupPictureButton";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCChangeGroupPictureButton';
@@ -0,0 +1,3 @@
1
+ import ChangeGroupPicture, { ChangeGroupPictureProps } from './ChangeGroupPicture';
2
+ export default ChangeGroupPicture;
3
+ export { ChangeGroupPictureProps };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const ChangeGroupPicture_1 = tslib_1.__importDefault(require("./ChangeGroupPicture"));
5
+ exports.default = ChangeGroupPicture_1.default;
@@ -0,0 +1,48 @@
1
+ import { BaseDialogProps } from '../../shared/BaseDialog';
2
+ import { SCGroupType } from '@selfcommunity/types';
3
+ export interface CreateGroupProps extends BaseDialogProps {
4
+ /**
5
+ * Overrides or extends the styles applied to the component.
6
+ * @default null
7
+ */
8
+ className?: string;
9
+ /**
10
+ * Open dialog
11
+ * @default true
12
+ */
13
+ open?: boolean;
14
+ /**
15
+ * On dialog close callback function
16
+ * @default null
17
+ */
18
+ onClose?: () => void;
19
+ /**
20
+ * Group Object
21
+ * @default null
22
+ */
23
+ group?: SCGroupType;
24
+ /**
25
+ * Any other properties
26
+ */
27
+ [p: string]: any;
28
+ }
29
+ /**
30
+ *> API documentation for the Community-JS Create Group Button component. Learn about the available props and the CSS API.
31
+ *
32
+ #### Import
33
+ ```jsx
34
+ import {CreateGroupButton} from '@selfcommunity/react-ui';
35
+ ```
36
+
37
+ #### Component Name
38
+ The name `SCCreateGroup` can be used when providing style overrides in the theme.
39
+
40
+ #### CSS
41
+
42
+ |Rule Name|Global class|Description|
43
+ |---|---|---|
44
+ |root|.SCCreateGroup-root|Styles applied to the root element.|
45
+
46
+ * @param inProps
47
+ */
48
+ export default function CreateGroup(inProps: CreateGroupProps): JSX.Element;
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const system_1 = require("@mui/system");
6
+ const styles_1 = require("@mui/material/styles");
7
+ const material_1 = require("@mui/material");
8
+ const react_intl_1 = require("react-intl");
9
+ const react_core_1 = require("@selfcommunity/react-core");
10
+ const classnames_1 = tslib_1.__importDefault(require("classnames"));
11
+ const constants_1 = require("./constants");
12
+ const BaseDialog_1 = tslib_1.__importDefault(require("../../shared/BaseDialog"));
13
+ const lab_1 = require("@mui/lab");
14
+ const ChangeGroupPicture_1 = tslib_1.__importDefault(require("../ChangeGroupPicture"));
15
+ const ChangeGroupCover_1 = tslib_1.__importDefault(require("../ChangeGroupCover"));
16
+ const Group_1 = require("../../constants/Group");
17
+ const GroupInviteButton_1 = tslib_1.__importDefault(require("../GroupInviteButton"));
18
+ const types_1 = require("@selfcommunity/types");
19
+ const Errors_1 = require("../../constants/Errors");
20
+ const api_services_1 = require("@selfcommunity/api-services");
21
+ const utils_1 = require("@selfcommunity/utils");
22
+ const messages = (0, react_intl_1.defineMessages)({
23
+ name: {
24
+ id: 'ui.createGroup.name.placeholder',
25
+ defaultMessage: 'ui.createGroup.name.placeholder'
26
+ },
27
+ description: {
28
+ id: 'ui.createGroup.description.placeholder',
29
+ defaultMessage: 'ui.createGroup.description.placeholder'
30
+ }
31
+ });
32
+ const classes = {
33
+ root: `${constants_1.PREFIX}-root`,
34
+ active: `${constants_1.PREFIX}-active`,
35
+ title: `${constants_1.PREFIX}-title`,
36
+ header: `${constants_1.PREFIX}-header`,
37
+ cover: `${constants_1.PREFIX}-cover`,
38
+ avatar: `${constants_1.PREFIX}-avatar`,
39
+ form: `${constants_1.PREFIX}-form`,
40
+ switch: `${constants_1.PREFIX}-switch`,
41
+ switchLabel: `${constants_1.PREFIX}-switch-label`,
42
+ name: `${constants_1.PREFIX}-name`,
43
+ description: `${constants_1.PREFIX}-description`,
44
+ content: `${constants_1.PREFIX}-content`,
45
+ privacySection: `${constants_1.PREFIX}-privacy-section`,
46
+ privacySectionInfo: `${constants_1.PREFIX}-privacy-section-info`,
47
+ visibilitySection: `${constants_1.PREFIX}-visibility-section`,
48
+ visibilitySectionInfo: `${constants_1.PREFIX}-visibility-section-info`,
49
+ inviteSection: `${constants_1.PREFIX}-invite-section`
50
+ };
51
+ const Root = (0, styles_1.styled)(BaseDialog_1.default, {
52
+ name: constants_1.PREFIX,
53
+ slot: 'Root'
54
+ })(() => ({}));
55
+ /**
56
+ *> API documentation for the Community-JS Create Group Button component. Learn about the available props and the CSS API.
57
+ *
58
+ #### Import
59
+ ```jsx
60
+ import {CreateGroupButton} from '@selfcommunity/react-ui';
61
+ ```
62
+
63
+ #### Component Name
64
+ The name `SCCreateGroup` can be used when providing style overrides in the theme.
65
+
66
+ #### CSS
67
+
68
+ |Rule Name|Global class|Description|
69
+ |---|---|---|
70
+ |root|.SCCreateGroup-root|Styles applied to the root element.|
71
+
72
+ * @param inProps
73
+ */
74
+ function CreateGroup(inProps) {
75
+ //PROPS
76
+ const props = (0, system_1.useThemeProps)({
77
+ props: inProps,
78
+ name: constants_1.PREFIX
79
+ });
80
+ const { className, open = true, onClose, group } = props, rest = tslib_1.__rest(props, ["className", "open", "onClose", "group"]);
81
+ // TODO: fare initial state con tutti i fields per la gestione dell'edit
82
+ // STATE
83
+ const [avatar, setAvatar] = (0, react_1.useState)('');
84
+ const [cover, setCover] = (0, react_1.useState)('');
85
+ const [name, setName] = (0, react_1.useState)('');
86
+ const [invitedUsers, setInvitedUsers] = (0, react_1.useState)(null);
87
+ const [description, setDescription] = (0, react_1.useState)('');
88
+ const [isPublic, setIsPublic] = (0, react_1.useState)(true);
89
+ const [isVisible, setIsVisible] = (0, react_1.useState)(true);
90
+ const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
91
+ // INTL
92
+ const intl = (0, react_intl_1.useIntl)();
93
+ // CONTEXT
94
+ // PREFERENCES
95
+ const scPreferences = (0, react_core_1.useSCPreferences)();
96
+ const _backgroundCover = Object.assign({}, (cover
97
+ ? { background: `url('${cover}') center / cover` }
98
+ : { background: `url('${scPreferences.preferences[react_core_1.SCPreferences.IMAGES_USER_DEFAULT_COVER].value}') center / cover` }));
99
+ function handleChangeAvatar(avatar) {
100
+ const reader = new FileReader();
101
+ reader.onloadend = () => {
102
+ setAvatar(reader.result);
103
+ };
104
+ reader.readAsDataURL(avatar);
105
+ }
106
+ function handleChangeCover(cover) {
107
+ const reader = new FileReader();
108
+ reader.onloadend = () => {
109
+ setCover(reader.result);
110
+ };
111
+ reader.readAsDataURL(cover);
112
+ }
113
+ const handleSubmit = () => {
114
+ setIsSubmitting(true);
115
+ const formData = new FormData();
116
+ formData.append('name', name);
117
+ formData.append('description', description);
118
+ formData.append('privacy', isPublic ? types_1.SCGroupPrivacyType.PUBLIC : types_1.SCGroupPrivacyType.PRIVATE);
119
+ formData.append('image_original', avatar);
120
+ formData.append('emotional_image_original', cover);
121
+ formData.append('visible', isVisible);
122
+ for (const key in invitedUsers) {
123
+ formData.append(key, invitedUsers[key]);
124
+ }
125
+ api_services_1.GroupService.createGroup(formData, { headers: { 'Content-Type': 'multipart/form-data' } })
126
+ .then((data) => {
127
+ console.log(data);
128
+ setIsSubmitting(false);
129
+ })
130
+ .catch((error) => {
131
+ setIsSubmitting(false);
132
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
133
+ });
134
+ };
135
+ const handleInviteSection = (data) => {
136
+ setInvitedUsers(data);
137
+ };
138
+ /**
139
+ * Renders root object
140
+ */
141
+ return (react_1.default.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.title.edit", defaultMessage: "ui.createGroup.title.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.title", defaultMessage: "ui.createGroup.title" })), open: open, onClose: onClose, className: (0, classnames_1.default)(classes.root, className), actions: react_1.default.createElement(lab_1.LoadingButton, { loading: isSubmitting, disabled: !name, variant: "contained", onClick: handleSubmit, color: "secondary" }, group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.button.edit", defaultMessage: "ui.createGroup.button.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.button.create", defaultMessage: "ui.createGroup.button.create" }))) }, rest),
142
+ react_1.default.createElement(react_1.default.Fragment, null,
143
+ react_1.default.createElement(react_1.default.Fragment, null,
144
+ react_1.default.createElement(material_1.Paper, { style: _backgroundCover, classes: { root: classes.cover } },
145
+ react_1.default.createElement(material_1.Box, { className: classes.avatar },
146
+ react_1.default.createElement(material_1.Avatar, null, avatar ? react_1.default.createElement("img", { src: avatar, alt: "avatar" }) : react_1.default.createElement(material_1.Icon, null, "icon_image"))),
147
+ react_1.default.createElement(react_1.default.Fragment, null,
148
+ react_1.default.createElement(ChangeGroupPicture_1.default, { isCreationMode: true, onChange: handleChangeAvatar }),
149
+ react_1.default.createElement(ChangeGroupCover_1.default, { isCreationMode: true, onChange: handleChangeCover }))),
150
+ react_1.default.createElement(material_1.Typography, { className: classes.header, align: "center" },
151
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.header", defaultMessage: "ui.createGroup.header" }))),
152
+ react_1.default.createElement(material_1.FormGroup, { className: classes.form },
153
+ react_1.default.createElement(material_1.TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: name, onChange: (event) => setName(event.target.value), InputProps: {
154
+ endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Group_1.GROUP_TITLE_MAX_LENGTH - name.length)
155
+ } }),
156
+ react_1.default.createElement(material_1.TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: description, onChange: (event) => setDescription(event.target.value), InputProps: {
157
+ endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Group_1.GROUP_DESCRIPTION_MAX_LENGTH - description.length)
158
+ } }),
159
+ react_1.default.createElement(material_1.Box, { className: classes.privacySection },
160
+ react_1.default.createElement(material_1.Typography, { variant: "h4" },
161
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.privacy.title", defaultMessage: "ui.createGroup.privacy.title", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })),
162
+ react_1.default.createElement(material_1.Stack, { direction: "row", spacing: 1, alignItems: "center" },
163
+ react_1.default.createElement(material_1.Typography, { className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: !isPublic }) },
164
+ react_1.default.createElement(material_1.Icon, null, "private"),
165
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.privacy.private", defaultMessage: "ui.createGroup.privacy.private" })),
166
+ react_1.default.createElement(material_1.Switch, { className: classes.switch, checked: isPublic, onClick: () => setIsPublic(!isPublic) }),
167
+ react_1.default.createElement(material_1.Typography, { className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: isPublic }) },
168
+ react_1.default.createElement(material_1.Icon, null, "public"),
169
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.privacy.public", defaultMessage: "ui.createGroup.privacy.public" }))),
170
+ react_1.default.createElement(material_1.Typography, { variant: "body2", className: classes.privacySectionInfo }, isPublic ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.privacy.public.info", defaultMessage: "ui.createGroup.privacy.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.privacy.private.info", defaultMessage: "ui.createGroup.private.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })))),
171
+ react_1.default.createElement(material_1.Box, { className: classes.visibilitySection }, !isPublic && (react_1.default.createElement(react_1.default.Fragment, null,
172
+ react_1.default.createElement(material_1.Typography, { variant: "h4" },
173
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.visibility.title", defaultMessage: "ui.createGroup.visibility.title", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })),
174
+ react_1.default.createElement(material_1.Stack, { direction: "row", spacing: 1, alignItems: "center" },
175
+ react_1.default.createElement(material_1.Typography, { className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: !isVisible }) },
176
+ react_1.default.createElement(material_1.Icon, null, "visibility_off"),
177
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.visibility.hidden", defaultMessage: "ui.createGroup.visibility.hidden" })),
178
+ react_1.default.createElement(material_1.Switch, { className: classes.switch, checked: isVisible, onClick: () => setIsVisible(!isVisible) }),
179
+ react_1.default.createElement(material_1.Typography, { className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: isVisible }) },
180
+ react_1.default.createElement(material_1.Icon, null, "visibility"),
181
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.visibility.visible", defaultMessage: "ui.createGroup.visibility.visible" }))),
182
+ react_1.default.createElement(material_1.Typography, { variant: "body2", className: classes.visibilitySectionInfo }, !isVisible ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.visibility.hidden.info", defaultMessage: "ui.createGroup.visibility.hidden.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.createGroup.visibility.visible.info", defaultMessage: "ui.createGroup.visibility.visible.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } }))))))),
183
+ react_1.default.createElement(material_1.Divider, null),
184
+ react_1.default.createElement(material_1.Box, { className: classes.inviteSection },
185
+ react_1.default.createElement(GroupInviteButton_1.default, { handleInvitations: handleInviteSection })))));
186
+ }
187
+ exports.default = CreateGroup;
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCCreateGroup";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCCreateGroup';
@@ -0,0 +1,3 @@
1
+ import CreateGroup, { CreateGroupProps } from './CreateGroup';
2
+ export default CreateGroup;
3
+ export { CreateGroupProps };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const CreateGroup_1 = tslib_1.__importDefault(require("./CreateGroup"));
5
+ exports.default = CreateGroup_1.default;