diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteBugNotificationsView.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteBugNotificationsView.vue
new file mode 100644
index 0000000..9d90353
--- /dev/null
+++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteBugNotificationsView.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+ {{ formatMessage(messages.loading) }}
+
+
+ {{ formatMessage(messages.failed) }}
+
+
+ {{ formatMessage(messages.empty) }}
+
+
+
+
+ {{ formatMessage(messages.item, { name: item.actorName, id: item.issueId }) }}
+
+ {{ formatDateTime(item.createdAt) }}
+
+
+
+
diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue
index 4fcf43b..64f483d 100644
--- a/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue
+++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue
@@ -5,8 +5,10 @@ import { ref } from 'vue'
import SkinSiteAccountCard from './SkinSiteAccountCard.vue'
import SkinSiteAnnouncements from './SkinSiteAnnouncements.vue'
+import SkinSiteBugCreateModal from './SkinSiteBugCreateModal.vue'
import SkinSiteBugDetailView from './SkinSiteBugDetailView.vue'
import SkinSiteBugListView from './SkinSiteBugListView.vue'
+import SkinSiteBugNotificationsView from './SkinSiteBugNotificationsView.vue'
import SkinSiteDonationCard from './SkinSiteDonationCard.vue'
import SkinSiteDownloadsView from './SkinSiteDownloadsView.vue'
import SkinSiteLoginModal from './SkinSiteLoginModal.vue'
@@ -32,9 +34,9 @@ const messages = defineMessages({
const YGGDRASIL_URL = 'https://skin.starlight.cool/yggdrasil'
const loginModal = ref
>()
const profileModal = ref>()
-const view = ref<'home' | 'players' | 'downloads' | 'map' | 'review' | 'bugs' | 'bug-detail'>(
- 'home',
-)
+const view = ref<
+ 'home' | 'players' | 'downloads' | 'map' | 'review' | 'bugs' | 'bug-detail' | 'bug-notifications'
+>('home')
const selectedBugId = ref(null)
function openBug(id: number) {
@@ -47,6 +49,16 @@ function backToBugList() {
view.value = 'bugs'
}
+const bugCreateModal = ref>()
+
+function openBugNotifications() {
+ view.value = 'bug-notifications'
+}
+
+function onBugCreated(id: number) {
+ openBug(id)
+}
+
async function copyAddress() {
try {
await navigator.clipboard.writeText(YGGDRASIL_URL)
@@ -64,7 +76,18 @@ async function copyAddress() {
-
+
+
+
diff --git a/apps/app-frontend/src/helpers/skin-site-api.ts b/apps/app-frontend/src/helpers/skin-site-api.ts
index 3a1afc0..5caaca3 100644
--- a/apps/app-frontend/src/helpers/skin-site-api.ts
+++ b/apps/app-frontend/src/helpers/skin-site-api.ts
@@ -133,6 +133,8 @@ interface SendOptions {
method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
type?: RequestType
body?: unknown
+ /** Send a multipart form body (e.g. issue creation with images). */
+ form?: FormData
/** Set to false to skip the Authorization header (e.g. login). */
auth?: boolean
}
@@ -141,13 +143,14 @@ export async function skinSiteRequest