mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ADF-2650] Error with rootDir at insights folder fixed (#3215)
* [ADF-1939] Responsive button to edit reports * [ADF-1939] Removed unused dependencies in material module * [ADF-1939] Edit buttons now use flex layout * [ADF-2650] Report action menu component created * [ADF-2650] Added Button Model * [ADF-2650] Buttons component finished * [ADF-2650] Buttons menu component moved to core library * [ADF-2650] Included index.ts in core/buttons-menu * [ADF-2650] cleaned the module and public api file * Revert "[ADF-2650] Included index.ts in core/buttons-menu" This reverts commit 6bdf1f2f48a30bb4622eb4c000e5318370503710. * [ADF-2650] Applied the peer review changes * [ADF-2650] Comment removed * [ADF-2650] Failing tests fixed * [ADF-2650] Dynamic theming for analytic reports * [ADF-2650] Themes not ap
This commit is contained in:
committed by
Eugenio Romano
parent
2c0e7aa035
commit
b2b3625929
27
lib/core/buttons-menu/buttons-menu.component.html
Normal file
27
lib/core/buttons-menu/buttons-menu.component.html
Normal file
@@ -0,0 +1,27 @@
|
||||
<div fxShow fxHide.xs="true" *ngIf="hasButtons()" id="adf-buttons-menu">
|
||||
<ng-container *ngFor="let button of buttons">
|
||||
<ng-container *ngTemplateOutlet="desktopMenu; context: button"></ng-container>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div fxHide fxShow.xs="true" *ngIf="hasButtons()" id="adf-buttons-menu">
|
||||
<button mat-icon-button [matMenuTriggerFor]="editReportMenu">
|
||||
<mat-icon>more_vert</mat-icon>
|
||||
</button>
|
||||
<mat-menu #editReportMenu="matMenu">
|
||||
<ng-container *ngFor="let button of buttons">
|
||||
<ng-container *ngTemplateOutlet="mobileMenu; context:button"></ng-container>
|
||||
</ng-container>
|
||||
</mat-menu>
|
||||
</div>
|
||||
|
||||
<ng-template #desktopMenu let-handler="handler" let-icon="icon" let-label="label" let-styles="styles" let-id="id" let-isVisible="isVisible">
|
||||
<button mat-button (click)="handler()" id="{{id}}" *ngIf="isVisible()" class="styles">
|
||||
<mat-icon>{{icon}}</mat-icon>
|
||||
</button>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #mobileMenu let-handler="handler" let-icon="icon" let-label="label" let-styles="styles" let-id="id" let-isVisible="isVisible">
|
||||
<button mat-menu-item (click)="handler()" id="{{id}}" *ngIf="isVisible()" class="styles">
|
||||
<mat-icon>{{icon}}</mat-icon><span>{{label | translate}}</span>
|
||||
</button>
|
||||
</ng-template>
|
94
lib/core/buttons-menu/buttons-menu.component.spec.ts
Normal file
94
lib/core/buttons-menu/buttons-menu.component.spec.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { TestBed, async } from '@angular/core/testing';
|
||||
import { ButtonsMenuComponent } from './buttons-menu.component';
|
||||
import { MenuButton } from './menu-button.model';
|
||||
import { MaterialModule } from '../material.module';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
|
||||
/*tslint:disable:ban*/
|
||||
|
||||
fdescribe('ButtonsMenuComponent', () => {
|
||||
|
||||
let fixture;
|
||||
let buttonsMenuComponent: ButtonsMenuComponent;
|
||||
let element: HTMLElement;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
MaterialModule,
|
||||
CoreTestingModule
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ButtonsMenuComponent);
|
||||
element = fixture.nativeElement;
|
||||
buttonsMenuComponent = <ButtonsMenuComponent> fixture.debugElement.componentInstance;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
TestBed.resetTestingModule();
|
||||
});
|
||||
|
||||
it('should hide buttons menu div if buttons input is empty', async(() => {
|
||||
buttonsMenuComponent.buttons = [];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
const buttonsMenuElement = element.querySelector('#adf-buttons-menu');
|
||||
expect(buttonsMenuElement).toBeNull();
|
||||
});
|
||||
}));
|
||||
|
||||
it('should render buttons menu when there is at least one button declared in the buttons array', async(() => {
|
||||
const button = new MenuButton({
|
||||
label: 'button',
|
||||
icon: 'button',
|
||||
id: 'clickMe'
|
||||
});
|
||||
buttonsMenuComponent.buttons = [button];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
const buttonsMenuElement = element.querySelector('#adf-buttons-menu');
|
||||
expect(buttonsMenuElement).not.toBeNull();
|
||||
expect(buttonsMenuElement).toBeDefined();
|
||||
});
|
||||
}));
|
||||
|
||||
it('should call the handler function when button is clicked', async(() => {
|
||||
const button = new MenuButton({
|
||||
label: 'button',
|
||||
icon: 'button',
|
||||
id: 'clickMe'
|
||||
});
|
||||
button.handler = jasmine.createSpy('handler');
|
||||
buttonsMenuComponent.buttons = [button];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
const buttonsMenuElement: HTMLButtonElement = <HTMLButtonElement> element.querySelector('#clickMe');
|
||||
expect(buttonsMenuElement).not.toBeNull();
|
||||
expect(buttonsMenuElement).toBeDefined();
|
||||
buttonsMenuElement.click();
|
||||
fixture.detectChanges();
|
||||
expect(button.handler).toHaveBeenCalled();
|
||||
});
|
||||
}));
|
||||
});
|
38
lib/core/buttons-menu/buttons-menu.component.ts
Normal file
38
lib/core/buttons-menu/buttons-menu.component.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* tslint:disable:component-selector no-access-missing-member no-input-rename */
|
||||
|
||||
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
|
||||
import { MenuButton } from './menu-button.model';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-buttons-action-menu',
|
||||
templateUrl: './buttons-menu.component.html'
|
||||
})
|
||||
|
||||
export class ButtonsMenuComponent implements OnChanges {
|
||||
@Input() buttons: MenuButton[];
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
this.buttons = changes['buttons'].currentValue;
|
||||
}
|
||||
|
||||
hasButtons() {
|
||||
return this.buttons.length > 0 ? true : false;
|
||||
}
|
||||
}
|
39
lib/core/buttons-menu/buttons-menu.module.ts
Normal file
39
lib/core/buttons-menu/buttons-menu.module.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MaterialModule } from '../material.module';
|
||||
import { ButtonsMenuComponent } from './buttons-menu.component';
|
||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
MaterialModule,
|
||||
TranslateModule,
|
||||
FlexLayoutModule
|
||||
],
|
||||
declarations: [
|
||||
ButtonsMenuComponent
|
||||
],
|
||||
exports: [
|
||||
ButtonsMenuComponent
|
||||
]
|
||||
})
|
||||
export class ButtonsMenuModule {}
|
18
lib/core/buttons-menu/index.ts
Normal file
18
lib/core/buttons-menu/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
37
lib/core/buttons-menu/menu-button.model.ts
Normal file
37
lib/core/buttons-menu/menu-button.model.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export type VisibiltyFunction = (obj?: any) => boolean;
|
||||
const defaultValidation = () => true;
|
||||
|
||||
export class MenuButton {
|
||||
label: string;
|
||||
icon: string;
|
||||
handler: any;
|
||||
styles: string;
|
||||
id: string;
|
||||
isVisible: VisibiltyFunction;
|
||||
|
||||
constructor(obj?: any) {
|
||||
this.label = obj.label;
|
||||
this.icon = obj.icon;
|
||||
this.handler = obj.handler;
|
||||
this.styles = obj.styles || null;
|
||||
this.id = obj.id || null;
|
||||
this.isVisible = obj.isVisible ? obj.isVisible : defaultValidation;
|
||||
}
|
||||
}
|
20
lib/core/buttons-menu/public-api.ts
Normal file
20
lib/core/buttons-menu/public-api.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './buttons-menu.component';
|
||||
export * from './menu-button.model';
|
||||
export * from './buttons-menu.module';
|
Reference in New Issue
Block a user