aboutsummaryrefslogtreecommitdiffstats
path: root/src/angular/buttons
diff options
context:
space:
mode:
Diffstat (limited to 'src/angular/buttons')
-rw-r--r--src/angular/buttons/button.component.html.ts15
-rw-r--r--src/angular/buttons/button.component.ts62
-rw-r--r--src/angular/buttons/buttons.module.ts21
3 files changed, 98 insertions, 0 deletions
diff --git a/src/angular/buttons/button.component.html.ts b/src/angular/buttons/button.component.html.ts
new file mode 100644
index 0000000..f903fd1
--- /dev/null
+++ b/src/angular/buttons/button.component.html.ts
@@ -0,0 +1,15 @@
+export default `
+<button class="sdc-button sdc-button__{{ type }} btn-{{ size }} {{ iconPositionClass }}"
+ [disabled] = "disabled || show_spinner"
+ [attr.data-tests-id]="testId">
+ <svg-icon
+ *ngIf="icon_name"
+ [name]="icon_name"
+ [mode]="iconMode"
+ [size]="'medium'"
+ >
+ </svg-icon>
+ {{ text }}
+</button>
+<svg-icon *ngIf="show_spinner" name="spinner" [size]="'medium'" class="sdc-button__spinner" [ngClass]="{left: spinner_position === placement.right}"></svg-icon>
+`;
diff --git a/src/angular/buttons/button.component.ts b/src/angular/buttons/button.component.ts
new file mode 100644
index 0000000..1f049dc
--- /dev/null
+++ b/src/angular/buttons/button.component.ts
@@ -0,0 +1,62 @@
+import { Component, HostBinding, Input, OnInit } from "@angular/core";
+import { Placement } from "../common/enums";
+import template from "./button.component.html";
+
+@Component({
+ selector: "sdc-button",
+ template: template
+})
+
+export class ButtonComponent implements OnInit {
+ @Input() public text: string;
+ @Input() public disabled: boolean;
+ @Input() public type: string;
+ @Input() public size: string;
+ @Input() public preventDoubleClick: boolean;
+ @Input() public icon_name: string;
+ @Input() public icon_position: string;
+ @Input() public show_spinner: boolean;
+ @Input() public spinner_position: Placement;
+ @Input() public testId: string;
+
+ public placement = Placement;
+ private lastClick: Date;
+ private iconPositionClass: string;
+ private iconMode: string;
+
+ @HostBinding('class.sdc-button__wrapper') true;
+
+ constructor() {
+ this.type = "primary";
+ this.size = "default";
+ this.disabled = false;
+ this.iconMode = 'primary';
+ }
+
+ public ngOnInit(): void {
+ this.iconPositionClass = this.icon_position ? 'sdc-icon-' + this.icon_position : '';
+ this.iconMode = (this.type === "primary") ? 'info' : 'primary';
+ }
+
+ public onClick = (e): void => {
+ const now: Date = new Date();
+ if ( this.preventDoubleClick && this.lastClick && (now.getTime() - this.lastClick.getTime()) <= 500 ) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ this.lastClick = now;
+ }
+
+ public disableButton = () => {
+ if (!this.disabled) {
+ this.disabled = true;
+ }
+ }
+
+ public enableButton = () => {
+ if (this.disabled) {
+ this.disabled = false;
+ }
+ }
+
+}
diff --git a/src/angular/buttons/buttons.module.ts b/src/angular/buttons/buttons.module.ts
new file mode 100644
index 0000000..c804758
--- /dev/null
+++ b/src/angular/buttons/buttons.module.ts
@@ -0,0 +1,21 @@
+import { NgModule } from "@angular/core";
+import { ButtonComponent } from "./button.component";
+import { CommonModule } from "@angular/common";
+import { SvgIconModule } from './../svg-icon/svg-icon.module';
+
+@NgModule({
+ declarations: [
+ ButtonComponent
+ ],
+ imports: [
+ CommonModule,
+ SvgIconModule
+ ],
+ exports: [
+ ButtonComponent
+
+ ],
+})
+export class ButtonsModule {
+
+}