amis-core 6.7.0 → 6.8.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.
Files changed (285) hide show
  1. package/esm/Root.js +1 -1
  2. package/esm/RootRenderer.js +1 -1
  3. package/esm/SchemaRenderer.d.ts +0 -1
  4. package/esm/SchemaRenderer.js +15 -6
  5. package/esm/Scoped.js +2 -1
  6. package/esm/StatusScoped.js +1 -1
  7. package/esm/WithRootStore.js +1 -1
  8. package/esm/WithStore.js +8 -8
  9. package/esm/actions/Action.js +2 -1
  10. package/esm/actions/AjaxAction.js +1 -1
  11. package/esm/actions/BreakAction.js +1 -1
  12. package/esm/actions/BroadcastAction.js +1 -1
  13. package/esm/actions/CmptAction.js +1 -1
  14. package/esm/actions/ContinueAction.js +1 -1
  15. package/esm/actions/CopyAction.js +1 -1
  16. package/esm/actions/CustomAction.js +2 -1
  17. package/esm/actions/DialogAction.js +3 -1
  18. package/esm/actions/DrawerAction.js +2 -1
  19. package/esm/actions/EmailAction.js +1 -1
  20. package/esm/actions/EventAction.js +2 -1
  21. package/esm/actions/LinkAction.js +1 -1
  22. package/esm/actions/LoopAction.js +2 -1
  23. package/esm/actions/PageAction.js +1 -1
  24. package/esm/actions/ParallelAction.js +1 -1
  25. package/esm/actions/PrintAction.js +1 -1
  26. package/esm/actions/StatusAction.js +1 -1
  27. package/esm/actions/SwitchAction.js +1 -1
  28. package/esm/actions/ToastAction.js +1 -1
  29. package/esm/actions/WaitAction.js +1 -1
  30. package/esm/components/CustomStyle.js +1 -1
  31. package/esm/components/ErrorBoundary.js +1 -1
  32. package/esm/components/LazyComponent.js +1 -1
  33. package/esm/components/Overlay.js +2 -1
  34. package/esm/components/PopOver.js +2 -1
  35. package/esm/env.js +1 -1
  36. package/esm/envOverwrite.js +1 -1
  37. package/esm/factory.js +1 -1
  38. package/esm/index.js +2 -2
  39. package/esm/locale.js +2 -1
  40. package/esm/polyfills.js +1 -1
  41. package/esm/renderers/Form.js +42 -16
  42. package/esm/renderers/Item.d.ts +97 -12
  43. package/esm/renderers/Item.js +159 -120
  44. package/esm/renderers/Options.js +2 -1
  45. package/esm/renderers/Placeholder.js +1 -1
  46. package/esm/renderers/builtin.js +1 -1
  47. package/esm/renderers/register.js +1 -1
  48. package/esm/renderers/wrapControl.js +2 -1
  49. package/esm/store/app.js +2 -1
  50. package/esm/store/combo.d.ts +408 -0
  51. package/esm/store/combo.js +1 -1
  52. package/esm/store/crud.js +2 -1
  53. package/esm/store/form.d.ts +170 -0
  54. package/esm/store/form.js +2 -1
  55. package/esm/store/formItem.d.ts +5 -0
  56. package/esm/store/formItem.js +30 -8
  57. package/esm/store/iRenderer.js +2 -1
  58. package/esm/store/index.js +1 -1
  59. package/esm/store/list.js +1 -1
  60. package/esm/store/manager.js +1 -1
  61. package/esm/store/modal.js +1 -1
  62. package/esm/store/node.js +1 -1
  63. package/esm/store/pagination.js +2 -1
  64. package/esm/store/root.js +2 -1
  65. package/esm/store/service.js +2 -1
  66. package/esm/store/status.js +1 -1
  67. package/esm/store/table.d.ts +379 -21
  68. package/esm/store/table.js +84 -54
  69. package/esm/store/table2.js +1 -1
  70. package/esm/theme.js +1 -1
  71. package/esm/utils/Animation.js +1 -1
  72. package/esm/utils/ColorScale.js +1 -1
  73. package/esm/utils/DataSchema.js +1 -1
  74. package/esm/utils/DataScope.js +1 -1
  75. package/esm/utils/RootClose.js +1 -1
  76. package/esm/utils/SimpleMap.js +1 -1
  77. package/esm/utils/api.js +1 -1
  78. package/esm/utils/arraySlice.js +1 -1
  79. package/esm/utils/attachmentAdpator.js +1 -1
  80. package/esm/utils/autobind.js +1 -1
  81. package/esm/utils/browser.js +1 -1
  82. package/esm/utils/columnsSplit.js +1 -1
  83. package/esm/utils/concatData.js +1 -1
  84. package/esm/utils/dataMapping.js +1 -1
  85. package/esm/utils/date.js +1 -1
  86. package/esm/utils/debug.js +17 -3
  87. package/esm/utils/decodeEntity.js +1 -1
  88. package/esm/utils/dom.js +1 -1
  89. package/esm/utils/errors.js +1 -1
  90. package/esm/utils/escapeHtml.js +1 -1
  91. package/esm/utils/filter-schema.js +1 -1
  92. package/esm/utils/filter.js +1 -1
  93. package/esm/utils/formatDuration.js +1 -1
  94. package/esm/utils/formula.js +2 -1
  95. package/esm/utils/getVariable.js +1 -1
  96. package/esm/utils/grammar.js +1 -1
  97. package/esm/utils/handleAction.js +1 -1
  98. package/esm/utils/helper.d.ts +4 -1
  99. package/esm/utils/helper.js +20 -4
  100. package/esm/utils/highlight.js +1 -1
  101. package/esm/utils/icon.js +1 -1
  102. package/esm/utils/image.js +1 -1
  103. package/esm/utils/isPureVariable.js +2 -2
  104. package/esm/utils/json-schema-2-amis-schema.js +1 -1
  105. package/esm/utils/keyToPath.js +1 -1
  106. package/esm/utils/labelToString.js +1 -1
  107. package/esm/utils/makeSorter.js +1 -1
  108. package/esm/utils/math.js +1 -1
  109. package/esm/utils/memoryParse.d.ts +2 -1
  110. package/esm/utils/memoryParse.js +10 -6
  111. package/esm/utils/normalizeLink.js +1 -1
  112. package/esm/utils/normalizeOptions.js +1 -1
  113. package/esm/utils/object.d.ts +2 -4
  114. package/esm/utils/object.js +1 -1
  115. package/esm/utils/offset.js +1 -1
  116. package/esm/utils/offsetParent.js +1 -1
  117. package/esm/utils/optionValueCompare.js +1 -1
  118. package/esm/utils/position.js +1 -1
  119. package/esm/utils/prettyBytes.js +1 -1
  120. package/esm/utils/printElement.js +1 -1
  121. package/esm/utils/renderer-event.js +1 -1
  122. package/esm/utils/replaceText.js +1 -1
  123. package/esm/utils/resize-sensor.js +30 -1
  124. package/esm/utils/resolveCondition.js +2 -1
  125. package/esm/utils/resolveVariable.js +1 -1
  126. package/esm/utils/resolveVariableAndFilter.js +1 -1
  127. package/esm/utils/resolveVariableAndFilterForAsync.js +1 -1
  128. package/esm/utils/scrollPosition.js +1 -1
  129. package/esm/utils/string2regExp.js +1 -1
  130. package/esm/utils/stripNumber.js +1 -1
  131. package/esm/utils/style-helper.js +1 -1
  132. package/esm/utils/style.js +2 -1
  133. package/esm/utils/toNumber.js +1 -1
  134. package/esm/utils/tokenize.js +1 -1
  135. package/esm/utils/tpl-builtin.js +2 -1
  136. package/esm/utils/tpl-lodash.js +2 -1
  137. package/esm/utils/tpl.js +1 -1
  138. package/esm/utils/uncontrollable.js +1 -1
  139. package/esm/utils/validateId.js +1 -1
  140. package/esm/utils/validations.js +2 -1
  141. package/esm/utils/visitedCache.d.ts +46 -0
  142. package/esm/utils/visitedCache.js +124 -0
  143. package/lib/Root.js +1 -1
  144. package/lib/RootRenderer.js +1 -1
  145. package/lib/SchemaRenderer.d.ts +0 -1
  146. package/lib/SchemaRenderer.js +15 -6
  147. package/lib/Scoped.js +2 -1
  148. package/lib/StatusScoped.js +1 -1
  149. package/lib/WithRootStore.js +1 -1
  150. package/lib/WithStore.js +8 -8
  151. package/lib/actions/Action.js +2 -1
  152. package/lib/actions/AjaxAction.js +1 -1
  153. package/lib/actions/BreakAction.js +1 -1
  154. package/lib/actions/BroadcastAction.js +1 -1
  155. package/lib/actions/CmptAction.js +1 -1
  156. package/lib/actions/ContinueAction.js +1 -1
  157. package/lib/actions/CopyAction.js +1 -1
  158. package/lib/actions/CustomAction.js +2 -1
  159. package/lib/actions/DialogAction.js +3 -1
  160. package/lib/actions/DrawerAction.js +2 -1
  161. package/lib/actions/EmailAction.js +1 -1
  162. package/lib/actions/EventAction.js +2 -1
  163. package/lib/actions/LinkAction.js +1 -1
  164. package/lib/actions/LoopAction.js +2 -1
  165. package/lib/actions/PageAction.js +1 -1
  166. package/lib/actions/ParallelAction.js +1 -1
  167. package/lib/actions/PrintAction.js +1 -1
  168. package/lib/actions/StatusAction.js +1 -1
  169. package/lib/actions/SwitchAction.js +1 -1
  170. package/lib/actions/ToastAction.js +1 -1
  171. package/lib/actions/WaitAction.js +1 -1
  172. package/lib/components/CustomStyle.js +1 -1
  173. package/lib/components/ErrorBoundary.js +1 -1
  174. package/lib/components/LazyComponent.js +1 -1
  175. package/lib/components/Overlay.js +2 -1
  176. package/lib/components/PopOver.js +2 -1
  177. package/lib/env.js +1 -1
  178. package/lib/envOverwrite.js +1 -1
  179. package/lib/factory.js +1 -1
  180. package/lib/index.js +2 -2
  181. package/lib/locale.js +2 -1
  182. package/lib/polyfills.js +1 -1
  183. package/lib/renderers/Form.js +41 -15
  184. package/lib/renderers/Item.d.ts +98 -13
  185. package/lib/renderers/Item.js +158 -119
  186. package/lib/renderers/Options.js +2 -1
  187. package/lib/renderers/Placeholder.js +1 -1
  188. package/lib/renderers/builtin.js +1 -1
  189. package/lib/renderers/register.js +1 -1
  190. package/lib/renderers/wrapControl.js +2 -1
  191. package/lib/store/app.js +2 -1
  192. package/lib/store/combo.d.ts +408 -0
  193. package/lib/store/combo.js +1 -1
  194. package/lib/store/crud.js +2 -1
  195. package/lib/store/form.d.ts +170 -0
  196. package/lib/store/form.js +2 -1
  197. package/lib/store/formItem.d.ts +5 -0
  198. package/lib/store/formItem.js +30 -8
  199. package/lib/store/iRenderer.js +2 -1
  200. package/lib/store/index.js +1 -1
  201. package/lib/store/list.js +1 -1
  202. package/lib/store/manager.js +1 -1
  203. package/lib/store/modal.js +1 -1
  204. package/lib/store/node.js +1 -1
  205. package/lib/store/pagination.js +2 -1
  206. package/lib/store/root.js +2 -1
  207. package/lib/store/service.js +2 -1
  208. package/lib/store/status.js +1 -1
  209. package/lib/store/table.d.ts +379 -21
  210. package/lib/store/table.js +84 -54
  211. package/lib/store/table2.js +1 -1
  212. package/lib/theme.js +1 -1
  213. package/lib/utils/Animation.js +1 -1
  214. package/lib/utils/ColorScale.js +1 -1
  215. package/lib/utils/DataSchema.js +1 -1
  216. package/lib/utils/DataScope.js +1 -1
  217. package/lib/utils/RootClose.js +1 -1
  218. package/lib/utils/SimpleMap.js +1 -1
  219. package/lib/utils/api.js +1 -1
  220. package/lib/utils/arraySlice.js +1 -1
  221. package/lib/utils/attachmentAdpator.js +1 -1
  222. package/lib/utils/autobind.js +1 -1
  223. package/lib/utils/browser.js +1 -1
  224. package/lib/utils/columnsSplit.js +1 -1
  225. package/lib/utils/concatData.js +1 -1
  226. package/lib/utils/dataMapping.js +1 -1
  227. package/lib/utils/date.js +1 -1
  228. package/lib/utils/debug.js +17 -3
  229. package/lib/utils/decodeEntity.js +1 -1
  230. package/lib/utils/dom.js +1 -1
  231. package/lib/utils/errors.js +1 -1
  232. package/lib/utils/escapeHtml.js +1 -1
  233. package/lib/utils/filter-schema.js +1 -1
  234. package/lib/utils/filter.js +1 -1
  235. package/lib/utils/formatDuration.js +1 -1
  236. package/lib/utils/formula.js +2 -1
  237. package/lib/utils/getVariable.js +1 -1
  238. package/lib/utils/grammar.js +1 -1
  239. package/lib/utils/handleAction.js +1 -1
  240. package/lib/utils/helper.d.ts +4 -1
  241. package/lib/utils/helper.js +19 -3
  242. package/lib/utils/highlight.js +1 -1
  243. package/lib/utils/icon.js +1 -1
  244. package/lib/utils/image.js +1 -1
  245. package/lib/utils/isPureVariable.js +2 -2
  246. package/lib/utils/json-schema-2-amis-schema.js +1 -1
  247. package/lib/utils/keyToPath.js +1 -1
  248. package/lib/utils/labelToString.js +1 -1
  249. package/lib/utils/makeSorter.js +1 -1
  250. package/lib/utils/math.js +1 -1
  251. package/lib/utils/memoryParse.d.ts +2 -1
  252. package/lib/utils/memoryParse.js +10 -6
  253. package/lib/utils/normalizeLink.js +1 -1
  254. package/lib/utils/normalizeOptions.js +1 -1
  255. package/lib/utils/object.d.ts +2 -4
  256. package/lib/utils/object.js +1 -1
  257. package/lib/utils/offset.js +1 -1
  258. package/lib/utils/offsetParent.js +1 -1
  259. package/lib/utils/optionValueCompare.js +1 -1
  260. package/lib/utils/position.js +1 -1
  261. package/lib/utils/prettyBytes.js +1 -1
  262. package/lib/utils/printElement.js +1 -1
  263. package/lib/utils/renderer-event.js +1 -1
  264. package/lib/utils/replaceText.js +1 -1
  265. package/lib/utils/resize-sensor.js +30 -1
  266. package/lib/utils/resolveCondition.js +2 -1
  267. package/lib/utils/resolveVariable.js +1 -1
  268. package/lib/utils/resolveVariableAndFilter.js +1 -1
  269. package/lib/utils/resolveVariableAndFilterForAsync.js +1 -1
  270. package/lib/utils/scrollPosition.js +1 -1
  271. package/lib/utils/string2regExp.js +1 -1
  272. package/lib/utils/stripNumber.js +1 -1
  273. package/lib/utils/style-helper.js +1 -1
  274. package/lib/utils/style.js +2 -1
  275. package/lib/utils/toNumber.js +1 -1
  276. package/lib/utils/tokenize.js +1 -1
  277. package/lib/utils/tpl-builtin.js +2 -1
  278. package/lib/utils/tpl-lodash.js +2 -1
  279. package/lib/utils/tpl.js +1 -1
  280. package/lib/utils/uncontrollable.js +1 -1
  281. package/lib/utils/validateId.js +1 -1
  282. package/lib/utils/validations.js +2 -1
  283. package/lib/utils/visitedCache.d.ts +46 -0
  284. package/lib/utils/visitedCache.js +128 -0
  285. package/package.json +2 -2
