link Management App

This commit is contained in:
Mosiur Rahman
2024-10-06 15:33:47 +06:00
parent 70cbc8fbc0
commit 7ea855c769
25 changed files with 273 additions and 337 deletions

View File

@@ -0,0 +1,4 @@
<div class="container">
<app-title title="Tool List"></app-title>
<tool *ngFor="let tool of tools" [name]="tool.name" [url]="tool.url" [userName]="tool.userName" [password]="tool.password"></tool>
</div>

View File

@@ -0,0 +1,7 @@
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 2rem;
}

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ToolListComponent } from './tool-list.component';
describe('ToolListComponent', () => {
let component: ToolListComponent;
let fixture: ComponentFixture<ToolListComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ToolListComponent]
})
.compileComponents();
fixture = TestBed.createComponent(ToolListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,24 @@
import { Component, OnInit } from '@angular/core';
import { ToolComponent } from "../../partials/tool/tool.component";
import { ToolListService } from '../../../shared/module/tool-list.module';
import { Tool } from '../../../shared/model/tool.model';
import { CommonModule } from '@angular/common';
import { TitleComponent } from "../../partials/title/title.component";
@Component({
selector: 'app-tool-list',
standalone: true,
imports: [ToolComponent, CommonModule, TitleComponent],
templateUrl: './tool-list.component.html',
styleUrl: './tool-list.component.scss'
})
export class ToolListComponent implements OnInit {
tools!: Tool[];
constructor(private toolListService: ToolListService) {}
ngOnInit() {
this.tools = this.toolListService.getAllTools()
}
}

View File

@@ -0,0 +1 @@
<p>floating-message works!</p>

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FloatingMessageComponent } from './floating-message.component';
describe('FloatingMessageComponent', () => {
let component: FloatingMessageComponent;
let fixture: ComponentFixture<FloatingMessageComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [FloatingMessageComponent]
})
.compileComponents();
fixture = TestBed.createComponent(FloatingMessageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,12 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-floating-message',
standalone: true,
imports: [],
templateUrl: './floating-message.component.html',
styleUrl: './floating-message.component.scss'
})
export class FloatingMessageComponent {
}

View File

@@ -0,0 +1 @@
<h1>{{title}}</h1>

View File

@@ -0,0 +1,3 @@
h1{
padding: 2rem;
}

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TitleComponent } from './title.component';
describe('TitleComponent', () => {
let component: TitleComponent;
let fixture: ComponentFixture<TitleComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [TitleComponent]
})
.compileComponents();
fixture = TestBed.createComponent(TitleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,12 @@
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-title',
standalone: true,
imports: [],
templateUrl: './title.component.html',
styleUrl: './title.component.scss'
})
export class TitleComponent {
@Input() title!: string;
}

View File

@@ -0,0 +1,5 @@
<div class="container">
<div><a [href]="url" target="_blank">{{ name }}</a></div>
<div ngxClipboard [cbContent]="userName">{{ userName }}</div>
<div ngxClipboard [cbContent]="password">{{ password }}</div>
</div>

View File

@@ -0,0 +1,17 @@
.container {
display: flex;
}
.container>div {
padding: 2rem 20rem 2rem 2rem;
border: 1px solid black;
opacity: 0.5;
text-wrap: nowrap;
max-width: 5rem;
font-size: 1.5rem;
transition: opacity 0.3s ease-in-out;
&:hover {
cursor: pointer;
opacity: 1;
}
}

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ToolComponent } from './tool.component';
describe('ToolComponent', () => {
let component: ToolComponent;
let fixture: ComponentFixture<ToolComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ToolComponent]
})
.compileComponents();
fixture = TestBed.createComponent(ToolComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,16 @@
import { Component, Input } from '@angular/core';
import { ClipboardModule } from 'ngx-clipboard';
@Component({
selector: 'tool',
standalone: true,
imports: [ClipboardModule],
templateUrl: './tool.component.html',
styleUrl: './tool.component.scss'
})
export class ToolComponent {
@Input() name!: string;
@Input() url!: string;
@Input() userName!: string;
@Input() password!: string;
}