forked from mirrors/homebox
feat: enhanced search functions (#260)
* make login case insensitive * expand query to support by Field and By AID search * type generation * new API callers * rework search to support field queries * improve unnecessary data fetches * clear stores on logout * change verbage * add labels
This commit is contained in:
parent
7b28973c60
commit
bd06fdafaf
18 changed files with 637 additions and 133 deletions
|
@ -21,6 +21,7 @@ export type ItemsQuery = {
|
|||
locations?: string[];
|
||||
labels?: string[];
|
||||
q?: string;
|
||||
fields?: string[];
|
||||
};
|
||||
|
||||
export class AttachmentsAPI extends BaseAPI {
|
||||
|
@ -48,6 +49,16 @@ export class AttachmentsAPI extends BaseAPI {
|
|||
}
|
||||
}
|
||||
|
||||
export class FieldsAPI extends BaseAPI {
|
||||
getAll() {
|
||||
return this.http.get<string[]>({ url: route("/items/fields") });
|
||||
}
|
||||
|
||||
getAllValues(field: string) {
|
||||
return this.http.get<string[]>({ url: route(`/items/fields/values`, { field }) });
|
||||
}
|
||||
}
|
||||
|
||||
export class MaintenanceAPI extends BaseAPI {
|
||||
getLog(itemId: string) {
|
||||
return this.http.get<MaintenanceLog>({ url: route(`/items/${itemId}/maintenance`) });
|
||||
|
@ -75,9 +86,11 @@ export class MaintenanceAPI extends BaseAPI {
|
|||
export class ItemsApi extends BaseAPI {
|
||||
attachments: AttachmentsAPI;
|
||||
maintenance: MaintenanceAPI;
|
||||
fields: FieldsAPI;
|
||||
|
||||
constructor(http: Requests, token: string) {
|
||||
super(http, token);
|
||||
this.fields = new FieldsAPI(http);
|
||||
this.attachments = new AttachmentsAPI(http);
|
||||
this.maintenance = new MaintenanceAPI(http);
|
||||
}
|
||||
|
|
|
@ -17,11 +17,11 @@ export interface DocumentOut {
|
|||
}
|
||||
|
||||
export interface Group {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
currency: string;
|
||||
id: string;
|
||||
name: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface GroupStatistics {
|
||||
|
@ -39,11 +39,11 @@ export interface GroupUpdate {
|
|||
}
|
||||
|
||||
export interface ItemAttachment {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
document: DocumentOut;
|
||||
id: string;
|
||||
type: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface ItemAttachmentUpdate {
|
||||
|
@ -76,7 +76,7 @@ export interface ItemOut {
|
|||
assetId: string;
|
||||
attachments: ItemAttachment[];
|
||||
children: ItemSummary[];
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
fields: ItemField[];
|
||||
id: string;
|
||||
|
@ -103,16 +103,16 @@ export interface ItemOut {
|
|||
/** @example "0" */
|
||||
soldPrice: string;
|
||||
/** Sold */
|
||||
soldTime: Date;
|
||||
soldTime: string;
|
||||
soldTo: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
warrantyDetails: string;
|
||||
warrantyExpires: Date;
|
||||
warrantyExpires: string;
|
||||
}
|
||||
|
||||
export interface ItemSummary {
|
||||
archived: boolean;
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
insured: boolean;
|
||||
|
@ -123,7 +123,7 @@ export interface ItemSummary {
|
|||
/** @example "0" */
|
||||
purchasePrice: string;
|
||||
quantity: number;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface ItemUpdate {
|
||||
|
@ -156,10 +156,10 @@ export interface ItemUpdate {
|
|||
/** @example "0" */
|
||||
soldPrice: string;
|
||||
/** Sold */
|
||||
soldTime: Date;
|
||||
soldTime: string;
|
||||
soldTo: string;
|
||||
warrantyDetails: string;
|
||||
warrantyExpires: Date;
|
||||
warrantyExpires: string;
|
||||
}
|
||||
|
||||
export interface LabelCreate {
|
||||
|
@ -169,20 +169,20 @@ export interface LabelCreate {
|
|||
}
|
||||
|
||||
export interface LabelOut {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
items: ItemSummary[];
|
||||
name: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface LabelSummary {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
name: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface LocationCreate {
|
||||
|
@ -193,30 +193,30 @@ export interface LocationCreate {
|
|||
|
||||
export interface LocationOut {
|
||||
children: LocationSummary[];
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
items: ItemSummary[];
|
||||
name: string;
|
||||
parent: LocationSummary;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface LocationOutCount {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
itemCount: number;
|
||||
name: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface LocationSummary {
|
||||
createdAt: Date;
|
||||
createdAt: string;
|
||||
description: string;
|
||||
id: string;
|
||||
name: string;
|
||||
updatedAt: Date;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface LocationUpdate {
|
||||
|
|
|
@ -5,8 +5,7 @@ export enum Method {
|
|||
DELETE = "DELETE",
|
||||
}
|
||||
|
||||
export type RequestInterceptor = (r: Response) => void;
|
||||
export type ResponseInterceptor = (r: Response) => void;
|
||||
export type ResponseInterceptor = (r: Response, rq?: RequestInit) => void;
|
||||
|
||||
export interface TResponse<T> {
|
||||
status: number;
|
||||
|
@ -32,8 +31,8 @@ export class Requests {
|
|||
this.responseInterceptors.push(interceptor);
|
||||
}
|
||||
|
||||
private callResponseInterceptors(response: Response) {
|
||||
this.responseInterceptors.forEach(i => i(response));
|
||||
private callResponseInterceptors(response: Response, request?: RequestInit) {
|
||||
this.responseInterceptors.forEach(i => i(response, request));
|
||||
}
|
||||
|
||||
private url(rest: string): string {
|
||||
|
@ -90,7 +89,7 @@ export class Requests {
|
|||
}
|
||||
|
||||
const response = await fetch(this.url(rargs.url), payload);
|
||||
this.callResponseInterceptors(response);
|
||||
this.callResponseInterceptors(response, payload);
|
||||
|
||||
const data: T = await (async () => {
|
||||
if (response.status === 204) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue