reviews-widget.component.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
  2. import { DataService, ItemOf, SharedModule } from '@vendure/admin-ui/core';
  3. import gql from 'graphql-tag';
  4. import { Observable } from 'rxjs';
  5. import { ReviewStateLabelComponent } from '../../components/review-state-label/review-state-label.component';
  6. import { StarRatingComponent } from '../../components/star-rating/star-rating.component';
  7. import { GetReviewsForWidgetDocument, GetReviewsForWidgetQuery } from '../../generated-types';
  8. const GET_REVIEWS_FOR_WIDGET = gql`
  9. query GetReviewsForWidget($options: ProductReviewListOptions) {
  10. productReviews(options: $options) {
  11. items {
  12. id
  13. authorName
  14. summary
  15. rating
  16. state
  17. createdAt
  18. product {
  19. id
  20. name
  21. }
  22. }
  23. totalItems
  24. }
  25. }
  26. `;
  27. @Component({
  28. selector: 'vdr-reviews-widget',
  29. templateUrl: './reviews-widget.component.html',
  30. styleUrls: ['./reviews-widget.component.scss'],
  31. changeDetection: ChangeDetectionStrategy.OnPush,
  32. standalone: true,
  33. imports: [SharedModule, StarRatingComponent, ReviewStateLabelComponent],
  34. })
  35. export default class ReviewsWidgetComponent implements OnInit {
  36. pendingReviews$: Observable<Array<ItemOf<GetReviewsForWidgetQuery, 'productReviews'>>>;
  37. constructor(private dataService: DataService) {}
  38. ngOnInit() {
  39. this.pendingReviews$ = this.dataService
  40. .query(GetReviewsForWidgetDocument, {
  41. options: {
  42. filter: {
  43. state: {
  44. eq: 'new',
  45. },
  46. },
  47. take: 10,
  48. },
  49. })
  50. .mapStream(data => data.productReviews.items);
  51. }
  52. }