iglooform 3.7.8 → 3.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 (80) hide show
  1. package/.dumi/tmp/core/defineApp.ts +1 -1
  2. package/.dumi/tmp/core/helmet.ts +1 -1
  3. package/.dumi/tmp/core/history.ts +1 -1
  4. package/.dumi/tmp/core/historyIntelli.ts +1 -1
  5. package/.dumi/tmp/core/plugin.ts +2 -2
  6. package/.dumi/tmp/core/polyfill.ts +197 -197
  7. package/.dumi/tmp/core/route.tsx +33 -33
  8. package/.dumi/tmp/dumi/exports.ts +1 -1
  9. package/.dumi/tmp/dumi/locales/runtime.tsx +2 -2
  10. package/.dumi/tmp/dumi/meta/index.ts +33 -33
  11. package/.dumi/tmp/dumi/meta/runtime.ts +1 -1
  12. package/.dumi/tmp/dumi/theme/ContextWrapper.tsx +2 -2
  13. package/.dumi/tmp/dumi/theme/builtins/API.ts +1 -1
  14. package/.dumi/tmp/dumi/theme/builtins/Badge.ts +1 -1
  15. package/.dumi/tmp/dumi/theme/builtins/Container.ts +1 -1
  16. package/.dumi/tmp/dumi/theme/builtins/Previewer.ts +1 -1
  17. package/.dumi/tmp/dumi/theme/builtins/SourceCode.ts +1 -1
  18. package/.dumi/tmp/dumi/theme/builtins/Table.ts +1 -1
  19. package/.dumi/tmp/dumi/theme/builtins/Tree.ts +1 -1
  20. package/.dumi/tmp/dumi/theme/layouts/DocLayout.ts +1 -1
  21. package/.dumi/tmp/dumi/theme/loading.tsx +1 -1
  22. package/.dumi/tmp/dumi/theme/slots/ColorSwitch.ts +1 -1
  23. package/.dumi/tmp/dumi/theme/slots/Content.ts +1 -1
  24. package/.dumi/tmp/dumi/theme/slots/ContentFooter.ts +1 -1
  25. package/.dumi/tmp/dumi/theme/slots/ContentTabs.ts +1 -1
  26. package/.dumi/tmp/dumi/theme/slots/Features.ts +1 -1
  27. package/.dumi/tmp/dumi/theme/slots/Footer.ts +1 -1
  28. package/.dumi/tmp/dumi/theme/slots/Header.ts +1 -1
  29. package/.dumi/tmp/dumi/theme/slots/HeaderExtra.ts +1 -1
  30. package/.dumi/tmp/dumi/theme/slots/Hero.ts +1 -1
  31. package/.dumi/tmp/dumi/theme/slots/HeroTitle.ts +1 -1
  32. package/.dumi/tmp/dumi/theme/slots/LangSwitch.ts +1 -1
  33. package/.dumi/tmp/dumi/theme/slots/Logo.ts +1 -1
  34. package/.dumi/tmp/dumi/theme/slots/Navbar.ts +1 -1
  35. package/.dumi/tmp/dumi/theme/slots/NavbarExtra.ts +1 -1
  36. package/.dumi/tmp/dumi/theme/slots/NotFound.ts +1 -1
  37. package/.dumi/tmp/dumi/theme/slots/PreviewerActions.ts +1 -1
  38. package/.dumi/tmp/dumi/theme/slots/PreviewerActionsExtra.ts +1 -1
  39. package/.dumi/tmp/dumi/theme/slots/RtlSwitch.ts +1 -1
  40. package/.dumi/tmp/dumi/theme/slots/SearchBar.ts +2 -2
  41. package/.dumi/tmp/dumi/theme/slots/SearchResult.ts +1 -1
  42. package/.dumi/tmp/dumi/theme/slots/Sidebar.ts +1 -1
  43. package/.dumi/tmp/dumi/theme/slots/SocialIcon.ts +1 -1
  44. package/.dumi/tmp/dumi/theme/slots/Toc.ts +1 -1
  45. package/.dumi/tmp/exports.ts +5 -5
  46. package/.dumi/tmp/testBrowser.tsx +3 -3
  47. package/.dumi/tmp/umi.ts +4 -4
  48. package/es/form/element/index.d.ts +12 -0
  49. package/es/form/element/index.js +6 -3
  50. package/es/form/element/style/index.less +4 -0
  51. package/es/free-form/element/index.d.ts +11 -0
  52. package/es/free-form/element/index.js +6 -3
  53. package/es/free-form/element/style/index.less +7 -3
  54. package/es/media/index.js +62 -30
  55. package/es/media/preview.d.ts +1 -0
  56. package/es/media/preview.js +118 -35
  57. package/es/media/style/index.less +6 -11
  58. package/es/types.d.ts +190 -0
  59. package/es/upload-preview/index.d.ts +9 -0
  60. package/es/utils/form-utils.d.ts +79 -0
  61. package/lib/form/element/index.d.ts +12 -0
  62. package/lib/form/element/index.js +6 -3
  63. package/lib/form/element/style/index.less +4 -0
  64. package/lib/free-form/element/index.d.ts +11 -0
  65. package/lib/free-form/element/index.js +6 -3
  66. package/lib/free-form/element/style/index.less +7 -3
  67. package/lib/media/index.js +61 -29
  68. package/lib/media/preview.d.ts +1 -0
  69. package/lib/media/preview.js +117 -34
  70. package/lib/media/style/index.less +6 -11
  71. package/lib/types.d.ts +190 -0
  72. package/lib/upload-preview/index.d.ts +9 -0
  73. package/lib/utils/form-utils.d.ts +79 -0
  74. package/package.json +1 -1
  75. package/es/currency-context/index.d.ts +0 -8
  76. package/es/media/index.d.ts +0 -30
  77. package/es/media/media.d.ts +0 -14
  78. package/lib/currency-context/index.d.ts +0 -8
  79. package/lib/media/index.d.ts +0 -30
  80. package/lib/media/media.d.ts +0 -14
