diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteProfileView.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteProfileView.vue index 3162ca4..5858458 100644 --- a/apps/app-frontend/src/components/ui/skin-site/SkinSiteProfileView.vue +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteProfileView.vue @@ -88,6 +88,18 @@ const messages = defineMessages({ id: 'app.skin-site.profile-view.mojang-toggled', defaultMessage: 'Mojang status updated.', }, + deleteConfirm: { + id: 'app.skin-site.profile-view.delete-confirm', + defaultMessage: 'Delete this player? This cannot be undone.', + }, + mojangConfirm: { + id: 'app.skin-site.profile-view.mojang-confirm', + defaultMessage: 'Toggle Mojang status for this player?', + }, + renameConfirm: { + id: 'app.skin-site.profile-view.rename-confirm', + defaultMessage: 'Rename this player?', + }, }) const selectedId = ref(null) const texture = ref({}) @@ -151,14 +163,18 @@ const showAdd = ref(false) const newName = ref('') const renamingId = ref(null) const renameValue = ref('') +const confirmingRename = ref(false) const confirmingDeleteId = ref(null) +const confirmingMojangId = ref(null) function resetDialogs() { showAdd.value = false newName.value = '' renamingId.value = null renameValue.value = '' + confirmingRename.value = false confirmingDeleteId.value = null + confirmingMojangId.value = null } async function submitAdd() { @@ -182,11 +198,22 @@ async function submitAdd() { function startRename(player: { uuid: string; name: string }) { renamingId.value = player.uuid renameValue.value = player.name + confirmingRename.value = false +} + +function requestRename() { + const name = renameValue.value.trim() + if (!renamingId.value || !name) return + confirmingRename.value = true } async function submitRename() { const name = renameValue.value.trim() if (!renamingId.value || !name || busy.value) return + if (!confirmingRename.value) { + confirmingRename.value = true + return + } busy.value = 'rename' try { const res = await skinSiteRenamePlayer(renamingId.value, name) @@ -201,8 +228,17 @@ async function submitRename() { } } +function requestDelete(uuid: string) { + if (busy.value) return + confirmingDeleteId.value = uuid +} + async function submitDelete(uuid: string) { if (busy.value) return + if (confirmingDeleteId.value !== uuid) { + confirmingDeleteId.value = uuid + return + } busy.value = 'delete' try { const res = await skinSiteDeletePlayer(uuid) @@ -249,8 +285,17 @@ async function clearDefaultPlayer() { } } +function requestToggleMojang(uuid: string) { + if (busy.value) return + confirmingMojangId.value = uuid +} + async function toggleMojang(uuid: string) { if (busy.value) return + if (confirmingMojangId.value !== uuid) { + confirmingMojangId.value = uuid + return + } busy.value = 'mojang' try { const res = await skinSiteSwitchMojang(uuid) @@ -377,6 +422,39 @@ watch(signedIn, (value) => { +
+ +

+ {{ formatMessage(messages.renameConfirm) }} +

+
+ + +
+
+
{{ formatMessage(messages.loading) }} @@ -403,6 +481,12 @@ watch(signedIn, (value) => { class="!rounded-md" /> {{ player.name }} + + {{ formatMessage(messages.isDefault) }} + Mojang @@ -411,6 +495,7 @@ watch(signedIn, (value) => { v-if="defaultUuid === player.uuid" type="button" class="rounded px-1.5 py-0.5 text-[10px] font-semibold text-brand" + :disabled="busy !== null" @click.stop="clearDefaultPlayer" > {{ formatMessage(messages.clearDefault) }} @@ -419,6 +504,7 @@ watch(signedIn, (value) => { v-else type="button" class="rounded px-1.5 py-0.5 text-[10px] font-semibold text-secondary hover:bg-bg" + :disabled="busy !== null" @click.stop="setDefaultPlayer(player.uuid)" > {{ formatMessage(messages.setDefault) }} @@ -426,20 +512,67 @@ watch(signedIn, (value) => { + + +
+
+ {{ formatMessage(messages.deleteConfirm) }} +
+
+ {{ formatMessage(messages.mojangConfirm) }} + +
@@ -451,10 +584,37 @@ watch(signedIn, (value) => {