Skip to content

Commit 4248aba

Browse files
authored
Update fast-search-card.js
1 parent 977c868 commit 4248aba

File tree

1 file changed

+150
-10
lines changed

1 file changed

+150
-10
lines changed

dist/fast-search-card.js

Lines changed: 150 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11246,13 +11246,30 @@ class FastSearchCard extends HTMLElement {
1124611246
loadingDiv.style.display = 'block';
1124711247
resultsDiv.style.display = 'none';
1124811248

11249-
// ✅ SAMMLE ALLE RELEVANTEN ACTIONS
11249+
// ✅ SAMMLE ALLE RELEVANTEN ACTIONS (Auto-Discovery + Favoriten)
1125011250
const relatedActions = {
11251-
scenes: this.findRelatedScenes(deviceId, deviceArea),
11252-
scripts: this.findRelatedScripts(deviceId, deviceArea),
11253-
automations: this.findRelatedAutomations(deviceId, deviceArea)
11251+
scenes: [
11252+
...this.findRelatedScenes(deviceId, deviceArea),
11253+
...this.getFavoriteScenes(deviceId)
11254+
],
11255+
scripts: [
11256+
...this.findRelatedScripts(deviceId, deviceArea),
11257+
...this.getFavoriteScripts(deviceId)
11258+
],
11259+
automations: [
11260+
...this.findRelatedAutomations(deviceId, deviceArea),
11261+
...this.getFavoriteAutomations(deviceId)
11262+
]
1125411263
};
1125511264

11265+
// ✅ DUPLIKATE ENTFERNEN
11266+
relatedActions.scenes = this.removeDuplicateActions(relatedActions.scenes);
11267+
relatedActions.scripts = this.removeDuplicateActions(relatedActions.scripts);
11268+
relatedActions.automations = this.removeDuplicateActions(relatedActions.automations);
11269+
11270+
// ✅ FAVORITEN MARKIEREN
11271+
this.markFavoriteActions(relatedActions, deviceId);
11272+
1125611273
console.log('🎯 Found actions:', relatedActions);
1125711274

1125811275
// Update counts
@@ -11272,20 +11289,65 @@ class FastSearchCard extends HTMLElement {
1127211289
}
1127311290
}
1127411291

11275-
// 🎯 UPDATE ACTION COUNTS
11292+
// 🌟 REMOVE DUPLICATE ACTIONS
11293+
removeDuplicateActions(actions) {
11294+
const seen = new Set();
11295+
return actions.filter(action => {
11296+
if (seen.has(action.id)) {
11297+
return false;
11298+
}
11299+
seen.add(action.id);
11300+
return true;
11301+
});
11302+
}
11303+
11304+
// 🌟 MARK FAVORITE ACTIONS
11305+
markFavoriteActions(relatedActions, deviceId) {
11306+
const favorites = this._config.action_favorites[deviceId];
11307+
if (!favorites) return;
11308+
11309+
['scenes', 'scripts', 'automations'].forEach(type => {
11310+
if (favorites[type]) {
11311+
relatedActions[type].forEach(action => {
11312+
if (favorites[type].includes(action.id)) {
11313+
action.isFavorite = true;
11314+
action.favoriteReason = 'manual';
11315+
}
11316+
});
11317+
}
11318+
});
11319+
}
11320+
11321+
// 🌟 UPDATE ACTION COUNTS - Mit Favoriten
1127611322
updateActionCounts(relatedActions, container) {
11277-
const totalCount = Object.values(relatedActions).flat().length;
11323+
const allActions = Object.values(relatedActions).flat();
11324+
const totalCount = allActions.length;
11325+
const favoritesCount = allActions.filter(action => action.isFavorite).length;
1127811326

1127911327
// Update chip counts
1128011328
const allChip = container.querySelector('#actions-all-count');
11329+
const favoritesChip = container.querySelector('#actions-favorites-count');
1128111330
const scenesChip = container.querySelector('#actions-scenes-count');
1128211331
const scriptsChip = container.querySelector('#actions-scripts-count');
1128311332
const automationsChip = container.querySelector('#actions-automations-count');
1128411333

1128511334
if (allChip) allChip.textContent = totalCount;
11335+
if (favoritesChip) {
11336+
favoritesChip.textContent = favoritesCount;
11337+
11338+
// Zeige Favoriten-Chip nur wenn Favoriten vorhanden
11339+
const favoritesButton = favoritesChip.parentElement;
11340+
if (favoritesCount > 0) {
11341+
favoritesButton.style.display = 'inline-block';
11342+
} else {
11343+
favoritesButton.style.display = 'none';
11344+
}
11345+
}
1128611346
if (scenesChip) scenesChip.textContent = relatedActions.scenes.length;
1128711347
if (scriptsChip) scriptsChip.textContent = relatedActions.scripts.length;
1128811348
if (automationsChip) automationsChip.textContent = relatedActions.automations.length;
11349+
11350+
console.log(`📊 Action counts: Total(${totalCount}), Favorites(${favoritesCount})`);
1128911351
}
1129011352

