@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
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
const BASE_PRODUCT = {
|
|
2
|
+
__typename: 'Product',
|
|
3
|
+
id: 'gid://shopify/Product/7632803594495',
|
|
4
|
+
title: 'Canvas Shoes',
|
|
5
|
+
featuredImage: {
|
|
6
|
+
__typename: 'Image',
|
|
7
|
+
id: 'gid://shopify/ProductImage/37069008929023',
|
|
8
|
+
altText: null,
|
|
9
|
+
url: 'https://cdn.shopify.com/s/files/1/0621/0463/3599/products/mahabis-footwear-dv5AJQJ6ay8-unsplash.jpg?v=1651848310',
|
|
10
|
+
},
|
|
11
|
+
} as const
|
|
12
|
+
|
|
13
|
+
const BASE_VARIANT = {
|
|
14
|
+
__typename: 'ProductVariant',
|
|
15
|
+
image: {
|
|
16
|
+
__typename: 'Image',
|
|
17
|
+
id: 'gid://shopify/ProductImage/39889211949311',
|
|
18
|
+
altText: null,
|
|
19
|
+
url: 'https://cdn.shopify.com/s/files/1/0621/0463/3599/files/518DoMlGnHL._AC_SY695._SX._UX._SY._UY.jpg?v=1687945939',
|
|
20
|
+
},
|
|
21
|
+
price: {
|
|
22
|
+
__typename: 'Money',
|
|
23
|
+
amount: '899.0',
|
|
24
|
+
currencyCode: 'USD',
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function createVariantForOptions(
|
|
29
|
+
optionEntries: [optionName: string, optionValue: string][],
|
|
30
|
+
{currentlyNotInStock = false, availableForSale = true} = {}
|
|
31
|
+
) {
|
|
32
|
+
return {
|
|
33
|
+
...BASE_VARIANT,
|
|
34
|
+
id: `gid://shopify/ProductVariant/${optionEntries
|
|
35
|
+
.map(([, value]) => value)
|
|
36
|
+
.join('')}`,
|
|
37
|
+
selectedOptions: optionEntries.map(([name, value]) => ({
|
|
38
|
+
__typename: 'SelectedOption',
|
|
39
|
+
name,
|
|
40
|
+
value,
|
|
41
|
+
})),
|
|
42
|
+
title: optionEntries.map(([, value]) => value).join(' / '),
|
|
43
|
+
currentlyNotInStock,
|
|
44
|
+
availableForSale,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const BASE_VARIANTS_CONFIG: [string, string][][] = [
|
|
49
|
+
[
|
|
50
|
+
['Size', '43'],
|
|
51
|
+
['Color', 'Black'],
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
['Size', '43'],
|
|
55
|
+
['Color', 'Red'],
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
['Size', '43'],
|
|
59
|
+
['Color', 'White'],
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
['Size', '44'],
|
|
63
|
+
['Color', 'Black'],
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
['Size', '44'],
|
|
67
|
+
['Color', 'Red'],
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
['Size', '44'],
|
|
71
|
+
['Color', 'White'],
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
['Size', '45'],
|
|
75
|
+
['Color', 'Black'],
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
['Size', '45'],
|
|
79
|
+
['Color', 'Red'],
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
['Size', '45'],
|
|
83
|
+
['Color', 'White'],
|
|
84
|
+
],
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
const MOCKED_PRODUCT_1_DISABLED_VARIANTS = [
|
|
88
|
+
['43', 'Black'],
|
|
89
|
+
['44', 'White'],
|
|
90
|
+
['44', 'Red'],
|
|
91
|
+
['45', 'Red'],
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 2 options: size, color
|
|
96
|
+
*
|
|
97
|
+
* all variants available except:
|
|
98
|
+
* variant with size 45 and color white is not available for sale
|
|
99
|
+
*/
|
|
100
|
+
export const MOCKED_PRODUCT_1 = {
|
|
101
|
+
...BASE_PRODUCT,
|
|
102
|
+
options: [
|
|
103
|
+
{
|
|
104
|
+
__typename: 'ProductOption',
|
|
105
|
+
id: 'gid://shopify/ProductOption/9702957383935',
|
|
106
|
+
name: 'Size',
|
|
107
|
+
values: [
|
|
108
|
+
'40',
|
|
109
|
+
'43',
|
|
110
|
+
'44',
|
|
111
|
+
'45',
|
|
112
|
+
'46',
|
|
113
|
+
'47',
|
|
114
|
+
'48',
|
|
115
|
+
'49',
|
|
116
|
+
'50',
|
|
117
|
+
'51',
|
|
118
|
+
'52',
|
|
119
|
+
'53',
|
|
120
|
+
'54',
|
|
121
|
+
'55',
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
__typename: 'ProductOption',
|
|
126
|
+
id: 'gid://shopify/ProductOption/10355959628031',
|
|
127
|
+
name: 'Color',
|
|
128
|
+
values: ['Black', 'Red', 'White'],
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
variants: {
|
|
132
|
+
__typename: 'ProductVariantConnection',
|
|
133
|
+
nodes: [
|
|
134
|
+
// Standard options
|
|
135
|
+
...BASE_VARIANTS_CONFIG.map(options => createVariantForOptions(options)),
|
|
136
|
+
// Use many sizes for black
|
|
137
|
+
createVariantForOptions([
|
|
138
|
+
['Size', '55'],
|
|
139
|
+
['Color', 'Black'],
|
|
140
|
+
]),
|
|
141
|
+
createVariantForOptions([
|
|
142
|
+
['Size', '54'],
|
|
143
|
+
['Color', 'Black'],
|
|
144
|
+
]),
|
|
145
|
+
createVariantForOptions([
|
|
146
|
+
['Size', '53'],
|
|
147
|
+
['Color', 'Black'],
|
|
148
|
+
]),
|
|
149
|
+
createVariantForOptions([
|
|
150
|
+
['Size', '52'],
|
|
151
|
+
['Color', 'Black'],
|
|
152
|
+
]),
|
|
153
|
+
createVariantForOptions([
|
|
154
|
+
['Size', '51'],
|
|
155
|
+
['Color', 'Black'],
|
|
156
|
+
]),
|
|
157
|
+
createVariantForOptions([
|
|
158
|
+
['Size', '50'],
|
|
159
|
+
['Color', 'Black'],
|
|
160
|
+
]),
|
|
161
|
+
createVariantForOptions([
|
|
162
|
+
['Size', '49'],
|
|
163
|
+
['Color', 'Black'],
|
|
164
|
+
]),
|
|
165
|
+
createVariantForOptions([
|
|
166
|
+
['Size', '48'],
|
|
167
|
+
['Color', 'Black'],
|
|
168
|
+
]),
|
|
169
|
+
createVariantForOptions([
|
|
170
|
+
['Size', '47'],
|
|
171
|
+
['Color', 'Black'],
|
|
172
|
+
]),
|
|
173
|
+
createVariantForOptions([
|
|
174
|
+
['Size', '46'],
|
|
175
|
+
['Color', 'Black'],
|
|
176
|
+
]),
|
|
177
|
+
].map(variant => {
|
|
178
|
+
MOCKED_PRODUCT_1_DISABLED_VARIANTS.forEach(variantOptions =>
|
|
179
|
+
makeVariantNotAvailableForSale(variant, variantOptions)
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
return variant
|
|
183
|
+
}),
|
|
184
|
+
},
|
|
185
|
+
defaultVariant: createVariantForOptions([
|
|
186
|
+
['Size', '43'],
|
|
187
|
+
['Color', 'White'],
|
|
188
|
+
]),
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export const MOCKED_PRODUCT_1_DESCRIPTION = `Product with variants by size and color.\n* Sizes >45 only have Black color\n* Not available for sale: ${MOCKED_PRODUCT_1_DISABLED_VARIANTS.join(
|
|
192
|
+
' - '
|
|
193
|
+
)}`
|
|
194
|
+
|
|
195
|
+
const MOCKED_PRODUCT_2_DISABLED_VARIANTS = [
|
|
196
|
+
['45', 'Red', 'Warm'],
|
|
197
|
+
['44', 'White', 'Cool'],
|
|
198
|
+
['43', 'Black', 'Warm'],
|
|
199
|
+
['44', 'Red', 'Extra Warm'],
|
|
200
|
+
]
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* 3 options: size, color and warmth
|
|
204
|
+
*/
|
|
205
|
+
export const MOCKED_PRODUCT_2 = {
|
|
206
|
+
...BASE_PRODUCT,
|
|
207
|
+
options: [
|
|
208
|
+
{
|
|
209
|
+
__typename: 'ProductOption',
|
|
210
|
+
id: 'gid://shopify/ProductOption/9702957383935',
|
|
211
|
+
name: 'Size',
|
|
212
|
+
values: ['43', '44', '45'],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
__typename: 'ProductOption',
|
|
216
|
+
id: 'gid://shopify/ProductOption/10355959628031',
|
|
217
|
+
name: 'Color',
|
|
218
|
+
values: ['Black', 'Red', 'White'],
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
__typename: 'ProductOption',
|
|
222
|
+
id: 'gid://shopify/ProductOption/WARMTH',
|
|
223
|
+
name: 'Warmth',
|
|
224
|
+
values: ['Cool', 'Warm', 'Extra Warm'],
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
variants: {
|
|
228
|
+
__typename: 'ProductVariantConnection',
|
|
229
|
+
nodes: [
|
|
230
|
+
// Add warmth variants
|
|
231
|
+
...BASE_VARIANTS_CONFIG.map(options => [
|
|
232
|
+
...options,
|
|
233
|
+
['Warmth', 'Cool'],
|
|
234
|
+
]).map(options => createVariantForOptions(options as [string, string][])),
|
|
235
|
+
...BASE_VARIANTS_CONFIG.map(options => [
|
|
236
|
+
...options,
|
|
237
|
+
['Warmth', 'Warm'],
|
|
238
|
+
]).map(options => createVariantForOptions(options as [string, string][])),
|
|
239
|
+
...BASE_VARIANTS_CONFIG.map(options => [
|
|
240
|
+
...options,
|
|
241
|
+
['Warmth', 'Extra Warm'],
|
|
242
|
+
]).map(options => createVariantForOptions(options as [string, string][])),
|
|
243
|
+
].map(variant => {
|
|
244
|
+
// make some variants not available for sale
|
|
245
|
+
MOCKED_PRODUCT_2_DISABLED_VARIANTS.forEach(variantOptions =>
|
|
246
|
+
makeVariantNotAvailableForSale(variant, variantOptions)
|
|
247
|
+
)
|
|
248
|
+
return variant
|
|
249
|
+
}),
|
|
250
|
+
},
|
|
251
|
+
defaultVariant: createVariantForOptions([
|
|
252
|
+
['Size', '43'],
|
|
253
|
+
['Color', 'White'],
|
|
254
|
+
['Warmth', 'Cool'],
|
|
255
|
+
]),
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export const MOCKED_PRODUCT_2_DESCRIPTION = `Product with variants by size, color and warmth.\n* Not available for sale: ${MOCKED_PRODUCT_2_DISABLED_VARIANTS.join(
|
|
259
|
+
' - '
|
|
260
|
+
)}`
|
|
261
|
+
|
|
262
|
+
function makeVariantNotAvailableForSale(
|
|
263
|
+
variant: ReturnType<typeof createVariantForOptions>,
|
|
264
|
+
optionValues: string[]
|
|
265
|
+
) {
|
|
266
|
+
if (
|
|
267
|
+
optionValues.every(optionValue =>
|
|
268
|
+
variant.selectedOptions.find((opt: any) => opt.value === optionValue)
|
|
269
|
+
)
|
|
270
|
+
) {
|
|
271
|
+
variant.availableForSale = false
|
|
272
|
+
}
|
|
273
|
+
return variant
|
|
274
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {useEffect, useState} from 'react'
|
|
2
|
+
|
|
3
|
+
import {QuizData, QuizDataState} from '../components/quiz/types'
|
|
4
|
+
import {mockQuizData} from '../utils/mockQuizData'
|
|
5
|
+
|
|
6
|
+
const MOCK_FETCH_TIME = 2000
|
|
7
|
+
|
|
8
|
+
export const useQuizData = () => {
|
|
9
|
+
const [quizDataState, setQuizDataState] = useState<QuizDataState>('Loading')
|
|
10
|
+
const [quizData, setQuizData] = useState<QuizData>()
|
|
11
|
+
|
|
12
|
+
// Here is where you would fetch the quesitons from your server
|
|
13
|
+
// and process them into the shape you need
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const timer = setTimeout(() => {
|
|
16
|
+
setQuizData(mockQuizData)
|
|
17
|
+
setQuizDataState('Ready')
|
|
18
|
+
}, MOCK_FETCH_TIME)
|
|
19
|
+
return () => clearTimeout(timer)
|
|
20
|
+
}, [])
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
quizDataState,
|
|
24
|
+
quizData,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {useCallback, useState} from 'react'
|
|
2
|
+
|
|
3
|
+
import {QuizResult, QuizResultEntry} from '../components/quiz/types'
|
|
4
|
+
|
|
5
|
+
export const useQuizState = () => {
|
|
6
|
+
const [userName, setUserName] = useState('you')
|
|
7
|
+
|
|
8
|
+
const [quizResult, setQuizResult] = useState<QuizResult>()
|
|
9
|
+
|
|
10
|
+
const recordQuestionResult = useCallback(
|
|
11
|
+
(id: string, answer: QuizResultEntry) => {
|
|
12
|
+
const newQuizResult = {
|
|
13
|
+
...quizResult,
|
|
14
|
+
[id]: answer,
|
|
15
|
+
}
|
|
16
|
+
setQuizResult(newQuizResult)
|
|
17
|
+
},
|
|
18
|
+
[quizResult]
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
recordQuestionResult,
|
|
23
|
+
quizResult,
|
|
24
|
+
setUserName,
|
|
25
|
+
userName,
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {MiniAppConfig} from '@shopify/shop-minis-platform-sdk'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {__MINI_APP_NAME_PASCAL_CASE__Navigator} from './routes'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const config: MiniAppConfig = {
|
|
6
|
+
name: '__MINI_APP_NAME__',
|
|
7
|
+
Root: __MINI_APP_NAME_PASCAL_CASE__Navigator,
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export default
|
|
10
|
+
export default config
|
|
@@ -11,6 +11,7 @@ import {ProgressIndicatorScreen} from './screens/ProgressIndicatorScreen'
|
|
|
11
11
|
import {SpinnerScreen} from './screens/SpinnerScreen'
|
|
12
12
|
import {TypographyScreen} from './screens/TypographyScreen'
|
|
13
13
|
import {QuantityPickerScreen} from './screens/QuantityPickerScreen'
|
|
14
|
+
import {VariantPickerScreen} from './screens/VariantPickerScreen'
|
|
14
15
|
import {WebViewScreen} from './screens/WebViewScreen'
|
|
15
16
|
import {ModalScreen} from './screens/ModalScreen'
|
|
16
17
|
import {ProductLinkScreen} from './screens/ProductLinkScreen'
|
|
@@ -18,106 +19,129 @@ import {ProductCardScreen} from './screens/ProductCardScreen'
|
|
|
18
19
|
import {ProductCardGridScreen} from './screens/ProductCardGridScreen'
|
|
19
20
|
import {InputScreen} from './screens/InputScreen'
|
|
20
21
|
import {MultipleChoiceScreen} from './screens/MultipleChoiceScreen'
|
|
21
|
-
import {
|
|
22
|
+
import {QuizScreen} from './screens/QuizScreen'
|
|
23
|
+
import {ImageMultipleChoiceScreen} from './screens/ImageMultipleChoiceScreen'
|
|
24
|
+
import {AccordionScreen} from './screens/AccordionScreen'
|
|
25
|
+
import {ShopActionsScreen} from './screens/ShopActionsScreen'
|
|
22
26
|
|
|
23
27
|
const Stack = createNativeStackNavigator()
|
|
24
28
|
|
|
25
|
-
export const
|
|
29
|
+
export const __MINI_APP_NAME_PASCAL_CASE__Navigator = () => {
|
|
26
30
|
return (
|
|
27
31
|
<Stack.Navigator>
|
|
28
32
|
<Stack.Screen
|
|
29
|
-
name="
|
|
33
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Home"
|
|
30
34
|
component={HomeScreen}
|
|
31
35
|
options={{headerShown: false}}
|
|
32
36
|
/>
|
|
33
37
|
<Stack.Screen
|
|
34
|
-
name="
|
|
38
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Avatar"
|
|
35
39
|
component={AvatarScreen}
|
|
36
40
|
options={{headerShown: false}}
|
|
37
41
|
/>
|
|
38
42
|
<Stack.Screen
|
|
39
|
-
name="
|
|
43
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.BottomSheet"
|
|
40
44
|
component={BottomSheetScreen}
|
|
41
45
|
options={{headerShown: false}}
|
|
42
46
|
/>
|
|
43
47
|
<Stack.Screen
|
|
44
|
-
name="
|
|
48
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Buttons"
|
|
45
49
|
component={ButtonsScreen}
|
|
46
50
|
options={{headerShown: false}}
|
|
47
51
|
/>
|
|
48
52
|
<Stack.Screen
|
|
49
|
-
name="
|
|
53
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Grid"
|
|
50
54
|
component={GridScreen}
|
|
51
55
|
options={{headerShown: false}}
|
|
52
56
|
/>
|
|
53
57
|
<Stack.Screen
|
|
54
|
-
name="
|
|
58
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Icons"
|
|
55
59
|
component={IconsScreen}
|
|
56
60
|
options={{headerShown: false}}
|
|
57
61
|
/>
|
|
58
62
|
<Stack.Screen
|
|
59
|
-
name="
|
|
63
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Media"
|
|
60
64
|
component={MediaScreen}
|
|
61
65
|
options={{headerShown: false}}
|
|
62
66
|
/>
|
|
63
67
|
<Stack.Screen
|
|
64
|
-
name="
|
|
68
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ProgressIndicator"
|
|
65
69
|
component={ProgressIndicatorScreen}
|
|
66
70
|
options={{headerShown: false}}
|
|
67
71
|
/>
|
|
68
72
|
<Stack.Screen
|
|
69
|
-
name="
|
|
73
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Spinner"
|
|
70
74
|
component={SpinnerScreen}
|
|
71
75
|
options={{headerShown: false}}
|
|
72
76
|
/>
|
|
73
77
|
<Stack.Screen
|
|
74
|
-
name="
|
|
78
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Typography"
|
|
75
79
|
component={TypographyScreen}
|
|
76
80
|
options={{headerShown: false}}
|
|
77
81
|
/>
|
|
78
82
|
<Stack.Screen
|
|
79
|
-
name="
|
|
83
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.QuantityPicker"
|
|
80
84
|
component={QuantityPickerScreen}
|
|
81
85
|
options={{headerShown: false}}
|
|
82
86
|
/>
|
|
83
87
|
<Stack.Screen
|
|
84
|
-
name="
|
|
88
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.VariantPicker"
|
|
89
|
+
component={VariantPickerScreen}
|
|
90
|
+
options={{headerShown: false}}
|
|
91
|
+
/>
|
|
92
|
+
<Stack.Screen
|
|
93
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.WebView"
|
|
85
94
|
component={WebViewScreen}
|
|
86
95
|
options={{headerShown: false}}
|
|
87
96
|
/>
|
|
88
97
|
<Stack.Screen
|
|
89
|
-
name="
|
|
98
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Modal"
|
|
90
99
|
component={ModalScreen}
|
|
91
100
|
options={{headerShown: false}}
|
|
92
101
|
/>
|
|
93
102
|
<Stack.Screen
|
|
94
|
-
name="
|
|
103
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ProductLink"
|
|
95
104
|
component={ProductLinkScreen}
|
|
96
105
|
options={{headerShown: false}}
|
|
97
106
|
/>
|
|
98
107
|
<Stack.Screen
|
|
99
|
-
name="
|
|
108
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ProductCard"
|
|
100
109
|
component={ProductCardScreen}
|
|
101
110
|
options={{headerShown: false}}
|
|
102
111
|
/>
|
|
103
112
|
<Stack.Screen
|
|
104
|
-
name="
|
|
113
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ProductCardGrid"
|
|
105
114
|
component={ProductCardGridScreen}
|
|
106
115
|
options={{headerShown: false}}
|
|
107
116
|
/>
|
|
108
117
|
<Stack.Screen
|
|
109
|
-
name="
|
|
118
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Inputs"
|
|
110
119
|
component={InputScreen}
|
|
111
120
|
options={{headerShown: false}}
|
|
112
121
|
/>
|
|
113
122
|
<Stack.Screen
|
|
114
|
-
name="
|
|
123
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.MultipleChoice"
|
|
115
124
|
component={MultipleChoiceScreen}
|
|
116
125
|
options={{headerShown: false}}
|
|
117
126
|
/>
|
|
118
127
|
<Stack.Screen
|
|
119
|
-
name="
|
|
120
|
-
component={
|
|
128
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ImageMultipleChoice"
|
|
129
|
+
component={ImageMultipleChoiceScreen}
|
|
130
|
+
options={{headerShown: false}}
|
|
131
|
+
/>
|
|
132
|
+
<Stack.Screen
|
|
133
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Quiz"
|
|
134
|
+
component={QuizScreen}
|
|
135
|
+
options={{headerShown: false}}
|
|
136
|
+
/>
|
|
137
|
+
<Stack.Screen
|
|
138
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.Accordion"
|
|
139
|
+
component={AccordionScreen}
|
|
140
|
+
options={{headerShown: false}}
|
|
141
|
+
/>
|
|
142
|
+
<Stack.Screen
|
|
143
|
+
name="__MINI_APP_NAME_PASCAL_CASE__.ShopActions"
|
|
144
|
+
component={ShopActionsScreen}
|
|
121
145
|
options={{headerShown: false}}
|
|
122
146
|
/>
|
|
123
147
|
</Stack.Navigator>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Box,
|
|
3
|
+
Text,
|
|
4
|
+
AccordionProps,
|
|
5
|
+
Accordion,
|
|
6
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
7
|
+
import {SafeAreaView, ScrollView} from 'react-native'
|
|
8
|
+
|
|
9
|
+
import {Header} from '../components/Header'
|
|
10
|
+
|
|
11
|
+
const createAccordionEntries = (
|
|
12
|
+
numberOfEntries: number,
|
|
13
|
+
initiallyOpenIndexes?: number[]
|
|
14
|
+
): AccordionProps['items'] => {
|
|
15
|
+
return Array(numberOfEntries)
|
|
16
|
+
.fill(undefined)
|
|
17
|
+
.map((_, index) => ({
|
|
18
|
+
title: `Option ${
|
|
19
|
+
index + 1
|
|
20
|
+
} - Reiciendis repellendus blanditiis, nam soluta `,
|
|
21
|
+
body: (
|
|
22
|
+
<Text>
|
|
23
|
+
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Cum
|
|
24
|
+
architecto, quibusdam incidunt error atque id voluptas sit dolores
|
|
25
|
+
reprehenderit. Reiciendis repellendus blanditiis, nam soluta
|
|
26
|
+
distinctio est nostrum reprehenderit veritatis id END?
|
|
27
|
+
</Text>
|
|
28
|
+
),
|
|
29
|
+
isInitiallyOpen: initiallyOpenIndexes?.includes(index),
|
|
30
|
+
}))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const mockAccordionItems = createAccordionEntries(5)
|
|
34
|
+
const mockAccordionItemsWithInitialOpen = createAccordionEntries(5, [1, 2])
|
|
35
|
+
|
|
36
|
+
export const AccordionScreen = () => {
|
|
37
|
+
return (
|
|
38
|
+
<SafeAreaView style={{flex: 1}}>
|
|
39
|
+
<ScrollView style={{flex: 1}}>
|
|
40
|
+
<Header />
|
|
41
|
+
<Box padding="m">
|
|
42
|
+
<Box marginBottom="m">
|
|
43
|
+
<Text variant="headerBold">Accordion</Text>
|
|
44
|
+
</Box>
|
|
45
|
+
<Box marginBottom="xxl">
|
|
46
|
+
<Box marginBottom="s">
|
|
47
|
+
<Text variant="subtitle">All Closed</Text>
|
|
48
|
+
</Box>
|
|
49
|
+
<Box>
|
|
50
|
+
<Accordion items={mockAccordionItems} />
|
|
51
|
+
</Box>
|
|
52
|
+
</Box>
|
|
53
|
+
<Box marginBottom="xxl">
|
|
54
|
+
<Box marginBottom="s">
|
|
55
|
+
<Text variant="subtitle">Initial Open (2 & 3)</Text>
|
|
56
|
+
</Box>
|
|
57
|
+
<Box>
|
|
58
|
+
<Accordion items={mockAccordionItemsWithInitialOpen} />
|
|
59
|
+
</Box>
|
|
60
|
+
</Box>
|
|
61
|
+
<Box marginBottom="xxl">
|
|
62
|
+
<Box marginBottom="s">
|
|
63
|
+
<Text variant="subtitle">Toggle (alwaysOpen=false)</Text>
|
|
64
|
+
</Box>
|
|
65
|
+
<Box>
|
|
66
|
+
<Accordion items={mockAccordionItems} alwaysOpen={false} />
|
|
67
|
+
</Box>
|
|
68
|
+
</Box>
|
|
69
|
+
</Box>
|
|
70
|
+
</ScrollView>
|
|
71
|
+
</SafeAreaView>
|
|
72
|
+
)
|
|
73
|
+
}
|
|
@@ -302,11 +302,12 @@ const ExampleUseBottomSheet = ({
|
|
|
302
302
|
ref?.scrollTo({y: 0, animated: false})
|
|
303
303
|
}, [])
|
|
304
304
|
|
|
305
|
-
const {BottomSheet, scrollRef, onScroll, dismissBottomSheet} =
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
305
|
+
const {BottomSheet, scrollRef, onScroll, dismissBottomSheet} = useBottomSheet<
|
|
306
|
+
typeof Animated.ScrollView
|
|
307
|
+
>({
|
|
308
|
+
onDismiss,
|
|
309
|
+
scrollToTop,
|
|
310
|
+
})
|
|
310
311
|
|
|
311
312
|
return (
|
|
312
313
|
<BottomSheet>
|
|
@@ -11,17 +11,17 @@ const featuredComponents: ComponentLink[] = [
|
|
|
11
11
|
{
|
|
12
12
|
name: 'Modal',
|
|
13
13
|
thumbnail: require('../assets/Modal-component-thumbnail.png'),
|
|
14
|
-
screen: '
|
|
14
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.Modal',
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
name: 'ProductLink',
|
|
18
18
|
thumbnail: require('../assets/ProductLink-component-thumbnail.png'),
|
|
19
|
-
screen: '
|
|
19
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProductLink',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
name: 'ProductCard',
|
|
23
23
|
thumbnail: require('../assets/ProductCard-component-thumbnail.png'),
|
|
24
|
-
screen: '
|
|
24
|
+
screen: '__MINI_APP_NAME_PASCAL_CASE__.ProductCard',
|
|
25
25
|
},
|
|
26
26
|
]
|
|
27
27
|
|
|
@@ -64,6 +64,17 @@ export const HomeScreen = () => {
|
|
|
64
64
|
))}
|
|
65
65
|
</Box>
|
|
66
66
|
</Box>
|
|
67
|
+
<Box flex={1} p="gutter" backgroundColor="backgrounds-regular">
|
|
68
|
+
<Text variant="label" mb="s" mt="l">
|
|
69
|
+
Hooks
|
|
70
|
+
</Text>
|
|
71
|
+
<Box flexDirection="column">
|
|
72
|
+
<ComponentListItem
|
|
73
|
+
name="Shop actions"
|
|
74
|
+
screen="__MINI_APP_NAME_PASCAL_CASE__.ShopActions"
|
|
75
|
+
/>
|
|
76
|
+
</Box>
|
|
77
|
+
</Box>
|
|
67
78
|
</ScrollView>
|
|
68
79
|
</SafeAreaView>
|
|
69
80
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Box,
|
|
3
3
|
Button,
|
|
4
|
-
|
|
4
|
+
ImageMultipleChoice,
|
|
5
5
|
ImageChoiceType,
|
|
6
6
|
Text,
|
|
7
7
|
useMultiSelect,
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
} from '@shopify/shop-minis-platform-sdk'
|
|
10
10
|
import {useMemo, useState} from 'react'
|
|
11
11
|
import {SafeAreaView, ScrollView} from 'react-native'
|
|
12
|
-
import {Header} from '../components/Header'
|
|
13
12
|
|
|
14
13
|
const DEFAULT_IMAGE_SIZE = 160
|
|
15
14
|
const MOCK_IMAGE_INDEX_OFFSET = 20
|
|
@@ -62,7 +61,7 @@ const ControlSection = ({label, children}: ControlSectionProps) => (
|
|
|
62
61
|
{children}
|
|
63
62
|
</Box>
|
|
64
63
|
)
|
|
65
|
-
export const
|
|
64
|
+
export const ImageMultipleChoiceScreen = () => {
|
|
66
65
|
const [choiceText, setChoiceText] =
|
|
67
66
|
useState<keyof typeof textOptions>('short')
|
|
68
67
|
|
|
@@ -82,7 +81,6 @@ export const ImageCarouselScreen = () => {
|
|
|
82
81
|
|
|
83
82
|
return (
|
|
84
83
|
<SafeAreaView style={{flex: 1}}>
|
|
85
|
-
<Header />
|
|
86
84
|
<Box paddingVertical="xs">
|
|
87
85
|
<ControlSection label="Text Length">
|
|
88
86
|
<Box flexDirection="row">
|
|
@@ -120,7 +118,7 @@ export const ImageCarouselScreen = () => {
|
|
|
120
118
|
<Box marginVertical="s" marginHorizontal="gutter">
|
|
121
119
|
<Text variant="headerNormal">Single Select</Text>
|
|
122
120
|
</Box>
|
|
123
|
-
<
|
|
121
|
+
<ImageMultipleChoice
|
|
124
122
|
initialOffsetX={theme.spacing.gutter}
|
|
125
123
|
imageSize={imageSize}
|
|
126
124
|
choices={choices}
|
|
@@ -133,7 +131,7 @@ export const ImageCarouselScreen = () => {
|
|
|
133
131
|
<Box marginVertical="s" marginHorizontal="gutter">
|
|
134
132
|
<Text variant="headerNormal">Multi Select</Text>
|
|
135
133
|
</Box>
|
|
136
|
-
<
|
|
134
|
+
<ImageMultipleChoice
|
|
137
135
|
initialOffsetX={theme.spacing.gutter}
|
|
138
136
|
imageSize={imageSize}
|
|
139
137
|
choices={choices}
|