@@ -5,6 +5,7 @@ import { IFormItemStore, IFormStore } from '../store/form';
5
5
  import { RendererProps, TestFunc, RendererConfig } from '../factory';
6
6
  import { FormHorizontal, FormSchemaBase } from './Form';
7
7
  import { ActionObject, BaseApiObject, BaseSchemaWithoutType, ClassName, Schema } from '../types';
8
+ import { IScopedContext } from '../Scoped';
8
9
  export type LabelAlign = 'right' | 'left' | 'top' | 'inherit';
9
10
  export interface FormBaseControl extends BaseSchemaWithoutType {
10
11
  /**
@@ -303,6 +304,10 @@ export interface FormBaseControl extends BaseSchemaWithoutType {
303
304
  * 是否为参照录入模式,参照录入会展示候选值供用户选择,而不是直接填充。
304
305
  */
305
306
  showSuggestion?: boolean;
307
+ /**
308
+ * 参照录入时,默认选中的值
309
+ */
310
+ defaultSelection?: any;
306
311
  /**
307
312
  * 自动填充 api
308
313
  */
@@ -321,7 +326,7 @@ export interface FormBaseControl extends BaseSchemaWithoutType {
321
326
  /**
322
327
  * 触发条件,默认为 change
323
328
  */
324
- trigger?: 'change' | 'foucs';
329
+ trigger?: 'change' | 'focus' | 'blur';
325
330
  /**
326
331
  * 弹窗方式,当为参照录入时用可以配置
327
332
  */
@@ -359,6 +364,10 @@ export interface FormItemBasicConfig extends Partial<RendererConfig> {
359
364
  storeType?: string;
360
365
  validations?: string;
361
366
  strictMode?: boolean;
367
+ /**
368
+ * 是否是瘦子
369
+ */
370
+ thin?: boolean;
362
371
  /**
363
372
  * schema变化使视图更新的属性白名单
364
373
  */
@@ -444,7 +453,76 @@ export declare class FormItemWrap extends React.Component<FormItemProps> {
444
453
  updateAutoFillData(context: any): void;
445
454
  syncApiAutoFill: import("lodash").DebouncedFunc<(term: any, forceLoad?: boolean, skipIfExits?: any) => Promise<void>>;
446
455
  syncOptionAutoFill(selectedOptions: Array<any>, skipIfExits?: boolean): void;
447
- buildAutoFillSchema(): React.JSX.Element | {
456
+ /**
457
+ * 应用映射函数,根据给定的映射关系,更新数据对象
458
+ *
459
+ * @param mapping 映射关系,类型为任意类型
460
+ * @param ctx 上下文对象,类型为任意类型
461
+ * @param skipIfExits 是否跳过已存在的属性,默认为 false
462
+ */
463
+ applyMapping(mapping: any, ctx: any, skipIfExits?: boolean, ignoreSelf?: boolean): void;
464
+ buildAutoFillSchema(): {
465
+ popOverContainer: any;
466
+ popOverClassName: any;
467
+ placement: any;
468
+ offset: any;
469
+ body: {
470
+ type: string;
471
+ title: string;
472
+ className: string;
473
+ body: {
474
+ type: string;
475
+ embed: boolean;
476
+ joinValues: boolean;
477
+ strictMode: boolean;
478
+ label: boolean;
479
+ labelField: any;
480
+ valueField: any;
481
+ multiple: any;
482
+ name: string;
483
+ value: any;
484
+ options: never[];
485
+ required: boolean;
486
+ source: any;
487
+ pickerSchema: {
488
+ type: string;
489
+ bodyClassName: string;
490
+ affixHeader: boolean;
491
+ alwaysShowPagination: boolean;
492
+ keepItemSelectionOnPageChange: boolean;
493
+ headerToolbar: never[];
494
+ footerToolbar: ({
495
+ type: string;
496
+ align: string;
497
+ className?: undefined;
498
+ } | {
499
+ type: string;
500
+ align: string;
501
+ className: string;
502
+ })[];
503
+ multiple: any;
504
+ filter: any;
505
+ columns: any;
506
+ };
507
+ }[];
508
+ actions: ({
509
+ type: string;
510
+ actionType: string;
511
+ label: any;
512
+ level?: undefined;
513
+ } | {
514
+ type: string;
515
+ actionType: string;
516
+ level: string;
517
+ label: any;
518
+ })[];
519
+ };
520
+ type?: undefined;
521
+ className?: undefined;
522
+ title?: undefined;
523
+ size?: undefined;
524
+ actions?: undefined;
525
+ } | {
448
526
  type: any;
449
527
  className: string;
450
528
  title: any;
@@ -458,16 +536,19 @@ export declare class FormItemWrap extends React.Component<FormItemProps> {
458
536
  type: string;
459
537
  embed: boolean;
460
538
  joinValues: boolean;
539
+ strictMode: boolean;
461
540
  label: boolean;
462
541
  labelField: any;
463
542
  valueField: any;
464
543
  multiple: any;
465
544
  name: string;
545
+ value: any;
466
546
  options: never[];
467
547
  required: boolean;
468
548
  source: any;
469
549
  pickerSchema: {
470
550
  type: string;
551
+ bodyClassName: string;
471
552
  affixHeader: boolean;
472
553
  alwaysShowPagination: boolean;
473
554
  keepItemSelectionOnPageChange: boolean;
@@ -485,7 +566,7 @@ export declare class FormItemWrap extends React.Component<FormItemProps> {
485
566
  filter: any;
486
567
  columns: any;
487
568
  };
488
- };
569
+ }[];
489
570
  actions: ({
490
571
  type: string;
491
572
  actionType: string;
@@ -509,10 +590,14 @@ export declare class FormItemWrap extends React.Component<FormItemProps> {
509
590
  level: string;
510
591
  label: any;
511
592
  })[];
593
+ popOverContainer?: undefined;
594
+ popOverClassName?: undefined;
595
+ placement?: undefined;
596
+ offset?: undefined;
512
597
  } | undefined;
513
- handleSubmit(values: any): void;
514
- handleAction(e: React.UIEvent<any>, action: ActionObject, data: object): void;
515
- handleClose(): void;
598
+ handlePopOverConfirm(values: any): void;
599
+ handlePopOverAction(e: React.UIEvent<any>, action: ActionObject, data: object, throwErrors?: boolean, delegate?: IScopedContext): any;
600
+ closePopOver(): void;
516
601
  handleOpenDialog(schema: Schema, data: any): Promise<unknown>;
517
602
  handleDialogConfirm([values]: Array<any>): void;
518
603
  handleDialogClose(confirmed?: boolean): void;
@@ -558,10 +643,10 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
558
643
  storeType: string;
559
644
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
560
645
  readonly fetcher: any;
561
- readonly notify: any;
562
- readonly isCancel: (value: any) => boolean; /**
563
- * 当修改完的时候是否提交表单。
646
+ readonly notify: any; /**
647
+ * 显示一个小图标, 鼠标放上去的时候显示提示内容
564
648
  */
649
+ readonly isCancel: (value: any) => boolean;
565
650
  readonly __: import("..").TranslateFn<any>;
566
651
  getStoreById(id: string): {
567
652
  id: string;
@@ -724,10 +809,10 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
724
809
  storeType: import("mobx-state-tree").IType<string | undefined, string, string>;
725
810
  }, {
726
811
  readonly fetcher: any;
727
- readonly notify: any;
728
- readonly isCancel: (value: any) => boolean; /**
729
- * 当修改完的时候是否提交表单。
812
+ readonly notify: any; /**
813
+ * 显示一个小图标, 鼠标放上去的时候显示提示内容
730
814
  */
815
+ readonly isCancel: (value: any) => boolean;
731
816
  readonly __: import("..").TranslateFn<any>;
732
817
  getStoreById(id: string): {
733
818
  id: string;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v6.7.0
2
+ * amis-core v6.8.0
3
3
  * Copyright 2018-2024 fex
4
4
  */
5
5
 
@@ -20,7 +20,7 @@ import '../utils/browser.js';
20
20
  import '../utils/ColorScale.js';
21
21
  import 'lodash/chunk';
22
22
  import { getVariable } from '../utils/getVariable.js';
23
- import { setVariable, createObject } from '../utils/object.js';
23
+ import { createObject, setVariable, createObjectFromChain, deleteVariable } from '../utils/object.js';
24
24
  import { dataMapping } from '../utils/dataMapping.js';
25
25
  import '../utils/DataSchema.js';
26
26
  import '../utils/DataScope.js';
@@ -34,6 +34,7 @@ import '../utils/filter.js';
34
34
  import 'lodash/isObject';
35
35
  import 'lodash/isString';
36
36
  import 'lodash/isBoolean';
37
+ import '../utils/memoryParse.js';
37
38
  import '@rc-component/mini-decimal';
38
39
  import '../utils/image.js';
39
40
  import { keyToPath } from '../utils/keyToPath.js';
@@ -78,8 +79,7 @@ var FormItemWrap = /** @class */ (function (_super) {
78
79
  if (skipIfExits === void 0) { skipIfExits = false; }
79
80
  return __awaiter(_this, void 0, void 0, function () {
80
81
  var _a, autoFill, onBulkChange, formItem, data_1, itemName, ctx, result, e_1;
81
- var _b;
82
- var _c, _d;
82
+ var _b, _c, _d;
83
83
  return __generator(this, function (_e) {
84
84
  switch (_e.label) {
85
85
  case 0:
@@ -103,29 +103,22 @@ var FormItemWrap = /** @class */ (function (_super) {
103
103
  return [3 /*break*/, 3];
104
104
  case 1:
105
105
  itemName = formItem.name;
106
- ctx = createObject(data_1, (_b = {},
107
- _b[itemName || ''] = term,
108
- _b.__term = term,
109
- _b));
106
+ ctx = createObject(data_1, {
107
+ __term: term
108
+ });
109
+ setVariable(ctx, itemName, term);
110
110
  if (!(forceLoad ||
111
111
  (isEffectiveApi(autoFill.api, ctx) && this.lastSearchTerm !== term))) return [3 /*break*/, 3];
112
- return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_c = autoFill.api) === null || _c === void 0 ? void 0 : _c.silent))];
112
+ return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_b = autoFill.api) === null || _b === void 0 ? void 0 : _b.silent))];
113
113
  case 2:
114
114
  result = _e.sent();
115
115
  this.lastSearchTerm =
116
- (_d = (result && getVariable(result, itemName))) !== null && _d !== void 0 ? _d : term;
116
+ (_c = (result && getVariable(result, itemName))) !== null && _c !== void 0 ? _c : term;
117
117
  // 如果没有返回不应该处理
118
118
  if (!result) {
119
119
  return [2 /*return*/];
120
120
  }
121
- if (autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) {
122
- result = dataMapping(autoFill.fillMapping, result);
123
- }
124
- if (result) {
125
- // 不能把自己给清了吧
126
- setVariable(result, itemName, getVariable(result, itemName) || formItem.tmpValue);
127
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(result);
128
- }
121
+ this.applyMapping((_d = autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) !== null && _d !== void 0 ? _d : { '&': '$$' }, result, false, true);
129
122
  _e.label = 3;
130
123
  case 3: return [3 /*break*/, 5];
131
124
  case 4:
@@ -140,15 +133,12 @@ var FormItemWrap = /** @class */ (function (_super) {
140
133
  trailing: true,
141
134
  leading: false
142
135
  });
143
- _this.state = {
144
- isOpened: false
145
- };
146
136
  var model = props.formItem, formInited = props.formInited, addHook = props.addHook, initAutoFill = props.initAutoFill;
147
137
  if (!model) {
148
138
  return _this;
149
139
  }
150
140
  _this.toDispose.push(reaction(function () {
151
- return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions));
141
+ return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions)).concat(model.popOverOpen);
152
142
  }, function () { return _this.forceUpdate(); }));
153
143
  var onInit = function () {
154
144
  var _a;
@@ -206,18 +196,26 @@ var FormItemWrap = /** @class */ (function (_super) {
206
196
  this.handleAutoFill('focus');
207
197
  };
208
198
  FormItemWrap.prototype.handleBlur = function (e) {
209
- var model = this.props.formItem;
199
+ var _a = this.props, model = _a.formItem, autoFill = _a.autoFill;
210
200
  model && model.blur();
211
201
  this.props.onBlur && this.props.onBlur(e);
202
+ if (!autoFill ||
203
+ (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('showSuggestion')))) {
204
+ return;
205
+ }
206
+ this.handleAutoFill('blur');
212
207
  };
213
208
  FormItemWrap.prototype.handleAutoFill = function (type) {
214
209
  var _this = this;
215
- var _a = this.props, autoFill = _a.autoFill; _a.onBulkChange; var formItem = _a.formItem, data = _a.data;
210
+ var _a = this.props, autoFill = _a.autoFill, formItem = _a.formItem, data = _a.data;
216
211
  var trigger = autoFill.trigger, mode = autoFill.mode;
217
212
  if (trigger === type && mode === 'popOver') {
218
213
  // 参照录入 popOver形式
219
- this.setState({
220
- isOpened: true
214
+ formItem === null || formItem === void 0 ? void 0 : formItem.openPopOver(this.buildAutoFillSchema(), data, function (confirmed, result) {
215
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
216
+ return;
217
+ }
218
+ _this.updateAutoFillData(result.selectedItems);
221
219
  });
222
220
  }
223
221
  else if (
@@ -225,7 +223,7 @@ var FormItemWrap = /** @class */ (function (_super) {
225
223
  trigger === type &&
226
224
  (mode === 'dialog' || mode === 'drawer')) {
227
225
  formItem === null || formItem === void 0 ? void 0 : formItem.openDialog(this.buildAutoFillSchema(), data, function (confirmed, result) {
228
- if (!(result === null || result === void 0 ? void 0 : result.selectedItems)) {
226
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
229
227
  return;
230
228
  }
231
229
  _this.updateAutoFillData(result.selectedItems);
@@ -233,17 +231,21 @@ var FormItemWrap = /** @class */ (function (_super) {
233
231
  }
234
232
  };
235
233
  FormItemWrap.prototype.updateAutoFillData = function (context) {
236
- var _a = this.props, formStore = _a.formStore, autoFill = _a.autoFill, onBulkChange = _a.onBulkChange;
237
- var fillMapping = autoFill.fillMapping, multiple = autoFill.multiple;
234
+ var _a = this.props, data = _a.data, autoFill = _a.autoFill; _a.onBulkChange;
235
+ var fillMapping = autoFill.fillMapping; autoFill.multiple;
238
236
  // form原始数据
239
- var data = formStore === null || formStore === void 0 ? void 0 : formStore.data;
240
- var contextData = createObject(__assign({ items: !multiple ? [context] : context }, data), __assign({}, context));
241
- var responseData = {};
242
- responseData = dataMapping(fillMapping, contextData);
243
- if (!multiple && !fillMapping) {
244
- responseData = context;
245
- }
246
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(responseData);
237
+ var contextData = Array.isArray(context)
238
+ ? createObject(data, {
239
+ items: context
240
+ })
241
+ : createObjectFromChain([
242
+ data,
243
+ {
244
+ items: [context]
245
+ },
246
+ context
247
+ ]);
248
+ this.applyMapping(fillMapping !== null && fillMapping !== void 0 ? fillMapping : {}, contextData, false);
247
249
  };
248
250
  FormItemWrap.prototype.syncOptionAutoFill = function (selectedOptions, skipIfExits) {
249
251
  if (skipIfExits === void 0) { skipIfExits = false; }
@@ -257,83 +259,107 @@ var FormItemWrap = /** @class */ (function (_super) {
257
259
  autoFill &&
258
260
  !isEmpty(autoFill) &&
259
261
  formItem.filteredOptions.length) {
260
- var toSync_1 = dataMapping(autoFill, multiple
262
+ this.applyMapping(autoFill, multiple
261
263
  ? {
262
264
  items: selectedOptions.map(function (item) {
263
265
  return createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, item, true) }), item);
264
266
  })
265
267
  }
266
- : createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]));
267
- var tmpData_1 = __assign({}, data);
268
- var result_1 = __assign({}, toSync_1);
269
- Object.keys(autoFill).forEach(function (key) {
270
- var keys = keyToPath(key);
271
- var value = getVariable(toSync_1, key);
272
- if (skipIfExits) {
273
- var originValue = getVariable(data, key);
274
- if (typeof originValue !== 'undefined') {
275
- value = originValue;
276
- }
277
- }
278
- setVariable(result_1, key, value);
279
- // 如果左边的 key 是一个路径
280
- // 这里不希望直接把原始对象都给覆盖没了
281
- // 而是保留原始的对象,只修改指定的属性
282
- if (keys.length > 1 && isPlainObject(tmpData_1[keys[0]])) {
283
- // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 a.b.c2,所以需要同步更新data
284
- setVariable(tmpData_1, key, value);
285
- result_1[keys[0]] = tmpData_1[keys[0]];
268
+ : createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]), skipIfExits);
269
+ }
270
+ };
271
+ /**
272
+ * 应用映射函数,根据给定的映射关系,更新数据对象
273
+ *
274
+ * @param mapping 映射关系,类型为任意类型
275
+ * @param ctx 上下文对象,类型为任意类型
276
+ * @param skipIfExits 是否跳过已存在的属性,默认为 false
277
+ */
278
+ FormItemWrap.prototype.applyMapping = function (mapping, ctx, skipIfExits, ignoreSelf) {
279
+ if (skipIfExits === void 0) { skipIfExits = false; }
280
+ if (ignoreSelf === void 0) { ignoreSelf = false; }
281
+ var _a = this.props, onBulkChange = _a.onBulkChange, data = _a.data, formItem = _a.formItem;
282
+ var toSync = dataMapping(mapping, ctx);
283
+ var tmpData = __assign({}, data);
284
+ var result = __assign({}, toSync);
285
+ Object.keys(mapping).forEach(function (key) {
286
+ if (key === '&') {
287
+ return;
288
+ }
289
+ var keys = keyToPath(key);
290
+ var value = getVariable(toSync, key);
291
+ if (skipIfExits) {
292
+ var originValue = getVariable(data, key);
293
+ if (typeof originValue !== 'undefined') {
294
+ value = originValue;
286
295
  }
287
- });
288
- onBulkChange(result_1);
296
+ }
297
+ setVariable(result, key, value);
298
+ // 如果左边的 key 是一个路径
299
+ // 这里不希望直接把原始对象都给覆盖没了
300
+ // 而是保留原始的对象,只修改指定的属性
301
+ if (keys.length > 1 && isPlainObject(tmpData[keys[0]])) {
302
+ // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 和 a.b.c2,所以需要同步更新data
303
+ setVariable(tmpData, key, value);
304
+ result[keys[0]] = tmpData[keys[0]];
305
+ }
306
+ });
307
+ // 是否忽略自己的设置
308
+ if (ignoreSelf && (formItem === null || formItem === void 0 ? void 0 : formItem.name)) {
309
+ deleteVariable(result, formItem.name);
289
310
  }
311
+ onBulkChange(result);
290
312
  };
291
313
  FormItemWrap.prototype.buildAutoFillSchema = function () {
292
- var _this = this;
293
- var _a = this.props, render = _a.render, autoFill = _a.autoFill, ns = _a.classPrefix, cx = _a.classnames, __ = _a.translate;
314
+ var _a = this.props; _a.formItem; var autoFill = _a.autoFill, __ = _a.translate;
294
315
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
295
316
  return;
296
317
  }
297
- var api = autoFill.api, mode = autoFill.mode, size = autoFill.size, offset = autoFill.offset, position = autoFill.position, multiple = autoFill.multiple, filter = autoFill.filter, columns = autoFill.columns, labelField = autoFill.labelField, popOverContainer = autoFill.popOverContainer, popOverClassName = autoFill.popOverClassName, valueField = autoFill.valueField;
318
+ var api = autoFill.api, mode = autoFill.mode, size = autoFill.size, offset = autoFill.offset, position = autoFill.position, placement = autoFill.placement, multiple = autoFill.multiple, filter = autoFill.filter, columns = autoFill.columns, labelField = autoFill.labelField, popOverContainer = autoFill.popOverContainer, popOverClassName = autoFill.popOverClassName, valueField = autoFill.valueField, defaultSelection = autoFill.defaultSelection;
298
319
  var form = {
299
320
  type: 'form',
300
321
  // debug: true,
301
322
  title: '',
302
323
  className: 'suggestion-form',
303
- body: {
304
- type: 'picker',
305
- embed: true,
306
- joinValues: false,
307
- label: false,
308
- labelField: labelField,
309
- valueField: valueField || 'value',
310
- multiple: multiple,
311
- name: 'selectedItems',
312
- options: [],
313
- required: true,
314
- source: api,
315
- pickerSchema: {
316
- type: 'crud',
317
- affixHeader: false,
318
- alwaysShowPagination: true,
319
- keepItemSelectionOnPageChange: true,
320
- headerToolbar: [],
321
- footerToolbar: [
322
- {
323
- type: 'pagination',
324
- align: 'left'
325
- },
326
- {
327
- type: 'bulkActions',
328
- align: 'right',
329
- className: 'ml-2'
330
- }
331
- ],
324
+ body: [
325
+ {
326
+ type: 'picker',
327
+ embed: true,
328
+ joinValues: false,
329
+ strictMode: false,
330
+ label: false,
331
+ labelField: labelField,
332
+ valueField: valueField || 'value',
332
333
  multiple: multiple,
333
- filter: filter,
334
- columns: columns || []
334
+ name: 'selectedItems',
335
+ value: defaultSelection || [],
336
+ options: [],
337
+ required: true,
338
+ source: api,
339
+ pickerSchema: {
340
+ type: 'crud',
341
+ bodyClassName: 'mb-0',
342
+ affixHeader: false,
343
+ alwaysShowPagination: true,
344
+ keepItemSelectionOnPageChange: true,
345
+ headerToolbar: [],
346
+ footerToolbar: [
347
+ {
348
+ type: 'pagination',
349
+ align: 'left'
350
+ },
351
+ {
352
+ type: 'bulkActions',
353
+ align: 'right',
354
+ className: 'ml-2'
355
+ }
356
+ ],
357
+ multiple: multiple,
358
+ filter: filter,
359
+ columns: columns || []
360
+ }
335
361
  }
336
- },
362
+ ],
337
363
  actions: [
338
364
  {
339
365
  type: 'button',
@@ -349,13 +375,13 @@ var FormItemWrap = /** @class */ (function (_super) {
349
375
  ]
350
376
  };
351
377
  if (mode === 'popOver') {
352
- return (React.createElement(Overlay, { container: popOverContainer || this.target, target: function () { return _this.target; }, placement: position || 'left-bottom-left-top', show: true },
353
- React.createElement(PopOver, { classPrefix: ns, className: cx("".concat(ns, "Autofill-popOver"), popOverClassName), style: {
354
- minWidth: this.target ? this.target.offsetWidth : undefined
355
- }, offset: offset, onHide: this.handleClose, overlay: true }, render('popOver-auto-fill-form', form, {
356
- onAction: this.handleAction,
357
- onSubmit: this.handleSubmit
358
- }))));
378
+ return {
379
+ popOverContainer: popOverContainer,
380
+ popOverClassName: popOverClassName,
381
+ placement: placement !== null && placement !== void 0 ? placement : position,
382
+ offset: offset,
383
+ body: form
384
+ };
359
385
  }
360
386
  else {
361
387
  return {
@@ -381,23 +407,28 @@ var FormItemWrap = /** @class */ (function (_super) {
381
407
  }
382
408
  };
383
409
  // 参照录入popOver提交
384
- FormItemWrap.prototype.handleSubmit = function (values) {
410
+ FormItemWrap.prototype.handlePopOverConfirm = function (values) {
385
411
  var _a = this.props; _a.onBulkChange; var autoFill = _a.autoFill;
386
412
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
387
413
  return;
388
414
  }
389
415
  this.updateAutoFillData(values.selectedItems);
390
- this.handleClose();
416
+ this.closePopOver();
391
417
  };
392
- FormItemWrap.prototype.handleAction = function (e, action, data) {
418
+ FormItemWrap.prototype.handlePopOverAction = function (e, action, data, throwErrors, delegate) {
419
+ if (throwErrors === void 0) { throwErrors = false; }
420
+ var onAction = this.props.onAction;
393
421
  if (action.actionType === 'cancel') {
394
- this.handleClose();
422
+ this.closePopOver();
423
+ }
424
+ else if (onAction) {
425
+ // 不识别的丢给上层去处理。
426
+ return onAction(e, action, data, throwErrors, delegate);
395
427
  }
396
428
  };
397
- FormItemWrap.prototype.handleClose = function () {
398
- this.setState({
399
- isOpened: false
400
- });
429
+ FormItemWrap.prototype.closePopOver = function () {
430
+ var _a;
431
+ (_a = this.props.formItem) === null || _a === void 0 ? void 0 : _a.closePopOver();
401
432
  };
402
433
  FormItemWrap.prototype.handleOpenDialog = function (schema, data) {
403
434
  return __awaiter(this, void 0, void 0, function () {
@@ -452,7 +483,9 @@ var FormItemWrap = /** @class */ (function (_super) {
452
483
  return null;
453
484
  };
454
485
  FormItemWrap.prototype.render = function () {
455
- var _a = this.props, formMode = _a.formMode, inputOnly = _a.inputOnly, wrap = _a.wrap, render = _a.render, model = _a.formItem, css = _a.css, themeCss = _a.themeCss, id = _a.id, wrapperCustomStyle = _a.wrapperCustomStyle, env = _a.env, cx = _a.classnames;
486
+ var _this = this;
487
+ var _a, _b, _c, _d;
488
+ var _e = this.props, formMode = _e.formMode, inputOnly = _e.inputOnly, wrap = _e.wrap, render = _e.render, model = _e.formItem, css = _e.css, themeCss = _e.themeCss, id = _e.id, wrapperCustomStyle = _e.wrapperCustomStyle, env = _e.env, cx = _e.classnames, popOverContainer = _e.popOverContainer; _e.data;
456
489
  var mode = this.props.mode || formMode;
457
490
  if (wrap === false || inputOnly) {
458
491
  return this.renderControl();
@@ -470,6 +503,14 @@ var FormItemWrap = /** @class */ (function (_super) {
470
503
  formStore: undefined
471
504
  })
472
505
  : null,
506
+ model ? (React.createElement(Overlay, { container: popOverContainer || this.target, target: function () { return _this.target; }, placement: ((_a = model.popOverSchema) === null || _a === void 0 ? void 0 : _a.placement) || 'left-bottom-left-top', show: model.popOverOpen },
507
+ React.createElement(PopOver, { className: cx("Autofill-popOver", (_b = model.popOverSchema) === null || _b === void 0 ? void 0 : _b.popOverClassName), style: {
508
+ minWidth: this.target ? this.target.offsetWidth : undefined
509
+ }, offset: (_c = model.popOverSchema) === null || _c === void 0 ? void 0 : _c.offset, onHide: this.closePopOver }, render('popOver-auto-fill-form', (_d = model.popOverSchema) === null || _d === void 0 ? void 0 : _d.body, {
510
+ // data: model.popOverData,
511
+ onAction: this.handlePopOverAction,
512
+ onSubmit: this.handlePopOverConfirm
513
+ })))) : null,
473
514
  React.createElement(CustomStyle, __assign({}, this.props, { config: {
474
515
  themeCss: themeCss || css,
475
516
  classNames: [
@@ -844,19 +885,19 @@ var FormItemWrap = /** @class */ (function (_super) {
844
885
  __metadata("design:type", Function),
845
886
  __metadata("design:paramtypes", [Object]),
846
887
  __metadata("design:returntype", void 0)
847
- ], FormItemWrap.prototype, "handleSubmit", null);
888
+ ], FormItemWrap.prototype, "handlePopOverConfirm", null);
848
889
  __decorate([
849
890
  autobind,
850
891
  __metadata("design:type", Function),
851
- __metadata("design:paramtypes", [Object, Object, Object]),
892
+ __metadata("design:paramtypes", [Object, Object, Object, Boolean, Object]),
852
893
  __metadata("design:returntype", void 0)
853
- ], FormItemWrap.prototype, "handleAction", null);
894
+ ], FormItemWrap.prototype, "handlePopOverAction", null);
854
895
  __decorate([
855
896
  autobind,
856
897
  __metadata("design:type", Function),
857
898
  __metadata("design:paramtypes", []),
858
899
  __metadata("design:returntype", void 0)
859
- ], FormItemWrap.prototype, "handleClose", null);
900
+ ], FormItemWrap.prototype, "closePopOver", null);
860
901
  __decorate([
861
902
  autobind,
862
903
  __metadata("design:type", Function),
@@ -1023,8 +1064,6 @@ function asFormItem(config) {
1023
1064
  _b.inputClassName; var model = _b.formItem, cx = _b.classnames; _b.children; var type = _b.type, size = _b.size, defaultSize = _b.defaultSize, mobileUI = _b.mobileUI, rest = __rest(_b, ["inputClassName", "formItem", "classnames", "children", "type", "size", "defaultSize", "mobileUI"]);
1024
1065
  var isRuleSize = size && ['xs', 'sm', 'md', 'lg', 'full'].includes(size);
1025
1066
  var controlSize = isRuleSize ? size : defaultSize;
1026
- //@ts-ignore
1027
- var isOpened = this.state.isOpened;
1028
1067
  return (React.createElement(React.Fragment, null,
1029
1068
  React.createElement(Control, __assign({}, rest, {
1030
1069
  // 因为 formItem 内部可能不会更新到最新的 data,所以暴露个方法可以获取到最新的
@@ -1034,14 +1073,14 @@ function asFormItem(config) {
1034
1073
  }, className: cx("Form-control", (_a = {
1035
1074
  'is-inline': !!rest.inline && !mobileUI,
1036
1075
  'is-error': model && !model.valid,
1037
- 'is-full': size === 'full'
1076
+ 'is-full': size === 'full',
1077
+ 'is-thin': config.thin
1038
1078
  },
1039
1079
  _a["Form-control--withSize Form-control--size".concat(ucFirst(controlSize))] = config.sizeMutable !== false &&
1040
1080
  typeof controlSize === 'string' &&
1041
1081
  !!controlSize &&
1042
1082
  controlSize !== 'full',
1043
- _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) })),
1044
- isOpened ? this.buildAutoFillSchema() : null));
1083
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) }))));
1045
1084
  };
1046
1085
  return class_1;
1047
1086
  }(FormItemWrap)),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v6.7.0
2
+ * amis-core v6.8.0
3
3
  * Copyright 2018-2024 fex
4
4
  */
5
5
 
@@ -15,6 +15,7 @@ import 'moment';
15
15
  import { createObject, setVariable } from '../utils/object.js';
16
16
  import { isPureVariable } from '../utils/isPureVariable.js';
17
17
  import '@rc-component/mini-decimal';
18
+ import '../utils/memoryParse.js';
18
19
  import { resolveVariableAndFilter } from '../utils/resolveVariableAndFilter.js';
19
20
  import 'lodash/isPlainObject';
20
21
  import '../utils/filter.js';