= ({
doc_category={SSA}
/>
-
-
+
+
+ {validationState.expirationDateError && (
+
+ {validationState.expirationDateErrorMessage}
+
+ )}
@@ -349,19 +367,18 @@ const SsaForm: React.FC = ({
/>
- {formik.values.is_expirable && (
-
-
-
- )}
+
+
+
@@ -374,10 +391,6 @@ const SsaForm: React.FC = ({
value={formik.values[attribute] as string}
modifiedFields={modifiedFields}
setModifiedFields={setModifiedFields}
- // GluuRemovableInputRow constrains FormikProps to Record;
- // SsaFormValues includes a Dayjs `expirationDate` (not JsonValue), but this row
- // only ever reads the dynamic string-valued custom attribute fields, so the cast
- // is safe at runtime.
formik={formik as object as FormikProps>}
lsize={12}
handler={() => handleAttributeRemove(attribute)}
diff --git a/admin-ui/plugins/auth-server/components/Ssa/components/styles/SsaForm.style.ts b/admin-ui/plugins/auth-server/components/Ssa/components/styles/SsaForm.style.ts
index 74c0d2f5d..0ea5089ce 100644
--- a/admin-ui/plugins/auth-server/components/Ssa/components/styles/SsaForm.style.ts
+++ b/admin-ui/plugins/auth-server/components/Ssa/components/styles/SsaForm.style.ts
@@ -165,11 +165,47 @@ export const useStyles = makeStyles()((_, { isDark, themeCo
margin: '1px 2px',
},
datePickerCell: {
+ 'position': 'relative' as const,
+ 'minWidth': 0,
+ 'boxSizing': 'border-box' as const,
'display': 'flex',
- 'alignItems': 'center',
+ 'flexDirection': 'column',
+ 'alignItems': 'stretch',
'& .MuiInputBase-root': {
backgroundColor: `${inputBg} !important`,
},
+ '& .MuiPickersInputBase-root.Mui-disabled': {
+ opacity: OPACITY.DISABLED,
+ cursor: 'not-allowed',
+ },
+ '& .MuiInputLabel-root, & .MuiPickersInputBase-root .MuiInputLabel-root': {
+ display: 'none',
+ },
+ '& .MuiOutlinedInput-notchedOutline legend, & .MuiPickersOutlinedInput-notchedOutline legend':
+ {
+ display: 'none',
+ width: 0,
+ maxWidth: 0,
+ },
+ '& label': {
+ flex: '0 0 auto',
+ display: 'block',
+ width: '100%',
+ maxWidth: '100%',
+ paddingTop: 0,
+ paddingBottom: 0,
+ paddingLeft: 0,
+ paddingRight: 0,
+ marginBottom: '4px !important',
+ },
+ },
+ datePickerError: {
+ position: 'absolute' as const,
+ top: '100%',
+ left: 0,
+ marginTop: 2,
+ color: themeColors.errorColor,
+ fontSize: fontSizes.sm,
},
claimsPanelWrap: {
flex: 1,
diff --git a/admin-ui/plugins/auth-server/components/Ssa/helper/validations.ts b/admin-ui/plugins/auth-server/components/Ssa/helper/validations.ts
index 03f6dfe12..226da3670 100644
--- a/admin-ui/plugins/auth-server/components/Ssa/helper/validations.ts
+++ b/admin-ui/plugins/auth-server/components/Ssa/helper/validations.ts
@@ -71,7 +71,7 @@ export const getSsaValidationSchema = () =>
return false
}
- return dateValue.isAfter(dayjs())
+ return dateValue.isAfter(dayjs(), 'day')
},
),
}) as Yup.ObjectSchema
diff --git a/admin-ui/plugins/auth-server/components/Ssa/hooks/useSsaValidationState.ts b/admin-ui/plugins/auth-server/components/Ssa/hooks/useSsaValidationState.ts
index 2d0d6a89a..086eb4475 100644
--- a/admin-ui/plugins/auth-server/components/Ssa/hooks/useSsaValidationState.ts
+++ b/admin-ui/plugins/auth-server/components/Ssa/hooks/useSsaValidationState.ts
@@ -13,6 +13,8 @@ type SsaValidationState = {
grantTypesErrorMessage: string
descriptionError: boolean
descriptionErrorMessage: string
+ expirationDateError: boolean
+ expirationDateErrorMessage: string
}
export const useSsaValidationState = (formik: FormikProps): SsaValidationState => {
@@ -33,6 +35,9 @@ export const useSsaValidationState = (formik: FormikProps): SsaVa
descriptionError: Boolean(formik.touched.description && formik.errors.description),
descriptionErrorMessage:
typeof formik.errors.description === 'string' ? formik.errors.description : '',
+ expirationDateError: Boolean(formik.values.is_expirable && formik.errors.expirationDate),
+ expirationDateErrorMessage:
+ typeof formik.errors.expirationDate === 'string' ? formik.errors.expirationDate : '',
}),
[
formik.touched.software_id,
@@ -45,6 +50,8 @@ export const useSsaValidationState = (formik: FormikProps): SsaVa
formik.errors.grant_types,
formik.touched.description,
formik.errors.description,
+ formik.values.is_expirable,
+ formik.errors.expirationDate,
],
)
}