many fixes and improvements - rework for modules/ and common/

feat(emailer): add Postmark and Resend providers
This commit is contained in:
2025-06-06 12:21:43 -04:00
parent 31ba18fa8d
commit 25b94d3e02
313 changed files with 6586 additions and 18260 deletions

View File

@@ -87,16 +87,21 @@
<!-- Contact Information Section -->
<div v-if="phoneNumber || email" class="contact-info mt-6">
<!-- Phone Number -->
<div v-if="phoneNumber" class="contact-item">
{{ phoneNumber }}
<div v-if="phoneNumber" class="contact-capsule" @click="callPhone">
<v-icon :icon="mdiPhone" class="contact-icon" />
<span class="contact-text">{{ phoneNumber }}</span>
</div>
<!-- Email -->
<div v-if="email" class="contact-item">
{{ email }}
<div v-if="email" class="contact-capsule" @click="sendEmail">
<v-icon :icon="mdiEmail" class="contact-icon" />
<span class="contact-text">{{ email }}</span>
</div>
</div>
</div>
</div>
</div>
@@ -112,12 +117,14 @@ import { buildEmbedUrl, isValidYouTubeUrlOrId, extractVideoId } from '@/utils/yo
import AlbumEditor from "@/views/creators/AlbumEditor.vue";
import AlbumView from "@/views/creators/AlbumView.vue";
import AlbumViewer from './AlbumViewer.vue';
import { mdiPencil, mdiCheck, mdiClose } from '@mdi/js';
import { useToast } from 'vue-toastification';
import { mdiPencil, mdiCheck, mdiClose, mdiPhone, mdiEmail } from '@mdi/js';
const { t } = useI18n();
const creatorProfileStore = useCreatorProfileStore();
const brandingStore = useBrandingStore();
const client = useClient();
const toast = useToast();
const isLoading = ref(true);
const isSaving = ref(false);
@@ -143,6 +150,21 @@ const editableVideoUrl = ref("");
const videoUrlError = ref("");
const descriptionError = ref("");
function callPhone() {
if (phoneNumber.value) {
toast.info('Calling your contact');
// Remove formatting and create tel: link
const cleanPhone = phoneNumber.value.replace(/\D/g, '');
window.location.href = `tel:+1${cleanPhone}`;
}
}
function sendEmail() {
if (email.value) {
window.location.href = `mailto:${email.value}`;
}
}
// Computed property to check if we can save
const canSave = computed(() => {
if (isSaving.value == true) { return false; }
@@ -400,11 +422,13 @@ function cancelEdit() {
// Désactiver le mode édition
isEditMode.value = false;
}
// Add this function to handle photo clicks
function handlePhotoClick(index) {
selectedPhotoIndex.value = index;
showAlbumViewer.value = true;
}
</script>
<style scoped>
@@ -446,12 +470,27 @@ function handlePhotoClick(index) {
}
.contact-info {
@apply text-lg text-justify whitespace-pre-line;
@apply flex flex-col items-center;
@apply flex flex-col items-center gap-3;
}
.contact-item {
@apply text-lg text-center mb-2;
.contact-capsule {
@apply flex items-center gap-2 px-2 py-1 bg-hSurface ;
@apply rounded-xl cursor-pointer transition-all duration-200;
@apply hover:shadow-md min-w-fit;
@apply border border-hutopyPrimary;
}
.contact-capsule:hover {
@apply transform scale-105;
}
.contact-icon {
@apply text-hutopyPrimary;
@apply text-xl
}
.contact-text {
@apply text-hOnSurface font-medium text-base;
}
/* Formatting styles for description */