summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/NameComponent.js
blob: ececd07bc985c52022787616ca99ff4eba4da61c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import PropTypes from 'prop-types'
import React, { useRef, useState } from 'react'
import { Button, TextInput } from '@patternfly/react-core'
import { PencilAltIcon, CheckIcon, TimesIcon } from '@patternfly/react-icons'

function NameComponent({ name, onEdit }) {
    const [isEditing, setEditing] = useState(false)
    const nameInput = useRef(null)

    const onCancel = () => {
        nameInput.current.value = name
        setEditing(false)
    }

    const onSubmit = (event) => {
        if (event) {
            event.preventDefault()
        }

        const name = nameInput.current.value
        if (name) {
            onEdit(name)
        }

        setEditing(false)
    }

    return (
        <form
            className={`pf-c-inline-edit ${isEditing ? 'pf-m-inline-editable' : ''} pf-u-display-inline-block`}
            onSubmit={onSubmit}
        >
            <div className="pf-c-inline-edit__group">
                <div className="pf-c-inline-edit__value" id="single-inline-edit-example-label">
                    {name}
                </div>
                <div className="pf-c-inline-edit__action pf-m-enable-editable">
                    <Button className="pf-u-py-0" variant="plain" aria-label="Edit" onClick={() => setEditing(true)}>
                        <PencilAltIcon />
                    </Button>
                </div>
            </div>
            <div className="pf-c-inline-edit__group">
                <div className="pf-c-inline-edit__input">
                    <TextInput type="text" defaultValue={name} ref={nameInput} aria-label="Editable text input" />
                </div>
                <div className="pf-c-inline-edit__group pf-m-action-group pf-m-icon-group">
                    <div className="pf-c-inline-edit__action pf-m-valid">
                        <Button className="pf-u-py-0" variant="plain" aria-label="Save edits" onClick={onSubmit}>
                            <CheckIcon />
                        </Button>
                    </div>
                    <div className="pf-c-inline-edit__action">
                        <Button className="pf-u-py-0" variant="plain" aria-label="Cancel edits" onClick={onCancel}>
                            <TimesIcon />
                        </Button>
                    </div>
                </div>
            </div>
        </form>
    )
}

NameComponent.propTypes = {
    name: PropTypes.string,
    onEdit: PropTypes.func,
}

export default NameComponent