diff --git a/src/app/modules/search/components/index.ts b/src/app/modules/search/components/index.ts index c48130e8..83b2a7c8 100644 --- a/src/app/modules/search/components/index.ts +++ b/src/app/modules/search/components/index.ts @@ -2,10 +2,12 @@ import * as searchFiltersContainer from './search-filters-container'; import * as searchResultsContainer from './search-results-container'; import * as filterSummaryContainer from './filter-summary-container'; import * as searchTitleContainer from './search-title-container'; +import * as mobileFiltersContainer from './mobile-filters-container'; export const SEARCH_COMPONENTS = [ ...searchFiltersContainer.COMPONENTS, ...searchResultsContainer.COMPONENTS, ...filterSummaryContainer.COMPONENTS, - ...searchTitleContainer.COMPONENTS + ...searchTitleContainer.COMPONENTS, + ...mobileFiltersContainer.COMPONENTS ]; diff --git a/src/app/modules/search/components/mobile-filters-container/components/index.ts b/src/app/modules/search/components/mobile-filters-container/components/index.ts new file mode 100644 index 00000000..156d2026 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/index.ts @@ -0,0 +1,7 @@ +import { MobileFilterListComponent } from './mobile-filter-list/mobile-filter-list.component'; +import { MobileSortFilterListComponent } from './mobile-sort-filter-list/mobile-sort-filter-list.component'; + +export const COMPONENTS = [ + MobileFilterListComponent, + MobileSortFilterListComponent +]; diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.html b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.html new file mode 100644 index 00000000..74dc3803 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.html @@ -0,0 +1,40 @@ + + + + FILTER + + + + + + + diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.scss b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.scss new file mode 100644 index 00000000..e4c94874 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.scss @@ -0,0 +1,146 @@ +.filter-list { + list-style: none; + li { + border-bottom: 1px solid #eaeaec; + padding: 0 15px; + min-height: 50px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + &.active { + border-left: 2px solid #ff3e6c; + background: white; + font-weight: bold; + } + } +} +span { + height: 100%; + display: block; +} + +// filter modal + +::ng-deep .filter-modal { + margin: 0; + .modal-content { + border: none; + border-radius: 0; + height: 100%; + .modal-header { + padding: 0; + div { + width: 50%; + float: left; + display: block; + padding: 13px 12px 10px 20px; + text-transform: uppercase; + font-size: 13px; + font-weight: bold; + height: 50px; + .modal-title { + font-size: 13px; + } + .clear-filter-btn { + font-weight: 300; + cursor: pointer; + padding-right: 20px; + color: #ff3e6c; + } + } + } + .modal-body { + min-height: calc(100vh - 99px); + } + .modal-footer { + padding: 4px 0; + border-top: 1px solid #eaeaec; + text-align: center; + background: white; + a { + width: 50%; + float: left; + display: block; + padding: 10px 15px; + text-transform: uppercase; + font-size: 13px; + text-align: center; + position: relative; + margin: 0; + &.b-right { + &::after { + position: absolute; + top: 0; + right: 0; + width: 1px; + background: #eaeaec; + height: 22px; + margin-top: 15px; + content: ''; + z-index: 1; + } + } + &.apply-filter-btn { + color: #ff3e6c; + } + } + } + } +} + +// filter container + +::ng-deep .filter-tabs { + background: red; + .nav { + padding: 0; + height: 100%; + overflow: scroll; + border-right: 1px solid #eaeaec; + width: 33.33%; + float: left; + border-bottom: none; + li { + margin-bottom: 0; + a { + background: #f5f5f6; + font-size: 14px; + border-bottom: 1px solid #eaeaec; + padding: 0 15px; + min-height: 50px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border-radius: 0; + color: #3e4152; + &.active { + background: white; + font-weight: bold; + border: none; + border-left: 2px solid #ff3e6c; + } + } + } + } + .filterlist-container { + height: calc(100vh - 150px); + overflow: scroll; + padding: 0 16px; + ul { + li { + border: none; + border-radius: 0; + font-size: 13px; + padding: 15px 8px; + border-bottom: 1px solid #eaeaec; + } + } + } +} diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.spec.ts b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.spec.ts new file mode 100644 index 00000000..a54b002b --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MobileFilterListComponent } from './mobile-filter-list.component'; + +describe('MobileFilterListComponent', () => { + let component: MobileFilterListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [MobileFilterListComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MobileFilterListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.ts b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.ts new file mode 100644 index 00000000..fd6a5dab --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-filter-list/mobile-filter-list.component.ts @@ -0,0 +1,48 @@ +import { Component, OnInit, TemplateRef } from '@angular/core'; +import { BsModalService } from 'ngx-bootstrap/modal'; +import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service'; +import { idLocale } from 'ngx-bootstrap'; + +@Component({ + selector: 'app-mobile-filter-list', + templateUrl: './mobile-filter-list.component.html', + styleUrls: ['./mobile-filter-list.component.scss'] +}) +export class MobileFilterListComponent implements OnInit { + modalRef: BsModalRef; + config = { animated: true, class: 'filter-modal' }; + + filterItems = ['Category', 'Brand', 'Style', 'Unit', 'Price', 'Discount']; + + filterItemList = [0, 1, 2, 3, 4]; + + tabs: any[] = [ + { + title: this.filterItems[0], + content: 'Dynamic content 1', + customClass: 'customClass' + }, + { + title: this.filterItems[1], + content: 'Dynamic content 2', + customClass: 'customClass' + }, + { + title: this.filterItems[2], + content: 'Dynamic content 3', + customClass: 'customClass' + }, + { + title: this.filterItems[3], + content: 'Dynamic content 1', + customClass: 'customClass' + } + ]; + + constructor(private modalService: BsModalService) {} + + ngOnInit() {} + openModal(filterModal: TemplateRef) { + this.modalRef = this.modalService.show(filterModal, this.config); + } +} diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.html b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.html new file mode 100644 index 00000000..5e3162f5 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.html @@ -0,0 +1,16 @@ + + SORT + + + + + + diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.scss b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.scss new file mode 100644 index 00000000..2b3e07c3 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.scss @@ -0,0 +1,50 @@ +.sort-list { + li { + display: block; + line-height: 24px; + padding: 15px 0; + border-bottom: solid 1px #eaeaec; + width: 82%; + font-size: 14px; + margin-left: 65px; + } +} + +span { + height: 100%; + display: block; +} + +.sort-header { + font-weight: bold; + border: none; + font-size: 18px; + color: #3e4152; + padding-left: 20px; + padding-top: 12px; + padding-bottom: 8px; +} + +// sort modal + +::ng-deep .sort-modal { + position: fixed; + width: 100%; + bottom: 0; + margin: 0; + .modal-content { + border: none; + border-radius: 0; + // @at-root body.modal-open .modal { + // padding-top: 30vh; + // } + .modal-header { + padding: 0px; + text-transform: uppercase; + border-bottom: none; + } + .modal-body { + padding: 0; + } + } +} diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.spec.ts b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.spec.ts new file mode 100644 index 00000000..3b9d975c --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MobileSortFilterListComponent } from './mobile-sort-filter-list.component'; + +describe('MobileSortFilterListComponent', () => { + let component: MobileSortFilterListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MobileSortFilterListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MobileSortFilterListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.ts b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.ts new file mode 100644 index 00000000..2c31dfcc --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/components/mobile-sort-filter-list/mobile-sort-filter-list.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit, TemplateRef } from '@angular/core'; +import { BsModalService } from 'ngx-bootstrap/modal'; +import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service'; + +@Component({ + selector: 'app-mobile-sort-filter-list', + templateUrl: './mobile-sort-filter-list.component.html', + styleUrls: ['./mobile-sort-filter-list.component.scss'] +}) +export class MobileSortFilterListComponent implements OnInit { + modalRef: BsModalRef; + sortItems = [ + ' Popularity', + ' Latest', + ' Discount', + ' Price: High to Low', + ' Price: Low to High' + ]; + config = { + animated: true, + class: 'sort-modal' + }; + constructor(private modalService: BsModalService) {} + + ngOnInit() {} + + openModal(sortModal: TemplateRef) { + this.modalRef = this.modalService.show(sortModal, this.config); + } +} diff --git a/src/app/modules/search/components/mobile-filters-container/index.ts b/src/app/modules/search/components/mobile-filters-container/index.ts new file mode 100644 index 00000000..3cbd03f4 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/index.ts @@ -0,0 +1,7 @@ +import { MobileFiltersContainerComponent } from './mobile-filters-container.component'; +import * as MFCComponents from './components'; + +export const COMPONENTS = [ + MobileFiltersContainerComponent, + ...MFCComponents.COMPONENTS +]; diff --git a/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.html b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.html new file mode 100644 index 00000000..ff35885d --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.html @@ -0,0 +1,8 @@ + diff --git a/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.scss b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.scss new file mode 100644 index 00000000..9ce6927b --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.scss @@ -0,0 +1,34 @@ +.mobile-bottom-nav { + border-top: 1px solid #eaeaec; + text-align: center; + background: white; + padding: 0; + a { + background: white; + color: #ff3e6c; + width: 50%; + height: 50px; + padding: 14px 0px; + font-size: 14px; + letter-spacing: 0.9px; + display: block; + margin: 0; + float: left; + text-transform: uppercase; + cursor: pointer; + position: relative; + &.b-right { + ::after { + position: absolute; + top: 0; + right: 0; + width: 1px; + background: #eaeaec; + height: 22px; + margin-top: 15px; + content: ''; + z-index: 1; + } + } + } +} diff --git a/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.spec.ts b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.spec.ts new file mode 100644 index 00000000..517c6e81 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MobileFiltersContainerComponent } from './mobile-filters-container.component'; + +describe('MobileFiltersContainerComponent', () => { + let component: MobileFiltersContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MobileFiltersContainerComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MobileFiltersContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.ts b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.ts new file mode 100644 index 00000000..711ffa78 --- /dev/null +++ b/src/app/modules/search/components/mobile-filters-container/mobile-filters-container.component.ts @@ -0,0 +1,9 @@ +import { Component, OnInit } from '@angular/core'; +import { SearchFiltersContainerComponent } from '../search-filters-container/search-filters-container.component'; + +@Component({ + selector: 'app-mobile-filters-container', + templateUrl: './mobile-filters-container.component.html', + styleUrls: ['./mobile-filters-container.component.scss'] +}) +export class MobileFiltersContainerComponent extends SearchFiltersContainerComponent {} diff --git a/src/app/modules/search/pages/search-page/search-page.component.html b/src/app/modules/search/pages/search-page/search-page.component.html index b1e9fe54..d8ac66f0 100644 --- a/src/app/modules/search/pages/search-page/search-page.component.html +++ b/src/app/modules/search/pages/search-page/search-page.component.html @@ -31,6 +31,14 @@ [searchResults]="searchResults" > +
+ +
diff --git a/src/app/shared/index.ts b/src/app/shared/index.ts index 01ed8c75..8999affe 100644 --- a/src/app/shared/index.ts +++ b/src/app/shared/index.ts @@ -15,6 +15,7 @@ import { RandomPipe } from './pipes/random.pipe'; // components // imports import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule } from 'ngx-bootstrap/tabs'; import { RatingModule } from 'ngx-bootstrap/rating'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ProductSliderComponent } from './components/product-slider/product-slider.component'; @@ -49,6 +50,7 @@ import { SanitizeHtmlPipe } from './pipes/sanitize-html.pipe'; // modules CommonModule, BsDropdownModule, + TabsModule, RatingModule, TypeaheadModule, FormsModule, @@ -74,6 +76,7 @@ import { SanitizeHtmlPipe } from './pipes/sanitize-html.pipe'; CommonModule, BsDropdownModule.forRoot(), TypeaheadModule.forRoot(), + TabsModule.forRoot(), RatingModule.forRoot(), RouterModule, NgxInputStarRatingModule,