Skip to content
This repository was archived by the owner on Aug 7, 2020. It is now read-only.

Commit 5663a03

Browse files
rfougierAxelPeter
authored andcommitted
feat(oui-page-header): create page-header component (#204)
* feat(oui-page-header): create component * feat(oui-page-header): add test
1 parent a67c234 commit 5663a03

File tree

8 files changed

+126
-1
lines changed

8 files changed

+126
-1
lines changed

packages/oui-angular/src/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import "@oui-angular/oui-stepper/src";
3030
import "@oui-angular/oui-skeleton/src";
3131
import "@oui-angular/oui-clipboard/src";
3232
import "@oui-angular/oui-slideshow/src";
33+
import "@oui-angular/oui-page-header/src";
3334

3435
angular.module("oui", [
3536
"oui.button",
@@ -63,5 +64,6 @@ angular.module("oui", [
6364
"oui.stepper",
6465
"oui.skeleton",
6566
"oui.clipboard",
66-
"oui.slideshow"
67+
"oui.slideshow",
68+
"oui.page-header"
6769
]);

packages/oui-angular/src/index.spec.js

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ loadTests(require.context("../../oui-stepper/src/", true, /.*((\.spec)|(index))$
3131
loadTests(require.context("../../oui-skeleton/src/", true, /.*((\.spec)|(index))$/));
3232
loadTests(require.context("../../oui-clipboard/src/", true, /.*((\.spec)|(index))$/));
3333
loadTests(require.context("../../oui-slideshow/src/", true, /.*((\.spec)|(index))$/));
34+
loadTests(require.context("../../oui-page-header/src/", true, /.*((\.spec)|(index))$/));
3435

3536
function loadTests (context) {
3637
context.keys().forEach(context);

packages/oui-page-header/README.md

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Page Header
2+
3+
<component-status cx-design="complete" ux="rc"></component-status>
4+
5+
## Usage
6+
7+
### Default
8+
9+
```html:preview
10+
<oui-page-header heading="My title"></oui-page-header>
11+
```
12+
13+
```html:preview
14+
<oui-page-header heading="My title" description="My subtitle"></oui-page-header>
15+
```
16+
17+
18+
### With guide
19+
20+
```html:preview
21+
<oui-page-header heading="My title" description="My subtitle"></oui-page-header>
22+
```
23+
24+
25+
### With tabs
26+
27+
```html:preview
28+
<oui-page-header heading="My title" description="My subtitle"></oui-page-header>
29+
```
30+
31+
32+
## API
33+
34+
| Attribute | Type | Binding | One-time Binding | Values | Default | Description |
35+
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
36+
| heading | string | @? | true | | | title of the header |
37+
| description | string | @? | true | | | subtitle of the header |

packages/oui-page-header/src/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import PageHeader from "./page-header.component";
2+
3+
angular.module("oui.page-header", [])
4+
.component("ouiPageHeader", PageHeader);
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
describe("ouiPageHeader", () => {
2+
let TestUtils;
3+
4+
beforeEach(angular.mock.module("oui.page-header"));
5+
beforeEach(angular.mock.module("oui.test-utils"));
6+
7+
beforeEach(inject((_TestUtils_) => {
8+
TestUtils = _TestUtils_;
9+
}));
10+
11+
function getTitleElement (element) {
12+
return element[0].querySelector(".oui-page-header__title");
13+
}
14+
15+
function getDescriptionElement (element) {
16+
return element[0].querySelector(".oui-page-header__description");
17+
}
18+
19+
describe("Component", () => {
20+
it("should display page-header with title only", () => {
21+
const element = TestUtils.compileTemplate("<oui-page-header heading=\"title\"></oui-page-header>");
22+
23+
const titleElement = getTitleElement(element);
24+
expect(angular.element(titleElement).html()).toBe("title");
25+
});
26+
27+
it("should display page-header with title and subtitle", () => {
28+
const element = TestUtils.compileTemplate("<oui-page-header heading=\"title\" description=\"subtitle\"></oui-page-header>");
29+
30+
const titleElement = getTitleElement(element);
31+
const subtitleElement = getDescriptionElement(element);
32+
expect(angular.element(titleElement).html()).toBe("title");
33+
expect(angular.element(subtitleElement).html()).toBe("subtitle");
34+
});
35+
});
36+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import controller from "./page-header.controller.js";
2+
import template from "./page-header.html";
3+
4+
export default {
5+
template,
6+
controller,
7+
bindings: {
8+
heading: "@?",
9+
description: "@?"
10+
},
11+
transclude: {
12+
guide: "?ouiGuide",
13+
tabs: "?ouiHeaderTabs"
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export default class {
2+
constructor ($attrs, $transclude) {
3+
"ngInject";
4+
5+
this.$attrs = $attrs;
6+
this.$transclude = $transclude;
7+
}
8+
9+
$onInit () {
10+
this.transcludeGuide = this.$transclude.isSlotFilled("guide");
11+
this.transcludeTabs = this.$transclude.isSlotFilled("tabs");
12+
}
13+
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<header class="oui-page-header">
2+
<div class="oui-page-header__container">
3+
<div class="oui-page-header__content">
4+
<h1 class="oui-page-header__title" ng-bind="::$ctrl.heading"></h1>
5+
<h2 class="oui-page-header__description"
6+
ng-if="::!!$ctrl.description"
7+
ng-bind="::$ctrl.description"></h2>
8+
</div>
9+
<div class="oui-page-header__guide"
10+
ng-if="$ctrl.transcludeGuide"
11+
ng-transclude="guide"></div>
12+
</div>
13+
<div class="oui-page-header__tabs"
14+
ng-if="$ctrl.transcludeTabs"
15+
ng-transclude="tabs"></div>
16+
</header>

0 commit comments

Comments
 (0)