@@ -161,6 +161,7 @@ const DetailsStep = () => {
placeholder={intl.formatMessage(messages.groupNamePlaceholder)}
value={name}
onChange={onChangeName}
+ maxLength={Number(instance.configuration.getIn(['groups', 'max_characters_name']))}
/>
{
placeholder={intl.formatMessage(messages.groupDescriptionPlaceholder)}
value={description}
onChange={onChangeDescription}
+ maxLength={Number(instance.configuration.getIn(['groups', 'max_characters_description']))}
/>
diff --git a/app/soapbox/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx b/app/soapbox/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx
index 4e6622c3ce..e26243f9aa 100644
--- a/app/soapbox/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx
+++ b/app/soapbox/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx
@@ -18,8 +18,13 @@ const PrivacyStep = () => {
return (
<>
+
-
+
diff --git a/app/soapbox/locales/en.json b/app/soapbox/locales/en.json
index 5d6261d3f6..c9ed8cd81a 100644
--- a/app/soapbox/locales/en.json
+++ b/app/soapbox/locales/en.json
@@ -800,6 +800,7 @@
"group.role.moderator": "Moderator",
"group.tabs.all": "All",
"group.tabs.members": "Members",
+ "group.upload_banner": "Upload photo",
"group.user_subheading": "Users",
"groups.discover.popular.empty": "Unable to fetch popular groups at this time. Please check back later.",
"groups.discover.popular.title": "Popular Groups",
@@ -921,15 +922,22 @@
"login_external.errors.network_fail": "Connection failed. Is a browser extension blocking it?",
"login_form.header": "Sign In",
"manage_group.blocked_members": "Blocked members",
+ "manage_group.confirmation.copy": "Copy link",
+ "manage_group.confirmation.info_1": "As the owner of this group, you can assign staff, delete posts and much more.",
+ "manage_group.confirmation.info_2": "Post the group's first post and get the conversation started.",
+ "manage_group.confirmation.info_3": "Share your new group with friends, family and followers to grow its membership.",
+ "manage_group.confirmation.share": "Share this group",
+ "manage_group.confirmation.title": "You’re all set!",
"manage_group.create": "Create",
"manage_group.delete_group": "Delete group",
+ "manage_group.done": "Done",
"manage_group.edit_group": "Edit group",
"manage_group.edit_success": "The group was edited",
"manage_group.fields.description_label": "Description",
"manage_group.fields.description_placeholder": "Description",
"manage_group.fields.name_label": "Group name (required)",
"manage_group.fields.name_placeholder": "Group Name",
- "manage_group.get_started": "Let's get started!",
+ "manage_group.get_started": "Let’s get started!",
"manage_group.next": "Next",
"manage_group.pending_requests": "Pending requests",
"manage_group.privacy.hint": "These settings cannot be changed later.",
diff --git a/app/soapbox/normalizers/__tests__/instance.test.ts b/app/soapbox/normalizers/__tests__/instance.test.ts
index 708adb6bb1..90472e7f8a 100644
--- a/app/soapbox/normalizers/__tests__/instance.test.ts
+++ b/app/soapbox/normalizers/__tests__/instance.test.ts
@@ -23,6 +23,10 @@ describe('normalizeInstance()', () => {
max_characters: 500,
max_media_attachments: 4,
},
+ groups: {
+ max_characters_name: 50,
+ max_characters_description: 100,
+ },
},
description: '',
description_limit: 1500,
diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts
index b75f99f9fc..3632b9058b 100644
--- a/app/soapbox/normalizers/instance.ts
+++ b/app/soapbox/normalizers/instance.ts
@@ -35,6 +35,10 @@ export const InstanceRecord = ImmutableRecord({
max_characters: 500,
max_media_attachments: 4,
}),
+ groups: ImmutableMap({
+ max_characters_name: 50,
+ max_characters_description: 100,
+ }),
}),
description: '',
description_limit: 1500,
diff --git a/app/soapbox/utils/permissions.ts b/app/soapbox/utils/permissions.ts
index 607f751eb3..9627074eb9 100644
--- a/app/soapbox/utils/permissions.ts
+++ b/app/soapbox/utils/permissions.ts
@@ -10,7 +10,7 @@ type Permission = typeof PERMISSION_CREATE_GROUPS | typeof PERMISSION_INVITE_USE
export const hasPermission = (state: RootState, permission: Permission) => {
const account = state.accounts_meta.get(state.me as string)!;
- if (!account?.role) return false;
+ if (!account?.role) return true;
const permissions = account.getIn(['role', 'permissions']) as number;