feat: custom tooltip instead of browser tooltip

fix: remove default browser tooltip
fix: rename HelpTooltip into Tooltip
feat: allow custom tooltip element
fix: open cashout fudgefactor help tooltip on click
feat: edit and delete (editabletable) custom tooltip
feat: custom tooltip on single field editables
feat: SingleRowTable custom tooltip
feat: custom tooltip on modal close button
fix: operatorinfo custom tooltip
feat: confirmdialog custom close tooltip
fix: remove browser default tooltip from action buttons
fix: eslint
This commit is contained in:
Mauricio Navarro Miranda 2020-08-13 04:26:42 -05:00 committed by Josh Harvey
parent f700b29b3d
commit 653f939856
18 changed files with 250 additions and 145 deletions

View file

@ -10,6 +10,7 @@ import React, { useEffect, useState, memo } from 'react'
import { Button, IconButton } from 'src/components/buttons' import { Button, IconButton } from 'src/components/buttons'
import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg' import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg'
import Tooltip from './Tooltip'
import { TextInput } from './inputs' import { TextInput } from './inputs'
import { H4, P } from './typography' import { H4, P } from './typography'
@ -41,13 +42,16 @@ export const DialogTitle = ({ children, onClose }) => {
<div className={classes.wrapper}> <div className={classes.wrapper}>
{children} {children}
{onClose && ( {onClose && (
<IconButton <Tooltip
size={16}
aria-label="close"
className={classes.closeButton} className={classes.closeButton}
onClick={onClose}> enableOver
<CloseIcon /> element={
</IconButton> <IconButton size={16} aria-label="close" onClick={onClose}>
<CloseIcon />
</IconButton>
}>
<P>Close</P>
</Tooltip>
)} )}
</div> </div>
) )

View file

@ -1,55 +0,0 @@
import { makeStyles, ClickAwayListener } from '@material-ui/core'
import React, { useState, memo } from 'react'
import Popper from 'src/components/Popper'
import { P } from 'src/components/typography'
import { ReactComponent as HelpIcon } from 'src/styling/icons/action/help/zodiac.svg'
const useStyles = makeStyles({
transparentButton: {
border: 'none',
backgroundColor: 'transparent',
marginTop: 4,
cursor: 'pointer'
},
popoverContent: ({ width }) => ({
width,
padding: [[10, 15]]
})
})
const HelpTooltip = memo(({ children, width }) => {
const classes = useStyles({ width })
const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null)
const handleOpenHelpPopper = event => {
setHelpPopperAnchorEl(helpPopperAnchorEl ? null : event.currentTarget)
}
const handleCloseHelpPopper = () => {
setHelpPopperAnchorEl(null)
}
const helpPopperOpen = Boolean(helpPopperAnchorEl)
return (
<ClickAwayListener onClickAway={handleCloseHelpPopper}>
<button
className={classes.transparentButton}
onClick={handleOpenHelpPopper}>
<HelpIcon />
<Popper
open={helpPopperOpen}
anchorEl={helpPopperAnchorEl}
placement="bottom"
onClose={handleCloseHelpPopper}>
<div className={classes.popoverContent}>
<P>{children}</P>
</div>
</Popper>
</button>
</ClickAwayListener>
)
})
export default HelpTooltip

View file

