Skip to content

Commit 1e3ee7f

Browse files
committed
Fix issues
1 parent d962cb3 commit 1e3ee7f

17 files changed

+67
-37
lines changed

node_package/src/CallbackRegistry.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@ type WaitingPromiseInfo<T> = {
1414

1515
export default class CallbackRegistry<T> {
1616
private readonly registryType: string;
17+
1718
private registeredItems = new Map<string, T>();
19+
1820
private waitingPromises = new Map<string, WaitingPromiseInfo<T>>();
21+
1922
private notUsedItems = new Set<string>();
2023

2124
private timeoutEventsInitialized = false;
25+
2226
private timedout = false;
2327

2428
constructor(registryType: string) {

node_package/src/ClientSideRenderer.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/* eslint-disable max-classes-per-file */
2+
/* eslint-disable react/no-deprecated -- while we need to support React 16 */
3+
14
import * as ReactDOM from 'react-dom';
25
import type { ReactElement } from 'react';
36
import type { RailsContext, RegisteredComponent, RenderFunction, Root } from './types';
@@ -40,8 +43,11 @@ const getDomId = (domIdOrElement: string | Element): string =>
4043
typeof domIdOrElement === 'string' ? domIdOrElement : domIdOrElement.getAttribute('data-dom-id') || '';
4144
class ComponentRenderer {
4245
private domNodeId: string;
46+
4347
private state: 'unmounted' | 'rendering' | 'rendered';
48+
4449
private root?: Root;
50+
4551
private renderPromise?: Promise<void>;
4652

4753
constructor(domIdOrElement: string | Element) {
@@ -166,6 +172,7 @@ You should return a React.Component always for the client side entry point.`);
166172

167173
class StoreRenderer {
168174
private hydratePromise?: Promise<void>;
175+
169176
private state: 'unmounted' | 'hydrating' | 'hydrated';
170177

171178
constructor(storeDataElement: Element) {

node_package/src/ReactOnRails.node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ import streamServerRenderedReactComponent from './streamServerRenderedReactCompo
44
ReactOnRails.streamServerRenderedReactComponent = streamServerRenderedReactComponent;
55

66
export * from './ReactOnRails.full';
7+
// eslint-disable-next-line no-restricted-exports -- see https://github.com/eslint/eslint/issues/15617
78
export { default } from './ReactOnRails.full';

node_package/src/reactHydrateOrRender.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ if (supportsRootApi) {
1414
// https://github.com/webpack/webpack/issues/339#issuecomment-47739112
1515
// Unfortunately, it only converts the error to a warning.
1616
try {
17-
// eslint-disable-next-line global-require
17+
// eslint-disable-next-line global-require,@typescript-eslint/no-require-imports
1818
reactDomClient = require('react-dom/client');
19-
} catch (e) {
19+
} catch (_e) {
2020
// We should never get here, but if we do, we'll just use the default ReactDOM
2121
// and live with the warning.
2222
reactDomClient = ReactDOM;
2323
}
2424
}
2525

26+
/* eslint-disable react/no-deprecated -- while we need to support React 16 */
2627
const reactHydrate: HydrateOrRenderType = supportsRootApi
2728
? reactDomClient.hydrateRoot
2829
: (domNode, reactElement) => ReactDOM.hydrate(reactElement, domNode);
@@ -37,6 +38,7 @@ function reactRender(domNode: Element, reactElement: ReactElement): RenderReturn
3738
// eslint-disable-next-line react/no-render-return-value
3839
return ReactDOM.render(reactElement, domNode);
3940
}
41+
/* eslint-enable react/no-deprecated */
4042

4143
export default function reactHydrateOrRender(
4244
domNode: Element,

node_package/tests/ReactOnRails.test.js renamed to node_package/tests/ReactOnRails.test.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/* eslint-disable react/prefer-es6-class */
22
/* eslint-disable react/prefer-stateless-function */
3-
/* eslint-disable react/jsx-filename-extension */
43

54
import { createStore } from 'redux';
65
import * as React from 'react';

node_package/tests/renderFunction.test.js renamed to node_package/tests/renderFunction.test.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable react/prefer-es6-class */
22
/* eslint-disable react/prefer-stateless-function */
3-
/* eslint-disable react/jsx-filename-extension */
3+
/* eslint-disable max-classes-per-file */
44

55
import * as React from 'react';
66
import * as createReactClass from 'create-react-class';

node_package/tests/streamServerRenderedReactComponent.test.jsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@ import streamServerRenderedReactComponent from '../src/streamServerRenderedReact
88
import ComponentRegistry from '../src/ComponentRegistry';
99

1010
const AsyncContent = async ({ throwAsyncError }) => {
11-
await new Promise((resolve) => setTimeout(resolve, 0));
11+
await new Promise((resolve) => {
12+
setTimeout(resolve, 0);
13+
});
1214
if (throwAsyncError) {
1315
throw new Error('Async Error');
1416
}
1517
return <div>Async Content</div>;
1618
};
1719

20+
AsyncContent.propTypes = {
21+
throwAsyncError: PropTypes.bool,
22+
};
23+
1824
const TestComponentForStreaming = ({ throwSyncError, throwAsyncError }) => {
1925
if (throwSyncError) {
2026
throw new Error('Sync Error');
@@ -75,7 +81,9 @@ describe('streamServerRenderedReactComponent', () => {
7581

7682
it('streamServerRenderedReactComponent streams the rendered component', async () => {
7783
const { renderResult, chunks } = setupStreamTest();
78-
await new Promise((resolve) => renderResult.on('end', resolve));
84+
await new Promise((resolve) => {
85+
renderResult.on('end', resolve);
86+
});
7987

8088
expect(chunks).toHaveLength(2);
8189
expect(chunks[0].html).toContain('Header In The Shell');
@@ -92,7 +100,9 @@ describe('streamServerRenderedReactComponent', () => {
92100
const { renderResult, chunks } = setupStreamTest({ throwSyncError: true, throwJsErrors: true });
93101
const onError = jest.fn();
94102
renderResult.on('error', onError);
95-
await new Promise((resolve) => renderResult.on('end', resolve));
103+
await new Promise((resolve) => {
104+
renderResult.on('end', resolve);
105+
});
96106

97107
expect(onError).toHaveBeenCalled();
98108
expect(chunks).toHaveLength(1);
@@ -106,7 +116,9 @@ describe('streamServerRenderedReactComponent', () => {
106116
const { renderResult, chunks } = setupStreamTest({ throwSyncError: true, throwJsErrors: false });
107117
const onError = jest.fn();
108118
renderResult.on('error', onError);
109-
await new Promise((resolve) => renderResult.on('end', resolve));
119+
await new Promise((resolve) => {
120+
renderResult.on('end', resolve);
121+
});
110122

111123
expect(onError).not.toHaveBeenCalled();
112124
expect(chunks).toHaveLength(1);
@@ -120,7 +132,9 @@ describe('streamServerRenderedReactComponent', () => {
120132
const { renderResult, chunks } = setupStreamTest({ throwAsyncError: true, throwJsErrors: true });
121133
const onError = jest.fn();
122134
renderResult.on('error', onError);
123-
await new Promise((resolve) => renderResult.on('end', resolve));
135+
await new Promise((resolve) => {
136+
renderResult.on('end', resolve);
137+
});
124138

125139
expect(onError).toHaveBeenCalled();
126140
expect(chunks).toHaveLength(2);
@@ -139,7 +153,9 @@ describe('streamServerRenderedReactComponent', () => {
139153
const { renderResult, chunks } = setupStreamTest({ throwAsyncError: true, throwJsErrors: false });
140154
const onError = jest.fn();
141155
renderResult.on('error', onError);
142-
await new Promise((resolve) => renderResult.on('end', resolve));
156+
await new Promise((resolve) => {
157+
renderResult.on('end', resolve);
158+
});
143159

144160
expect(onError).not.toHaveBeenCalled();
145161
expect(chunks).toHaveLength(2);

spec/dummy/client/app/components/HelloWorldRedux.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@ export default class HelloWorldRedux extends React.Component {
1717
this.handleChange = this.handleChange.bind(this);
1818
}
1919

20-
setNameDomRef(nameDomNode) {
21-
this.nameDomRef = nameDomNode;
22-
}
23-
2420
handleChange() {
2521
const name = this.nameDomRef.value;
22+
// eslint-disable-next-line react/destructuring-assignment
2623
this.props.actions.updateName(name);
2724
}
2825

26+
setNameDomRef(nameDomNode) {
27+
this.nameDomRef = nameDomNode;
28+
}
29+
2930
render() {
3031
const { data, railsContext } = this.props;
3132
const { name } = data;

spec/dummy/client/app/components/RailsContext.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function renderContextRows(railsContext) {
2323
);
2424
}
2525

26-
const RailsContext = (props) => (
26+
const RailsContext = ({ railsContext }) => (
2727
<table>
2828
<thead>
2929
<tr>
@@ -35,7 +35,7 @@ const RailsContext = (props) => (
3535
</th>
3636
</tr>
3737
</thead>
38-
<tbody>{renderContextRows(props.railsContext)}</tbody>
38+
<tbody>{renderContextRows(railsContext)}</tbody>
3939
</table>
4040
);
4141

spec/dummy/client/app/reducers/HelloWorldReducer.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const initialState = {
88
// Why name function the same as the reducer?
99
// https://github.com/gaearon/redux/issues/428#issuecomment-129223274
1010
// Naming the function will help with debugging!
11-
export default function helloWorldReducer(state = initialState, action) {
11+
export default function helloWorldReducer(state = initialState, action = undefined) {
1212
const { type, name } = action;
1313
switch (type) {
1414
case actionTypes.HELLO_WORLD_NAME_UPDATE:

0 commit comments

Comments
 (0)