• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Freegle / iznik-nuxt3 / 38f66207-6066-47b4-bc2e-4c69e60182e5

03 Dec 2025 11:02PM UTC coverage: 42.1% (-6.5%) from 48.587%
38f66207-6066-47b4-bc2e-4c69e60182e5

push

circleci

actions-user
Auto-merge production to app-ci-fd (daily scheduled)

Automated merge from production branch after successful tests.

🤖 Automated by GitHub Actions

2800 of 7561 branches covered (37.03%)

Branch coverage included in aggregate %.

248 of 640 new or added lines in 45 files covered. (38.75%)

582 existing lines in 34 files now uncovered.

3448 of 7280 relevant lines covered (47.36%)

22.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/components/ChatMessageImage.vue
1
<template>
2
  <div
3
    :class="{
4
      myImage: messageIsFromCurrentUser,
×
5
      'd-flex': true,
6
      'justify-content-end': messageIsFromCurrentUser,
7
      'justify-content-start': !messageIsFromCurrentUser,
8
    }"
9
  >
10
    <ProfileImage
11
      v-if="!messageIsFromCurrentUser"
12
      :image="chatMessageProfileImage"
13
      :name="chatMessageProfileName"
14
      is-thumbnail
15
      size="sm"
16
      class="mr-1 mb-1 mt-1 inline"
17
    />
×
18
    <OurUploadedImage
19
      v-if="chatmessage.image?.ouruid"
20
      :src="chatmessage.image.ouruid"
21
      :modifiers="chatmessage.image.externalmods"
22
      alt="Chat Photo"
23
      :width="200"
24
      @click="zoom = true"
×
25
    />
26
    <NuxtPicture
27
      v-else-if="chatmessage.image?.externaluid"
28
      format="webp"
29
      fit="cover"
30
      provider="uploadcare"
31
      :src="chatmessage.image.externaluid"
32
      :modifiers="chatmessage.image.externalmods"
33
      alt="Chat Photo"
34
      :width="200"
35
      :height="200"
36
      @click="zoom = true"
×
37
    />
38
    <b-img
39
      v-else-if="chatmessage.image"
×
40
      lazy
41
      fluid
42
      class="chatimage clickme img-thumbnail rounded"
43
      generator-unable-to-provide-required-alt=""
44
      :src="chatmessage.image.path"
45
      @click="zoom = true"
×
46
      @error="imageError"
47
    />
48
    <ProfileImage
49
      v-if="messageIsFromCurrentUser"
×
50
      :image="chatMessageProfileImage"
51
      :name="chatMessageProfileName"
52
      is-thumbnail
53
      size="sm"
54
      class="ml-1 mb-1 mt-1 inline"
55
    />
56
    <b-modal
57
      ref="photoModal"
58
      v-model="zoom"
×
59
      scrollable
60
      size="lg"
61
      no-stacking
62
      ok-only
63
    >
64
      <template #default>
65
        <div class="d-flex justify-content-around">
66
          <NuxtPicture
67
            v-if="chatmessage.image?.externaluid"
68
            format="webp"
69
            fit="cover"
70
            provider="uploadcare"
71
            :src="chatmessage.image.externaluid"
72
            :modifiers="chatmessage.image.externalmods"
73
            alt="Chat Photo"
74
          />
75
          <b-img
76
            v-else-if="chatmessage.image"
×
77
            lazy
78
            fluid
79
            generator-unable-to-provide-required-alt=""
80
            :src="chatmessage.image.path"
81
            @error="imageError"
82
          />
83
        </div>
84
      </template>
85
      <template #footer>
86
        <b-button variant="outline-danger" @click="$emit('delete')">
×
87
          Delete
88
        </b-button>
×
89
        <b-button variant="white" @click="zoom = false"> Close </b-button>
×
90
      </template>
91
    </b-modal>
92
  </div>
93
</template>
94
<script setup>
95
import { ref } from 'vue'
96
import { useChatMessageBase } from '~/composables/useChat'
97
import ProfileImage from '~/components/ProfileImage'
98
import OurUploadedImage from '~/components/OurUploadedImage'
99

100
const props = defineProps({
×
101
  chatid: {
102
    type: Number,
103
    required: true,
104
  },
105
  id: {
106
    type: Number,
107
    required: true,
108
  },
109
  last: {
110
    type: Boolean,
111
    required: false,
112
    default: false,
113
  },
114
  pov: {
115
    type: Number,
116
    required: false,
117
    default: null,
118
  },
119
  highlightEmails: {
120
    type: Boolean,
121
    required: false,
122
    default: false,
123
  },
124
})
125

126
defineEmits(['delete'])
127

128
// State
129
const zoom = ref(false)
×
130

131
// Use the chat base composable
NEW
132
const {
×
133
  chatmessage,
134
  messageIsFromCurrentUser,
135
  chatMessageProfileImage,
136
  chatMessageProfileName,
137
} = useChatMessageBase(props.chatid, props.id, props.pov)
138

139
// Methods
140
function imageError(event) {
×
141
  event.target.src = '/placeholder.jpg'
×
142
}
143
</script>
144
<style scoped>
145
.chatimage {
146
  max-height: 50vh;
147
}
148

149
:deep(.chatMessage) {
150
  border: none !important;
151
}
152

153
:deep(.myImage) {
154
  margin-left: auto;
155
}
156
</style>
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc