Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(offcanvas): added new module offcanvas. #6424

Open
wants to merge 22 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c9e1f69
feat(offcanvas): added offcanvas module for bs5
SvetlanaMuravlova Jan 24, 2022
a2b4b85
feat(offcanvas): updated examples
SvetlanaMuravlova Jan 25, 2022
7a5d8aa
feat(offcanvas): added preview
SvetlanaMuravlova Jan 25, 2022
9a181a1
test commit
SvetlanaMuravlova Jan 26, 2022
ce29600
test commit
SvetlanaMuravlova Jan 26, 2022
22cdbbd
feat(offcanvas): added unite tests
SvetlanaMuravlova Jan 27, 2022
237e933
Merge branch 'offcanvas-module' of github.com:valor-software/ngx-boot…
SvetlanaMuravlova Jan 27, 2022
e9556dc
fix(offcanvas): fix build
SvetlanaMuravlova Jan 27, 2022
798c506
feat(offcanvas): added e2e tests
SvetlanaMuravlova Jan 27, 2022
0d5f48c
fix(offcanvas): fix lint
SvetlanaMuravlova Jan 28, 2022
420a990
fix(offcanvas): updated angular.json
SvetlanaMuravlova Jan 28, 2022
8281d2e
feat(offcanvas): api installation
SvetlanaMuravlova Jan 28, 2022
305d1b2
feat(offcanvas): added injectable for config, renamed some elements, …
SvetlanaMuravlova Feb 18, 2022
a8ad22b
fix(e2e tests): fixed e2e tests after updates
SvetlanaMuravlova Feb 18, 2022
5cdb570
feat(offcanvas): updates in structure
SvetlanaMuravlova Feb 18, 2022
8deb2e3
feat(offcanvas): added text
SvetlanaMuravlova Feb 21, 2022
ffd7987
pass text updates
SvetlanaMuravlova Feb 21, 2022
b479f8a
fix(test): fixed unite tests for offcanvas
SvetlanaMuravlova Mar 15, 2022
c0995f3
Merge branch 'development' into offcanvas-module
SvetlanaMuravlova Apr 8, 2022
4bf4535
merge commit
SvetlanaMuravlova Sep 23, 2022
09612d1
Merge branch 'development' into offcanvas-module
SvetlanaMuravlova Sep 23, 2022
85d15bf
fake commit
SvetlanaMuravlova Dec 5, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,5 @@ scully.log
/schematics/**/*.js
/schematics/**/*.js.map
/schematics/**/*.d.ts

.angular
2 changes: 1 addition & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
"esbenp.prettier-vscode",
"firsttris.vscode-jest-runner"
]
}
}
126 changes: 126 additions & 0 deletions apps/ngx-bootstrap-docs-e2e/src/integration/offcanvas_page_spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import { OffcanvasPo } from '../support/offcanvas.po';

describe('Offcanvas page testing suite', () => {
const offcanvas = new OffcanvasPo();

beforeEach(() => offcanvas.navigateTo());

describe('Basic offcanvas', () => {
const basic = offcanvas.exampleDemosArr.basic;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const backdrop = offcanvas.exampleDemosArr.backdropElement;
const header = offcanvas.exampleDemosArr.headerElement;

it('when user click on button element should appear with default configuration', () => {
offcanvas.checkClass(`${basic} ${element}`, 'show', true);
offcanvas.clickOnBtn(`${basic}`);
offcanvas.checkClass(`${basic} ${element}`, 'show');
offcanvas.checkClass(`body ${backdrop}`, 'show');
offcanvas.checkTextContent(`${basic} ${element} ${header} h5`, '');
offcanvas.clickOnBtn(`${basic} ${element} ${header}`);
offcanvas.checkClass(`${basic} ${element}`, 'show', true);
});
});

describe('Header Title offcanvas', () => {
const headerTitle = offcanvas.exampleDemosArr.headerTitle;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const backdrop = offcanvas.exampleDemosArr.backdropElement;
const header = offcanvas.exampleDemosArr.headerElement;

it('when user click on button element should appear with new header Title', () => {
offcanvas.checkClass(`${headerTitle} ${element}`, 'show', true);
offcanvas.clickOnBtn(`${headerTitle}`);
offcanvas.checkClass(`${headerTitle} ${element}`, 'show');
offcanvas.checkClass(`body ${backdrop}`, 'show');
offcanvas.checkTextContent(`${headerTitle} ${element} ${header} h5`, 'Added Header Title');
offcanvas.clickOnBtn(`${headerTitle} ${element} ${header}`);
offcanvas.checkClass(`${headerTitle} ${element}`, 'show', true);
});
});

describe('Different placement of offcanvas', () => {
const differentPosition = offcanvas.exampleDemosArr.differentPosition;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const header = offcanvas.exampleDemosArr.headerElement;

const POSITION_CLASSNAME = {
start: 'offcanvas-start',
end: 'offcanvas-end',
top: 'offcanvas-top',
bottom: 'offcanvas-bottom'
};

const BUTTON_INDEX = {
start: 0,
end: 1,
top: 2,
bottom: 3
};

const availablePosition = Object.keys(POSITION_CLASSNAME);

it('when user click on button element should appears with new header Title', () => {
offcanvas.checkClass(`${differentPosition} ${element}`, 'show', true);
for (let i = 0; i < availablePosition.length - 1; i++) {
const position = availablePosition[i];
offcanvas.clickOnBtn(`${differentPosition}`, BUTTON_INDEX[position]);
offcanvas.checkClass(`${differentPosition} ${element}`, 'show');
offcanvas.checkClass(`${differentPosition} ${element}`, POSITION_CLASSNAME[position]);
offcanvas.clickOnBtn(`${differentPosition} ${element} ${header}`);
offcanvas.checkClass(`${differentPosition} ${element}`, 'show', true);
}
});
});

describe('Backdrop of offcanvas', () => {
const backdropSelector = offcanvas.exampleDemosArr.backdrop;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const header = offcanvas.exampleDemosArr.headerElement;
const backdrop = offcanvas.exampleDemosArr.backdropElement;

it('when user click on button element should appears with/without backdrop', () => {
offcanvas.checkClass(`${backdropSelector} ${element}`, 'show', true);
offcanvas.clickOnBtn(`${backdropSelector}`, 1);
offcanvas.checkClass(`${backdropSelector} ${element}`, 'show');
offcanvas.checkClass(`body ${backdrop}`, 'show');
offcanvas.clickOnBtn(`${backdropSelector} ${element} ${header}`);
offcanvas.clickOnBtn(`${backdropSelector}`, 0);
offcanvas.clickOnBtn(`${backdropSelector}`, 1);
offcanvas.checkClass(`${backdropSelector} ${element}`, 'show');
offcanvas.checkBackdropInDom(`body ${backdrop}`);
});
});

describe('Events offcanvas', () => {
const eventSelector = offcanvas.exampleDemosArr.triggerEvent;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const header = offcanvas.exampleDemosArr.headerElement;

it('when user opens element should appears true in pre tag, after closing it should be changed on false', () => {
offcanvas.checkClass(`${eventSelector} ${element}`, 'show', true);
offcanvas.clickOnBtn(`${eventSelector}`);
offcanvas.checkTextContent(`${eventSelector} pre`, 'true');
offcanvas.clickOnBtn(`${eventSelector} ${element} ${header}`);
offcanvas.checkTextContent(`${eventSelector} pre`, 'false');
});
});

describe('Ways to use', () => {
const waysToUseSelector = offcanvas.exampleDemosArr.waysToUse;
const element = offcanvas.exampleDemosArr.offcanvasElement;
const header = offcanvas.exampleDemosArr.headerElement;
const backdrop = offcanvas.exampleDemosArr.backdropElement;

it('when user opens element should appears true in pre tag, after closing it should be changed on false', () => {
offcanvas.checkClass(`${waysToUseSelector} ${element}`, 'show', true);
offcanvas.clickOnBtn(`${waysToUseSelector}`, 0);
offcanvas.checkClass(`${waysToUseSelector} ${element}`, 'show');
offcanvas.clickOnBtn(`${waysToUseSelector} ${element} ${header}`);
offcanvas.clickOnBtn(`${waysToUseSelector}`, 1);
offcanvas.checkClass(`${waysToUseSelector} ${element}`, 'show');
offcanvas.clickOnBackdrop(`body ${backdrop}`);
offcanvas.checkClass(`${waysToUseSelector} ${element}`, 'show', true);
});
});
});
44 changes: 44 additions & 0 deletions apps/ngx-bootstrap-docs-e2e/src/support/offcanvas.po.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { BaseComponent } from './base.component';
import Agent = Cypress.Agent;

export class OffcanvasPo extends BaseComponent {
pageUrl = '#/components/offcanvas';
pageTitle = 'Offcanvas';
ghLinkToComponent = 'https://github.com/valor-software/ngx-bootstrap/tree/development/src/offcanvas';

exampleDemosArr = {
basic: 'tab[heading="Overview"] basic',
backdrop: 'tab[heading="Overview"] backdrop',
backdropScrolling: 'tab[heading="Overview"] backdrop-scrolling',
differentPosition: 'tab[heading="Overview"] different-position',
headerTitle: 'tab[heading="Overview"] header-title',
triggerEvent: 'tab[heading="Overview"] trigger-event',
waysToUse: 'tab[heading="Overview"] use-ways',
offcanvasElement: '.offcanvas',
backdropElement: '.offcanvas-backdrop',
headerElement: '.offcanvas-header'
};

checkClass(baseSelector: string, classValue: string, not = false) {
if (!not) {
cy.get(`${baseSelector}`).should('to.have.class', classValue);
return;
}

cy.get(`${baseSelector}`).should('not.have.class', classValue);
}

checkTextContent(baseSelector: string, expectedContent: string) {
cy.get(`${baseSelector}`)
.invoke('text')
.should('to.contains', expectedContent);
}

checkBackdropInDom(baseSelector: string) {
cy.get(`${baseSelector}`).should('not.exist');
}

clickOnBackdrop(baseSelector: string) {
cy.get(`${ baseSelector }`).click();
}
}
6 changes: 6 additions & 0 deletions apps/ngx-bootstrap-docs/src/app/app.routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
SchematicsComponent,
ConstructionPageComponent
} from "@ngx-bootstrap-doc/docs";
import { DemoOffcanvasModule } from "@ngx-bootstrap-doc/offcanvas";

