aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/app/shared/search
diff options
context:
space:
mode:
Diffstat (limited to 'client/app/shared/search')
-rw-r--r--client/app/shared/search/index.ts3
-rw-r--r--client/app/shared/search/search-field.type.ts1
-rw-r--r--client/app/shared/search/search.component.html17
-rw-r--r--client/app/shared/search/search.component.ts46
-rw-r--r--client/app/shared/search/search.model.ts6
5 files changed, 73 insertions, 0 deletions
diff --git a/client/app/shared/search/index.ts b/client/app/shared/search/index.ts
new file mode 100644
index 000000000..a49a4f1a9
--- /dev/null
+++ b/client/app/shared/search/index.ts
@@ -0,0 +1,3 @@
1export * from './search-field.type';
2export * from './search.component';
3export * from './search.model';
diff --git a/client/app/shared/search/search-field.type.ts b/client/app/shared/search/search-field.type.ts
new file mode 100644
index 000000000..846236290
--- /dev/null
+++ b/client/app/shared/search/search-field.type.ts
@@ -0,0 +1 @@
export type SearchField = "name" | "author" | "podUrl" | "magnetUri";
diff --git a/client/app/shared/search/search.component.html b/client/app/shared/search/search.component.html
new file mode 100644
index 000000000..fb13ac72e
--- /dev/null
+++ b/client/app/shared/search/search.component.html
@@ -0,0 +1,17 @@
1<div class="input-group">
2 <div class="input-group-btn" dropdown>
3 <button id="simple-btn-keyboard-nav" type="button" class="btn btn-default" dropdownToggle>
4 {{ getStringChoice(searchCriterias.field) }} <span class="caret"></span>
5 </button>
6 <ul class="dropdown-menu" role="menu" aria-labelledby="simple-btn-keyboard-nav">
7 <li *ngFor="let choice of choiceKeys" class="dropdown-item">
8 <a class="dropdown-item" href="#" (click)="choose($event, choice)">{{ getStringChoice(choice) }}</a>
9 </li>
10 </ul>
11 </div>
12
13 <input
14 type="text" id="search-video" name="search-video" class="form-control" placeholder="Search a video..." class="form-control"
15 [(ngModel)]="searchCriterias.value" (keyup.enter)="doSearch()"
16 >
17</div>
diff --git a/client/app/shared/search/search.component.ts b/client/app/shared/search/search.component.ts
new file mode 100644
index 000000000..d541cd0d6
--- /dev/null
+++ b/client/app/shared/search/search.component.ts
@@ -0,0 +1,46 @@
1import { Component, EventEmitter, Output } from '@angular/core';
2
3import { DROPDOWN_DIRECTIVES} from 'ng2-bootstrap/components/dropdown';
4
5import { Search } from './search.model';
6import { SearchField } from './search-field.type';
7
8@Component({
9 selector: 'my-search',
10 templateUrl: 'client/app/shared/search/search.component.html',
11 directives: [ DROPDOWN_DIRECTIVES ]
12})
13
14export class SearchComponent {
15 @Output() search = new EventEmitter<Search>();
16
17 fieldChoices = {
18 name: 'Name',
19 author: 'Author',
20 podUrl: 'Pod Url',
21 magnetUri: 'Magnet Uri'
22 };
23 searchCriterias: Search = {
24 field: 'name',
25 value: ''
26 };
27
28 get choiceKeys() {
29 return Object.keys(this.fieldChoices);
30 }
31
32 choose($event: MouseEvent, choice: SearchField) {
33 $event.preventDefault();
34 $event.stopPropagation();
35
36 this.searchCriterias.field = choice;
37 }
38
39 doSearch() {
40 this.search.emit(this.searchCriterias);
41 }
42
43 getStringChoice(choiceKey: SearchField) {
44 return this.fieldChoices[choiceKey];
45 }
46}
diff --git a/client/app/shared/search/search.model.ts b/client/app/shared/search/search.model.ts
new file mode 100644
index 000000000..932a6566c
--- /dev/null
+++ b/client/app/shared/search/search.model.ts
@@ -0,0 +1,6 @@
1import { SearchField } from './search-field.type';
2
3export interface Search {
4 field: SearchField;
5 value: string;
6}