reviews-plugin.ts 2.4 KB

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