import { Injectable } from "@angular/core";
import { from } from "rxjs";
import { map } from "rxjs/operators";
@Injectable()
export class PrototypeSearchService {
results: {
name: string;
domain: string;
title?: string;
}[] = [
{
name: "Department of Education",
domain: "Federal Hierarchy",
},
{
name: "Department of Energy",
domain: "Federal Hierarchy",
},
{
name: "Department of the Treasury",
domain: "Federal Hierarchy",
},
{
name: "Department of Emergency Services and Public Protection",
domain: "Federal Hierarchy",
},
{
name: "Department of Education, South Carolina",
domain: "Federal Hierarchy",
},
{
name: "Department of Corrections Massachusetts",
domain: "Federal Hierarchy",
},
{
name: "Department of Assistive and Rehabilitative Services",
domain: "Federal Hierarchy",
},
{
name: "Department of Health Minnesota",
domain: "Federal Hierarchy",
},
{
name: "Department of Human Resources",
domain: "Federal Hierarchy",
},
{
name: "Department of General Services",
domain: "Federal Hierarchy",
},
{
name: "Department of Off Street Parking of the city of Miami",
domain: "Federal Hierarchy",
},
{
name: "16.829",
title: "Juvenile Justice Education Collaboration Assistance",
domain: "Assistance Listing",
},
{
name: "16.828",
title:
"Swift, Certain, and Fair (SCF) Sanctions program: Replicating the Concepts behind Project HOPE",
domain: "Assistance Listing",
},
{
name: "16.827",
title: "Justice Reinvestment Initiative",
domain: "Assistance Listing",
},
{
name: "Mechanical Services, Inc. Action Obligation $16.82 BPA CALL",
title: "Justice Reinvestment Initiative",
domain: "Contract Data",
},
];
public loadData(query: string) {
return from([this.results]).pipe(
map((response) => {
return response
.map((item) => {
let description;
const regex = new RegExp(query, "gi");
let match;
if ((match = regex.exec(item.name))) {
const wordLength = parseInt(match.index + query.length);
if (match.index === 0) {
description = `${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
} else {
description = `${item.name.slice(0, match.index)}${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
}
if (item.domain === "Assistance Listing") {
description = `${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
description = `${description} ${item.title}`;
}
}
return {
name: item.name,
domain:
query.length >= 14 || item.domain === "Assistance Listing"
? `in ${item.domain}`
: false,
description: description,
};
})
.filter((item) => item.description);
})
);
// return Observable.from([this.results]).map(response => {
// return response.map(item => {
//
// let description;
//
// let regex = new RegExp(query, 'gi');
// let match;
// if(match = regex.exec(item.name)){
// let wordLength = parseInt(match.index + query.length);
// if(match.index === 0){
// description = `${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
// }else{
// description = `${item.name.slice(0, match.index)}${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
// }
//
// if(item.domain === 'Assistance Listing'){
// description = `${item.name.slice(match.index, wordLength)}${item.name.slice(wordLength)}`;
// description = `${description} ${item.title}`;
// }
// }
//
// return {
// name: item.name,
// domain: (query.length >= 14 || item.domain === 'Assistance Listing') ? `in ${item.domain}` : false,
// description: description
// }
//
// }).filter( item => item.description);
// });
}
}