package/es/types.d.ts ADDED
@@ -0,0 +1,190 @@
1
+ /// <reference path="../typings.d.ts" />
2
+ import { BlinkIdSingleSideRecognizerResult } from '@microblink/blinkid-in-browser-sdk';
3
+ import { FormItemProps, FormInstance } from 'antd/es/form';
4
+ import { ReactNode } from 'react';
5
+ import { NamePath } from 'rc-field-form/lib/interface';
6
+ import { CheckboxOptionType } from 'antd/es/checkbox';
7
+ import { SelectProps } from 'antd/es/select';
8
+ export { Rule } from 'rc-field-form/lib/interface';
9
+ export interface OCRHooks {
10
+ microBlink?: {
11
+ initResult: {
12
+ error?: string;
13
+ failed: boolean;
14
+ };
15
+ recognize: ((file: File) => Promise<BlinkIdSingleSideRecognizerResult | null>) | null;
16
+ loading?: boolean;
17
+ };
18
+ }
19
+ export interface OCRConfig {
20
+ microBlink?: {
21
+ licenseKey: string;
22
+ };
23
+ }
24
+ export type FormItemName = NamePath;
25
+ export interface FormBasicConfig {
26
+ config: FormItemConfig;
27
+ className?: string;
28
+ style?: Object;
29
+ locales?: {
30
+ cancelText?: string;
31
+ submitText?: string;
32
+ previewText?: string;
33
+ nextText?: string;
34
+ continueText?: string;
35
+ validateMessages?: Object;
36
+ };
37
+ initialValues?: any;
38
+ form?: FormInstance;
39
+ onCancel?(): void;
40
+ onSubmit?(values: Object, allValues?: Object): any;
41
+ requiredMark?: boolean;
42
+ showSubmitButton?: boolean;
43
+ getScrollContainer?: () => HTMLElement | null;
44
+ onFirstModified?: () => any;
45
+ uploadApi?: string;
46
+ selectDatasourceApi?: string;
47
+ validationRule?: string;
48
+ getRuleValidationApi?: string;
49
+ stepDirection?: 'vertical' | 'horizontal';
50
+ customizeComponents?: {
51
+ [name: string]: FC;
52
+ };
53
+ ocr?: OCRConfig;
54
+ validationCodeExtraParams?: Record<string, any>;
55
+ onValuesChange?: (changedValues: any, values: any) => void;
56
+ }
57
+ export type FormItemAssert = {
58
+ field: NamePath;
59
+ value?: any;
60
+ operation?: 'eq' | 'ne' | 'in' | 'ni' | 'lt' | 'le' | 'gt' | 'ge' | 'co' | 'nc' | 'filled' | 'unfilled' | 'co-some' | 'co-every' | 'some-in' | 'every-in';
61
+ };
62
+ export type FormItemCopyValue = {
63
+ assert: FormItemAssert;
64
+ copyFrom: NamePath;
65
+ disabled?: boolean;
66
+ };
67
+ export type FormItemSelectValue = {
68
+ assert: FormItemAssert;
69
+ value: any;
70
+ disabled?: boolean;
71
+ };
72
+ export interface FormItemExtraConfig extends FormItemProps {
73
+ labelTooltip?: string;
74
+ elements?: FormItemConfig[];
75
+ required?: boolean;
76
+ requiredAsserts?: FormItemAssert[];
77
+ extraLabel?: any;
78
+ xl?: number;
79
+ md?: number;
80
+ xs?: number;
81
+ span?: number;
82
+ areaCode?: number | string | (number | string)[];
83
+ phoneNumber?: number | string;
84
+ mergeRules?: boolean;
85
+ dependencies?: NamePath[];
86
+ antdDependencies?: NamePath[];
87
+ asserts?: FormItemAssert[];
88
+ shouldRender?: (form?: FormInstance) => boolean;
89
+ ignore?: boolean;
90
+ copyValue?: FormItemCopyValue;
91
+ selectValue?: FormItemSelectValue[];
92
+ disabled?: boolean | FormItemAssert | FormItemAssert[];
93
+ halfRow?: boolean;
94
+ fullRow?: boolean;
95
+ limit?: number;
96
+ hideWhenPreview?: boolean;
97
+ hideWhenEdit?: boolean;
98
+ showExtraWhenPreview?: boolean;
99
+ requiredMessage?: string | ReactNode;
100
+ showOptional?: boolean;
101
+ previewFormater?(value: any, form?: FormInstance): any;
102
+ handleNext?(values: any): any;
103
+ render?(preview: boolean, form?: FormInstance, value?: any, onChange?: (params: any) => any, setShowStepButton?: IglooComponentProps['setShowStepButton']): any;
104
+ locales?: {
105
+ [key: string]: string;
106
+ };
107
+ options?: (CheckboxOptionType & {
108
+ extraInfo?: {
109
+ content: any;
110
+ shownTrigger: 'unchecked' | 'checked' | 'all';
111
+ };
112
+ })[] | SelectProps['options'];
113
+ sendOtp?: (value: any) => any;
114
+ dependField?: FormItemName;
115
+ countDownSeconds?: number;
116
+ getButtonDisabledState?: (form: FormInstance) => boolean;
117
+ getPreviousDisabledState?: (form: FormInstance) => boolean;
118
+ handleUpload?(file: File): PromiseLike<string>;
119
+ withoutForm?: boolean;
120
+ disableEditButton?: boolean;
121
+ hidePreviewDivider?: boolean;
122
+ valueFormater?: (value: any) => any;
123
+ currentStep?: number;
124
+ subscribedFields?: FormItemName[];
125
+ description?: string | React.ReactNode;
126
+ dateLimitationType?: 'relative' | 'absolute';
127
+ absoluteRangeStart?: number;
128
+ absoluteRangeEnd?: number;
129
+ relativeRangeStart?: {
130
+ type: 'day' | 'month' | 'year';
131
+ quantity: number;
132
+ pattern?: string;
133
+ dependField?: NamePath;
134
+ };
135
+ relativeRangeEnd?: {
136
+ type: 'day' | 'month' | 'year';
137
+ quantity: number;
138
+ pattern?: string;
139
+ dependField?: NamePath;
140
+ };
141
+ validationCode?: {
142
+ code: string;
143
+ errorMessage: string;
144
+ warningOnly?: boolean;
145
+ }[];
146
+ length?: number;
147
+ minLength?: number;
148
+ maxLength?: number;
149
+ idType?: 'KTP' | 'NIK';
150
+ validationRule?: string;
151
+ shouldRenderCode?: string;
152
+ disabledCode?: string;
153
+ automaticCalcCode?: string;
154
+ enableAutomaticCalc?: boolean;
155
+ [key: string]: any;
156
+ }
157
+ export interface FormItemConfig extends FormItemExtraConfig {
158
+ type?: string;
159
+ name?: NamePath;
160
+ label?: string | React.ReactNode;
161
+ previewLabel?: string | React.ReactNode;
162
+ labelProps?: any;
163
+ contentProps?: any;
164
+ ocr?: {
165
+ vender: string;
166
+ outputMap: {
167
+ field: string[];
168
+ source: string[];
169
+ }[];
170
+ };
171
+ }
172
+ export type FormItemPropsHandler = (config: FormItemConfig) => FormItemConfig;
173
+ export interface FC<P = {}> extends React.FunctionComponent<P> {
174
+ formItemPropsHandler?: FormItemPropsHandler;
175
+ isPreviewSupport?: boolean;
176
+ }
177
+ export interface Form extends React.ForwardRefExoticComponent<FormBasicConfig & React.RefAttributes<any>> {
178
+ useForm: () => FormInstance;
179
+ }
180
+ export interface IglooComponentProps {
181
+ validateField?: (nameList?: NamePath[]) => Promise<any>;
182
+ containerRef?: React.RefObject<any>;
183
+ setFieldError?(errorMsg?: string): void;
184
+ setFieldValue?(value?: any): void;
185
+ setShowStepButton?: (showButton: boolean) => void;
186
+ getFormInstance?: () => FormInstance;
187
+ locales?: {
188
+ [key: string]: string;
189
+ };
190
+ }
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import './style';
3
+ interface Props {
4
+ files: string[];
5
+ label?: any;
6
+ description?: any;
7
+ }
8
+ declare const UploadPreview: FC<Props>;
9
+ export default UploadPreview;
@@ -0,0 +1,79 @@
1
+ import React from 'react';
2
+ import { FormInstance } from 'antd/es/form';
3
+ import { FormItemConfig, FormItemExtraConfig, FormItemName, FormItemCopyValue, FormItemSelectValue, FormItemAssert, Rule } from '../types';
4
+ import { NamePath } from 'antd/es/form/interface';
5
+ export declare const calcNamePath: (parentName: FormItemName | undefined, name: FormItemName | undefined) => any[];
6
+ export declare const testAssert: (form: FormInstance, assert: FormItemAssert) => boolean;
7
+ export declare const calcFormItemProps: (config: FormItemConfig, extraProps: FormItemExtraConfig, form?: FormInstance, parentName?: FormItemName, validationCodeExtraParams?: Record<string, any>) => {
8
+ colProps: {
9
+ span: number;
10
+ xs: number;
11
+ sm: number;
12
+ md: number;
13
+ halfRow: boolean | undefined;
14
+ };
15
+ formItemProps: {
16
+ name: any[];
17
+ className: string | undefined;
18
+ initialValue: any;
19
+ copiedValue: {
20
+ copied: boolean;
21
+ value?: undefined;
22
+ disabled?: undefined;
23
+ } | {
24
+ copied: boolean;
25
+ value: any;
26
+ disabled: boolean | undefined;
27
+ };
28
+ selectedValue: {
29
+ selected: boolean;
30
+ value?: undefined;
31
+ disabled?: undefined;
32
+ } | {
33
+ selected: boolean;
34
+ value: any;
35
+ disabled: boolean | undefined;
36
+ };
37
+ normalize: ((value: any, prevValue: any, allValues: import("rc-field-form/lib/interface").Store) => any) | undefined;
38
+ rules: Rule[];
39
+ validateTrigger: any[];
40
+ label: import("react/jsx-runtime").JSX.Element | null;
41
+ getValueFromEvent: ((...args: import("rc-field-form/lib/interface").EventArgs) => any) | undefined;
42
+ getValueProps: ((value: any) => Record<string, unknown>) | undefined;
43
+ extra: false | "" | 0 | import("react/jsx-runtime").JSX.Element | null | undefined;
44
+ help: React.ReactNode;
45
+ valuePropName: string | undefined;
46
+ messageVariables: {
47
+ label: string;
48
+ };
49
+ dependencies: any[] | undefined;
50
+ };
51
+ elementProps: {
52
+ [key: string]: any;
53
+ };
54
+ display: any;
55
+ previewFormater: ((value: any, form?: FormInstance<any> | undefined) => any) | undefined;
56
+ };
57
+ export declare const calcDisabled: (disabled?: boolean | FormItemAssert | FormItemAssert[], form?: FormInstance, disabledCode?: string, name?: FormItemName, parentName?: FormItemName) => any;
58
+ export declare const calcCopyValue: (copyValue?: FormItemCopyValue, form?: FormInstance) => {
59
+ copied: boolean;
60
+ value?: undefined;
61
+ disabled?: undefined;
62
+ } | {
63
+ copied: boolean;
64
+ value: any;
65
+ disabled: boolean | undefined;
66
+ };
67
+ export declare const calcSelectValue: (selectValue?: FormItemSelectValue[], form?: FormInstance) => {
68
+ selected: boolean;
69
+ value?: undefined;
70
+ disabled?: undefined;
71
+ } | {
72
+ selected: boolean;
73
+ value: any;
74
+ disabled: boolean | undefined;
75
+ };
76
+ export declare const calcShouldRender: (name: NamePath, parentName: NamePath, dependencies?: NamePath[], asserts?: FormItemAssert[], shouldRender?: ((form?: FormInstance) => boolean) | undefined, shouldRenderCode?: string, form?: FormInstance) => any;
77
+ export declare const automaticCalculate: (name: NamePath, parentName: NamePath, automaticCalcCode?: string, form?: FormInstance) => void;
78
+ export declare const getRuleValidation: (url: string, rule: string | string[], values?: any, lang?: string) => Promise<any>;
79
+ export declare const calcAddableSectionAssertField: (name: any[], field: FormItemAssert['field'], index: number, elements: FormItemConfig[] | React.ReactElement[]) => any;
@@ -0,0 +1,12 @@
1
+ import { FC } from 'react';
2
+ import { FormItemConfig, FormItemName } from '../../types';
3
+ import './style';
4
+ interface ElementProps {
5
+ config: FormItemConfig;
6
+ parentName?: FormItemName;
7
+ preview?: boolean;
8
+ disabled?: boolean;
9
+ setShowStepButton?: (showButton: boolean) => void;
10
+ }
11
+ declare const Element: FC<ElementProps>;
12
+ export default Element;
@@ -270,7 +270,7 @@ var Element = function Element(_ref) {
270
270
  'igloo-element-preview-hide': config.hideWhenPreview,
271
271
  'igloo-element-preview-hide-divider': config.hidePreviewDivider
272
272
  }),
