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, skipEmpty: boolean = true): FormData { let params = new FormData(); for (const key in obj) { if (obj.hasOwnProperty(key)) { let value = obj[key]; if (skipEmpty && [void 0, null, ""].includes(value)) { break; } 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", }); } }