@product7/feedback-sdk 1.5.7 → 1.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/feedback-sdk.js
CHANGED
|
@@ -5160,17 +5160,6 @@
|
|
|
5160
5160
|
this.options = options;
|
|
5161
5161
|
this.element = null;
|
|
5162
5162
|
this._unsubscribe = null;
|
|
5163
|
-
|
|
5164
|
-
this._avatarColors = [
|
|
5165
|
-
{ bg: '#EF4444', text: '#FFFFFF' },
|
|
5166
|
-
{ bg: '#F97316', text: '#FFFFFF' },
|
|
5167
|
-
{ bg: '#F59E0B', text: '#FFFFFF' },
|
|
5168
|
-
{ bg: '#10B981', text: '#FFFFFF' },
|
|
5169
|
-
{ bg: '#06B6D4', text: '#FFFFFF' },
|
|
5170
|
-
{ bg: '#3B82F6', text: '#FFFFFF' },
|
|
5171
|
-
{ bg: '#8B5CF6', text: '#FFFFFF' },
|
|
5172
|
-
{ bg: '#EC4899', text: '#FFFFFF' },
|
|
5173
|
-
];
|
|
5174
5163
|
}
|
|
5175
5164
|
|
|
5176
5165
|
render() {
|
|
@@ -5196,10 +5185,8 @@
|
|
|
5196
5185
|
<div class="messenger-help-header-top">
|
|
5197
5186
|
<h2>Help</h2>
|
|
5198
5187
|
<button class="sdk-close-btn" aria-label="Close">
|
|
5199
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
5200
|
-
<
|
|
5201
|
-
<line x1="200" y1="56" x2="56" y2="200" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/>
|
|
5202
|
-
<line x1="200" y1="200" x2="56" y2="56" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/>
|
|
5188
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
|
|
5189
|
+
<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path>
|
|
5203
5190
|
</svg>
|
|
5204
5191
|
</button>
|
|
5205
5192
|
</div>
|
|
@@ -5227,7 +5214,7 @@
|
|
|
5227
5214
|
const collections = this.state.helpArticles || [];
|
|
5228
5215
|
const searchQuery = (this.state.helpSearchQuery || '').toLowerCase();
|
|
5229
5216
|
|
|
5230
|
-
const
|
|
5217
|
+
const filteredCollections = searchQuery
|
|
5231
5218
|
? collections.filter(
|
|
5232
5219
|
(c) =>
|
|
5233
5220
|
c.title.toLowerCase().includes(searchQuery) ||
|
|
@@ -5235,119 +5222,41 @@
|
|
|
5235
5222
|
)
|
|
5236
5223
|
: collections;
|
|
5237
5224
|
|
|
5238
|
-
|
|
5225
|
+
const headerEl = this.element.querySelector(
|
|
5226
|
+
'.messenger-help-collections-header'
|
|
5227
|
+
);
|
|
5228
|
+
if (headerEl) {
|
|
5229
|
+
headerEl.textContent = `${filteredCollections.length} collections`;
|
|
5230
|
+
}
|
|
5231
|
+
|
|
5232
|
+
if (filteredCollections.length === 0) {
|
|
5239
5233
|
collectionsContainer.innerHTML = this._renderEmptyState();
|
|
5240
5234
|
return;
|
|
5241
5235
|
}
|
|
5242
5236
|
|
|
5243
|
-
collectionsContainer.innerHTML =
|
|
5244
|
-
.map((
|
|
5237
|
+
collectionsContainer.innerHTML = filteredCollections
|
|
5238
|
+
.map((collection) => this._renderCollectionItem(collection))
|
|
5245
5239
|
.join('');
|
|
5246
5240
|
|
|
5247
|
-
// Resolve Phosphor icons async after render
|
|
5248
|
-
filtered.forEach((c) => {
|
|
5249
|
-
if (c.icon && !c.icon.startsWith('<svg')) {
|
|
5250
|
-
const item = collectionsContainer.querySelector(
|
|
5251
|
-
`[data-collection-id="${c.id}"] .messenger-help-collection-icon`
|
|
5252
|
-
);
|
|
5253
|
-
if (item) this._resolvePhosphorIcon(item, c.icon);
|
|
5254
|
-
}
|
|
5255
|
-
});
|
|
5256
|
-
|
|
5257
5241
|
this._attachCollectionEvents();
|
|
5258
5242
|
}
|
|
5259
5243
|
|
|
5260
5244
|
_renderCollectionItem(collection) {
|
|
5261
|
-
const
|
|
5262
|
-
const icon = this._renderIcon(collection.icon);
|
|
5263
|
-
const avatar = this._renderAuthorAvatar(collection);
|
|
5264
|
-
|
|
5245
|
+
const articleCount = collection.articleCount || 0;
|
|
5265
5246
|
return `
|
|
5266
5247
|
<div class="messenger-help-collection" data-collection-id="${collection.id}">
|
|
5267
|
-
<div class="messenger-help-collection-
|
|
5268
|
-
<div class="messenger-help-collection-icon">${icon}</div>
|
|
5248
|
+
<div class="messenger-help-collection-content">
|
|
5269
5249
|
<h3 class="messenger-help-collection-title">${collection.title}</h3>
|
|
5250
|
+
<p class="messenger-help-collection-desc">${collection.description || ''}</p>
|
|
5251
|
+
<span class="messenger-help-collection-count">${articleCount} articles</span>
|
|
5270
5252
|
</div>
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
: ''
|
|
5275
|
-
}
|
|
5276
|
-
<div class="messenger-help-collection-footer">
|
|
5277
|
-
${avatar}
|
|
5278
|
-
<span>${count} ${count === 1 ? 'article' : 'articles'}</span>
|
|
5279
|
-
</div>
|
|
5280
|
-
</div>
|
|
5281
|
-
`;
|
|
5282
|
-
}
|
|
5283
|
-
|
|
5284
|
-
_renderIcon(icon) {
|
|
5285
|
-
if (!icon) return this._getFolderIcon();
|
|
5286
|
-
if (icon.startsWith('<svg')) return icon;
|
|
5287
|
-
// Iconify string — render placeholder, then fetch async
|
|
5288
|
-
return this._getFolderIcon();
|
|
5289
|
-
}
|
|
5290
|
-
|
|
5291
|
-
async _resolvePhosphorIcon(el, iconStr) {
|
|
5292
|
-
// iconStr e.g. "ph:house-line-duotone"
|
|
5293
|
-
const [set, name] = iconStr.split(':');
|
|
5294
|
-
if (!set || !name) return;
|
|
5295
|
-
try {
|
|
5296
|
-
const res = await fetch(`https://api.iconify.design/${set}/${name}.svg`);
|
|
5297
|
-
if (!res.ok) return;
|
|
5298
|
-
const svg = await res.text();
|
|
5299
|
-
if (svg && svg.startsWith('<svg')) {
|
|
5300
|
-
el.innerHTML = svg;
|
|
5301
|
-
const s = el.querySelector('svg');
|
|
5302
|
-
if (s) {
|
|
5303
|
-
s.setAttribute('width', '16');
|
|
5304
|
-
s.setAttribute('height', '16');
|
|
5305
|
-
}
|
|
5306
|
-
}
|
|
5307
|
-
} catch (e) {
|
|
5308
|
-
// keep fallback folder icon
|
|
5309
|
-
}
|
|
5310
|
-
}
|
|
5311
|
-
|
|
5312
|
-
_getFolderIcon() {
|
|
5313
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="20" height="20">
|
|
5314
|
-
<rect width="256" height="256" fill="none"/>
|
|
5315
|
-
<path d="M216,208H40a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H93.33a8,8,0,0,1,4.8,1.6l27.74,20.8a8,8,0,0,0,4.8,1.6H216a8,8,0,0,1,8,8V200A8,8,0,0,1,216,208Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/>
|
|
5316
|
-
</svg>`;
|
|
5317
|
-
}
|
|
5318
|
-
|
|
5319
|
-
_renderAuthorAvatar(collection) {
|
|
5320
|
-
const author = collection.author;
|
|
5321
|
-
if (!author) return '';
|
|
5322
|
-
|
|
5323
|
-
if (author.picture) {
|
|
5324
|
-
return `<img class="messenger-help-author-avatar" src="${author.picture}" alt="${author.name}" />`;
|
|
5325
|
-
}
|
|
5326
|
-
|
|
5327
|
-
const color = this._getAvatarColor(collection.id);
|
|
5328
|
-
const initials = this._getInitials(author.name);
|
|
5329
|
-
return `
|
|
5330
|
-
<div class="messenger-help-author-avatar messenger-help-author-initials"
|
|
5331
|
-
style="background:${color.bg};color:${color.text}">
|
|
5332
|
-
${initials}
|
|
5253
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#000000" viewBox="0 0 256 256" class="messenger-help-collection-arrow">
|
|
5254
|
+
<path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z"></path>
|
|
5255
|
+
</svg>
|
|
5333
5256
|
</div>
|
|
5334
5257
|
`;
|
|
5335
5258
|
}
|
|
5336
5259
|
|
|
5337
|
-
_getAvatarColor(id) {
|
|
5338
|
-
const hash = id.split('').reduce((acc, ch) => acc + ch.charCodeAt(0), 0);
|
|
5339
|
-
return this._avatarColors[hash % this._avatarColors.length];
|
|
5340
|
-
}
|
|
5341
|
-
|
|
5342
|
-
_getInitials(name) {
|
|
5343
|
-
return name
|
|
5344
|
-
.split(' ')
|
|
5345
|
-
.map((n) => n[0])
|
|
5346
|
-
.join('')
|
|
5347
|
-
.toUpperCase()
|
|
5348
|
-
.slice(0, 2);
|
|
5349
|
-
}
|
|
5350
|
-
|
|
5351
5260
|
_renderEmptyState() {
|
|
5352
5261
|
const isSearching = this.state.helpSearchQuery;
|
|
5353
5262
|
|
|
@@ -5418,7 +5327,9 @@
|
|
|
5418
5327
|
}
|
|
5419
5328
|
|
|
5420
5329
|
destroy() {
|
|
5421
|
-
if (this._unsubscribe)
|
|
5330
|
+
if (this._unsubscribe) {
|
|
5331
|
+
this._unsubscribe();
|
|
5332
|
+
}
|
|
5422
5333
|
if (this.element && this.element.parentNode) {
|
|
5423
5334
|
this.element.parentNode.removeChild(this.element);
|
|
5424
5335
|
}
|