273
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Form.Item, _objectSpread(_objectSpread({}, (0, _omit.default)(formItemProps, ['copiedValue', 'selectedValue'])), {}, {
273
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Form.Item, _objectSpread(_objectSpread({}, (0, _omit.default)(formItemProps, ['copiedValue', 'selectedValue'])), {}, {
274
274
  labelCol: {
275
275
  span: 24
276
276
  },
@@ -278,7 +278,7 @@ var Element = function Element(_ref) {
278
278
  span: 24
279
279
  },
280
280
  label: null,
281
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Row, {
281
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Row, {
282
282
  className: "igloo-element-preview-item",
283
283
  gutter: {
284
284
  md: 32,
@@ -317,7 +317,10 @@ var Element = function Element(_ref) {
317
317
  children: renderPreviewValue()
318
318
  })]
319
319
  })]
320
- })
320
+ }), config.showExtraWhenPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
321
+ className: "igloo-element-preview-extra",
322
+ children: formItemProps.extra
323
+ })]
321
324
  }))
322
325
  });
323
326
  }
@@ -32,6 +32,10 @@
32
32
  }
33
33
  }
34
34
 
35
+ .igloo-element-preview-extra {
36
+ margin-top: 6px;
37
+ }
38
+
35
39
  .ant-form-item-explain-error {
36
40
  margin-top: 0;
37
41
  margin-left: 50%;
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+ import { FormItemConfig, FormItemName } from '../../types';
3
+ import './style';
4
+ interface ElementProps extends FormItemConfig {
5
+ parentName?: FormItemName;
6
+ preview?: boolean;
7
+ setShowStepButton?: (showButton: boolean) => void;
8
+ disabledFromParent?: boolean;
9
+ }
10
+ declare const Element: FC<ElementProps>;
11
+ export default Element;
@@ -205,7 +205,7 @@ var Element = function Element(props) {
205
205
  'igloo-freeform-element-preview-hide': props.hideWhenPreview,
206
206
  'igloo-freeform-element-preview-hide-divider': props.hidePreviewDivider
207
207
  }),
208
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Form.Item, _objectSpread(_objectSpread({}, (0, _omit.default)(formItemProps, ['copiedValue', 'selectedValue'])), {}, {
208
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Form.Item, _objectSpread(_objectSpread({}, (0, _omit.default)(formItemProps, ['copiedValue', 'selectedValue'])), {}, {
209
209
  labelCol: {
210
210
  span: 24
211
211
  },
@@ -213,7 +213,7 @@ var Element = function Element(props) {
213
213
  span: 24
214
214
  },
215
215
  label: null,
216
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Row, {
216
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Row, {
217
217
  className: "igloo-freeform-element-preview-item",
218
218
  gutter: {
219
219
  md: 32,
@@ -252,7 +252,10 @@ var Element = function Element(props) {
252
252
  children: previewFormater ? previewFormater(value, form) : _typeof(value) === 'object' ? JSON.stringify(value) : value
253
253
  })]
254
254
  })]
255
- })
255
+ }), rest.showExtraWhenPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
256
+ className: "igloo-freeform-element-preview-extra",
257
+ children: formItemProps.extra
258
+ })]
256
259
  }))
257
260
  });
258
261
  }
@@ -11,12 +11,12 @@
11
11
 
12
12
  .igloo-freeform-element-preview-item {
13
13
  .igloo-freeform-element-preview-label {
14
- color: @icon-color;
14
+ color: @icon-color;
15
15
  line-height: 24px;
16
16
  }
17
17
 
18
18
  .igloo-freeform-element-preview-value {
19
- color: @text-color;
19
+ color: @text-color;
20
20
  white-space: pre-wrap;
21
21
  word-break: break-word;
22
22
  line-height: 24px;
@@ -32,6 +32,10 @@
32
32
  }
33
33
  }
