配餐项目前端文件
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.8 KiB

2 years ago
import { HttpParams } from "@angular/common/http";
2 years ago
import { AbstractControl, FormControl, FormGroup } from "@angular/forms";
2 years ago
import { AnyObject } from "@cdk/types";
2 years ago
import queryString from "query-string";
2 years ago
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}`;
}
2 years ago
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;
}
2 years ago
static objectToFormData(obj: AnyObject): FormData {
2 years ago
let params = new FormData();
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
2 years ago
let value = obj[key];
2 years ago
if (![void 0, null, ""].includes(value)) {
if (typeof value === "object") {
params.append(key, JSON.stringify(value));
} else {
params.append(key, value);
}
2 years ago
}
2 years ago
}
}
return params;
}
2 years ago
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",
});
}
2 years ago
}