Fix non complete cast of query
parent
3711d8ae3e
commit
bd23956dc4
|
@ -32,7 +32,9 @@ type THandiworkOrder = "date" | "likes" | "relevance" | "replies" | "title" | "v
|
||||||
export default class HandiworkSearchQuery implements IQuery {
|
export default class HandiworkSearchQuery implements IQuery {
|
||||||
|
|
||||||
//#region Private fields
|
//#region Private fields
|
||||||
|
|
||||||
static MIN_PAGE = 1;
|
static MIN_PAGE = 1;
|
||||||
|
|
||||||
//#endregion Private fields
|
//#endregion Private fields
|
||||||
|
|
||||||
//#region Properties
|
//#region Properties
|
||||||
|
@ -53,8 +55,8 @@ export default class HandiworkSearchQuery implements IQuery {
|
||||||
* Tags to exclude from the search.
|
* Tags to exclude from the search.
|
||||||
*/
|
*/
|
||||||
public excludedTags: string[] = [];
|
public excludedTags: string[] = [];
|
||||||
public includedPrefixes: string[];
|
public includedPrefixes: string[] = [];
|
||||||
public category: TCategory;
|
public category: TCategory = null;
|
||||||
/**
|
/**
|
||||||
* Results presentation order.
|
* Results presentation order.
|
||||||
*/
|
*/
|
||||||
|
@ -94,7 +96,7 @@ export default class HandiworkSearchQuery implements IQuery {
|
||||||
|
|
||||||
public createURL(): URL {
|
public createURL(): URL {
|
||||||
// Local variables
|
// Local variables
|
||||||
let query: LatestSearchQuery | ThreadSearchQuery = null;
|
let url = null;
|
||||||
|
|
||||||
// Check if the query is valid
|
// Check if the query is valid
|
||||||
if (!this.validate()) {
|
if (!this.validate()) {
|
||||||
|
@ -102,22 +104,19 @@ export default class HandiworkSearchQuery implements IQuery {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the query
|
// Convert the query
|
||||||
if (this.selectSearchType() === "latest") query = this.cast<LatestSearchQuery>();
|
if (this.selectSearchType() === "latest") url = this.cast<LatestSearchQuery>("LatestSearchQuery").createURL();
|
||||||
else query = this.cast<ThreadSearchQuery>();
|
else url = this.cast<ThreadSearchQuery>("ThreadSearchQuery").createURL();
|
||||||
|
|
||||||
return query.createURL();
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public cast<T extends IQuery>(): T {
|
public cast<T extends IQuery>(type: TQueryInterface): T {
|
||||||
// Local variables
|
// Local variables
|
||||||
let returnValue = null;
|
let returnValue = null;
|
||||||
|
|
||||||
// Cast the query
|
|
||||||
const query:T = {} as IQuery as T;
|
|
||||||
|
|
||||||
// Convert the query
|
// Convert the query
|
||||||
if (query.itype === "LatestSearchQuery") returnValue = this.castToLatest();
|
if (type === "LatestSearchQuery") returnValue = this.castToLatest();
|
||||||
else if (query.itype === "ThreadSearchQuery") returnValue = this.castToThread();
|
else if (type === "ThreadSearchQuery") returnValue = this.castToThread();
|
||||||
else returnValue = this as HandiworkSearchQuery;
|
else returnValue = this as HandiworkSearchQuery;
|
||||||
|
|
||||||
// Cast the result to T
|
// Cast the result to T
|
||||||
|
@ -127,12 +126,16 @@ export default class HandiworkSearchQuery implements IQuery {
|
||||||
|
|
||||||
//#region Private methods
|
//#region Private methods
|
||||||
private castToLatest(): LatestSearchQuery {
|
private castToLatest(): LatestSearchQuery {
|
||||||
// Cast the basic query object
|
// Cast the basic query object and copy common values
|
||||||
const query: LatestSearchQuery = this as IQuery as LatestSearchQuery;
|
const query: LatestSearchQuery = new LatestSearchQuery;
|
||||||
let orderFilter = this.order as string;
|
Object.keys(this).forEach(key => {
|
||||||
query.itype = "LatestSearchQuery";
|
if (query.hasOwnProperty(key)) {
|
||||||
|
query[key] = this[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Adapt order filter
|
// Adapt order filter
|
||||||
|
let orderFilter = this.order as string;
|
||||||
if (orderFilter === "relevance") orderFilter = "rating";
|
if (orderFilter === "relevance") orderFilter = "rating";
|
||||||
else if (orderFilter === "replies") orderFilter = "views";
|
else if (orderFilter === "replies") orderFilter = "views";
|
||||||
query.order = orderFilter as TLatestOrder;
|
query.order = orderFilter as TLatestOrder;
|
||||||
|
@ -144,18 +147,19 @@ export default class HandiworkSearchQuery implements IQuery {
|
||||||
}
|
}
|
||||||
|
|
||||||
private castToThread(): ThreadSearchQuery {
|
private castToThread(): ThreadSearchQuery {
|
||||||
// Cast the basic query object
|
// Cast the basic query object and copy common values
|
||||||
const query: ThreadSearchQuery = this as IQuery as ThreadSearchQuery;
|
const query: ThreadSearchQuery = new ThreadSearchQuery;
|
||||||
let orderFilter = this.order as string;
|
Object.keys(this).forEach(key => {
|
||||||
|
if (query.hasOwnProperty(key)) {
|
||||||
|
query[key] = this[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Set common values
|
// Set uncommon values
|
||||||
query.excludedTags = this.excludedTags;
|
|
||||||
query.newerThan = this.newerThan;
|
|
||||||
query.olderThan = this.olderThan;
|
|
||||||
query.onlyTitles = true;
|
query.onlyTitles = true;
|
||||||
query.keywords = this.keywords;
|
|
||||||
|
|
||||||
// Adapt order filter
|
// Adapt order filter
|
||||||
|
let orderFilter = this.order as string;
|
||||||
if (orderFilter === "likes" || orderFilter === "title") orderFilter = "relevance";
|
if (orderFilter === "likes" || orderFilter === "title") orderFilter = "relevance";
|
||||||
query.order = orderFilter as TThreadOrder;
|
query.order = orderFilter as TThreadOrder;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue