@shopify/shop-minis-cli 0.0.37 → 0.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +78 -0
- package/.vscode/extensions.json +3 -0
- package/.vscode/launch.json +29 -0
- package/.vscode/settings.json +8 -0
- package/.vscode/shop-minis-cli.code-workspace +8 -0
- package/build/commands/cancel-submission/cancel-submission.d.ts +1 -0
- package/build/commands/cancel-submission/cancel-submission.js +57 -0
- package/build/commands/cancel-submission/cancel-submission.js.map +1 -0
- package/build/commands/cancel-submission/index.d.ts +2 -0
- package/build/commands/cancel-submission/index.js +18 -0
- package/build/commands/cancel-submission/index.js.map +1 -0
- package/build/commands/cancel-submission/types.d.ts +3 -0
- package/build/commands/cancel-submission/types.js +2 -0
- package/build/commands/cancel-submission/types.js.map +1 -0
- package/build/commands/check-submission/index.d.ts +2 -0
- package/build/commands/check-submission/index.js +55 -0
- package/build/commands/check-submission/index.js.map +1 -0
- package/build/commands/check-submission/types.d.ts +3 -0
- package/build/commands/check-submission/types.js +2 -0
- package/build/commands/check-submission/types.js.map +1 -0
- package/build/commands/codemod/index.d.ts +3 -0
- package/build/commands/codemod/index.js +47 -0
- package/build/commands/codemod/index.js.map +1 -0
- package/build/commands/codemod/releases/index.d.ts +7 -0
- package/build/commands/codemod/releases/index.js +58 -0
- package/build/commands/codemod/releases/index.js.map +1 -0
- package/build/commands/codemod/releases/types.d.ts +9 -0
- package/build/commands/codemod/releases/types.js +2 -0
- package/build/commands/codemod/releases/types.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-42/index.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-42/index.js +46 -0
- package/build/commands/codemod/releases/v0-0-42/index.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.d.ts +7 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.js +83 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-43.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-43.js +32 -0
- package/build/commands/codemod/releases/v0-0-43.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-44.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-44.js +214 -0
- package/build/commands/codemod/releases/v0-0-44.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-45.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-45.js +23 -0
- package/build/commands/codemod/releases/v0-0-45.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-50.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-50.js +34 -0
- package/build/commands/codemod/releases/v0-0-50.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-54.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-54.js +70 -0
- package/build/commands/codemod/releases/v0-0-54.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-56.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-56.js +48 -0
- package/build/commands/codemod/releases/v0-0-56.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-57.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-57.js +41 -0
- package/build/commands/codemod/releases/v0-0-57.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-58.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-58.js +68 -0
- package/build/commands/codemod/releases/v0-0-58.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-61.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-61.js +30 -0
- package/build/commands/codemod/releases/v0-0-61.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-63.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-63.js +42 -0
- package/build/commands/codemod/releases/v0-0-63.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-64.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-64.js +47 -0
- package/build/commands/codemod/releases/v0-0-64.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-75.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-75.js +30 -0
- package/build/commands/codemod/releases/v0-0-75.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-76.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-76.js +32 -0
- package/build/commands/codemod/releases/v0-0-76.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-77.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-77.js +39 -0
- package/build/commands/codemod/releases/v0-0-77.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-79.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-79.js +35 -0
- package/build/commands/codemod/releases/v0-0-79.js.map +1 -0
- package/build/commands/config.d.ts +14 -0
- package/build/commands/config.js +42 -0
- package/build/commands/config.js.map +1 -0
- package/build/commands/create-mini/index.js +84 -68
- package/build/commands/create-mini/index.js.map +1 -1
- package/build/commands/create-mini/utils/template-app.d.ts +1 -1
- package/build/commands/create-mini/utils/template-app.js +38 -38
- package/build/commands/create-mini/utils/template-app.js.map +1 -1
- package/build/commands/dev/index.d.ts +3 -0
- package/build/commands/dev/index.js +51 -22
- package/build/commands/dev/index.js.map +1 -1
- package/build/commands/dev/utils/android.d.ts +6 -4
- package/build/commands/dev/utils/android.js +55 -67
- package/build/commands/dev/utils/android.js.map +1 -1
- package/build/commands/dev/utils/binaries.d.ts +2 -80
- package/build/commands/dev/utils/binaries.js +10 -166
- package/build/commands/dev/utils/binaries.js.map +1 -1
- package/build/commands/dev/utils/build-type.d.ts +2 -0
- package/build/commands/dev/utils/build-type.js +14 -0
- package/build/commands/dev/utils/build-type.js.map +1 -0
- package/build/commands/dev/utils/deeplink.d.ts +3 -3
- package/build/commands/dev/utils/deeplink.js +13 -18
- package/build/commands/dev/utils/deeplink.js.map +1 -1
- package/build/commands/dev/utils/interactive-terminal.d.ts +4 -2
- package/build/commands/dev/utils/interactive-terminal.js +66 -107
- package/build/commands/dev/utils/interactive-terminal.js.map +1 -1
- package/build/commands/dev/utils/metro/metro-config.js +17 -20
- package/build/commands/dev/utils/metro/metro-config.js.map +1 -1
- package/build/commands/dev/utils/metro/metro-reporter.d.ts +3 -4
- package/build/commands/dev/utils/metro/metro-reporter.js +6 -13
- package/build/commands/dev/utils/metro/metro-reporter.js.map +1 -1
- package/build/commands/dev/utils/metro/metro-server-middleware.d.ts +1 -0
- package/build/commands/dev/utils/metro/metro-server-middleware.js +11 -12
- package/build/commands/dev/utils/metro/metro-server-middleware.js.map +1 -1
- package/build/commands/dev/utils/metro/metro-server.d.ts +2 -2
- package/build/commands/dev/utils/metro/metro-server.js +7 -14
- package/build/commands/dev/utils/metro/metro-server.js.map +1 -1
- package/build/commands/dev/utils/network.d.ts +20 -0
- package/build/commands/dev/utils/network.js +122 -0
- package/build/commands/dev/utils/network.js.map +1 -0
- package/build/commands/dev/utils/platform.d.ts +18 -0
- package/build/commands/dev/utils/platform.js +41 -0
- package/build/commands/dev/utils/platform.js.map +1 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.d.ts +1 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.js +12 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.js.map +1 -0
- package/build/commands/dev/utils/qr-code.js +3 -10
- package/build/commands/dev/utils/qr-code.js.map +1 -1
- package/build/commands/dev/utils/simulator.d.ts +5 -2
- package/build/commands/dev/utils/simulator.js +43 -37
- package/build/commands/dev/utils/simulator.js.map +1 -1
- package/build/commands/dev/utils/start-app/config.d.ts +5 -0
- package/build/commands/dev/utils/start-app/config.js +25 -0
- package/build/commands/dev/utils/start-app/config.js.map +1 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.d.ts +2 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.js +94 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.js.map +1 -0
- package/build/commands/dev/utils/start-app/start-app.d.ts +2 -0
- package/build/commands/dev/utils/start-app/start-app.js +10 -0
- package/build/commands/dev/utils/start-app/start-app.js.map +1 -0
- package/build/commands/dev/utils/start-app/types.d.ts +20 -0
- package/build/commands/dev/utils/start-app/types.js +2 -0
- package/build/commands/dev/utils/start-app/types.js.map +1 -0
- package/build/commands/dev/utils/types.d.ts +24 -0
- package/build/commands/dev/utils/types.js +7 -0
- package/build/commands/dev/utils/types.js.map +1 -0
- package/build/commands/dev/utils/version.d.ts +64 -0
- package/build/commands/dev/utils/version.js +101 -0
- package/build/commands/dev/utils/version.js.map +1 -0
- package/build/commands/dev/utils/with-retries.js +1 -5
- package/build/commands/dev/utils/with-retries.js.map +1 -1
- package/build/commands/doctor/index.d.ts +6 -0
- package/build/commands/doctor/index.js +21 -0
- package/build/commands/doctor/index.js.map +1 -0
- package/build/commands/doctor/utils/diagnose-dependencies.d.ts +7 -0
- package/build/commands/doctor/utils/diagnose-dependencies.js +108 -0
- package/build/commands/doctor/utils/diagnose-dependencies.js.map +1 -0
- package/build/commands/generate-graphql-types/index.d.ts +1 -0
- package/build/commands/generate-graphql-types/index.js +43 -27
- package/build/commands/generate-graphql-types/index.js.map +1 -1
- package/build/commands/info/index.d.ts +3 -0
- package/build/commands/info/index.js +42 -0
- package/build/commands/info/index.js.map +1 -0
- package/build/commands/setup/index.d.ts +2 -0
- package/build/commands/setup/index.js +81 -0
- package/build/commands/setup/index.js.map +1 -0
- package/build/commands/submit/config.d.ts +9 -0
- package/build/commands/submit/config.js +18 -0
- package/build/commands/submit/config.js.map +1 -0
- package/build/commands/submit/errors.d.ts +19 -0
- package/build/commands/submit/errors.js +87 -0
- package/build/commands/submit/errors.js.map +1 -0
- package/build/commands/submit/gcs.d.ts +6 -0
- package/build/commands/submit/gcs.js +10 -0
- package/build/commands/submit/gcs.js.map +1 -0
- package/build/commands/submit/index.d.ts +2 -0
- package/build/commands/submit/index.js +25 -0
- package/build/commands/submit/index.js.map +1 -0
- package/build/commands/submit/submit.d.ts +5 -0
- package/build/commands/submit/submit.js +222 -0
- package/build/commands/submit/submit.js.map +1 -0
- package/build/commands/submit/tasks.d.ts +37 -0
- package/build/commands/submit/tasks.js +91 -0
- package/build/commands/submit/tasks.js.map +1 -0
- package/build/commands/submit/types.d.ts +14 -0
- package/build/commands/submit/types.js +2 -0
- package/build/commands/submit/types.js.map +1 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.d.ts +1 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.js +58 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.js.map +1 -0
- package/build/commands/submit/utils/request-entry-point-params.d.ts +1 -0
- package/build/commands/submit/utils/request-entry-point-params.js +41 -0
- package/build/commands/submit/utils/request-entry-point-params.js.map +1 -0
- package/build/commands/submit/validation.d.ts +1 -0
- package/build/commands/submit/validation.js +11 -0
- package/build/commands/submit/validation.js.map +1 -0
- package/build/commands/upgrade/index.d.ts +13 -0
- package/build/commands/upgrade/index.js +53 -0
- package/build/commands/upgrade/index.js.map +1 -0
- package/build/commands/upgrade/utils/cli.d.ts +1 -0
- package/build/commands/upgrade/utils/cli.js +15 -0
- package/build/commands/upgrade/utils/cli.js.map +1 -0
- package/build/commands/validate-manifest/index.d.ts +3 -0
- package/build/commands/validate-manifest/index.js +29 -0
- package/build/commands/validate-manifest/index.js.map +1 -0
- package/build/data/accept-invitation.d.ts +4 -0
- package/build/data/accept-invitation.js +16 -0
- package/build/data/accept-invitation.js.map +1 -0
- package/build/data/cancel-submission.d.ts +22 -0
- package/build/data/cancel-submission.js +26 -0
- package/build/data/cancel-submission.js.map +1 -0
- package/build/data/create-submission.d.ts +20 -0
- package/build/data/create-submission.js +27 -0
- package/build/data/create-submission.js.map +1 -0
- package/build/data/create-upload.d.ts +21 -0
- package/build/data/create-upload.js +40 -0
- package/build/data/create-upload.js.map +1 -0
- package/build/data/get-submissions.d.ts +27 -0
- package/build/data/get-submissions.js +33 -0
- package/build/data/get-submissions.js.map +1 -0
- package/build/data/gql-client.d.ts +8 -0
- package/build/data/gql-client.js +9 -0
- package/build/data/gql-client.js.map +1 -0
- package/build/data/mini.d.ts +5 -0
- package/build/data/mini.js +14 -0
- package/build/data/mini.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.d.ts +13 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.js +7 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.d.ts +75 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js +24 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.d.ts +1570 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js +1062 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.d.ts +2 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.js +3 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.js.map +1 -0
- package/build/dev-panel/asset-manifest.json +6 -9
- package/build/dev-panel/index.html +1 -1
- package/build/dev-panel/static/css/{main.31436fe3.css → main.7f1ee407.css} +2 -2
- package/build/dev-panel/static/css/main.7f1ee407.css.map +1 -0
- package/build/dev-panel/static/js/{main.27f47095.js → main.6625699c.js} +3 -3
- package/build/dev-panel/static/js/main.6625699c.js.map +1 -0
- package/build/index.d.ts +1 -1
- package/build/index.js +30 -15
- package/build/index.js.map +1 -1
- package/build/schemas/manifest.schema.json +198 -0
- package/build/utils/archive.d.ts +30 -0
- package/build/utils/archive.js +38 -0
- package/build/utils/archive.js.map +1 -0
- package/build/utils/common-tasks.d.ts +1 -0
- package/build/utils/common-tasks.js +49 -0
- package/build/utils/common-tasks.js.map +1 -0
- package/build/utils/development-params.d.ts +13 -0
- package/build/utils/development-params.js +42 -0
- package/build/utils/development-params.js.map +1 -0
- package/build/{commands/utils → utils}/exec-async-child-process.d.ts +1 -1
- package/build/{commands/utils → utils}/exec-async-child-process.js +6 -13
- package/build/utils/exec-async-child-process.js.map +1 -0
- package/build/utils/file.d.ts +1 -0
- package/build/utils/file.js +7 -0
- package/build/utils/file.js.map +1 -0
- package/build/utils/minis-manifest.d.ts +6 -0
- package/build/utils/minis-manifest.js +56 -0
- package/build/utils/minis-manifest.js.map +1 -0
- package/build/utils/package-manager.d.ts +38 -0
- package/build/utils/package-manager.js +98 -0
- package/build/utils/package-manager.js.map +1 -0
- package/build/utils/patch-package.d.ts +5 -0
- package/build/utils/patch-package.js +76 -0
- package/build/utils/patch-package.js.map +1 -0
- package/build/utils/replace-strings-in-template.d.ts +1 -0
- package/build/utils/replace-strings-in-template.js +15 -0
- package/build/utils/replace-strings-in-template.js.map +1 -0
- package/build/utils/semver.d.ts +1 -0
- package/build/utils/semver.js +19 -0
- package/build/utils/semver.js.map +1 -0
- package/build/{commands/utils → utils}/wrap-with-loading-indicator.d.ts +1 -1
- package/build/utils/wrap-with-loading-indicator.js +16 -0
- package/build/utils/wrap-with-loading-indicator.js.map +1 -0
- package/package.json +35 -28
- package/scripts/graphql-codegen.ts +23 -0
- package/scripts/test-template.ts +63 -0
- package/shipit.alpha.yml +3 -0
- package/templates/__template_blank/src/index.tsx +5 -4
- package/templates/__template_blank/src/types.ts +1 -1
- package/templates/__template_common/.eslintrc.js +16 -0
- package/templates/__template_common/assets.d.ts +14 -0
- package/templates/__template_common/babel.config.js +3 -17
- package/templates/__template_common/gitignore +2 -0
- package/templates/__template_common/index.tsx +3 -6
- package/templates/__template_common/metro.config.js +4 -30
- package/templates/__template_common/package.json +17 -47
- package/templates/__template_common/src/manifest.json +1 -27
- package/templates/__template_hello_world/src/components/ComponentLink.ts +31 -19
- package/templates/__template_hello_world/src/components/ComponentListItem.tsx +1 -0
- package/templates/__template_hello_world/src/components/FeaturedComponents.tsx +4 -2
- package/templates/__template_hello_world/src/components/quiz/ImageCarouselSlide.tsx +54 -0
- package/templates/__template_hello_world/src/components/quiz/MultipleChoiceSlide.tsx +77 -0
- package/templates/__template_hello_world/src/components/quiz/QuizProvider.tsx +64 -0
- package/templates/__template_hello_world/src/components/quiz/QuizSlide.tsx +79 -0
- package/templates/__template_hello_world/src/components/quiz/QuizSlideCommander.tsx +35 -0
- package/templates/__template_hello_world/src/components/quiz/TextFieldSlide.tsx +84 -0
- package/templates/__template_hello_world/src/components/quiz/TextSlide.tsx +6 -0
- package/templates/__template_hello_world/src/components/quiz/types.ts +72 -0
- package/templates/__template_hello_world/src/data/Test.graphql.d.ts +69 -76
- package/templates/__template_hello_world/src/data/TestProducts.graphql +30 -0
- package/templates/__template_hello_world/src/data/TestProducts.graphql.d.ts +159 -81
- package/templates/__template_hello_world/src/fixtures/mocked-products-with-variants.ts +274 -0
- package/templates/__template_hello_world/src/hooks/useQuizData.ts +26 -0
- package/templates/__template_hello_world/src/hooks/useQuizState.ts +27 -0
- package/templates/__template_hello_world/src/index.tsx +6 -5
- package/templates/__template_hello_world/src/routes.tsx +46 -22
- package/templates/__template_hello_world/src/screens/AccordionScreen.tsx +73 -0
- package/templates/__template_hello_world/src/screens/BottomSheetScreen.tsx +6 -5
- package/templates/__template_hello_world/src/screens/HomeScreen.tsx +14 -3
- package/templates/__template_hello_world/src/screens/{ImageCarouselScreen.tsx → ImageMultipleChoiceScreen.tsx} +4 -6
- package/templates/__template_hello_world/src/screens/InputScreen.tsx +13 -70
- package/templates/__template_hello_world/src/screens/QuizResultScreen.tsx +82 -0
- package/templates/__template_hello_world/src/screens/QuizScreen.tsx +40 -0
- package/templates/__template_hello_world/src/screens/QuizSlideScreen.tsx +150 -0
- package/templates/__template_hello_world/src/screens/ShopActionsScreen.tsx +48 -0
- package/templates/__template_hello_world/src/screens/VariantPickerScreen.tsx +120 -0
- package/templates/__template_hello_world/src/types.ts +27 -24
- package/templates/__template_hello_world/src/utils/mockQuizData.ts +330 -0
- package/templates/__template_hello_world/src/utils/quizUtils.ts +75 -0
- package/templates/__template_snowboardz/src/components/SkillLevelIcon.tsx +1 -4
- package/templates/__template_snowboardz/src/components/SkillLevelPicker.tsx +7 -1
- package/templates/__template_snowboardz/src/data/TestProducts.graphql +1 -1
- package/templates/__template_snowboardz/src/data/TestProducts.graphql.d.ts +84 -74
- package/templates/__template_snowboardz/src/index.tsx +6 -5
- package/templates/__template_snowboardz/src/routes.tsx +2 -2
- package/templates/__template_snowboardz/src/types.ts +3 -3
- package/build/commands/check/index.d.ts +0 -5
- package/build/commands/check/index.js +0 -77
- package/build/commands/check/index.js.map +0 -1
- package/build/commands/check/utils/versions.d.ts +0 -1
- package/build/commands/check/utils/versions.js +0 -14
- package/build/commands/check/utils/versions.js.map +0 -1
- package/build/commands/dev/utils/binaries.test.d.ts +0 -1
- package/build/commands/dev/utils/binaries.test.js +0 -275
- package/build/commands/dev/utils/binaries.test.js.map +0 -1
- package/build/commands/dev/utils/minis-manifest.d.ts +0 -1
- package/build/commands/dev/utils/minis-manifest.js +0 -24
- package/build/commands/dev/utils/minis-manifest.js.map +0 -1
- package/build/commands/utils/exec-async-child-process.js.map +0 -1
- package/build/commands/utils/wrap-with-loading-indicator.js +0 -23
- package/build/commands/utils/wrap-with-loading-indicator.js.map +0 -1
- package/build/dev-panel/middleware.d.ts +0 -4
- package/build/dev-panel/middleware.js +0 -11
- package/build/dev-panel/middleware.js.map +0 -1
- package/build/dev-panel/static/css/main.31436fe3.css.map +0 -1
- package/build/dev-panel/static/js/main.27f47095.js.map +0 -1
- package/build/dev-panel/static/media/bottomsheet.fe525b8722f6d504a185.png +0 -0
- package/build/dev-panel/static/media/navigation.597434370a97c328a970.png +0 -0
- package/build/dev-panel/static/media/stories.a425b6972a5338fabdad.png +0 -0
- package/templates/__template_blank/src/custom.d.ts +0 -4
- package/templates/__template_common/.eslintrc.json +0 -132
- package/templates/__template_common/patches/react-native+0.68.5.patch +0 -173
- package/templates/__template_hello_world/src/utils/getFlagEmoji.spec.tsx +0 -19
- /package/build/dev-panel/static/js/{main.27f47095.js.LICENSE.txt → main.6625699c.js.LICENSE.txt} +0 -0
|
@@ -1,31 +1,5 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {
|
|
2
|
+
getMinisMetroConfig,
|
|
3
|
+
} = require('@shopify/shop-minis-runtime/metro-config')
|
|
2
4
|
|
|
3
|
-
module.exports = (
|
|
4
|
-
const {
|
|
5
|
-
resolver: {sourceExts, assetExts},
|
|
6
|
-
} = await getDefaultConfig()
|
|
7
|
-
|
|
8
|
-
return {
|
|
9
|
-
// We need to explicitly tell metro/haste/watchman to register the root directory
|
|
10
|
-
// otherwise imports fail when running minis directly.
|
|
11
|
-
// https://github.com/facebook/react-native/issues/24432#issuecomment-482798850
|
|
12
|
-
watchFolders: [__dirname],
|
|
13
|
-
server: {
|
|
14
|
-
port: parseInt(process.env.RCT_METRO_PORT, 10) || 8082,
|
|
15
|
-
},
|
|
16
|
-
transformer: {
|
|
17
|
-
// eslint-disable-next-line require-await
|
|
18
|
-
getTransformOptions: async () => ({
|
|
19
|
-
transform: {
|
|
20
|
-
experimentalImportSupport: false,
|
|
21
|
-
inlineRequires: true,
|
|
22
|
-
},
|
|
23
|
-
}),
|
|
24
|
-
babelTransformerPath: require.resolve('react-native-svg-transformer'),
|
|
25
|
-
},
|
|
26
|
-
resolver: {
|
|
27
|
-
assetExts: assetExts.filter(ext => ext !== 'svg'),
|
|
28
|
-
sourceExts: [...sourceExts, 'svg'],
|
|
29
|
-
},
|
|
30
|
-
}
|
|
31
|
-
})()
|
|
5
|
+
module.exports = getMinisMetroConfig(__dirname)
|
|
@@ -1,65 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "__MINI_APP_NAME_KEBAB_CASE__",
|
|
3
3
|
"version": "0.0.1",
|
|
4
4
|
"private": true,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"start": "shop-minis dev",
|
|
7
|
-
"
|
|
7
|
+
"submit": "shop-minis submit",
|
|
8
|
+
"cancel-submission": "shop-minis cancel-submission",
|
|
9
|
+
"check-submission": "shop-minis check-submission",
|
|
8
10
|
"test": "jest",
|
|
9
11
|
"lint": "eslint .",
|
|
10
|
-
"postinstall": "patch-package",
|
|
11
12
|
"generate-graphql-types": "shop-minis generate-graphql-types"
|
|
12
13
|
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@shopify/shop-minis-runtime": "__SHOP_MINIS_RUNTIME_VERSION__"
|
|
16
|
+
},
|
|
13
17
|
"devDependencies": {
|
|
14
|
-
"@babel/core": "^7.12.9",
|
|
15
|
-
"@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5",
|
|
16
|
-
"@babel/plugin-transform-react-jsx": "^7.20.7",
|
|
17
|
-
"@babel/runtime": "^7.12.5",
|
|
18
|
-
"@graphql-eslint/eslint-plugin": "^3.15.0",
|
|
19
|
-
"@react-native-community/blur": "4.3.0",
|
|
20
|
-
"@react-native-community/eslint-config": "^3.2.0",
|
|
21
|
-
"@react-navigation/native": "6.1.2",
|
|
22
|
-
"@react-navigation/native-stack": "6.9.8",
|
|
23
|
-
"@react-native-community/datetimepicker": "^6.7.5",
|
|
24
|
-
"@react-native-community/picker": "1.6.1",
|
|
25
|
-
"@shopify/eslint-plugin": "^42.0.3",
|
|
26
|
-
"@shopify/react-graphql": "0.0.0-snapshot-20230110221326",
|
|
27
|
-
"@shopify/restyle": "^2.1.0",
|
|
28
18
|
"@shopify/shop-minis-cli": "__SHOP_MINIS_CLI_VERSION__",
|
|
29
|
-
"@
|
|
30
|
-
"@types/color": "^3.0.3",
|
|
31
|
-
"@types/react": "^17.0.39",
|
|
32
|
-
"@types/react-native": "^0.68.1",
|
|
33
|
-
"apollo-link-timeout": "^4.0.0",
|
|
19
|
+
"@types/jest": "^29.2.6",
|
|
34
20
|
"babel-jest": "^26.6.3",
|
|
35
|
-
"babel-plugin-import-graphql": "^2.8.1",
|
|
36
|
-
"color": "^4.2.3",
|
|
37
21
|
"eslint": "^8.32.0",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"graphql": "^15.0.0",
|
|
41
|
-
"intl": "^1.2.5",
|
|
42
|
-
"jest": "^26.6.3",
|
|
43
|
-
"metro-react-native-babel-preset": "^0.67.0",
|
|
44
|
-
"patch-package": "^6.4.7",
|
|
45
|
-
"postinstall-postinstall": "^2.1.0",
|
|
46
|
-
"prettier": "^2.8.2",
|
|
47
|
-
"react": "17.0.2",
|
|
48
|
-
"react-native": "0.68.5",
|
|
49
|
-
"react-native-fast-image": "8.6.3",
|
|
50
|
-
"react-native-gesture-handler": "2.6.1",
|
|
51
|
-
"react-native-localize": "2.2.4",
|
|
52
|
-
"react-native-progress": "5.0.0",
|
|
53
|
-
"react-native-reanimated": "2.13.0",
|
|
54
|
-
"react-native-safe-area-context": "4.4.1",
|
|
55
|
-
"react-native-screens": "3.18.2",
|
|
56
|
-
"react-native-svg": "13.6.0",
|
|
57
|
-
"react-native-svg-transformer": "^1.0.0",
|
|
58
|
-
"react-native-webview": "11.23.1",
|
|
59
|
-
"react-test-renderer": "17.0.2",
|
|
60
|
-
"typescript": "~4.7.4"
|
|
22
|
+
"jest": "^29.3.1",
|
|
23
|
+
"prettier": "^2.8.2"
|
|
61
24
|
},
|
|
62
25
|
"jest": {
|
|
63
26
|
"preset": "react-native"
|
|
27
|
+
},
|
|
28
|
+
"overrides": {
|
|
29
|
+
"graphql": "15.8.0",
|
|
30
|
+
"react": "18.2.0"
|
|
31
|
+
},
|
|
32
|
+
"resolutions": {
|
|
33
|
+
"@apollo/federation": "0.38.1"
|
|
64
34
|
}
|
|
65
35
|
}
|
|
@@ -1,29 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "__MINI_APP_NAME__"
|
|
3
|
-
"handle": "__MINI_APP_HANDLE_KEBAB_CASE__",
|
|
4
|
-
"icon_url": "https://cdn.shopify.com/shop-assets/static_uploads/mini_apps/mini-placeholder-icon.png",
|
|
5
|
-
"shopify_app_ids": [],
|
|
6
|
-
"description": "Mini App Description",
|
|
7
|
-
"entry_points": [
|
|
8
|
-
{
|
|
9
|
-
"type": "ACTION_BUTTON",
|
|
10
|
-
"location": "PRODUCT_PAGE",
|
|
11
|
-
"images": {
|
|
12
|
-
"default_value": []
|
|
13
|
-
},
|
|
14
|
-
"call_to_action_text": {
|
|
15
|
-
"default_value": "Open __MINI_APP_NAME__"
|
|
16
|
-
},
|
|
17
|
-
"visibility": {
|
|
18
|
-
"owner_type": "PRODUCT",
|
|
19
|
-
"namespace": "__MINI_APP_HANDLE_KEBAB_CASE__",
|
|
20
|
-
"key": "available"
|
|
21
|
-
},
|
|
22
|
-
"visibility_rule": {
|
|
23
|
-
"owner_type": "SHOP",
|
|
24
|
-
"namespace": "__MINI_APP_HANDLE_KEBAB_CASE__",
|
|
25
|
-
"key": "product_entry_point_rule"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
]
|
|
2
|
+
"name": "__MINI_APP_NAME__"
|
|
29
3
|
}
|
|
@@ -7,76 +7,88 @@ export interface ComponentLink {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export const componentLinks: ComponentLink[] = [
|
|
10
|
+
{
|
|
11
|
+
name: 'Accordion',
|
|
12
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Accordion',
|
|
13
|
+
},
|
|
10
14
|
{
|
|
11
15
|
name: 'Avatar',
|
|
12
|
-
screen: '
|
|
16
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Avatar',
|
|
13
17
|
},
|
|
14
18
|
{
|
|
15
19
|
name: 'BottomSheet',
|
|
16
|
-
screen: '
|
|
20
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.BottomSheet',
|
|
17
21
|
},
|
|
18
22
|
{
|
|
19
23
|
name: 'Buttons',
|
|
20
|
-
screen: '
|
|
24
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Buttons',
|
|
21
25
|
},
|
|
22
26
|
{
|
|
23
27
|
name: 'Grid',
|
|
24
|
-
screen: '
|
|
28
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Grid',
|
|
25
29
|
},
|
|
26
30
|
{
|
|
27
31
|
name: 'Icon',
|
|
28
|
-
screen: '
|
|
32
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Icons',
|
|
29
33
|
},
|
|
30
34
|
{
|
|
31
|
-
name: '
|
|
32
|
-
screen: '
|
|
35
|
+
name: 'ImageMultipleChoice',
|
|
36
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ImageMultipleChoice',
|
|
33
37
|
},
|
|
34
38
|
{
|
|
35
39
|
name: 'Inputs',
|
|
36
|
-
screen: '
|
|
40
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Inputs',
|
|
37
41
|
},
|
|
38
42
|
{
|
|
39
43
|
name: 'Media',
|
|
40
|
-
screen: '
|
|
44
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Media',
|
|
41
45
|
},
|
|
42
46
|
{
|
|
43
47
|
name: 'Modal',
|
|
44
|
-
screen: '
|
|
48
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Modal',
|
|
45
49
|
},
|
|
46
50
|
{
|
|
47
51
|
name: 'MultipleChoice',
|
|
48
|
-
screen: '
|
|
52
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.MultipleChoice',
|
|
49
53
|
},
|
|
50
54
|
{
|
|
51
55
|
name: 'ProductCard',
|
|
52
|
-
screen: '
|
|
56
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProductCard',
|
|
53
57
|
},
|
|
54
58
|
{
|
|
55
59
|
name: 'ProductCardGrid',
|
|
56
|
-
screen: '
|
|
60
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProductCardGrid',
|
|
57
61
|
},
|
|
58
62
|
{
|
|
59
63
|
name: 'ProductLink',
|
|
60
|
-
screen: '
|
|
64
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProductLink',
|
|
61
65
|
},
|
|
62
66
|
{
|
|
63
67
|
name: 'ProgressIndicator',
|
|
64
|
-
screen: '
|
|
68
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProgressIndicator',
|
|
65
69
|
},
|
|
66
70
|
{
|
|
67
71
|
name: 'Spinner',
|
|
68
|
-
screen: '
|
|
72
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Spinner',
|
|
69
73
|
},
|
|
70
74
|
{
|
|
71
75
|
name: 'Typography',
|
|
72
|
-
screen: '
|
|
76
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Typography',
|
|
73
77
|
},
|
|
74
78
|
{
|
|
75
79
|
name: 'QuantityPicker',
|
|
76
|
-
screen: '
|
|
80
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.QuantityPicker',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'VariantPicker',
|
|
84
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.VariantPicker',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Quiz Example',
|
|
88
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Quiz',
|
|
77
89
|
},
|
|
78
90
|
{
|
|
79
91
|
name: 'WebView',
|
|
80
|
-
screen: '
|
|
92
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.WebView',
|
|
81
93
|
},
|
|
82
94
|
]
|
|
@@ -21,6 +21,7 @@ export const ComponentListItem = ({
|
|
|
21
21
|
borderBottomColor="borders-regular"
|
|
22
22
|
borderBottomWidth={1}
|
|
23
23
|
>
|
|
24
|
+
{/* @ts-expect-error - when the stack param list contains too many routes... typescript throws random errors */}
|
|
24
25
|
<TouchableOpacity onPress={() => navigation.navigate(screen)}>
|
|
25
26
|
<Box
|
|
26
27
|
justifyContent="space-between"
|
|
@@ -39,8 +39,10 @@ export const FeaturedComponents = ({
|
|
|
39
39
|
componentLinks[
|
|
40
40
|
Math.floor(Math.random() * componentLinks.length)
|
|
41
41
|
]
|
|
42
|
+
// @ts-expect-error - when the stack param list contains too many routes... typescript throws random errors
|
|
42
43
|
navigation.navigate(randomComponentLink.screen)
|
|
43
44
|
} else {
|
|
45
|
+
// @ts-expect-error - when the stack param list contains too many routes... typescript throws random errors
|
|
44
46
|
navigation.navigate(item.screen)
|
|
45
47
|
}
|
|
46
48
|
}}
|
|
@@ -54,7 +56,7 @@ export const FeaturedComponents = ({
|
|
|
54
56
|
marginRight={isLast ? 's' : 'none'}
|
|
55
57
|
flexDirection="column"
|
|
56
58
|
>
|
|
57
|
-
{item.thumbnail && !isLast
|
|
59
|
+
{item.thumbnail && !isLast ? (
|
|
58
60
|
<Image
|
|
59
61
|
style={{
|
|
60
62
|
width: cardWidth,
|
|
@@ -62,7 +64,7 @@ export const FeaturedComponents = ({
|
|
|
62
64
|
}}
|
|
63
65
|
source={item.thumbnail}
|
|
64
66
|
/>
|
|
65
|
-
)}
|
|
67
|
+
) : null}
|
|
66
68
|
|
|
67
69
|
{isLast ? (
|
|
68
70
|
<Box
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ImageCarousel,
|
|
3
|
+
ImageCarouselProps,
|
|
4
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
5
|
+
import {useCallback, useEffect, useState} from 'react'
|
|
6
|
+
|
|
7
|
+
import {QuizSlide, QuizSlideProps} from './QuizSlide'
|
|
8
|
+
import {SlideLogic} from './types'
|
|
9
|
+
|
|
10
|
+
export interface ImageCarouselSlideProps extends SlideLogic<number[]> {
|
|
11
|
+
quizSlideProps: QuizSlideProps
|
|
12
|
+
imageCarouselProps: ImageCarouselProps
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const ImageCarouselSlide = ({
|
|
16
|
+
quizSlideProps,
|
|
17
|
+
imageCarouselProps,
|
|
18
|
+
determineCtaDisabled,
|
|
19
|
+
handleAnswerSelection,
|
|
20
|
+
}: ImageCarouselSlideProps) => {
|
|
21
|
+
const [selectedIndex, setSelectedIndex] = useState<number>()
|
|
22
|
+
|
|
23
|
+
const [isCtaDisabled, setCtaDisabled] = useState(
|
|
24
|
+
quizSlideProps.ctaDisabled ?? false
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
const handleOnChoiceSelected = useCallback((index: number) => {
|
|
28
|
+
setSelectedIndex(index)
|
|
29
|
+
}, [])
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (handleAnswerSelection === undefined) return
|
|
33
|
+
|
|
34
|
+
handleAnswerSelection(selectedIndex === undefined ? [] : [selectedIndex])
|
|
35
|
+
}, [handleAnswerSelection, selectedIndex])
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (determineCtaDisabled === undefined) return
|
|
39
|
+
|
|
40
|
+
setCtaDisabled(
|
|
41
|
+
determineCtaDisabled(selectedIndex === undefined ? [] : [selectedIndex])
|
|
42
|
+
)
|
|
43
|
+
}, [determineCtaDisabled, selectedIndex])
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<QuizSlide {...quizSlideProps} ctaDisabled={isCtaDisabled}>
|
|
47
|
+
<ImageCarousel
|
|
48
|
+
{...imageCarouselProps}
|
|
49
|
+
selectedIndexes={selectedIndex === undefined ? [] : [selectedIndex]}
|
|
50
|
+
onChoiceSelected={handleOnChoiceSelected}
|
|
51
|
+
/>
|
|
52
|
+
</QuizSlide>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Box,
|
|
3
|
+
MultipleChoice,
|
|
4
|
+
MultipleChoiceProps,
|
|
5
|
+
useMultiSelect,
|
|
6
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
7
|
+
import {useCallback, useEffect, useMemo, useState} from 'react'
|
|
8
|
+
|
|
9
|
+
import {QuizSlide, QuizSlideProps} from './QuizSlide'
|
|
10
|
+
import {SlideLogic} from './types'
|
|
11
|
+
|
|
12
|
+
export interface MultipleChoiceSlideProps extends SlideLogic<number[]> {
|
|
13
|
+
quizSlideProps: QuizSlideProps
|
|
14
|
+
multipleChoiceProps: MultipleChoiceProps
|
|
15
|
+
isMultiSelect?: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const MultipleChoiceSlide = ({
|
|
19
|
+
quizSlideProps,
|
|
20
|
+
multipleChoiceProps,
|
|
21
|
+
isMultiSelect,
|
|
22
|
+
determineCtaDisabled,
|
|
23
|
+
handleAnswerSelection,
|
|
24
|
+
}: MultipleChoiceSlideProps) => {
|
|
25
|
+
const [multiSelectedIndexes, toggleIndex] = useMultiSelect()
|
|
26
|
+
const [selectedIndex, setSelectedIndex] = useState<number>()
|
|
27
|
+
|
|
28
|
+
const [isCtaDisabled, setCtaDisabled] = useState(
|
|
29
|
+
quizSlideProps.ctaDisabled ?? false
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
const singleSelectIndex = useMemo(
|
|
33
|
+
() => (selectedIndex === undefined ? [] : [selectedIndex]),
|
|
34
|
+
[selectedIndex]
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
const selectedIndexes = useMemo(
|
|
38
|
+
() => (isMultiSelect ? multiSelectedIndexes : singleSelectIndex),
|
|
39
|
+
[isMultiSelect, multiSelectedIndexes, singleSelectIndex]
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
const handleOnChoiceSelected = useCallback(
|
|
43
|
+
(index: number) => {
|
|
44
|
+
if (isMultiSelect) {
|
|
45
|
+
toggleIndex(index)
|
|
46
|
+
} else {
|
|
47
|
+
setSelectedIndex(index)
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
[isMultiSelect, toggleIndex]
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (selectedIndexes.length < 1 || handleAnswerSelection === undefined)
|
|
55
|
+
return
|
|
56
|
+
|
|
57
|
+
handleAnswerSelection(selectedIndexes)
|
|
58
|
+
}, [handleAnswerSelection, selectedIndexes])
|
|
59
|
+
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (determineCtaDisabled === undefined) return
|
|
62
|
+
|
|
63
|
+
setCtaDisabled(determineCtaDisabled(selectedIndexes))
|
|
64
|
+
}, [determineCtaDisabled, selectedIndexes])
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<QuizSlide {...quizSlideProps} ctaDisabled={isCtaDisabled}>
|
|
68
|
+
<Box marginBottom="xl">
|
|
69
|
+
<MultipleChoice
|
|
70
|
+
{...multipleChoiceProps}
|
|
71
|
+
selectedIndexes={selectedIndexes}
|
|
72
|
+
onChoiceSelected={handleOnChoiceSelected}
|
|
73
|
+
/>
|
|
74
|
+
</Box>
|
|
75
|
+
</QuizSlide>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {createContext, useContext, useMemo} from 'react'
|
|
2
|
+
|
|
3
|
+
import {useQuizData} from '../../hooks/useQuizData'
|
|
4
|
+
import {useQuizState} from '../../hooks/useQuizState'
|
|
5
|
+
|
|
6
|
+
import {QuizData, QuizDataState, QuizResult, QuizResultEntry} from './types'
|
|
7
|
+
|
|
8
|
+
interface QuizContext {
|
|
9
|
+
recordQuestionResult: (id: string, answer: QuizResultEntry) => void
|
|
10
|
+
quizResult: QuizResult | undefined
|
|
11
|
+
quizDataState: QuizDataState | 'Loading'
|
|
12
|
+
quizData: QuizData | undefined
|
|
13
|
+
setUserName: (name: string) => void
|
|
14
|
+
userName: string | undefined
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const QuizContext = createContext<QuizContext>({
|
|
18
|
+
recordQuestionResult: () => undefined,
|
|
19
|
+
quizResult: undefined,
|
|
20
|
+
quizDataState: 'Loading',
|
|
21
|
+
quizData: undefined,
|
|
22
|
+
setUserName: (_name: string) => undefined,
|
|
23
|
+
userName: undefined,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export interface QuizProviderProps {
|
|
27
|
+
children: React.ReactElement
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const QuizContextProvider = ({children}: QuizProviderProps) => {
|
|
31
|
+
const {quizDataState, quizData} = useQuizData()
|
|
32
|
+
const {recordQuestionResult, quizResult, setUserName, userName} =
|
|
33
|
+
useQuizState()
|
|
34
|
+
|
|
35
|
+
const value = useMemo(
|
|
36
|
+
() => ({
|
|
37
|
+
recordQuestionResult,
|
|
38
|
+
quizResult,
|
|
39
|
+
quizDataState,
|
|
40
|
+
quizData,
|
|
41
|
+
setUserName,
|
|
42
|
+
userName,
|
|
43
|
+
}),
|
|
44
|
+
[
|
|
45
|
+
quizData,
|
|
46
|
+
quizDataState,
|
|
47
|
+
quizResult,
|
|
48
|
+
recordQuestionResult,
|
|
49
|
+
setUserName,
|
|
50
|
+
userName,
|
|
51
|
+
]
|
|
52
|
+
)
|
|
53
|
+
return <QuizContext.Provider value={value}>{children}</QuizContext.Provider>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const useQuizContext = () => {
|
|
57
|
+
const context = useContext(QuizContext)
|
|
58
|
+
|
|
59
|
+
if (!context) {
|
|
60
|
+
throw new Error('Make sure to wrap your component with QuizProvider')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return context
|
|
64
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Box, Button, Text, useTheme} from '@shopify/shop-minis-platform-sdk'
|
|
2
|
+
import {ReactNode} from 'react'
|
|
3
|
+
import {StyleSheet, useWindowDimensions} from 'react-native'
|
|
4
|
+
|
|
5
|
+
import {QuizSlideType} from './types'
|
|
6
|
+
|
|
7
|
+
export interface QuizSlideProps extends QuizSlideType {
|
|
8
|
+
children?: ReactNode
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const QuizSlide = (props: QuizSlideProps) => {
|
|
12
|
+
const {
|
|
13
|
+
mainText,
|
|
14
|
+
subText,
|
|
15
|
+
ctaText,
|
|
16
|
+
ctaOnPressHandler,
|
|
17
|
+
ctaDisabled,
|
|
18
|
+
children,
|
|
19
|
+
isTallSlide,
|
|
20
|
+
} = props
|
|
21
|
+
|
|
22
|
+
const theme = useTheme()
|
|
23
|
+
const gutter = theme.spacing.gutter
|
|
24
|
+
|
|
25
|
+
const {height: windowHeight, width} = useWindowDimensions()
|
|
26
|
+
|
|
27
|
+
const containerWidth = width - gutter * 2
|
|
28
|
+
const containerHeight = windowHeight - 255
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Box
|
|
32
|
+
height={containerHeight}
|
|
33
|
+
flex={1}
|
|
34
|
+
paddingTop={isTallSlide ? 'xxxl' : 'auto'}
|
|
35
|
+
position="relative"
|
|
36
|
+
justifyContent="center"
|
|
37
|
+
>
|
|
38
|
+
<Box marginBottom="m" width={containerWidth}>
|
|
39
|
+
<Text variant="subtitle">{mainText}</Text>
|
|
40
|
+
{subText ? (
|
|
41
|
+
<Text marginTop="xxs" variant="bodySmall">
|
|
42
|
+
{subText}
|
|
43
|
+
</Text>
|
|
44
|
+
) : null}
|
|
45
|
+
</Box>
|
|
46
|
+
<Box
|
|
47
|
+
marginBottom="xxxl"
|
|
48
|
+
paddingBottom={isTallSlide ? 'l' : 'none'}
|
|
49
|
+
paddingHorizontal="gutter"
|
|
50
|
+
>
|
|
51
|
+
{children}
|
|
52
|
+
</Box>
|
|
53
|
+
<Box style={styles.ctaContainer} paddingBottom="s" width={containerWidth}>
|
|
54
|
+
<Button
|
|
55
|
+
size="l"
|
|
56
|
+
style={{width: containerWidth}}
|
|
57
|
+
onPress={
|
|
58
|
+
ctaOnPressHandler
|
|
59
|
+
? ctaOnPressHandler
|
|
60
|
+
: () => console.log('Next Press')
|
|
61
|
+
}
|
|
62
|
+
variant="secondary"
|
|
63
|
+
text={ctaText ?? 'Next'}
|
|
64
|
+
disabled={ctaDisabled ?? false}
|
|
65
|
+
/>
|
|
66
|
+
</Box>
|
|
67
|
+
</Box>
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const styles = StyleSheet.create({
|
|
72
|
+
ctaContainer: {
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
position: 'absolute',
|
|
75
|
+
bottom: 0,
|
|
76
|
+
left: 0,
|
|
77
|
+
right: 0,
|
|
78
|
+
},
|
|
79
|
+
})
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {ImageCarouselSlide, ImageCarouselSlideProps} from './ImageCarouselSlide'
|
|
2
|
+
import {
|
|
3
|
+
MultipleChoiceSlide,
|
|
4
|
+
MultipleChoiceSlideProps,
|
|
5
|
+
} from './MultipleChoiceSlide'
|
|
6
|
+
import {QuizSlide} from './QuizSlide'
|
|
7
|
+
import {TextFieldSlide, TextFieldSlideProps} from './TextFieldSlide'
|
|
8
|
+
import {TextSlide} from './TextSlide'
|
|
9
|
+
import {QuizSlideScreenType, TextSlideProps} from './types'
|
|
10
|
+
|
|
11
|
+
export interface QuizSlideCommanderProps {
|
|
12
|
+
type: QuizSlideScreenType
|
|
13
|
+
props: TextSlideProps | MultipleChoiceSlideProps | ImageCarouselSlideProps
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const QuizSlideCommander = ({type, props}: QuizSlideCommanderProps) => {
|
|
17
|
+
switch (type) {
|
|
18
|
+
case 'TextSlide':
|
|
19
|
+
return <TextSlide {...(props as TextSlideProps)} />
|
|
20
|
+
case 'TextFieldSlide':
|
|
21
|
+
return <TextFieldSlide {...(props as TextFieldSlideProps)} />
|
|
22
|
+
case 'ImageCarouselSlide':
|
|
23
|
+
return <ImageCarouselSlide {...(props as ImageCarouselSlideProps)} />
|
|
24
|
+
case 'MultipleChoiceSlide':
|
|
25
|
+
return <MultipleChoiceSlide {...(props as MultipleChoiceSlideProps)} />
|
|
26
|
+
default:
|
|
27
|
+
return (
|
|
28
|
+
<QuizSlide
|
|
29
|
+
mainText="error"
|
|
30
|
+
subText={`slide type ${type} is unknown`}
|
|
31
|
+
ctaText="oh no!"
|
|
32
|
+
/>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
}
|