Projekt

Obecné

Profil

Stáhnout (5.22 KB) Statistiky
| Větev: | Tag: | Revize:
1 4e91ed40 Dominik Poch
import { Col, Container, Row, Stack } from 'react-bootstrap';
2 c73aecde Dominik Poch
import { Occurrence, Tag } from '../types/tag';
3
import { ChangeEvent, useContext, useState } from 'react';
4 967f45fc Dominik Poch
5
import 'antd/dist/antd.css';
6 4e91ed40 Dominik Poch
import { Button, Input } from 'antd';
7 967f45fc Dominik Poch
import {
8
    PlusOutlined,
9
    EyeOutlined,
10
    DownOutlined,
11
    DeleteOutlined,
12
} from '@ant-design/icons';
13 c73aecde Dominik Poch
import { AnnotationContext } from '../../contexts/AnnotationContext';
14 967f45fc Dominik Poch
15 c73aecde Dominik Poch
export function AnnotationItem(props: { tag: Tag }) {
16 967f45fc Dominik Poch
    const [visibleProperties, setVisibleProperties] = useState(false);
17 c73aecde Dominik Poch
    const {
18
        addOccurrence,
19
        deleteOccurrence,
20
        changeVisibility,
21
        changePosition,
22
        changeLength,
23
    } = useContext(AnnotationContext);
24 967f45fc Dominik Poch
25 c73aecde Dominik Poch
    const onAddOccurrence = () => {
26
        addOccurrence(props.tag);
27 4e91ed40 Dominik Poch
    };
28 967f45fc Dominik Poch
29 c73aecde Dominik Poch
    const onDeleteOccurrence = (occurrence: Occurrence) => (e: any) => {
30
        deleteOccurrence(occurrence);
31 4e91ed40 Dominik Poch
    };
32 967f45fc Dominik Poch
33 c73aecde Dominik Poch
    const onChangeVisibility = () => {
34
        changeVisibility(props.tag);
35 967f45fc Dominik Poch
    };
36
37 c73aecde Dominik Poch
    const onChangePosition =
38 4e91ed40 Dominik Poch
        (occurrence: Occurrence) => (e: ChangeEvent<HTMLInputElement>) => {
39 c73aecde Dominik Poch
            changePosition(occurrence, Number(e.currentTarget.value));
40 4e91ed40 Dominik Poch
        };
41
42 c73aecde Dominik Poch
    const onChangeLength =
43 4e91ed40 Dominik Poch
        (occurrence: Occurrence) => (e: ChangeEvent<HTMLInputElement>) => {
44 c73aecde Dominik Poch
            changeLength(occurrence, Number(e.currentTarget.value));
45 4e91ed40 Dominik Poch
        };
46
47 c73aecde Dominik Poch
    const changePropertiesVisibility = () => {
48
        setVisibleProperties(!visibleProperties);
49
    };
50
51 967f45fc Dominik Poch
    return (
52 c73aecde Dominik Poch
        <Container>
53 967f45fc Dominik Poch
            <Row>
54 4e91ed40 Dominik Poch
                <Col className="d-flex align-items-center">{props.tag.name}</Col>
55
                <Col sm="auto">
56
                    <Button
57
                        type="text"
58
                        shape="circle"
59
                        icon={<PlusOutlined />}
60 c73aecde Dominik Poch
                        onClick={onAddOccurrence}
61 4e91ed40 Dominik Poch
                    />
62
                    <Button
63
                        type="text"
64
                        shape="circle"
65
                        icon={<EyeOutlined />}
66 c73aecde Dominik Poch
                        onClick={onChangeVisibility}
67 4e91ed40 Dominik Poch
                    />
68
                    <Button
69
                        type="text"
70
                        shape="circle"
71
                        icon={<DownOutlined />}
72
                        onClick={changePropertiesVisibility}
73
                    />
74
                </Col>
75 967f45fc Dominik Poch
            </Row>
76
            {visibleProperties && (
77 4e91ed40 Dominik Poch
                <Stack>
78
                    <div>Kategorie: {props.tag.category}</div>
79
                    <div>Výskyty:</div>
80
                    {props.tag.occurrences.map((occurrence, index) => {
81 967f45fc Dominik Poch
                        return (
82 4e91ed40 Dominik Poch
                            <div key={index} id={props.tag.name + index}>
83
                                <Container>
84
                                    <Row>
85
                                        <Col>
86
                                            <Row>
87 c73aecde Dominik Poch
                                                <Col className="d-flex align-items-center">
88
                                                    Pozice:
89
                                                </Col>
90
                                                <Col sm="auto">
91
                                                    <Input
92
                                                        value={occurrence.position}
93
                                                        onChange={onChangePosition(
94
                                                            occurrence
95
                                                        )}
96
                                                    />
97
                                                </Col>
98 4e91ed40 Dominik Poch
                                            </Row>
99
                                            <Row>
100 c73aecde Dominik Poch
                                                <Col className="d-flex align-items-center">
101
                                                    Délka:
102
                                                </Col>
103
                                                <Col sm="auto">
104
                                                    <Input
105
                                                        value={occurrence.length}
106
                                                        onChange={onChangeLength(
107
                                                            occurrence
108
                                                        )}
109
                                                    />
110
                                                </Col>
111 4e91ed40 Dominik Poch
                                            </Row>
112
                                        </Col>
113
                                        <Col
114
                                            sm="auto"
115
                                            className="d-flex align-items-center"
116
                                        >
117
                                            <Button
118
                                                icon={<DeleteOutlined />}
119 c73aecde Dominik Poch
                                                onClick={onDeleteOccurrence(occurrence)}
120 4e91ed40 Dominik Poch
                                            ></Button>
121
                                        </Col>
122
                                    </Row>
123
                                </Container>
124 967f45fc Dominik Poch
                            </div>
125
                        );
126
                    })}
127 4e91ed40 Dominik Poch
                </Stack>
128 967f45fc Dominik Poch
            )}
129 c73aecde Dominik Poch
        </Container>
130 967f45fc Dominik Poch
    );
131
}