34
34
 
35
+ .igloo-freeform-element-preview-extra {
36
+ margin-top: 6px;
37
+ }
38
+
35
39
  .ant-form-item-explain-error {
36
40
  margin-top: 0;
37
41
  margin-left: calc(~'50%' + 16px);
@@ -95,7 +99,7 @@
95
99
  width: 100%;
96
100
 
97
101
  .igloo-freeform-label-text {
98
- color: @icon-color;
102
+ color: @icon-color;
99
103
  font-size: 16px;
100
104
  line-height: 24px;
101
105
 
@@ -29,6 +29,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
29
29
  function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
30
30
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
31
31
  var MediaWithPreview = function MediaWithPreview(_ref) {
32
+ var _list$current;
32
33
  var srcProp = _ref.src,
33
34
  name = _ref.name,
34
35
  className = _ref.className,
@@ -83,6 +84,10 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
83
84
  _useState14 = _slicedToArray(_useState13, 2),
84
85
  direction = _useState14[0],
85
86
  setDirection = _useState14[1];
87
+ var _useState15 = (0, _react.useState)(0),
88
+ _useState16 = _slicedToArray(_useState15, 2),
89
+ rotation = _useState16[0],
90
+ setRotation = _useState16[1];
86
91
  (0, _react.useEffect)(function () {
87
92
  setType(type);
88
93
  }, [type]);
@@ -192,6 +197,9 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
192
197
  var close = function close() {
193
198
  setShowModal(false);
194
199
  setCurrent(index);
200
+ setScale(1);
201
+ setRotation(0);
202
+ setDirection('');
195
203
  };
196
204
  var toLeft = function toLeft() {
197
205
  setCurrent(function (current) {
@@ -205,6 +213,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
205
213
  return next;
206
214
  });
207
215
  setScale(1);
216
+ setRotation(0);
208
217
  setDirection('left');
209
218
  };
210
219
  var toRight = function toRight() {
@@ -219,6 +228,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
219
228
  return next;
220
229
  });
221
230
  setScale(1);
231
+ setRotation(0);
222
232
  setDirection('right');
223
233
  };
224
234
  var zoomIn = function zoomIn(e) {
@@ -229,6 +239,12 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
229
239
  e.preventDefault();
230
240
  setScale(scale + 0.2);
231
241
  };
242
+ var rotate = function rotate(e) {
243
+ e.preventDefault();
244
+ setRotation(function (rotation) {
245
+ return (rotation + 270) % 360;
246
+ });
247
+ };
232
248
  var onDownloadClick = /*#__PURE__*/function () {
233
249
  var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(downloadUrl) {
234
250
  var filename, actionType, res, blob, url;
@@ -379,6 +395,8 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
379
395
  return index === current - 1;
380
396
  }
381
397
  };
398
+ var currentPreviewType = (list === null || list === void 0 ? void 0 : list.length) > 0 ? (_list$current = list[current]) === null || _list$current === void 0 ? void 0 : _list$current.type : mediaType;
399
+ var canRotate = currentPreviewType === 'image';
382
400
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
383
401
  className: className,
384
402
  style: style,
@@ -444,6 +462,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
444
462
  type: type,
445
463
  src: src,
446
464
  scale: scale,
465
+ rotation: rotation,
447
466
  isCurrent: index === current
448
467
  })
