Skip to content
This repository was archived by the owner on Mar 14, 2022. It is now read-only.

Commit 1f6a36a

Browse files
authored
Move the component-prefixing function call to the class constructor. #178 (#179)
1 parent 199f234 commit 1f6a36a

4 files changed

Lines changed: 50 additions & 19 deletions

File tree

src/helpers.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,20 +189,22 @@ export function getContainerAttributesProps(props, randomizeId: boolean = true):
189189
/**
190190
* Add the `UNSAFE_` prefixes to the deprecated lifecycle methods for React >= 16.3.
191191
*
192-
* @param {Function} Klass Class to have the methods renamed.
193-
* @returns {Function} Class with the renamed methods.
192+
* @param {Object} instance Instance to have the methods renamed.
194193
*/
195-
export function addUnsafePrefixes<T extends any>(Klass: T): T {
194+
export function addUnsafePrefixes(instance: {
195+
UNSAFE_componentWillUpdate?: Function,
196+
componentWillUpdate: Function,
197+
UNSAFE_componentWillMount?: Function,
198+
componentWillMount: Function
199+
}): void {
196200
const reactSemverArray = React.version.split('.').map((v) => parseInt(v));
197201
const shouldPrefix = reactSemverArray[0] >= 16 && reactSemverArray[1] >= 3;
198202

199203
if (shouldPrefix) {
200-
Klass.prototype.UNSAFE_componentWillUpdate = Klass.prototype.componentWillUpdate;
201-
delete Klass.prototype.componentWillUpdate;
204+
instance.UNSAFE_componentWillUpdate = instance.componentWillUpdate;
205+
instance.componentWillUpdate = void 0;
202206

203-
Klass.prototype.UNSAFE_componentWillMount = Klass.prototype.componentWillMount;
204-
delete Klass.prototype.componentWillMount;
207+
instance.UNSAFE_componentWillMount = instance.componentWillMount;
208+
instance.componentWillMount = void 0;
205209
}
206-
207-
return Klass;
208210
}

src/hotColumn.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import React, { ReactPortal } from 'react';
22
import { HotTableProps, HotColumnProps } from './types';
3-
import { addUnsafePrefixes, createEditorPortal, getExtendedEditorElement } from './helpers';
3+
import {
4+
addUnsafePrefixes,
5+
createEditorPortal,
6+
getExtendedEditorElement
7+
} from './helpers';
48
import { SettingsMapper } from './settingsMapper';
59
import Handsontable from 'handsontable';
610

@@ -16,6 +20,18 @@ class HotColumn extends React.Component<HotColumnProps, {}> {
1620
*/
1721
private localEditorPortal: ReactPortal = null;
1822

23+
/**
24+
* HotColumn class constructor.
25+
*
26+
* @param {HotColumnProps} props Component props.
27+
* @param {*} [context] Component context.
28+
*/
29+
constructor(props: HotColumnProps, context?: any) {
30+
super(props, context);
31+
32+
addUnsafePrefixes(this);
33+
}
34+
1935
/**
2036
* Get the local editor portal cache property.
2137
*
@@ -175,5 +191,4 @@ class HotColumn extends React.Component<HotColumnProps, {}> {
175191
}
176192
}
177193

178-
const PrefixedHotColumn = addUnsafePrefixes(HotColumn);
179-
export { PrefixedHotColumn as HotColumn };
194+
export { HotColumn };

src/hotTable.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ class HotTable extends React.Component<HotTableProps, {}> {
128128
*/
129129
private componentRendererColumns: Map<number | string, boolean> = new Map();
130130

131+
/**
132+
* HotTable class constructor.
133+
*
134+
* @param {HotTableProps} props Component props.
135+
* @param {*} [context] Component context.
136+
*/
137+
constructor(props: HotTableProps, context?: any) {
138+
super(props, context);
139+
140+
addUnsafePrefixes(this);
141+
}
142+
131143
/**
132144
* Package version getter.
133145
*
@@ -553,6 +565,5 @@ class HotTable extends React.Component<HotTableProps, {}> {
553565
}
554566
}
555567

556-
const PrefixedHotTable = addUnsafePrefixes(HotTable);
557-
export default PrefixedHotTable;
558-
export { PrefixedHotTable as HotTable };
568+
export default HotTable;
569+
export { HotTable };

test/_helpers.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ class IndividualPropsWrapper extends React.Component<{ref?: string, id?: string}
5252

5353
constructor(props) {
5454
super(props);
55+
56+
addUnsafePrefixes(this);
5557
}
5658

5759
componentWillMount() {
@@ -76,14 +78,16 @@ class IndividualPropsWrapper extends React.Component<{ref?: string, id?: string}
7678
);
7779
}
7880
}
79-
const PrefixedIPW = addUnsafePrefixes(IndividualPropsWrapper);
80-
export { PrefixedIPW as IndividualPropsWrapper };
81+
82+
export { IndividualPropsWrapper };
8183

8284
class SingleObjectWrapper extends React.Component<{ref?: string, id?: string}, {hotSettings?: object}> {
8385
hotTable: typeof HotTable;
8486

8587
constructor(props) {
8688
super(props);
89+
90+
addUnsafePrefixes(this);
8791
}
8892

8993
private setHotElementRef(component: typeof HotTable): void {
@@ -110,8 +114,7 @@ class SingleObjectWrapper extends React.Component<{ref?: string, id?: string}, {
110114
}
111115
}
112116

113-
const PrefixedSOW = addUnsafePrefixes(SingleObjectWrapper);
114-
export { PrefixedSOW as SingleObjectWrapper };
117+
export { SingleObjectWrapper };
115118

116119
export class RendererComponent extends React.Component<any, any> {
117120
render(): React.ReactElement<string> {

0 commit comments

Comments
 (0)