Skip to content

Commit 6c48c6d

Browse files
committed
fix: add Quote issue.
1 parent b4bfbd3 commit 6c48c6d

File tree

6 files changed

+104
-14
lines changed

6 files changed

+104
-14
lines changed

core/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ react-json-view
77
[![react@^18](https://shields.io/badge/react-^18-green?style=flat&logo=react)](https://github.com/facebook/react/releases)
88
[![Coverage Status](https://uiwjs.github.io/react-json-view/badges.svg)](https://uiwjs.github.io/react-json-view/lcov-report/)
99

10-
A React component for displaying and editing javascript arrays and JSON objects.
10+
A React component for displaying and editing javascript arrays and JSON objects. Preview of v1 documentation is available [here](https://raw.githack.com/uiwjs/react-json-view/v1-docs/index.html).
1111

1212
<!--rehype:ignore:start-->
1313
<a href="https://uiwjs.github.io/react-json-view/" target="_blank">

core/src/comps/KeyValues.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ export const KayName = <T extends object>(props: KayNameProps<T>) => {
6464
return (
6565
<Fragment>
6666
<span ref={highlightContainer}>
67-
<Quote isNumber={isNumber} />
67+
<Quote isNumber={isNumber} data-placement="left" />
6868
<Key keyName={keyName!} value={value}>
6969
{keyName}
7070
</Key>
71-
<Quote isNumber={isNumber} />
71+
<Quote isNumber={isNumber} data-placement="right" />
7272
</span>
7373
<Colon />
7474
</Fragment>

core/src/comps/ReRender/Symbols.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,30 @@ import { useSymbolsStore, type SymbolsElement } from '../../store/Symbols';
22
import { type TagType } from '../../store/Types';
33
import { useExpandsStore } from '../../store/Expands';
44

5-
export const Quote = (props: { isNumber?: boolean }) => {
5+
export const Quote = (props: { isNumber?: boolean } & React.HTMLAttributes<HTMLElement>) => {
66
const { Quote: Comp = {} } = useSymbolsStore();
7-
const { isNumber } = props;
7+
const { isNumber, ...other } = props;
88
if (isNumber) return null;
99
const { as, render, ...reset } = Comp;
1010
const Elm = as || 'span';
11-
const child = render && typeof render === 'function' && render(reset);
11+
const elmProps = { ...other, ...reset };
12+
const child = render && typeof render === 'function' && render(elmProps);
1213
if (child) return child;
13-
return <Elm {...reset} />;
14+
return <Elm {...elmProps} />;
1415
};
1516

1617
Quote.displayName = 'JVR.Quote';
1718

18-
export const ValueQuote = (props: { isNumber?: boolean }) => {
19+
export const ValueQuote = (props: { isNumber?: boolean } & React.HTMLAttributes<HTMLElement>) => {
1920
const { ValueQuote: Comp = {} } = useSymbolsStore();
20-
const { isNumber } = props;
21+
const { isNumber, ...other } = props;
2122
if (isNumber) return null;
2223
const { as, render, ...reset } = Comp;
2324
const Elm = as || 'span';
24-
const child = render && typeof render === 'function' && render(reset);
25+
const elmProps = { ...other, ...reset };
26+
const child = render && typeof render === 'function' && render(elmProps);
2527
if (child) return child;
26-
return <Elm {...reset} />;
28+
return <Elm {...elmProps} />;
2729
};
2830

2931
ValueQuote.displayName = 'JVR.ValueQuote';

core/src/comps/ReRender/Types.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,13 @@ export const TypeString: FC<TypeProps> = ({ children = '', expandKey, keyName })
7878
<Fragment>
7979
{displayDataTypes && (type || <Comp {...reset} style={style} />)}
8080
{child || (
81-
<Comp {...reset} className="w-rjv-value">
81+
<Fragment>
8282
<ValueQuote />
83-
{text}
83+
<Comp {...reset} className="w-rjv-value">
84+
{text}
85+
</Comp>
8486
<ValueQuote />
85-
</Comp>
87+
</Fragment>
8688
)}
8789
<Copied keyName={keyName} value={children as object} expandKey={expandKey} />
8890
</Fragment>

core/src/symbol/Quote.test.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { screen, render, waitFor } from '@testing-library/react';
2+
import JsonView from '..';
3+
4+
it('renders <JsonView.Quote /> test case', async () => {
5+
const demo = {
6+
value: 123,
7+
};
8+
const { container } = render(
9+
<JsonView value={demo}>
10+
<JsonView.Quote data-testid="quote">x</JsonView.Quote>
11+
</JsonView>,
12+
);
13+
expect(container.firstElementChild).toBeInstanceOf(Element);
14+
await waitFor(() => {
15+
const elm = screen.getAllByTestId('quote')[0];
16+
expect(elm.tagName).toBe('SPAN');
17+
expect(elm.innerHTML).toBe('x');
18+
});
19+
});
20+
21+
it('renders <JsonView.Quote render /> test case', async () => {
22+
const demo = {
23+
value: 123,
24+
};
25+
const { container } = render(
26+
<JsonView value={demo}>
27+
<JsonView.Quote
28+
data-testid="quote"
29+
render={(props) => {
30+
expect(props.style).toHaveProperty('color', 'var(--w-rjv-quotes-color, #236a7c)');
31+
return <span {...props}>.......</span>;
32+
}}
33+
/>
34+
</JsonView>,
35+
);
36+
expect(container.firstElementChild).toBeInstanceOf(Element);
37+
await waitFor(() => {
38+
const elm = screen.getAllByTestId('quote')[0];
39+
expect(elm.tagName).toBe('SPAN');
40+
expect(elm.className).toBe('w-rjv-quotes');
41+
expect(elm.innerHTML).toBe('.......');
42+
});
43+
});

core/src/symbol/ValueQuote.test.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { screen, render, waitFor } from '@testing-library/react';
2+
import JsonView from '..';
3+
4+
it('renders <JsonView.ValueQuote /> test case', async () => {
5+
const demo = {
6+
value: '123',
7+
};
8+
const { container } = render(
9+
<JsonView value={demo}>
10+
<JsonView.ValueQuote data-testid="quote">|</JsonView.ValueQuote>
11+
</JsonView>,
12+
);
13+
expect(container.firstElementChild).toBeInstanceOf(Element);
14+
await waitFor(() => {
15+
const elm = screen.getAllByTestId('quote')[1];
16+
expect(elm.tagName).toBe('SPAN');
17+
expect(elm.innerHTML).toBe('|');
18+
});
19+
});
20+
21+
it('renders <JsonView.ValueQuote render /> test case', async () => {
22+
const demo = {
23+
value: '123',
24+
};
25+
const { container } = render(
26+
<JsonView value={demo}>
27+
<JsonView.ValueQuote
28+
data-testid="quote"
29+
render={(props) => {
30+
expect(props.style).toHaveProperty('color', 'var(--w-rjv-quotes-string-color, #cb4b16)');
31+
return <span {...props}>.......</span>;
32+
}}
33+
/>
34+
</JsonView>,
35+
);
36+
expect(container.firstElementChild).toBeInstanceOf(Element);
37+
await waitFor(() => {
38+
const elm = screen.getAllByTestId('quote')[0];
39+
expect(elm.tagName).toBe('SPAN');
40+
expect(elm.className).toBe('w-rjv-quotes');
41+
expect(elm.innerHTML).toBe('.......');
42+
});
43+
});

0 commit comments

Comments
 (0)