449
468
  }, index);
@@ -453,38 +472,51 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
453
472
  type: mediaType,
454
473
  src: src,
455
474
  scale: scale,
475
+ rotation: rotation,
456
476
  isCurrent: true,
457
477
  showAllPages: showAllPages
458
478
  })
459
- }, index), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.MinusOutlined, {
460
- onClick: zoomIn,
461
- className: (0, _classnames.default)({
462
- 'igloo-preview-action-btn': true,
463
- 'igloo-preview-zoom-in': true,
464
- 'igloo-preview-disabled': scale <= 0.5
465
- }),
466
- style: {
467
- fontSize: 24
468
- }
469
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.PlusOutlined, {
470
- onClick: zoomOut,
471
- className: (0, _classnames.default)({
472
- 'igloo-preview-action-btn': true,
473
- 'igloo-preview-zoom-out': true,
474
- 'igloo-preview-disabled': scale >= 2
475
- }),
476
- style: {
477
- fontSize: 24
478
- }
479
- }), download && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.DownloadOutlined, {
480
- onClick: onDownloadByModal,
481
- className: (0, _classnames.default)({
482
- 'igloo-preview-action-btn': true,
483
- 'igloo-preview-download-btn': true
484
- }),
485
- style: {
486
- fontSize: 24
487
- }
479
+ }, index), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
480
+ className: "igloo-preview-actions",
481
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.MinusOutlined, {
482
+ onClick: zoomIn,
483
+ className: (0, _classnames.default)({
484
+ 'igloo-preview-action-btn': true,
485
+ 'igloo-preview-zoom-in': true,
486
+ 'igloo-preview-disabled': scale <= 0.5
487
+ }),
488
+ style: {
489
+ fontSize: 24
490
+ }
491
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.PlusOutlined, {
492
+ onClick: zoomOut,
493
+ className: (0, _classnames.default)({
494
+ 'igloo-preview-action-btn': true,
495
+ 'igloo-preview-zoom-out': true,
496
+ 'igloo-preview-disabled': scale >= 2
497
+ }),
498
+ style: {
499
+ fontSize: 24
500
+ }
501
+ }), canRotate && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.RefreshOutlined, {
502
+ onClick: rotate,
503
+ className: (0, _classnames.default)({
504
+ 'igloo-preview-action-btn': true,
505
+ 'igloo-preview-rotate-btn': true
506
+ }),
507
+ style: {
508
+ fontSize: 24
509
+ }
510
+ }), download && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.DownloadOutlined, {
511
+ onClick: onDownloadByModal,
512
+ className: (0, _classnames.default)({
513
+ 'igloo-preview-action-btn': true,
514
+ 'igloo-preview-download-btn': true
515
+ }),
516
+ style: {
517
+ fontSize: 24
518
+ }
519
+ })]
488
520
  }), (list.length > 2 || list.length === 2 && current === 1) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.ArrowLeftOutlined, {
489
521
  className: "igloo-media-page-btn",
490
522
  style: {
@@ -3,6 +3,7 @@ interface MediaProps {
3
3
  src: string;
4
4
  type: string;
5
5
  scale?: number;
6
+ rotation?: number;
6
7
  isCurrent?: boolean;
7
8
  className?: any;
8
9
  style?: CSSProperties;