• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mac-s-g / react-json-view / #1405

22 Jul 2022 02:33AM UTC coverage: 81.531% (-1.8%) from 83.298%
#1405

push

jiege1
fix: ts type

287 of 362 branches covered (79.28%)

Branch coverage included in aggregate %.

512 of 618 relevant lines covered (82.85%)

43.64 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.22
/src/js/components/VariableMeta.js
1
import React from 'react';
2
import dispatcher from './../helpers/dispatcher';
3

4
import CopyToClipboard from './CopyToClipboard';
5
import { toType } from './../helpers/util';
6

7
//icons
8
import { RemoveCircle as Remove, AddCircle as Add } from './icons';
9

10
//theme
11
import Theme from './../themes/getStyle';
12

13
export default class extends React.PureComponent {
14
    getObjectSize = () => {
49✔
15
        const { size, theme, displayObjectSize } = this.props;
57✔
16
        if (displayObjectSize) {
57✔
17
            return (
24✔
18
                <span class="object-size" {...Theme(theme, 'object-size')}>
19
                    {size} item{size === 1 ? '' : 's'}
24✔
20
                </span>
21
            );
22
        }
23
    };
24

25
    getAddAttribute = rowHovered => {
49✔
26
        const { theme, namespace, name, src, rjvId, depth, onAddClick } = this.props;
22✔
27

28
        return (
22✔
29
            <span
30
                class="click-to-add"
31
                style={{
32
                    verticalAlign: 'top',
33
                    display: rowHovered ? 'inline-block' : 'none'
22!
34
                }}
35
            >
36
                <Add
37
                    class="click-to-add-icon"
38
                    {...Theme(theme, 'addVarIcon')}
39
                    onClick={() => {
40
                        const request = {
×
41
                            name: depth > 0 ? name : null,
×
42
                            namespace: namespace.splice(
43
                                0,
44
                                namespace.length - 1
45
                            ),
46
                            existing_value: src,
47
                            variable_removed: false,
48
                            key_name: null
49
                        };
50
                        if (onAddClick) {
×
51
                            onAddClick(request)
×
52
                        } else {
53
                            if (toType(src) === 'object') {
×
54
                                dispatcher.dispatch({
×
55
                                    name: 'ADD_VARIABLE_KEY_REQUEST',
56
                                    rjvId: rjvId,
57
                                    data: request
58
                                });
59
                            } else {
60
                                dispatcher.dispatch({
×
61
                                    name: 'VARIABLE_ADDED',
62
                                    rjvId: rjvId,
63
                                    data: {
64
                                        ...request,
65
                                        new_value: [...src, null]
66
                                    }
67
                                });
68
                            }
69
                        }
70

71
                    }}
72
                />
73
            </span>
74
        );
75
    };
76

77
    getRemoveObject = rowHovered => {
49✔
78
        const { theme, hover, namespace, name, src, rjvId, onRemoveClick } = this.props;
22✔
79

80
        //don't allow deleting of root node
81
        if (namespace.length === 1) {
22✔
82
            return;
16✔
83
        }
84
        return (
6✔
85
            <span
86
                class="click-to-remove"
87
                style={{
88
                    display: rowHovered ? 'inline-block' : 'none'
6!
89
                }}
90
            >
91
                <Remove
92
                    class="click-to-remove-icon"
93
                    {...Theme(theme, 'removeVarIcon')}
94
                    onClick={() => {
95
                        if (onRemoveClick) {
×
96
                            onRemoveClick({
×
97
                                name: name,
98
                                namespace: namespace.splice(
99
                                  0,
100
                                  namespace.length - 1
101
                                ),
102
                                existing_value: src,
103
                            });
104
                        } else {
105
                            dispatcher.dispatch({
×
106
                                name: 'VARIABLE_REMOVED',
107
                                rjvId: rjvId,
108
                                data: {
109
                                    name: name,
110
                                    namespace: namespace.splice(
111
                                      0,
112
                                      namespace.length - 1
113
                                    ),
114
                                    existing_value: src,
115
                                    variable_removed: true
116
                                }
117
                            });
118
                        }
119
                    }}
120
                />
121
            </span>
122
        );
123
    };
124

125
    render = () => {
49✔
126
        const {
127
            theme,
128
            onDelete,
129
            onAdd,
130
            enableClipboard,
131
            src,
132
            namespace,
133
            rowHovered
134
        } = this.props;
57✔
135
        return (
57✔
136
            <div
137
                {...Theme(theme, 'object-meta-data')}
138
                class="object-meta-data"
139
                onClick={e => {
140
                    e.stopPropagation();
1✔
141
                }}
142
            >
143
                {/* size badge display */}
144
                {this.getObjectSize()}
145
                {/* copy to clipboard icon */}
146
                {enableClipboard ? (
57✔
147
                    <CopyToClipboard
148
                        rowHovered={rowHovered}
149
                        clickCallback={enableClipboard}
150
                        {...{ src, theme, namespace }}
151
                    />
152
                ) : null}
153
                {/* copy add/remove icons */}
154
                {onAdd !== false ? this.getAddAttribute(rowHovered) : null}
57✔
155
                {onDelete !== false ? this.getRemoveObject(rowHovered) : null}
57✔
156
            </div>
157
        );
158
    };
159
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc