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 <[email protected]> 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: [],
