search placeholder shows total scripts

This commit is contained in:
undergroundwires
2020-07-18 18:26:15 +01:00
parent 9c063d59de
commit 1d5225de07
4 changed files with 45 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="search"> <div class="search">
<input type="search" class="searchTerm" placeholder="Search" <input type="search" class="searchTerm" :placeholder="searchPlaceHolder"
@input="updateFilterAsync($event.target.value)" > @input="updateFilterAsync($event.target.value)" >
<div class="iconWrapper"> <div class="iconWrapper">
<font-awesome-icon :icon="['fas', 'search']" /> <font-awesome-icon :icon="['fas', 'search']" />
@@ -14,6 +14,15 @@ import { StatefulVue } from './StatefulVue';
@Component @Component
export default class TheSearchBar extends StatefulVue { export default class TheSearchBar extends StatefulVue {
public searchPlaceHolder = 'Search';
public async mounted() {
const state = await this.getCurrentStateAsync();
const totalScripts = state.app.totalScripts;
const totalCategories = state.app.totalCategories;
this.searchPlaceHolder = `Search in ${totalScripts} scripts`;
}
public async updateFilterAsync(filter: |string) { public async updateFilterAsync(filter: |string) {
const state = await this.getCurrentStateAsync(); const state = await this.getCurrentStateAsync();
if (!filter) { if (!filter) {

View File

@@ -59,4 +59,28 @@ describe('Application', () => {
// assert // assert
expect(construct).to.throw('Application must consist of at least one recommended script'); expect(construct).to.throw('Application must consist of at least one recommended script');
}); });
it('totalScripts counts right', () => {
// arrange
const categories = [
new CategoryStub(1).withScripts(new ScriptStub('S1').withIsRecommended(true)),
new CategoryStub(2).withScripts(new ScriptStub('S2'), new ScriptStub('S3')),
new CategoryStub(3).withCategories(new CategoryStub(4).withScripts(new ScriptStub('S4'))),
];
// act
const application = new Application('name', 'repo', '0.1.0', categories);
// assert
expect(application.totalScripts).to.equal(4);
});
it('totalCategories counts right', () => {
// arrange
const categories = [
new CategoryStub(1).withScripts(new ScriptStub('S1').withIsRecommended(true)),
new CategoryStub(2).withScripts(new ScriptStub('S2'), new ScriptStub('S3')),
new CategoryStub(3).withCategories(new CategoryStub(4).withScripts(new ScriptStub('S4'))),
];
// act
const application = new Application('name', 'repo', '0.1.0', categories);
// assert
expect(application.totalCategories).to.equal(4);
});
}); });

View File

@@ -23,6 +23,16 @@ export class CategoryStub extends BaseEntity<number> implements ICategory {
} }
return this; return this;
} }
public withCategories(...categories: ICategory[]): CategoryStub {
for (const category of categories) {
this.withCategory(category);
}
return this;
}
public withCategory(category: ICategory): CategoryStub {
this.subCategories.push(category);
return this;
}
public withScript(script: IScript): CategoryStub { public withScript(script: IScript): CategoryStub {
this.scripts.push(script); this.scripts.push(script);
return this; return this;

View File

@@ -6,7 +6,7 @@ export class ScriptStub extends BaseEntity<string> implements IScript {
public code = `REM code${this.id}`; public code = `REM code${this.id}`;
public revertCode = `REM revertCode${this.id}`; public revertCode = `REM revertCode${this.id}`;
public readonly documentationUrls = new Array<string>(); public readonly documentationUrls = new Array<string>();
public isRecommended = false; public isRecommended = true;
constructor(public readonly id: string) { constructor(public readonly id: string) {
super(id); super(id);