Files
InvoiceShelf/resources/scripts/features/company/settings/views/UserProfilePhotoView.vue
Darko Gjorgjijoski 71388ec6a5 Rename resources/scripts-v2 to resources/scripts and drop @v2 alias
Now that the legacy v1 frontend (commit 064bdf53) is gone, the v2 directory is the only frontend and the v2 suffix is just noise. Renames resources/scripts-v2 to resources/scripts via git mv (so git records the move as renames, preserving blame and log --follow), then bulk-rewrites the 152 files that imported via @v2/... to use @/scripts/... instead. The existing @ alias (resources/) covers the new path with no extra config needed.

Drops the now-unused @v2 alias from vite.config.js and points the laravel-vite-plugin entry at resources/scripts/main.ts. Updates the only blade reference (resources/views/app.blade.php) to match. The package.json test script (eslint ./resources/scripts) automatically targets the right place after the rename without any edit.

Verified: npm run build exits clean and the Vite warning lines now reference resources/scripts/plugins/i18n.ts, confirming every import resolved through the new path. git log --follow on any moved file walks back through its scripts-v2 history.
2026-04-07 12:50:16 +02:00

80 lines
2.2 KiB
Vue

<script setup lang="ts">
import { ref } from 'vue'
import { useUserStore } from '../../../../stores/user.store'
import { useNotificationStore } from '../../../../stores/notification.store'
import { useI18n } from 'vue-i18n'
interface AvatarFile {
image: string
}
const userStore = useUserStore()
const notificationStore = useNotificationStore()
const { t } = useI18n()
const isSaving = ref<boolean>(false)
const imgFiles = ref<AvatarFile[]>([])
const avatarFileBlob = ref<File | null>(null)
if (userStore.currentUser?.avatar) {
imgFiles.value.push({ image: userStore.currentUser.avatar as string })
}
function onFileInputChange(_fileName: string, file: File): void {
avatarFileBlob.value = file
}
function onFileInputRemove(): void {
avatarFileBlob.value = null
}
async function updateAvatar(): Promise<void> {
if (!avatarFileBlob.value) return
isSaving.value = true
try {
const formData = new FormData()
formData.append('admin_avatar', avatarFileBlob.value)
await userStore.uploadAvatar(formData)
notificationStore.showNotification({
type: 'success',
message: 'settings.account_settings.updated_message',
})
avatarFileBlob.value = null
} finally {
isSaving.value = false
}
}
</script>
<template>
<form @submit.prevent="updateAvatar">
<BaseSettingCard
:title="$t('settings.account_settings.profile_picture')"
:description="$t('settings.account_settings.profile_picture_description')"
>
<BaseInputGrid class="mt-5">
<BaseInputGroup :label="$t('settings.account_settings.profile_picture')">
<BaseFileUploader
v-model="imgFiles"
:avatar="true"
accept="image/*"
@change="onFileInputChange"
@remove="onFileInputRemove"
/>
</BaseInputGroup>
</BaseInputGrid>
<BaseButton :loading="isSaving" :disabled="isSaving" type="submit" class="mt-6">
<template #left="slotProps">
<BaseIcon v-if="!isSaving" name="ArrowDownOnSquareIcon" :class="slotProps.class" />
</template>
{{ $t('settings.company_info.save') }}
</BaseButton>
</BaseSettingCard>
</form>
</template>