Skip to content

Commit 3dc8d5b

Browse files
committed
fix(react): component types extend React.HTMLAttributes
1 parent 6464659 commit 3dc8d5b

File tree

8 files changed

+29
-50
lines changed

8 files changed

+29
-50
lines changed

package-lock.json

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"build": "lerna run build"
66
},
77
"devDependencies": {
8-
"@stencil/core": "^1.0.0-beta.5",
8+
"@stencil/core": "^1.8.1",
99
"lerna": "^3.13.1"
1010
}
1111
}

packages/react-output-target/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
"bugs": {
3434
"url": "https://github.com/ionic-team/stencil-ds-plugins/issues"
3535
},
36+
"peerDependencies": {
37+
"@stencil/core": ">=1.8.0"
38+
},
3639
"devDependencies": {
3740
"@types/jest": "^24.0.11",
3841
"@types/react": "^16.7.0",

packages/react-output-target/react-component-lib/ReactProps.ts

-3
This file was deleted.

packages/react-output-target/react-component-lib/createComponent.tsx

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
import React from 'react';
22
import ReactDom from 'react-dom';
33

4-
import { ReactProps } from './ReactProps';
54
import {
65
attachEventProps,
76
createForwardRef,
87
dashToPascalCase,
98
isCoveredByReact,
109
} from './utils/index';
1110

12-
interface IonicReactInternalProps<ElementType> {
11+
interface IonicReactInternalProps<ElementType> extends React.HTMLAttributes<ElementType> {
1312
forwardedRef?: React.Ref<ElementType>;
14-
children?: React.ReactNode;
15-
href?: string;
16-
target?: string;
17-
style?: string;
1813
ref?: React.Ref<any>;
19-
className?: string;
2014
}
2115

2216
export const createReactComponent = <PropType, ElementType>(tagName: string) => {
@@ -62,5 +56,5 @@ export const createReactComponent = <PropType, ElementType>(tagName: string) =>
6256
return displayName;
6357
}
6458
};
65-
return createForwardRef<PropType & ReactProps, ElementType>(ReactComponent, displayName);
59+
return createForwardRef<PropType, ElementType>(ReactComponent, displayName);
6660
};

packages/react-output-target/react-component-lib/createControllerComponent.tsx

-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React from 'react';
2-
import { generateUniqueId } from './utils/index';
32
import { attachEventProps } from './utils/attachEventProps';
43

54
interface LoadingElement {
@@ -23,11 +22,9 @@ export function createControllerComponent<
2322

2423
return class ReactControllerComponent extends React.Component<Props> {
2524
controller?: LoadingElementType;
26-
id: string;
2725

2826
constructor(props: Props) {
2927
super(props);
30-
this.id = generateUniqueId();
3128
}
3229

3330
static get displayName() {

packages/react-output-target/react-component-lib/utils/index.tsx

+5-16
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,12 @@ export const dashToPascalCase = (str: string) =>
77
.map(segment => segment.charAt(0).toUpperCase() + segment.slice(1))
88
.join('');
99

10-
export const generateUniqueId = () => {
11-
return (
12-
[1e7].toString() +
13-
-(1e3).toString() +
14-
-(4e3).toString() +
15-
-(8e3).toString() +
16-
-(1e11).toString()
17-
).replace(/[018]/g, (c: any) => {
18-
const random = crypto.getRandomValues(new Uint8Array(1)) as Uint8Array;
19-
return (c ^ (random[0] & (15 >> (c / 4)))).toString(16);
20-
});
21-
};
10+
export interface ReactProps {
11+
class?: string;
12+
style?: {[key: string]: any };
13+
}
2214

23-
export type IonicReactExternalProps<PropType, ElementType> = PropType & {
24-
ref?: React.RefObject<ElementType>;
25-
children?: React.ReactNode;
26-
};
15+
export type IonicReactExternalProps<PropType, ElementType> = PropType & Omit<React.HTMLAttributes<ElementType>, 'style'> & ReactProps;
2716

2817
export const createForwardRef = <PropType, ElementType>(
2918
ReactComponent: any,

packages/react-output-target/src/output-react.ts

+11-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'path';
22
import { OutputTargetReact } from './types';
3-
import { dashToPascalCase, readPackageJson, relativeImport, sortBy, normalizePath } from './utils';
3+
import { dashToPascalCase, normalizePath, readPackageJson, relativeImport, sortBy } from './utils';
44
import { CompilerCtx, ComponentCompilerMeta, Config } from '@stencil/core/internal';
55

66
export async function reactProxyOutput(
@@ -33,7 +33,8 @@ async function generateProxies(
3333
const dtsFilePath = path.join(rootDir, distTypesDir, GENERATED_DTS);
3434
const componentsTypeFile = relativeImport(outputTarget.proxiesFile, dtsFilePath, '.d.ts');
3535

36-
const imports = `/* tslint:disable */
36+
const imports = `/* eslint-disable */
37+
/* tslint:disable */
3738
/* auto-generated react proxies */
3839
import { createReactComponent } from './react-component-lib';\n`;
3940

@@ -67,7 +68,7 @@ function createComponentDefinition(cmpMeta: ComponentCompilerMeta) {
6768
const tagNameAsPascal = dashToPascalCase(cmpMeta.tagName);
6869

6970
return [
70-
`export const ${tagNameAsPascal} = createReactComponent<${IMPORT_TYPES}.${tagNameAsPascal}, HTML${tagNameAsPascal}Element>('${
71+
`export const ${tagNameAsPascal} = /*@__PURE__*/createReactComponent<${IMPORT_TYPES}.${tagNameAsPascal}, HTML${tagNameAsPascal}Element>('${
7172
cmpMeta.tagName
7273
}');`,
7374
];
@@ -79,15 +80,13 @@ async function copyResources(config: Config, outputTarget: OutputTargetReact) {
7980
}
8081
const srcDirectory = path.join(__dirname, '..', 'react-component-lib');
8182
const destDirectory = path.join(path.dirname(outputTarget.proxiesFile), 'react-component-lib');
82-
const resourcesFilesToCopy = await config.sys.glob('**/*.*', { cwd: srcDirectory });
83-
84-
return config.sys.copy(
85-
resourcesFilesToCopy.map(rf => ({
86-
src: path.join(srcDirectory, '../react-component-lib/', rf),
87-
dest: path.join(destDirectory, rf),
88-
warn: false,
89-
})),
90-
);
83+
84+
return config.sys.copy([{
85+
src: srcDirectory,
86+
dest: destDirectory,
87+
keepDirStructure: true,
88+
warn: false,
89+
}], '');
9190
}
9291

9392
export const GENERATED_DTS = 'components.d.ts';

0 commit comments

Comments
 (0)