@@ -5,17 +5,19 @@ import gbSVG from "./icons/gb.svg";
5
5
import usSVG from "./icons/us.svg" ;
6
6
import sgSVG from "./icons/sg.svg" ;
7
7
8
- import { Button , Checkbox , Form , Input , Modal } from "antd" ;
9
- import { CheckboxChangeEvent } from "antd/lib/checkbox" ;
10
- import { addWeeks , endOfDay , getDay } from "date-fns" ;
8
+ import { useLanguage , useTranslate } from "@netless/flat-i18n" ;
9
+ import Checkbox , { CheckboxChangeEvent } from "antd/lib/checkbox" ;
11
10
import React , { useMemo , useRef , useState } from "react" ;
11
+ import { addWeeks , endOfDay , getDay } from "date-fns" ;
12
+ import { Button , Form , Input , Modal } from "antd" ;
12
13
import { useHistory } from "react-router-dom" ;
13
- import { useLanguage , useTranslate } from "@netless/flat-i18n" ;
14
+
14
15
import { PeriodicEndType , RoomType , Week } from "../../../types/room" ;
15
16
import { renderBeginTimePicker } from "./renderBeginTimePicker" ;
16
17
import { renderEndTimePicker } from "./renderEndTimePicker" ;
17
18
import { renderPeriodicForm } from "./renderPeriodicForm" ;
18
19
import { ClassPicker } from "../../HomePage/ClassPicker" ;
20
+ import { PmiDesc , PmiExistTip } from "../../Pmi" ;
19
21
20
22
export enum Region {
21
23
CN_HZ = "cn-hz" ,
@@ -54,6 +56,7 @@ export interface EditRoomFormValues {
54
56
rate : number ;
55
57
endTime : Date ;
56
58
} ;
59
+ pmi ?: boolean ;
57
60
}
58
61
59
62
export type EditRoomFormInitialValues =
@@ -69,13 +72,21 @@ export interface EditRoomBodyProps {
69
72
onSubmit : ( value : EditRoomFormValues ) => void ;
70
73
previousPeriodicRoomBeginTime ?: number | null ;
71
74
nextPeriodicRoomEndTime ?: number | null ;
75
+ pmi ?: string | null ;
76
+ autoPmiOn ?: boolean ;
77
+ pmiRoomExist ?: boolean ;
78
+ updateAutoPmiOn ?: ( autoPmiOn : boolean ) => void ;
72
79
}
73
80
74
81
export const EditRoomBody : React . FC < EditRoomBodyProps > = ( {
82
+ pmi,
83
+ autoPmiOn,
84
+ pmiRoomExist,
75
85
type,
76
86
initialValues,
77
87
loading,
78
88
onSubmit,
89
+ updateAutoPmiOn,
79
90
previousPeriodicRoomBeginTime,
80
91
nextPeriodicRoomEndTime,
81
92
} ) => {
@@ -84,6 +95,9 @@ export const EditRoomBody: React.FC<EditRoomBodyProps> = ({
84
95
const [ isFormVetted , setIsFormVetted ] = useState ( true ) ;
85
96
const [ isShowEditSubmitConfirm , showEditSubmitConfirm ] = useState ( false ) ;
86
97
98
+ const [ isPeriodic , setIsPeriodic ] = useState ( false ) ;
99
+ const showPmi = useMemo ( ( ) => ! ! pmi && ! isPeriodic , [ isPeriodic , pmi ] ) ;
100
+
87
101
// @TODO : need to remove
88
102
const [ region ] = useState < Region > ( initialValues . region ) ;
89
103
@@ -158,6 +172,26 @@ export const EditRoomBody: React.FC<EditRoomBodyProps> = ({
158
172
nextPeriodicRoomEndTime ,
159
173
) }
160
174
{ renderEndTimePicker ( t , form , nextPeriodicRoomEndTime ) }
175
+ { showPmi && updateAutoPmiOn && (
176
+ < Form . Item
177
+ className = "edit-room-form-item no-margin"
178
+ name = "pmi"
179
+ valuePropName = "checked"
180
+ >
181
+ < Checkbox
182
+ checked = { autoPmiOn }
183
+ disabled = { pmiRoomExist }
184
+ onClick = { ( ) => updateAutoPmiOn ( ! autoPmiOn ) }
185
+ >
186
+ < PmiDesc
187
+ className = "edit-room-cycle"
188
+ pmi = { pmi ! }
189
+ text = { t ( "turn-on-the-pmi" ) }
190
+ />
191
+ { pmiRoomExist && < PmiExistTip /> }
192
+ </ Checkbox >
193
+ </ Form . Item >
194
+ ) }
161
195
{ type === "schedule" ? (
162
196
< Form . Item name = "isPeriodic" valuePropName = "checked" >
163
197
< Checkbox onChange = { onToggleIsPeriodic } >
@@ -306,6 +340,8 @@ export const EditRoomBody: React.FC<EditRoomBodyProps> = ({
306
340
}
307
341
308
342
function formValidateStatus ( ) : void {
343
+ // synchronize isPeriodic when periodic field changed
344
+ setIsPeriodic ( form . getFieldValue ( "isPeriodic" ) ) ;
309
345
setIsFormVetted ( form . getFieldsError ( ) . every ( field => field . errors . length <= 0 ) ) ;
310
346
}
311
347
} ;
0 commit comments