review-detail.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. }
  33. }
  34. }
  35. `);
  36. const updateReviewDocument = graphql(`
  37. mutation UpdateReview($input: UpdateProductReviewInput!) {
  38. updateProductReview(input: $input) {
  39. id
  40. }
  41. }
  42. `);
  43. export const reviewDetail: DashboardRouteDefinition = {
  44. path: '/reviews/$id',
  45. loader: detailPageRouteLoader({
  46. queryDocument: reviewDetailDocument,
  47. breadcrumb: (isNew, entity) => [
  48. { path: '/reviews', label: 'Reviews' },
  49. isNew ? 'New review' : entity?.summary,
  50. ],
  51. }),
  52. component: route => {
  53. return (
  54. <DetailPage
  55. pageId="review-detail"
  56. queryDocument={reviewDetailDocument}
  57. updateDocument={updateReviewDocument}
  58. route={route}
  59. title={review => review.summary}
  60. setValuesForUpdate={review => {
  61. return {
  62. id: review.id,
  63. summary: review.summary,
  64. body: review.body,
  65. response: review.response,
  66. state: review.state,
  67. customFields: review.customFields,
  68. translations: review.translations,
  69. };
  70. }}
  71. />
  72. );
  73. },
  74. };