The frontend component of PuffPastry, meant to interface with the backend, which in turn interfaces with the smart contract.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

65 lines
2.2 KiB

  1. <template>
  2. <div class="flex flex-row justify-around">
  3. <div>
  4. <Confirm
  5. :width="24" :height="24" :box="96"
  6. class="inline-block fill-gray-50 hover:fill-green-500 cursor-pointer mx-2"
  7. :class="{'fill-green-500': vote === 'Positive'}"
  8. @click="recordAccept"
  9. />
  10. <span class="text-white align-bottom font-poppins hidden sm:inline-block">Approve</span>
  11. </div>
  12. <div>
  13. <Cancel
  14. :width="24" :height="24" :box="96"
  15. class="inline-block fill-gray-50 hover:fill-red-500 cursor-pointer mx-2"
  16. :class="{'fill-red-500': vote === 'Negative'}"
  17. @click="recordDecline"
  18. />
  19. <span class="text-white align-bottom font-poppins hidden sm:inline-block">Reject</span>
  20. </div>
  21. <div>
  22. <Abstain
  23. :width="24" :height="24" :box="96"
  24. class="inline-block fill-gray-50 hover:fill-amber-500 cursor-pointer mx-2"
  25. @click="recordAbstain"
  26. />
  27. <span class="text-white align-bottom font-poppins hidden sm:inline-block">Abstain</span>
  28. </div>
  29. </div>
  30. </template>
  31. <script setup lang="ts">
  32. import {VoteIssueRequest, VoteIssueResponse} from "../types/issue.ts";
  33. import Cancel from "./icons/Cancel.vue";
  34. import Confirm from "./icons/Confirm.vue";
  35. import freighter from "@stellar/freighter-api";
  36. import Abstain from "./icons/Abstain.vue";
  37. const props = defineProps<{ selectedId: string, vote?: 'Positive' | 'Negative' }>();
  38. const recordAccept = async () => {
  39. if (!props.selectedId) return;
  40. const addr = await freighter.getAddress();
  41. // TODO: replace this call
  42. await post<VoteIssueRequest, VoteIssueResponse>('/issues/vote',
  43. { issue_id: props.selectedId.toString(), wallet: addr.address, vote: "Positive" })
  44. }
  45. const recordDecline = async () => {
  46. if (!props.selectedId) return;
  47. const addr = await freighter.getAddress();
  48. // TODO: replace this call
  49. await post<VoteIssueRequest, VoteIssueResponse>('/issues/vote',
  50. { issue_id: props.selectedId, wallet: addr.address, vote: "Negative" })
  51. }
  52. const recordAbstain = async () => {
  53. if (!props.selectedId) return;
  54. const addr = await freighter.getAddress();
  55. }
  56. </script>
  57. <style lang="postcss">
  58. .font-poppins {
  59. font-family: 'Poppins', sans-serif;
  60. }
  61. </style>