change message filter icon when filter active

This commit is contained in:
marlon-erler
2026-04-12 11:58:45 +00:00
parent 3806be067e
commit bbc9e327bc
6 changed files with 53 additions and 10 deletions
+24 -3
View File
@@ -2290,6 +2290,10 @@
(chatMessageViewModel) => [chatMessageViewModel.body.value], (chatMessageViewModel) => [chatMessageViewModel.body.value],
new ListState() new ListState()
); );
this.isFilterActive = createProxyState(
[this.searchViewModel.appliedQuery, this.reactionFilter],
() => this.searchViewModel.appliedQuery.value != "" || this.reactionFilter.value != void 0
);
} }
}; };
@@ -3696,7 +3700,14 @@
"toggle:disabled": messagePageViewModel.searchViewModel.cannotApplySearch "toggle:disabled": messagePageViewModel.searchViewModel.cannotApplySearch
}, },
/* @__PURE__ */ createElement("span", { class: "icon" }, "search") /* @__PURE__ */ createElement("span", { class: "icon" }, "search")
)), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("h3", null, coreViewModel2.translations.chatPage.message.messageFilterReactionsHadline), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement("button", { "toggle:selected": noFilter, "on:click": messagePageViewModel.revokeReactionFilter }, coreViewModel2.translations.chatPage.message.messageFilterAllReactionsButton), /* @__PURE__ */ createElement("div", { class: "grid gap message-reaction-filter" }, MessageReactionFilterButton( )), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("h3", null, coreViewModel2.translations.chatPage.message.messageFilterReactionsHadline), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement(
"button",
{
"toggle:selected": noFilter,
"on:click": messagePageViewModel.revokeReactionFilter
},
coreViewModel2.translations.chatPage.message.messageFilterAllReactionsButton
), /* @__PURE__ */ createElement("div", { class: "grid gap message-reaction-filter" }, MessageReactionFilterButton(
messagePageViewModel, messagePageViewModel,
"\u{1F44D}" /* ThumbsUp */ "\u{1F44D}" /* ThumbsUp */
), MessageReactionFilterButton( ), MessageReactionFilterButton(
@@ -3723,6 +3734,10 @@
const ChatMessageViewModelToView = (chatMessageViewModel) => { const ChatMessageViewModelToView = (chatMessageViewModel) => {
return ChatMessage4(coreViewModel2, chatMessageViewModel); return ChatMessage4(coreViewModel2, chatMessageViewModel);
}; };
const filterIcon = createProxyState(
[messagePageViewModel.isFilterActive],
() => messagePageViewModel.isFilterActive.value ? "filter_alt" : "filter_alt_off"
);
const messageContainer = /* @__PURE__ */ createElement( const messageContainer = /* @__PURE__ */ createElement(
"div", "div",
{ {
@@ -3756,7 +3771,13 @@
"on:click": messagePageViewModel.openFilterModal, "on:click": messagePageViewModel.openFilterModal,
"aria-label": coreViewModel2.translations.chatPage.message.filterMessagesButtonAudioLabel "aria-label": coreViewModel2.translations.chatPage.message.filterMessagesButtonAudioLabel
}, },
/* @__PURE__ */ createElement("span", { class: "icon" }, "filter_alt") /* @__PURE__ */ createElement(
"span",
{
class: "icon",
"subscribe:innerText": filterIcon
}
)
))), /* @__PURE__ */ createElement("div", { class: "content" }, messageContainer, /* @__PURE__ */ createElement("div", { id: "composer" }, /* @__PURE__ */ createElement("div", { class: "content-width-constraint" }, /* @__PURE__ */ createElement("div", { class: "input-width-constraint" }, /* @__PURE__ */ createElement( ))), /* @__PURE__ */ createElement("div", { class: "content" }, messageContainer, /* @__PURE__ */ createElement("div", { id: "composer" }, /* @__PURE__ */ createElement("div", { class: "content-width-constraint" }, /* @__PURE__ */ createElement("div", { class: "input-width-constraint" }, /* @__PURE__ */ createElement(
"input", "input",
{ {
@@ -5743,7 +5764,7 @@
this.connectionModel = connectionModel2; this.connectionModel = connectionModel2;
this.chatListModel = chatListModel2; this.chatListModel = chatListModel2;
this.fileTransferModel = fileTransferModel2; this.fileTransferModel = fileTransferModel2;
this.BUILD = "Build 26.04.11.A"; this.BUILD = "Build 26.04.11.B";
// DRAG & DROP // DRAG & DROP
this.draggedObject = new State(void 0); this.draggedObject = new State(void 0);
// SUGGESTIONS // SUGGESTIONS
+12 -1
View File
@@ -19,6 +19,14 @@ export function MessagePage(
return ChatMessage(coreViewModel, chatMessageViewModel); return ChatMessage(coreViewModel, chatMessageViewModel);
}; };
const filterIcon = React.createProxyState(
[messagePageViewModel.isFilterActive],
() =>
messagePageViewModel.isFilterActive.value
? "filter_alt"
: "filter_alt_off",
);
const messageContainer = ( const messageContainer = (
<div <div
id="message-container" id="message-container"
@@ -69,7 +77,10 @@ export function MessagePage(
.filterMessagesButtonAudioLabel .filterMessagesButtonAudioLabel
} }
> >
<span class="icon">filter_alt</span> <span
class="icon"
subscribe:innerText={filterIcon}
></span>
</button> </button>
</span> </span>
</div> </div>
+4 -1
View File
@@ -68,7 +68,10 @@ export function MessageFilterModal<T>(
</h3> </h3>
<div class="flex-column gap"> <div class="flex-column gap">
<button toggle:selected={noFilter} on:click={messagePageViewModel.revokeReactionFilter}> <button
toggle:selected={noFilter}
on:click={messagePageViewModel.revokeReactionFilter}
>
{ {
coreViewModel.translations.chatPage.message coreViewModel.translations.chatPage.message
.messageFilterAllReactionsButton .messageFilterAllReactionsButton
+2 -2
View File
@@ -133,7 +133,7 @@ export default class ChatMessageViewModel {
this.loadData(); this.loadData();
this.messagePageViewModel.reactionFilter.subscribe((content) => { this.messagePageViewModel.reactionFilter.subscribe((content) => {
console.log(content, content==undefined) console.log(content, content == undefined);
if (content == undefined) { if (content == undefined) {
this.isHidden.value = false; this.isHidden.value = false;
return; return;
@@ -168,6 +168,6 @@ export default class ChatMessageViewModel {
} }
this.isHidden.value = count == 0; this.isHidden.value = count == 0;
}) });
} }
} }
+9 -1
View File
@@ -19,6 +19,7 @@ export default class MessagePageViewModel {
searchViewModel: SearchViewModel<ChatMessageViewModel>; searchViewModel: SearchViewModel<ChatMessageViewModel>;
isFilterModalOpen = new React.State<boolean>(false); isFilterModalOpen = new React.State<boolean>(false);
reactionFilter = new React.State<ReactionSymbols | undefined>(undefined); reactionFilter = new React.State<ReactionSymbols | undefined>(undefined);
isFilterActive: React.State<boolean>;
composingMessage: React.State<string> = new React.State(""); composingMessage: React.State<string> = new React.State("");
@@ -98,7 +99,7 @@ export default class MessagePageViewModel {
revokeReactionFilter = (): void => { revokeReactionFilter = (): void => {
this.reactionFilter.value = undefined; this.reactionFilter.value = undefined;
} };
setReactionFilter = (content: ReactionSymbols): void => { setReactionFilter = (content: ReactionSymbols): void => {
this.reactionFilter.value = content; this.reactionFilter.value = content;
@@ -136,5 +137,12 @@ export default class MessagePageViewModel {
(chatMessageViewModel) => [chatMessageViewModel.body.value], (chatMessageViewModel) => [chatMessageViewModel.body.value],
new React.ListState(), new React.ListState(),
); );
this.isFilterActive = React.createProxyState(
[this.searchViewModel.appliedQuery, this.reactionFilter],
() =>
this.searchViewModel.appliedQuery.value != "" ||
this.reactionFilter.value != undefined,
);
} }
} }
+2 -2
View File
@@ -8,8 +8,8 @@ export default class SearchViewModel<T> {
getStringsOfObject: (object: T) => string[]; getStringsOfObject: (object: T) => string[];
// state // state
appliedQuery: React.State<string> = new React.State(""); appliedQuery = new React.State<string>("");
searchInput: React.State<string> = new React.State(""); searchInput = new React.State<string>("");
matchingObjects: React.ListState<T>; matchingObjects: React.ListState<T>;
suggestions: React.ListState<string>; suggestions: React.ListState<string>;