@ -3,9 +3,11 @@ import classnames from 'classnames'
import React from 'react' import React from 'react'
import { IconButton } from 'src/components/buttons' import { IconButton } from 'src/components/buttons'
import { H1, H4 } from 'src/components/typography' import { H1, H4, P } from 'src/components/typography'
import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg' import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg'
import Tooltip from './Tooltip'
const styles = { const styles = {
modal: { modal: {
display: 'flex', display: 'flex',
@ -74,12 +76,16 @@ const Modal = ({
<Paper className={classnames(classes.wrapper, className)}> <Paper className={classnames(classes.wrapper, className)}>
<div className={classes.header}> <div className={classes.header}>
{title && <TitleCase className={classes.title}>{title}</TitleCase>} {title && <TitleCase className={classes.title}>{title}</TitleCase>}
<IconButton <Tooltip
size={closeSize} enableOver
className={classes.button} className={classes.button}
onClick={() => handleClose()}> element={
<CloseIcon /> <IconButton size={closeSize} onClick={() => handleClose()}>
</IconButton> <CloseIcon />
</IconButton>
}>
<P>Close</P>
</Tooltip>
</div> </div>
<div className={classes.content}>{children}</div> <div className={classes.content}>{children}</div>
</Paper> </Paper>

View file

@ -0,0 +1,82 @@
import { makeStyles, ClickAwayListener } from '@material-ui/core'
import classnames from 'classnames'
import React, { useState, memo, cloneElement } from 'react'
import Popper from 'src/components/Popper'
import { ReactComponent as HelpIcon } from 'src/styling/icons/action/help/zodiac.svg'
const useStyles = makeStyles({
transparentButton: {
border: 'none',
backgroundColor: 'transparent',
marginTop: 4,
cursor: 'pointer'
},
preventDefaultTooltip: {
pointerEvents: 'none'
},
popoverContent: ({ width }) => ({
width,
padding: [[10, 15]]
})
})
const Tooltip = memo(
({
enableOver = false,
enableClick = false,
className,
element,
children,
width,
...props
}) => {
const classes = useStyles({ width })
const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null)
const handleOpenHelpPopper = event => {
setHelpPopperAnchorEl(helpPopperAnchorEl ? null : event.currentTarget)
}
const handleCloseHelpPopper = () => {
setHelpPopperAnchorEl(null)
}
const helpPopperOpen = Boolean(helpPopperAnchorEl)
return (
<ClickAwayListener onClickAway={handleCloseHelpPopper}>
<button
type={'button'}
className={classnames(className, classes.transparentButton)}
onPointerOver={event => enableOver && handleOpenHelpPopper(event)}
onClick={
element?.props?.onClick
? element.props.onClick
: event => enableClick && handleOpenHelpPopper(event)
}
{...props}>
{element &&
cloneElement(element, {
className: classnames(
element.props.className,
classes.preventDefaultTooltip
)
})}
{!element && (
<HelpIcon className={classes.preventDefaultTooltip}></HelpIcon>
)}
<Popper
open={helpPopperOpen}
anchorEl={helpPopperAnchorEl}
placement="bottom"
onClose={handleCloseHelpPopper}>
<div className={classes.popoverContent}>{children}</div>
</Popper>
</button>
</ClickAwayListener>
)
}
)
export default Tooltip

View file

@ -2,14 +2,16 @@ import { makeStyles } from '@material-ui/core/styles'
import classnames from 'classnames' import classnames from 'classnames'
import React, { useState, memo } from 'react' import React, { useState, memo } from 'react'
import { Link } from 'src/components/buttons' import { Link, IconButton } from 'src/components/buttons'
import { RadioGroup } from 'src/components/inputs' import { RadioGroup } from 'src/components/inputs'
import { Table, TableBody, TableRow, TableCell } from 'src/components/table' import { Table, TableBody, TableRow, TableCell } from 'src/components/table'
import BooleanCell from 'src/components/tables/BooleanCell' import BooleanCell from 'src/components/tables/BooleanCell'
import { H4 } from 'src/components/typography' import { H4, P } from 'src/components/typography'
import { ReactComponent as EditIconDisabled } from 'src/styling/icons/action/edit/disabled.svg' import { ReactComponent as EditIconDisabled } from 'src/styling/icons/action/edit/disabled.svg'
import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg'
import Tooltip from '../Tooltip'
import { booleanPropertiesTableStyles } from './BooleanPropertiesTable.styles' import { booleanPropertiesTableStyles } from './BooleanPropertiesTable.styles'
const useStyles = makeStyles(booleanPropertiesTableStyles) const useStyles = makeStyles(booleanPropertiesTableStyles)
@ -69,11 +71,25 @@ const BooleanPropertiesTable = memo(
</Link> </Link>
</div> </div>
) : ( ) : (
<div className={classes.transparentButton}> <>
<button disabled={disabled} onClick={() => setEditing(true)}> {disabled && (
{disabled ? <EditIconDisabled /> : <EditIcon />} <IconButton disabled>
</button> <EditIconDisabled />
</div> </IconButton>
)}
{!disabled && (
<Tooltip
enableOver
element={
<IconButton onClick={() => setEditing(true)}>
<EditIcon />
</IconButton>
}>
<P>Configure the following properties as desired</P>
</Tooltip>
)}
</>
)} )}
</div> </div>
<Table className={classes.fillColumn}> <Table className={classes.fillColumn}>

View file

@ -19,7 +19,7 @@ const ActionButton = memo(
<button className={classnames(classNames, className)} {...props}> <button className={classnames(classNames, className)} {...props}>
{Icon && ( {Icon && (
<div className={classes.actionButtonIcon}> <div className={classes.actionButtonIcon}>
<Icon /> <Icon className={classes.preventDefaultTooltip} />
</div> </div>
)} )}
{InverseIcon && ( {InverseIcon && (

View file

@ -23,6 +23,9 @@ const colors = (color1, color2, color3) => {
} }
export default { export default {
preventDefaultTooltip: {
pointerEvents: 'none'
},
actionButton: { actionButton: {
extend: p, extend: p,
cursor: 'pointer', cursor: 'pointer',

View file

@ -7,6 +7,9 @@ import baseButtonStyles from './BaseButton.styles'
const { baseButton, primary } = baseButtonStyles const { baseButton, primary } = baseButtonStyles
const styles = { const styles = {
preventDefaultTooltip: {
pointerEvents: 'none'
},
featureButton: { featureButton: {
extend: baseButton, extend: baseButton,
width: baseButton.height, width: baseButton.height,
@ -44,7 +47,7 @@ const FeatureButton = memo(
<button className={classnames(classNames, className)} {...props}> <button className={classnames(classNames, className)} {...props}>
{Icon && ( {Icon && (
<div className={classes.buttonIcon}> <div className={classes.buttonIcon}>
<Icon /> <Icon className={classes.preventDefaultTooltip} />
</div> </div>
)} )}
{InverseIcon && ( {InverseIcon && (

View file

@ -7,6 +7,9 @@ import baseButtonStyles from './BaseButton.styles'
const { baseButton, primary } = baseButtonStyles const { baseButton, primary } = baseButtonStyles
const styles = { const styles = {
preventDefaultTooltip: {
pointerEvents: 'none'
},
button: { button: {
extend: baseButton, extend: baseButton,
borderRadius: baseButton.height / 2, borderRadius: baseButton.height / 2,
@ -38,7 +41,7 @@ const SimpleButton = memo(
{...props}> {...props}>
{Icon && ( {Icon && (
<div className={classes.buttonIcon}> <div className={classes.buttonIcon}>
<Icon /> <Icon className={classes.preventDefaultTooltip} />
</div> </div>
)} )}
{InverseIcon && ( {InverseIcon && (

View file

@ -3,10 +3,11 @@ import { Field, useFormikContext } from 'formik'
import * as R from 'ramda' import * as R from 'ramda'
import React, { useContext } from 'react' import React, { useContext } from 'react'
import Tooltip from 'src/components/Tooltip'
import { Link, IconButton } from 'src/components/buttons' import { Link, IconButton } from 'src/components/buttons'
import { Td, Tr } from 'src/components/fake-table/Table' import { Td, Tr } from 'src/components/fake-table/Table'
import { Switch } from 'src/components/inputs' import { Switch } from 'src/components/inputs'
import { TL2 } from 'src/components/typography' import { TL2, P } from 'src/components/typography'
import { ReactComponent as DisabledDeleteIcon } from 'src/styling/icons/action/delete/disabled.svg' import { ReactComponent as DisabledDeleteIcon } from 'src/styling/icons/action/delete/disabled.svg'
import { ReactComponent as DeleteIcon } from 'src/styling/icons/action/delete/enabled.svg' import { ReactComponent as DeleteIcon } from 'src/styling/icons/action/delete/enabled.svg'
import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg' import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg'
@ -54,19 +55,46 @@ const ActionCol = ({ disabled, editing }) => {
)} )}
{!editing && enableEdit && ( {!editing && enableEdit && (
<Td textAlign="center" width={editWidth}> <Td textAlign="center" width={editWidth}>
<IconButton {!disableEdit && (
disabled={disableEdit} <Tooltip
className={classes.editButton} enableOver
onClick={() => onEdit && onEdit(values.id)}> element={
{disableEdit ? <DisabledEditIcon /> : <EditIcon />} <IconButton
</IconButton> className={classes.editButton}
onClick={() => onEdit && onEdit(values.id)}>
<EditIcon />
</IconButton>
}>
<P>Modify row contents</P>
</Tooltip>
)}
{disableEdit && (
<IconButton disabled className={classes.editButton}>
<DisabledEditIcon />
</IconButton>
)}
</Td> </Td>
)} )}
{!editing && enableDelete && ( {!editing && enableDelete && (
<Td textAlign="center" width={deleteWidth}> <Td textAlign="center" width={deleteWidth}>
<IconButton disabled={disabled} onClick={() => onDelete(values.id)}> {!disabled && (
{disabled ? <DisabledDeleteIcon /> : <DeleteIcon />} <Tooltip
</IconButton> enableOver
element={
<IconButton onClick={() => onDelete(values.id)}>
<DeleteIcon />
</IconButton>
}>
<P>Delete row</P>
</Tooltip>
)}
{disabled && (
<IconButton disabled>
<DisabledDeleteIcon />
</IconButton>
)}
</Td> </Td>
)} )}
{!editing && enableToggle && ( {!editing && enableToggle && (

View file

@ -39,7 +39,7 @@ function Select({ label, items, ...props }) {
<label {...getLabelProps()}>{startCase(label)}</label> <label {...getLabelProps()}>{startCase(label)}</label>
<button {...getToggleButtonProps()}> <button {...getToggleButtonProps()}>
<span className={classes.selectedItem}>{startCase(selectedItem)}</span> <span className={classes.selectedItem}>{startCase(selectedItem)}</span>
<Arrowdown /> <Arrowdown className={classes.preventDefaultTooltip}/>
</button> </button>
<ul {...getMenuProps()}> <ul {...getMenuProps()}>
{isOpen && {isOpen &&

View file

@ -6,6 +6,9 @@ const { p, label1 } = typographyStyles
const WIDTH = 152 const WIDTH = 152
export default { export default {
preventDefaultTooltip: {
pointerEvents: 'none'
},
selectedItem: { selectedItem: {
width: WIDTH - 41, width: WIDTH - 41,
display: 'block', display: 'block',

View file

@ -2,6 +2,7 @@ import { makeStyles } from '@material-ui/core'
import classnames from 'classnames' import classnames from 'classnames'
import React from 'react' import React from 'react'
import Tooltip from 'src/components/Tooltip'
import { IconButton } from 'src/components/buttons' import { IconButton } from 'src/components/buttons'
import { import {
Table, Table,
@ -13,6 +14,8 @@ import {
} from 'src/components/fake-table/Table' } from 'src/components/fake-table/Table'
import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/white.svg' import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/white.svg'
import { P } from '../typography'
import styles from './SingleRowTable.styles' import styles from './SingleRowTable.styles'
const useStyles = makeStyles(styles) const useStyles = makeStyles(styles)
@ -23,7 +26,8 @@ const SingleRowTable = ({
title, title,
items, items,
onEdit, onEdit,
className className,
editMessage
}) => { }) => {
const classes = useStyles({ width, height }) const classes = useStyles({ width, height })
@ -33,9 +37,15 @@ const SingleRowTable = ({
<THead> <THead>
<Th className={classes.head}> <Th className={classes.head}>
{title} {title}
<IconButton onClick={onEdit} className={classes.button}> <Tooltip
<EditIcon /> enableOver
</IconButton> element={
<IconButton onClick={onEdit} className={classes.button}>
<EditIcon />
</IconButton>
}>
<P>{editMessage}</P>
</Tooltip>
</Th> </Th>
</THead> </THead>
<TBody> <TBody>

View file

@ -4,7 +4,7 @@ import gql from 'graphql-tag'
import * as R from 'ramda' import * as R from 'ramda'
import React, { useState } from 'react' import React, { useState } from 'react'
import HelpTooltip from 'src/components/HelpTooltip' import Tooltip from 'src/components/Tooltip'
import { NamespacedTable as EditableTable } from 'src/components/editableTable' import { NamespacedTable as EditableTable } from 'src/components/editableTable'
import { Switch } from 'src/components/inputs' import { Switch } from 'src/components/inputs'
import TitleSection from 'src/components/layout/TitleSection' import TitleSection from 'src/components/layout/TitleSection'
@ -88,7 +88,7 @@ const CashOut = ({ name: SCREEN_KEY }) => {
<Label2 className={classes.switchLabel}> <Label2 className={classes.switchLabel}>
{fudgeFactorActive ? 'On' : 'Off'} {fudgeFactorActive ? 'On' : 'Off'}
</Label2> </Label2>
<HelpTooltip width={304}> <Tooltip width={304} enableClick>
<P> <P>
Automatically accept customer deposits as complete if their Automatically accept customer deposits as complete if their
received amount is 10 crypto atoms or less. received amount is 10 crypto atoms or less.
@ -97,7 +97,7 @@ const CashOut = ({ name: SCREEN_KEY }) => {
(Crypto atoms are the smallest unit in each cryptocurrency. E.g., (Crypto atoms are the smallest unit in each cryptocurrency. E.g.,
satoshis in Bitcoin, or wei in Ethereum.) satoshis in Bitcoin, or wei in Ethereum.)
</P> </P>
</HelpTooltip> </Tooltip>
</div> </div>
</TitleSection> </TitleSection>
<EditableTable <EditableTable

View file

@ -1,8 +1,9 @@
import { makeStyles } from '@material-ui/core' import { makeStyles } from '@material-ui/core'
import React from 'react' import React from 'react'
import Tooltip from 'src/components/Tooltip'
import { Link, IconButton } from 'src/components/buttons' import { Link, IconButton } from 'src/components/buttons'
import { H4 } from 'src/components/typography' import { H4, P } from 'src/components/typography'
import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg' import { ReactComponent as DisabledEditIcon } from 'src/styling/icons/action/edit/disabled.svg'
import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg' import { ReactComponent as EditIcon } from 'src/styling/icons/action/edit/enabled.svg'
@ -16,14 +17,27 @@ const Header = ({ title, editing, disabled, setEditing }) => {
return ( return (
<div className={classes.header}> <div className={classes.header}>
<H4 className={classes.title}>{title}</H4> <H4 className={classes.title}>{title}</H4>
{!editing && (
<IconButton {!editing && !disabled && (
onClick={() => setEditing(true)} <Tooltip
className={classes.button} enableOver
disabled={disabled}> element={
{disabled ? <DisabledEditIcon /> : <EditIcon />} <IconButton
className={classes.button}
onClick={() => setEditing(true)}>
<EditIcon />
</IconButton>
}>
<P>Modify value</P>
</Tooltip>
)}
{!editing && disabled && (
<IconButton disabled className={classes.button}>
<DisabledEditIcon />
</IconButton> </IconButton>
)} )}
{editing && ( {editing && (
<div className={classes.editingButtons}> <div className={classes.editingButtons}>
<Link color="primary" type="submit"> <Link color="primary" type="submit">

View file

@ -4,7 +4,7 @@ import gql from 'graphql-tag'
import * as R from 'ramda' import * as R from 'ramda'
import React, { useState, memo } from 'react' import React, { useState, memo } from 'react'
import Popper from 'src/components/Popper' import Tooltip from 'src/components/Tooltip'
import { Switch } from 'src/components/inputs' import { Switch } from 'src/components/inputs'
import { H4, P, Label2 } from 'src/components/typography' import { H4, P, Label2 } from 'src/components/typography'
import { ReactComponent as HelpIcon } from 'src/styling/icons/action/help/zodiac.svg' import { ReactComponent as HelpIcon } from 'src/styling/icons/action/help/zodiac.svg'
@ -51,7 +51,6 @@ const Row = memo(({ title, disabled = false, checked, save, label }) => {
}) })
const CoinATMRadar = memo(() => { const CoinATMRadar = memo(() => {
const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null)
const [coinAtmRadarConfig, setCoinAtmRadarConfig] = useState(null) const [coinAtmRadarConfig, setCoinAtmRadarConfig] = useState(null)
const classes = useStyles() const classes = useStyles()
@ -82,16 +81,6 @@ const CoinATMRadar = memo(() => {
variables: { config: toNamespace(namespaces.COIN_ATM_RADAR, it) } variables: { config: toNamespace(namespaces.COIN_ATM_RADAR, it) }
}) })
const handleOpenHelpPopper = event => {
setHelpPopperAnchorEl(helpPopperAnchorEl ? null : event.currentTarget)
}
const handleCloseHelpPopper = () => {
setHelpPopperAnchorEl(null)
}
const helpPopperOpen = Boolean(helpPopperAnchorEl)
if (!coinAtmRadarConfig) return null if (!coinAtmRadarConfig) return null
return ( return (
@ -99,30 +88,19 @@ const CoinATMRadar = memo(() => {
<div> <div>
<div className={classes.titleWrapper}> <div className={classes.titleWrapper}>
<H4>Coin ATM Radar share settings</H4> <H4>Coin ATM Radar share settings</H4>
<div className={classes.transparentButton}> <Tooltip enableClick width={304} element={<HelpIcon />}>
<button onClick={handleOpenHelpPopper}> <P>
<HelpIcon /> For details on configuring this panel, please read the relevant
<Popper knowledgebase article{' '}
open={helpPopperOpen} <a
anchorEl={helpPopperAnchorEl} target="_blank"
placement="bottom" rel="noopener noreferrer"
onClose={handleCloseHelpPopper}> href="https://support.lamassu.is/hc/en-us/articles/360023720472-Coin-ATM-Radar">
<div className={classes.popoverContent}> here
<P> </a>
For details on configuring this panel, please read the .
relevant knowledgebase article{' '} </P>
<a </Tooltip>
target="_blank"
rel="noopener noreferrer"
href="https://support.lamassu.is/hc/en-us/articles/360023720472-Coin-ATM-Radar">
here
</a>
.
</P>
</div>
</Popper>
</button>
</div>
</div> </div>
<Row <Row
title={'Share information?'} title={'Share information?'}

View file

@ -9,7 +9,8 @@ import React, { useState } from 'react'
import * as Yup from 'yup' import * as Yup from 'yup'
import ErrorMessage from 'src/components/ErrorMessage' import ErrorMessage from 'src/components/ErrorMessage'
import { Link } from 'src/components/buttons' import Tooltip from 'src/components/Tooltip'
import { Link, IconButton } from 'src/components/buttons'
import Switch from 'src/components/inputs/base/Switch' import Switch from 'src/components/inputs/base/Switch'
import { TextInput, NumberInput } from 'src/components/inputs/formik' import { TextInput, NumberInput } from 'src/components/inputs/formik'
import { import {
@ -231,11 +232,15 @@ const ContactInfo = () => {
<div className={classes.header}> <div className={classes.header}>
<Info2>Info card</Info2> <Info2>Info card</Info2>
{!editing && ( {!editing && (
<div className={classes.transparentButton}> <Tooltip
<button onClick={() => setEditing(true)}> enableOver
<EditIcon /> element={
</button> <IconButton onClick={() => setEditing(true)}>
</div> <EditIcon />
</IconButton>
}>
<P>Configure info card settings</P>
</Tooltip>
)} )}
</div> </div>
<Formik <Formik
@ -305,7 +310,11 @@ const ContactInfo = () => {
</Formik> </Formik>
</div> </div>
<div className={classnames(classes.section, classes.infoMessage)}> <div className={classnames(classes.section, classes.infoMessage)}>
<WarningIcon /> <Tooltip width={304} enableOver element={<WarningIcon />}>
Sharing your information with your customers through your machines
allows them to contact you in case there's a problem with a machine in
your network or a transaction.
</Tooltip>
<Label1> <Label1>
Sharing your information with your customers through your machines Sharing your information with your customers through your machines
allows them to contact you in case there's a problem with a machine in allows them to contact you in case there's a problem with a machine in

View file

@ -63,6 +63,7 @@ const Services = () => {
{R.values(schemas).map(schema => ( {R.values(schemas).map(schema => (
<Grid item key={schema.code}> <Grid item key={schema.code}>
<SingleRowTable <SingleRowTable
editMessage={'Configure ' + schema.title}
title={schema.title} title={schema.title}
onEdit={() => setEditingSchema(schema)} onEdit={() => setEditingSchema(schema)}
items={getItems(schema.code, schema.elements)} items={getItems(schema.code, schema.elements)}