diff --git a/src/app/components/contact-list-table/contact-list-table.html b/src/app/components/contact-list-table/contact-list-table.html
new file mode 100644
index 0000000..e3c452c
--- /dev/null
+++ b/src/app/components/contact-list-table/contact-list-table.html
@@ -0,0 +1,22 @@
+
\ No newline at end of file
diff --git a/src/app/components/contact-list-table/contact-list-table.scss b/src/app/components/contact-list-table/contact-list-table.scss
new file mode 100644
index 0000000..5187dcf
--- /dev/null
+++ b/src/app/components/contact-list-table/contact-list-table.scss
@@ -0,0 +1,29 @@
+:host {
+ overflow: auto;
+}
+div:first-of-type {
+
+ margin-top: 1rem;
+}
+.contact-list {
+ width: 100%;
+ border-collapse: collapse;
+
+ & thead {
+ background-color: var(--primary);
+ color: white;
+ text-transform: uppercase;
+ & th {
+ padding: 1rem 0;
+ }
+
+ }
+
+ & tbody td {
+ padding: .5rem;
+ &:nth-child(4) {
+ text-align: center;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/components/contact-list-table/contact-list-table.spec.ts b/src/app/components/contact-list-table/contact-list-table.spec.ts
new file mode 100644
index 0000000..6753bfe
--- /dev/null
+++ b/src/app/components/contact-list-table/contact-list-table.spec.ts
@@ -0,0 +1,58 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ContactListTable } from './contact-list-table';
+import { STRINGS_INJECTOR } from '../../app.config';
+import { strings } from '../../strings';
+import { ContactService } from '../../pages/main/contact.service';
+import { ContactDTO } from '../../models/ContactDTO';
+import { By } from '@angular/platform-browser';
+import { of } from 'rxjs';
+
+describe('ContactListTable', () => {
+ let component: ContactListTable;
+ let fixture: ComponentFixture;
+ let contactService: jasmine.SpyObj;
+ let CONTACT_LIST_MOCK: ContactDTO[];
+
+ beforeEach(async () => {
+ contactService = jasmine.createSpyObj(ContactService.name, ['delete']);
+ CONTACT_LIST_MOCK = [new ContactDTO(1, 'MOCK', 'MOCK', '5491122222222')];
+ await TestBed.configureTestingModule({
+ imports: [ContactListTable],
+ providers: [
+ { provide: STRINGS_INJECTOR, useValue: strings },
+ { provide: ContactService, useValue: contactService },
+ ],
+ }).compileComponents();
+ contactService.delete.and.returnValue(of([]));
+ fixture = TestBed.createComponent(ContactListTable);
+ component = fixture.componentInstance;
+ fixture.componentRef.setInput('contactList', CONTACT_LIST_MOCK);
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ describe('delete', () => {
+ it('should call for valid ID', () => {
+ const deleteSpy = spyOn(component, 'delete').and.callThrough();
+ const deleteButton = fixture.debugElement
+ .query(By.css('app-contact-actions-bar'))
+ .query(By.css('.btn--delete'));
+ deleteButton.triggerEventHandler('click');
+ expect(deleteSpy).toHaveBeenCalledWith(CONTACT_LIST_MOCK[0].id);
+ });
+
+ it("shouldn't call delete method if ID is falsy", () => {
+ CONTACT_LIST_MOCK[0].id = undefined;
+ const deleteButton = fixture.debugElement
+ .query(By.css('app-contact-actions-bar'))
+ .query(By.css('.btn--delete'));
+ deleteButton.triggerEventHandler('click');
+ expect(contactService.delete).not.toHaveBeenCalled();
+ });
+ });
+
+});
diff --git a/src/app/components/contact-list-table/contact-list-table.ts b/src/app/components/contact-list-table/contact-list-table.ts
new file mode 100644
index 0000000..2ad4ffd
--- /dev/null
+++ b/src/app/components/contact-list-table/contact-list-table.ts
@@ -0,0 +1,27 @@
+import { Component, inject, input } from '@angular/core';
+import { STRINGS_INJECTOR } from '../../app.config';
+import { ContactDTO } from '../../models/ContactDTO';
+import { ContactActionsBar } from "../contact-actions-bar/contact-actions-bar";
+import { ContactService } from '../../pages/main/contact.service';
+
+@Component({
+ selector: 'app-contact-list-table',
+ imports: [ContactActionsBar],
+ templateUrl: './contact-list-table.html',
+ styleUrl: './contact-list-table.scss',
+})
+export class ContactListTable {
+ contactList = input([]);
+ protected readonly strings = inject(STRINGS_INJECTOR);
+ private readonly contactService = inject(ContactService);
+
+ edit(id?: number) {
+ if(!id) return;
+ }
+
+ delete(id?: number) {
+ if(!id) return;
+ this.contactService.delete(id).subscribe();
+ }
+
+}