From 0806fd1b6fc82e7d904f5d52df8153512a8e4020 Mon Sep 17 00:00:00 2001 From: Dane Pilcher Date: Fri, 29 Oct 2021 20:25:03 +0000 Subject: [PATCH] fix: import custom component from local directory Retain unofficial support of all primitives --- .../studio-ui-codegen-react.test.ts.snap | 366 +++++++++++++++--- .../component-renderer.test.ts.snap | 2 +- .../__tests__/studio-ui-codegen-react.test.ts | 74 ++++ .../studio-ui-json/custom/customChildren.json | 10 + .../studio-ui-json/custom/customParent.json | 10 + .../custom/customParentAndChildren.json | 10 + .../amplify-ui-renderers/amplify-renderer.ts | 346 ++++++++++++++++- .../amplify-ui-renderers/customComponent.ts | 15 +- .../lib/import-collection.ts | 27 +- .../studio-ui-codegen-react/lib/primitives.ts | 65 ++++ .../react-component-with-children-renderer.ts | 34 -- .../react-studio-template-renderer-helper.ts | 5 + .../lib/react-studio-template-renderer.ts | 7 +- .../integration/generated-components-spec.js | 23 ++ .../src/ComponentTests.tsx | 8 + .../basicComponentCustomRating.json | 3 +- .../lib/components/custom/customChildren.json | 14 + .../lib/components/custom/customParent.json | 14 + .../custom/customParentAndChildren.json | 14 + .../lib/components/custom/index.ts | 18 + .../test-generator/lib/components/index.ts | 1 + 21 files changed, 940 insertions(+), 126 deletions(-) create mode 100644 packages/studio-ui-codegen-react/lib/__tests__/studio-ui-json/custom/customChildren.json create mode 100644 packages/studio-ui-codegen-react/lib/__tests__/studio-ui-json/custom/customParent.json create mode 100644 packages/studio-ui-codegen-react/lib/__tests__/studio-ui-json/custom/customParentAndChildren.json create mode 100644 packages/studio-ui-codegen-react/lib/primitives.ts create mode 100644 packages/test-generator/lib/components/custom/customChildren.json create mode 100644 packages/test-generator/lib/components/custom/customParent.json create mode 100644 packages/test-generator/lib/components/custom/customParentAndChildren.json create mode 100644 packages/test-generator/lib/components/custom/index.ts diff --git a/packages/studio-ui-codegen-react/lib/__tests__/__snapshots__/studio-ui-codegen-react.test.ts.snap b/packages/studio-ui-codegen-react/lib/__tests__/__snapshots__/studio-ui-codegen-react.test.ts.snap index 0e2751f56..2224cf425 100644 --- a/packages/studio-ui-codegen-react/lib/__tests__/__snapshots__/studio-ui-codegen-react.test.ts.snap +++ b/packages/studio-ui-codegen-react/lib/__tests__/__snapshots__/studio-ui-codegen-react.test.ts.snap @@ -10,7 +10,6 @@ import { Flex, FlexProps, Heading, - findChildOverrides, getOverrideProps, } from \\"@aws-amplify/ui-react\\"; @@ -36,7 +35,7 @@ export default function SiteHeader(props: SiteHeaderProps): React.ReactElement { + + ); +} +" +`; + +exports[`amplify render tests custom components custom parent should render component with ES5 1`] = ` +"var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +var __rest = + (this && this.__rest) || + function (s, e) { + var t = {}; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === \\"function\\") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if ( + e.indexOf(p[i]) < 0 && + Object.prototype.propertyIsEnumerable.call(s, p[i]) + ) + t[p[i]] = s[p[i]]; + } + return t; + }; +/* eslint-disable */ +import React from \\"react\\"; +import { Button, getOverrideProps } from \\"@aws-amplify/ui-react\\"; +import MyView from \\"./MyView\\"; +export default function CustomParent(props) { + var overridesProp = props.overrides, + rest = __rest(props, [\\"overrides\\"]); + var overrides = __assign({}, overridesProp); + return React.createElement( + MyView, + __assign({}, rest, getOverrideProps(overrides, \\"MyView\\")), + React.createElement( + Button, + __assign({}, getOverrideProps(overrides, \\"MyView.Button\\")) + ) + ); +} +" +`; + +exports[`amplify render tests custom components custom parent should render declarations 1`] = ` +"import React from \\"react\\"; +import { EscapeHatchProps } from \\"@aws-amplify/ui-react\\"; +import { MyViewProps } from \\"./MyView\\"; +export declare type CustomParentProps = Partial & { + overrides?: EscapeHatchProps | undefined | null; +}; +export default function CustomParent(props: CustomParentProps): React.ReactElement; +" +`; + exports[`amplify render tests custom render config should render ES5 1`] = ` "var __assign = (this && this.__assign) || @@ -1898,13 +2161,12 @@ exports[`amplify render tests sample code snippet tests should generate a sample "/* eslint-disable */ import React from \\"react\\"; import { - CustomButton, EscapeHatchProps, View, ViewProps, - findChildOverrides, getOverrideProps, } from \\"@aws-amplify/ui-react\\"; +import CustomButton from \\"./CustomButton\\"; export type ViewWithButtonProps = Partial & { overrides?: EscapeHatchProps | undefined | null; @@ -1920,7 +2182,7 @@ export default function ViewWithButton( color=\\"#ff0000\\" width=\\"20px\\" buttonText=\\"Click Me\\" - {...findChildOverrides(props.overrides, \\"CustomButton\\")} + {...getOverrideProps(overrides, \\"View.CustomButton\\")} > ); @@ -1938,7 +2200,6 @@ import { Flex, FlexProps, Heading, - findChildOverrides, getOverrideProps, } from \\"@aws-amplify/ui-react\\"; @@ -1973,7 +2234,7 @@ export default function SiteHeader(props: SiteHeaderProps): React.ReactElement {