review-detail.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { graphql } from '@/graphql/graphql';
  2. import { DashboardRouteDefinition, DetailPage, detailPageRouteLoader } from '@vendure/dashboard';
  3. const reviewDetailDocument = graphql(`
  4. query GetReviewDetail($id: ID!) {
  5. productReview(id: $id) {
  6. id
  7. createdAt
  8. updatedAt
  9. product {
  10. id
  11. name
  12. }
  13. productVariant {
  14. id
  15. name
  16. sku
  17. }
  18. summary
  19. body
  20. rating
  21. authorName
  22. authorLocation
  23. upvotes
  24. downvotes
  25. state
  26. response
  27. responseCreatedAt
  28. translations {
  29. id
  30. languageCode
  31. text
  32. customFields {
  33. reviewerName
  34. }
  35. }
  36. customFields {
  37. verifiedReviewerName
  38. reviewerName
  39. }
  40. }
  41. }
  42. `);
  43. const updateReviewDocument = graphql(`
  44. mutation UpdateReview($input: UpdateProductReviewInput!) {
  45. updateProductReview(input: $input) {
  46. id
  47. }
  48. }
  49. `);
  50. export const reviewDetail: DashboardRouteDefinition = {
  51. path: '/reviews/$id',
  52. loader: detailPageRouteLoader({
  53. queryDocument: reviewDetailDocument,
  54. breadcrumb: (isNew, entity) => [
  55. { path: '/reviews', label: 'Reviews' },
  56. isNew ? 'New review' : entity?.summary,
  57. ],
  58. }),
  59. component: route => {
  60. return (
  61. <DetailPage
  62. pageId="review-detail"
  63. queryDocument={reviewDetailDocument}
  64. updateDocument={updateReviewDocument}
  65. route={route}
  66. title={review => review.summary}
  67. setValuesForUpdate={review => {
  68. return {
  69. id: review.id,
  70. summary: review.summary,
  71. body: review.body,
  72. response: review.response,
  73. state: review.state,
  74. customFields: review.customFields,
  75. translations: review.translations,
  76. };
  77. }}
  78. />
  79. );
  80. },
  81. };