Skip to content

Commit

Permalink
feat(components/pages): add helpKey input to the page component (#2739
Browse files Browse the repository at this point in the history
)
  • Loading branch information
Blackbaud-TrevorBurch authored Sep 19, 2024
1 parent b2116d3 commit ed3f518
Show file tree
Hide file tree
Showing 12 changed files with 138 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<sky-page layout="list">
<sky-page layout="list" helpKey="demo-help">
<sky-page-header pageTitle="Dashboards" />
<sky-page-content>
<app-list-page-content />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import {
SkyHelpTestingController,
SkyHelpTestingModule,
} from '@skyux/core/testing';
import { SkyPageHarness } from '@skyux/pages/testing';

import { DemoComponent } from './demo.component';
Expand All @@ -9,18 +13,20 @@ describe('List page list layout demo', () => {
async function setupTest(): Promise<{
pageHarness: SkyPageHarness;
fixture: ComponentFixture<DemoComponent>;
helpController: SkyHelpTestingController;
}> {
const fixture = TestBed.createComponent(DemoComponent);

const loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
const pageHarness = await loader.getHarness(SkyPageHarness);
const helpController = TestBed.inject(SkyHelpTestingController);

return { pageHarness, fixture };
return { pageHarness, fixture, helpController };
}

beforeEach(() => {
TestBed.configureTestingModule({
imports: [DemoComponent, NoopAnimationsModule],
imports: [DemoComponent, SkyHelpTestingModule, NoopAnimationsModule],
});
});

Expand All @@ -39,4 +45,10 @@ describe('List page list layout demo', () => {
'Dashboards',
);
});

it('should have the correct help key', async () => {
const { helpController } = await setupTest();

helpController.expectCurrentHelpKey('demo-help');
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<sky-page layout="tabs">
<sky-page layout="tabs" helpKey="demo-help">
<sky-page-header pageTitle="Contacts" />
<sky-page-content>
<app-list-page-content />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import {
SkyHelpTestingController,
SkyHelpTestingModule,
} from '@skyux/core/testing';
import { SkyPageHarness } from '@skyux/pages/testing';

import { DemoComponent } from './demo.component';
Expand All @@ -10,18 +14,25 @@ describe('List page tabs layout demo', () => {
async function setupTest(): Promise<{
pageHarness: SkyPageHarness;
fixture: ComponentFixture<DemoComponent>;
helpController: SkyHelpTestingController;
}> {
const fixture = TestBed.createComponent(DemoComponent);

const loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
const pageHarness = await loader.getHarness(SkyPageHarness);
const helpController = TestBed.inject(SkyHelpTestingController);

return { pageHarness, fixture };
return { pageHarness, fixture, helpController };
}

beforeEach(() => {
TestBed.configureTestingModule({
imports: [DemoComponent, NoopAnimationsModule, RouterTestingModule],
imports: [
DemoComponent,
SkyHelpTestingModule,
NoopAnimationsModule,
RouterTestingModule,
],
});
});

Expand All @@ -40,4 +51,10 @@ describe('List page tabs layout demo', () => {
'Contacts',
);
});

it('should have the correct help key', async () => {
const { helpController } = await setupTest();

helpController.expectCurrentHelpKey('demo-help');
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<sky-page layout="blocks">
<sky-page layout="blocks" helpKey="demo-help">
<sky-page-header
pageTitle="$500 pledge"
[parentLink]="{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import {
SkyHelpTestingController,
SkyHelpTestingModule,
} from '@skyux/core/testing';
import { SkyPageHarness } from '@skyux/pages/testing';

import { DemoComponent } from './demo.component';
Expand All @@ -10,18 +14,25 @@ describe('Record page blocks layout demo', () => {
async function setupTest(): Promise<{
pageHarness: SkyPageHarness;
fixture: ComponentFixture<DemoComponent>;
helpController: SkyHelpTestingController;
}> {
const fixture = TestBed.createComponent(DemoComponent);

const loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
const pageHarness = await loader.getHarness(SkyPageHarness);
const helpController = TestBed.inject(SkyHelpTestingController);

return { pageHarness, fixture };
return { pageHarness, fixture, helpController };
}

beforeEach(() => {
TestBed.configureTestingModule({
imports: [DemoComponent, NoopAnimationsModule, RouterTestingModule],
imports: [
DemoComponent,
SkyHelpTestingModule,
NoopAnimationsModule,
RouterTestingModule,
],
});
});

Expand All @@ -46,4 +57,10 @@ describe('Record page blocks layout demo', () => {
'Pledges',
);
});

it('should have the correct help key', async () => {
const { helpController } = await setupTest();

helpController.expectCurrentHelpKey('demo-help');
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<sky-page layout="tabs">
<sky-page layout="tabs" helpKey="demo-help">
<sky-page-header pageTitle="Charlene Conners">
<sky-page-header-alerts>
<sky-alert alertType="warning" descriptionType="warning">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import {
SkyHelpTestingController,
SkyHelpTestingModule,
} from '@skyux/core/testing';
import { SkyPageHarness } from '@skyux/pages/testing';

import { DemoComponent } from './demo.component';
Expand All @@ -10,18 +14,25 @@ describe('Record page tabs layout demo', () => {
async function setupTest(): Promise<{
pageHarness: SkyPageHarness;
fixture: ComponentFixture<DemoComponent>;
helpController: SkyHelpTestingController;
}> {
const fixture = TestBed.createComponent(DemoComponent);

const loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
const pageHarness = await loader.getHarness(SkyPageHarness);
const helpController = TestBed.inject(SkyHelpTestingController);

return { pageHarness, fixture };
return { pageHarness, fixture, helpController };
}

beforeEach(() => {
TestBed.configureTestingModule({
imports: [DemoComponent, NoopAnimationsModule, RouterTestingModule],
imports: [
DemoComponent,
SkyHelpTestingModule,
NoopAnimationsModule,
RouterTestingModule,
],
});
});

Expand All @@ -42,4 +53,10 @@ describe('Record page tabs layout demo', () => {
'Charlene Conners',
);
});

it('should have the correct help key', async () => {
const { helpController } = await setupTest();

helpController.expectCurrentHelpKey('demo-help');
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<sky-page layout="fit">
<sky-page layout="fit" helpKey="demo-help">
<sky-page-header
pageTitle="Expenses to approve"
[parentLink]="{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import {
SkyHelpTestingController,
SkyHelpTestingModule,
} from '@skyux/core/testing';
import { SkyPageHarness } from '@skyux/pages/testing';

import { DemoComponent } from './demo.component';
Expand All @@ -10,18 +14,25 @@ describe('Split view page fit layout demo', () => {
async function setupTest(): Promise<{
pageHarness: SkyPageHarness;
fixture: ComponentFixture<DemoComponent>;
helpController: SkyHelpTestingController;
}> {
const fixture = TestBed.createComponent(DemoComponent);

const loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
const pageHarness = await loader.getHarness(SkyPageHarness);
const helpController = TestBed.inject(SkyHelpTestingController);

return { pageHarness, fixture };
return { pageHarness, fixture, helpController };
}

beforeEach(() => {
TestBed.configureTestingModule({
imports: [DemoComponent, NoopAnimationsModule, RouterTestingModule],
imports: [
DemoComponent,
SkyHelpTestingModule,
NoopAnimationsModule,
RouterTestingModule,
],
});
});

Expand All @@ -32,4 +43,10 @@ describe('Split view page fit layout demo', () => {

await expectAsync(pageHarness.getLayout()).toBeResolvedTo('fit');
});

it('should have the correct help key', async () => {
const { helpController } = await setupTest();

helpController.expectCurrentHelpKey('demo-help');
});
});
29 changes: 27 additions & 2 deletions libs/components/pages/src/lib/modules/page/page.component.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { expect } from '@skyux-sdk/testing';
import { SkyLayoutHostService } from '@skyux/core';
import { SkyHelpService, SkyLayoutHostService } from '@skyux/core';
import { SkyHelpTestingModule } from '@skyux/core/testing';

import { SkyPageComponent } from './page.component';
import { SkyPageModule } from './page.module';
Expand All @@ -27,7 +28,7 @@ describe('Page component', () => {

beforeEach(() => {
TestBed.configureTestingModule({
imports: [SkyPageModule],
imports: [SkyPageModule, SkyHelpTestingModule],
});

styleEl = document.createElement('style');
Expand Down Expand Up @@ -84,4 +85,28 @@ describe('Page component', () => {

fixture.destroy();
});

it(`should notify the help service that a page's default help key has been set when the 'helpKey' input is set`, () => {
const helpService = TestBed.inject(SkyHelpService);
const updateHelpSpy = spyOn(helpService, 'updateHelp').and.stub();

const fixture = TestBed.createComponent(SkyPageComponent);
fixture.detectChanges();

expect(updateHelpSpy).not.toHaveBeenCalled();

fixture.componentInstance.helpKey = 'test-help';
fixture.detectChanges();

expect(updateHelpSpy).toHaveBeenCalledWith({
pageDefaultHelpKey: 'test-help',
});

fixture.destroy();

expect(updateHelpSpy).toHaveBeenCalledWith({
pageDefaultHelpKey: undefined,
});
expect(updateHelpSpy).toHaveBeenCalledTimes(2);
});
});
17 changes: 16 additions & 1 deletion libs/components/pages/src/lib/modules/page/page.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import {
OnInit,
inject,
} from '@angular/core';
import { SkyLayoutHostForChildArgs, SkyLayoutHostService } from '@skyux/core';
import {
SkyHelpService,
SkyLayoutHostForChildArgs,
SkyLayoutHostService,
} from '@skyux/core';

import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
Expand Down Expand Up @@ -44,6 +48,14 @@ export class SkyPageComponent implements OnInit, OnDestroy {
this.#updateCssClass();
}

/**
* A help key that identifies the page's default [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help) content to display.
*/
@Input()
public set helpKey(value: string | undefined) {
this.#helpSvc?.updateHelp({ pageDefaultHelpKey: value });
}

@HostBinding('class')
public cssClass = LAYOUT_CLASS_DEFAULT;

Expand All @@ -54,6 +66,7 @@ export class SkyPageComponent implements OnInit, OnDestroy {

#themeAdapter = inject(SkyPageThemeAdapterService);
#layoutHostSvc = inject(SkyLayoutHostService);
#helpSvc = inject(SkyHelpService, { optional: true });

public ngOnInit(): void {
this.#themeAdapter.addTheme();
Expand All @@ -71,6 +84,8 @@ export class SkyPageComponent implements OnInit, OnDestroy {

this.#ngUnsubscribe.next();
this.#ngUnsubscribe.complete();

this.#helpSvc?.updateHelp({ pageDefaultHelpKey: undefined });
}

#updateCssClass(): void {
Expand Down

0 comments on commit ed3f518

Please sign in to comment.