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;
@@ -523,7 +608,7 @@ export declare class FormItemWrap extends React.Component<FormItemProps> {
523
608
  static layoutRenderers: {
524
609
  [propsName: string]: (props: FormItemProps, renderControl: () => JSX.Element | null) => JSX.Element;
525
610
  };
526
- render(): JSX.Element | null;
611
+ render(): React.JSX.Element | null;
527
612
  }
528
613
  export declare const detectProps: string[];
529
614
  export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (Control: FormControlComponent) => {
@@ -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
 
@@ -39,6 +39,7 @@ require('../utils/filter.js');
39
39
  require('lodash/isObject');
40
40
  require('lodash/isString');
41
41
  require('lodash/isBoolean');
42
+ require('../utils/memoryParse.js');
42
43
  require('@rc-component/mini-decimal');
43
44
  require('../utils/highlight.js');
44
45
  require('../utils/icon.js');
@@ -96,8 +97,7 @@ var FormItemWrap = /** @class */ (function (_super) {
96
97
  if (skipIfExits === void 0) { skipIfExits = false; }
97
98
  return tslib.__awaiter(_this, void 0, void 0, function () {
98
99
  var _a, autoFill, onBulkChange, formItem, data_1, itemName, ctx, result, e_1;
99
- var _b;
100
- var _c, _d;
100
+ var _b, _c, _d;
101
101
  return tslib.__generator(this, function (_e) {
102
102
  switch (_e.label) {
103
103
  case 0:
@@ -121,29 +121,22 @@ var FormItemWrap = /** @class */ (function (_super) {
121
121
  return [3 /*break*/, 3];
122
122
  case 1:
123
123
  itemName = formItem.name;
124
- ctx = object.createObject(data_1, (_b = {},
125
- _b[itemName || ''] = term,
126
- _b.__term = term,
127
- _b));
124
+ ctx = object.createObject(data_1, {
125
+ __term: term
126
+ });
127
+ object.setVariable(ctx, itemName, term);
128
128
  if (!(forceLoad ||
129
129
  (api.isEffectiveApi(autoFill.api, ctx) && this.lastSearchTerm !== term))) return [3 /*break*/, 3];
130
- return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_c = autoFill.api) === null || _c === void 0 ? void 0 : _c.silent))];
130
+ return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_b = autoFill.api) === null || _b === void 0 ? void 0 : _b.silent))];
131
131
  case 2:
132
132
  result = _e.sent();
133
133
  this.lastSearchTerm =
134
- (_d = (result && getVariable.getVariable(result, itemName))) !== null && _d !== void 0 ? _d : term;
134
+ (_c = (result && getVariable.getVariable(result, itemName))) !== null && _c !== void 0 ? _c : term;
135
135
  // 如果没有返回不应该处理
136
136
  if (!result) {
137
137
  return [2 /*return*/];
138
138
  }
139
- if (autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) {
140
- result = dataMapping.dataMapping(autoFill.fillMapping, result);
141
- }
142
- if (result) {
143
- // 不能把自己给清了吧
144
- object.setVariable(result, itemName, getVariable.getVariable(result, itemName) || formItem.tmpValue);
145
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(result);
146
- }
139
+ this.applyMapping((_d = autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) !== null && _d !== void 0 ? _d : { '&': '$$' }, result, false, true);
147
140
  _e.label = 3;
148
141
  case 3: return [3 /*break*/, 5];
149
142
  case 4:
@@ -158,15 +151,12 @@ var FormItemWrap = /** @class */ (function (_super) {
158
151
  trailing: true,
159
152
  leading: false
160
153
  });
161
- _this.state = {
162
- isOpened: false
163
- };
164
154
  var model = props.formItem, formInited = props.formInited, addHook = props.addHook, initAutoFill = props.initAutoFill;
165
155
  if (!model) {
166
156
  return _this;
167
157
  }
168
158
  _this.toDispose.push(mobx.reaction(function () {
169
- return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions));
159
+ return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions)).concat(model.popOverOpen);
170
160
  }, function () { return _this.forceUpdate(); }));
