DEV: Clean up sidebar/filter.gjs (#26673)

The most important change being the replacement of `Input` component with an `<input>` element.
This commit is contained in:
Jarek Radosz 2024-04-18 13:17:21 +02:00 committed by GitHub
parent 2d5d7b5a33
commit bfd6a7b86c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,17 +1,18 @@
import Component from "@glimmer/component";
import { Input } from "@ember/component";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import willDestroy from "@ember/render-modifiers/modifiers/will-destroy";
import { service } from "@ember/service";
import DButton from "discourse/components/d-button";
import dIcon from "discourse-common/helpers/d-icon";
import i18n from "discourse-common/helpers/i18n";
import { bind } from "discourse-common/utils/decorators";
export default class Filter extends Component {
@service sidebarState;
willDestroy() {
super.willDestroy(...arguments);
this.sidebarState.clearFilter();
}
get shouldDisplay() {
return this.sidebarState.currentPanel.filterable;
}
@ -20,20 +21,22 @@ export default class Filter extends Component {
return this.sidebarState.filter.length > 0;
}
@bind
teardown() {
this.sidebarState.clearFilter();
@action
setFilter(event) {
this.sidebarState.filter = event.target.value.toLowerCase();
}
@action
setFilter(event) {
handleEscape(event) {
if (event.key === "Escape") {
event.stopPropagation();
return this.sidebarState.filter.length > 0
? (this.sidebarState.filter = "")
: event.target.blur();
if (this.sidebarState.filter.length > 0) {
this.sidebarState.filter = "";
} else {
event.target.blur();
}
}
this.sidebarState.filter = event.target.value.toLowerCase();
}
@action
@ -44,17 +47,22 @@ export default class Filter extends Component {
<template>
{{#if this.shouldDisplay}}
<div class="sidebar-filter" {{willDestroy this.teardown}}>
<Input
class="sidebar-filter__input"
<div class="sidebar-filter">
<input
{{on "input" this.setFilter}}
{{on "keydown" this.handleEscape}}
value={{this.sidebarState.filter}}
placeholder={{i18n "sidebar.filter"}}
@value={{this.sidebarState.filter}}
{{on "keydown" this.setFilter}}
type="text"
class="sidebar-filter__input"
/>
{{#if this.displayClearFilter}}
<DButton @action={{this.clearFilter}} class="sidebar-filter__clear">
{{dIcon "times"}}
</DButton>
<DButton
@action={{this.clearFilter}}
@icon="times"
class="sidebar-filter__clear"
/>
{{/if}}
</div>
{{/if}}