custom-form-components.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import {
  2. DashboardFormComponent,
  3. FormControl,
  4. MultiRelationInput,
  5. RelationSelectorConfig,
  6. ResultOf,
  7. Select,
  8. SelectContent,
  9. SelectItem,
  10. SelectTrigger,
  11. SelectValue,
  12. SingleRelationInput,
  13. Textarea,
  14. } from '@vendure/dashboard';
  15. import { graphql } from '../../../graphql/graphql';
  16. export const TextareaCustomField: DashboardFormComponent = props => {
  17. return <Textarea {...props} rows={4} />;
  18. };
  19. export const ResponseDisplay: DashboardFormComponent = ({ value }) => {
  20. return <div className="font-mono">{value}</div>;
  21. };
  22. export const BodyInputComponent: DashboardFormComponent = props => {
  23. return <Textarea {...props} rows={4} />;
  24. };
  25. const reviewFragment = graphql(`
  26. fragment Review on ProductReview {
  27. id
  28. summary
  29. }
  30. `);
  31. const reviewListQuery = graphql(
  32. `
  33. query GetReviewList($options: ProductReviewListOptions) {
  34. productReviews(options: $options) {
  35. items {
  36. ...Review
  37. }
  38. totalItems
  39. }
  40. }
  41. `,
  42. [reviewFragment],
  43. );
  44. export const ReviewSingleSelect: DashboardFormComponent = props => {
  45. const config: RelationSelectorConfig<ResultOf<typeof reviewFragment>> = {
  46. listQuery: reviewListQuery,
  47. labelKey: 'summary',
  48. idKey: 'id',
  49. };
  50. return <SingleRelationInput {...props} config={config}></SingleRelationInput>;
  51. };
  52. export const ReviewMultiSelect: DashboardFormComponent = props => {
  53. const config: RelationSelectorConfig<ResultOf<typeof reviewFragment>> = {
  54. listQuery: reviewListQuery,
  55. labelKey: 'summary',
  56. idKey: 'id',
  57. };
  58. return <MultiRelationInput config={config} {...props}></MultiRelationInput>;
  59. };
  60. export const ReviewStateSelect: DashboardFormComponent = props => {
  61. return (
  62. <Select value={props.value} onValueChange={props.onChange} key={props.value}>
  63. <FormControl>
  64. <SelectTrigger>
  65. <SelectValue placeholder="Select state..."></SelectValue>
  66. </SelectTrigger>
  67. </FormControl>
  68. <SelectContent>
  69. <SelectItem value="new">New</SelectItem>
  70. <SelectItem value="approved">Approved</SelectItem>
  71. <SelectItem value="rejected">Rejected</SelectItem>
  72. </SelectContent>
  73. </Select>
  74. );
  75. };