custom-script-fields.resolver.ts 1.1 KB

1234567891011121314151617181920212223242526
  1. import { Inject } from '@nestjs/common';
  2. import { ResolveField, Resolver } from '@nestjs/graphql';
  3. import { DeepRequired } from '@vendure/common/lib/shared-types';
  4. import { ELASTIC_SEARCH_OPTIONS } from './constants';
  5. import { ElasticsearchOptions } from './options';
  6. /**
  7. * This resolver is only required if scriptFields are defined for both products and product variants.
  8. * This particular configuration will result in a union type for the
  9. * `SearchResult.customScriptFields` GraphQL field.
  10. */
  11. @Resolver('CustomScriptFields')
  12. export class CustomScriptFieldsResolver {
  13. constructor(@Inject(ELASTIC_SEARCH_OPTIONS) private options: DeepRequired<ElasticsearchOptions>) {}
  14. @ResolveField()
  15. __resolveType(value: any): string {
  16. const productScriptFields = Object.entries(this.options.searchConfig?.scriptFields || {})
  17. .filter(([, scriptField]) => scriptField.context !== 'variant')
  18. .map(([k]) => k);
  19. return Object.keys(value).every(k => productScriptFields.includes(k))
  20. ? 'CustomProductScriptFields'
  21. : 'CustomProductVariantScriptFields';
  22. }
  23. }