DEV: Convert nav-item to gjs (#24076)
This commit is contained in:
parent
9a497d9e22
commit
930dc38500
|
@ -0,0 +1,47 @@
|
||||||
|
/* You might be looking for navigation-item. */
|
||||||
|
import Component from "@glimmer/component";
|
||||||
|
import { LinkTo } from "@ember/routing";
|
||||||
|
import { inject as service } from "@ember/service";
|
||||||
|
import { htmlSafe } from "@ember/template";
|
||||||
|
import getURL from "discourse-common/lib/get-url";
|
||||||
|
import { iconHTML } from "discourse-common/lib/icon-library";
|
||||||
|
import I18n from "discourse-i18n";
|
||||||
|
|
||||||
|
export default class NavItem extends Component {
|
||||||
|
@service router;
|
||||||
|
|
||||||
|
get contents() {
|
||||||
|
const text = this.args.i18nLabel || I18n.t(this.args.label);
|
||||||
|
if (this.args.icon) {
|
||||||
|
return htmlSafe(`${iconHTML(this.args.icon)} ${text}`);
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
get active() {
|
||||||
|
if (!this.args.route) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.args.routeParam && this.router.currentRoute) {
|
||||||
|
return this.router.currentRoute.params.filter === this.args.routeParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.router.isActive(this.args.route);
|
||||||
|
}
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<li class={{if this.active "active"}}>
|
||||||
|
{{#if @routeParam}}
|
||||||
|
<LinkTo
|
||||||
|
@route={{@route}}
|
||||||
|
@model={{@routeParam}}
|
||||||
|
>{{this.contents}}</LinkTo>
|
||||||
|
{{else if @route}}
|
||||||
|
<LinkTo @route={{@route}}>{{this.contents}}</LinkTo>
|
||||||
|
{{else}}
|
||||||
|
<a href={{getURL @path}} data-auto-route="true">{{this.contents}}</a>
|
||||||
|
{{/if}}
|
||||||
|
</li>
|
||||||
|
</template>
|
||||||
|
}
|
|
@ -1,10 +0,0 @@
|
||||||
{{#if this.routeParam}}
|
|
||||||
<LinkTo
|
|
||||||
@route={{this.route}}
|
|
||||||
@model={{this.routeParam}}
|
|
||||||
>{{this.contents}}</LinkTo>
|
|
||||||
{{else if this.route}}
|
|
||||||
<LinkTo @route={{this.route}}>{{this.contents}}</LinkTo>
|
|
||||||
{{else}}
|
|
||||||
<a href={{get-url this.path}} data-auto-route="true">{{this.contents}}</a>
|
|
||||||
{{/if}}
|
|
|
@ -1,36 +0,0 @@
|
||||||
import Component from "@ember/component";
|
|
||||||
/* You might be looking for navigation-item. */
|
|
||||||
import { inject as service } from "@ember/service";
|
|
||||||
import { htmlSafe } from "@ember/template";
|
|
||||||
import { iconHTML } from "discourse-common/lib/icon-library";
|
|
||||||
import discourseComputed from "discourse-common/utils/decorators";
|
|
||||||
import I18n from "discourse-i18n";
|
|
||||||
|
|
||||||
export default Component.extend({
|
|
||||||
tagName: "li",
|
|
||||||
classNameBindings: ["active"],
|
|
||||||
router: service(),
|
|
||||||
|
|
||||||
@discourseComputed("label", "i18nLabel", "icon")
|
|
||||||
contents(label, i18nLabel, icon) {
|
|
||||||
let text = i18nLabel || I18n.t(label);
|
|
||||||
if (icon) {
|
|
||||||
return htmlSafe(`${iconHTML(icon)} ${text}`);
|
|
||||||
}
|
|
||||||
return text;
|
|
||||||
},
|
|
||||||
|
|
||||||
@discourseComputed("route", "router.currentRoute")
|
|
||||||
active(route, currentRoute) {
|
|
||||||
if (!route) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const routeParam = this.routeParam;
|
|
||||||
if (routeParam && currentRoute) {
|
|
||||||
return currentRoute.params["filter"] === routeParam;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.router.isActive(route);
|
|
||||||
},
|
|
||||||
});
|
|
Loading…
Reference in New Issue