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

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

pending completion
#1215

push

web-flow
Merge pull request #342 from mac-s-g/bump-patch

bump patch version

284 of 349 branches covered (81.38%)

Branch coverage included in aggregate %.

504 of 597 relevant lines covered (84.42%)

90.19 hits per line

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

73.17
/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 = () => {
98✔
15
        const { size, theme, displayObjectSize } = this.props;
114✔
16
        if (displayObjectSize) {
114✔
17
            return (
48✔
18
                <span class="object-size" {...Theme(theme, 'object-size')}>
19
                    {size} item{size === 1 ? '' : 's'}
48✔
20
                </span>
21
            );
22
        }
23
    };
24

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

28
        return (
44✔
29
            <span
30
                class="click-to-add"
31
                style={{
32
                    verticalAlign: 'top',
33
                    display: rowHovered ? 'inline-block' : 'none'
44!
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 (toType(src) === 'object') {
×
51
                            dispatcher.dispatch({
×
52
                                name: 'ADD_VARIABLE_KEY_REQUEST',
53
                                rjvId: rjvId,
54
                                data: request
55
                            });
56
                        } else {
57
                            dispatcher.dispatch({
×
58
                                name: 'VARIABLE_ADDED',
59
                                rjvId: rjvId,
60
                                data: {
61
                                    ...request,
62
                                    new_value: [...src, null]
63
                                }
64
                            });
65
                        }
66
                    }}
67
                />
68
            </span>
69
        );
70
    };
71

72
    getRemoveObject = rowHovered => {
98✔
73
        const { theme, hover, namespace, name, src, rjvId } = this.props;
44✔
74

75
        //don't allow deleting of root node
76
        if (namespace.length === 1) {
44✔
77
            return;
32✔
78
        }
79
        return (
12✔
80
            <span
81
                class="click-to-remove"
82
                style={{
83
                    display: rowHovered ? 'inline-block' : 'none'
12!
84
                }}
85
            >
86
                <Remove
87
                    class="click-to-remove-icon"
88
                    {...Theme(theme, 'removeVarIcon')}
89
                    onClick={() => {
90
                        dispatcher.dispatch({
×
91
                            name: 'VARIABLE_REMOVED',
92
                            rjvId: rjvId,
93
                            data: {
94
                                name: name,
95
                                namespace: namespace.splice(
96
                                    0,
97
                                    namespace.length - 1
98
                                ),
99
                                existing_value: src,
100
                                variable_removed: true
101
                            }
102
                        });
103
                    }}
104
                />
105
            </span>
106
        );
107
    };
108

109
    render = () => {
98✔
110
        const {
111
            theme,
112
            onDelete,
113
            onAdd,
114
            enableClipboard,
115
            src,
116
            namespace,
117
            rowHovered
118
        } = this.props;
114✔
119
        return (
114✔
120
            <div
121
                {...Theme(theme, 'object-meta-data')}
122
                class="object-meta-data"
123
                onClick={e => {
124
                    e.stopPropagation();
2✔
125
                }}
126
            >
127
                {/* size badge display */}
128
                {this.getObjectSize()}
129
                {/* copy to clipboard icon */}
130
                {enableClipboard ? (
114✔
131
                    <CopyToClipboard
132
                        rowHovered={rowHovered}
133
                        clickCallback={enableClipboard}
134
                        {...{ src, theme, namespace }}
135
                    />
136
                ) : null}
137
                {/* copy add/remove icons */}
138
                {onAdd !== false ? this.getAddAttribute(rowHovered) : null}
114✔
139
                {onDelete !== false ? this.getRemoveObject(rowHovered) : null}
114✔
140
            </div>
141
        );
142
    };
143
}
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

© 2025 Coveralls, Inc