From b870bdd99903eaea6ad2112cc304e33110660799 Mon Sep 17 00:00:00 2001 From: Liordino Neto Date: Mon, 6 Jul 2020 21:42:18 -0300 Subject: [PATCH] fix: make all fields required on the Terms & Conditions page if Show on screen is enabled fix: enable/disable the Terms & Conditions form based on the Show on screen toggle fix: replaced deactivated field with plain text when not editing fix: make de non editable text content field scrollable style: make it follow the same style as the other screens, with the edit button and links to save and cancel --- .../pages/OperatorInfo/OperatorInfo.styles.js | 49 ++++++- .../src/pages/OperatorInfo/TermsConditions.js | 128 ++++++++++++++---- 2 files changed, 150 insertions(+), 27 deletions(-) diff --git a/new-lamassu-admin/src/pages/OperatorInfo/OperatorInfo.styles.js b/new-lamassu-admin/src/pages/OperatorInfo/OperatorInfo.styles.js index 80cada18..756b864b 100644 --- a/new-lamassu-admin/src/pages/OperatorInfo/OperatorInfo.styles.js +++ b/new-lamassu-admin/src/pages/OperatorInfo/OperatorInfo.styles.js @@ -95,4 +95,51 @@ const termsConditionsStyles = { } } -export { styles, contactInfoStyles, termsConditionsStyles } +const fieldStyles = { + field: { + position: 'relative', + width: 280, + padding: [[0, 4, 4, 0]] + }, + notEditing: { + display: 'flex', + flexDirection: 'column' + }, + notEditingSingleLine: { + '& > p:first-child': { + height: 16, + lineHeight: '16px', + transform: 'scale(0.75)', + transformOrigin: 'left', + paddingLeft: 0, + margin: [[1, 0, 6, 0]] + }, + '& > p:last-child': { + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + height: 25, + margin: 0 + } + }, + notEditingMultiline: { + '& > p:first-child': { + height: 16, + lineHeight: '16px', + transform: 'scale(0.75)', + transformOrigin: 'left', + paddingLeft: 0, + margin: [[1, 0, 5, 0]] + }, + '& > p:last-child': { + width: 502, + height: 121, + overflowY: 'auto', + lineHeight: '19px', + wordWrap: 'anywhere', + margin: 0 + } + } +} + +export { styles, contactInfoStyles, termsConditionsStyles, fieldStyles } diff --git a/new-lamassu-admin/src/pages/OperatorInfo/TermsConditions.js b/new-lamassu-admin/src/pages/OperatorInfo/TermsConditions.js index 9aaf16da..7e7167e8 100644 --- a/new-lamassu-admin/src/pages/OperatorInfo/TermsConditions.js +++ b/new-lamassu-admin/src/pages/OperatorInfo/TermsConditions.js @@ -1,24 +1,77 @@ import { useQuery, useMutation } from '@apollo/react-hooks' import { makeStyles } from '@material-ui/core' import classnames from 'classnames' -import { Form, Formik, Field } from 'formik' +import { Form, Formik, Field as FormikField } from 'formik' import gql from 'graphql-tag' import * as R from 'ramda' import React, { useState } from 'react' import * as Yup from 'yup' import ErrorMessage from 'src/components/ErrorMessage' -import { Button } from 'src/components/buttons' +import { Link } from 'src/components/buttons' import { Switch } from 'src/components/inputs' import { TextInput } from 'src/components/inputs/formik' -import { Info2, Label2 } from 'src/components/typography' +import { Info2, Info3, Label2, Label3 } from 'src/components/typography' +import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' import { fromNamespace, toNamespace, namespaces } from 'src/utils/config' import { styles as globalStyles, - termsConditionsStyles + termsConditionsStyles, + fieldStyles } from './OperatorInfo.styles' +const useFieldStyles = makeStyles(fieldStyles) + +const Field = ({ + editing, + name, + width, + placeholder, + label, + value, + multiline = false, + rows, + onFocus, + ...props +}) => { + const classes = useFieldStyles() + + const classNames = { + [classes.field]: true, + [classes.notEditing]: !editing, + [classes.notEditingSingleLine]: !editing && !multiline, + [classes.notEditingMultiline]: !editing && multiline + } + + return ( +
+ {!editing && ( + <> + {label} + {value} + + )} + {editing && ( + + )} +
+ ) +} + const GET_CONFIG = gql` { config @@ -33,12 +86,13 @@ const SAVE_CONFIG = gql` const styles = R.merge(globalStyles, termsConditionsStyles) -const useStyles = makeStyles(styles) +const useTermsConditionsStyles = makeStyles(styles) const TermsConditions = () => { const [showOnScreen, setShowOnScreen] = useState(false) const [formData, setFormData] = useState(null) const [error, setError] = useState(null) + const [editing, setEditing] = useState(false) const [saveConfig] = useMutation(SAVE_CONFIG, { onCompleted: data => { const termsAndConditions = fromNamespace( @@ -48,11 +102,12 @@ const TermsConditions = () => { setFormData(termsAndConditions) setShowOnScreen(termsAndConditions.active) setError(null) + setEditing(false) }, onError: e => setError(e) }) - const classes = useStyles() + const classes = useTermsConditionsStyles() useQuery(GET_CONFIG, { onCompleted: data => { @@ -121,9 +176,16 @@ const TermsConditions = () => { } const validationSchema = Yup.object().shape({ - title: Yup.string().max(50, 'Too long'), - acceptButtonText: Yup.string().max(15, 'Too long'), - cancelButtonText: Yup.string().max(15, 'Too long') + title: Yup.string() + .required() + .max(50, 'Too long'), + text: Yup.string().required(), + acceptButtonText: Yup.string() + .required() + .max(15, 'Too long'), + cancelButtonText: Yup.string() + .required() + .max(15, 'Too long') }) return ( @@ -137,41 +199,55 @@ const TermsConditions = () => { {showOnScreen ? 'Yes' : 'No'} +
+ Info card + {!editing && ( +
+ +
+ )} +
{ - save(values) + onSubmit={values => save(values)} + onReset={() => { + setEditing(false) + setError(null) }}>
{fields.map((f, idx) => (
setError(null)} />
))} -
- - {error && ( - - Failed to save changes - +
+ {editing && ( + <> + + Save + + + Cancel + + {error && ( + + Failed to save changes + + )} + )}