Procházet zdrojové kódy

chore(core): Remove deprecated SearchResult fields

Michael Bromley před 4 roky
rodič
revize
979a74644c

+ 1 - 5
packages/admin-ui/src/lib/core/src/common/generated-types.ts

@@ -2187,13 +2187,9 @@ export type SearchResult = {
   slug: Scalars['String'];
   productId: Scalars['ID'];
   productName: Scalars['String'];
-  /** @deprecated Use `productAsset.preview` instead */
-  productPreview: Scalars['String'];
   productAsset?: Maybe<SearchResultAsset>;
   productVariantId: Scalars['ID'];
   productVariantName: Scalars['String'];
-  /** @deprecated Use `productVariantAsset.preview` instead */
-  productVariantPreview: Scalars['String'];
   productVariantAsset?: Maybe<SearchResultAsset>;
   price: SearchResultPrice;
   priceWithTax: SearchResultPrice;
@@ -6688,7 +6684,7 @@ export type ProductSelectorSearchQuery = { search: (
     { __typename?: 'SearchResponse' }
     & { items: Array<(
       { __typename?: 'SearchResult' }
-      & Pick<SearchResult, 'productVariantId' | 'productVariantName' | 'productPreview' | 'sku'>
+      & Pick<SearchResult, 'productVariantId' | 'productVariantName' | 'sku'>
       & { productAsset?: Maybe<(
         { __typename?: 'SearchResultAsset' }
         & Pick<SearchResultAsset, 'id' | 'preview'>

+ 0 - 1
packages/admin-ui/src/lib/core/src/data/definitions/product-definitions.ts

@@ -501,7 +501,6 @@ export const PRODUCT_SELECTOR_SEARCH = gql`
             items {
                 productVariantId
                 productVariantName
-                productPreview
                 productAsset {
                     id
                     preview

+ 1 - 1
packages/admin-ui/src/lib/settings/src/components/test-order-builder/test-order-builder.component.ts

@@ -52,7 +52,7 @@ export class TestOrderBuilderComponent implements OnInit {
             this.lines.push({
                 id: result.productVariantId,
                 name: result.productVariantName,
-                preview: result.productPreview,
+                preview: result.productAsset?.preview ?? '',
                 quantity: 1,
                 sku: result.sku,
                 unitPriceWithTax:

+ 0 - 4
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts

@@ -1981,13 +1981,9 @@ export type SearchResult = {
     slug: Scalars['String'];
     productId: Scalars['ID'];
     productName: Scalars['String'];
-    /** @deprecated Use `productAsset.preview` instead */
-    productPreview: Scalars['String'];
     productAsset?: Maybe<SearchResultAsset>;
     productVariantId: Scalars['ID'];
     productVariantName: Scalars['String'];
-    /** @deprecated Use `productVariantAsset.preview` instead */
-    productVariantPreview: Scalars['String'];
     productVariantAsset?: Maybe<SearchResultAsset>;
     price: SearchResultPrice;
     priceWithTax: SearchResultPrice;

+ 0 - 4
packages/common/src/generated-shop-types.ts

@@ -2242,13 +2242,9 @@ export type SearchResult = {
     slug: Scalars['String'];
     productId: Scalars['ID'];
     productName: Scalars['String'];
-    /** @deprecated Use `productAsset.preview` instead */
-    productPreview: Scalars['String'];
     productAsset?: Maybe<SearchResultAsset>;
     productVariantId: Scalars['ID'];
     productVariantName: Scalars['String'];
-    /** @deprecated Use `productVariantAsset.preview` instead */
-    productVariantPreview: Scalars['String'];
     productVariantAsset?: Maybe<SearchResultAsset>;
     price: SearchResultPrice;
     priceWithTax: SearchResultPrice;

+ 0 - 4
packages/common/src/generated-types.ts

@@ -2150,13 +2150,9 @@ export type SearchResult = {
   slug: Scalars['String'];
   productId: Scalars['ID'];
   productName: Scalars['String'];
-  /** @deprecated Use `productAsset.preview` instead */
-  productPreview: Scalars['String'];
   productAsset?: Maybe<SearchResultAsset>;
   productVariantId: Scalars['ID'];
   productVariantName: Scalars['String'];
-  /** @deprecated Use `productVariantAsset.preview` instead */
-  productVariantPreview: Scalars['String'];
   productVariantAsset?: Maybe<SearchResultAsset>;
   price: SearchResultPrice;
   priceWithTax: SearchResultPrice;

+ 59 - 35
packages/core/e2e/default-search-plugin.e2e-spec.ts

@@ -261,7 +261,7 @@ describe('Default search plugin', () => {
             {
                 input: {
                     groupByProduct: true,
-                    facetValueFilters: [ { or: ['T_1', 'T_5'] }],
+                    facetValueFilters: [{ or: ['T_1', 'T_5'] }],
                 },
             },
         );
@@ -288,7 +288,7 @@ describe('Default search plugin', () => {
             {
                 input: {
                     groupByProduct: true,
-                    facetValueFilters: [{and: 'T_1'}, { or: ['T_2', 'T_3'] }],
+                    facetValueFilters: [{ and: 'T_1' }, { or: ['T_2', 'T_3'] }],
                 },
             },
         );
@@ -302,7 +302,7 @@ describe('Default search plugin', () => {
             'Instant Camera',
             'Camera Lens',
             'Tripod',
-            'Slr Camera'
+            'Slr Camera',
         ]);
     }
 
@@ -313,7 +313,7 @@ describe('Default search plugin', () => {
                 input: {
                     facetValueIds: ['T_2', 'T_3'],
                     facetValueOperator: LogicalOperator.OR,
-                    facetValueFilters: [{and:'T_1'}],
+                    facetValueFilters: [{ and: 'T_1' }],
                     groupByProduct: true,
                 },
             },
@@ -328,7 +328,7 @@ describe('Default search plugin', () => {
             'Instant Camera',
             'Camera Lens',
             'Tripod',
-            'Slr Camera'
+            'Slr Camera',
         ]);
     }
 
@@ -338,7 +338,7 @@ describe('Default search plugin', () => {
             {
                 input: {
                     facetValueIds: ['T_1'],
-                    facetValueFilters: [{and:'T_3'}],
+                    facetValueFilters: [{ and: 'T_3' }],
                     facetValueOperator: LogicalOperator.AND,
                     groupByProduct: true,
                 },
@@ -348,7 +348,7 @@ describe('Default search plugin', () => {
             'Instant Camera',
             'Camera Lens',
             'Tripod',
-            'Slr Camera'
+            'Slr Camera',
         ]);
     }
 
@@ -455,9 +455,11 @@ describe('Default search plugin', () => {
 
         it('matches by FacetValueFilters OR and AND', () => testMatchFacetValueFiltersOrWithAnd(shopClient));
 
-        it('matches by FacetValueFilters with facetId OR operator', () => testMatchFacetValueFiltersWithFacetIdsOr(shopClient));
+        it('matches by FacetValueFilters with facetId OR operator', () =>
+            testMatchFacetValueFiltersWithFacetIdsOr(shopClient));
 
-        it('matches by FacetValueFilters with facetId AND operator', () => testMatchFacetValueFiltersWithFacetIdsAnd(shopClient));
+        it('matches by FacetValueFilters with facetId AND operator', () =>
+            testMatchFacetValueFiltersWithFacetIdsAnd(shopClient));
 
         it('matches by collectionId', () => testMatchCollectionId(shopClient));
 
@@ -627,9 +629,11 @@ describe('Default search plugin', () => {
 
         it('matches by FacetValueFilters OR and AND', () => testMatchFacetValueFiltersOrWithAnd(shopClient));
 
-        it('matches by FacetValueFilters with facetId OR operator', () => testMatchFacetValueFiltersWithFacetIdsOr(shopClient));
+        it('matches by FacetValueFilters with facetId OR operator', () =>
+            testMatchFacetValueFiltersWithFacetIdsOr(shopClient));
 
-        it('matches by FacetValueFilters with facetId AND operator', () => testMatchFacetValueFiltersWithFacetIdsAnd(shopClient));
+        it('matches by FacetValueFilters with facetId AND operator', () =>
+            testMatchFacetValueFiltersWithFacetIdsAnd(shopClient));
 
         it('matches by collectionId', () => testMatchCollectionId(adminClient));
 
@@ -794,8 +798,10 @@ describe('Default search plugin', () => {
             }, 10000);
 
             it('updates index when a Collection created', async () => {
-                const { createCollection } = await adminClient.query<CreateCollection.Mutation,
-                    CreateCollection.Variables>(CREATE_COLLECTION, {
+                const { createCollection } = await adminClient.query<
+                    CreateCollection.Mutation,
+                    CreateCollection.Variables
+                >(CREATE_COLLECTION, {
                     input: {
                         translations: [
                             {
@@ -928,8 +934,10 @@ describe('Default search plugin', () => {
                     groupByProduct: false,
                 });
 
-                const { deleteProductVariant } = await adminClient.query<DeleteProductVariant.Mutation,
-                    DeleteProductVariant.Variables>(DELETE_PRODUCT_VARIANT, { id: s1.items[0].productVariantId });
+                const { deleteProductVariant } = await adminClient.query<
+                    DeleteProductVariant.Mutation,
+                    DeleteProductVariant.Variables
+                >(DELETE_PRODUCT_VARIANT, { id: s1.items[0].productVariantId });
 
                 await awaitRunningJobs(adminClient);
 
@@ -1025,8 +1033,10 @@ describe('Default search plugin', () => {
                     .map(() => Math.random().toString(36))
                     .join(' ');
 
-                const { createProduct } = await adminClient.query<CreateProduct.Mutation,
-                    CreateProduct.Variables>(CREATE_PRODUCT, {
+                const { createProduct } = await adminClient.query<
+                    CreateProduct.Mutation,
+                    CreateProduct.Variables
+                >(CREATE_PRODUCT, {
                     input: {
                         translations: [
                             {
@@ -1069,8 +1079,10 @@ describe('Default search plugin', () => {
             let createdProductId: string;
 
             it('creates synthetic index item for Product with no variants', async () => {
-                const { createProduct } = await adminClient.query<CreateProduct.Mutation,
-                    CreateProduct.Variables>(CREATE_PRODUCT, {
+                const { createProduct } = await adminClient.query<
+                    CreateProduct.Mutation,
+                    CreateProduct.Variables
+                >(CREATE_PRODUCT, {
                     input: {
                         facetValueIds: ['T_1'],
                         translations: [
@@ -1111,8 +1123,10 @@ describe('Default search plugin', () => {
             });
 
             it('removes synthetic index item once a variant is created', async () => {
-                const { createProductVariants } = await adminClient.query<CreateProductVariants.Mutation,
-                    CreateProductVariants.Variables>(CREATE_PRODUCT_VARIANTS, {
+                const { createProductVariants } = await adminClient.query<
+                    CreateProductVariants.Mutation,
+                    CreateProductVariants.Variables
+                >(CREATE_PRODUCT_VARIANTS, {
                     input: [
                         {
                             productId: createdProductId,
@@ -1138,8 +1152,10 @@ describe('Default search plugin', () => {
             let secondChannel: ChannelFragment;
 
             beforeAll(async () => {
-                const { createChannel } = await adminClient.query<CreateChannel.Mutation,
-                    CreateChannel.Variables>(CREATE_CHANNEL, {
+                const { createChannel } = await adminClient.query<
+                    CreateChannel.Mutation,
+                    CreateChannel.Variables
+                >(CREATE_CHANNEL, {
                     input: {
                         code: 'second-channel',
                         token: SECOND_CHANNEL_TOKEN,
@@ -1170,8 +1186,10 @@ describe('Default search plugin', () => {
 
             it('removing product from channel', async () => {
                 adminClient.setChannelToken(E2E_DEFAULT_CHANNEL_TOKEN);
-                const { removeProductsFromChannel } = await adminClient.query<RemoveProductsFromChannel.Mutation,
-                    RemoveProductsFromChannel.Variables>(REMOVE_PRODUCT_FROM_CHANNEL, {
+                const { removeProductsFromChannel } = await adminClient.query<
+                    RemoveProductsFromChannel.Mutation,
+                    RemoveProductsFromChannel.Variables
+                >(REMOVE_PRODUCT_FROM_CHANNEL, {
                     input: {
                         productIds: ['T_2'],
                         channelId: secondChannel.id,
@@ -1186,8 +1204,10 @@ describe('Default search plugin', () => {
 
             it('adding product variant to channel', async () => {
                 adminClient.setChannelToken(E2E_DEFAULT_CHANNEL_TOKEN);
-                await adminClient.query<AssignProductVariantsToChannel.Mutation,
-                    AssignProductVariantsToChannel.Variables>(ASSIGN_PRODUCTVARIANT_TO_CHANNEL, {
+                await adminClient.query<
+                    AssignProductVariantsToChannel.Mutation,
+                    AssignProductVariantsToChannel.Variables
+                >(ASSIGN_PRODUCTVARIANT_TO_CHANNEL, {
                     input: { channelId: secondChannel.id, productVariantIds: ['T_10', 'T_15'] },
                 });
                 await awaitRunningJobs(adminClient);
@@ -1210,8 +1230,10 @@ describe('Default search plugin', () => {
 
             it('removing product variant from channel', async () => {
                 adminClient.setChannelToken(E2E_DEFAULT_CHANNEL_TOKEN);
-                await adminClient.query<RemoveProductVariantsFromChannel.Mutation,
-                    RemoveProductVariantsFromChannel.Variables>(REMOVE_PRODUCTVARIANT_FROM_CHANNEL, {
+                await adminClient.query<
+                    RemoveProductVariantsFromChannel.Mutation,
+                    RemoveProductVariantsFromChannel.Variables
+                >(REMOVE_PRODUCTVARIANT_FROM_CHANNEL, {
                     input: { channelId: secondChannel.id, productVariantIds: ['T_1', 'T_15'] },
                 });
                 await awaitRunningJobs(adminClient);
@@ -1232,8 +1254,10 @@ describe('Default search plugin', () => {
 
             it('updating product affects current channel', async () => {
                 adminClient.setChannelToken(SECOND_CHANNEL_TOKEN);
-                const { updateProduct } = await adminClient.query<UpdateProduct.Mutation,
-                    UpdateProduct.Variables>(UPDATE_PRODUCT, {
+                const { updateProduct } = await adminClient.query<
+                    UpdateProduct.Mutation,
+                    UpdateProduct.Variables
+                >(UPDATE_PRODUCT, {
                     input: {
                         id: 'T_3',
                         enabled: true,
@@ -1276,8 +1300,10 @@ describe('Default search plugin', () => {
             }
 
             beforeAll(async () => {
-                const { updateProduct } = await adminClient.query<UpdateProduct.Mutation,
-                    UpdateProduct.Variables>(UPDATE_PRODUCT, {
+                const { updateProduct } = await adminClient.query<
+                    UpdateProduct.Mutation,
+                    UpdateProduct.Variables
+                >(UPDATE_PRODUCT, {
                     input: {
                         id: 'T_1',
                         translations: [
@@ -1359,10 +1385,8 @@ export const SEARCH_PRODUCTS = gql`
                 productName
                 slug
                 description
-                productPreview
                 productVariantId
                 productVariantName
-                productVariantPreview
                 sku
             }
         }

+ 0 - 6
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -1981,13 +1981,9 @@ export type SearchResult = {
     slug: Scalars['String'];
     productId: Scalars['ID'];
     productName: Scalars['String'];
-    /** @deprecated Use `productAsset.preview` instead */
-    productPreview: Scalars['String'];
     productAsset?: Maybe<SearchResultAsset>;
     productVariantId: Scalars['ID'];
     productVariantName: Scalars['String'];
-    /** @deprecated Use `productVariantAsset.preview` instead */
-    productVariantPreview: Scalars['String'];
     productVariantAsset?: Maybe<SearchResultAsset>;
     price: SearchResultPrice;
     priceWithTax: SearchResultPrice;
@@ -5032,10 +5028,8 @@ export type SearchProductsAdminQuery = {
                 | 'productName'
                 | 'slug'
                 | 'description'
-                | 'productPreview'
                 | 'productVariantId'
                 | 'productVariantName'
-                | 'productVariantPreview'
                 | 'sku'
             >
         >;

+ 0 - 6
packages/core/e2e/graphql/generated-e2e-shop-types.ts

@@ -2168,13 +2168,9 @@ export type SearchResult = {
     slug: Scalars['String'];
     productId: Scalars['ID'];
     productName: Scalars['String'];
-    /** @deprecated Use `productAsset.preview` instead */
-    productPreview: Scalars['String'];
     productAsset?: Maybe<SearchResultAsset>;
     productVariantId: Scalars['ID'];
     productVariantName: Scalars['String'];
-    /** @deprecated Use `productVariantAsset.preview` instead */
-    productVariantPreview: Scalars['String'];
     productVariantAsset?: Maybe<SearchResultAsset>;
     price: SearchResultPrice;
     priceWithTax: SearchResultPrice;
@@ -2925,10 +2921,8 @@ export type SearchProductsShopQuery = {
                 SearchResult,
                 | 'productId'
                 | 'productName'
-                | 'productPreview'
                 | 'productVariantId'
                 | 'productVariantName'
-                | 'productVariantPreview'
                 | 'sku'
                 | 'collectionIds'
             > & { price: Pick<PriceRange, 'min' | 'max'> | Pick<SinglePrice, 'value'> }

+ 0 - 2
packages/core/e2e/graphql/shop-definitions.ts

@@ -128,10 +128,8 @@ export const SEARCH_PRODUCTS_SHOP = gql`
             items {
                 productId
                 productName
-                productPreview
                 productVariantId
                 productVariantName
-                productVariantPreview
                 sku
                 collectionIds
                 price {

+ 0 - 14
packages/core/src/api/middleware/asset-interceptor-plugin.ts

@@ -64,20 +64,6 @@ export class AssetInterceptorPlugin implements ApolloServerPlugin {
                     }
                 }
             }
-
-            // TODO: This path is deprecated and should be removed in a future version
-            // once the fields are removed from the GraphQL API
-            const isSearchResultType = type && type.name === 'SearchResult';
-            if (isSearchResultType) {
-                if (value && !Array.isArray(value)) {
-                    if (value.productPreview) {
-                        value.productPreview = toAbsoluteUrl(request, value.productPreview);
-                    }
-                    if (value.productVariantPreview) {
-                        value.productVariantPreview = toAbsoluteUrl(request, value.productVariantPreview);
-                    }
-                }
-            }
             return value;
         });
     }

+ 0 - 2
packages/core/src/api/schema/common/product-search.type.graphql

@@ -28,11 +28,9 @@ type SearchResult {
     slug: String!
     productId: ID!
     productName: String!
-    productPreview: String! @deprecated(reason: "Use `productAsset.preview` instead")
     productAsset: SearchResultAsset
     productVariantId: ID!
     productVariantName: String!
-    productVariantPreview: String! @deprecated(reason: "Use `productVariantAsset.preview` instead")
     productVariantAsset: SearchResultAsset
     price: SearchResultPrice!
     priceWithTax: SearchResultPrice!

+ 0 - 2
packages/core/src/plugin/default-search-plugin/search-strategy/search-strategy-utils.ts

@@ -55,9 +55,7 @@ export function mapToSearchResult(raw: any, currencyCode: CurrencyCode): SearchR
         collectionIds: raw.si_collectionIds.split(',').map((x: string) => x.trim()),
         channelIds: raw.si_channelIds.split(',').map((x: string) => x.trim()),
         productAsset,
-        productPreview: raw.si_productPreview,
         productVariantAsset,
-        productVariantPreview: raw.si_productVariantPreview,
         score: raw.score || 0,
     };
 }

+ 19 - 8
packages/dev-server/dev-config.ts

@@ -6,6 +6,7 @@ import {
     Asset,
     DefaultJobQueuePlugin,
     DefaultLogger,
+    defaultPromotionActions,
     DefaultSearchPlugin,
     dummyPaymentHandler,
     examplePaymentHandler,
@@ -14,6 +15,7 @@ import {
     LogLevel,
     manualFulfillmentHandler,
     PaymentMethodEligibilityChecker,
+    PromotionItemAction,
     VendureConfig,
 } from '@vendure/core';
 import { ElasticsearchPlugin } from '@vendure/elasticsearch-plugin';
@@ -28,6 +30,20 @@ const testPaymentChecker = new PaymentMethodEligibilityChecker({
     check: (ctx, order) => true,
 });
 
+const testPromoAction = new PromotionItemAction({
+    code: 'discount-price-action',
+    description: [{ languageCode: LanguageCode.en, value: 'Apply discount price' }],
+    args: {},
+    execute: (ctx, orderItem, orderLine) => {
+        if ((orderLine.productVariant.customFields as any).discountPrice) {
+            return -(
+                orderLine.unitPriceWithTax - (orderLine.productVariant.customFields as any).discountPrice
+            );
+        }
+        return 0;
+    },
+});
+
 const myHandler = new FulfillmentHandler({
     code: 'test-handler',
     args: {},
@@ -81,16 +97,11 @@ export const devConfig: VendureConfig = {
         paymentMethodEligibilityCheckers: [testPaymentChecker],
         paymentMethodHandlers: [dummyPaymentHandler],
     },
+    promotionOptions: {
+        promotionActions: [...defaultPromotionActions, testPromoAction],
+    },
     customFields: {
         /*Asset: [{ name: 'description', type: 'string' }],*/
-        Fulfillment: [
-            {
-                name: 'logo',
-                type: 'relation',
-                entity: Asset,
-                nullable: true,
-            },
-        ],
     },
     logger: new DefaultLogger({ level: LogLevel.Info }),
     importExportOptions: {

+ 0 - 2
packages/elasticsearch-plugin/e2e/elasticsearch-plugin.e2e-spec.ts

@@ -1167,7 +1167,6 @@ export const SEARCH_PRODUCTS = gql`
                         y
                     }
                 }
-                productPreview
                 productVariantId
                 productVariantName
                 productVariantAsset {
@@ -1178,7 +1177,6 @@ export const SEARCH_PRODUCTS = gql`
                         y
                     }
                 }
-                productVariantPreview
                 sku
             }
         }

+ 0 - 6
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts

@@ -1981,13 +1981,9 @@ export type SearchResult = {
     slug: Scalars['String'];
     productId: Scalars['ID'];
     productName: Scalars['String'];
-    /** @deprecated Use `productAsset.preview` instead */
-    productPreview: Scalars['String'];
     productAsset?: Maybe<SearchResultAsset>;
     productVariantId: Scalars['ID'];
     productVariantName: Scalars['String'];
-    /** @deprecated Use `productVariantAsset.preview` instead */
-    productVariantPreview: Scalars['String'];
     productVariantAsset?: Maybe<SearchResultAsset>;
     price: SearchResultPrice;
     priceWithTax: SearchResultPrice;
@@ -4731,10 +4727,8 @@ export type SearchProductsAdminQuery = {
                 | 'productName'
                 | 'slug'
                 | 'description'
-                | 'productPreview'
                 | 'productVariantId'
                 | 'productVariantName'
-                | 'productVariantPreview'
                 | 'sku'
             > & {
                 productAsset?: Maybe<

+ 0 - 2
packages/elasticsearch-plugin/src/elasticsearch.service.ts

@@ -332,10 +332,8 @@ export class ElasticsearchService implements OnModuleInit, OnModuleDestroy {
             productVariantAsset,
             productId: source.productId.toString(),
             productName: source.productName,
-            productPreview: source.productPreview || '', // TODO: deprecated and to be removed
             productVariantId: source.productVariantId.toString(),
             productVariantName: source.productVariantName,
-            productVariantPreview: source.productVariantPreview || '', // TODO: deprecated and to be removed
             facetIds: source.facetIds as string[],
             facetValueIds: source.facetValueIds as string[],
             collectionIds: source.collectionIds as string[],

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
schema-admin.json


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
schema-shop.json


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů