amis 1.8.0-beta.0 → 1.8.0-beta.3

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 (217) hide show
  1. package/lib/SchemaRenderer.js +19 -3
  2. package/lib/SchemaRenderer.js.map +2 -2
  3. package/lib/WithRootStore.d.ts +18 -0
  4. package/lib/WithStore.js +2 -1
  5. package/lib/WithStore.js.map +2 -2
  6. package/lib/actions/CmptAction.js +14 -3
  7. package/lib/actions/CmptAction.js.map +2 -2
  8. package/lib/components/BarCode.js +1 -1
  9. package/lib/components/BarCode.js.map +2 -2
  10. package/lib/components/DatePicker.d.ts +3 -0
  11. package/lib/components/DatePicker.js +56 -11
  12. package/lib/components/DatePicker.js.map +2 -2
  13. package/lib/components/DateRangePicker.d.ts +92 -84
  14. package/lib/components/DateRangePicker.js +198 -5
  15. package/lib/components/DateRangePicker.js.map +2 -2
  16. package/lib/components/MonthRangePicker.d.ts +84 -84
  17. package/lib/components/Progress.js +12 -9
  18. package/lib/components/Progress.js.map +2 -2
  19. package/lib/components/Radios.d.ts +1 -1
  20. package/lib/components/Radios.js +3 -5
  21. package/lib/components/Radios.js.map +2 -2
  22. package/lib/components/Range.d.ts +2 -2
  23. package/lib/components/Range.js +24 -11
  24. package/lib/components/Range.js.map +2 -2
  25. package/lib/components/Steps.d.ts +6 -0
  26. package/lib/components/Steps.js +13 -9
  27. package/lib/components/Steps.js.map +2 -2
  28. package/lib/components/calendar/Calendar.js +16 -12
  29. package/lib/components/calendar/Calendar.js.map +2 -2
  30. package/lib/components/calendar/YearsView.js +3 -3
  31. package/lib/components/calendar/YearsView.js.map +2 -2
  32. package/lib/components/formula/Editor.d.ts +3 -1
  33. package/lib/components/formula/Editor.js +20 -2
  34. package/lib/components/formula/Editor.js.map +2 -2
  35. package/lib/components/formula/Picker.d.ts +5 -0
  36. package/lib/components/formula/Picker.js +19 -4
  37. package/lib/components/formula/Picker.js.map +2 -2
  38. package/lib/factory.d.ts +4 -0
  39. package/lib/factory.js +8 -2
  40. package/lib/factory.js.map +2 -2
  41. package/lib/index.js +1 -1
  42. package/lib/locale/de-DE.js +13 -0
  43. package/lib/locale/de-DE.js.map +2 -2
  44. package/lib/locale/en-US.js +13 -0
  45. package/lib/locale/en-US.js.map +2 -2
  46. package/lib/locale/zh-CN.js +13 -0
  47. package/lib/locale/zh-CN.js.map +2 -2
  48. package/lib/renderers/Action.d.ts +2 -0
  49. package/lib/renderers/Action.js +23 -5
  50. package/lib/renderers/Action.js.map +2 -2
  51. package/lib/renderers/Carousel.d.ts +1 -0
  52. package/lib/renderers/Carousel.js +13 -1
  53. package/lib/renderers/Carousel.js.map +2 -2
  54. package/lib/renderers/Dialog.d.ts +4 -0
  55. package/lib/renderers/Dialog.js +4 -3
  56. package/lib/renderers/Dialog.js.map +2 -2
  57. package/lib/renderers/DropDownButton.d.ts +2 -0
  58. package/lib/renderers/DropDownButton.js +13 -4
  59. package/lib/renderers/DropDownButton.js.map +2 -2
  60. package/lib/renderers/Form/Checkboxes.d.ts +2 -2
  61. package/lib/renderers/Form/Checkboxes.js +2 -6
  62. package/lib/renderers/Form/Checkboxes.js.map +2 -2
  63. package/lib/renderers/Form/Combo.js +3 -2
  64. package/lib/renderers/Form/Combo.js.map +2 -2
  65. package/lib/renderers/Form/InputCity.d.ts +3 -0
  66. package/lib/renderers/Form/InputCity.js +44 -2
  67. package/lib/renderers/Form/InputCity.js.map +2 -2
  68. package/lib/renderers/Form/InputDateRange.d.ts +5 -0
  69. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  70. package/lib/renderers/Form/InputFile.js +6 -3
  71. package/lib/renderers/Form/InputFile.js.map +2 -2
  72. package/lib/renderers/Form/InputFormula.d.ts +4 -0
  73. package/lib/renderers/Form/InputFormula.js +2 -2
  74. package/lib/renderers/Form/InputFormula.js.map +2 -2
  75. package/lib/renderers/Form/InputImage.js +6 -3
  76. package/lib/renderers/Form/InputImage.js.map +2 -2
  77. package/lib/renderers/Form/InputRange.js +13 -14
  78. package/lib/renderers/Form/InputRange.js.map +2 -2
  79. package/lib/renderers/Form/InputTable.js +4 -2
  80. package/lib/renderers/Form/InputTable.js.map +2 -2
  81. package/lib/renderers/Form/Item.d.ts +11 -6
  82. package/lib/renderers/Form/index.js +1 -1
  83. package/lib/renderers/Form/index.js.map +2 -2
  84. package/lib/renderers/Form/wrapControl.d.ts +9 -0
  85. package/lib/renderers/Form/wrapControl.js +1 -1
  86. package/lib/renderers/Form/wrapControl.js.map +2 -2
  87. package/lib/renderers/Nav.js +2 -2
  88. package/lib/renderers/Nav.js.map +2 -2
  89. package/lib/renderers/Page.js +2 -3
  90. package/lib/renderers/Page.js.map +2 -2
  91. package/lib/renderers/Progress.d.ts +1 -1
  92. package/lib/renderers/Progress.js +1 -1
  93. package/lib/renderers/Progress.js.map +2 -2
  94. package/lib/renderers/Steps.d.ts +8 -0
  95. package/lib/renderers/Steps.js +2 -2
  96. package/lib/renderers/Steps.js.map +2 -2
  97. package/lib/renderers/Table/TableRow.js +1 -1
  98. package/lib/renderers/Table/TableRow.js.map +2 -2
  99. package/lib/renderers/Table/index.js +7 -3
  100. package/lib/renderers/Table/index.js.map +2 -2
  101. package/lib/renderers/Tabs.d.ts +4 -0
  102. package/lib/renderers/Tabs.js +22 -6
  103. package/lib/renderers/Tabs.js.map +2 -2
  104. package/lib/renderers/Wizard.d.ts +6 -3
  105. package/lib/renderers/Wizard.js +257 -152
  106. package/lib/renderers/Wizard.js.map +2 -2
  107. package/lib/store/index.d.ts +5 -0
  108. package/lib/store/index.js +14 -0
  109. package/lib/store/index.js.map +2 -2
  110. package/lib/store/table.js +4 -4
  111. package/lib/store/table.js.map +2 -2
  112. package/lib/themes/ang-ie11.css +194 -23
  113. package/lib/themes/ang.css +193 -22
  114. package/lib/themes/ang.css.map +1 -1
  115. package/lib/themes/antd-ie11.css +194 -23
  116. package/lib/themes/antd.css +193 -22
  117. package/lib/themes/antd.css.map +1 -1
  118. package/lib/themes/cxd-ie11.css +194 -23
  119. package/lib/themes/cxd.css +193 -22
  120. package/lib/themes/cxd.css.map +1 -1
  121. package/lib/themes/dark-ie11.css +194 -23
  122. package/lib/themes/dark.css +193 -22
  123. package/lib/themes/dark.css.map +1 -1
  124. package/lib/themes/default-ie11.css +194 -23
  125. package/lib/themes/default.css +193 -22
  126. package/lib/themes/default.css.map +1 -1
  127. package/lib/types.d.ts +1 -1
  128. package/lib/types.js.map +1 -1
  129. package/lib/utils/columnsSplit.d.ts +1 -0
  130. package/lib/utils/columnsSplit.js +40 -0
  131. package/lib/utils/columnsSplit.js.map +13 -0
  132. package/lib/utils/debug.d.ts +1 -1
  133. package/lib/utils/debug.js +16 -22
  134. package/lib/utils/debug.js.map +2 -2
  135. package/package.json +1 -1
  136. package/schema.json +181 -30
  137. package/scss/_properties.scss +2 -2
  138. package/scss/components/_barcode.scss +1 -1
  139. package/scss/components/_carousel.scss +1 -0
  140. package/scss/components/_debug.scss +3 -3
  141. package/scss/components/_formula.scss +18 -0
  142. package/scss/components/_progress.scss +3 -8
  143. package/scss/components/_steps.scss +199 -8
  144. package/scss/components/form/_date.scss +14 -0
  145. package/scss/components/form/_editor.scss +2 -1
  146. package/sdk/ang-ie11.css +234 -25
  147. package/sdk/ang.css +233 -24
  148. package/sdk/antd-ie11.css +234 -25
  149. package/sdk/antd.css +233 -24
  150. package/sdk/barcode.js +51 -51
  151. package/sdk/charts.js +14 -14
  152. package/sdk/codemirror.js +7 -7
  153. package/sdk/color-picker.js +65 -65
  154. package/sdk/cropperjs.js +2 -2
  155. package/sdk/cxd-ie11.css +234 -25
  156. package/sdk/cxd.css +233 -24
  157. package/sdk/dark-ie11.css +234 -25
  158. package/sdk/dark.css +233 -24
  159. package/sdk/exceljs.js +1 -1
  160. package/sdk/locale/de-DE.js +13 -0
  161. package/sdk/markdown.js +69 -69
  162. package/sdk/papaparse.js +1 -1
  163. package/sdk/renderers/Form/CityDB.js +1 -1
  164. package/sdk/rest.js +17 -17
  165. package/sdk/rich-text.js +62 -62
  166. package/sdk/sdk-ie11.css +234 -25
  167. package/sdk/sdk.css +233 -24
  168. package/sdk/sdk.js +1290 -1288
  169. package/sdk/thirds/hls.js/hls.js +1 -1
  170. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  171. package/sdk/tinymce.js +57 -57
  172. package/src/SchemaRenderer.tsx +32 -14
  173. package/src/WithStore.tsx +3 -1
  174. package/src/actions/CmptAction.ts +18 -0
  175. package/src/components/BarCode.tsx +2 -2
  176. package/src/components/DatePicker.tsx +77 -22
  177. package/src/components/DateRangePicker.tsx +198 -4
  178. package/src/components/Progress.tsx +8 -12
  179. package/src/components/Radios.tsx +6 -17
  180. package/src/components/Range.tsx +26 -12
  181. package/src/components/Steps.tsx +28 -27
  182. package/src/components/calendar/Calendar.tsx +17 -12
  183. package/src/components/calendar/YearsView.tsx +3 -4
  184. package/src/components/formula/Editor.tsx +34 -3
  185. package/src/components/formula/Picker.tsx +28 -1
  186. package/src/factory.tsx +15 -2
  187. package/src/locale/de-DE.ts +13 -0
  188. package/src/locale/en-US.ts +13 -0
  189. package/src/locale/zh-CN.ts +13 -0
  190. package/src/renderers/Action.tsx +22 -1
  191. package/src/renderers/Carousel.tsx +8 -0
  192. package/src/renderers/Dialog.tsx +17 -3
  193. package/src/renderers/DropDownButton.tsx +14 -3
  194. package/src/renderers/Form/Checkboxes.tsx +5 -18
  195. package/src/renderers/Form/Combo.tsx +2 -3
  196. package/src/renderers/Form/InputCity.tsx +33 -4
  197. package/src/renderers/Form/InputDateRange.tsx +8 -1
  198. package/src/renderers/Form/InputFile.tsx +7 -3
  199. package/src/renderers/Form/InputFormula.tsx +7 -0
  200. package/src/renderers/Form/InputImage.tsx +7 -3
  201. package/src/renderers/Form/InputRange.tsx +18 -16
  202. package/src/renderers/Form/InputTable.tsx +6 -2
  203. package/src/renderers/Form/index.tsx +1 -1
  204. package/src/renderers/Form/wrapControl.tsx +1 -1
  205. package/src/renderers/Nav.tsx +1 -1
  206. package/src/renderers/Page.tsx +1 -2
  207. package/src/renderers/Progress.tsx +2 -2
  208. package/src/renderers/Steps.tsx +14 -0
  209. package/src/renderers/Table/TableRow.tsx +1 -1
  210. package/src/renderers/Table/index.tsx +11 -2
  211. package/src/renderers/Tabs.tsx +75 -28
  212. package/src/renderers/Wizard.tsx +154 -93
  213. package/src/store/index.ts +20 -0
  214. package/src/store/table.ts +4 -4
  215. package/src/types.ts +3 -1
  216. package/src/utils/columnsSplit.tsx +57 -0
  217. package/src/utils/debug.tsx +17 -24
@@ -253,7 +253,8 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
253
253
  }
254
254
  })
255
255
  .then(value => {
256
- onInit && onInit(store.data);
256
+ this.handleInitEvent(store.data)
257
+
257
258
  const state = {
258
259
  currentStep:
259
260
  typeof this.props.startStep === 'string'
@@ -291,7 +292,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
291
292
  ? parseInt(tokenize(this.props.startStep, this.props.data))
292
293
  : 1
293
294
  },
294
- () => onInit && onInit(store.data)
295
+ () => this.handleInitEvent(store.data)
295
296
  );
296
297
  }
297
298
 
@@ -336,6 +337,19 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
336
337
  this.unSensor && this.unSensor();
337
338
  }
338
339
 
340
+ async dispatchEvent(action: string, value?: object) {
341
+ const {dispatchEvent, data} = this.props;
342
+
343
+ const rendererEvent = await dispatchEvent(action, createObject(data, value ? {value} : {}));
344
+
345
+ return rendererEvent?.prevented ?? false;
346
+ }
347
+
348
+ async handleInitEvent(data: any) {
349
+ const {onInit} = this.props;
350
+ (await this.dispatchEvent('inited', data)) && onInit && onInit(data);
351
+ }
352
+
339
353
  @autobind
340
354
  affixDetect() {
341
355
  if (
@@ -364,11 +378,15 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
364
378
  affixed ? affixDom.classList.add('in') : affixDom.classList.remove('in');
365
379
  }
366
380
 
367
- gotoStep(index: number) {
381
+ async gotoStep(index: number) {
368
382
  const steps = this.props.steps || [];
369
383
  index = Math.max(Math.min(steps.length, index), 1);
370
384
 
371
385
  if (index != this.state.currentStep) {
386
+ if (await this.dispatchEvent('stepChange')) {
387
+ return
388
+ }
389
+
372
390
  this.setState({
373
391
  currentStep: index,
374
392
  completeStep: Math.max(this.state.completeStep, index - 1)
@@ -517,9 +535,9 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
517
535
  throwErrors: boolean = false,
518
536
  delegate?: IScopedContext
519
537
  ) {
520
- const {onAction, store, env} = this.props;
538
+ const {onAction, store, env, steps} = this.props;
521
539
 
522
- if (action.actionType === 'next' || action.type === 'submit') {
540
+ if (action.actionType === 'next' || action.type === 'submit' || action.actionType === 'step-submit') {
523
541
  this.form.doAction(
524
542
  {
525
543
  ...action,
@@ -572,6 +590,14 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
572
590
  });
573
591
  } else if (action.actionType === 'reload') {
574
592
  action.target && this.reloadTarget(action.target, data);
593
+ } else if (action.actionType === 'goto-step') {
594
+ const targetStep = (data as any).step;
595
+
596
+ if (targetStep !== undefined && targetStep <= steps.length && targetStep >= 0) {
597
+ this.gotoStep((data as any).step);
598
+ }
599
+ } else if (action.actionType === 'submit') {
600
+ this.finalSubmit()
575
601
  } else if (onAction) {
576
602
  onAction(e, action, data, throwErrors, delegate || this.context);
577
603
  }
@@ -601,9 +627,17 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
601
627
  }
602
628
 
603
629
  @autobind
604
- handleChange(values: object) {
630
+ async handleChange(values: object) {
605
631
  const {store} = this.props;
606
632
 
633
+ const previous = store.data;
634
+ const final = {...previous, ...values};
635
+
636
+ if (await this.dispatchEvent('change', final)) {
637
+ return;
638
+ }
639
+
640
+
607
641
  store.updateData(values);
608
642
  }
609
643
 
@@ -630,9 +664,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
630
664
  store.updateData(reseted);
631
665
  }
632
666
 
633
- // 接管里面 form 的提交,不能直接让 form 提交,因为 wizard 自己需要知道进度。
634
- @autobind
635
- handleSubmit(values: object, action: Action) {
667
+ async finalSubmit(values: object = {}, action: Action = {type: 'submit'}) {
636
668
  const {
637
669
  store,
638
670
  steps,
@@ -646,10 +678,118 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
646
678
  onFinished
647
679
  } = this.props;
648
680
 
681
+ if (await this.dispatchEvent('finished', store.data)) {
682
+ return;
683
+ }
684
+
649
685
  const step = steps[this.state.currentStep - 1];
650
686
  store.updateData(values);
651
687
 
688
+
689
+ // 最后一步
690
+ if (target) {
691
+ this.submitToTarget(target, store.data);
692
+ this.setState({completeStep: steps.length});
693
+ } else if (action.api || step.api || api) {
694
+ let finnalAsyncApi = action.asyncApi || step.asyncApi || asyncApi;
695
+
696
+ isEffectiveApi(finnalAsyncApi, store.data) &&
697
+ store.updateData({
698
+ [finishedField || 'finished']: false
699
+ });
700
+
701
+ const formStore = this.form
702
+ ? (this.form.props.store as IFormStore)
703
+ : store;
704
+ store.markSaving(true);
705
+
706
+ formStore
707
+ .saveRemote(action.api || step.api || api!, store.data, {
708
+ onSuccess: () => {
709
+ this.dispatchEvent('submitSucc', store.data);
710
+
711
+ if (
712
+ !isEffectiveApi(finnalAsyncApi, store.data) ||
713
+ store.data[finishedField || 'finished']
714
+ ) {
715
+ return;
716
+ }
717
+
718
+ return until(
719
+ () => store.checkRemote(finnalAsyncApi as Api, store.data),
720
+ (ret: any) => ret && ret[finishedField || 'finished'],
721
+ cancel => (this.asyncCancel = cancel)
722
+ );
723
+ },
724
+ onFailed: json => this.dispatchEvent('submitFail', json)
725
+ })
726
+ .then(async value => {
727
+ const feedback = action.feedback;
728
+ if (feedback && isVisible(feedback, value)) {
729
+ const confirmed = await this.openFeedback(feedback, value);
730
+
731
+ // 如果 feedback 配置了,取消就跳过原有逻辑。
732
+ if (feedback.skipRestOnCancel && !confirmed) {
733
+ throw new SkipOperation();
734
+ } else if (feedback.skipRestOnConfirm && confirmed) {
735
+ throw new SkipOperation();
736
+ }
737
+ }
738
+
739
+ this.setState({completeStep: steps.length});
740
+ store.updateData({
741
+ ...store.data,
742
+ ...value
743
+ });
744
+ store.markSaving(false);
745
+
746
+ if (value && typeof value.step === 'number') {
747
+ this.gotoStep(value.step);
748
+ } else if (onFinished && onFinished(value, action) === false) {
749
+ // 如果是 false 后面的操作就不执行
750
+ return value;
751
+ }
752
+
753
+ const finalRedirect =
754
+ (action.redirect || step.redirect || redirect) &&
755
+ filter(action.redirect || step.redirect || redirect, store.data);
756
+
757
+ if (finalRedirect) {
758
+ env.jumpTo(finalRedirect, action);
759
+ } else if (action.reload || step.reload || reload) {
760
+ this.reloadTarget(
761
+ action.reload || step.reload || reload!,
762
+ store.data
763
+ );
764
+ }
765
+
766
+ return value;
767
+ })
768
+ .catch(error => {
769
+ this.dispatchEvent('submitFail', error)
770
+ store.markSaving(false);
771
+ console.error(error);
772
+ });
773
+ } else {
774
+ onFinished && onFinished(store.data, action);
775
+ this.setState({completeStep: steps.length});
776
+ }
777
+ }
778
+
779
+ // 接管里面 form 的提交,不能直接让 form 提交,因为 wizard 自己需要知道进度。
780
+ @autobind
781
+ async handleSubmit(values: object, action: Action) {
782
+ const {
783
+ store,
784
+ steps,
785
+ finishedField
786
+ } = this.props;
787
+
788
+
652
789
  if (this.state.currentStep < steps.length) {
790
+ const step = steps[this.state.currentStep - 1];
791
+ store.updateData(values);
792
+
653
793
  let finnalAsyncApi = action.asyncApi || step.asyncApi;
654
794
 
655
795
  isEffectiveApi(finnalAsyncApi, store.data) &&
@@ -661,6 +801,8 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
661
801
  store
662
802
  .saveRemote(action.api || step.api!, store.data, {
663
803
  onSuccess: () => {
804
+ this.dispatchEvent('stepSubmitSucc', store.data);
805
+
664
806
  if (
665
807
  !isEffectiveApi(finnalAsyncApi, store.data) ||
666
808
  store.data[finishedField || 'finished']
@@ -675,6 +817,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
675
817
  );
676
818
  },
677
819
  onFailed: json => {
820
+ this.dispatchEvent('stepSubmitFail', json);
678
821
  if (json.status === 422 && json.errors && this.form) {
679
822
  this.form.props.store.setFormItemErrors(json.errors);
680
823
  }
@@ -700,6 +843,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
700
843
  );
701
844
  })
702
845
  .catch(reason => {
846
+ this.dispatchEvent('stepSubmitFail', reason);
703
847
  if (reason instanceof SkipOperation) {
704
848
  return;
705
849
  }
@@ -709,90 +853,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
709
853
  this.gotoStep(this.state.currentStep + 1);
710
854
  }
711
855
  } else {
712
- // 最后一步
713
- if (target) {
714
- this.submitToTarget(target, store.data);
715
- this.setState({completeStep: steps.length});
716
- } else if (action.api || step.api || api) {
717
- let finnalAsyncApi = action.asyncApi || step.asyncApi || asyncApi;
718
-
719
- isEffectiveApi(finnalAsyncApi, store.data) &&
720
- store.updateData({
721
- [finishedField || 'finished']: false
722
- });
723
-
724
- const formStore = this.form
725
- ? (this.form.props.store as IFormStore)
726
- : store;
727
- store.markSaving(true);
728
-
729
- formStore
730
- .saveRemote(action.api || step.api || api!, store.data, {
731
- onSuccess: () => {
732
- if (
733
- !isEffectiveApi(finnalAsyncApi, store.data) ||
734
- store.data[finishedField || 'finished']
735
- ) {
736
- return;
737
- }
738
-
739
- return until(
740
- () => store.checkRemote(finnalAsyncApi as Api, store.data),
741
- (ret: any) => ret && ret[finishedField || 'finished'],
742
- cancel => (this.asyncCancel = cancel)
743
- );
744
- }
745
- })
746
- .then(async value => {
747
- const feedback = action.feedback;
748
- if (feedback && isVisible(feedback, value)) {
749
- const confirmed = await this.openFeedback(feedback, value);
750
-
751
- // 如果 feedback 配置了,取消就跳过原有逻辑。
752
- if (feedback.skipRestOnCancel && !confirmed) {
753
- throw new SkipOperation();
754
- } else if (feedback.skipRestOnConfirm && confirmed) {
755
- throw new SkipOperation();
756
- }
757
- }
758
-
759
- this.setState({completeStep: steps.length});
760
- store.updateData({
761
- ...store.data,
762
- ...value
763
- });
764
- store.markSaving(false);
765
-
766
- if (value && typeof value.step === 'number') {
767
- this.gotoStep(value.step);
768
- } else if (onFinished && onFinished(value, action) === false) {
769
- // 如果是 false 后面的操作就不执行
770
- return value;
771
- }
772
-
773
- const finalRedirect =
774
- (action.redirect || step.redirect || redirect) &&
775
- filter(action.redirect || step.redirect || redirect, store.data);
776
-
777
- if (finalRedirect) {
778
- env.jumpTo(finalRedirect, action);
779
- } else if (action.reload || step.reload || reload) {
780
- this.reloadTarget(
781
- action.reload || step.reload || reload!,
782
- store.data
783
- );
784
- }
785
-
786
- return value;
787
- })
788
- .catch(e => {
789
- store.markSaving(false);
790
- console.error(e);
791
- });
792
- } else {
793
- onFinished && onFinished(store.data, action);
794
- this.setState({completeStep: steps.length});
795
- }
856
+ this.finalSubmit(values, action);
796
857
  }
797
858
 
798
859
  return false;
@@ -44,6 +44,10 @@ export const RendererStore = types
44
44
  .model('RendererStore', {
45
45
  storeType: 'RendererStore'
46
46
  })
47
+ .props({
48
+ visibleState: types.optional(types.frozen(), {}),
49
+ disableState: types.optional(types.frozen(), {})
50
+ })
47
51
  .views(self => ({
48
52
  get fetcher() {
49
53
  return getEnv(self).fetcher;
@@ -91,6 +95,22 @@ export const RendererStore = types
91
95
  removeStore(store: IStoreNode) {
92
96
  // store.dispose();
93
97
  removeStore(store);
98
+ },
99
+
100
+ setVisible(id: string, value: boolean) {
101
+ const state = {
102
+ ...self.visibleState,
103
+ [id]: value
104
+ };
105
+ self.visibleState = state;
106
+ },
107
+
108
+ setDisable(id: string, value: boolean) {
109
+ const state = {
110
+ ...self.disableState,
111
+ [id]: value
112
+ };
113
+ self.disableState = state;
94
114
  }
95
115
  }));
96
116
 
@@ -152,7 +152,7 @@ export const Row = types
152
152
  },
153
153
 
154
154
  get expanded(): boolean {
155
- return !this.collapsed && self.children.length > 0;
155
+ return !this.collapsed;
156
156
  },
157
157
 
158
158
  get moved() {
@@ -899,12 +899,12 @@ export const TableStore = iRendererStore
899
899
  : {
900
900
  item
901
901
  };
902
- const id = item.id ?? guid();
902
+ const id = item.__id ?? guid();
903
903
 
904
904
  return {
905
905
  // id: String(item && (item as any)[self.primaryField] || `${pindex}-${depth}-${key}`),
906
906
  id: String(id),
907
- parentId,
907
+ parentId: String(parentId),
908
908
  key: String(`${pindex}-${depth}-${index}`),
909
909
  path: `${path}${index}`,
910
910
  depth: depth,
@@ -941,7 +941,7 @@ export const TableStore = iRendererStore
941
941
 
942
942
  let arr: Array<SRow> = rows.map((item, index) => {
943
943
  let id = String(
944
- getEntryId ? getEntryId(item, index) : item.id ?? guid()
944
+ getEntryId ? getEntryId(item, index) : item.__id ?? guid()
945
945
  );
946
946
  return {
947
947
  // id: getEntryId ? getEntryId(item, key) : String(item && (item as any)[self.primaryField] || `${key}-1-${key}`),
package/src/types.ts CHANGED
@@ -102,7 +102,9 @@ export interface Action extends Button {
102
102
  | 'reset-and-submit'
103
103
  | 'clear'
104
104
  | 'clear-and-submit'
105
- | 'toast';
105
+ | 'toast'
106
+ | 'goto-step'
107
+ | 'step-submit';
106
108
  api?: Api;
107
109
  asyncApi?: Api;
108
110
  payload?: any;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * columnsCount 支持数字和数组两种格式
3
+ */
4
+ import React from 'react';
5
+ import chunk from 'lodash/chunk';
6
+
7
+ export function columnsSplit(
8
+ body: any[],
9
+ cx: any,
10
+ columnsCount?: number | number[]
11
+ ) {
12
+ if (Array.isArray(columnsCount) && columnsCount.length) {
13
+ let bodyIndex = 0;
14
+ const bodyList: JSX.Element[] = [];
15
+ const maxSize = Math.max(Math.round(12 / Math.max(...columnsCount)), 1);
16
+ let cellClassName = `Grid-col--sm${maxSize}`;
17
+ columnsCount.forEach((columnSize, groupIndex) => {
18
+ if (columnSize) {
19
+ bodyList.push(
20
+ <div className={cx('Grid')} key={groupIndex}>
21
+ {Array.from({length: columnSize}).map((_, index) => {
22
+ if (bodyIndex + index < body.length) {
23
+ // 避免溢出
24
+ return (
25
+ <div key={index} className={cx(cellClassName)}>
26
+ {body[bodyIndex + index]}
27
+ </div>
28
+ );
29
+ } else {
30
+ return null;
31
+ }
32
+ })}
33
+ </div>
34
+ );
35
+ bodyIndex = bodyIndex + columnSize;
36
+ }
37
+ });
38
+
39
+ body = bodyList;
40
+ } else if (typeof columnsCount === 'number' && columnsCount > 1) {
41
+ let weight = 12 / (columnsCount as number);
42
+ let cellClassName = `Grid-col--sm${
43
+ weight === Math.round(weight) ? weight : ''
44
+ }`;
45
+ body = chunk(body, columnsCount).map((group, groupIndex) => (
46
+ <div className={cx('Grid')} key={groupIndex}>
47
+ {Array.from({length: columnsCount as number}).map((_, index) => (
48
+ <div key={index} className={cx(cellClassName)}>
49
+ {group[index]}
50
+ </div>
51
+ ))}
52
+ </div>
53
+ ));
54
+ }
55
+
56
+ return body;
57
+ }
@@ -182,6 +182,7 @@ const AMISDebug = observer(({store}: {store: AMISDebugStore}) => {
182
182
  >
183
183
  <div
184
184
  className="AMISDebug-toggle"
185
+ title="open debug"
185
186
  onClick={() => {
186
187
  store.isExpanded = true;
187
188
  }}
@@ -284,24 +285,6 @@ const AMISDebug = observer(({store}: {store: AMISDebugStore}) => {
284
285
  );
285
286
  });
286
287
 
287
- export let enableAMISDebug = false;
288
-
289
- // 开启 debug 有两种方法,一个是设置 enableAMISDebug 全局变量,另一个是通过 amisDebug=1 query
290
- if (
291
- (window as any).enableAMISDebug ||
292
- location.search.indexOf('amisDebug=1') !== -1
293
- ) {
294
- enableAMISDebug = true;
295
- // 页面只有一个
296
- if (!(window as any).amisDebugElement) {
297
- const amisDebugElement = document.createElement('div');
298
- document.body.appendChild(amisDebugElement);
299
- const element = <AMISDebug store={store} />;
300
- render(element, amisDebugElement);
301
- (window as any).amisDebugElement = true;
302
- }
303
- }
304
-
305
288
  /**
306
289
  * 鼠标移动到某个组件的效果
307
290
  */
@@ -365,7 +348,20 @@ autorun(() => {
365
348
  }
366
349
  });
367
350
 
368
- if (enableAMISDebug) {
351
+ // 页面中只能有一个实例
352
+ let isEnabled = false;
353
+
354
+ export function enableDebug() {
355
+ if (isEnabled) {
356
+ return;
357
+ }
358
+ isEnabled = true;
359
+
360
+ const amisDebugElement = document.createElement('div');
361
+ document.body.appendChild(amisDebugElement);
362
+ const element = <AMISDebug store={store} />;
363
+ render(element, amisDebugElement);
364
+
369
365
  document.body.appendChild(amisHoverBox);
370
366
  document.body.appendChild(amisActiveBox);
371
367
  document.addEventListener('mousemove', handleMouseMove);
@@ -378,9 +374,6 @@ interface DebugWrapperProps {
378
374
 
379
375
  export class DebugWrapper extends Component<DebugWrapperProps> {
380
376
  componentDidMount() {
381
- if (!enableAMISDebug) {
382
- return;
383
- }
384
377
  const root = findDOMNode(this) as HTMLElement;
385
378
  if (!root) {
386
379
  return;
@@ -407,7 +400,7 @@ type Category = 'api' | 'event';
407
400
  * @param ext 扩展信息
408
401
  */
409
402
  export function debug(cat: Category, msg: string, ext?: object) {
410
- if (!enableAMISDebug) {
403
+ if (!isEnabled) {
411
404
  return;
412
405
  }
413
406
  const log = {
@@ -426,7 +419,7 @@ export function debug(cat: Category, msg: string, ext?: object) {
426
419
  * @param ext 扩展信息
427
420
  */
428
421
  export function warning(cat: Category, msg: string, ext?: object) {
429
- if (!enableAMISDebug) {
422
+ if (!isEnabled) {
430
423
  return;
431
424
  }
432
425
  store.logs.push({