1129111353
// 🎯 FIND RELATED SCENES
@@ -11378,14 +11440,28 @@ class FastSearchCard extends HTMLElement {
1137811440
...relatedActions.scripts,
1137911441
...relatedActions.automations
1138011442
];
11443+
} else if (filter === 'favorites') {
11444+
// 🌟 NUR FAVORITEN anzeigen
11445+
actionsToShow = [
11446+
...relatedActions.scenes.filter(a => a.isFavorite),
11447+
...relatedActions.scripts.filter(a => a.isFavorite),
11448+
...relatedActions.automations.filter(a => a.isFavorite)
11449+
];
1138111450
} else {
1138211451
actionsToShow = relatedActions[filter] || [];
1138311452
}
1138411453

11385-
// Sort by area, then by name
11454+
// Sort: Favoriten zuerst, dann nach Area, dann nach Name
1138611455
actionsToShow.sort((a, b) => {
11456+
// Favoriten zuerst
11457+
if (a.isFavorite && !b.isFavorite) return -1;
11458+
if (!a.isFavorite && b.isFavorite) return 1;
11459+
11460+
// Dann nach Area
1138711461
const areaCompare = (a.area || 'Ohne Raum').localeCompare(b.area || 'Ohne Raum');
1138811462
if (areaCompare !== 0) return areaCompare;
11463+
11464+
// Dann nach Name
1138911465
return a.name.localeCompare(b.name);
1139011466
});
1139111467

@@ -11401,19 +11477,28 @@ class FastSearchCard extends HTMLElement {
1140111477
this.setupActionClickHandlers(container);
1140211478
}
1140311479

11404-
// 🎯 RENDER ACTION ITEM
11480+
// 🎯 RENDER ACTION ITEM - Mit Favoriten-Kennzeichnung
1140511481
renderActionItem(action) {
1140611482
const state = this._hass.states[action.id];
1140711483
const isActive = this.isEntityActive(state);
1140811484
const icon = this.getEntityIcon(action.domain);
1140911485

11486+
// 🌟 Favoriten-Kennzeichnung
11487+
const favoriteClass = action.isFavorite ? 'favorite-action' : '';
11488+
const favoriteIcon = action.isFavorite ? '<div class="favorite-star">⭐</div>' : '';
11489+
const favoriteLabel = action.isFavorite ? '<span class="favorite-label">Favorit</span>' : '';
11490+
1141011491
return `
11411-
<div class="action-item ${isActive ? 'active' : ''}" data-action-id="${action.id}">
11492+
<div class="action-item ${isActive ? 'active' : ''} ${favoriteClass}" data-action-id="${action.id}">
1141211493
<div class="action-icon">${icon}</div>
1141311494
<div class="action-info">
11414-
<div class="action-name">${action.name}</div>
11495+
<div class="action-name">
11496+
${action.name}
11497+
${favoriteIcon}
11498+
</div>
1141511499
<div class="action-meta">
1141611500
<span class="action-type">${this.getActionTypeLabel(action.domain)}</span>
11501+
${favoriteLabel}
1141711502
${action.area !== 'Ohne Raum' ? `<span class="action-area">${action.area}</span>` : ''}
1141811503
</div>
1141911504
</div>
@@ -11478,6 +11563,61 @@ class FastSearchCard extends HTMLElement {
1147811563
console.warn(`❌ Unknown action domain: ${domain}`);
1147911564
}
1148011565
}
11566+
11567+
// 🌟 GET FAVORITE SCENES
11568+
getFavoriteScenes(deviceId) {
11569+
const favorites = this._config.action_favorites[deviceId];
11570+
if (!favorites || !favorites.scenes) return [];
11571+
11572+
return favorites.scenes.map(sceneId => {
11573+
const sceneItem = this.allItems.find(item => item.id === sceneId);
11574+
if (sceneItem) {
11575+
return {
11576+
...sceneItem,
11577+
isFavorite: true,
11578+
favoriteReason: 'manual'
11579+
};
11580+
}
11581+
return null;
11582+
}).filter(Boolean);
11583+
}
11584+
11585+
// 🌟 GET FAVORITE SCRIPTS
11586+
getFavoriteScripts(deviceId) {
11587+
const favorites = this._config.action_favorites[deviceId];
11588+
if (!favorites || !favorites.scripts) return [];
11589+
11590+
return favorites.scripts.map(scriptId => {
11591+
const scriptItem = this.allItems.find(item => item.id === scriptId);
11592+
if (scriptItem) {
11593+
return {
11594+
...scriptItem,
11595+
isFavorite: true,
11596+
favoriteReason: 'manual'
11597+
};
11598+
}
11599+
return null;
11600+
}).filter(Boolean);
11601+
}
11602+
11603+
// 🌟 GET FAVORITE AUTOMATIONS
11604+
getFavoriteAutomations(deviceId) {
11605+
const favorites = this._config.action_favorites[deviceId];
11606+
if (!favorites || !favorites.automations) return [];
11607+
11608+
return favorites.automations.map(autoId => {
11609+
const autoItem = this.allItems.find(item => item.id === autoId);
11610+
if (autoItem) {
11611+
return {
11612+
...autoItem,
11613+
isFavorite: true,
11614+
favoriteReason: 'manual'
11615+
};
11616+
}
11617+
return null;
11618+
}).filter(Boolean);
11619+
}
11620+
1148111621

1148211622

1148311623
initializeTimerTab(item, container) {

0 commit comments

Comments
 (0)