|
|
|
import { HttpParams } from "@angular/common/http";
|
|
|
|
import { AbstractControl, FormControl, FormGroup } from "@angular/forms";
|
|
|
|
import { AnyObject } from "@cdk/types";
|
|
|
|
import queryString from "query-string";
|
|
|
|
|
|
|
|
export class Utils {
|
|
|
|
static validateFormGroup(formGroup: FormGroup) {
|
|
|
|
if (!formGroup.valid) {
|
|
|
|
Object.keys(formGroup.controls).forEach((field) => {
|
|
|
|
const control = formGroup.get(field);
|
|
|
|
if (control instanceof FormControl) {
|
|
|
|
control.markAsDirty();
|
|
|
|
control.markAsTouched({ onlySelf: true });
|
|
|
|
control.updateValueAndValidity({ onlySelf: true });
|
|
|
|
} else if (control instanceof FormGroup) {
|
|
|
|
Utils.validateFormGroup(control);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return formGroup.valid;
|
|
|
|
}
|
|
|
|
|
|
|
|
static validateFormControl(control: AbstractControl) {
|
|
|
|
control.markAsDirty();
|
|
|
|
control.markAsTouched({ onlySelf: true });
|
|
|
|
control.updateValueAndValidity({ onlySelf: true });
|
|
|
|
return control.valid;
|
|
|
|
}
|
|
|
|
|
|
|
|
static queryify(query: {}): string {
|
|
|
|
const o = Object.create(null);
|
|
|
|
Object.entries(query).forEach(([k, v]) => {
|
|
|
|
if (v !== void 0 && v !== null) {
|
|
|
|
o[k] = v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return new URLSearchParams(o).toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
static getHostByEnvironment(prod?: boolean) {
|
|
|
|
const protocol = window.location.protocol;
|
|
|
|
const host = prod ? window.location.host : `localhost:${window.location.port}`;
|
|
|
|
return `${protocol}//${host}`;
|
|
|
|
}
|
|
|
|
|
|
|
|
static objectToHttpParams(obj: AnyObject, parentKey = ""): HttpParams {
|
|
|
|
let params = new HttpParams();
|
|
|
|
|
|
|
|
for (const key in obj) {
|
|
|
|
if (obj.hasOwnProperty(key)) {
|
|
|
|
const value = obj[key];
|
|
|
|
const paramName = parentKey ? `${parentKey}.${key}` : key;
|
|
|
|
|
|
|
|
if (typeof value === "object" && !Array.isArray(value)) {
|
|
|
|
params = params.appendAll(Utils.objectToHttpParams(value, paramName) as any);
|
|
|
|
} else {
|
|
|
|
params = params.append(paramName, value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return params;
|
|
|
|
}
|
|
|
|
static objectToFormData(obj: AnyObject): FormData {
|
|
|
|
let params = new FormData();
|
|
|
|
|
|
|
|
for (const key in obj) {
|
|
|
|
if (obj.hasOwnProperty(key)) {
|
|
|
|
let value = obj[key];
|
|
|
|
if (![void 0, null, ""].includes(value)) {
|
|
|
|
if (typeof value === "object") {
|
|
|
|
params.append(key, JSON.stringify(value));
|
|
|
|
} else {
|
|
|
|
params.append(key, value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return params;
|
|
|
|
}
|
|
|
|
|
|
|
|
static buildFormData = (formData: FormData, data: any, parentKey = "") => {
|
|
|
|
if (data && typeof data === "object" && !(data instanceof Date) && !(data instanceof File)) {
|
|
|
|
Object.keys(data).forEach((key) => {
|
|
|
|
Utils.buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
const value = data == null ? "" : data;
|
|
|
|
|
|
|
|
formData.append(parentKey, value);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
static objectStringify(o: AnyObject) {
|
|
|
|
return queryString.stringify(o, {
|
|
|
|
skipEmptyString: true,
|
|
|
|
skipNull: true,
|
|
|
|
arrayFormat: "comma",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|