@sanity/cli 6.0.0-alpha.5 → 6.0.0-alpha.6
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/dist/actions/dataset/create.d.ts +49 -0
- package/dist/actions/dataset/create.js +48 -0
- package/dist/actions/dataset/create.js.map +1 -0
- package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
- package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
- package/dist/actions/debug/gatherDebugInfo.js +15 -21
- package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
- package/dist/actions/debug/types.d.ts +0 -2
- package/dist/actions/debug/types.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +13 -0
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -1
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
- package/dist/actions/manifest/extractAppManifest.js +51 -0
- package/dist/actions/manifest/extractAppManifest.js.map +1 -0
- package/dist/actions/manifest/extractManifest.js +1 -1
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/types.d.ts +6 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/media/importAspects.js +2 -1
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
- package/dist/commands/dataset/create.d.ts +0 -2
- package/dist/commands/dataset/create.js +8 -54
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/debug.js +5 -9
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +358 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manifest/extract.js +7 -8
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +9 -0
- package/dist/prompts/init/promptForTypescript.d.ts +2 -0
- package/dist/prompts/init/promptForTypescript.js +15 -0
- package/dist/prompts/init/promptForTypescript.js.map +1 -0
- package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
- package/dist/prompts/promptForDatasetAclMode.js +27 -0
- package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
- package/dist/prompts/promptForDatasetName.d.ts +1 -1
- package/dist/prompts/promptForDatasetName.js +4 -1
- package/dist/prompts/promptForDatasetName.js.map +1 -1
- package/dist/services/organizations.d.ts +3 -1
- package/dist/services/organizations.js +2 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/user.d.ts +5 -0
- package/dist/services/user.js +12 -1
- package/dist/services/user.js.map +1 -1
- package/dist/services/userApplications.d.ts +3 -1
- package/dist/services/userApplications.js +5 -1
- package/dist/services/userApplications.js.map +1 -1
- package/oclif.manifest.json +113 -113
- package/package.json +16 -12
- package/templates/app-quickstart/src/App.css +20 -0
- package/templates/app-quickstart/src/App.tsx +25 -0
- package/templates/app-quickstart/src/ExampleComponent.css +90 -0
- package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
- package/templates/app-sanity-ui/src/App.tsx +34 -0
- package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
- package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
- package/templates/blog/README.md +11 -0
- package/templates/blog/schemaTypes/author.js +50 -0
- package/templates/blog/schemaTypes/blockContent.js +67 -0
- package/templates/blog/schemaTypes/category.js +19 -0
- package/templates/blog/schemaTypes/index.js +6 -0
- package/templates/blog/schemaTypes/post.js +65 -0
- package/templates/blog/static/.gitkeep +1 -0
- package/templates/clean/README.md +9 -0
- package/templates/clean/schemaTypes/index.js +1 -0
- package/templates/clean/static/.gitkeep +1 -0
- package/templates/ecommerce/README.md +11 -0
- package/templates/ecommerce/plugins/.gitkeep +1 -0
- package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
- package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
- package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
- package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
- package/templates/ecommerce/schemaTypes/category.js +39 -0
- package/templates/ecommerce/schemaTypes/index.js +23 -0
- package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
- package/templates/ecommerce/schemaTypes/product.js +83 -0
- package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
- package/templates/ecommerce/schemaTypes/vendor.js +39 -0
- package/templates/ecommerce/static/.gitkeep +1 -0
- package/templates/get-started/README.md +9 -0
- package/templates/get-started/plugins/.gitkeep +1 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
- package/templates/get-started/schemaTypes/index.ts +1 -0
- package/templates/get-started/static/.gitkeep +1 -0
- package/templates/moviedb/README.md +10 -0
- package/templates/moviedb/schemaTypes/blockContent.js +67 -0
- package/templates/moviedb/schemaTypes/castMember.js +37 -0
- package/templates/moviedb/schemaTypes/crewMember.js +52 -0
- package/templates/moviedb/schemaTypes/index.js +22 -0
- package/templates/moviedb/schemaTypes/movie.js +85 -0
- package/templates/moviedb/schemaTypes/person.js +37 -0
- package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
- package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
- package/templates/moviedb/schemaTypes/screening.js +81 -0
- package/templates/moviedb/static/.gitkeep +1 -0
- package/templates/quickstart/README.md +9 -0
- package/templates/quickstart/schemaTypes/index.js +1 -0
- package/templates/quickstart/static/.gitkeep +1 -0
- package/templates/shared/gitignore.txt +29 -0
- package/templates/shared/tsconfig.json +17 -0
- package/templates/shopify/README.md +85 -0
- package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
- package/templates/shopify/components/icons/Shopify.tsx +20 -0
- package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
- package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
- package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
- package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
- package/templates/shopify/components/media/ColorTheme.tsx +38 -0
- package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
- package/templates/shopify/components/studio/Navbar.tsx +29 -0
- package/templates/shopify/constants.ts +61 -0
- package/templates/shopify/docs/features.md +158 -0
- package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
- package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
- package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
- package/templates/shopify/schemaTypes/documents/page.ts +70 -0
- package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
- package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
- package/templates/shopify/schemaTypes/index.ts +108 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
- package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
- package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
- package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
- package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
- package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
- package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
- package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
- package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
- package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
- package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
- package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
- package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
- package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
- package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
- package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
- package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
- package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
- package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
- package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
- package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
- package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
- package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
- package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
- package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
- package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
- package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
- package/templates/shopify/static/.gitkeep +1 -0
- package/templates/shopify/structure/collectionStructure.ts +9 -0
- package/templates/shopify/structure/colorThemeStructure.ts +9 -0
- package/templates/shopify/structure/homeStructure.ts +9 -0
- package/templates/shopify/structure/index.ts +57 -0
- package/templates/shopify/structure/pageStructure.ts +11 -0
- package/templates/shopify/structure/productStructure.ts +51 -0
- package/templates/shopify/structure/settingStructure.ts +9 -0
- package/templates/shopify/utils/blocksToText.ts +20 -0
- package/templates/shopify/utils/defineStructure.ts +11 -0
- package/templates/shopify/utils/getPriceRange.ts +24 -0
- package/templates/shopify/utils/shopifyUrls.ts +22 -0
- package/templates/shopify/utils/validateSlug.ts +18 -0
- package/templates/shopify-online-storefront/README.md +54 -0
- package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
- package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
- package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
- package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
- package/templates/shopify-online-storefront/constants.ts +18 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
- package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
- package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
- package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
- package/templates/shopify-online-storefront/structure/index.ts +37 -0
- package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
- package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
- package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
- package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
- package/dist/actions/build/__tests__/buildApp.test.js +0 -367
- package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
- package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
- package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
- package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
- package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
- package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
- package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
- package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
- package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
- package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
- package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
- package/dist/actions/media/__tests__/importMedia.test.js +0 -182
- package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
- package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
- package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
- package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
- package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
- package/dist/commands/__tests__/blueprints.test.js +0 -54
- package/dist/commands/__tests__/blueprints.test.js.map +0 -1
- package/dist/commands/__tests__/build.test.js +0 -132
- package/dist/commands/__tests__/build.test.js.map +0 -1
- package/dist/commands/__tests__/codemod.test.js +0 -271
- package/dist/commands/__tests__/codemod.test.js.map +0 -1
- package/dist/commands/__tests__/debug.test.js +0 -590
- package/dist/commands/__tests__/debug.test.js.map +0 -1
- package/dist/commands/__tests__/deploy.test.js +0 -1945
- package/dist/commands/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/__tests__/dev.test.js +0 -453
- package/dist/commands/__tests__/dev.test.js.map +0 -1
- package/dist/commands/__tests__/exec.test.js +0 -207
- package/dist/commands/__tests__/exec.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
- package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.plan.test.js +0 -279
- package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.setup.test.js +0 -335
- package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
- package/dist/commands/__tests__/install.test.js +0 -282
- package/dist/commands/__tests__/install.test.js.map +0 -1
- package/dist/commands/__tests__/learn.test.js +0 -29
- package/dist/commands/__tests__/learn.test.js.map +0 -1
- package/dist/commands/__tests__/logout.test.js +0 -91
- package/dist/commands/__tests__/logout.test.js.map +0 -1
- package/dist/commands/__tests__/manage.test.js +0 -110
- package/dist/commands/__tests__/manage.test.js.map +0 -1
- package/dist/commands/__tests__/migration.test.js +0 -119
- package/dist/commands/__tests__/migration.test.js.map +0 -1
- package/dist/commands/__tests__/preview.test.js +0 -261
- package/dist/commands/__tests__/preview.test.js.map +0 -1
- package/dist/commands/__tests__/start.test.js +0 -253
- package/dist/commands/__tests__/start.test.js.map +0 -1
- package/dist/commands/__tests__/undeploy.test.js +0 -382
- package/dist/commands/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/__tests__/versions.test.js +0 -142
- package/dist/commands/__tests__/versions.test.js.map +0 -1
- package/dist/commands/backup/__tests__/disable.test.js +0 -204
- package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/download.test.js +0 -768
- package/dist/commands/backup/__tests__/download.test.js.map +0 -1
- package/dist/commands/backup/__tests__/enable.test.js +0 -286
- package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/list.test.js +0 -330
- package/dist/commands/backup/__tests__/list.test.js.map +0 -1
- package/dist/commands/cors/__tests__/add.test.js +0 -376
- package/dist/commands/cors/__tests__/add.test.js.map +0 -1
- package/dist/commands/cors/__tests__/delete.test.js +0 -308
- package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
- package/dist/commands/cors/__tests__/list.test.js +0 -241
- package/dist/commands/cors/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/copy.test.js +0 -628
- package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/create.test.js +0 -342
- package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/delete.test.js +0 -231
- package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/export.test.js +0 -601
- package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/import.test.js +0 -53
- package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/list.test.js +0 -216
- package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
- package/dist/commands/docs/__tests__/browse.test.js +0 -29
- package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
- package/dist/commands/docs/__tests__/read.test.js +0 -78
- package/dist/commands/docs/__tests__/read.test.js.map +0 -1
- package/dist/commands/docs/__tests__/search.test.js +0 -255
- package/dist/commands/docs/__tests__/search.test.js.map +0 -1
- package/dist/commands/documents/__tests__/create.test.js +0 -1030
- package/dist/commands/documents/__tests__/create.test.js.map +0 -1
- package/dist/commands/documents/__tests__/delete.test.js +0 -300
- package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
- package/dist/commands/documents/__tests__/get.test.js +0 -182
- package/dist/commands/documents/__tests__/get.test.js.map +0 -1
- package/dist/commands/documents/__tests__/query.test.js +0 -300
- package/dist/commands/documents/__tests__/query.test.js.map +0 -1
- package/dist/commands/documents/__tests__/validate.test.js +0 -249
- package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/list.test.js +0 -240
- package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/hook/__tests__/attempt.test.js +0 -275
- package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
- package/dist/commands/hook/__tests__/create.test.js +0 -119
- package/dist/commands/hook/__tests__/create.test.js.map +0 -1
- package/dist/commands/hook/__tests__/delete.test.js +0 -233
- package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
- package/dist/commands/hook/__tests__/list.test.js +0 -145
- package/dist/commands/hook/__tests__/list.test.js.map +0 -1
- package/dist/commands/hook/__tests__/logs.test.js +0 -798
- package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
- package/dist/commands/manifest/__tests__/extract.test.js +0 -132
- package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
- package/dist/commands/mcp/__tests__/configure.test.js +0 -397
- package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
- package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/export.test.js +0 -697
- package/dist/commands/media/__tests__/export.test.js.map +0 -1
- package/dist/commands/media/__tests__/import.test.js +0 -347
- package/dist/commands/media/__tests__/import.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/get.test.js +0 -149
- package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/list.test.js +0 -113
- package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
- package/dist/commands/projects/__tests__/list.test.js +0 -154
- package/dist/commands/projects/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/delete.test.js +0 -454
- package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
- package/dist/commands/schema/__tests__/deploy.test.js +0 -348
- package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/schema/__tests__/extract.test.js +0 -121
- package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
- package/dist/commands/schema/__tests__/list.test.js +0 -399
- package/dist/commands/schema/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/validate.test.js +0 -121
- package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
- package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
- package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/status.test.js +0 -155
- package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/add.test.js +0 -435
- package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/delete.test.js +0 -405
- package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/list.test.js +0 -395
- package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
- package/dist/commands/users/__tests__/invite.test.js +0 -362
- package/dist/commands/users/__tests__/invite.test.js.map +0 -1
- package/dist/commands/users/__tests__/list.test.js +0 -407
- package/dist/commands/users/__tests__/list.test.js.map +0 -1
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
- package/dist/services/__tests__/datasetAliases.test.js +0 -131
- package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
- package/dist/services/__tests__/datasets.test.js +0 -436
- package/dist/services/__tests__/datasets.test.js.map +0 -1
- package/dist/services/__tests__/graphql.test.js +0 -43
- package/dist/services/__tests__/graphql.test.js.map +0 -1
- package/dist/services/__tests__/mediaLibraries.test.js +0 -88
- package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
- package/dist/services/__tests__/projects.test.js +0 -41
- package/dist/services/__tests__/projects.test.js.map +0 -1
- package/dist/services/__tests__/userApplications.test.js +0 -113
- package/dist/services/__tests__/userApplications.test.js.map +0 -1
- package/dist/util/__tests__/appId.test.js +0 -31
- package/dist/util/__tests__/appId.test.js.map +0 -1
- package/dist/util/__tests__/cliClient.test.js +0 -184
- package/dist/util/__tests__/cliClient.test.js.map +0 -1
- package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
- package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
- package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
- package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
- package/dist/util/__tests__/getCliVersion.test.js +0 -28
- package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
- package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
- package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
- package/dist/util/__tests__/getWorkspace.test.js +0 -37
- package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
- package/dist/util/__tests__/readPackageJson.test.js +0 -69
- package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
- package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
- package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
- package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
- package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
- package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
- package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {DEFAULT_CURRENCY_CODE} from '../constants'
|
|
2
|
+
|
|
3
|
+
type PriceObject = {
|
|
4
|
+
minVariantPrice: number
|
|
5
|
+
maxVariantPrice: number
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const formatNumber = (val: number) => {
|
|
9
|
+
return new Intl.NumberFormat('en', {
|
|
10
|
+
currency: DEFAULT_CURRENCY_CODE,
|
|
11
|
+
style: 'currency',
|
|
12
|
+
}).format(val)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const getPriceRange = (price: PriceObject) => {
|
|
16
|
+
if (!price || typeof price?.minVariantPrice === 'undefined') {
|
|
17
|
+
return 'No price found'
|
|
18
|
+
}
|
|
19
|
+
if (price.maxVariantPrice && price.minVariantPrice !== price.maxVariantPrice) {
|
|
20
|
+
return `${formatNumber(price.minVariantPrice)} – ${formatNumber(price.maxVariantPrice)}`
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return formatNumber(price.minVariantPrice)
|
|
24
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {SHOPIFY_STORE_ID} from '../constants'
|
|
2
|
+
|
|
3
|
+
export const collectionUrl = (collectionId: number) => {
|
|
4
|
+
if (!SHOPIFY_STORE_ID) {
|
|
5
|
+
return null
|
|
6
|
+
}
|
|
7
|
+
return `https://admin.shopify.com/store/${SHOPIFY_STORE_ID}/collections/${collectionId}`
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const productUrl = (productId: number) => {
|
|
11
|
+
if (!SHOPIFY_STORE_ID) {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
return `https://admin.shopify.com/store/${SHOPIFY_STORE_ID}/products/${productId}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const productVariantUrl = (productId: number, productVariantId: number) => {
|
|
18
|
+
if (!SHOPIFY_STORE_ID) {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
return `https://admin.shopify.com/store/${SHOPIFY_STORE_ID}/products/${productId}/variants/${productVariantId}`
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {SlugRule} from 'sanity'
|
|
2
|
+
|
|
3
|
+
const MAX_LENGTH = 96
|
|
4
|
+
|
|
5
|
+
export const validateSlug = (Rule: SlugRule) => {
|
|
6
|
+
return Rule.required().custom((value) => {
|
|
7
|
+
const currentSlug = value && value.current
|
|
8
|
+
if (!currentSlug) {
|
|
9
|
+
return true
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (currentSlug.length >= MAX_LENGTH) {
|
|
13
|
+
return `Must be less than ${MAX_LENGTH} characters`
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return true
|
|
17
|
+
})
|
|
18
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Sanity Studio for Shopify Storefronts
|
|
2
|
+
|
|
3
|
+
## About
|
|
4
|
+
|
|
5
|
+
This Sanity Studio is configured for Shopify storefronts that use the official [Sanity Connect app](https://apps.shopify.com/sanity-connect) to sync content from Sanity to Shopify.
|
|
6
|
+
|
|
7
|
+
It contains examples of customizing your [structure](https://www.sanity.io/docs/structure-builder), [document actions](https://www.sanity.io/docs/document-actions) and [input components](https://www.sanity.io/docs/custom-input-widgets).
|
|
8
|
+
|
|
9
|
+
If you're building a headless storefront, you may want to check out our [starter Studio for headless storefronts](https://github.com/sanity-io/sanity-shopify-studio), which has a richer content model.
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
This studio comes preconfigured with Shopify-friendly content schema types and a whole host of customizations to make managing Shopify data in your Sanity studio easier. It also comes bundled with our [Shopify asset plugin](https://github.com/sanity-io/sanity-plugin-shopify-assets), which enables you to choose assets from your Shopify store in your Sanity Studio.
|
|
14
|
+
|
|
15
|
+
Once you have sync'd content to your Shopify store, you can follow our documentation on how to [display content in Liquid](https://www.sanity.io/docs/displaying-sanity-content-in-liquid).
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
If you're reading this on GitHub, chances are you haven't initialized the studio locally yet. To do so, run the following shell command:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
# run a one-off initializing script:
|
|
23
|
+
npx @sanity/cli init --template shopify-online-storefront
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Make sure to run the tagged release! (`@sanity/cli`)
|
|
27
|
+
|
|
28
|
+
You'll need install [Sanity Connect](https://apps.shopify.com/sanity-connect) to your Shopify store, and [enable the sync to your Shopify store](https://www.sanity.io/docs/sanity-connect-for-shopify#1bcb10c66c21). to update `SHOPIFY_STORE_ID` in `constants.ts` to reflect your Shopify domain.
|
|
29
|
+
|
|
30
|
+
## Local Development
|
|
31
|
+
|
|
32
|
+
### Starting development server
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
npm run dev
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Deploying the studio
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
npm run deploy
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Upgrading Sanity Studio
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
npm run upgrade
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
If you have the [Sanity CLI](https://www.sanity.io/docs/cli) installed, you can also run this with `sanity start|deploy|upgrade`. It comes with additional useful functionality.
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
This repository is published under the [MIT](license) license.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
const ShopifyIcon = () => {
|
|
4
|
+
return (
|
|
5
|
+
<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
6
|
+
<path
|
|
7
|
+
d="M15.3269 3.85113C15.3132 3.75015 15.2258 3.69411 15.1531 3.688C15.081 3.6819 13.6693 3.66026 13.6693 3.66026C13.6693 3.66026 12.4887 2.50392 12.3722 2.38628C12.2555 2.26865 12.0277 2.30417 11.9392 2.3308C11.9381 2.33135 11.7175 2.40016 11.3461 2.51612C11.2839 2.31304 11.1927 2.06335 11.0622 1.81255C10.6419 1.00356 10.0263 0.575752 9.2825 0.574642C9.28142 0.574642 9.28092 0.574642 9.27975 0.574642C9.22808 0.574642 9.17692 0.579636 9.12517 0.584074C9.10317 0.557441 9.08117 0.531362 9.05808 0.505838C8.73408 0.156272 8.31869 -0.0140727 7.82082 0.000908712C6.86027 0.0286521 5.90357 0.72834 5.12787 1.97124C4.58212 2.84572 4.16677 3.94435 4.04904 4.79497C2.94601 5.13953 2.17471 5.38035 2.15766 5.3859C1.60091 5.56235 1.58331 5.57955 1.51069 6.10889C1.45677 6.50895 0 17.8704 0 17.8704L12.2082 20L17.4994 18.6733C17.4994 18.6733 15.3407 3.95212 15.3269 3.85113ZM10.7349 2.707C10.4537 2.79467 10.1342 2.89454 9.78758 3.00274C9.78042 2.51224 9.72267 1.82975 9.496 1.23992C10.2249 1.3792 10.5836 2.21095 10.7349 2.707ZM9.14883 3.20249C8.509 3.40225 7.81091 3.62031 7.11058 3.83892C7.30753 3.0782 7.68107 2.32081 8.13989 1.8242C8.31044 1.63943 8.54917 1.43358 8.832 1.31594C9.09767 1.87525 9.15542 2.66705 9.14883 3.20249ZM7.84007 0.645665C8.06562 0.640671 8.25542 0.690609 8.41775 0.798253C8.15805 0.9342 7.90718 1.12951 7.67172 1.38419C7.06162 2.04448 6.594 3.06932 6.4075 4.0581C5.826 4.23954 5.25715 4.41766 4.73342 4.58078C5.06405 3.02438 6.35743 0.688944 7.84007 0.645665Z"
|
|
8
|
+
fill="#95BF47"
|
|
9
|
+
/>
|
|
10
|
+
<path
|
|
11
|
+
d="M9.276 6.43238L8.66142 8.75117C8.66142 8.75117 7.97598 8.43658 7.16342 8.48817C5.97181 8.56417 5.95916 9.32217 5.97126 9.51242C6.03618 10.5495 8.74125 10.7759 8.89308 13.2051C9.01242 15.1161 7.88796 16.4233 6.26779 16.5265C4.32303 16.6502 3.25246 15.4933 3.25246 15.4933L3.66452 13.7256C3.66452 13.7256 4.74224 14.5457 5.60487 14.4907C6.16821 14.4547 6.36957 13.9924 6.34921 13.6657C6.26448 12.3128 4.06172 12.3927 3.92253 10.17C3.80536 8.29951 5.02337 6.40408 7.71081 6.23318C8.74617 6.16604 9.276 6.43238 9.276 6.43238Z"
|
|
12
|
+
fill="white"
|
|
13
|
+
/>
|
|
14
|
+
<path
|
|
15
|
+
d="M15.1536 3.68853C15.0815 3.68243 13.6698 3.66078 13.6698 3.66078C13.6698 3.66078 12.4893 2.50444 12.3726 2.38681C12.3292 2.34298 12.2703 2.32023 12.2087 2.31079L12.2093 19.9994L17.4999 18.6733C17.4999 18.6733 15.3412 3.95264 15.3274 3.85166C15.3137 3.75068 15.2257 3.69463 15.1536 3.68853Z"
|
|
16
|
+
fill="#5E8E3E"
|
|
17
|
+
/>
|
|
18
|
+
</svg>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default ShopifyIcon
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {WarningOutlineIcon} from '@sanity/icons'
|
|
3
|
+
import {Box, Card, Flex, Stack, Text} from '@sanity/ui'
|
|
4
|
+
|
|
5
|
+
export default function CollectionHiddenInput() {
|
|
6
|
+
return (
|
|
7
|
+
<Card padding={4} radius={2} shadow={1} tone="critical">
|
|
8
|
+
<Flex align="flex-start">
|
|
9
|
+
<Text>
|
|
10
|
+
<WarningOutlineIcon />
|
|
11
|
+
</Text>
|
|
12
|
+
<Box flex={1} marginLeft={3}>
|
|
13
|
+
<Box>
|
|
14
|
+
<Text weight="semibold">This collection is hidden</Text>
|
|
15
|
+
</Box>
|
|
16
|
+
<Stack marginTop={4} space={2}>
|
|
17
|
+
<Text size={1}>It has been deleted from Shopify.</Text>
|
|
18
|
+
</Stack>
|
|
19
|
+
</Box>
|
|
20
|
+
</Flex>
|
|
21
|
+
</Card>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type SanityDocument,
|
|
3
|
+
type StringInputProps,
|
|
4
|
+
type StringSchemaType,
|
|
5
|
+
useFormValue,
|
|
6
|
+
} from 'sanity'
|
|
7
|
+
import get from 'lodash.get'
|
|
8
|
+
|
|
9
|
+
type Props = StringInputProps<StringSchemaType & {options?: {field?: string}}>
|
|
10
|
+
|
|
11
|
+
const PlaceholderStringInput = (props: Props) => {
|
|
12
|
+
const {schemaType} = props
|
|
13
|
+
|
|
14
|
+
const path = schemaType?.options?.field
|
|
15
|
+
const doc = useFormValue([]) as SanityDocument
|
|
16
|
+
|
|
17
|
+
const proxyValue = path ? (get(doc, path) as string) : ''
|
|
18
|
+
|
|
19
|
+
return props.renderDefault({
|
|
20
|
+
...props,
|
|
21
|
+
elementProps: {placeholder: proxyValue, ...props.elementProps},
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default PlaceholderStringInput
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {WarningOutlineIcon} from '@sanity/icons'
|
|
3
|
+
import {type StringFieldProps, useFormValue} from 'sanity'
|
|
4
|
+
import {Box, Card, Flex, Stack, Text} from '@sanity/ui'
|
|
5
|
+
|
|
6
|
+
import {productUrl} from '../../utils/shopifyUrls'
|
|
7
|
+
|
|
8
|
+
type Store = {
|
|
9
|
+
id: number
|
|
10
|
+
status: string
|
|
11
|
+
isDeleted: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default function ProductHiddenInput(props: StringFieldProps) {
|
|
15
|
+
const store: Store = useFormValue(['store']) as Store
|
|
16
|
+
|
|
17
|
+
if (!store) {
|
|
18
|
+
return <></>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const shopifyProductUrl = productUrl(store?.id)
|
|
22
|
+
const isActive = store?.status === 'active'
|
|
23
|
+
const isDeleted = store?.isDeleted
|
|
24
|
+
|
|
25
|
+
let message
|
|
26
|
+
if (!isActive) {
|
|
27
|
+
message = (
|
|
28
|
+
<>
|
|
29
|
+
It does not have an <code>active</code> status in Shopify.
|
|
30
|
+
</>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
if (isDeleted) {
|
|
34
|
+
message = 'It has been deleted from Shopify.'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Card padding={4} radius={2} shadow={1} tone="critical">
|
|
39
|
+
<Flex align="flex-start">
|
|
40
|
+
<Text size={2}>
|
|
41
|
+
<WarningOutlineIcon />
|
|
42
|
+
</Text>
|
|
43
|
+
<Box flex={1} marginLeft={3}>
|
|
44
|
+
<Box>
|
|
45
|
+
<Text size={2} weight="semibold">
|
|
46
|
+
This product is hidden
|
|
47
|
+
</Text>
|
|
48
|
+
</Box>
|
|
49
|
+
<Stack marginTop={4} space={2}>
|
|
50
|
+
<Text size={1}>{message}</Text>
|
|
51
|
+
</Stack>
|
|
52
|
+
{!isDeleted && shopifyProductUrl && (
|
|
53
|
+
<Box marginTop={4}>
|
|
54
|
+
<Text size={1}>
|
|
55
|
+
→{' '}
|
|
56
|
+
<a href={shopifyProductUrl} target="_blank" rel="noreferrer">
|
|
57
|
+
View this product on Shopify
|
|
58
|
+
</a>
|
|
59
|
+
</Text>
|
|
60
|
+
</Box>
|
|
61
|
+
)}
|
|
62
|
+
</Box>
|
|
63
|
+
</Flex>
|
|
64
|
+
</Card>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {WarningOutlineIcon} from '@sanity/icons'
|
|
3
|
+
import {Box, Card, Flex, Stack, Text} from '@sanity/ui'
|
|
4
|
+
|
|
5
|
+
export default function ProductVariantHiddenInput() {
|
|
6
|
+
return (
|
|
7
|
+
<Card padding={4} radius={2} shadow={1} tone="critical">
|
|
8
|
+
<Flex align="flex-start">
|
|
9
|
+
<Text size={2}>
|
|
10
|
+
<WarningOutlineIcon />
|
|
11
|
+
</Text>
|
|
12
|
+
<Box flex={1} marginLeft={3}>
|
|
13
|
+
<Box>
|
|
14
|
+
<Text size={2} weight="semibold">
|
|
15
|
+
This variant is hidden
|
|
16
|
+
</Text>
|
|
17
|
+
</Box>
|
|
18
|
+
<Stack marginTop={4} space={2}>
|
|
19
|
+
<Text size={1}>It has been deleted from Shopify</Text>
|
|
20
|
+
</Stack>
|
|
21
|
+
</Box>
|
|
22
|
+
</Flex>
|
|
23
|
+
</Card>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {LockIcon} from '@sanity/icons'
|
|
3
|
+
import {Box, Text, TextInput, Tooltip} from '@sanity/ui'
|
|
4
|
+
import {
|
|
5
|
+
type SanityDocument,
|
|
6
|
+
type StringInputProps,
|
|
7
|
+
type StringSchemaType,
|
|
8
|
+
useFormValue,
|
|
9
|
+
} from 'sanity'
|
|
10
|
+
import get from 'lodash.get'
|
|
11
|
+
|
|
12
|
+
type Props = StringInputProps<StringSchemaType & {options?: {field?: string}}>
|
|
13
|
+
|
|
14
|
+
const ProxyString = (props: Props) => {
|
|
15
|
+
const {schemaType} = props
|
|
16
|
+
|
|
17
|
+
const path = schemaType?.options?.field
|
|
18
|
+
const doc = useFormValue([]) as SanityDocument
|
|
19
|
+
|
|
20
|
+
const proxyValue = path ? (get(doc, path) as string) : ''
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<Tooltip
|
|
24
|
+
content={
|
|
25
|
+
<Box padding={2}>
|
|
26
|
+
<Text muted size={1}>
|
|
27
|
+
This value is set in Shopify (<code>{path}</code>)
|
|
28
|
+
</Text>
|
|
29
|
+
</Box>
|
|
30
|
+
}
|
|
31
|
+
portal
|
|
32
|
+
>
|
|
33
|
+
<TextInput iconRight={LockIcon} readOnly={true} value={proxyValue} />
|
|
34
|
+
</Tooltip>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default ProxyString
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {CloseIcon, ImageIcon, LinkRemovedIcon} from '@sanity/icons'
|
|
3
|
+
import {forwardRef, useState} from 'react'
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
isActive?: boolean
|
|
7
|
+
isDeleted: boolean
|
|
8
|
+
type: 'collection' | 'product' | 'productVariant'
|
|
9
|
+
url: string
|
|
10
|
+
title: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const ShopifyDocumentStatus = forwardRef<HTMLDivElement, Props>((props, ref) => {
|
|
14
|
+
const {isActive, isDeleted, title, type, url} = props
|
|
15
|
+
|
|
16
|
+
const [imageVisible, setImageVisible] = useState(true)
|
|
17
|
+
|
|
18
|
+
// Hide image on error / 404
|
|
19
|
+
const handleImageError = () => setImageVisible(false)
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div
|
|
23
|
+
ref={ref}
|
|
24
|
+
style={{
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
borderRadius: 'inherit',
|
|
27
|
+
display: 'flex',
|
|
28
|
+
height: '100%',
|
|
29
|
+
justifyContent: 'center',
|
|
30
|
+
overflow: 'hidden',
|
|
31
|
+
width: '100%',
|
|
32
|
+
}}
|
|
33
|
+
>
|
|
34
|
+
{imageVisible && url ? (
|
|
35
|
+
<img
|
|
36
|
+
onError={handleImageError}
|
|
37
|
+
src={`${url}&width=400`}
|
|
38
|
+
style={{
|
|
39
|
+
height: '100%',
|
|
40
|
+
left: 0,
|
|
41
|
+
objectFit: 'contain',
|
|
42
|
+
position: 'absolute',
|
|
43
|
+
top: 0,
|
|
44
|
+
width: '100%',
|
|
45
|
+
}}
|
|
46
|
+
alt={`${title} preview`}
|
|
47
|
+
/>
|
|
48
|
+
) : (
|
|
49
|
+
<ImageIcon style={{position: 'absolute'}} />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* Item has been deleted */}
|
|
53
|
+
{isDeleted ? (
|
|
54
|
+
<CloseIcon
|
|
55
|
+
style={{
|
|
56
|
+
background: 'rgba(255, 0, 0, 0.7)',
|
|
57
|
+
color: 'rgba(255, 255, 255, 0.85)',
|
|
58
|
+
height: '100%',
|
|
59
|
+
position: 'relative',
|
|
60
|
+
width: '100%',
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
) : (
|
|
64
|
+
<>
|
|
65
|
+
{/* Products only: item is no longer active */}
|
|
66
|
+
{type === 'product' && !isActive && (
|
|
67
|
+
<LinkRemovedIcon
|
|
68
|
+
style={{
|
|
69
|
+
background: 'rgba(0, 0, 0, 0.7)',
|
|
70
|
+
color: 'rgba(255, 255, 255, 0.85)',
|
|
71
|
+
height: '100%',
|
|
72
|
+
position: 'relative',
|
|
73
|
+
width: '100%',
|
|
74
|
+
}}
|
|
75
|
+
/>
|
|
76
|
+
)}
|
|
77
|
+
</>
|
|
78
|
+
)}
|
|
79
|
+
</div>
|
|
80
|
+
)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
export default ShopifyDocumentStatus
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Currency code (ISO 4217) to use when displaying prices in the studio
|
|
2
|
+
// https://en.wikipedia.org/wiki/ISO_4217
|
|
3
|
+
export const DEFAULT_CURRENCY_CODE = 'USD'
|
|
4
|
+
|
|
5
|
+
// Document types which:
|
|
6
|
+
// - cannot be created in the 'new document' menu
|
|
7
|
+
// - cannot be duplicated, unpublished or deleted
|
|
8
|
+
// - are from the Sanity Connect Shopify app - and can be linked to on Shopify
|
|
9
|
+
export const SHOPIFY_DOCUMENT_TYPES = ['product', 'productVariant', 'collection']
|
|
10
|
+
|
|
11
|
+
// API version to use when using the Sanity client within the studio
|
|
12
|
+
// https://www.sanity.io/help/studio-client-specify-api-version
|
|
13
|
+
export const SANITY_API_VERSION = '2023-02-07'
|
|
14
|
+
|
|
15
|
+
// Your Shopify store ID.
|
|
16
|
+
// This is your unique store URL (e.g. 'my-store-name.myshopify.com').
|
|
17
|
+
// Set this to enable helper links in document status banners and shortcut links on products and collections.
|
|
18
|
+
export const SHOPIFY_STORE_ID = '*.myshopify.com'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
definePlugin,
|
|
3
|
+
DocumentActionComponent,
|
|
4
|
+
DocumentActionsResolver,
|
|
5
|
+
NewDocumentOptionsResolver,
|
|
6
|
+
} from 'sanity'
|
|
7
|
+
import shopifyDelete from './shopifyDelete'
|
|
8
|
+
import shopifyLink from './shopifyLink'
|
|
9
|
+
|
|
10
|
+
import {SHOPIFY_DOCUMENT_TYPES} from '../../constants'
|
|
11
|
+
|
|
12
|
+
export const resolveDocumentActions: DocumentActionsResolver = (prev, {schemaType}) => {
|
|
13
|
+
if (SHOPIFY_DOCUMENT_TYPES.includes(schemaType)) {
|
|
14
|
+
prev = prev.filter(
|
|
15
|
+
(previousAction: DocumentActionComponent) =>
|
|
16
|
+
previousAction.action === 'publish' ||
|
|
17
|
+
previousAction.action === 'unpublish' ||
|
|
18
|
+
previousAction.action === 'discardChanges',
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return [
|
|
22
|
+
...prev,
|
|
23
|
+
shopifyDelete as DocumentActionComponent,
|
|
24
|
+
shopifyLink as DocumentActionComponent,
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return prev
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const resolveNewDocumentOptions: NewDocumentOptionsResolver = (prev) => {
|
|
32
|
+
const options = prev.filter((previousOption) => {
|
|
33
|
+
return !SHOPIFY_DOCUMENT_TYPES.includes(previousOption.templateId)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
return options
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const shopifyDocumentActions = definePlugin({
|
|
40
|
+
name: 'custom-document-actions',
|
|
41
|
+
document: {
|
|
42
|
+
actions: resolveDocumentActions,
|
|
43
|
+
newDocumentOptions: resolveNewDocumentOptions,
|
|
44
|
+
},
|
|
45
|
+
})
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import React, {useState} from 'react'
|
|
2
|
+
import {TrashIcon} from '@sanity/icons'
|
|
3
|
+
import {Stack, Text, useToast} from '@sanity/ui'
|
|
4
|
+
import {
|
|
5
|
+
type DocumentActionDescription,
|
|
6
|
+
type DocumentActionConfirmDialogProps,
|
|
7
|
+
useClient,
|
|
8
|
+
} from 'sanity'
|
|
9
|
+
import {useRouter} from 'sanity/router'
|
|
10
|
+
import type {ShopifyDocument, ShopifyDocumentActionProps} from './types'
|
|
11
|
+
import {SANITY_API_VERSION} from '../../constants'
|
|
12
|
+
|
|
13
|
+
export default (props: ShopifyDocumentActionProps): DocumentActionDescription | undefined => {
|
|
14
|
+
const {
|
|
15
|
+
draft,
|
|
16
|
+
type,
|
|
17
|
+
published,
|
|
18
|
+
}: {
|
|
19
|
+
draft: ShopifyDocument
|
|
20
|
+
published: ShopifyDocument
|
|
21
|
+
type: string
|
|
22
|
+
} = props
|
|
23
|
+
|
|
24
|
+
const [dialogOpen, setDialogOpen] = useState(false)
|
|
25
|
+
|
|
26
|
+
const router = useRouter()
|
|
27
|
+
const toast = useToast()
|
|
28
|
+
const client = useClient({apiVersion: SANITY_API_VERSION})
|
|
29
|
+
|
|
30
|
+
let dialog: DocumentActionConfirmDialogProps | null = null
|
|
31
|
+
|
|
32
|
+
if (type === 'product') {
|
|
33
|
+
dialog = {
|
|
34
|
+
message: (
|
|
35
|
+
<Stack space={4}>
|
|
36
|
+
<Text>Delete the current product and all associated variants in your dataset.</Text>
|
|
37
|
+
<Text weight="medium">No content on Shopify will be deleted.</Text>
|
|
38
|
+
</Stack>
|
|
39
|
+
),
|
|
40
|
+
onCancel: () => setDialogOpen(false),
|
|
41
|
+
onConfirm: async () => {
|
|
42
|
+
const productId = published?.store?.id
|
|
43
|
+
|
|
44
|
+
// Find product variant documents with matching Shopify Product ID
|
|
45
|
+
let productVariantIds: string[] = []
|
|
46
|
+
if (productId) {
|
|
47
|
+
productVariantIds = await client.fetch(
|
|
48
|
+
`*[
|
|
49
|
+
_type == "productVariant"
|
|
50
|
+
&& store.productId == $productId
|
|
51
|
+
]._id`,
|
|
52
|
+
{productId},
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Delete current document (including draft)
|
|
57
|
+
const transaction = client.transaction()
|
|
58
|
+
if (published?._id) {
|
|
59
|
+
transaction.delete(published._id)
|
|
60
|
+
}
|
|
61
|
+
if (draft?._id) {
|
|
62
|
+
transaction.delete(draft._id)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Delete all product variants with matching IDs
|
|
66
|
+
productVariantIds?.forEach((documentId) => {
|
|
67
|
+
if (documentId) {
|
|
68
|
+
transaction.delete(documentId)
|
|
69
|
+
transaction.delete(`drafts.${documentId}`)
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
await transaction.commit()
|
|
75
|
+
// Navigate back to products root
|
|
76
|
+
router.navigateUrl({path: '/structure/products'})
|
|
77
|
+
} catch (err) {
|
|
78
|
+
let message = 'Unknown Error'
|
|
79
|
+
if (err instanceof Error) message = err.message
|
|
80
|
+
|
|
81
|
+
toast.push({
|
|
82
|
+
status: 'error',
|
|
83
|
+
title: message,
|
|
84
|
+
})
|
|
85
|
+
} finally {
|
|
86
|
+
setDialogOpen(false)
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
type: 'confirm',
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (type === 'collection') {
|
|
94
|
+
dialog = {
|
|
95
|
+
message: (
|
|
96
|
+
<Stack space={4}>
|
|
97
|
+
<Text>Delete the current collection in your dataset.</Text>
|
|
98
|
+
<Text weight="medium">No content on Shopify will be deleted.</Text>
|
|
99
|
+
</Stack>
|
|
100
|
+
),
|
|
101
|
+
onCancel: () => setDialogOpen(false),
|
|
102
|
+
onConfirm: async () => {
|
|
103
|
+
// Delete current document (including draft)
|
|
104
|
+
const transaction = client.transaction()
|
|
105
|
+
if (published?._id) {
|
|
106
|
+
transaction.delete(published._id)
|
|
107
|
+
}
|
|
108
|
+
if (draft?._id) {
|
|
109
|
+
transaction.delete(draft._id)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
await transaction.commit()
|
|
114
|
+
// Navigate back to collections root
|
|
115
|
+
router.navigateUrl({path: '/structure/collections'})
|
|
116
|
+
} catch (err) {
|
|
117
|
+
let message = 'Unknown Error'
|
|
118
|
+
if (err instanceof Error) message = err.message
|
|
119
|
+
|
|
120
|
+
toast.push({
|
|
121
|
+
status: 'error',
|
|
122
|
+
title: message,
|
|
123
|
+
})
|
|
124
|
+
} finally {
|
|
125
|
+
setDialogOpen(false)
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
type: 'confirm',
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (!dialog) {
|
|
133
|
+
return
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
tone: 'critical',
|
|
138
|
+
dialog: dialogOpen && dialog,
|
|
139
|
+
icon: TrashIcon,
|
|
140
|
+
label: 'Delete',
|
|
141
|
+
onHandle: () => setDialogOpen(true),
|
|
142
|
+
shortcut: 'Ctrl+Alt+D',
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {EarthGlobeIcon} from '@sanity/icons'
|
|
2
|
+
import {type DocumentActionDescription} from 'sanity'
|
|
3
|
+
import {collectionUrl, productUrl, productVariantUrl} from '../../utils/shopifyUrls'
|
|
4
|
+
import type {ShopifyDocument, ShopifyDocumentActionProps} from './types'
|
|
5
|
+
|
|
6
|
+
export default (props: ShopifyDocumentActionProps): DocumentActionDescription | undefined => {
|
|
7
|
+
const {published, type}: {published: ShopifyDocument; type: string} = props
|
|
8
|
+
|
|
9
|
+
if (!published || published?.store?.isDeleted) {
|
|
10
|
+
return
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let url: string | null = null
|
|
14
|
+
|
|
15
|
+
if (type === 'collection') {
|
|
16
|
+
url = collectionUrl(published?.store?.id)
|
|
17
|
+
}
|
|
18
|
+
if (type === 'product') {
|
|
19
|
+
url = productUrl(published?.store?.id)
|
|
20
|
+
}
|
|
21
|
+
if (type === 'productVariant') {
|
|
22
|
+
url = productVariantUrl(published?.store?.productId, published?.store?.id)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!url) {
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (published && !published?.store?.isDeleted) {
|
|
30
|
+
return {
|
|
31
|
+
label: 'Edit in Shopify',
|
|
32
|
+
icon: EarthGlobeIcon,
|
|
33
|
+
onHandle: () => {
|
|
34
|
+
url ? window.open(url) : void 'No URL'
|
|
35
|
+
},
|
|
36
|
+
shortcut: 'Ctrl+Alt+E',
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {type DocumentActionProps, type SanityDocument} from 'sanity'
|
|
2
|
+
|
|
3
|
+
export type ShopifyDocument = SanityDocument & {
|
|
4
|
+
store: {
|
|
5
|
+
id: number
|
|
6
|
+
productId: number
|
|
7
|
+
isDeleted: boolean
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ShopifyDocumentActionProps extends DocumentActionProps {
|
|
12
|
+
published: ShopifyDocument
|
|
13
|
+
draft: ShopifyDocument
|
|
14
|
+
}
|