@hzab/data-model 1.8.9-alpha.1 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -1
- package/package.json +1 -1
- package/src/ArrayUtils.ts +668 -0
- package/src/array-data-model.ts +583 -0
- package/src/axios.ts +210 -0
- package/src/{data-model.js → data-model.ts} +355 -107
- package/src/{hooks.js → hooks.ts} +15 -4
- package/src/{index.js → index.ts} +1 -0
- package/src/{public-utils.js → public-utils.ts} +12 -3
- package/src/type.ts +98 -0
- package/src/{utils.js → utils.ts} +25 -19
- package/src/ArrayUtils.js +0 -539
- package/src/array-data-model.js +0 -422
- package/src/axios.js +0 -162
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { useMemo, useRef } from "react";
|
|
2
2
|
import { merge } from "lodash";
|
|
3
|
+
import DataModel, { DataModelOptions } from "./data-model";
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* useDataModel 选项接口
|
|
7
|
+
*/
|
|
8
|
+
export interface UseDataModelOptions<T = any> {
|
|
9
|
+
/** 动态数据监听的目标 */
|
|
10
|
+
effectTargets?: any[];
|
|
11
|
+
/** 动态的 params 数据,包含了 query */
|
|
12
|
+
effectParams?: Partial<DataModelOptions<T>>;
|
|
13
|
+
/** 动态的 query 数据 */
|
|
14
|
+
effectQuery?: DataModelOptions<T>["query"];
|
|
15
|
+
}
|
|
5
16
|
|
|
6
17
|
/**
|
|
7
18
|
* 解决 hooks 重复实例化导致 query 丢失的问题
|
|
@@ -10,10 +21,10 @@ import DataModel from "./data-model";
|
|
|
10
21
|
* @param {Object} opt.effectTargets 动态数据监听的目标
|
|
11
22
|
* @param {Object} opt.effectParams 动态的 params 数据,包含了 query
|
|
12
23
|
* @param {Object} opt.effectQuery 动态的 query 数据
|
|
13
|
-
* @returns
|
|
24
|
+
* @returns DataModel 实例
|
|
14
25
|
*/
|
|
15
|
-
export const useDataModel = function (initParams = {}, opt = {}) {
|
|
16
|
-
const model = useRef(new DataModel(initParams));
|
|
26
|
+
export const useDataModel = function <T = any>(initParams: DataModelOptions<T> = {}, opt: UseDataModelOptions<T> = {}) {
|
|
27
|
+
const model = useRef<DataModel<T>>(new DataModel(initParams));
|
|
17
28
|
return useMemo(() => {
|
|
18
29
|
const { effectParams, effectQuery } = opt || {};
|
|
19
30
|
if (effectParams) {
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* getPublicUrl 选项接口
|
|
3
|
+
*/
|
|
4
|
+
export interface GetPublicUrlOptions {
|
|
5
|
+
/** 是否返回完整路径 */
|
|
6
|
+
isFullPath?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
1
9
|
/**
|
|
2
10
|
* 获取 public 文件路径(自动拼接 hash 数据)
|
|
3
|
-
* @param
|
|
4
|
-
* @param
|
|
11
|
+
* @param url 文件路径
|
|
12
|
+
* @param opt 选项
|
|
13
|
+
* @returns 完整的 public 文件路径
|
|
5
14
|
*/
|
|
6
|
-
export function getPublicUrl(url, opt
|
|
15
|
+
export function getPublicUrl(url: string | any, opt?: GetPublicUrlOptions): string | any {
|
|
7
16
|
if (typeof url !== "string") {
|
|
8
17
|
return url;
|
|
9
18
|
}
|
package/src/type.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance, AxiosResponse } from "axios";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 通用 JSON 对象类型
|
|
5
|
+
*/
|
|
6
|
+
export type JSONObject = Record<string, any>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 查询参数类型
|
|
10
|
+
*/
|
|
11
|
+
export type QueryParams = JSONObject;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 请求数据类型
|
|
15
|
+
*/
|
|
16
|
+
export type RequestData = JSONObject;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 响应数据类型
|
|
20
|
+
*/
|
|
21
|
+
export type ResponseData = JSONObject;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Axios 配置类型
|
|
25
|
+
*/
|
|
26
|
+
export type AxiosConfig = AxiosRequestConfig;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 数据映射函数类型
|
|
30
|
+
* @template T - 输入类型
|
|
31
|
+
* @template R - 输出类型(默认为 T)
|
|
32
|
+
*/
|
|
33
|
+
export type MapFunction<T = any, R = T> = (data: T) => R;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 带原始参数的映射函数类型(用于请求前处理)
|
|
37
|
+
* @template T - 处理后的参数类型
|
|
38
|
+
* @template P - 原始参数类型
|
|
39
|
+
*/
|
|
40
|
+
export type RequestMapFunction<T = RequestData, P = any> = (params: T, originalParams?: P) => T;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 列表请求返回结果接口
|
|
44
|
+
* @template T - 列表项数据类型
|
|
45
|
+
*/
|
|
46
|
+
export interface GetListResult<T = any> {
|
|
47
|
+
/** 列表数据 */
|
|
48
|
+
list: T[];
|
|
49
|
+
/** 分页信息 */
|
|
50
|
+
pagination: { current?: number; total: number; pageSize?: number };
|
|
51
|
+
/** 其他扩展字段 */
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 自定义列表请求函数类型
|
|
57
|
+
* @template T - 列表项数据类型
|
|
58
|
+
*/
|
|
59
|
+
export type GetListFunc<T = any> = (query: QueryParams) => Promise<GetListResult<T>>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 响应处理函数类型
|
|
63
|
+
*/
|
|
64
|
+
export type HandleResponseFunc = (response: AxiosResponse) => ResponseData;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* API 错误接口
|
|
68
|
+
*/
|
|
69
|
+
export interface ApiError extends Error {
|
|
70
|
+
/** 错误码 */
|
|
71
|
+
code?: number | string;
|
|
72
|
+
/** 响应对象 */
|
|
73
|
+
response?: AxiosResponse;
|
|
74
|
+
/** 错误消息(带下划线前缀) */
|
|
75
|
+
_msg?: string;
|
|
76
|
+
/** 错误消息(带下划线前缀) */
|
|
77
|
+
_message?: string;
|
|
78
|
+
/** 原始错误数据 */
|
|
79
|
+
data?: any;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 网络链接信息接口(非标准 API)
|
|
84
|
+
*/
|
|
85
|
+
export interface NetworkConnection {
|
|
86
|
+
type?: string;
|
|
87
|
+
downlink?: number;
|
|
88
|
+
effectiveType?: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* 扩展 Navigator 接口(包含非标准连接属性)
|
|
93
|
+
*/
|
|
94
|
+
export interface ExtendedNavigator extends Navigator {
|
|
95
|
+
connection?: NetworkConnection;
|
|
96
|
+
mozConnection?: NetworkConnection;
|
|
97
|
+
webkitConnection?: NetworkConnection;
|
|
98
|
+
}
|
|
@@ -4,16 +4,22 @@ const DEFAULT_MSG = "未知错误";
|
|
|
4
4
|
const NETWORK_MSG = "网络异常,请检查网络是否开启";
|
|
5
5
|
|
|
6
6
|
/** 暂存相关变量 */
|
|
7
|
-
export
|
|
7
|
+
export interface TempStore {
|
|
8
|
+
defaultErrMsg: string;
|
|
9
|
+
networkErrMsg: string;
|
|
10
|
+
axios?: any;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const _$Temp: TempStore = {
|
|
8
14
|
defaultErrMsg: DEFAULT_MSG,
|
|
9
15
|
networkErrMsg: NETWORK_MSG,
|
|
10
16
|
};
|
|
11
17
|
|
|
12
18
|
/**
|
|
13
19
|
* 设置默认的 axios
|
|
14
|
-
* @param
|
|
20
|
+
* @param ax axios 实例
|
|
15
21
|
*/
|
|
16
|
-
export function setDefaultAxios(ax) {
|
|
22
|
+
export function setDefaultAxios(ax: any) {
|
|
17
23
|
if (ax) {
|
|
18
24
|
_$Temp.axios = ax;
|
|
19
25
|
}
|
|
@@ -21,9 +27,9 @@ export function setDefaultAxios(ax) {
|
|
|
21
27
|
|
|
22
28
|
/**
|
|
23
29
|
* 设置默认的错误提示文案
|
|
24
|
-
* @param
|
|
30
|
+
* @param msg 错误提示文案
|
|
25
31
|
*/
|
|
26
|
-
export function setDefaultErrMsg(msg) {
|
|
32
|
+
export function setDefaultErrMsg(msg: string) {
|
|
27
33
|
if (msg) {
|
|
28
34
|
_$Temp.defaultErrMsg = msg;
|
|
29
35
|
}
|
|
@@ -31,9 +37,9 @@ export function setDefaultErrMsg(msg) {
|
|
|
31
37
|
|
|
32
38
|
/**
|
|
33
39
|
* 设置默认的网络异常提示文案
|
|
34
|
-
* @param
|
|
40
|
+
* @param msg 网络异常提示文案
|
|
35
41
|
*/
|
|
36
|
-
export function setNetworkErrMsg(msg) {
|
|
42
|
+
export function setNetworkErrMsg(msg: string) {
|
|
37
43
|
if (msg) {
|
|
38
44
|
_$Temp.networkErrMsg = msg;
|
|
39
45
|
}
|
|
@@ -41,17 +47,17 @@ export function setNetworkErrMsg(msg) {
|
|
|
41
47
|
|
|
42
48
|
/**
|
|
43
49
|
* 检测网络状态
|
|
44
|
-
* @
|
|
45
|
-
* @returns
|
|
50
|
+
* @returns 网络是否可用
|
|
46
51
|
*/
|
|
47
|
-
export function checkNetwork() {
|
|
48
|
-
if (
|
|
52
|
+
export function checkNetwork(): boolean {
|
|
53
|
+
if (typeof navigator === "undefined") {
|
|
49
54
|
return true;
|
|
50
55
|
}
|
|
51
56
|
if (navigator.onLine === false) {
|
|
52
57
|
return false;
|
|
53
58
|
}
|
|
54
|
-
const
|
|
59
|
+
const _navigator = navigator as any;
|
|
60
|
+
const connection = _navigator.connection || _navigator.mozConnection || _navigator.webkitConnection;
|
|
55
61
|
if (!connection) {
|
|
56
62
|
return true;
|
|
57
63
|
}
|
|
@@ -61,10 +67,10 @@ export function checkNetwork() {
|
|
|
61
67
|
|
|
62
68
|
/**
|
|
63
69
|
* 对象转 FormData 格式
|
|
64
|
-
* @param
|
|
65
|
-
* @returns
|
|
70
|
+
* @param data 对象数据
|
|
71
|
+
* @returns FormData 对象
|
|
66
72
|
*/
|
|
67
|
-
export function objToFormData(data) {
|
|
73
|
+
export function objToFormData(data: Record<string, any>): FormData {
|
|
68
74
|
if (data instanceof FormData) {
|
|
69
75
|
return data;
|
|
70
76
|
}
|
|
@@ -77,14 +83,14 @@ export function objToFormData(data) {
|
|
|
77
83
|
|
|
78
84
|
/**
|
|
79
85
|
* FormData 转对象
|
|
80
|
-
* @param
|
|
81
|
-
* @returns
|
|
86
|
+
* @param formData FormData 对象
|
|
87
|
+
* @returns 普通对象
|
|
82
88
|
*/
|
|
83
|
-
export function formDataToObj(formData) {
|
|
89
|
+
export function formDataToObj(formData: FormData | any): Record<string, any> {
|
|
84
90
|
if (!(formData instanceof FormData)) {
|
|
85
91
|
return formData;
|
|
86
92
|
}
|
|
87
|
-
const tempData = {};
|
|
93
|
+
const tempData: Record<string, any> = {};
|
|
88
94
|
for (const [key, value] of formData.entries()) {
|
|
89
95
|
tempData[key] = value;
|
|
90
96
|
}
|