@nokecy/qc-ui 1.0.97 → 1.0.99

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,10 +1,20 @@
1
1
  import React from "react";
2
2
  import type { ColumnScheme, QueryScheme, CurrentSchemeDto } from "../shared/storage/schemeStorageAdapter";
3
- import type { BackendApiAdapterConfig } from "../shared/storage/backendApiAdapter";
4
3
  /**
5
4
  * 方案管理 API 接口
6
5
  *
7
- * 这些 API 由 useGridSchemes Hook 自动提供,不需要在 Provider 中手动配置
6
+ * ⚠️ 必须通过 useSchemeManager Hook 创建,然后传入 Provider
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const adapter = useMemo(() => new BackendApiSchemeAdapter({ ... }), []);
11
+ * const schemeManager = useSchemeManager({ adapter, autoLoad: true });
12
+ *
13
+ * <GridPlusContext.Provider value={{
14
+ * ...otherValues,
15
+ * ...schemeManager // 展开方案管理状态
16
+ * }}>
17
+ * ```
8
18
  */
9
19
  export interface SchemeManagementAPI {
10
20
  /**
@@ -74,7 +84,7 @@ export interface SchemeManagementAPI {
74
84
  /**
75
85
  * GridPlus Context 值接口
76
86
  *
77
- * 注意:方案管理 API 不需要在 Provider 中配置,它们由 useGridSchemes Hook 自动提供
87
+ * ⚠️ 必须包含方案管理 API,通过 useSchemeManager Hook 创建后传入
78
88
  */
79
89
  export interface GridPlusContextValue extends SchemeManagementAPI {
80
90
  /**
@@ -123,32 +133,10 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
123
133
  */
124
134
  updateQueryOrder?: (order: string[]) => void;
125
135
  /**
126
- * 后端 API 配置(可选)
127
- *
128
- * 如果提供此配置,useGridSchemes Hook 将自动使用 BackendApiSchemeAdapter
129
- * 否则将使用 LocalStorageSchemeAdapter
130
- *
131
- * @example
132
- * ```tsx
133
- * backendApiConfig: {
134
- * apiBaseUrl: 'https://api.example.com',
135
- * getToken: () => localStorage.getItem('token'),
136
- * getUserId: () => localStorage.getItem('userId'),
137
- * timeout: 10000
138
- * }
139
- * ```
140
- */
141
- backendApiConfig?: Omit<BackendApiAdapterConfig, 'enableDebugLog'>;
142
- /**
143
- * 当前用户ID(可选)
144
- *
145
- * 用于监听用户切换,自动重新加载方案数据
146
- * 当此值变化时,系统会自动调用 refreshSchemes() 重新加载所有方案
136
+ * 当前用户ID(内部使用)
147
137
  *
148
- * @example
149
- * ```tsx
150
- * currentUserId: currentUser?.id
151
- * ```
138
+ * 用于 SchemeManager 监听用户切换,自动重新加载方案数据
139
+ * 此字段由 useSchemeManager 自动管理,无需手动设置
152
140
  */
153
141
  currentUserId?: string | null;
154
142
  }
@@ -9,13 +9,24 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
9
9
  /**
10
10
  * 方案管理 API 接口
11
11
  *
12
- * 这些 API 由 useGridSchemes Hook 自动提供,不需要在 Provider 中手动配置
12
+ * ⚠️ 必须通过 useSchemeManager Hook 创建,然后传入 Provider
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const adapter = useMemo(() => new BackendApiSchemeAdapter({ ... }), []);
17
+ * const schemeManager = useSchemeManager({ adapter, autoLoad: true });
18
+ *
19
+ * <GridPlusContext.Provider value={{
20
+ * ...otherValues,
21
+ * ...schemeManager // 展开方案管理状态
22
+ * }}>
23
+ * ```
13
24
  */
14
25
 
15
26
  /**
16
27
  * GridPlus Context 值接口
17
28
  *
18
- * 注意:方案管理 API 不需要在 Provider 中配置,它们由 useGridSchemes Hook 自动提供
29
+ * ⚠️ 必须包含方案管理 API,通过 useSchemeManager Hook 创建后传入
19
30
  */
20
31
 
21
32
  var GridPlusContext = exports.GridPlusContext = /*#__PURE__*/_react.default.createContext({
@@ -55,43 +55,46 @@ export declare function useSchemeManager(config: UseSchemeManagerConfig): {
55
55
  /**
56
56
  * 在组件中使用集中式方案管理
57
57
  *
58
- * 支持两种模式(根据 Context 配置自动选择):
59
- * 1. Backend API 模式: Context 提供 backendApiConfig,使用后端适配器
60
- * 2. LocalStorage 模式: 不提供配置,使用本地存储适配器
58
+ * ⚠️ 必须在 Provider 中传入 SchemeManager 状态,否则抛出错误
61
59
  *
62
60
  * @example
63
61
  * ```tsx
64
- * // 模式1:提供后端 API 配置
65
- * <GridPlusContext.Provider value={{
66
- * extensibleColumns: [],
67
- * columnState: undefined,
68
- * onSaveColumnState: () => {},
69
- * applyToGlobal: () => {},
70
- * resetCurrent: () => {},
71
- * resetAll: () => {},
72
- * queryFormItems: [],
73
- * backendApiConfig: {
74
- * apiBaseUrl: 'https://api.example.com',
75
- * getToken: () => localStorage.getItem('token'),
76
- * getUserId: () => localStorage.getItem('userId')
77
- * }
78
- * }}>
79
- * <MyGrid />
80
- * </GridPlusContext.Provider>
62
+ * // 1. 创建适配器和方案管理器
63
+ * function App() {
64
+ * const adapter = useMemo(
65
+ * () => new BackendApiSchemeAdapter({
66
+ * apiBaseUrl: 'https://api.example.com',
67
+ * getToken: () => localStorage.getItem('token'),
68
+ * getUserId: () => localStorage.getItem('userId')
69
+ * }),
70
+ * []
71
+ * );
72
+ *
73
+ * const schemeManager = useSchemeManager({
74
+ * adapter,
75
+ * autoLoad: true,
76
+ * showErrorMessage: true,
77
+ * currentUserId: currentUser?.id
78
+ * });
81
79
  *
82
- * // 模式2:无配置,自动使用 LocalStorage
83
- * <GridPlusContext.Provider value={{
84
- * extensibleColumns: [],
85
- * columnState: undefined,
86
- * onSaveColumnState: () => {},
87
- * applyToGlobal: () => {},
88
- * resetCurrent: () => {},
89
- * resetAll: () => {},
90
- * queryFormItems: []
91
- * }}>
92
- * <MyGrid />
93
- * </GridPlusContext.Provider>
80
+ * // 2. 传入 Provider
81
+ * return (
82
+ * <GridPlusContext.Provider value={{
83
+ * extensibleColumns: [],
84
+ * columnState: undefined,
85
+ * onSaveColumnState: () => {},
86
+ * applyToGlobal: () => {},
87
+ * resetCurrent: () => {},
88
+ * resetAll: () => {},
89
+ * queryFormItems: [],
90
+ * ...schemeManager // 展开方案管理状态
91
+ * }}>
92
+ * <MyGrid />
93
+ * </GridPlusContext.Provider>
94
+ * );
95
+ * }
94
96
  *
97
+ * // 3. 在子组件中使用
95
98
  * function MyGrid() {
96
99
  * const {
97
100
  * columnSchemes,
@@ -481,93 +481,49 @@ function useSchemeManager(config) {
481
481
  };
482
482
  }
483
483
 
484
- /**
485
- * Fallback 模式:根据后端 API 配置自动选择适配器
486
- */
487
- function useFallbackSchemeManager(backendApiConfig, currentUserId) {
488
- // 根据配置选择适配器
489
- var adapter = (0, _react.useRef)(function () {
490
- if (backendApiConfig) {
491
- // 如果提供了后端 API 配置,使用后端适配器
492
- var _require = require("../shared/storage/backendApiAdapter"),
493
- BackendApiSchemeAdapter = _require.BackendApiSchemeAdapter;
494
- console.log('[useFallbackSchemeManager] 使用后端 API 适配器');
495
- return new BackendApiSchemeAdapter(_objectSpread(_objectSpread({}, backendApiConfig), {}, {
496
- enableDebugLog: false
497
- }));
498
- } else {
499
- // 否则使用本地存储适配器
500
- var _require2 = require("../shared/storage/localStorageAdapter"),
501
- LocalStorageSchemeAdapter = _require2.LocalStorageSchemeAdapter;
502
- console.log('[useFallbackSchemeManager] 使用本地存储适配器');
503
- return new LocalStorageSchemeAdapter({
504
- storageKey: 'ag-grid-plus-schemes',
505
- enableDebugLog: false
506
- });
507
- }
508
- }).current();
509
-
510
- // 使用选定的适配器进行状态管理
511
- var manager = useSchemeManager({
512
- adapter: adapter,
513
- autoLoad: true,
514
- showErrorMessage: true,
515
- currentUserId: currentUserId
516
- });
517
-
518
- // 返回与 Context 相同的接口
519
- return _objectSpread({
520
- // 保留必需的默认值
521
- extensibleColumns: [],
522
- columnState: undefined,
523
- onSaveColumnState: function onSaveColumnState() {},
524
- applyToGlobal: function applyToGlobal() {},
525
- resetCurrent: function resetCurrent() {},
526
- resetAll: function resetAll() {},
527
- queryFormItems: []
528
- }, manager);
529
- }
530
-
531
484
  /**
532
485
  * 在组件中使用集中式方案管理
533
486
  *
534
- * 支持两种模式(根据 Context 配置自动选择):
535
- * 1. Backend API 模式: Context 提供 backendApiConfig,使用后端适配器
536
- * 2. LocalStorage 模式: 不提供配置,使用本地存储适配器
487
+ * ⚠️ 必须在 Provider 中传入 SchemeManager 状态,否则抛出错误
537
488
  *
538
489
  * @example
539
490
  * ```tsx
540
- * // 模式1:提供后端 API 配置
541
- * <GridPlusContext.Provider value={{
542
- * extensibleColumns: [],
543
- * columnState: undefined,
544
- * onSaveColumnState: () => {},
545
- * applyToGlobal: () => {},
546
- * resetCurrent: () => {},
547
- * resetAll: () => {},
548
- * queryFormItems: [],
549
- * backendApiConfig: {
550
- * apiBaseUrl: 'https://api.example.com',
551
- * getToken: () => localStorage.getItem('token'),
552
- * getUserId: () => localStorage.getItem('userId')
553
- * }
554
- * }}>
555
- * <MyGrid />
556
- * </GridPlusContext.Provider>
491
+ * // 1. 创建适配器和方案管理器
492
+ * function App() {
493
+ * const adapter = useMemo(
494
+ * () => new BackendApiSchemeAdapter({
495
+ * apiBaseUrl: 'https://api.example.com',
496
+ * getToken: () => localStorage.getItem('token'),
497
+ * getUserId: () => localStorage.getItem('userId')
498
+ * }),
499
+ * []
500
+ * );
557
501
  *
558
- * // 模式2:无配置,自动使用 LocalStorage
559
- * <GridPlusContext.Provider value={{
560
- * extensibleColumns: [],
561
- * columnState: undefined,
562
- * onSaveColumnState: () => {},
563
- * applyToGlobal: () => {},
564
- * resetCurrent: () => {},
565
- * resetAll: () => {},
566
- * queryFormItems: []
567
- * }}>
568
- * <MyGrid />
569
- * </GridPlusContext.Provider>
502
+ * const schemeManager = useSchemeManager({
503
+ * adapter,
504
+ * autoLoad: true,
505
+ * showErrorMessage: true,
506
+ * currentUserId: currentUser?.id
507
+ * });
570
508
  *
509
+ * // 2. 传入 Provider
510
+ * return (
511
+ * <GridPlusContext.Provider value={{
512
+ * extensibleColumns: [],
513
+ * columnState: undefined,
514
+ * onSaveColumnState: () => {},
515
+ * applyToGlobal: () => {},
516
+ * resetCurrent: () => {},
517
+ * resetAll: () => {},
518
+ * queryFormItems: [],
519
+ * ...schemeManager // 展开方案管理状态
520
+ * }}>
521
+ * <MyGrid />
522
+ * </GridPlusContext.Provider>
523
+ * );
524
+ * }
525
+ *
526
+ * // 3. 在子组件中使用
571
527
  * function MyGrid() {
572
528
  * const {
573
529
  * columnSchemes,
@@ -587,10 +543,11 @@ function useFallbackSchemeManager(backendApiConfig, currentUserId) {
587
543
  function useGridSchemes() {
588
544
  var context = (0, _react.useContext)(_gridContext.GridPlusContext);
589
545
 
590
- // 根据后端 API 配置自动选择适配器
591
- var adapterType = context !== null && context !== void 0 && context.backendApiConfig ? '后端 API' : 'LocalStorage';
592
- console.log("[useGridSchemes] \u4F7F\u7528 ".concat(adapterType, " \u9002\u914D\u5668"));
593
-
594
- // eslint-disable-next-line react-hooks/rules-of-hooks
595
- return useFallbackSchemeManager(context === null || context === void 0 ? void 0 : context.backendApiConfig, context === null || context === void 0 ? void 0 : context.currentUserId);
546
+ // 检查是否传入了方案管理状态
547
+ var hasSchemeManagement = !!((context === null || context === void 0 ? void 0 : context.columnSchemes) !== undefined || context !== null && context !== void 0 && context.saveColumnScheme || context !== null && context !== void 0 && context.deleteColumnScheme);
548
+ if (!hasSchemeManagement) {
549
+ throw new Error('[useGridSchemes] 必须在 GridPlusContext.Provider 中传入 SchemeManager 状态。\n' + '请使用 useSchemeManager hook 创建方案管理器,然后通过 Provider 传递:\n' + ' const schemeManager = useSchemeManager({ adapter, ... });\n' + ' <GridPlusContext.Provider value={{ ...otherValues, ...schemeManager }}>');
550
+ }
551
+ console.log('[useGridSchemes] 使用 Context 中的方案管理状态');
552
+ return context;
596
553
  }
@@ -198,23 +198,55 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
198
198
  return this.request(url);
199
199
  case 5:
200
200
  response = _context2.sent;
201
+ // 将所有列方案的 columnConfig 从字符串解析为对象数组
202
+ if (response.columnSchemes) {
203
+ Object.keys(response.columnSchemes).forEach(function (gridId) {
204
+ response.columnSchemes[gridId] = response.columnSchemes[gridId].map(function (scheme) {
205
+ if (typeof scheme.columnConfig === 'string') {
206
+ return _objectSpread(_objectSpread({}, scheme), {}, {
207
+ columnConfig: JSON.parse(scheme.columnConfig)
208
+ });
209
+ }
210
+ return scheme;
211
+ });
212
+ });
213
+ }
214
+
215
+ // 将所有查询方案的字段从字符串解析为数组和对象
216
+ if (response.querySchemes) {
217
+ Object.keys(response.querySchemes).forEach(function (gridId) {
218
+ response.querySchemes[gridId] = response.querySchemes[gridId].map(function (scheme) {
219
+ var parsedScheme = _objectSpread({}, scheme);
220
+ if (typeof parsedScheme.itemsOrder === 'string') {
221
+ parsedScheme.itemsOrder = JSON.parse(parsedScheme.itemsOrder);
222
+ }
223
+ if (typeof parsedScheme.hiddenFields === 'string') {
224
+ parsedScheme.hiddenFields = JSON.parse(parsedScheme.hiddenFields);
225
+ }
226
+ if (typeof parsedScheme.formValues === 'string') {
227
+ parsedScheme.formValues = JSON.parse(parsedScheme.formValues);
228
+ }
229
+ return parsedScheme;
230
+ });
231
+ });
232
+ }
201
233
  this.log('加载完成', {
202
234
  columnSchemes: Object.keys(response.columnSchemes || {}).length,
203
235
  querySchemes: Object.keys(response.querySchemes || {}).length,
204
236
  version: response.version
205
237
  });
206
238
  return _context2.abrupt("return", response);
207
- case 10:
208
- _context2.prev = 10;
239
+ case 12:
240
+ _context2.prev = 12;
209
241
  _context2.t0 = _context2["catch"](0);
210
242
  console.error('[BackendApiAdapter] 加载方案失败:', _context2.t0);
211
243
  _antd.message.error('加载方案失败');
212
244
  throw _context2.t0;
213
- case 15:
245
+ case 17:
214
246
  case "end":
215
247
  return _context2.stop();
216
248
  }
217
- }, _callee2, this, [[0, 10]]);
249
+ }, _callee2, this, [[0, 12]]);
218
250
  }));
219
251
  function loadAllSchemes() {
220
252
  return _loadAllSchemes.apply(this, arguments);
@@ -225,42 +257,52 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
225
257
  key: "saveColumnScheme",
226
258
  value: function () {
227
259
  var _saveColumnScheme = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(gridId, scheme) {
228
- var url, response;
260
+ var schemeForBackend, url, response, savedScheme;
229
261
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
230
262
  while (1) switch (_context3.prev = _context3.next) {
231
263
  case 0:
232
264
  _context3.prev = 0;
233
265
  this.log("\u4FDD\u5B58\u5217\u65B9\u6848: ".concat(gridId, " - ").concat(scheme.name));
266
+
267
+ // 将 columnConfig 转换为 JSON 字符串
268
+ schemeForBackend = _objectSpread(_objectSpread({}, scheme), {}, {
269
+ columnConfig: JSON.stringify(scheme.columnConfig)
270
+ });
234
271
  url = "".concat(this.config.apiBaseUrl, "/api/extra-object/table-scheme/save-column-scheme");
235
- _context3.next = 5;
272
+ _context3.next = 6;
236
273
  return this.request(url, {
237
274
  method: 'POST',
238
275
  body: JSON.stringify({
239
276
  gridId: gridId,
240
- scheme: scheme
277
+ scheme: schemeForBackend
241
278
  })
242
279
  });
243
- case 5:
280
+ case 6:
244
281
  response = _context3.sent;
245
282
  if (response.success) {
246
- _context3.next = 8;
283
+ _context3.next = 9;
247
284
  break;
248
285
  }
249
286
  throw new Error(response.message || '保存失败');
250
- case 8:
251
- this.log('保存成功', response.scheme);
252
- return _context3.abrupt("return", response.scheme);
253
- case 12:
254
- _context3.prev = 12;
287
+ case 9:
288
+ // 将返回的 columnConfig 从字符串解析为对象数组
289
+ savedScheme = response.scheme;
290
+ if (savedScheme && typeof savedScheme.columnConfig === 'string') {
291
+ savedScheme.columnConfig = JSON.parse(savedScheme.columnConfig);
292
+ }
293
+ this.log('保存成功', savedScheme);
294
+ return _context3.abrupt("return", savedScheme);
295
+ case 15:
296
+ _context3.prev = 15;
255
297
  _context3.t0 = _context3["catch"](0);
256
298
  console.error('[BackendApiAdapter] 保存列方案失败:', _context3.t0);
257
299
  _antd.message.error('保存列方案失败');
258
300
  throw _context3.t0;
259
- case 17:
301
+ case 20:
260
302
  case "end":
261
303
  return _context3.stop();
262
304
  }
263
- }, _callee3, this, [[0, 12]]);
305
+ }, _callee3, this, [[0, 15]]);
264
306
  }));
265
307
  function saveColumnScheme(_x2, _x3) {
266
308
  return _saveColumnScheme.apply(this, arguments);
@@ -314,42 +356,62 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
314
356
  key: "saveQueryScheme",
315
357
  value: function () {
316
358
  var _saveQueryScheme = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(gridId, scheme) {
317
- var url, response;
359
+ var schemeForBackend, url, response, savedScheme;
318
360
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
319
361
  while (1) switch (_context5.prev = _context5.next) {
320
362
  case 0:
321
363
  _context5.prev = 0;
322
364
  this.log("\u4FDD\u5B58\u67E5\u8BE2\u65B9\u6848: ".concat(gridId, " - ").concat(scheme.name));
365
+
366
+ // 将数组和对象字段转换为 JSON 字符串
367
+ schemeForBackend = _objectSpread(_objectSpread({}, scheme), {}, {
368
+ itemsOrder: scheme.itemsOrder ? JSON.stringify(scheme.itemsOrder) : undefined,
369
+ hiddenFields: scheme.hiddenFields ? JSON.stringify(scheme.hiddenFields) : undefined,
370
+ formValues: scheme.formValues ? JSON.stringify(scheme.formValues) : undefined
371
+ });
323
372
  url = "".concat(this.config.apiBaseUrl, "/api/extra-object/table-scheme/save-query-scheme");
324
- _context5.next = 5;
373
+ _context5.next = 6;
325
374
  return this.request(url, {
326
375
  method: 'POST',
327
376
  body: JSON.stringify({
328
377
  gridId: gridId,
329
- scheme: scheme
378
+ scheme: schemeForBackend
330
379
  })
331
380
  });
332
- case 5:
381
+ case 6:
333
382
  response = _context5.sent;
334
383
  if (response.success) {
335
- _context5.next = 8;
384
+ _context5.next = 9;
336
385
  break;
337
386
  }
338
387
  throw new Error(response.message || '保存失败');
339
- case 8:
340
- this.log('保存成功', response.scheme);
341
- return _context5.abrupt("return", response.scheme);
342
- case 12:
343
- _context5.prev = 12;
388
+ case 9:
389
+ // 将返回的字符串字段解析为数组和对象
390
+ savedScheme = response.scheme;
391
+ if (savedScheme) {
392
+ if (typeof savedScheme.itemsOrder === 'string') {
393
+ savedScheme.itemsOrder = JSON.parse(savedScheme.itemsOrder);
394
+ }
395
+ if (typeof savedScheme.hiddenFields === 'string') {
396
+ savedScheme.hiddenFields = JSON.parse(savedScheme.hiddenFields);
397
+ }
398
+ if (typeof savedScheme.formValues === 'string') {
399
+ savedScheme.formValues = JSON.parse(savedScheme.formValues);
400
+ }
401
+ }
402
+ this.log('保存成功', savedScheme);
403
+ return _context5.abrupt("return", savedScheme);
404
+ case 15:
405
+ _context5.prev = 15;
344
406
  _context5.t0 = _context5["catch"](0);
345
407
  console.error('[BackendApiAdapter] 保存查询方案失败:', _context5.t0);
346
408
  _antd.message.error('保存查询方案失败');
347
409
  throw _context5.t0;
348
- case 17:
410
+ case 20:
349
411
  case "end":
350
412
  return _context5.stop();
351
413
  }
352
- }, _callee5, this, [[0, 12]]);
414
+ }, _callee5, this, [[0, 15]]);
353
415
  }));
354
416
  function saveQueryScheme(_x6, _x7) {
355
417
  return _saveQueryScheme.apply(this, arguments);
@@ -1,10 +1,20 @@
1
1
  import React from "react";
2
2
  import type { ColumnScheme, QueryScheme, CurrentSchemeDto } from "../shared/storage/schemeStorageAdapter";
3
- import type { BackendApiAdapterConfig } from "../shared/storage/backendApiAdapter";
4
3
  /**
5
4
  * 方案管理 API 接口
6
5
  *
7
- * 这些 API 由 useGridSchemes Hook 自动提供,不需要在 Provider 中手动配置
6
+ * ⚠️ 必须通过 useSchemeManager Hook 创建,然后传入 Provider
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const adapter = useMemo(() => new BackendApiSchemeAdapter({ ... }), []);
11
+ * const schemeManager = useSchemeManager({ adapter, autoLoad: true });
12
+ *
13
+ * <GridPlusContext.Provider value={{
14
+ * ...otherValues,
15
+ * ...schemeManager // 展开方案管理状态
16
+ * }}>
17
+ * ```
8
18
  */
9
19
  export interface SchemeManagementAPI {
10
20
  /**
@@ -74,7 +84,7 @@ export interface SchemeManagementAPI {
74
84
  /**
75
85
  * GridPlus Context 值接口
76
86
  *
77
- * 注意:方案管理 API 不需要在 Provider 中配置,它们由 useGridSchemes Hook 自动提供
87
+ * ⚠️ 必须包含方案管理 API,通过 useSchemeManager Hook 创建后传入
78
88
  */
79
89
  export interface GridPlusContextValue extends SchemeManagementAPI {
80
90
  /**
@@ -123,32 +133,10 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
123
133
  */
124
134
  updateQueryOrder?: (order: string[]) => void;
125
135
  /**
126
- * 后端 API 配置(可选)
127
- *
128
- * 如果提供此配置,useGridSchemes Hook 将自动使用 BackendApiSchemeAdapter
129
- * 否则将使用 LocalStorageSchemeAdapter
130
- *
131
- * @example
132
- * ```tsx
133
- * backendApiConfig: {
134
- * apiBaseUrl: 'https://api.example.com',
135
- * getToken: () => localStorage.getItem('token'),
136
- * getUserId: () => localStorage.getItem('userId'),
137
- * timeout: 10000
138
- * }
139
- * ```
140
- */
141
- backendApiConfig?: Omit<BackendApiAdapterConfig, 'enableDebugLog'>;
142
- /**
143
- * 当前用户ID(可选)
144
- *
145
- * 用于监听用户切换,自动重新加载方案数据
146
- * 当此值变化时,系统会自动调用 refreshSchemes() 重新加载所有方案
136
+ * 当前用户ID(内部使用)
147
137
  *
148
- * @example
149
- * ```tsx
150
- * currentUserId: currentUser?.id
151
- * ```
138
+ * 用于 SchemeManager 监听用户切换,自动重新加载方案数据
139
+ * 此字段由 useSchemeManager 自动管理,无需手动设置
152
140
  */
153
141
  currentUserId?: string | null;
154
142
  }
@@ -3,13 +3,24 @@ import React from "react";
3
3
  /**
4
4
  * 方案管理 API 接口
5
5
  *
6
- * 这些 API 由 useGridSchemes Hook 自动提供,不需要在 Provider 中手动配置
6
+ * ⚠️ 必须通过 useSchemeManager Hook 创建,然后传入 Provider
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const adapter = useMemo(() => new BackendApiSchemeAdapter({ ... }), []);
11
+ * const schemeManager = useSchemeManager({ adapter, autoLoad: true });
12
+ *
13
+ * <GridPlusContext.Provider value={{
14
+ * ...otherValues,
15
+ * ...schemeManager // 展开方案管理状态
16
+ * }}>
17
+ * ```
7
18
  */
8
19
 
9
20
  /**
10
21
  * GridPlus Context 值接口
11
22
  *
12
- * 注意:方案管理 API 不需要在 Provider 中配置,它们由 useGridSchemes Hook 自动提供
23
+ * ⚠️ 必须包含方案管理 API,通过 useSchemeManager Hook 创建后传入
13
24
  */
14
25
 
15
26
  export var GridPlusContext = /*#__PURE__*/React.createContext({