You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2025/10/22 10:44:01 UTC
(answer) 01/03: feat(ui,internal): add min_content property in site info
This is an automated email from the ASF dual-hosted git repository.
linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git
commit f238aa50510ccf054f296b92e31c9dd8f1ac7f4f
Author: Dinesht04 <di...@gmail.com>
AuthorDate: Thu Oct 16 23:06:22 2025 +0530
feat(ui,internal): add min_content property in site info
---
i18n/en_US.yaml | 5 ++++-
internal/migrations/init.go | 1 +
internal/migrations/v28.go | 2 ++
internal/schema/siteinfo_schema.go | 1 +
ui/src/common/interface.ts | 1 +
ui/src/pages/Admin/Write/index.tsx | 33 ++++++++++++++++++++++++++++-----
ui/src/stores/writeSetting.ts | 1 +
7 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/i18n/en_US.yaml b/i18n/en_US.yaml
index 146cd0af..5f694ea2 100644
--- a/i18n/en_US.yaml
+++ b/i18n/en_US.yaml
@@ -2122,13 +2122,16 @@ ui:
ask_before_display: Ask before displaying external content
write:
page_title: Write
+ min_content:
+ label: Minimum question body length
+ text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for the same question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
- text: "Minimum number of tags required in a question"
+ text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
diff --git a/internal/migrations/init.go b/internal/migrations/init.go
index a14a371d..392ecb2c 100644
--- a/internal/migrations/init.go
+++ b/internal/migrations/init.go
@@ -289,6 +289,7 @@ func (m *Mentor) initSiteInfoPrivilegeRank() {
func (m *Mentor) initSiteInfoWrite() {
writeData := map[string]interface{}{
+ "min_content": 6,
"restrict_answer": true,
"min_tags": 1,
"required_tag": false,
diff --git a/internal/migrations/v28.go b/internal/migrations/v28.go
index 8b834afa..0fa8ef88 100644
--- a/internal/migrations/v28.go
+++ b/internal/migrations/v28.go
@@ -41,6 +41,7 @@ func addOptionalTags(ctx context.Context, x *xorm.Engine) error {
}
if exist {
type OldSiteWriteReq struct {
+ MinimumContent int `json:"min_content"`
RestrictAnswer bool `json:"restrict_answer"`
MinimumTags int `json:"min_tags"`
RequiredTag bool `json:"required_tag"`
@@ -55,6 +56,7 @@ func addOptionalTags(ctx context.Context, x *xorm.Engine) error {
content := &OldSiteWriteReq{}
_ = json.Unmarshal([]byte(writeSiteInfo.Content), content)
content.MinimumTags = 1
+ content.MinimumContent = 6
data, _ := json.Marshal(content)
writeSiteInfo.Content = string(data)
_, err = x.Context(ctx).ID(writeSiteInfo.ID).Cols("content").Update(writeSiteInfo)
diff --git a/internal/schema/siteinfo_schema.go b/internal/schema/siteinfo_schema.go
index 1ecd9760..d946589d 100644
--- a/internal/schema/siteinfo_schema.go
+++ b/internal/schema/siteinfo_schema.go
@@ -75,6 +75,7 @@ type SiteBrandingReq struct {
// SiteWriteReq site write request
type SiteWriteReq struct {
+ MinimumContent int `validate:"omitempty" json:"min_content"`
RestrictAnswer bool `validate:"omitempty" json:"restrict_answer"`
MinimumTags int `validate:"omitempty" json:"min_tags"`
RequiredTag bool `validate:"omitempty" json:"required_tag"`
diff --git a/ui/src/common/interface.ts b/ui/src/common/interface.ts
index bade01ea..b5a242e4 100644
--- a/ui/src/common/interface.ts
+++ b/ui/src/common/interface.ts
@@ -440,6 +440,7 @@ export interface AdminSettingsLegal {
export interface AdminSettingsWrite {
restrict_answer?: boolean;
min_tags?: number,
+ min_content?:number,
recommend_tags?: Tag[];
required_tag?: boolean;
reserved_tags?: Tag[];
diff --git a/ui/src/pages/Admin/Write/index.tsx b/ui/src/pages/Admin/Write/index.tsx
index 15c0c2a6..86d44d6d 100644
--- a/ui/src/pages/Admin/Write/index.tsx
+++ b/ui/src/pages/Admin/Write/index.tsx
@@ -37,6 +37,11 @@ const initFormData = {
errorMsg: '',
isInvalid: false,
},
+ min_content: {
+ value: 0,
+ errorMsg: '',
+ isInvalid: false,
+ },
min_tags: {
value: 0,
errorMsg: '',
@@ -142,6 +147,7 @@ const Index: FC = () => {
reserved_tags: formData.reserved_tags.value,
required_tag: formData.required_tag.value,
restrict_answer: formData.restrict_answer.value,
+ min_content: Number(formData.min_content.value),
max_image_size: Number(formData.max_image_size.value),
max_attachment_size: Number(formData.max_attachment_size.value),
max_image_megapixel: Number(formData.max_image_megapixel.value),
@@ -183,6 +189,7 @@ const Index: FC = () => {
if (Array.isArray(res.recommend_tags)) {
formData.recommend_tags.value = res.recommend_tags;
}
+ formData.min_content.value = res.min_content;
formData.min_tags.value = res.min_tags;
formData.required_tag.value = res.required_tag;
formData.restrict_answer.value = res.restrict_answer;
@@ -204,10 +211,6 @@ const Index: FC = () => {
initData();
}, []);
- // const handleOnChange = (data) => {
- // setFormData(data);
- // };
-
return (
<>
<h3 className="mb-4">{t('page_title')}</h3>
@@ -295,7 +298,27 @@ const Index: FC = () => {
{formData.required_tag.errorMsg}
</Form.Control.Feedback>
</Form.Group>
-
+ <Form.Group className="mb-3" controlId="min_content">
+ <Form.Label>{t('min_content.label')}</Form.Label>
+ <Form.Control
+ type="number"
+ value={formData.min_content.value}
+ isInvalid={formData.min_content.isInvalid}
+ onChange={(evt) => {
+ handleValueChange({
+ min_content: {
+ value: evt.target.value,
+ errorMsg: '',
+ isInvalid: false,
+ },
+ });
+ }}
+ />
+ <Form.Text>{t('min_content.text')}</Form.Text>
+ <Form.Control.Feedback type="invalid">
+ {formData.min_content.errorMsg}
+ </Form.Control.Feedback>
+ </Form.Group>
<Form.Group className="mb-3" controlId="restrict_answer">
<Form.Label>{t('restrict_answer.title')}</Form.Label>
<Form.Switch
diff --git a/ui/src/stores/writeSetting.ts b/ui/src/stores/writeSetting.ts
index 9c44c964..9f6542d2 100644
--- a/ui/src/stores/writeSetting.ts
+++ b/ui/src/stores/writeSetting.ts
@@ -30,6 +30,7 @@ const Index = create<IProps>((set) => ({
write: {
restrict_answer: true,
min_tags: 1,
+ min_content: 6,
recommend_tags: [],
required_tag: false,
reserved_tags: [],