171
161
  var onInit = function () {
172
162
  var _a;
@@ -224,18 +214,26 @@ var FormItemWrap = /** @class */ (function (_super) {
224
214
  this.handleAutoFill('focus');
225
215
  };
226
216
  FormItemWrap.prototype.handleBlur = function (e) {
227
- var model = this.props.formItem;
217
+ var _a = this.props, model = _a.formItem, autoFill = _a.autoFill;
228
218
  model && model.blur();
229
219
  this.props.onBlur && this.props.onBlur(e);
220
+ if (!autoFill ||
221
+ (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('showSuggestion')))) {
222
+ return;
223
+ }
224
+ this.handleAutoFill('blur');
230
225
  };
231
226
  FormItemWrap.prototype.handleAutoFill = function (type) {
232
227
  var _this = this;
233
- var _a = this.props, autoFill = _a.autoFill; _a.onBulkChange; var formItem = _a.formItem, data = _a.data;
228
+ var _a = this.props, autoFill = _a.autoFill, formItem = _a.formItem, data = _a.data;
234
229
  var trigger = autoFill.trigger, mode = autoFill.mode;
235
230
  if (trigger === type && mode === 'popOver') {
236
231
  // 参照录入 popOver形式
237
- this.setState({
238
- isOpened: true
232
+ formItem === null || formItem === void 0 ? void 0 : formItem.openPopOver(this.buildAutoFillSchema(), data, function (confirmed, result) {
233
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
234
+ return;
235
+ }
236
+ _this.updateAutoFillData(result.selectedItems);
239
237
  });
240
238
  }
241
239
  else if (
@@ -243,7 +241,7 @@ var FormItemWrap = /** @class */ (function (_super) {
243
241
  trigger === type &&
244
242
  (mode === 'dialog' || mode === 'drawer')) {
245
243
  formItem === null || formItem === void 0 ? void 0 : formItem.openDialog(this.buildAutoFillSchema(), data, function (confirmed, result) {
246
- if (!(result === null || result === void 0 ? void 0 : result.selectedItems)) {
244
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
247
245
  return;
248
246
  }
249
247
  _this.updateAutoFillData(result.selectedItems);
@@ -251,17 +249,21 @@ var FormItemWrap = /** @class */ (function (_super) {
251
249
  }
252
250
  };
253
251
  FormItemWrap.prototype.updateAutoFillData = function (context) {
254
- var _a = this.props, formStore = _a.formStore, autoFill = _a.autoFill, onBulkChange = _a.onBulkChange;
255
- var fillMapping = autoFill.fillMapping, multiple = autoFill.multiple;
252
+ var _a = this.props, data = _a.data, autoFill = _a.autoFill; _a.onBulkChange;
253
+ var fillMapping = autoFill.fillMapping; autoFill.multiple;
256
254
  // form原始数据
257
- var data = formStore === null || formStore === void 0 ? void 0 : formStore.data;
258
- var contextData = object.createObject(tslib.__assign({ items: !multiple ? [context] : context }, data), tslib.__assign({}, context));
259
- var responseData = {};
260
- responseData = dataMapping.dataMapping(fillMapping, contextData);
261
- if (!multiple && !fillMapping) {
262
- responseData = context;
263
- }
264
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(responseData);
255
+ var contextData = Array.isArray(context)
256
+ ? object.createObject(data, {
257
+ items: context
258
+ })
259
+ : object.createObjectFromChain([
260
+ data,
261
+ {
262
+ items: [context]
263
+ },
264
+ context
265
+ ]);
266
+ this.applyMapping(fillMapping !== null && fillMapping !== void 0 ? fillMapping : {}, contextData, false);
265
267
  };
266
268
  FormItemWrap.prototype.syncOptionAutoFill = function (selectedOptions, skipIfExits) {
267
269
  if (skipIfExits === void 0) { skipIfExits = false; }
@@ -275,83 +277,107 @@ var FormItemWrap = /** @class */ (function (_super) {
275
277
  autoFill &&
276
278
  !helper.isEmpty(autoFill) &&
277
279
  formItem.filteredOptions.length) {
278
- var toSync_1 = dataMapping.dataMapping(autoFill, multiple
280
+ this.applyMapping(autoFill, multiple
279
281
  ? {
280
282
  items: selectedOptions.map(function (item) {
281
283
  return object.createObject(tslib.__assign(tslib.__assign({}, data), { ancestors: helper.getTreeAncestors(formItem.filteredOptions, item, true) }), item);
282
284
  })
283
285
  }
284
- : object.createObject(tslib.__assign(tslib.__assign({}, data), { ancestors: helper.getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]));
285
- var tmpData_1 = tslib.__assign({}, data);
286
- var result_1 = tslib.__assign({}, toSync_1);
287
- Object.keys(autoFill).forEach(function (key) {
288
- var keys = keyToPath.keyToPath(key);
289
- var value = getVariable.getVariable(toSync_1, key);
290
- if (skipIfExits) {
291
- var originValue = getVariable.getVariable(data, key);
292
- if (typeof originValue !== 'undefined') {
293
- value = originValue;
294
- }
295
- }
296
- object.setVariable(result_1, key, value);
297
- // 如果左边的 key 是一个路径
298
- // 这里不希望直接把原始对象都给覆盖没了
299
- // 而是保留原始的对象,只修改指定的属性
300
- if (keys.length > 1 && isPlainObject__default["default"](tmpData_1[keys[0]])) {
301
- // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 a.b.c2,所以需要同步更新data
302
- object.setVariable(tmpData_1, key, value);
303
- result_1[keys[0]] = tmpData_1[keys[0]];
286
+ : object.createObject(tslib.__assign(tslib.__assign({}, data), { ancestors: helper.getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]), skipIfExits);
287
+ }
288
+ };
289
+ /**
290
+ * 应用映射函数,根据给定的映射关系,更新数据对象
291
+ *
292
+ * @param mapping 映射关系,类型为任意类型
293
+ * @param ctx 上下文对象,类型为任意类型
294
+ * @param skipIfExits 是否跳过已存在的属性,默认为 false
295
+ */
296
+ FormItemWrap.prototype.applyMapping = function (mapping, ctx, skipIfExits, ignoreSelf) {
297
+ if (skipIfExits === void 0) { skipIfExits = false; }
298
+ if (ignoreSelf === void 0) { ignoreSelf = false; }
299
+ var _a = this.props, onBulkChange = _a.onBulkChange, data = _a.data, formItem = _a.formItem;
300
+ var toSync = dataMapping.dataMapping(mapping, ctx);
301
+ var tmpData = tslib.__assign({}, data);
302
+ var result = tslib.__assign({}, toSync);
303
+ Object.keys(mapping).forEach(function (key) {
304
+ if (key === '&') {
305
+ return;
306
+ }
307
+ var keys = keyToPath.keyToPath(key);
308
+ var value = getVariable.getVariable(toSync, key);
309
+ if (skipIfExits) {
310
+ var originValue = getVariable.getVariable(data, key);
311
+ if (typeof originValue !== 'undefined') {
312
+ value = originValue;
304
313
  }
305
- });
306
- onBulkChange(result_1);
314
+ }
315
+ object.setVariable(result, key, value);
316
+ // 如果左边的 key 是一个路径
317
+ // 这里不希望直接把原始对象都给覆盖没了
318
+ // 而是保留原始的对象,只修改指定的属性
319
+ if (keys.length > 1 && isPlainObject__default["default"](tmpData[keys[0]])) {
320
+ // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 和 a.b.c2,所以需要同步更新data
321
+ object.setVariable(tmpData, key, value);
322
+ result[keys[0]] = tmpData[keys[0]];
323
+ }
324
+ });
325
+ // 是否忽略自己的设置
326
+ if (ignoreSelf && (formItem === null || formItem === void 0 ? void 0 : formItem.name)) {
327
+ object.deleteVariable(result, formItem.name);
307
328
  }
329
+ onBulkChange(result);
308
330
  };
309
331
  FormItemWrap.prototype.buildAutoFillSchema = function () {
310
- var _this = this;
311
- var _a = this.props, render = _a.render, autoFill = _a.autoFill, ns = _a.classPrefix, cx = _a.classnames, __ = _a.translate;
332
+ var _a = this.props; _a.formItem; var autoFill = _a.autoFill, __ = _a.translate;
312
333
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
313
334
  return;
314
335
  }
315
- 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;
336
+ 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;
316
337
  var form = {
317
338
  type: 'form',
318
339
  // debug: true,
319
340
  title: '',
320
341
  className: 'suggestion-form',
321
- body: {
322
- type: 'picker',
323
- embed: true,
324
- joinValues: false,
325
- label: false,
326
- labelField: labelField,
327
- valueField: valueField || 'value',
328
- multiple: multiple,
329
- name: 'selectedItems',
330
- options: [],
331
- required: true,
332
- source: api,
333
- pickerSchema: {
334
- type: 'crud',
335
- affixHeader: false,
336
- alwaysShowPagination: true,
337
- keepItemSelectionOnPageChange: true,
338
- headerToolbar: [],
339
- footerToolbar: [
340
- {
341
- type: 'pagination',
342
- align: 'left'
343
- },
344
- {
345
- type: 'bulkActions',
346
- align: 'right',
347
- className: 'ml-2'
348
- }
349
- ],
342
+ body: [
343
+ {
344
+ type: 'picker',
345
+ embed: true,
346
+ joinValues: false,
347
+ strictMode: false,
348
+ label: false,
349
+ labelField: labelField,
350
+ valueField: valueField || 'value',
350
351
  multiple: multiple,
351
- filter: filter,
352
- columns: columns || []
352
+ name: 'selectedItems',
353
+ value: defaultSelection || [],
354
+ options: [],
355
+ required: true,
356
+ source: api,
357
+ pickerSchema: {
358
+ type: 'crud',
359
+ bodyClassName: 'mb-0',
360
+ affixHeader: false,
361
+ alwaysShowPagination: true,
362
+ keepItemSelectionOnPageChange: true,
363
+ headerToolbar: [],
364
+ footerToolbar: [
365
+ {
366
+ type: 'pagination',
367
+ align: 'left'
368
+ },
369
+ {
370
+ type: 'bulkActions',
371
+ align: 'right',
372
+ className: 'ml-2'
373
+ }
374
+ ],
375
+ multiple: multiple,
376
+ filter: filter,
377
+ columns: columns || []
378
+ }
353
379
  }
354
- },
380
+ ],
355
381
  actions: [
356
382
  {
357
383
  type: 'button',
@@ -367,13 +393,13 @@ var FormItemWrap = /** @class */ (function (_super) {
367
393
  ]
368
394
  };
369
395
  if (mode === 'popOver') {
370
- return (_J$X_(Overlay["default"], { container: popOverContainer || this.target, target: function () { return _this.target; }, placement: position || 'left-bottom-left-top', show: true },
371
- _J$X_(PopOver["default"], { classPrefix: ns, className: cx("".concat(ns, "Autofill-popOver"), popOverClassName), style: {
372
- minWidth: this.target ? this.target.offsetWidth : undefined
373
- }, offset: offset, onHide: this.handleClose, overlay: true }, render('popOver-auto-fill-form', form, {
374
- onAction: this.handleAction,
375
- onSubmit: this.handleSubmit
376
- }))));
396
+ return {
397
+ popOverContainer: popOverContainer,
398
+ popOverClassName: popOverClassName,
399
+ placement: placement !== null && placement !== void 0 ? placement : position,
400
+ offset: offset,
401
+ body: form
402
+ };
377
403
  }
378
404
  else {
379
405
  return {
@@ -399,23 +425,28 @@ var FormItemWrap = /** @class */ (function (_super) {
399
425
  }
400
426
  };
401
427
  // 参照录入popOver提交
402
- FormItemWrap.prototype.handleSubmit = function (values) {
428
+ FormItemWrap.prototype.handlePopOverConfirm = function (values) {
403
429
  var _a = this.props; _a.onBulkChange; var autoFill = _a.autoFill;
404
430
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
405
431
  return;
406
432
  }
407
433
  this.updateAutoFillData(values.selectedItems);
408
- this.handleClose();
434
+ this.closePopOver();
409
435
  };
410
- FormItemWrap.prototype.handleAction = function (e, action, data) {
436
+ FormItemWrap.prototype.handlePopOverAction = function (e, action, data, throwErrors, delegate) {
437
+ if (throwErrors === void 0) { throwErrors = false; }
438
+ var onAction = this.props.onAction;
411
439
  if (action.actionType === 'cancel') {
412
- this.handleClose();
440
+ this.closePopOver();
441
+ }
442
+ else if (onAction) {
443
+ // 不识别的丢给上层去处理。
444
+ return onAction(e, action, data, throwErrors, delegate);
413
445
  }
414
446
  };
415
- FormItemWrap.prototype.handleClose = function () {
416
- this.setState({
417
- isOpened: false
418
- });
447
+ FormItemWrap.prototype.closePopOver = function () {
448
+ var _a;
449
+ (_a = this.props.formItem) === null || _a === void 0 ? void 0 : _a.closePopOver();
419
450
  };
420
451
  FormItemWrap.prototype.handleOpenDialog = function (schema, data) {
421
452
  return tslib.__awaiter(this, void 0, void 0, function () {
@@ -470,7 +501,9 @@ var FormItemWrap = /** @class */ (function (_super) {
470
501
  return null;
471
502
  };
472
503
  FormItemWrap.prototype.render = function () {
473
- 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;
504
+ var _this = this;
505
+ var _a, _b, _c, _d;
506
+ 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;
474
507
  var mode = this.props.mode || formMode;
475
508
  if (wrap === false || inputOnly) {
476
509
  return this.renderControl();
@@ -488,6 +521,14 @@ var FormItemWrap = /** @class */ (function (_super) {
488
521
  formStore: undefined
489
522
  })
490
523
  : null,
524
+ model ? (_J$X_(Overlay["default"], { 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 },
525
+ _J$X_(PopOver["default"], { className: cx("Autofill-popOver", (_b = model.popOverSchema) === null || _b === void 0 ? void 0 : _b.popOverClassName), style: {
526
+ minWidth: this.target ? this.target.offsetWidth : undefined
527
+ }, 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, {
528
+ // data: model.popOverData,
529
+ onAction: this.handlePopOverAction,
530
+ onSubmit: this.handlePopOverConfirm
531
+ })))) : null,
491
532
  _J$X_(CustomStyle["default"], tslib.__assign({}, this.props, { config: {
492
533
  themeCss: themeCss || css,
493
534
  classNames: [
@@ -862,19 +903,19 @@ var FormItemWrap = /** @class */ (function (_super) {
862
903
  tslib.__metadata("design:type", Function),
863
904
  tslib.__metadata("design:paramtypes", [Object]),
864
905
  tslib.__metadata("design:returntype", void 0)
865
- ], FormItemWrap.prototype, "handleSubmit", null);
906
+ ], FormItemWrap.prototype, "handlePopOverConfirm", null);
866
907
  tslib.__decorate([
867
908
  helper.autobind,
868
909
  tslib.__metadata("design:type", Function),
869
- tslib.__metadata("design:paramtypes", [Object, Object, Object]),
910
+ tslib.__metadata("design:paramtypes", [Object, Object, Object, Boolean, Object]),
870
911
  tslib.__metadata("design:returntype", void 0)
871
- ], FormItemWrap.prototype, "handleAction", null);
912
+ ], FormItemWrap.prototype, "handlePopOverAction", null);
872
913
  tslib.__decorate([
873
914
  helper.autobind,
874
915
  tslib.__metadata("design:type", Function),
875
916
  tslib.__metadata("design:paramtypes", []),
876
917
  tslib.__metadata("design:returntype", void 0)
877
- ], FormItemWrap.prototype, "handleClose", null);
918
+ ], FormItemWrap.prototype, "closePopOver", null);
878
919
  tslib.__decorate([
879
920
  helper.autobind,
880
921
  tslib.__metadata("design:type", Function),
@@ -1041,8 +1082,6 @@ function asFormItem(config) {
1041
1082
  _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 = tslib.__rest(_b, ["inputClassName", "formItem", "classnames", "children", "type", "size", "defaultSize", "mobileUI"]);
1042
1083
  var isRuleSize = size && ['xs', 'sm', 'md', 'lg', 'full'].includes(size);
1043
1084
  var controlSize = isRuleSize ? size : defaultSize;
1044
- //@ts-ignore
1045
- var isOpened = this.state.isOpened;
1046
1085
  return (_J$X_(React__default["default"].Fragment, null,
1047
1086
  _J$X_(Control, tslib.__assign({}, rest, {
1048
1087
  // 因为 formItem 内部可能不会更新到最新的 data,所以暴露个方法可以获取到最新的
@@ -1052,14 +1091,14 @@ function asFormItem(config) {
1052
1091
  }, className: cx("Form-control", (_a = {
1053
1092
  'is-inline': !!rest.inline && !mobileUI,
1054
1093
  'is-error': model && !model.valid,
1055
- 'is-full': size === 'full'
1094
+ 'is-full': size === 'full',
1095
+ 'is-thin': config.thin
1056
1096
  },
1057
1097
  _a["Form-control--withSize Form-control--size".concat(helper.ucFirst(controlSize))] = config.sizeMutable !== false &&
1058
1098
  typeof controlSize === 'string' &&
1059
1099
  !!controlSize &&
1060
1100
  controlSize !== 'full',
1061
- _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) })),
1062
- isOpened ? this.buildAutoFillSchema() : null));
1101
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) }))));
1063
1102
  };
1064
1103
  return class_1;
1065
1104
  }(FormItemWrap)),