DEV: Delete AdminPageHeader and AdminPageSubheader components (#30337)
No longer needed because of https://github.com/discourse/discourse/pull/30146 and there are plugin PRs to remove other traces of it
This commit is contained in:
parent
e4e5db57f0
commit
553784f919
|
@ -1,161 +0,0 @@
|
||||||
import Component from "@glimmer/component";
|
|
||||||
import { tracked } from "@glimmer/tracking";
|
|
||||||
import { hash } from "@ember/helper";
|
|
||||||
import { service } from "@ember/service";
|
|
||||||
import { htmlSafe } from "@ember/template";
|
|
||||||
import { or } from "truth-helpers";
|
|
||||||
import DBreadcrumbsContainer from "discourse/components/d-breadcrumbs-container";
|
|
||||||
import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item";
|
|
||||||
import DropdownMenu from "discourse/components/dropdown-menu";
|
|
||||||
import HorizontalOverflowNav from "discourse/components/horizontal-overflow-nav";
|
|
||||||
import { bind } from "discourse-common/utils/decorators";
|
|
||||||
import { i18n } from "discourse-i18n";
|
|
||||||
import {
|
|
||||||
DangerActionListItem,
|
|
||||||
DangerButton,
|
|
||||||
DefaultActionListItem,
|
|
||||||
DefaultButton,
|
|
||||||
PrimaryActionListItem,
|
|
||||||
PrimaryButton,
|
|
||||||
WrappedActionListItem,
|
|
||||||
WrappedButton,
|
|
||||||
} from "admin/components/admin-page-action-button";
|
|
||||||
import DMenu from "float-kit/components/d-menu";
|
|
||||||
|
|
||||||
const HEADLESS_ACTIONS = ["new", "edit"];
|
|
||||||
|
|
||||||
export default class AdminPageHeader extends Component {
|
|
||||||
@service site;
|
|
||||||
@service router;
|
|
||||||
@tracked shouldDisplay = true;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(...arguments);
|
|
||||||
this.router.on("routeDidChange", this, this.#checkIfShouldDisplay);
|
|
||||||
this.#checkIfShouldDisplay();
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this.router.off("routeDidChange", this, this.#checkIfShouldDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
get title() {
|
|
||||||
if (this.args.titleLabelTranslated) {
|
|
||||||
return this.args.titleLabelTranslated;
|
|
||||||
} else if (this.args.titleLabel) {
|
|
||||||
return i18n(this.args.titleLabel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get description() {
|
|
||||||
if (this.args.descriptionLabelTranslated) {
|
|
||||||
return this.args.descriptionLabelTranslated;
|
|
||||||
} else if (this.args.descriptionLabel) {
|
|
||||||
return i18n(this.args.descriptionLabel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@bind
|
|
||||||
#checkIfShouldDisplay() {
|
|
||||||
if (this.args.shouldDisplay !== undefined) {
|
|
||||||
return (this.shouldDisplay = this.args.shouldDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentPath = this.router._router.currentPath;
|
|
||||||
if (!currentPath) {
|
|
||||||
return (this.shouldDisplay = true);
|
|
||||||
}
|
|
||||||
|
|
||||||
const pathSegments = currentPath.split(".");
|
|
||||||
this.shouldDisplay =
|
|
||||||
!pathSegments.includes("admin") ||
|
|
||||||
!HEADLESS_ACTIONS.find((segment) => pathSegments.includes(segment));
|
|
||||||
}
|
|
||||||
|
|
||||||
<template>
|
|
||||||
{{#if this.shouldDisplay}}
|
|
||||||
<div class="admin-page-header">
|
|
||||||
<div class="admin-page-header__breadcrumbs">
|
|
||||||
<DBreadcrumbsContainer />
|
|
||||||
<DBreadcrumbsItem @path="/admin" @label={{i18n "admin_title"}} />
|
|
||||||
{{yield to="breadcrumbs"}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="admin-page-header__title-row">
|
|
||||||
{{#if this.title}}
|
|
||||||
<h1 class="admin-page-header__title">{{this.title}}</h1>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if (or (has-block "actions") @headerActionComponent)}}
|
|
||||||
<div class="admin-page-header__actions">
|
|
||||||
{{#if this.site.mobileView}}
|
|
||||||
<DMenu
|
|
||||||
@identifier="admin-page-header-mobile-actions"
|
|
||||||
@title={{i18n "more_options"}}
|
|
||||||
@icon="ellipsis-vertical"
|
|
||||||
class="btn-small"
|
|
||||||
>
|
|
||||||
<:content>
|
|
||||||
<DropdownMenu class="admin-page-header__mobile-actions">
|
|
||||||
{{#let
|
|
||||||
(hash
|
|
||||||
Primary=PrimaryActionListItem
|
|
||||||
Default=DefaultActionListItem
|
|
||||||
Danger=DangerActionListItem
|
|
||||||
Wrapped=WrappedActionListItem
|
|
||||||
)
|
|
||||||
as |actions|
|
|
||||||
}}
|
|
||||||
{{#if (has-block "actions")}}
|
|
||||||
{{yield actions to="actions"}}
|
|
||||||
{{else}}
|
|
||||||
<@headerActionComponent @actions={{actions}} />
|
|
||||||
{{/if}}
|
|
||||||
{{/let}}
|
|
||||||
</DropdownMenu>
|
|
||||||
</:content>
|
|
||||||
</DMenu>
|
|
||||||
{{else}}
|
|
||||||
{{#let
|
|
||||||
(hash
|
|
||||||
Primary=PrimaryButton
|
|
||||||
Default=DefaultButton
|
|
||||||
Danger=DangerButton
|
|
||||||
Wrapped=WrappedButton
|
|
||||||
)
|
|
||||||
as |actions|
|
|
||||||
}}
|
|
||||||
{{#if (has-block "actions")}}
|
|
||||||
{{yield actions to="actions"}}
|
|
||||||
{{else}}
|
|
||||||
<@headerActionComponent @actions={{actions}} />
|
|
||||||
{{/if}}
|
|
||||||
{{/let}}
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if this.description}}
|
|
||||||
<p class="admin-page-header__description">
|
|
||||||
{{htmlSafe this.description}}
|
|
||||||
{{#if @learnMoreUrl}}
|
|
||||||
<span class="admin-page-header__learn-more">{{htmlSafe
|
|
||||||
(i18n "learn_more_with_link" url=@learnMoreUrl)
|
|
||||||
}}</span>
|
|
||||||
{{/if}}
|
|
||||||
</p>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#unless @hideTabs}}
|
|
||||||
<div class="admin-nav-submenu">
|
|
||||||
<HorizontalOverflowNav class="admin-nav-submenu__tabs">
|
|
||||||
{{yield to="tabs"}}
|
|
||||||
</HorizontalOverflowNav>
|
|
||||||
</div>
|
|
||||||
{{/unless}}
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</template>
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
import Component from "@glimmer/component";
|
|
||||||
import { hash } from "@ember/helper";
|
|
||||||
import { service } from "@ember/service";
|
|
||||||
import { htmlSafe } from "@ember/template";
|
|
||||||
import DropdownMenu from "discourse/components/dropdown-menu";
|
|
||||||
import { i18n } from "discourse-i18n";
|
|
||||||
import {
|
|
||||||
DangerActionListItem,
|
|
||||||
DangerButton,
|
|
||||||
DefaultActionListItem,
|
|
||||||
DefaultButton,
|
|
||||||
PrimaryActionListItem,
|
|
||||||
PrimaryButton,
|
|
||||||
WrappedActionListItem,
|
|
||||||
WrappedButton,
|
|
||||||
} from "admin/components/admin-page-action-button";
|
|
||||||
import DMenu from "float-kit/components/d-menu";
|
|
||||||
|
|
||||||
export default class AdminPageSubheader extends Component {
|
|
||||||
@service site;
|
|
||||||
|
|
||||||
get title() {
|
|
||||||
if (this.args.titleLabelTranslated) {
|
|
||||||
return this.args.titleLabelTranslated;
|
|
||||||
} else if (this.args.titleLabel) {
|
|
||||||
return i18n(this.args.titleLabel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get description() {
|
|
||||||
if (this.args.descriptionLabelTranslated) {
|
|
||||||
return this.args.descriptionLabelTranslated;
|
|
||||||
} else if (this.args.descriptionLabel) {
|
|
||||||
return i18n(this.args.descriptionLabel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="admin-page-subheader">
|
|
||||||
<div class="admin-page-subheader__title-row">
|
|
||||||
<h2 class="admin-page-subheader__title">{{this.title}}</h2>
|
|
||||||
{{#if (has-block "actions")}}
|
|
||||||
<div class="admin-page-subheader__actions">
|
|
||||||
{{#if this.site.mobileView}}
|
|
||||||
<DMenu
|
|
||||||
@identifier="admin-page-subheader-mobile-actions"
|
|
||||||
@title={{i18n "more_options"}}
|
|
||||||
@icon="ellipsis-vertical"
|
|
||||||
class="btn-small"
|
|
||||||
>
|
|
||||||
<:content>
|
|
||||||
<DropdownMenu class="admin-page-subheader__mobile-actions">
|
|
||||||
{{yield
|
|
||||||
(hash
|
|
||||||
Primary=PrimaryActionListItem
|
|
||||||
Default=DefaultActionListItem
|
|
||||||
Danger=DangerActionListItem
|
|
||||||
Wrapped=WrappedActionListItem
|
|
||||||
)
|
|
||||||
to="actions"
|
|
||||||
}}
|
|
||||||
</DropdownMenu>
|
|
||||||
</:content>
|
|
||||||
</DMenu>
|
|
||||||
{{else}}
|
|
||||||
{{yield
|
|
||||||
(hash
|
|
||||||
Primary=PrimaryButton
|
|
||||||
Default=DefaultButton
|
|
||||||
Danger=DangerButton
|
|
||||||
Wrapped=WrappedButton
|
|
||||||
)
|
|
||||||
to="actions"
|
|
||||||
}}
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if this.description}}
|
|
||||||
<p class="admin-page-subheader__description">
|
|
||||||
{{htmlSafe this.description}}
|
|
||||||
{{#if @learnMoreUrl}}
|
|
||||||
<span class="admin-page-subheader__learn-more">
|
|
||||||
{{htmlSafe
|
|
||||||
(i18n "learn_more_with_link" url=@learnMoreUrl)
|
|
||||||
}}</span>
|
|
||||||
{{/if}}
|
|
||||||
</p>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
}
|
|
|
@ -38,7 +38,7 @@ module("Integration | Component | DPageHeader", function (hooks) {
|
||||||
await render(<template>
|
await render(<template>
|
||||||
<DPageHeader @titleLabel="Wow so cool" @shouldDisplay={{false}} />
|
<DPageHeader @titleLabel="Wow so cool" @shouldDisplay={{false}} />
|
||||||
</template>);
|
</template>);
|
||||||
assert.dom(".admin-page-header").doesNotExist();
|
assert.dom(".d-page-header").doesNotExist();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("renders base breadcrumbs and yielded <:breadcrumbs>", async function (assert) {
|
test("renders base breadcrumbs and yielded <:breadcrumbs>", async function (assert) {
|
||||||
|
|
|
@ -1102,7 +1102,6 @@ a.inline-editable-field {
|
||||||
@import "common/admin/admin_report_table";
|
@import "common/admin/admin_report_table";
|
||||||
@import "common/admin/admin_report_inline_table";
|
@import "common/admin/admin_report_inline_table";
|
||||||
@import "common/admin/admin_section_landing_page";
|
@import "common/admin/admin_section_landing_page";
|
||||||
@import "common/admin/admin_page_header";
|
|
||||||
@import "common/admin/admin_intro";
|
@import "common/admin/admin_intro";
|
||||||
@import "common/admin/mini_profiler";
|
@import "common/admin/mini_profiler";
|
||||||
@import "common/admin/schema_theme_setting_editor";
|
@import "common/admin/schema_theme_setting_editor";
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
.admin-page-header,
|
|
||||||
.admin-page-subheader {
|
|
||||||
&__title-row {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: stretch;
|
|
||||||
margin-bottom: var(--space-2);
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2 {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: var(--font-up-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-page-header__actions {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: flex-end;
|
|
||||||
|
|
||||||
@media (max-width: $mobile-breakpoint) {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
margin-left: var(--space-2);
|
|
||||||
|
|
||||||
@media (max-width: $mobile-breakpoint) {
|
|
||||||
width: 100%;
|
|
||||||
margin-bottom: var(--space-2);
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-nav-submenu {
|
|
||||||
background: transparent;
|
|
||||||
border-bottom: 1px solid var(--primary-low);
|
|
||||||
|
|
||||||
.horizontal-overflow-nav {
|
|
||||||
background: transparent;
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:after {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-pills {
|
|
||||||
width: auto;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-page-header {
|
|
||||||
&__title-row {
|
|
||||||
@media (max-width: $mobile-breakpoint) {
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.admin-page-header__actions {
|
|
||||||
button {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-page-subheader {
|
|
||||||
&__title-row {
|
|
||||||
@media (max-width: $mobile-breakpoint) {
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-page-action-list-item {
|
|
||||||
.btn-primary {
|
|
||||||
color: var(--primary);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -805,7 +805,6 @@
|
||||||
|
|
||||||
.admin-permalinks {
|
.admin-permalinks {
|
||||||
@include breakpoint(tablet) {
|
@include breakpoint(tablet) {
|
||||||
.admin-page-subheader,
|
|
||||||
.d-page-subheader,
|
.d-page-subheader,
|
||||||
.admin-config-area,
|
.admin-config-area,
|
||||||
.admin-config-area__primary-content,
|
.admin-config-area__primary-content,
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module PageObjects
|
|
||||||
module Components
|
|
||||||
# TODO (martin) Delete this after plugins have been updated to use DPageHeader
|
|
||||||
class AdminHeader < PageObjects::Pages::Base
|
|
||||||
def has_tabs?(names)
|
|
||||||
expect(page.all(".d-nav-submenu__tabs a").map(&:text)).to eq(names)
|
|
||||||
end
|
|
||||||
|
|
||||||
def visible?
|
|
||||||
has_css?(".d-page-header")
|
|
||||||
end
|
|
||||||
|
|
||||||
def hidden?
|
|
||||||
has_no_css?(".d-page-header")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue