@wzyjs/hooks 0.2.27 → 0.2.37

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.
Files changed (73) hide show
  1. package/dist/antd/useDateRange.d.ts +0 -0
  2. package/dist/antd/useDateRange.js +122 -0
  3. package/dist/antd/useForm.d.ts +29 -0
  4. package/dist/antd/useForm.js +113 -0
  5. package/dist/antd/useHideFooter.js +16 -0
  6. package/dist/antd/useHovered.d.ts +9 -0
  7. package/dist/antd/useHovered.js +24 -0
  8. package/dist/antd/useImperativeHandleForm.d.ts +5 -0
  9. package/dist/antd/useImperativeHandleForm.js +13 -0
  10. package/dist/antd/useModalFooter.d.ts +8 -0
  11. package/dist/antd/useModalFooter.js +69 -0
  12. package/dist/antd/useOptions.d.ts +0 -0
  13. package/dist/antd/useOptions.js +46 -0
  14. package/dist/antd/usePaginationState.d.ts +9 -0
  15. package/dist/antd/usePaginationState.js +41 -0
  16. package/dist/antd/useStep.d.ts +16 -0
  17. package/dist/antd/useStep.js +35 -0
  18. package/dist/base/useClick.d.ts +10 -0
  19. package/dist/base/useClick.js +31 -0
  20. package/dist/base/useDeepEffect.d.ts +1 -0
  21. package/dist/base/useDeepEffect.js +18 -0
  22. package/dist/base/useEffectValue.d.ts +1 -0
  23. package/dist/base/useEffectValue.js +11 -0
  24. package/dist/base/useOnceEffect.d.ts +1 -0
  25. package/dist/base/useOnceEffect.js +24 -0
  26. package/dist/base/useVisibleInfo.d.ts +5 -0
  27. package/dist/base/useVisibleInfo.js +23 -0
  28. package/dist/dom/useElementScrollVisible.js +40 -0
  29. package/dist/index.d.ts +13 -0
  30. package/dist/index.js +42 -0
  31. package/dist/other/useCRUD.d.ts +63 -0
  32. package/dist/other/useCRUD.js +135 -0
  33. package/dist/other/useRequestPro.d.ts +0 -0
  34. package/dist/other/useRequestPro.js +73 -0
  35. package/dist/other/useSetting.d.ts +0 -0
  36. package/dist/other/useSetting.js +69 -0
  37. package/dist/other/useUserInfo.d.ts +0 -0
  38. package/dist/other/useUserInfo.js +97 -0
  39. package/dist/other/useWechatLogin.d.ts +11 -0
  40. package/dist/other/useWechatLogin.js +86 -0
  41. package/package.json +7 -36
  42. package/dist/cjs/index.d.ts +0 -10
  43. package/dist/cjs/index.js +0 -63
  44. package/dist/cjs/useDateRange.d.ts +0 -26
  45. package/dist/cjs/useDateRange.js +0 -135
  46. package/dist/cjs/useEffectValue.d.ts +0 -2
  47. package/dist/cjs/useEffectValue.js +0 -34
  48. package/dist/cjs/useElementScrollVisible.js +0 -61
  49. package/dist/cjs/useHideFooter.js +0 -38
  50. package/dist/cjs/useOptions.d.ts +0 -13
  51. package/dist/cjs/useOptions.js +0 -60
  52. package/dist/cjs/useRequestPro.d.ts +0 -11
  53. package/dist/cjs/useRequestPro.js +0 -76
  54. package/dist/cjs/useVisibleInfo.d.ts +0 -5
  55. package/dist/cjs/useVisibleInfo.js +0 -45
  56. package/dist/esm/index.d.ts +0 -10
  57. package/dist/esm/index.js +0 -10
  58. package/dist/esm/useDateRange.d.ts +0 -26
  59. package/dist/esm/useDateRange.js +0 -115
  60. package/dist/esm/useEffectValue.d.ts +0 -2
  61. package/dist/esm/useEffectValue.js +0 -18
  62. package/dist/esm/useElementScrollVisible.d.ts +0 -5
  63. package/dist/esm/useElementScrollVisible.js +0 -52
  64. package/dist/esm/useHideFooter.d.ts +0 -1
  65. package/dist/esm/useHideFooter.js +0 -13
  66. package/dist/esm/useOptions.d.ts +0 -13
  67. package/dist/esm/useOptions.js +0 -60
  68. package/dist/esm/useRequestPro.d.ts +0 -11
  69. package/dist/esm/useRequestPro.js +0 -64
  70. package/dist/esm/useVisibleInfo.d.ts +0 -5
  71. package/dist/esm/useVisibleInfo.js +0 -32
  72. /package/dist/{cjs → antd}/useHideFooter.d.ts +0 -0
  73. /package/dist/{cjs → dom}/useElementScrollVisible.d.ts +0 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.useOnceEffect = void 0;
