</Form.Control.Feedback>
: null}
</Form.Group>
+ <Form.Group as={Col} controlId="gg.leaderboard_type" md={6}>
+ <Form.Label>{t('twitchBot.guessingGame.leaderboardType')}</Form.Label>
+ <Form.Select
+ isInvalid={!!(touched.leaderboard_type && errors.leaderboard_type)}
+ name="leaderboard_type"
+ onBlur={handleBlur}
+ onChange={handleChange}
+ value={values.leaderboard_type || 'all'}
+ >
+ {['all', 'year', '365', 'month', '30'].map(type =>
+ <option key={type} value={type}>
+ {t(`twitchBot.guessingGame.leaderboardTypes.${type}`)}
+ </option>
+ )}
+ </Form.Select>
+ {touched.leaderboard_type && errors.leaderboard_type ?
+ <Form.Control.Feedback type="invalid">
+ {t(errors.leaderboard_type)}
+ </Form.Control.Feedback>
+ : null}
+ </Form.Group>
</Row>
<Form.Group controlId="gg.start_message">
<Form.Label>{t('twitchBot.guessingGame.startMessage')}</Form.Label>
</Form.Text>
}
</Form.Group>
+ <Form.Group controlId="gg.close_winners_message">
+ <Form.Label>{t('twitchBot.guessingGame.closeWinnersMessage')}</Form.Label>
+ <Form.Control
+ isInvalid={!!(touched.close_winners_message && errors.close_winners_message)}
+ name="close_winners_message"
+ onBlur={handleBlur}
+ onChange={handleChange}
+ type="text"
+ value={values.close_winners_message || ''}
+ />
+ {touched.close_winners_message && errors.close_winners_message ?
+ <Form.Control.Feedback type="invalid">
+ {t(errors.close_winners_message)}
+ </Form.Control.Feedback>
+ :
+ <Form.Text muted>
+ {t('twitchBot.guessingGame.closeWinnersMessageHint')}
+ </Form.Text>
+ }
+ </Form.Group>
<Form.Group controlId="gg.no_winners_message">
<Form.Label>{t('twitchBot.guessingGame.noWinnersMessage')}</Form.Label>
<Form.Control
errors: PropTypes.shape({
active_message: PropTypes.string,
cancel_message: PropTypes.string,
+ close_winners_message: PropTypes.string,
invalid_solution_message: PropTypes.string,
+ leaderboard_type: PropTypes.string,
name: PropTypes.string,
no_winners_message: PropTypes.string,
not_active_message: PropTypes.string,
touched: PropTypes.shape({
active_message: PropTypes.bool,
cancel_message: PropTypes.bool,
+ close_winners_message: PropTypes.bool,
invalid_solution_message: PropTypes.bool,
+ leaderboard_type: PropTypes.bool,
name: PropTypes.bool,
no_winners_message: PropTypes.bool,
not_active_message: PropTypes.bool,
values: PropTypes.shape({
active_message: PropTypes.string,
cancel_message: PropTypes.string,
+ close_winners_message: PropTypes.string,
invalid_solution_message: PropTypes.string,
+ leaderboard_type: PropTypes.string,
name: PropTypes.string,
no_winners_message: PropTypes.string,
not_active_message: PropTypes.string,
return {
active_message: getStringValue(settings, 'active_message', 'ActiveMessage'),
cancel_message: getStringValue(settings, 'cancel_message', 'CancelMessage'),
+ close_winners_message:
+ getStringValue(settings, 'close_winners_message', 'CloseWinnersMessage'),
invalid_solution_message:
getStringValue(settings, 'invalid_solution_message', 'InvalidSolutionMessage'),
+ leaderboard_type: (settings && settings.leaderboard_type) || 'all',
name: name || '',
no_winners_message: getStringValue(settings, 'no_winners_message', 'NoWinnersMessage'),
not_active_message: getStringValue(settings, 'not_active_message', 'NotActiveMessage'),
validationSchema: yup.object().shape({
active_message: yup.string(),
cancel_message: yup.string(),
+ close_winners_message: yup.string(),
+ leaderboard_type: yup.string(),
invalid_solution_message: yup.string(),
name: yup.string().required(),
no_winners_message: yup.string(),