export const routes: Routes = [
{
Expand Down Expand Up @@ -127,6 +128,11 @@ export const routes: Routes = [
path: 'typeahead',
data: ['Typeahead', {moduleName: 'TypeaheadModule', moduleFolder: 'typeahead', sideBarParentTitle: 'components', parentRoute: 'components'}],
loadChildren: () => import('@ngx-bootstrap-doc/typeahead').then(m => m.DemoTypeaheadModule)
},
{
path: 'offcanvas',
data: ['Offcanvas', {moduleName: 'OffcanvasModule', moduleFolder: 'offcanvas', sideBarParentTitle: 'components', parentRoute: 'components'}],
loadChildren: () => import('@ngx-bootstrap-doc/offcanvas').then(m => m.DemoOffcanvasModule)
}
]},
{
Expand Down
4 changes: 2 additions & 2 deletions apps/ngx-bootstrap-docs/src/assets/css/adaptive.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
.header {
position: fixed;
top: 0;
z-index: 1090;
z-index: 1030;
}

.header-dropdown {
z-index: 1090;
z-index: 1030;
}

.modal-backdrop {
Expand Down
1 change: 1 addition & 0 deletions apps/ngx-bootstrap-docs/src/assets/css/style.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
@import "sidebar";
@import "bs-datepicker";
//@import "offcanvas";

/* HEADER */

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/ngx-bootstrap-docs/src/assets/images/macbook_page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
108 changes: 97 additions & 11 deletions apps/ngx-bootstrap-docs/src/ng-api-doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,23 @@ export const ngdoc: any = {
"methods": [],
"properties": []
},
"BackdropComponent": {
"fileName": "src/component-loader/entries-components/backdrop/backdrop.component.ts",
"className": "BackdropComponent",
"description": "<p>This component will be added as background layout for modals if enabled</p>\n",
"selector": "bs-modal-backdrop",
"inputs": [],
"outputs": [],
"properties": [],
"methods": []
},
"BackdropService": {
"fileName": "src/component-loader/entries-components/backdrop/backdrop.service.ts",
"className": "BackdropService",
"description": "",
"methods": [],
"properties": []
},
"ListenOptions": {
"fileName": "src/utils/triggers.ts",
"className": "ListenOptions",
Expand Down Expand Up @@ -1020,6 +1037,11 @@ export const ngdoc: any = {
"type": "boolean",
"description": "<p>sets use adaptive position</p>\n"
},
{
"name": "allowedPositions",
"type": "string[]",
"description": "<p>Set allowed positions of container.</p>\n"
},
{
"name": "clearButtonLabel",
"defaultValue": "Clear",
Expand Down Expand Up @@ -2695,16 +2717,6 @@ export const ngdoc: any = {
],
"properties": []
},
"ModalBackdropComponent": {
"fileName": "src/modal/modal-backdrop.component.ts",
"className": "ModalBackdropComponent",
"description": "<p>This component will be added as background layout for modals if enabled</p>\n",
"selector": "bs-modal-backdrop",
"inputs": [],
"outputs": [],
"properties": [],
"methods": []
},
"ModalContainerComponent": {
"fileName": "src/modal/modal-container.component.ts",
"className": "ModalContainerComponent",
Expand Down Expand Up @@ -2903,6 +2915,80 @@ export const ngdoc: any = {
"methods": [],
"properties": []
},
"OffcanvasContainerComponent": {
"fileName": "src/offcanvas/offcanvas-container.component.ts",
"className": "OffcanvasContainerComponent",
"description": "",
"selector": "offcanvas",
"inputs": [
{
"name": "config",
"type": "OffcanvasConfigType | Partial<OffcanvasConfigType>",
"description": "<p>allows to set offcanvas configuration via element property</p>\n"
}
],
"outputs": [
{
"name": "isOpened",
"description": "<p>Emits event when the opened state changes</p>\n"
}
],
"properties": [],
"methods": []
},
"OffcanvasConfig": {
"fileName": "src/offcanvas/offcanvas.config.ts",
"className": "OffcanvasConfig",
"description": "<p>Default offcanvas configuration</p>\n",
"methods": [],
"properties": [
{
"name": "backdrop",
"defaultValue": "true",
"type": "boolean",
"description": "<p>in default configuration backdrop is available</p>\n"
},
{
"name": "backdropScrolling",
"defaultValue": "true",
"type": "boolean",
"description": "<p>in default configuration backdrop scrolling is enabled</p>\n"
},
{
"name": "headerTitle",
"type": "string",
"description": "<p>default headerTitle is empty</p>\n"
},
{
"name": "placement",
"defaultValue": "start",
"type": "Partial<AvailablePlacement>",
"description": "<p>default placement of element is left side</p>\n"
}
]
},
"OffcanvasDirective": {
"fileName": "src/offcanvas/offcanvas.directive.ts",
"className": "OffcanvasDirective",
"description": "",
"selector": "[offcanvas]",
"exportAs": "offcanvas",
"inputs": [
{
"name": "config",
"type": "OffcanvasConfigType",
"description": "<p>allows to set offcanvas configuration via element property</p>\n"
}
],
"outputs": [
{
"name": "isOpened",
"description": "<p>Emits when the opened state changes</p>\n"
}
],
"properties": [],
"methods": []
},
"ConfigModel": {
"fileName": "src/pagination/models/index.ts",
"className": "ConfigModel",
Expand Down Expand Up @@ -3338,7 +3424,7 @@ export const ngdoc: any = {
"properties": [
{
"name": "popoverId",
"type": "number",
"type": "string",
"description": "<p>unique id popover - use for aria-describedby</p>\n"
}
],
Expand Down
1 change: 1 addition & 0 deletions libs/doc-pages/accordion/src/lib/demos/basic/basic.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
<p>Some content</p>
</accordion-group>
</accordion>

16 changes: 16 additions & 0 deletions libs/doc-pages/offcanvas/.browserslistrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries

# For the full list of supported browsers by the Angular framework, please see:
# https://angular.io/guide/browser-support

# You can see what browsers were selected by your queries by running:
# npx browserslist

last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR
Loading