Merge pull request #906 from frappe/mergify/bp/main-hotfix/pr-905

This commit is contained in:
Md Hussain Nagaria 2025-06-08 12:50:42 +05:30 committed by GitHub
commit 8bb84552e0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 42 additions and 50 deletions

View File

@ -1,7 +1,7 @@
<template>
<FileUploader
@success="(file) => setUserImage(file.file_url)"
:validateFile="validateFile"
:validateFile="validateIsImageFile"
>
<template v-slot="{ file, progress, error, uploading, openFileSelector }">
<div class="flex flex-col items-center">
@ -48,17 +48,11 @@
</template>
<script setup>
import { FileUploader } from 'frappe-ui'
import { validateIsImageFile } from '@/utils';
const profile = defineModel()
function setUserImage(url) {
profile.value.user_image = url
}
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg'].includes(extn)) {
return 'Only PNG and JPG images are allowed'
}
}
</script>

View File

@ -17,7 +17,7 @@
<div class="border-b">
<FileUploader
@success="changeContactImage"
:validateFile="validateFile"
:validateFile="validateIsImageFile"
>
<template #default="{ openFileSelector, error }">
<div class="flex flex-col items-start justify-start gap-4 p-5">
@ -184,8 +184,16 @@ import PhoneIcon from '@/components/Icons/PhoneIcon.vue'
import CameraIcon from '@/components/Icons/CameraIcon.vue'
import DealsIcon from '@/components/Icons/DealsIcon.vue'
import DealsListView from '@/components/ListViews/DealsListView.vue'
<<<<<<< HEAD
<<<<<<< HEAD
import { formatDate, timeAgo } from '@/utils'
import { showAddressModal, addressProps } from '@/composables/modals'
=======
import AddressModal from '@/components/Modals/AddressModal.vue'
=======
>>>>>>> 42285dd9 (fix: unused import due to merge conflict)
import { formatDate, timeAgo, validateIsImageFile } from '@/utils'
>>>>>>> c6ad1085 (refactor: DRY up validate image file)
import { getView } from '@/utils/view'
import { getSettings } from '@/stores/settings'
import { getMeta } from '@/stores/meta'
@ -294,13 +302,6 @@ usePageMeta(() => {
}
})
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg', 'jpeg'].includes(extn)) {
return __('Only PNG and JPG images are allowed')
}
}
async function changeContactImage(file) {
await call('frappe.client.set_value', {
doctype: 'Contact',

View File

@ -71,7 +71,7 @@
</div>
<FileUploader
@success="(file) => updateField('image', file.file_url)"
:validateFile="validateFile"
:validateFile="validateIsImageFile"
>
<template #default="{ openFileSelector, error }">
<div class="flex items-center justify-start gap-5 border-b p-5">
@ -344,8 +344,18 @@ import SidePanelLayout from '@/components/SidePanelLayout.vue'
import FieldLayout from '@/components/FieldLayout/FieldLayout.vue'
import SLASection from '@/components/SLASection.vue'
import CustomActions from '@/components/CustomActions.vue'
<<<<<<< HEAD
import { openWebsite, setupCustomizations, copyToClipboard } from '@/utils'
import { showQuickEntryModal, quickEntryProps } from '@/composables/modals'
=======
import {
openWebsite,
setupAssignees,
setupCustomizations,
copyToClipboard,
validateIsImageFile
} from '@/utils'
>>>>>>> c6ad1085 (refactor: DRY up validate image file)
import { getView } from '@/utils/view'
import { getSettings } from '@/stores/settings'
import { sessionStore } from '@/stores/session'
@ -575,13 +585,6 @@ watch(tabs, (value) => {
}
})
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg', 'jpeg'].includes(extn)) {
return __('Only PNG and JPG images are allowed')
}
}
const sections = createResource({
url: 'crm.fcrm.doctype.crm_fields_layout.crm_fields_layout.get_sidepanel_sections',
cache: ['sidePanelSections', 'CRM Lead'],

View File

@ -11,7 +11,7 @@
</header>
</LayoutHeader>
<div v-if="contact.data" class="flex flex-col h-full overflow-hidden">
<FileUploader @success="changeContactImage" :validateFile="validateFile">
<FileUploader @success="changeContactImage" :validateFile="validateIsImageFile">
<template #default="{ openFileSelector, error }">
<div class="flex flex-col items-start justify-start gap-4 p-4">
<div class="flex gap-4 items-center">
@ -167,7 +167,15 @@ import PhoneIcon from '@/components/Icons/PhoneIcon.vue'
import CameraIcon from '@/components/Icons/CameraIcon.vue'
import DealsIcon from '@/components/Icons/DealsIcon.vue'
import DealsListView from '@/components/ListViews/DealsListView.vue'
<<<<<<< HEAD
<<<<<<< HEAD
import { formatDate, timeAgo } from '@/utils'
=======
import AddressModal from '@/components/Modals/AddressModal.vue'
=======
>>>>>>> ab409dfd (fix: yet another unused import due to merge conflict)
import { formatDate, timeAgo, validateIsImageFile } from '@/utils'
>>>>>>> c6ad1085 (refactor: DRY up validate image file)
import { getView } from '@/utils/view'
import { showAddressModal, addressProps } from '@/composables/modals'
import { getSettings } from '@/stores/settings'
@ -266,13 +274,6 @@ usePageMeta(() => {
}
})
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg', 'jpeg'].includes(extn)) {
return __('Only PNG and JPG images are allowed')
}
}
async function changeContactImage(file) {
await call('frappe.client.set_value', {
doctype: 'Contact',

View File

@ -13,7 +13,7 @@
<div v-if="organization.doc" class="flex flex-col h-full overflow-hidden">
<FileUploader
@success="changeOrganizationImage"
:validateFile="validateFile"
:validateFile="validateIsImageFile"
>
<template #default="{ openFileSelector, error }">
<div class="flex flex-col items-start justify-start gap-4 p-4">
@ -164,7 +164,7 @@ import { globalStore } from '@/stores/global'
import { usersStore } from '@/stores/users'
import { statusesStore } from '@/stores/statuses'
import { getView } from '@/utils/view'
import { formatDate, timeAgo } from '@/utils'
import { formatDate, timeAgo, validateIsImageFile } from '@/utils'
import {
Breadcrumbs,
Avatar,
@ -251,13 +251,6 @@ usePageMeta(() => {
}
})
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg', 'jpeg'].includes(extn)) {
return __('Only PNG and JPG images are allowed')
}
}
async function changeOrganizationImage(file) {
await call('frappe.client.set_value', {
doctype: 'CRM Organization',

View File

@ -17,7 +17,7 @@
<div class="border-b">
<FileUploader
@success="changeOrganizationImage"
:validateFile="validateFile"
:validateFile="validateIsImageFile"
>
<template #default="{ openFileSelector, error }">
<div class="flex flex-col items-start justify-start gap-4 p-5">
@ -185,7 +185,7 @@ import { globalStore } from '@/stores/global'
import { usersStore } from '@/stores/users'
import { statusesStore } from '@/stores/statuses'
import { getView } from '@/utils/view'
import { formatDate, timeAgo } from '@/utils'
import { formatDate, timeAgo, validateIsImageFile } from '@/utils'
import {
Tooltip,
Breadcrumbs,
@ -286,13 +286,6 @@ usePageMeta(() => {
}
})
function validateFile(file) {
let extn = file.name.split('.').pop().toLowerCase()
if (!['png', 'jpg', 'jpeg'].includes(extn)) {
return __('Only PNG and JPG images are allowed')
}
}
async function changeOrganizationImage(file) {
await call('frappe.client.set_value', {
doctype: 'CRM Organization',

View File

@ -394,6 +394,13 @@ export function isImage(extention) {
)
}
export function validateIsImageFile(file) {
const extn = file.name.split('.').pop().toLowerCase()
if (!isImage(extn)) {
return __('Only image files are allowed')
}
}
export function getRandom(len = 4) {
let text = ''
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'