reviews-plugin.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { LanguageCode, PluginCommonModule, VendurePlugin } from '@vendure/core';
  2. import { AdminUiExtension } from '@vendure/ui-devkit/compiler';
  3. import path from 'path';
  4. import { adminApiExtensions, shopApiExtensions } from './api/api-extensions';
  5. import { ProductEntityResolver } from './api/product-entity.resolver';
  6. import { ProductReviewAdminResolver } from './api/product-review-admin.resolver';
  7. import { ProductReviewEntityResolver } from './api/product-review-entity.resolver';
  8. import { ProductReviewShopResolver } from './api/product-review-shop.resolver';
  9. import { ProductReview } from './entities/product-review.entity';
  10. import { ProductReviewTranslation } from './entities/product-review-translation.entity';
  11. @VendurePlugin({
  12. imports: [PluginCommonModule],
  13. entities: [ProductReview, ProductReviewTranslation],
  14. adminApiExtensions: {
  15. schema: adminApiExtensions,
  16. resolvers: [ProductEntityResolver, ProductReviewAdminResolver, ProductReviewEntityResolver],
  17. },
  18. shopApiExtensions: {
  19. schema: shopApiExtensions,
  20. resolvers: [ProductEntityResolver, ProductReviewShopResolver, ProductReviewEntityResolver],
  21. },
  22. configuration: config => {
  23. config.customFields.Product.push({
  24. name: 'reviewRating',
  25. label: [{ languageCode: LanguageCode.en, value: 'Review rating' }],
  26. public: true,
  27. nullable: true,
  28. type: 'float',
  29. ui: { tab: 'Reviews', component: 'star-rating-form-input' },
  30. });
  31. config.customFields.Product.push({
  32. name: 'reviewCount',
  33. label: [{ languageCode: LanguageCode.en, value: 'Review count' }],
  34. public: true,
  35. defaultValue: 0,
  36. type: 'float',
  37. ui: { tab: 'Reviews', component: 'review-count-link' },
  38. });
  39. config.customFields.Product.push({
  40. name: 'featuredReview',
  41. label: [{ languageCode: LanguageCode.en, value: 'Featured review' }],
  42. public: true,
  43. type: 'relation',
  44. entity: ProductReview,
  45. ui: { tab: 'Reviews', component: 'review-selector-form-input' },
  46. inverseSide: undefined,
  47. });
  48. return config;
  49. },
  50. dashboard: './dashboard/index.tsx',
  51. })
  52. export class ReviewsPlugin {
  53. static uiExtensions: AdminUiExtension = {
  54. extensionPath: path.join(__dirname, 'ui'),
  55. routes: [{ route: 'product-reviews', filePath: 'routes.ts' }],
  56. providers: ['providers.ts'],
  57. };
  58. }