13
+ var react_1 = require("react");
14
+ var useOnceEffect = function (effect, deps) {
15
+ var _a = (0, react_1.useState)(false), hasRun = _a[0], setHasRun = _a[1];
16
+ (0, react_1.useEffect)(function () {
17
+ if (hasRun) {
18
+ return;
19
+ }
20
+ var res = effect();
21
+ setHasRun(res);
22
+ }, __spreadArray([hasRun, effect], deps, true));
23
+ };
24
+ exports.useOnceEffect = useOnceEffect;
@@ -0,0 +1,5 @@
1
+ export declare const useVisibleInfo: (v: boolean, i: any) => (boolean | any[] | {
2
+ setTrue: () => void;
3
+ setFalse: () => void;
4
+ toggle: () => void;
5
+ })[];
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useVisibleInfo = void 0;
4
+ var react_1 = require("react");
5
+ // visible和info的集合体
6
+ var useVisibleInfo = function (v, i) {
7
+ if (v === void 0) { v = false; }
8
+ var _a = (0, react_1.useState)(v), visible = _a[0], setVisible = _a[1];
9
+ var _b = (0, react_1.useState)(i), info = _b[0], setInfo = _b[1];
10
+ return [
11
+ visible,
12
+ {
13
+ setTrue: function () { return setVisible(true); },
14
+ setFalse: function () { return setVisible(false); },
15
+ toggle: function () { return setVisible(!visible); },
16
+ },
17
+ [
18
+ info,
19
+ setInfo,
20
+ ],
21
+ ];
22
+ };
23
+ exports.useVisibleInfo = useVisibleInfo;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useElementScrollVisible = void 0;
4
+ var react_1 = require("react");
5
+ // 判断某元素滚动时,指定元素是否显示
6
+ var useElementScrollVisible = function (scroll, target) {
7
+ var $scroll = document.querySelector(scroll) || {};
8
+ var $scrollRect = $scroll.getBoundingClientRect();
9
+ var _a = (0, react_1.useState)(false), visible = _a[0], setVisible = _a[1];
10
+ var _b = (0, react_1.useState)(''), direction = _b[0], setDirection = _b[1];
11
+ var _c = (0, react_1.useState)(''), rect = _c[0], setRect = _c[1];
12
+ (0, react_1.useEffect)(function () {
13
+ var fn = function () {
14
+ var $target = document.querySelector(target) || {};
15
+ var rect = $target.getBoundingClientRect();
16
+ setRect(rect);
17
+ if (rect.bottom < $scrollRect.top) {
18
+ setDirection('top');
19
+ setVisible(false);
20
+ }
21
+ else if (rect.top > $scrollRect.bottom) {
22
+ setDirection('bottom');
23
+ setVisible(false);
24
+ }
25
+ else {
26
+ setDirection('show');
27
+ setVisible(true);
28
+ }
29
+ };
30
+ fn();
31
+ $scroll.addEventListener('scroll', fn);
32
+ return function () { return $scroll.removeEventListener('scroll', fn); };
33
+ }, []);
34
+ return {
35
+ visible: visible,
36
+ direction: direction,
37
+ rect: rect,
38
+ };
39
+ };
40
+ exports.useElementScrollVisible = useElementScrollVisible;
@@ -0,0 +1,13 @@
1
+ export * from 'ahooks';
2
+ export { default as useUrlState } from '@ahooksjs/use-url-state';
3
+ export { useCopyToClipboard, useCookie, useUpdate } from 'react-use';
4
+ export * from './base/useEffectValue';
5
+ export * from './base/useVisibleInfo';
6
+ export * from './base/useClick';
7
+ export * from './antd/useForm';
8
+ export * from './antd/usePaginationState';
9
+ export * from './antd/useHideFooter';
10
+ export * from './antd/useHovered';
11
+ export * from './antd/useModalFooter';
12
+ export * from './antd/useImperativeHandleForm';
13
+ export * from './dom/useElementScrollVisible';
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.useUpdate = exports.useCookie = exports.useCopyToClipboard = exports.useUrlState = void 0;
21
+ __exportStar(require("ahooks"), exports);
22
+ var use_url_state_1 = require("@ahooksjs/use-url-state");
23
+ Object.defineProperty(exports, "useUrlState", { enumerable: true, get: function () { return __importDefault(use_url_state_1).default; } });
24
+ var react_use_1 = require("react-use");
25
+ Object.defineProperty(exports, "useCopyToClipboard", { enumerable: true, get: function () { return react_use_1.useCopyToClipboard; } });
26
+ Object.defineProperty(exports, "useCookie", { enumerable: true, get: function () { return react_use_1.useCookie; } });
27
+ Object.defineProperty(exports, "useUpdate", { enumerable: true, get: function () { return react_use_1.useUpdate; } });
28
+ __exportStar(require("./base/useEffectValue"), exports);
29
+ __exportStar(require("./base/useVisibleInfo"), exports);
30
+ __exportStar(require("./base/useClick"), exports);
31
+ __exportStar(require("./antd/useForm"), exports);
32
+ __exportStar(require("./antd/usePaginationState"), exports);
33
+ __exportStar(require("./antd/useHideFooter"), exports);
34
+ __exportStar(require("./antd/useHovered"), exports);
35
+ __exportStar(require("./antd/useModalFooter"), exports);
36
+ __exportStar(require("./antd/useImperativeHandleForm"), exports);
37
+ __exportStar(require("./dom/useElementScrollVisible"), exports);
38
+ // export * from './other/useSetting'
39
+ //
40
+ // export * from './useRequestPro'
41
+ // export * from './useDateRange'
42
+ // export * from './useOptions'
@@ -0,0 +1,63 @@
1
+ export interface ApiResult<D = any> {
2
+ status?: string;
3
+ message?: string;
4
+ success?: boolean;
5
+ data?: D;
6
+ meta?: {
7
+ total_count?: number;
8
+ filter_count?: number;
9
+ };
10
+ }
11
+ export declare enum CRUDAction {
12
+ Info = "info",
13
+ List = "list",
14
+ Create = "create",
15
+ Update = "update",
16
+ Delete = "delete"
17
+ }
18
+ type InfoAPI<I> = (id: string) => Promise<ApiResult<I>>;
19
+ type ListAPI<I> = (params?: any) => Promise<ApiResult<I[]>>;
20
+ type CreateAPI<I> = (data: any) => Promise<ApiResult<I>>;
21
+ type UpdateAPI<I> = (id: string, data: any) => Promise<ApiResult<I>>;
22
+ type DeleteAPI<I> = (id: string) => Promise<ApiResult<I>>;
23
+ interface Apis<I> {
24
+ [CRUDAction.Info]?: InfoAPI<I>;
25
+ [CRUDAction.List]?: ListAPI<I>;
26
+ [CRUDAction.Create]?: CreateAPI<I>;
27
+ [CRUDAction.Update]?: UpdateAPI<I>;
28
+ [CRUDAction.Delete]?: DeleteAPI<I>;
29
+ }
30
+ interface AutoRefreshList {
31
+ [CRUDAction.Info]?: boolean;
32
+ [CRUDAction.List]?: boolean;
33
+ [CRUDAction.Create]?: boolean;
34
+ [CRUDAction.Update]?: boolean;
35
+ [CRUDAction.Delete]?: boolean;
36
+ }
37
+ interface CRUDOptions<I> {
38
+ id?: string;
39
+ apis: Apis<I>;
40
+ autoRefreshList?: boolean | AutoRefreshList;
41
+ convertInfo?: (data?: I) => any;
42
+ replaceLocation?: boolean;
43
+ autoFetchList?: boolean;
44
+ debounceWait?: number;
45
+ onSuccess?: (action: CRUDAction, data?: any) => void;
46
+ }
47
+ export declare function useCRUD<I extends {
48
+ id: string;
49
+ }>(options: CRUDOptions<I>): {
50
+ info: I;
51
+ list: I[];
52
+ infoState: import("ahooks/lib/useRequest/src/types").Result<ApiResult<I>, string[]>;
53
+ listState: import("ahooks/lib/useRequest/src/types").Result<ApiResult<I[]>, [params?: any]>;
54
+ createState: import("ahooks/lib/useRequest/src/types").Result<ApiResult<I>, [data: any]>;
55
+ updateState: import("ahooks/lib/useRequest/src/types").Result<ApiResult<I>, [id: string, data: any]>;
56
+ deleteState: import("ahooks/lib/useRequest/src/types").Result<ApiResult<I>, [id: string]>;
57
+ onSave: (data: I & {
58
+ id?: string;
59
+ }) => Promise<void>;
60
+ apis: Apis<I>;
61
+ loading: boolean;
62
+ };
63
+ export {};
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.CRUDAction = void 0;
40
+ exports.useCRUD = useCRUD;
41
+ var react_1 = require("react");
42
+ var ahooks_1 = require("ahooks");
43
+ var CRUDAction;
44
+ (function (CRUDAction) {
45
+ CRUDAction["Info"] = "info";
46
+ CRUDAction["List"] = "list";
47
+ CRUDAction["Create"] = "create";
48
+ CRUDAction["Update"] = "update";
49
+ CRUDAction["Delete"] = "delete";
50
+ })(CRUDAction || (exports.CRUDAction = CRUDAction = {}));
51
+ function useCRUD(options) {
52
+ var _this = this;
53
+ var id = options.id, apis = options.apis, _a = options.autoRefreshList, autoRefreshList = _a === void 0 ? true : _a, _b = options.autoFetchList, autoFetchList = _b === void 0 ? false : _b, _c = options.replaceLocation, replaceLocation = _c === void 0 ? false : _c, _d = options.convertInfo, convertInfo = _d === void 0 ? function (data) { return data; } : _d, _e = options.onSuccess, onSuccess = _e === void 0 ? function () { return undefined; } : _e, _f = options.debounceWait, debounceWait = _f === void 0 ? 300 : _f;
54
+ var _g = (0, react_1.useState)([]), list = _g[0], setList = _g[1];
55
+ var _h = (0, react_1.useState)(), info = _h[0], setInfo = _h[1];
56
+ var shouldRefresh = function (action, autoRefreshList) {
57
+ if (typeof autoRefreshList === 'boolean') {
58
+ return autoRefreshList;
59
+ }
60
+ return autoRefreshList[action];
61
+ };
62
+ var infoState = (0, ahooks_1.useRequest)(apis.info, {
63
+ ready: !!id,
64
+ defaultParams: [id],
65
+ debounceWait: debounceWait,
66
+ onSuccess: function (res) {
67
+ var convertedInfo = convertInfo(res.data);
68
+ setInfo(convertedInfo);
69
+ onSuccess(CRUDAction.Info, convertedInfo);
70
+ },
71
+ });
72
+ var listState = (0, ahooks_1.useRequest)(apis.list, {
73
+ manual: !autoFetchList,
74
+ debounceWait: debounceWait,
75
+ onSuccess: function (res) {
76
+ var _a;
77
+ var convertedList = (_a = res.data) === null || _a === void 0 ? void 0 : _a.map(convertInfo);
78
+ setList(convertedList || []);
79
+ onSuccess(CRUDAction.List, convertedList);
80
+ },
81
+ });
82
+ var createState = (0, ahooks_1.useRequest)(apis.create, {
83
+ manual: true,
84
+ debounceWait: debounceWait,
85
+ onSuccess: function (res) {
86
+ if (shouldRefresh(CRUDAction.Create, autoRefreshList)) {
87
+ listState.run();
88
+ }
89
+ onSuccess(CRUDAction.Create, res.data);
90
+ },
91
+ });
92
+ var updateState = (0, ahooks_1.useRequest)(apis.update, {
93
+ manual: true,
94
+ debounceWait: debounceWait,
95
+ onSuccess: function (res) {
96
+ if (shouldRefresh(CRUDAction.Update, autoRefreshList)) {
97
+ listState.run();
98
+ }
99
+ onSuccess(CRUDAction.Update, res.data);
100
+ },
101
+ });
102
+ var deleteState = (0, ahooks_1.useRequest)(apis.delete, {
103
+ manual: true,
104
+ debounceWait: debounceWait,
105
+ onSuccess: function (res) {
106
+ if (shouldRefresh(CRUDAction.Delete, autoRefreshList)) {
107
+ listState.run();
108
+ }
109
+ onSuccess(CRUDAction.Delete, res.data);
110
+ },
111
+ });
112
+ var onSave = function (data) { return __awaiter(_this, void 0, void 0, function () {
113
+ return __generator(this, function (_a) {
114
+ if (data.id) {
115
+ updateState.run(data.id, data);
116
+ }
117
+ else {
118
+ createState.run(data);
119
+ }
120
+ return [2 /*return*/];
121
+ });
122
+ }); };
123
+ return {
124
+ info: info,
125
+ list: list,
126
+ infoState: infoState,
127
+ listState: listState,
128
+ createState: createState,
129
+ updateState: updateState,
130
+ deleteState: deleteState,
131
+ onSave: onSave,
132
+ apis: apis,
133
+ loading: infoState.loading || listState.loading || createState.loading || updateState.loading || deleteState.loading,
134
+ };
135
+ }
File without changes
@@ -0,0 +1,73 @@
1
+ // import { message } from 'antd'
2
+ // import { useRequest } from 'ahooks'
3
+ // import { noop, omit } from '@wzyjs/utils'
4
+ // import { RequestRes } from '@wzyjs/types'
5
+ // import { Options, Result, Service } from 'ahooks/lib/useRequest/src/types'
6
+ //
7
+ // // 在 useRequest 的基础上扩展的功能
8
+ // interface UserOptions<P extends any[], R> extends Options<R, P> {
9
+ // alertErrorMessage?: false | string,
10
+ // alertSuccessMessage?: true | string,
11
+ // }
12
+ //
13
+ // // 取出 data 里的 data
14
+ // interface IResult<R extends RequestRes, P extends any[]> extends Omit<Result<R, P>, 'data'> {
15
+ // data?: R['data'],
16
+ // }
17
+ //
18
+ // const defaultResult = {
19
+ // loading: false,
20
+ // data: undefined,
21
+ // error: undefined,
22
+ // params: [],
23
+ // cancel: noop,
24
+ // refresh: noop,
25
+ // refreshAsync: noop,
26
+ // run: noop,
27
+ // runAsync: noop,
28
+ // mutate: noop,
29
+ // }
30
+ //
31
+ // export const useRequestPro = <P extends any[], R extends RequestRes>(
32
+ // reqPromise?: Service<R, P>,
33
+ // userOptions?: UserOptions<P, R>,
34
+ // ): IResult<R, P> => {
35
+ // if (!reqPromise) {
36
+ // return defaultResult as IResult<R, P>
37
+ // }
38
+ //
39
+ // const { alertErrorMessage = true, alertSuccessMessage = false } = userOptions || {}
40
+ //
41
+ // const defaultOptions = {
42
+ // debounceWait: 300,
43
+ // throttleWait: 300,
44
+ // onError: (err: Error, params: P) => {
45
+ // if (alertErrorMessage) {
46
+ // message.error(typeof alertErrorMessage === 'string' ? alertErrorMessage : err.message || '请求失败')
47
+ // }
48
+ // userOptions?.onError?.(err, params)
49
+ // },
50
+ // onSuccess: (res: R, params: P) => {
51
+ // // 如果失败,则还是调用 onError
52
+ // if (!res?.success) {
53
+ // defaultOptions.onError(new Error(res?.message), params)
54
+ // return
55
+ // }
56
+ //
57
+ // // 如果成功,并且需要自动弹出提示
58
+ // if (alertSuccessMessage) {
59
+ // message.success(typeof alertSuccessMessage === 'string' ? alertSuccessMessage : res.message || '请求成功')
60
+ // }
61
+ // userOptions?.onSuccess?.(res, params)
62
+ // },
63
+ // }
64
+ //
65
+ // // 用户配置与默认配置合并
66
+ // const enableOptions = Object.assign(defaultOptions, omit(userOptions, ['onSuccess', 'onError']))
67
+ //
68
+ // // 取出 data 里的 data
69
+ // const state = useRequest(reqPromise, enableOptions)
70
+ // state.data = state.data?.data
71
+ //
72
+ // return state
73
+ // }
File without changes
@@ -0,0 +1,69 @@
1
+ // import { useCallback, useEffect, useState } from 'react'
2
+ //
3
+ // export const useSetting = (key: string, defaultValue: any = {}) => {
4
+ // // 分割 key 以支持嵌套结构
5
+ // const keys = key.split('.')
6
+ //
7
+ // // 获取初始值
8
+ // const getInitialSetting = useCallback(() => {
9
+ // if (typeof window === 'undefined') return defaultValue
10
+ // try {
11
+ // const stored = localStorage.getItem('settings')
12
+ // if (!stored) return defaultValue
13
+ // let result = JSON.parse(stored)
14
+ // for (let k of keys) {
15
+ // if (result[k] === undefined) {
16
+ // return defaultValue
17
+ // }
18
+ // result = result[k]
19
+ // }
20
+ // return result
21
+ // } catch (error) {
22
+ // console.error('从 localStorage 读取设置失败:', error)
23
+ // return defaultValue
24
+ // }
25
+ // }, [keys])
26
+ //
27
+ // const [setting, setSettingState] = useState(getInitialSetting)
28
+ //
29
+ // // 更新 localStorage
30
+ // const setSetting = useCallback(
31
+ // (newSetting: any) => {
32
+ // setSettingState(newSetting)
33
+ // if (typeof window === 'undefined') return
34
+ // try {
35
+ // const stored = localStorage.getItem('settings')
36
+ // const parsed = stored ? JSON.parse(stored) : {}
37
+ //
38
+ // let current = parsed
39
+ // for (let i = 0; i < keys.length - 1; i++) {
40
+ // if (current[keys[i]] === undefined || typeof current[keys[i]] !== 'object') {
41
+ // current[keys[i]] = {}
42
+ // }
43
+ // current = current[keys[i]]
44
+ // }
45
+ // current[keys[keys.length - 1]] = newSetting
46
+ //
47
+ // localStorage.setItem('settings', JSON.stringify(parsed))
48
+ // } catch (error) {
49
+ // console.error('向 localStorage 写入设置失败:', error)
50
+ // }
51
+ // },
52
+ // [keys],
53
+ // )
54
+ //
55
+ // // 监听 localStorage 中 settings 的变化
56
+ // useEffect(() => {
57
+ // const handleStorageChange = (event: any) => {
58
+ // if (event.key === 'settings') {
59
+ // setSettingState(getInitialSetting())
60
+ // }
61
+ // }
62
+ // window.addEventListener('storage', handleStorageChange)
63
+ // return () => {
64
+ // window.removeEventListener('storage', handleStorageChange)
65
+ // }
66
+ // }, [getInitialSetting])
67
+ //
68
+ // return [setting, setSetting]
69
+ // }
File without changes
@@ -0,0 +1,97 @@
1
+ // import { useEffect, useState } from 'react'
2
+ //
3
+ // import { pick } from 'lodash'
4
+ // import { useLocalStorageState, useRequest } from 'ahooks'
5
+ //
6
+ // import { user } from '@/services'
7
+ // import { User, PageKey } from '@/types'
8
+ //
9
+ // export const useUserInfo = () => {
10
+ // const [token, setToken] = useLocalStorageState<user.LoginResult>('token')
11
+ //
12
+ // const [userInfo, setUserInfo] = useState<User>()
13
+ //
14
+ // const loginState = useRequest(user.login, {
15
+ // manual: true,
16
+ // })
17
+ //
18
+ // const refreshState = useRequest(user.refresh, {
19
+ // manual: true,
20
+ // })
21
+ //
22
+ // const userInfoState = useRequest(user.info, {
23
+ // refreshDeps: [token?.access_token],
24
+ // ready: !!token?.access_token,
25
+ // debounceWait: 300,
26
+ // onSuccess: res => {
27
+ // setUserInfo(res.data)
28
+ // },
29
+ // onError: () => {
30
+ // refreshToken()
31
+ // },
32
+ // })
33
+ //
34
+ // const cacheToken = (data?: user.LoginResult) => {
35
+ // if (!data) {
36
+ // throw new Error('token failed')
37
+ // }
38
+ // data.expires_at = Date.now() + data.expires
39
+ // setToken(data)
40
+ // }
41
+ //
42
+ // const refreshToken = async () => {
43
+ // const token = JSON.parse(localStorage.getItem('token') || '{}')
44
+ //
45
+ // if (token?.expires_at && ((token.expires_at - Date.now()) < (30 * 1000))) {
46
+ // const res = await refreshState.runAsync(pick(token, 'refresh_token'))
47
+ // cacheToken(res.data)
48
+ // }
49
+ // }
50
+ //
51
+ // const login = async (data: user.LoginData) => {
52
+ // if (!data) {
53
+ // throw new Error('data is required')
54
+ // }
55
+ //
56
+ // const res = await loginState.runAsync(data)
57
+ // cacheToken(res.data)
58
+ // }
59
+ //
60
+ // const logout = async () => {
61
+ // if (!token) {
62
+ // return
63
+ // }
64
+ // await user.logout({ refresh_token: token.refresh_token })
65
+ // setToken(undefined)
66
+ // setUserInfo(undefined)
67
+ // location.reload()
68
+ // }
69
+ //
70
+ // useEffect(() => {
71
+ // const timer = setInterval(async () => {
72
+ // try {
73
+ // await refreshToken()
74
+ //
75
+ // } catch (err) {
76
+ // clearInterval(timer)
77
+ // if (location.pathname !== PageKey.Login) {
78
+ // location.reload()
79
+ // }
80
+ // }
81
+ // }, 10 * 1000)
82
+ //
83
+ // return () => {
84
+ // clearInterval(timer)
85
+ // }
86
+ // }, [])
87
+ //
88
+ // return {
89
+ // login,
90
+ // loginLoading: loginState.loading,
91
+ //
92
+ // userInfo,
93
+ // userInfoLoading: userInfoState.loading,
94
+ //
95
+ // logout,
96
+ // }
97
+ // }
@@ -0,0 +1,11 @@
1
+ export interface WeChatLoginResult {
2
+ token: string;
3
+ }
4
+ interface wechatLoginOption {
5
+ onSuccess?: (loginResult: WeChatLoginResult) => void;
6
+ }
7
+ export declare function insertWxLoginScript(): void;
8
+ export declare const useWechatLogin: (option: wechatLoginOption) => {
9
+ renderLoginView: () => void;
10
+ };
11
+ export {};