index.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <AppSection label="teams">
  3. <div class="space-y-4 p-4">
  4. <ButtonSecondary
  5. :label="`${$t('team.create_new')}`"
  6. outline
  7. @click.native="displayModalAdd(true)"
  8. />
  9. <div
  10. v-if="myTeams.loading"
  11. class="flex flex-col items-center justify-center"
  12. >
  13. <SmartSpinner class="mb-4" />
  14. <span class="text-secondaryLight">{{ $t("state.loading") }}</span>
  15. </div>
  16. <div
  17. v-if="
  18. !myTeams.loading &&
  19. E.isRight(myTeams.data) &&
  20. myTeams.data.right.myTeams.length === 0
  21. "
  22. class="
  23. flex flex-col
  24. text-secondaryLight
  25. p-4
  26. items-center
  27. justify-center
  28. "
  29. >
  30. <i class="opacity-75 pb-2 material-icons">help_outline</i>
  31. <span class="text-center">
  32. {{ $t("empty.teams") }}
  33. </span>
  34. </div>
  35. <div
  36. v-else-if="!myTeams.loading && E.isRight(myTeams.data)"
  37. class="grid gap-4"
  38. :class="modal ? 'grid-cols-1' : 'sm:grid-cols-3 md:grid-cols-4'"
  39. >
  40. <TeamsTeam
  41. v-for="(team, index) in myTeams.data.right.myTeams"
  42. :key="`team-${String(index)}`"
  43. :team-i-d="team.id"
  44. :team="team"
  45. :compact="modal"
  46. @edit-team="editTeam(team, team.id)"
  47. @invite-team="inviteTeam(team, team.id)"
  48. />
  49. </div>
  50. <div
  51. v-if="!myTeams.loading && E.isLeft(myTeams.data)"
  52. class="flex flex-col items-center"
  53. >
  54. <i class="mb-4 material-icons">help_outline</i>
  55. {{ $t("error.something_went_wrong") }}
  56. </div>
  57. </div>
  58. <TeamsAdd :show="showModalAdd" @hide-modal="displayModalAdd(false)" />
  59. <!-- ¯\_(ツ)_/¯ -->
  60. <TeamsEdit
  61. v-if="
  62. !myTeams.loading &&
  63. E.isRight(myTeams.data) &&
  64. myTeams.data.right.myTeams.length > 0
  65. "
  66. :team="myTeams.data.right.myTeams[0]"
  67. :show="showModalEdit"
  68. :editing-team="editingTeam"
  69. :editing-team-i-d="editingTeamID"
  70. @hide-modal="displayModalEdit(false)"
  71. @invite-team="inviteTeam(editingTeam, editingTeamID)"
  72. />
  73. <TeamsInvite
  74. v-if="
  75. !myTeams.loading &&
  76. E.isRight(myTeams.data) &&
  77. myTeams.data.right.myTeams.length > 0
  78. "
  79. :team="myTeams.data.right.myTeams[0]"
  80. :show="showModalInvite"
  81. :editing-team="editingTeam"
  82. :editing-team-i-d="editingTeamID"
  83. @hide-modal="displayModalInvite(false)"
  84. />
  85. </AppSection>
  86. </template>
  87. <script setup lang="ts">
  88. import { ref, watchEffect } from "@nuxtjs/composition-api"
  89. import * as E from "fp-ts/Either"
  90. import { useGQLQuery } from "~/helpers/backend/GQLClient"
  91. import {
  92. MyTeamsDocument,
  93. MyTeamsQuery,
  94. MyTeamsQueryVariables,
  95. } from "~/helpers/backend/graphql"
  96. import { MyTeamsQueryError } from "~/helpers/backend/QueryErrors"
  97. defineProps<{
  98. modal: boolean
  99. }>()
  100. defineProps<{
  101. modal: boolean
  102. }>()
  103. const showModalAdd = ref(false)
  104. const showModalEdit = ref(false)
  105. const showModalInvite = ref(false)
  106. const editingTeam = ref<any>({}) // TODO: Check this out
  107. const editingTeamID = ref<any>("")
  108. const myTeams = useGQLQuery<
  109. MyTeamsQuery,
  110. MyTeamsQueryVariables,
  111. MyTeamsQueryError
  112. >({
  113. query: MyTeamsDocument,
  114. pollDuration: 5000,
  115. })
  116. watchEffect(() => {
  117. console.log(myTeams)
  118. })
  119. const displayModalAdd = (shouldDisplay: boolean) => {
  120. showModalAdd.value = shouldDisplay
  121. }
  122. const displayModalEdit = (shouldDisplay: boolean) => {
  123. showModalEdit.value = shouldDisplay
  124. }
  125. const displayModalInvite = (shouldDisplay: boolean) => {
  126. showModalInvite.value = shouldDisplay
  127. }
  128. const editTeam = (team: any, teamID: any) => {
  129. editingTeam.value = team
  130. editingTeamID.value = teamID
  131. displayModalEdit(true)
  132. }
  133. const inviteTeam = (team: any, teamID: any) => {
  134. editingTeam.value = team
  135. editingTeamID.value = teamID
  136. displayModalInvite(true)
  137. }
  138. </script>