diff --git a/app/controllers/api/v1/groups_controller.rb b/app/controllers/api/v1/groups_controller.rb
index bffb8918..f113efb8 100644
--- a/app/controllers/api/v1/groups_controller.rb
+++ b/app/controllers/api/v1/groups_controller.rb
@@ -89,6 +89,8 @@ class Api::V1::GroupsController < Api::BaseController
end
def group_params
- params.permit(:title, :cover_image, :description, :is_private, :tags, :is_visible, :group_categories_id, :slug)
+ thep = params.permit(:title, :password, :cover_image, :description, :is_private, :tags, :is_visible, :group_category_id, :slug)
+ thep[:tags] = thep[:tags].split(",") unless thep[:tags].nil?
+ thep
end
end
diff --git a/app/javascript/gabsocial/actions/group_editor.js b/app/javascript/gabsocial/actions/group_editor.js
index a4bb98dd..ab4d306b 100644
--- a/app/javascript/gabsocial/actions/group_editor.js
+++ b/app/javascript/gabsocial/actions/group_editor.js
@@ -62,7 +62,7 @@ const create = (options, routerHistory) => (dispatch, getState) => {
formData.append('title', options.title)
formData.append('description', options.description)
formData.append('tags', options.tags)
- formData.append('group_categories_id', options.category)
+ formData.append('group_category_id', options.category)
formData.append('is_private', options.isPrivate)
formData.append('is_visible', options.isVisible)
@@ -105,7 +105,7 @@ const update = (groupId, options, routerHistory) => (dispatch, getState) => {
formData.append('title', options.title)
formData.append('description', options.description)
formData.append('tags', options.tags)
- formData.append('group_categories_id', options.category)
+ formData.append('group_category_id', options.category)
formData.append('is_private', options.isPrivate)
formData.append('is_visible', options.isVisible)
formData.append('slug', options.slug)
diff --git a/app/javascript/gabsocial/components/panel/group_info_panel.js b/app/javascript/gabsocial/components/panel/group_info_panel.js
index 312c299c..4ab161c1 100644
--- a/app/javascript/gabsocial/components/panel/group_info_panel.js
+++ b/app/javascript/gabsocial/components/panel/group_info_panel.js
@@ -1,11 +1,13 @@
import React from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
+import { NavLink } from 'react-router-dom'
import { defineMessages, injectIntl } from 'react-intl'
import ImmutablePureComponent from 'react-immutable-pure-component'
import ImmutablePropTypes from 'react-immutable-proptypes'
import moment from 'moment-mini'
import { shortNumberFormat } from '../../utils/numbers'
+import slugify from '../../utils/slugify'
import PanelLayout from './panel_layout'
import Button from '../button'
import Divider from '../divider'
@@ -39,6 +41,7 @@ class GroupInfoPanel extends ImmutablePureComponent {
const isPrivate = !!group ? group.get('is_private') : false
const isVisible = !!group ? group.get('is_visible') : false
const tags = !!group ? group.get('tags') : []
+ const groupCategory = !!group ? group.getIn(['group_category', 'text'], null) : null
const descriptionHTML = !!group ? { __html: group.get('description_html') } : {}
if (noPanel) {
@@ -143,11 +146,26 @@ class GroupInfoPanel extends ImmutablePureComponent {
-
+ {
+ !!groupCategory &&
+
+
-
- General
-
+
+
+
+
+ }
diff --git a/app/javascript/gabsocial/features/group_create.js b/app/javascript/gabsocial/features/group_create.js
index 88e1a2f7..dc76ae26 100644
--- a/app/javascript/gabsocial/features/group_create.js
+++ b/app/javascript/gabsocial/features/group_create.js
@@ -134,7 +134,7 @@ class GroupCreate extends ImmutablePureComponent {
const memberCount = group ? group.get('member_count') : 0
const hasGroupSlug = group ? !!group.get('slug') : false
- let categoriesOptions = []
+ let categoriesOptions = [{'title':'',value:''}]
if (categories) {
for (let i = 0; i < categories.count(); i++) {
const c = categories.get(i)
diff --git a/app/javascript/gabsocial/reducers/group_editor.js b/app/javascript/gabsocial/reducers/group_editor.js
index 3d4c2430..008d3555 100644
--- a/app/javascript/gabsocial/reducers/group_editor.js
+++ b/app/javascript/gabsocial/reducers/group_editor.js
@@ -53,7 +53,7 @@ export default function groupEditorReducer(state = initialState, action) {
map.set('isPrivate', action.group.get('is_private'))
map.set('isVisible', action.group.get('is_visible'))
map.set('id', action.group.get('slug'))
- map.set('category', action.group.get('category'))
+ map.set('category', action.group.getIn(['group_category', 'id'], null))
map.set('isSubmitting', false)
})
case GROUP_EDITOR_TITLE_CHANGE:
diff --git a/app/models/group.rb b/app/models/group.rb
index 1673ac7e..1f666109 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -20,11 +20,13 @@
# is_private :boolean default(FALSE)
# is_visible :boolean default(FALSE)
# tags :string default([]), is an Array
-# group_categories_id :bigint(8)
# password :string
+# group_category_id :integer
#
class Group < ApplicationRecord
+ self.ignored_columns = ["group_categories_id"]
+
include Paginable
include GroupInteractions
include GroupCoverImage
@@ -45,6 +47,8 @@ class Group < ApplicationRecord
has_many :group_removed_accounts, inverse_of: :group, dependent: :destroy
has_many :removed_accounts, source: :account, through: :group_removed_accounts
+ belongs_to :group_categories, optional: true, foreign_key: 'group_category_id'
+
validates :title, presence: true
validates :description, presence: true
diff --git a/db/migrate/20200908210102_remove_group_categories_id_from_group.rb b/db/migrate/20200908210102_remove_group_categories_id_from_group.rb
new file mode 100644
index 00000000..af3514b2
--- /dev/null
+++ b/db/migrate/20200908210102_remove_group_categories_id_from_group.rb
@@ -0,0 +1,5 @@
+class RemoveGroupCategoriesIdFromGroup < ActiveRecord::Migration[5.2]
+ def change
+ safety_assured { remove_column :groups, :group_categories_id }
+ end
+end
diff --git a/db/migrate/20200908210103_add_foreign_key_to_group_for_group_category.rb b/db/migrate/20200908210103_add_foreign_key_to_group_for_group_category.rb
new file mode 100644
index 00000000..1dce5ffd
--- /dev/null
+++ b/db/migrate/20200908210103_add_foreign_key_to_group_for_group_category.rb
@@ -0,0 +1,6 @@
+class AddForeignKeyToGroupForGroupCategory < ActiveRecord::Migration[5.2]
+ def change
+ add_column :groups, :group_category_id, :integer
+ add_foreign_key :groups, :group_categories, on_delete: :nullify, validate: false
+ end
+end
diff --git a/db/migrate/20200908210104_validate_add_foreign_key_to_group_for_group_category.rb b/db/migrate/20200908210104_validate_add_foreign_key_to_group_for_group_category.rb
new file mode 100644
index 00000000..a5c6dae4
--- /dev/null
+++ b/db/migrate/20200908210104_validate_add_foreign_key_to_group_for_group_category.rb
@@ -0,0 +1,5 @@
+class ValidateAddForeignKeyToGroupForGroupCategory < ActiveRecord::Migration[5.2]
+ def change
+ validate_foreign_key :groups, :group_categories
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4281b33d..6fa418c8 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2020_09_01_165533) do
+ActiveRecord::Schema.define(version: 2020_09_08_210104) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_stat_statements"
@@ -391,10 +391,9 @@ ActiveRecord::Schema.define(version: 2020_09_01_165533) do
t.boolean "is_private", default: false
t.boolean "is_visible", default: false
t.string "tags", default: [], array: true
- t.bigint "group_categories_id"
t.string "password"
+ t.integer "group_category_id"
t.index ["account_id"], name: "index_groups_on_account_id"
- t.index ["group_categories_id"], name: "index_groups_on_group_categories_id"
t.index ["slug"], name: "index_groups_on_slug", unique: true
end
@@ -959,6 +958,7 @@ ActiveRecord::Schema.define(version: 2020_09_01_165533) do
add_foreign_key "group_pinned_statuses", "statuses", on_delete: :cascade
add_foreign_key "group_removed_accounts", "accounts", on_delete: :cascade
add_foreign_key "group_removed_accounts", "groups", on_delete: :cascade
+ add_foreign_key "groups", "group_categories", on_delete: :nullify
add_foreign_key "identities", "users", name: "fk_bea040f377", on_delete: :cascade
add_foreign_key "imports", "accounts", name: "fk_6db1b6e408", on_delete: :cascade
add_foreign_key "invites", "users", on_delete: :cascade