@@ -14,9 +14,10 @@ import {
1414 Tag ,
1515 message ,
1616} from "antd"
17- import { Utils as QbUtils , type ImmutableTree } from "@react-awesome-query-builder/antd"
17+ import { type ImmutableTree } from "@react-awesome-query-builder/antd"
1818import type { ColumnsType } from "antd/es/table"
1919import { useTranslation } from "react-i18next"
20+ import { fetchAllTags } from "./TagEditorDialog"
2021import { ActionEditor } from "./AutoScoreManagerPage/ActionEditor"
2122import { TriggerRuleBuilder } from "./AutoScoreManagerPage/TriggerRuleBuilder"
2223import {
@@ -30,13 +31,19 @@ import {
3031 triggersToQueryTree ,
3132 type ActionDraft ,
3233 type AutoScoreRule ,
34+ type AutoScoreTagOption ,
3335} from "./AutoScoreManagerPage/AutoScoreUtils"
3436
3537interface StudentItem {
3638 id : number
3739 name : string
3840}
3941
42+ interface TagItem {
43+ id : number
44+ name : string
45+ }
46+
4047interface RuleFormValues {
4148 name ?: string
4249 studentNames ?: string [ ]
@@ -50,10 +57,20 @@ function AutoScoreManager({ canEdit }: AutoScoreManagerProps): React.JSX.Element
5057 const { t, i18n } = useTranslation ( )
5158 const [ form ] = Form . useForm < RuleFormValues > ( )
5259 const [ messageApi , contextHolder ] = message . useMessage ( )
60+ const [ tags , setTags ] = useState < TagItem [ ] > ( [ ] )
61+
62+ const tagOptions = useMemo < AutoScoreTagOption [ ] > (
63+ ( ) =>
64+ tags . map ( ( tag ) => ( {
65+ label : tag . name ,
66+ value : tag . name ,
67+ } ) ) ,
68+ [ tags ]
69+ )
5370
5471 const triggerConfig = useMemo (
55- ( ) => createTriggerQueryConfig ( t ) ,
56- [ i18n . resolvedLanguage , i18n . language ]
72+ ( ) => createTriggerQueryConfig ( t , tagOptions ) ,
73+ [ i18n . resolvedLanguage , i18n . language , tagOptions ]
5774 )
5875 const [ triggerTree , setTriggerTree ] = useState < ImmutableTree > ( ( ) =>
5976 createEmptyTriggerTree ( triggerConfig )
@@ -67,10 +84,6 @@ function AutoScoreManager({ canEdit }: AutoScoreManagerProps): React.JSX.Element
6784 const [ currentPage , setCurrentPage ] = useState ( 1 )
6885 const [ pageSize , setPageSize ] = useState ( 10 )
6986
70- useEffect ( ( ) => {
71- setTriggerTree ( ( prevTree ) => QbUtils . checkTree ( prevTree , triggerConfig ) )
72- } , [ triggerConfig ] )
73-
7487 useEffect ( ( ) => {
7588 const maxPage = Math . max ( 1 , Math . ceil ( rules . length / pageSize ) )
7689 if ( currentPage > maxPage ) {
@@ -103,6 +116,19 @@ function AutoScoreManager({ canEdit }: AutoScoreManagerProps): React.JSX.Element
103116 }
104117 }
105118
119+ const fetchTags = async ( ) => {
120+ if ( ! canEdit ) return
121+
122+ try {
123+ const tagList = await fetchAllTags ( )
124+ if ( Array . isArray ( tagList ) ) {
125+ setTags ( tagList )
126+ }
127+ } catch {
128+ void 0
129+ }
130+ }
131+
106132 const fetchRules = async ( ) => {
107133 const api = ( window as any ) . api
108134 if ( ! api || ! canEdit ) return
@@ -124,6 +150,7 @@ function AutoScoreManager({ canEdit }: AutoScoreManagerProps): React.JSX.Element
124150
125151 useEffect ( ( ) => {
126152 if ( ! canEdit ) return
153+ fetchTags ( ) . catch ( ( ) => void 0 )
127154 fetchStudents ( ) . catch ( ( ) => void 0 )
128155 fetchRules ( ) . catch ( ( ) => void 0 )
129156 } , [ canEdit ] )
@@ -387,10 +414,15 @@ function AutoScoreManager({ canEdit }: AutoScoreManagerProps): React.JSX.Element
387414 config = { triggerConfig }
388415 value = { triggerTree }
389416 canEdit = { canEdit }
390- onChange = { ( nextTree , config ) => setTriggerTree ( QbUtils . checkTree ( nextTree , config ) ) }
417+ onChange = { ( nextTree ) => setTriggerTree ( nextTree ) }
391418 />
392419
393- < ActionEditor value = { actionDrafts } canEdit = { canEdit } onChange = { setActionDrafts } />
420+ < ActionEditor
421+ value = { actionDrafts }
422+ tagOptions = { tagOptions }
423+ canEdit = { canEdit }
424+ onChange = { setActionDrafts }
425+ />
394426
395427 < div style = { { marginBottom : "24px" , display : "flex" , gap : "12px" } } >
396428 < Button type = "primary" loading = { saving } disabled = { ! canEdit } onClick = { ( ) => handleSubmit ( ) . catch ( ( ) => void 0 ) } >
0 commit comments