@hzab/data-model 1.8.9-alpha.0 → 2.0.0-alpha.0

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.
@@ -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
- import DataModel from "./data-model";
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) {
@@ -4,6 +4,7 @@ import DataModel from "./data-model";
4
4
  export * from "./axios";
5
5
  export * from "./data-model";
6
6
  export * from "./hooks";
7
+ export * from "./type";
7
8
 
8
9
  export { axios, DataModel };
9
10
 
@@ -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 {*} url 文件路径
4
- * @param {*} opt
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 const _$Temp = {
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 {*} ax
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 {*} ax
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 {*} ax
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
- * @param {*} errMsg 网络异常消息
45
- * @returns
50
+ * @returns 网络是否可用
46
51
  */
47
- export function checkNetwork() {
48
- if (!navigator) {
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 connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
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 {Object} data
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 {FormData} formData
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
  }