@selfcommunity/react-ui 0.7.35 → 0.7.36-alpha.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.
@@ -12,6 +12,8 @@ const classnames_1 = tslib_1.__importDefault(require("classnames"));
12
12
  const system_1 = require("@mui/system");
13
13
  const BaseItemButton_1 = tslib_1.__importDefault(require("../../shared/BaseItemButton"));
14
14
  const constants_1 = require("./constants");
15
+ const string_1 = require("../../utils/string");
16
+ const Category_1 = require("../../constants/Category");
15
17
  const messages = (0, react_intl_1.defineMessages)({
16
18
  categoryFollowers: {
17
19
  id: 'ui.category.categoryFollowers',
@@ -66,14 +68,18 @@ function Category(inProps) {
66
68
  const { scCategory, setSCCategory } = (0, react_core_1.useSCFetchCategory)({ id: categoryId, category });
67
69
  // MEMO
68
70
  const _ButtonBaseProps = (0, react_1.useMemo)(() => (ButtonBaseProps ? ButtonBaseProps : { component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, scCategory) }), [ButtonBaseProps, scRoutingContext, scCategory]);
69
- // INTL
71
+ // HOOKS
70
72
  const intl = (0, react_intl_1.useIntl)();
73
+ const theme = (0, material_1.useTheme)();
74
+ const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
71
75
  if (!scCategory) {
72
76
  return react_1.default.createElement(Skeleton_1.default, { elevation: elevation });
73
77
  }
74
78
  // RENDER
75
79
  if (!autoHide) {
76
- return (react_1.default.createElement(Root, Object.assign({ elevation: elevation, className: (0, classnames_1.default)(classes.root, className), ButtonBaseProps: _ButtonBaseProps, image: react_1.default.createElement(material_1.Avatar, { alt: scCategory.name, src: scCategory.image_medium, variant: "square", className: classes.categoryImage }), primary: scCategory.name, secondary: showFollowers ? `${intl.formatMessage(messages.categoryFollowers, { total: scCategory.followers_counter })}` : scCategory.slogan, actions: react_1.default.createElement(CategoryFollowButton_1.default, Object.assign({ category: scCategory }, categoryFollowButtonProps)) }, rest)));
80
+ return (react_1.default.createElement(Root, Object.assign({ elevation: elevation, className: (0, classnames_1.default)(classes.root, className), ButtonBaseProps: _ButtonBaseProps, image: react_1.default.createElement(material_1.Avatar, { alt: scCategory.name, src: scCategory.image_medium, variant: "square", className: classes.categoryImage }), primary: isMobile
81
+ ? (0, string_1.formatCroppedName)(scCategory.name, Category_1.CATEGORY_NAME_MAX_LENGTH_MOBILE)
82
+ : (0, string_1.formatCroppedName)(scCategory.name, Category_1.CATEGORY_NAME_MAX_LENGTH_DESKTOP), secondary: showFollowers ? `${intl.formatMessage(messages.categoryFollowers, { total: scCategory.followers_counter })}` : scCategory.slogan, actions: react_1.default.createElement(CategoryFollowButton_1.default, Object.assign({ category: scCategory }, categoryFollowButtonProps)) }, rest)));
77
83
  }
78
84
  return null;
79
85
  }
@@ -14,6 +14,8 @@ const UserDeletedSnackBar_1 = tslib_1.__importDefault(require("../../shared/User
14
14
  const constants_1 = require("./constants");
15
15
  const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
16
16
  const GroupSubscribeButton_1 = tslib_1.__importDefault(require("../GroupSubscribeButton"));
17
+ const string_1 = require("../../utils/string");
18
+ const Group_1 = require("../../constants/Group");
17
19
  const messages = (0, react_intl_1.defineMessages)({
18
20
  groupMembers: {
19
21
  id: 'ui.group.members',
@@ -78,8 +80,10 @@ function Group(inProps) {
78
80
  // CONST
79
81
  const isGroupAdmin = (0, react_1.useMemo)(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
80
82
  const [openAlert, setOpenAlert] = (0, react_1.useState)(false);
81
- // INTL
83
+ // HOOKS
82
84
  const intl = (0, react_intl_1.useIntl)();
85
+ const theme = (0, material_1.useTheme)();
86
+ const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
83
87
  /**
84
88
  * Render authenticated actions
85
89
  * @return {JSX.Element}
@@ -100,8 +104,10 @@ function Group(inProps) {
100
104
  */
101
105
  return (react_1.default.createElement(react_1.default.Fragment, null,
102
106
  react_1.default.createElement(Root, Object.assign({ elevation: elevation }, rest, { className: (0, classnames_1.default)(classes.root, className), ButtonBaseProps: { component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, scGroup) }, image: react_1.default.createElement(material_1.Avatar, { alt: scGroup.name, src: scGroup.image_medium, className: classes.avatar }), primary: react_1.default.createElement(react_1.default.Fragment, null,
103
- scGroup.name,
104
- " ",
107
+ isMobile
108
+ ? (0, string_1.formatCroppedName)(scGroup.name, Group_1.GROUP_NAME_MAX_LENGTH_MOBILE)
109
+ : (0, string_1.formatCroppedName)(scGroup.name, Group_1.GROUP_NAME_MAX_LENGTH_DESKTOP),
110
+ ' ',
105
111
  react_1.default.createElement(material_1.Icon, { className: classes.icon }, (group === null || group === void 0 ? void 0 : group.privacy) === types_1.SCGroupPrivacyType.PRIVATE ? 'private' : 'public')), secondary: `${intl.formatMessage(messages.groupMembers, { total: scGroup.subscribers_counter })}`, actions: hideActions ? null : renderAuthenticatedActions() })),
106
112
  openAlert && react_1.default.createElement(UserDeletedSnackBar_1.default, { open: openAlert, handleClose: () => setOpenAlert(false) })));
107
113
  }
@@ -92,7 +92,7 @@ const Root = (0, styles_1.styled)(BaseDialog_1.default, {
92
92
  * @param inProps
93
93
  */
94
94
  function GroupForm(inProps) {
95
- var _a;
95
+ var _a, _b, _c, _d, _e;
96
96
  //PROPS
97
97
  const props = (0, system_1.useThemeProps)({
98
98
  props: inProps,
@@ -213,7 +213,10 @@ function GroupForm(inProps) {
213
213
  /**
214
214
  * Renders root object
215
215
  */
216
- return (react_1.default.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.title.edit", defaultMessage: "ui.groupForm.title.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.title", defaultMessage: "ui.groupForm.title" })), open: open, onClose: onClose, className: (0, classnames_1.default)(classes.root, className), actions: react_1.default.createElement(lab_1.LoadingButton, { loading: field.isSubmitting, disabled: !field.name || Object.keys(error).length !== 0, variant: "contained", onClick: handleSubmit, color: "secondary" }, group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.button.edit", defaultMessage: "ui.groupForm.button.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.button.create", defaultMessage: "ui.groupForm.button.create" }))) }, rest),
216
+ return (react_1.default.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.title.edit", defaultMessage: "ui.groupForm.title.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.title", defaultMessage: "ui.groupForm.title" })), open: open, onClose: onClose, className: (0, classnames_1.default)(classes.root, className), actions: react_1.default.createElement(lab_1.LoadingButton, { loading: field.isSubmitting, disabled: !field.name ||
217
+ Object.keys(error).length !== 0 ||
218
+ field.name.length > Group_1.GROUP_TITLE_MAX_LENGTH ||
219
+ field.name.description > Group_1.GROUP_DESCRIPTION_MAX_LENGTH, variant: "contained", onClick: handleSubmit, color: "secondary" }, group ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.button.edit", defaultMessage: "ui.groupForm.button.edit" })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.button.create", defaultMessage: "ui.groupForm.button.create" }))) }, rest),
217
220
  react_1.default.createElement(react_1.default.Fragment, null,
218
221
  react_1.default.createElement(react_1.default.Fragment, null,
219
222
  react_1.default.createElement(material_1.Paper, { style: _backgroundCover, classes: { root: classes.cover } },
@@ -226,10 +229,10 @@ function GroupForm(inProps) {
226
229
  react_1.default.createElement(material_1.FormGroup, { className: classes.form },
227
230
  react_1.default.createElement(material_1.TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: field.name, name: "name", onChange: handleChange, InputProps: {
228
231
  endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Group_1.GROUP_TITLE_MAX_LENGTH - field.name.length)
229
- } }),
232
+ }, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > Group_1.GROUP_TITLE_MAX_LENGTH), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > Group_1.GROUP_TITLE_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.name.error.maxLength", defaultMessage: "ui.groupForm.name.error.maxLength" })) : null }),
230
233
  react_1.default.createElement(material_1.TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: field.description, name: "description", onChange: handleChange, InputProps: {
231
- endAdornment: (react_1.default.createElement(material_1.Typography, { variant: "body2" }, ((_a = field.description) === null || _a === void 0 ? void 0 : _a.length) ? Group_1.GROUP_DESCRIPTION_MAX_LENGTH - field.description.length : Group_1.GROUP_DESCRIPTION_MAX_LENGTH))
232
- } }),
234
+ endAdornment: (react_1.default.createElement(material_1.Typography, { variant: "body2" }, ((_c = field.description) === null || _c === void 0 ? void 0 : _c.length) ? Group_1.GROUP_DESCRIPTION_MAX_LENGTH - field.description.length : Group_1.GROUP_DESCRIPTION_MAX_LENGTH))
235
+ }, error: Boolean(((_d = field.description) === null || _d === void 0 ? void 0 : _d.length) > Group_1.GROUP_DESCRIPTION_MAX_LENGTH), helperText: ((_e = field.description) === null || _e === void 0 ? void 0 : _e.length) > Group_1.GROUP_DESCRIPTION_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.description.error.maxLength", defaultMessage: "ui.groupForm.description.error.maxLength" })) : null }),
233
236
  react_1.default.createElement(material_1.Box, { className: classes.privacySection },
234
237
  react_1.default.createElement(material_1.Typography, { variant: "h4" },
235
238
  react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.title", defaultMessage: "ui.groupForm.privacy.title", values: {
@@ -0,0 +1,2 @@
1
+ export declare const CATEGORY_NAME_MAX_LENGTH_MOBILE = 15;
2
+ export declare const CATEGORY_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CATEGORY_NAME_MAX_LENGTH_DESKTOP = exports.CATEGORY_NAME_MAX_LENGTH_MOBILE = void 0;
4
+ exports.CATEGORY_NAME_MAX_LENGTH_MOBILE = 15;
5
+ exports.CATEGORY_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -1,2 +1,4 @@
1
- export declare const GROUP_TITLE_MAX_LENGTH = 50;
1
+ export declare const GROUP_TITLE_MAX_LENGTH = 40;
2
2
  export declare const GROUP_DESCRIPTION_MAX_LENGTH = 500;
3
+ export declare const GROUP_NAME_MAX_LENGTH_MOBILE = 15;
4
+ export declare const GROUP_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GROUP_DESCRIPTION_MAX_LENGTH = exports.GROUP_TITLE_MAX_LENGTH = void 0;
4
- exports.GROUP_TITLE_MAX_LENGTH = 50;
3
+ exports.GROUP_NAME_MAX_LENGTH_DESKTOP = exports.GROUP_NAME_MAX_LENGTH_MOBILE = exports.GROUP_DESCRIPTION_MAX_LENGTH = exports.GROUP_TITLE_MAX_LENGTH = void 0;
4
+ exports.GROUP_TITLE_MAX_LENGTH = 40;
5
5
  exports.GROUP_DESCRIPTION_MAX_LENGTH = 500;
6
+ exports.GROUP_NAME_MAX_LENGTH_MOBILE = 15;
7
+ exports.GROUP_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -0,0 +1 @@
1
+ export declare const formatCroppedName: (name: any, maxLength: any) => any;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCroppedName = void 0;
4
+ const formatCroppedName = (name, maxLength) => {
5
+ if (name.length <= maxLength) {
6
+ return name;
7
+ }
8
+ return name.substring(0, maxLength) + '...';
9
+ };
10
+ exports.formatCroppedName = formatCroppedName;
@@ -1,7 +1,7 @@
1
1
  import { __rest } from "tslib";
2
2
  import React, { useMemo } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
- import { Avatar } from '@mui/material';
4
+ import { Avatar, useMediaQuery, useTheme } from '@mui/material';
5
5
  import { Link, SCRoutes, useSCFetchCategory, useSCRouting } from '@selfcommunity/react-core';
6
6
  import CategorySkeleton from './Skeleton';
7
7
  import CategoryFollowButton from '../CategoryFollowButton';
@@ -10,6 +10,8 @@ import classNames from 'classnames';
10
10
  import { useThemeProps } from '@mui/system';
11
11
  import BaseItemButton from '../../shared/BaseItemButton';
12
12
  import { PREFIX } from './constants';
13
+ import { formatCroppedName } from '../../utils/string';
14
+ import { CATEGORY_NAME_MAX_LENGTH_DESKTOP, CATEGORY_NAME_MAX_LENGTH_MOBILE } from '../../constants/Category';
13
15
  const messages = defineMessages({
14
16
  categoryFollowers: {
15
17
  id: 'ui.category.categoryFollowers',
@@ -64,14 +66,18 @@ export default function Category(inProps) {
64
66
  const { scCategory, setSCCategory } = useSCFetchCategory({ id: categoryId, category });
65
67
  // MEMO
66
68
  const _ButtonBaseProps = useMemo(() => (ButtonBaseProps ? ButtonBaseProps : { component: Link, to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, scCategory) }), [ButtonBaseProps, scRoutingContext, scCategory]);
67
- // INTL
69
+ // HOOKS
68
70
  const intl = useIntl();
71
+ const theme = useTheme();
72
+ const isMobile = useMediaQuery(theme.breakpoints.down('md'));
69
73
  if (!scCategory) {
70
74
  return React.createElement(CategorySkeleton, { elevation: elevation });
71
75
  }
72
76
  // RENDER
73
77
  if (!autoHide) {
74
- return (React.createElement(Root, Object.assign({ elevation: elevation, className: classNames(classes.root, className), ButtonBaseProps: _ButtonBaseProps, image: React.createElement(Avatar, { alt: scCategory.name, src: scCategory.image_medium, variant: "square", className: classes.categoryImage }), primary: scCategory.name, secondary: showFollowers ? `${intl.formatMessage(messages.categoryFollowers, { total: scCategory.followers_counter })}` : scCategory.slogan, actions: React.createElement(CategoryFollowButton, Object.assign({ category: scCategory }, categoryFollowButtonProps)) }, rest)));
78
+ return (React.createElement(Root, Object.assign({ elevation: elevation, className: classNames(classes.root, className), ButtonBaseProps: _ButtonBaseProps, image: React.createElement(Avatar, { alt: scCategory.name, src: scCategory.image_medium, variant: "square", className: classes.categoryImage }), primary: isMobile
79
+ ? formatCroppedName(scCategory.name, CATEGORY_NAME_MAX_LENGTH_MOBILE)
80
+ : formatCroppedName(scCategory.name, CATEGORY_NAME_MAX_LENGTH_DESKTOP), secondary: showFollowers ? `${intl.formatMessage(messages.categoryFollowers, { total: scCategory.followers_counter })}` : scCategory.slogan, actions: React.createElement(CategoryFollowButton, Object.assign({ category: scCategory }, categoryFollowButtonProps)) }, rest)));
75
81
  }
76
82
  return null;
77
83
  }
@@ -1,7 +1,7 @@
1
1
  import { __rest } from "tslib";
2
2
  import React, { useMemo, useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
- import { Avatar, Button, Icon, Stack } from '@mui/material';
4
+ import { Avatar, Button, Icon, Stack, useMediaQuery, useTheme } from '@mui/material';
5
5
  import { SCGroupPrivacyType, SCGroupSubscriptionStatusType } from '@selfcommunity/types';
6
6
  import { Link, SCRoutes, useSCFetchGroup, useSCRouting, useSCUser } from '@selfcommunity/react-core';
7
7
  import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
@@ -12,6 +12,8 @@ import UserDeletedSnackBar from '../../shared/UserDeletedSnackBar';
12
12
  import { PREFIX } from './constants';
13
13
  import GroupSkeleton from './Skeleton';
14
14
  import GroupSubscribeButton from '../GroupSubscribeButton';
15
+ import { formatCroppedName } from '../../utils/string';
16
+ import { GROUP_NAME_MAX_LENGTH_DESKTOP, GROUP_NAME_MAX_LENGTH_MOBILE } from '../../constants/Group';
15
17
  const messages = defineMessages({
16
18
  groupMembers: {
17
19
  id: 'ui.group.members',
@@ -76,8 +78,10 @@ export default function Group(inProps) {
76
78
  // CONST
77
79
  const isGroupAdmin = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
78
80
  const [openAlert, setOpenAlert] = useState(false);
79
- // INTL
81
+ // HOOKS
80
82
  const intl = useIntl();
83
+ const theme = useTheme();
84
+ const isMobile = useMediaQuery(theme.breakpoints.down('md'));
81
85
  /**
82
86
  * Render authenticated actions
83
87
  * @return {JSX.Element}
@@ -98,8 +102,10 @@ export default function Group(inProps) {
98
102
  */
99
103
  return (React.createElement(React.Fragment, null,
100
104
  React.createElement(Root, Object.assign({ elevation: elevation }, rest, { className: classNames(classes.root, className), ButtonBaseProps: { component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, scGroup) }, image: React.createElement(Avatar, { alt: scGroup.name, src: scGroup.image_medium, className: classes.avatar }), primary: React.createElement(React.Fragment, null,
101
- scGroup.name,
102
- " ",
105
+ isMobile
106
+ ? formatCroppedName(scGroup.name, GROUP_NAME_MAX_LENGTH_MOBILE)
107
+ : formatCroppedName(scGroup.name, GROUP_NAME_MAX_LENGTH_DESKTOP),
108
+ ' ',
103
109
  React.createElement(Icon, { className: classes.icon }, (group === null || group === void 0 ? void 0 : group.privacy) === SCGroupPrivacyType.PRIVATE ? 'private' : 'public')), secondary: `${intl.formatMessage(messages.groupMembers, { total: scGroup.subscribers_counter })}`, actions: hideActions ? null : renderAuthenticatedActions() })),
104
110
  openAlert && React.createElement(UserDeletedSnackBar, { open: openAlert, handleClose: () => setOpenAlert(false) })));
105
111
  }
@@ -90,7 +90,7 @@ const Root = styled(BaseDialog, {
90
90
  * @param inProps
91
91
  */
92
92
  export default function GroupForm(inProps) {
93
- var _a;
93
+ var _a, _b, _c, _d, _e;
94
94
  //PROPS
95
95
  const props = useThemeProps({
96
96
  props: inProps,
@@ -211,7 +211,10 @@ export default function GroupForm(inProps) {
211
211
  /**
212
212
  * Renders root object
213
213
  */
214
- return (React.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: group ? (React.createElement(FormattedMessage, { id: "ui.groupForm.title.edit", defaultMessage: "ui.groupForm.title.edit" })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.title", defaultMessage: "ui.groupForm.title" })), open: open, onClose: onClose, className: classNames(classes.root, className), actions: React.createElement(LoadingButton, { loading: field.isSubmitting, disabled: !field.name || Object.keys(error).length !== 0, variant: "contained", onClick: handleSubmit, color: "secondary" }, group ? (React.createElement(FormattedMessage, { id: "ui.groupForm.button.edit", defaultMessage: "ui.groupForm.button.edit" })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.button.create", defaultMessage: "ui.groupForm.button.create" }))) }, rest),
214
+ return (React.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: group ? (React.createElement(FormattedMessage, { id: "ui.groupForm.title.edit", defaultMessage: "ui.groupForm.title.edit" })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.title", defaultMessage: "ui.groupForm.title" })), open: open, onClose: onClose, className: classNames(classes.root, className), actions: React.createElement(LoadingButton, { loading: field.isSubmitting, disabled: !field.name ||
215
+ Object.keys(error).length !== 0 ||
216
+ field.name.length > GROUP_TITLE_MAX_LENGTH ||
217
+ field.name.description > GROUP_DESCRIPTION_MAX_LENGTH, variant: "contained", onClick: handleSubmit, color: "secondary" }, group ? (React.createElement(FormattedMessage, { id: "ui.groupForm.button.edit", defaultMessage: "ui.groupForm.button.edit" })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.button.create", defaultMessage: "ui.groupForm.button.create" }))) }, rest),
215
218
  React.createElement(React.Fragment, null,
216
219
  React.createElement(React.Fragment, null,
217
220
  React.createElement(Paper, { style: _backgroundCover, classes: { root: classes.cover } },
@@ -224,10 +227,10 @@ export default function GroupForm(inProps) {
224
227
  React.createElement(FormGroup, { className: classes.form },
225
228
  React.createElement(TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: field.name, name: "name", onChange: handleChange, InputProps: {
226
229
  endAdornment: React.createElement(Typography, { variant: "body2" }, GROUP_TITLE_MAX_LENGTH - field.name.length)
227
- } }),
230
+ }, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > GROUP_TITLE_MAX_LENGTH), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > GROUP_TITLE_MAX_LENGTH ? (React.createElement(FormattedMessage, { id: "ui.groupForm.name.error.maxLength", defaultMessage: "ui.groupForm.name.error.maxLength" })) : null }),
228
231
  React.createElement(TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: field.description, name: "description", onChange: handleChange, InputProps: {
229
- endAdornment: (React.createElement(Typography, { variant: "body2" }, ((_a = field.description) === null || _a === void 0 ? void 0 : _a.length) ? GROUP_DESCRIPTION_MAX_LENGTH - field.description.length : GROUP_DESCRIPTION_MAX_LENGTH))
230
- } }),
232
+ endAdornment: (React.createElement(Typography, { variant: "body2" }, ((_c = field.description) === null || _c === void 0 ? void 0 : _c.length) ? GROUP_DESCRIPTION_MAX_LENGTH - field.description.length : GROUP_DESCRIPTION_MAX_LENGTH))
233
+ }, error: Boolean(((_d = field.description) === null || _d === void 0 ? void 0 : _d.length) > GROUP_DESCRIPTION_MAX_LENGTH), helperText: ((_e = field.description) === null || _e === void 0 ? void 0 : _e.length) > GROUP_DESCRIPTION_MAX_LENGTH ? (React.createElement(FormattedMessage, { id: "ui.groupForm.description.error.maxLength", defaultMessage: "ui.groupForm.description.error.maxLength" })) : null }),
231
234
  React.createElement(Box, { className: classes.privacySection },
232
235
  React.createElement(Typography, { variant: "h4" },
233
236
  React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.title", defaultMessage: "ui.groupForm.privacy.title", values: {
@@ -0,0 +1,2 @@
1
+ export declare const CATEGORY_NAME_MAX_LENGTH_MOBILE = 15;
2
+ export declare const CATEGORY_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -0,0 +1,2 @@
1
+ export const CATEGORY_NAME_MAX_LENGTH_MOBILE = 15;
2
+ export const CATEGORY_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -1,2 +1,4 @@
1
- export declare const GROUP_TITLE_MAX_LENGTH = 50;
1
+ export declare const GROUP_TITLE_MAX_LENGTH = 40;
2
2
  export declare const GROUP_DESCRIPTION_MAX_LENGTH = 500;
3
+ export declare const GROUP_NAME_MAX_LENGTH_MOBILE = 15;
4
+ export declare const GROUP_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -1,2 +1,4 @@
1
- export const GROUP_TITLE_MAX_LENGTH = 50;
1
+ export const GROUP_TITLE_MAX_LENGTH = 40;
2
2
  export const GROUP_DESCRIPTION_MAX_LENGTH = 500;
3
+ export const GROUP_NAME_MAX_LENGTH_MOBILE = 15;
4
+ export const GROUP_NAME_MAX_LENGTH_DESKTOP = 20;
@@ -0,0 +1 @@
1
+ export declare const formatCroppedName: (name: any, maxLength: any) => any;
@@ -0,0 +1,6 @@
1
+ export const formatCroppedName = (name, maxLength) => {
2
+ if (name.length <= maxLength) {
3
+ return name;
4
+ }
5
+ return name.substring(0, maxLength) + '...';
6
+ };