ModalManager.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <script setup lang="ts">
  2. import { shallowRef } from "vue";
  3. import { storeToRefs } from "pinia";
  4. import { useModalsStore, useModalComponents } from "@/stores/modals";
  5. const modalsStore = useModalsStore();
  6. const { modals, activeModals } = storeToRefs(modalsStore);
  7. const modalComponents = shallowRef(
  8. useModalComponents("components/modals", {
  9. editUser: "EditUser.vue",
  10. login: "Login.vue",
  11. register: "Register.vue",
  12. whatIsNew: "WhatIsNew.vue",
  13. createStation: "CreateStation.vue",
  14. editNews: "EditNews.vue",
  15. editArtist: "EditArtist.vue",
  16. editAlbum: "EditAlbum.vue",
  17. manageStation: "ManageStation/index.vue",
  18. importArtistMB: "ImportArtistMB.vue",
  19. editPlaylist: "EditPlaylist/index.vue",
  20. createPlaylist: "CreatePlaylist.vue",
  21. report: "Report.vue",
  22. viewReport: "ViewReport.vue",
  23. bulkActions: "BulkActions.vue",
  24. viewApiRequest: "ViewApiRequest.vue",
  25. viewPunishment: "ViewPunishment.vue",
  26. removeAccount: "RemoveAccount.vue",
  27. importAlbum: "ImportAlbum.vue",
  28. importArtist: "ImportArtist.vue",
  29. confirm: "Confirm.vue",
  30. editSong: "EditSong/index.vue",
  31. viewMedia: "ViewMedia.vue",
  32. bulkEditPlaylist: "BulkEditPlaylist.vue",
  33. convertSpotifySongs: "ConvertSpotifySongs.vue",
  34. replaceSpotifySongs: "ReplaceSpotifySongs.vue"
  35. })
  36. );
  37. </script>
  38. <template>
  39. <div>
  40. <div v-for="activeModalUuid in activeModals" :key="activeModalUuid">
  41. <component
  42. :is="modalComponents[modals[activeModalUuid].modal]"
  43. :modal-uuid="activeModalUuid"
  44. v-bind="modals[activeModalUuid].props"
  45. />
  46. <div
  47. v-if="!modalComponents[modals[activeModalUuid].modal]"
  48. class="modal-error"
  49. >
  50. <p>
  51. Modal "{{ modals[activeModalUuid].modal }}" does not exist
  52. </p>
  53. </div>
  54. </div>
  55. </div>
  56. </template>
  57. <style lang="less" scoped>
  58. .modal-error {
  59. position: absolute;
  60. bottom: 0;
  61. left: 0;
  62. width: 100%;
  63. background-color: var(--dark-red);
  64. color: var(--white);
  65. z-index: 10000;
  66. padding: 32px;
  67. p {
  68. padding: 0;
  69. margin: 0;
  70. font-size: 3em;
  71. }
  72. }
  73. </style>