@topthink/components 1.0.58 → 1.0.59

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 (103) hide show
  1. package/es/{editor-widget-ebec8493.js → editor-widget-CQ3zv-Xu.js} +0 -1
  2. package/es/{image-zoom-912e2b3b.js → image-zoom-OrIPGqh0.js} +0 -1
  3. package/es/index-PGfJO0Bp.js +39 -0
  4. package/es/index-PvFKqXZL.js +1 -0
  5. package/es/{index-563b11c6.js → index-XkUorbN_.js} +13 -14
  6. package/es/index.js +1 -2
  7. package/es/{steps-afba29a7.js → steps-b_BcYIwk.js} +1 -2
  8. package/package.json +15 -15
  9. package/types/components/button.d.ts +9 -9
  10. package/types/components/card.d.ts +7 -7
  11. package/types/components/dimmer.d.ts +7 -7
  12. package/types/components/error.d.ts +5 -5
  13. package/types/components/form.d.ts +4 -4
  14. package/types/components/image-zoom.d.ts +4 -4
  15. package/types/components/lazy/form/index.d.ts +19 -19
  16. package/types/components/lazy/form/widgets/editor-widget.d.ts +6 -5
  17. package/types/components/lazy/image-zoom.d.ts +3 -3
  18. package/types/components/lazy/steps.d.ts +9 -9
  19. package/types/components/lazy/table/context.d.ts +2 -2
  20. package/types/components/lazy/table/index.d.ts +45 -45
  21. package/types/components/lazy/table/search.d.ts +23 -23
  22. package/types/components/lazy/table/use-selection.d.ts +3 -3
  23. package/types/components/loader.d.ts +9 -9
  24. package/types/components/loading-button.d.ts +7 -7
  25. package/types/components/modal/confirm.d.ts +8 -8
  26. package/types/components/modal/index.d.ts +32 -32
  27. package/types/components/modal/message.d.ts +26 -26
  28. package/types/components/modal/show.d.ts +3 -3
  29. package/types/components/modal-button.d.ts +17 -17
  30. package/types/components/modal-form.d.ts +10 -10
  31. package/types/components/number-format.d.ts +10 -10
  32. package/types/components/pagination.d.ts +11 -11
  33. package/types/components/request-button.d.ts +13 -13
  34. package/types/components/result.d.ts +15 -15
  35. package/types/components/space.d.ts +9 -9
  36. package/types/components/statistic.d.ts +7 -7
  37. package/types/components/steps.d.ts +10 -10
  38. package/types/components/table.d.ts +4 -4
  39. package/types/components/tooltip.d.ts +9 -9
  40. package/types/hooks/use-callback-ref.d.ts +2 -2
  41. package/types/hooks/use-controllable-state.d.ts +8 -8
  42. package/types/hooks/use-debounce.d.ts +2 -2
  43. package/types/hooks/use-overlay-state.d.ts +16 -16
  44. package/types/hooks/use-request.d.ts +21 -21
  45. package/types/hooks/use-safe-state.d.ts +4 -4
  46. package/types/hooks/use-state-with-callback.d.ts +2 -2
  47. package/types/hooks/use-unmounted-ref.d.ts +3 -3
  48. package/types/index.d.ts +33 -33
  49. package/types/request.d.ts +32 -32
  50. package/types/utils/is-record.d.ts +1 -1
  51. package/types/utils/message.d.ts +11 -11
  52. package/types/utils/toast.d.ts +11 -11
  53. package/types/utils/types.d.ts +7 -7
  54. package/types/utils/wait-pay-complete.d.ts +11 -11
  55. package/es/editor-widget-ebec8493.js.map +0 -1
  56. package/es/form-01bf45e9.js +0 -233
  57. package/es/form-01bf45e9.js.map +0 -1
  58. package/es/form-0a372a24.js +0 -2
  59. package/es/form-0a372a24.js.map +0 -1
  60. package/es/form-1791ea39.js +0 -236
  61. package/es/form-1791ea39.js.map +0 -1
  62. package/es/form-74ef0417.js +0 -2
  63. package/es/form-74ef0417.js.map +0 -1
  64. package/es/form-8925a750.js +0 -231
  65. package/es/form-8925a750.js.map +0 -1
  66. package/es/form-95db7eac.js +0 -2
  67. package/es/form-95db7eac.js.map +0 -1
  68. package/es/form-9c0e638a.js +0 -231
  69. package/es/form-9c0e638a.js.map +0 -1
  70. package/es/image-zoom-912e2b3b.js.map +0 -1
  71. package/es/index-1930b692.js +0 -67
  72. package/es/index-1930b692.js.map +0 -1
  73. package/es/index-1d379f3a.js +0 -562
  74. package/es/index-1d379f3a.js.map +0 -1
  75. package/es/index-2b97b70d.js +0 -2
  76. package/es/index-2b97b70d.js.map +0 -1
  77. package/es/index-303e1845.js +0 -560
  78. package/es/index-303e1845.js.map +0 -1
  79. package/es/index-4f51cece.js +0 -1352
  80. package/es/index-4f51cece.js.map +0 -1
  81. package/es/index-5142110c.js +0 -67
  82. package/es/index-5142110c.js.map +0 -1
  83. package/es/index-563b11c6.js.map +0 -1
  84. package/es/index-6ae8237d.js +0 -67
  85. package/es/index-6ae8237d.js.map +0 -1
  86. package/es/index-7a7c06a9.js +0 -40
  87. package/es/index-7a7c06a9.js.map +0 -1
  88. package/es/index-9869b1c6.js +0 -1350
  89. package/es/index-9869b1c6.js.map +0 -1
  90. package/es/index-a214613e.js +0 -40
  91. package/es/index-a214613e.js.map +0 -1
  92. package/es/index-a48179db.js +0 -1382
  93. package/es/index-a48179db.js.map +0 -1
  94. package/es/index-b34ecf90.js +0 -40
  95. package/es/index-b34ecf90.js.map +0 -1
  96. package/es/index-d964165a.js +0 -560
  97. package/es/index-d964165a.js.map +0 -1
  98. package/es/index-e17dc6f0.js +0 -40
  99. package/es/index-e17dc6f0.js.map +0 -1
  100. package/es/index.js.map +0 -1
  101. package/es/steps-afba29a7.js.map +0 -1
  102. package/es/steps-c27a3885.js +0 -34
  103. package/es/steps-c27a3885.js.map +0 -1
package/types/index.d.ts CHANGED
@@ -1,33 +1,33 @@
1
- export { default as Message } from './utils/message';
2
- export { default as waitPayComplete } from './utils/wait-pay-complete';
3
- export { default as Toast } from './utils/toast';
4
- export { PaginationType } from './utils/types';
5
- export { default as isRecord } from './utils/is-record';
6
- export { default as Result } from './components/result';
7
- export { default as Loader } from './components/loader';
8
- export { default as Card } from './components/card';
9
- export { default as Error } from './components/error';
10
- export { default as Space } from './components/space';
11
- export { default as Steps, Step } from './components/steps';
12
- export { default as Statistic } from './components/statistic';
13
- export { default as Pagination } from './components/pagination';
14
- export { default as NumberFormat } from './components/number-format';
15
- export { default as LoadingButton } from './components/loading-button';
16
- export { default as ImageZoom } from './components/image-zoom';
17
- export { default as Button, ButtonProps } from './components/button';
18
- export { default as RequestButton } from './components/request-button';
19
- export { default as Form, FormProps, FormType } from './components/form';
20
- export { default as Table, TableProps, Columns, TableType } from './components/table';
21
- export { default as ModalForm, ModalFormProps } from './components/modal-form';
22
- export { default as ModalButton, ModalType, ModalButtonProps } from './components/modal-button';
23
- export { default as Modal, ModalProps, MessageProps } from './components/modal';
24
- export { default as Tooltip } from './components/tooltip';
25
- export { default as useRequest } from './hooks/use-request';
26
- export { default as useOverlayState } from './hooks/use-overlay-state';
27
- export { default as useControllableState } from './hooks/use-controllable-state';
28
- export { default as useDebounce } from './hooks/use-debounce';
29
- export { default as useSafeState } from './hooks/use-safe-state';
30
- export { default as request, RequestConfig, RequestInstance, isRequestError, showRequestError } from './request';
31
- export type { UiSchema as FormUiSchema, Schema as FormSchema, WidgetProps as FormWidgetProps, Widget as FormWidget, IChangeEvent as FormChangeEvent, ISubmitEvent as FormSubmitEvent } from '@topthink/json-form';
32
- export { default as styled, css, keyframes, createGlobalStyle, StyleSheetManager, ThemeProvider } from 'styled-components';
33
- export { useAsync, useAsyncCallback } from 'react-async-hook';
1
+ export { default as Message } from './utils/message';
2
+ export { default as waitPayComplete } from './utils/wait-pay-complete';
3
+ export { default as Toast } from './utils/toast';
4
+ export { PaginationType } from './utils/types';
5
+ export { default as isRecord } from './utils/is-record';
6
+ export { default as Result } from './components/result';
7
+ export { default as Loader } from './components/loader';
8
+ export { default as Card } from './components/card';
9
+ export { default as Error } from './components/error';
10
+ export { default as Space } from './components/space';
11
+ export { default as Steps, Step } from './components/steps';
12
+ export { default as Statistic } from './components/statistic';
13
+ export { default as Pagination } from './components/pagination';
14
+ export { default as NumberFormat } from './components/number-format';
15
+ export { default as LoadingButton } from './components/loading-button';
16
+ export { default as ImageZoom } from './components/image-zoom';
17
+ export { default as Button, ButtonProps } from './components/button';
18
+ export { default as RequestButton } from './components/request-button';
19
+ export { default as Form, FormProps, FormType } from './components/form';
20
+ export { default as Table, TableProps, Columns, TableType } from './components/table';
21
+ export { default as ModalForm, ModalFormProps } from './components/modal-form';
22
+ export { default as ModalButton, ModalType, ModalButtonProps } from './components/modal-button';
23
+ export { default as Modal, ModalProps, MessageProps } from './components/modal';
24
+ export { default as Tooltip } from './components/tooltip';
25
+ export { default as useRequest } from './hooks/use-request';
26
+ export { default as useOverlayState } from './hooks/use-overlay-state';
27
+ export { default as useControllableState } from './hooks/use-controllable-state';
28
+ export { default as useDebounce } from './hooks/use-debounce';
29
+ export { default as useSafeState } from './hooks/use-safe-state';
30
+ export { default as request, RequestConfig, RequestInstance, isRequestError, showRequestError } from './request';
31
+ export type { UiSchema as FormUiSchema, Schema as FormSchema, WidgetProps as FormWidgetProps, Widget as FormWidget, IChangeEvent as FormChangeEvent, ISubmitEvent as FormSubmitEvent } from '@topthink/json-form';
32
+ export { default as styled, css, keyframes, createGlobalStyle, StyleSheetManager, ThemeProvider } from 'styled-components';
33
+ export { useAsync, useAsyncCallback } from 'react-async-hook';
@@ -1,32 +1,32 @@
1
- import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
- import { RetryConfig } from 'retry-axios';
3
- export type Errors = string | {
4
- [key: string]: string;
5
- };
6
- declare module 'retry-axios' {
7
- interface RetryConfig {
8
- retryDecider?: () => boolean;
9
- }
10
- }
11
- declare module 'axios' {
12
- interface AxiosError {
13
- errors: Errors;
14
- }
15
- interface AxiosRequestConfig {
16
- raxConfig?: RetryConfig;
17
- authTokenName?: string;
18
- }
19
- }
20
- export type RequestConfig = AxiosRequestConfig | string;
21
- export type RequestInstance = AxiosInstance;
22
- export declare const isRequestError: (payload: any) => payload is import("axios").AxiosError<unknown, any>;
23
- export declare const showRequestError: (e: any) => void;
24
- declare const request: {
25
- <T = any>(config: RequestConfig): Promise<T>;
26
- defaults: import("axios").AxiosDefaults<any>;
27
- interceptors: {
28
- request: import("axios").AxiosInterceptorManager<AxiosRequestConfig<any>>;
29
- response: import("axios").AxiosInterceptorManager<import("axios").AxiosResponse<any, any>>;
30
- };
31
- };
32
- export default request;
1
+ import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ import { RetryConfig } from 'retry-axios';
3
+ export type Errors = string | {
4
+ [key: string]: string;
5
+ };
6
+ declare module 'retry-axios' {
7
+ interface RetryConfig {
8
+ retryDecider?: () => boolean;
9
+ }
10
+ }
11
+ declare module 'axios' {
12
+ interface AxiosError {
13
+ errors: Errors;
14
+ }
15
+ interface AxiosRequestConfig {
16
+ raxConfig?: RetryConfig;
17
+ authTokenName?: string;
18
+ }
19
+ }
20
+ export type RequestConfig = AxiosRequestConfig | string;
21
+ export type RequestInstance = AxiosInstance;
22
+ export declare const isRequestError: (payload: any) => payload is import("axios").AxiosError<unknown, any>;
23
+ export declare const showRequestError: (e: any) => void;
24
+ declare const request: {
25
+ <T = any>(config: RequestConfig): Promise<T>;
26
+ defaults: import("axios").AxiosDefaults<any>;
27
+ interceptors: {
28
+ request: import("axios").AxiosInterceptorManager<AxiosRequestConfig<any>>;
29
+ response: import("axios").AxiosInterceptorManager<import("axios").AxiosResponse<any, any>>;
30
+ };
31
+ };
32
+ export default request;
@@ -1 +1 @@
1
- export default function isRecord(data: any): data is Record<string, string>;
1
+ export default function isRecord(data: any): data is Record<string, string>;
@@ -1,11 +1,11 @@
1
- import { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';
2
- interface MessageOptions<T = any> extends SweetAlertOptions<T> {
3
- }
4
- declare const Message: {
5
- confirm: <T = any>(options: MessageOptions<T>) => Promise<boolean>;
6
- success: (options: MessageOptions) => void;
7
- error: (options: MessageOptions) => void;
8
- close: (result?: SweetAlertResult) => void;
9
- defaults: MessageOptions<any>;
10
- };
11
- export default Message;
1
+ import { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';
2
+ interface MessageOptions<T = any> extends SweetAlertOptions<T> {
3
+ }
4
+ declare const Message: {
5
+ confirm: <T = any>(options: MessageOptions<T>) => Promise<boolean>;
6
+ success: (options: MessageOptions) => void;
7
+ error: (options: MessageOptions) => void;
8
+ close: (result?: SweetAlertResult) => void;
9
+ defaults: MessageOptions<any>;
10
+ };
11
+ export default Message;
@@ -1,11 +1,11 @@
1
- import { NoticeContent } from 'rc-notification/lib/Notification';
2
- import { NotificationProps } from 'rc-notification/es/Notification';
3
- declare const defaultOptions: NotificationProps & {
4
- getContainer?: () => HTMLElement;
5
- };
6
- declare const types: readonly ["error", "success", "info"];
7
- type ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {
8
- defaults: typeof defaultOptions;
9
- };
10
- declare const _default: ToastType;
11
- export default _default;
1
+ import { NoticeContent } from 'rc-notification/lib/Notification';
2
+ import { NotificationProps } from 'rc-notification/es/Notification';
3
+ declare const defaultOptions: NotificationProps & {
4
+ getContainer?: () => HTMLElement;
5
+ };
6
+ declare const types: readonly ["error", "success", "info"];
7
+ type ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {
8
+ defaults: typeof defaultOptions;
9
+ };
10
+ declare const _default: ToastType;
11
+ export default _default;
@@ -1,7 +1,7 @@
1
- export interface PaginationType<T = any> {
2
- total: number;
3
- current_page: number;
4
- per_page: number;
5
- last_page: number;
6
- data: T[];
7
- }
1
+ export interface PaginationType<T = any> {
2
+ total: number;
3
+ current_page: number;
4
+ per_page: number;
5
+ last_page: number;
6
+ data: T[];
7
+ }
@@ -1,11 +1,11 @@
1
- interface PayResult {
2
- pay_url: string;
3
- order_no: string;
4
- }
5
- interface Options {
6
- result: PayResult;
7
- checkUrl: string;
8
- onComplete?: () => void;
9
- }
10
- export default function waitPayComplete(options: Options): void;
11
- export {};
1
+ interface PayResult {
2
+ pay_url: string;
3
+ order_no: string;
4
+ }
5
+ interface Options {
6
+ result: PayResult;
7
+ checkUrl: string;
8
+ onComplete?: () => void;
9
+ }
10
+ export default function waitPayComplete(options: Options): void;
11
+ export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor-widget-ebec8493.js","sources":["../src/components/lazy/form/widgets/editor-widget.tsx"],"sourcesContent":["import { WidgetProps } from '@rjsf/core';\r\nimport '@toast-ui/editor/dist/toastui-editor-only.css';\r\nimport '@toast-ui/editor/dist/i18n/zh-cn';\r\nimport { Editor, EditorProps } from '@toast-ui/react-editor';\r\nimport { useRef } from 'react';\r\nimport styled from 'styled-components';\r\n\r\ninterface Options {\r\n editType?: 'wysiwyg' | 'markdown';\r\n outputType?: 'html' | 'markdown';\r\n onUpload?: (file: File | Blob) => Promise<string>;\r\n}\r\n\r\nexport default function EditorWidget(props: WidgetProps) {\r\n const { value, onChange, placeholder, autofocus, options } = props;\r\n\r\n const { editType = 'wysiwyg', outputType = 'markdown', onUpload } = options as Options;\r\n\r\n const ref = useRef<Editor>(null);\r\n\r\n const hooks: EditorProps['hooks'] = {};\r\n\r\n if (onUpload) {\r\n hooks.addImageBlobHook = async (file, callback) => {\r\n const url = await onUpload(file);\r\n callback(url);\r\n };\r\n }\r\n\r\n return <Container>\r\n <Editor\r\n ref={ref}\r\n placeholder={placeholder}\r\n usageStatistics={false}\r\n hooks={hooks}\r\n autofocus={autofocus}\r\n linkAttributes={{\r\n target: '_blank'\r\n }}\r\n onChange={() => {\r\n const instance = ref.current?.getInstance();\r\n if (instance) {\r\n if (outputType === 'markdown') {\r\n onChange(instance.getMarkdown());\r\n } else {\r\n onChange(instance.getHTML());\r\n }\r\n }\r\n }}\r\n language='zh-CN'\r\n initialValue={value}\r\n previewStyle='vertical'\r\n height='600px'\r\n initialEditType={editType}\r\n />\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n .ProseMirror {\r\n position: relative;\r\n word-wrap: break-word;\r\n white-space: break-spaces;\r\n -webkit-font-variant-ligatures: none;\r\n font-variant-ligatures: none;\r\n font-feature-settings: \"liga\" 0;\r\n font-size: 15px;\r\n overflow-y: auto;\r\n overflow-X: hidden;\r\n height: 100%;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n pre {\r\n white-space: pre-wrap;\r\n }\r\n\r\n li {\r\n position: relative;\r\n }\r\n\r\n .placeholder {\r\n color: #999;\r\n }\r\n }\r\n\r\n .ProseMirror-hideselection *::selection {\r\n background: transparent;\r\n }\r\n\r\n .ProseMirror-hideselection *::-moz-selection {\r\n background: transparent;\r\n }\r\n\r\n .ProseMirror-hideselection {\r\n caret-color: transparent;\r\n }\r\n\r\n .ProseMirror-selectednode {\r\n outline: 2px solid #8cf;\r\n }\r\n\r\n /* Make sure li selections wrap around markers */\r\n\r\n li.ProseMirror-selectednode {\r\n outline: none;\r\n }\r\n\r\n li.ProseMirror-selectednode:after {\r\n content: \"\";\r\n position: absolute;\r\n left: -32px;\r\n right: -2px;\r\n top: -2px;\r\n bottom: -2px;\r\n border: 2px solid #8cf;\r\n pointer-events: none;\r\n }\r\n\r\n /* Protect against generic img rules */\r\n\r\n img.ProseMirror-separator {\r\n display: inline !important;\r\n border: none !important;\r\n margin: 0 !important;\r\n }\r\n\r\n\r\n .ProseMirror-selectednode {\r\n outline: none;\r\n }\r\n\r\n table.ProseMirror-selectednode {\r\n border-radius: 2px;\r\n outline: 2px solid #00a9ff;\r\n }\r\n\r\n .html-block.ProseMirror-selectednode {\r\n border-radius: 2px;\r\n outline: 2px solid #00a9ff;\r\n }\r\n\r\n .toastui-editor-pseudo-clipboard {\r\n position: fixed;\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n left: -1000px;\r\n top: -1000px;\r\n z-index: -1;\r\n }\r\n\r\n .toastui-editor-defaultUI {\r\n font-family: inherit;\r\n\r\n .ProseMirror {\r\n height: 100%;\r\n padding: 14px !important;\r\n font-size: 1rem;\r\n }\r\n\r\n .toastui-editor-defaultUI-toolbar {\r\n padding: 0 5px;\r\n }\r\n\r\n .toastui-editor-md-container {\r\n .toastui-editor-md-preview {\r\n padding: 5px 10px;\r\n\r\n .toastui-editor-contents {\r\n padding-top: 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .toastui-editor-contents {\r\n -ms-text-size-adjust: 100%;\r\n -webkit-text-size-adjust: 100%;\r\n line-height: 1.2;\r\n word-wrap: break-word;\r\n\r\n & > *:first-child {\r\n margin-top: 0 !important;\r\n }\r\n\r\n & > *:last-child {\r\n margin-bottom: 0 !important;\r\n }\r\n\r\n h1, h2, h3, h4, h5, h6, p, ul, ol, blockquote, pre, table, audio, video {\r\n margin: 1em 0;\r\n line-height: 1.2;\r\n padding: 0;\r\n\r\n &:last-child {\r\n margin-bottom: 0 !important;\r\n }\r\n\r\n &:first-child {\r\n margin-top: 0 !important;\r\n }\r\n }\r\n\r\n p {\r\n margin-bottom: 1em;\r\n line-height: 2;\r\n }\r\n\r\n h1, h2, h3, h4, h5, h6 {\r\n font-weight: normal;\r\n\r\n &.align-right {\r\n text-align: right;\r\n }\r\n\r\n &.align-center {\r\n text-align: center;\r\n }\r\n }\r\n\r\n h1 {\r\n font-size: 2em;\r\n line-height: 1.2;\r\n border-bottom: 1px solid #eeeeee;\r\n padding-bottom: .5em;\r\n }\r\n\r\n h2 {\r\n padding-bottom: .4em;\r\n font-size: 1.3em;\r\n line-height: 1.2;\r\n border-bottom: 1px solid #eeeeee\r\n }\r\n\r\n h3 {\r\n font-size: 1.2em;\r\n line-height: 1.2;\r\n }\r\n\r\n h4 {\r\n font-size: 1.1em;\r\n line-height: 1.2;\r\n }\r\n\r\n h5 {\r\n font-size: 1em;\r\n line-height: 1.2;\r\n }\r\n\r\n hr {\r\n border: 0;\r\n border-bottom: 1px solid #eeeeee;\r\n margin-bottom: 0.5em;\r\n }\r\n\r\n ul {\r\n padding-left: 2em;\r\n\r\n ul {\r\n margin: 0;\r\n }\r\n }\r\n\r\n ol {\r\n padding-left: 2em;\r\n }\r\n\r\n li {\r\n line-height: 2;\r\n\r\n &.task-list-item {\r\n list-style: none;\r\n position: relative;\r\n\r\n input[type=checkbox] {\r\n position: absolute;\r\n left: -1.5em;\r\n top: 0.5em;\r\n width: 1em;\r\n height: 1em;\r\n }\r\n }\r\n }\r\n\r\n code {\r\n display: inline-block;\r\n border-radius: 4px;\r\n padding: .2em .4em;\r\n background-color: #f7f7f7;\r\n word-break: break-all;\r\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\r\n white-space: pre;\r\n line-height: 1.3;\r\n margin: -.2em .4em;\r\n }\r\n\r\n pre {\r\n padding: 1.05em;\r\n overflow: auto;\r\n line-height: 1.45;\r\n background-color: #f7f7f7;\r\n border: 0;\r\n border-radius: 3px;\r\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\r\n }\r\n\r\n\r\n pre > code {\r\n display: inline;\r\n max-width: 100%;\r\n padding: 0;\r\n margin: 0;\r\n overflow: initial;\r\n line-height: inherit;\r\n background-color: rgba(0, 0, 0, 0);\r\n border: 0;\r\n tab-size: 4;\r\n }\r\n\r\n table {\r\n border-collapse: collapse;\r\n table-layout: fixed;\r\n width: 100%;\r\n line-height: 1.8;\r\n border-spacing: 0;\r\n\r\n th {\r\n text-align: left;\r\n\r\n &[align='center'] {\r\n text-align: center;\r\n }\r\n\r\n &[align='right'] {\r\n text-align: right;\r\n }\r\n }\r\n\r\n th, td {\r\n border: 1px solid #e0e0e0;\r\n padding: 3px 12px;\r\n height: 34px;\r\n }\r\n\r\n tr:hover td {\r\n background-color: #f1f1f1;\r\n }\r\n }\r\n\r\n img {\r\n max-width: 100%;\r\n display: inline-block;\r\n padding: 3px;\r\n vertical-align: middle;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: var(--bs-primary);\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n }\r\n\r\n blockquote {\r\n padding: 5px 5px 5px 15px;\r\n color: #777777;\r\n border-left: 4px solid #dddddd;\r\n }\r\n\r\n video {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n audio {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .task-list-item {\r\n border: 0;\r\n list-style: none;\r\n padding-left: 24px;\r\n margin-left: -24px;\r\n }\r\n\r\n .task-list-item::before {\r\n background-repeat: no-repeat;\r\n background-size: 18px 18px;\r\n background-position: center;\r\n content: '';\r\n margin-left: 0;\r\n margin-top: 0;\r\n border-radius: 2px;\r\n height: 18px;\r\n width: 18px;\r\n position: absolute;\r\n left: 0;\r\n top: 7px;\r\n cursor: pointer;\r\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iI0ZGRiIgc3Ryb2tlPSIjQ0NDIj4KICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAzMCAtMjk2KSB0cmFuc2xhdGUoNzg4IDE5MikgdHJhbnNsYXRlKDI0MiAxMDQpIj4KICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD0iMTciIGhlaWdodD0iMTciIHg9Ii41IiB5PSIuNSIgcng9IjIiLz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==);\r\n }\r\n\r\n .task-list-item.checked::before {\r\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iIzRCOTZFNiI+CiAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2IDBjMS4xMDUgMCAyIC44OTUgMiAydjE0YzAgMS4xMDUtLjg5NSAyLTIgMkgyYy0xLjEwNSAwLTItLjg5NS0yLTJWMkMwIC44OTUuODk1IDAgMiAwaDE0em0tMS43OTMgNS4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNy41IDEwLjU4NSA1LjIwNyA4LjI5M2wtLjA5NC0uMDgzYy0uMzkyLS4zMDUtLjk2LS4yNzgtMS4zMi4wODMtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgMyAuMDk0LjA4M2MuMzkyLjMwNS45Ni4yNzggMS4zMi0uMDgzbDYtNiAuMDgzLS4wOTRjLjMwNS0uMzkyLjI3OC0uOTYtLjA4My0xLjMyeiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwNTAgLTI5NikgdHJhbnNsYXRlKDc4OCAxOTIpIHRyYW5zbGF0ZSgyNjIgMTA0KSIvPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K);\r\n }\r\n }\r\n`;\r\n"],"names":["EditorWidget","props","value","onChange","placeholder","autofocus","options","editType","outputType","onUpload","ref","useRef","hooks","addImageBlobHook","async","file","callback","_jsx","Container","children","Editor","usageStatistics","linkAttributes","target","instance","current","getInstance","getMarkdown","getHTML","language","initialValue","previewStyle","height","initialEditType","styled","div"],"mappings":"uPAawB,SAAAA,EAAaC,GACjC,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,YAAEA,EAAWC,UAAEA,EAASC,QAAEA,GAAYL,GAEvDM,SAAEA,EAAW,UAASC,WAAEA,EAAa,WAAUC,SAAEA,GAAaH,EAE9DI,EAAMC,EAAe,MAErBC,EAA8B,CAAA,EASpC,OAPIH,IACAG,EAAMC,iBAAmBC,MAAOC,EAAMC,KAElCA,QADkBP,EAASM,GACd,GAIdE,EAACC,EAAS,CAAAC,SACbF,EAACG,EACG,CAAAV,IAAKA,EACLN,YAAaA,EACbiB,iBAAiB,EACjBT,MAAOA,EACPP,UAAWA,EACXiB,eAAgB,CACZC,OAAQ,UAEZpB,SAAU,KACN,MAAMqB,EAAWd,EAAIe,SAASC,cAC1BF,GAEIrB,EADe,aAAfK,EACSgB,EAASG,cAETH,EAASI,UAEzB,EAELC,SAAS,QACTC,aAAc5B,EACd6B,aAAa,WACbC,OAAO,QACPC,gBAAiB1B,KAG7B,CAEA,MAAMW,EAAYgB,EAAOC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,233 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import JsonForm, { getRegistry } from '@topthink/json-form';
3
- import { forwardRef, useState, useCallback } from 'react';
4
- import axios from 'axios';
5
- import { u as useSafeState, r as request, B as Button } from './index-a48179db.js';
6
- import { mapValues } from 'lodash';
7
- import 'sweetalert2/dist/sweetalert2.js';
8
- import 'sweetalert2-react-content';
9
- import 'react-bootstrap';
10
- import 'query-string';
11
- import 'retry-axios';
12
- import '@babel/runtime/helpers/defineProperty';
13
- import 'rc-notification';
14
- import 'styled-components';
15
- import 'classnames';
16
- import 'rc-steps';
17
- import 'rc-steps/assets/index.css';
18
- import 'react-async-hook';
19
-
20
- const localize = require('ajv-i18n/localize/zh');
21
- const toExtraErrors = error => {
22
- const errors = error.errors;
23
- if (typeof errors === 'string') {
24
- return {
25
- __errors: [errors]
26
- };
27
- }
28
- return mapValues(errors, e => {
29
- return {
30
- __errors: [e]
31
- };
32
- });
33
- };
34
- const widgets = {
35
- upload: function (_ref) {
36
- let {
37
- options,
38
- ...props
39
- } = _ref;
40
- const {
41
- widgets
42
- } = getRegistry();
43
- if (options.endpoint) {
44
- options.onUpload = async file => {
45
- const data = new FormData();
46
- data.set('file', file);
47
- const {
48
- url,
49
- value
50
- } = await request({
51
- url: options.endpoint,
52
- method: 'post',
53
- data
54
- });
55
- return {
56
- url,
57
- value
58
- };
59
- };
60
- }
61
- return jsx(widgets.upload, {
62
- ...props,
63
- options: options
64
- });
65
- },
66
- editor: function (_ref2) {
67
- let {
68
- options,
69
- ...props
70
- } = _ref2;
71
- const {
72
- widgets
73
- } = getRegistry();
74
- if (options.endpoint) {
75
- options.onUpload = async file => {
76
- const data = new FormData();
77
- data.set('file', file);
78
- const {
79
- url
80
- } = await request({
81
- url: options.endpoint,
82
- method: 'post',
83
- data
84
- });
85
- return url;
86
- };
87
- }
88
- return jsx(widgets.editor, {
89
- ...props,
90
- options: options
91
- });
92
- },
93
- typeahead: function (_ref3) {
94
- let {
95
- options,
96
- ...props
97
- } = _ref3;
98
- const {
99
- widgets
100
- } = getRegistry();
101
- if (options.endpoint) {
102
- options.onSearch = async _ref4 => {
103
- let {
104
- value,
105
- query
106
- } = _ref4;
107
- return await request({
108
- url: options.endpoint,
109
- params: {
110
- value,
111
- query
112
- }
113
- });
114
- };
115
- }
116
- return jsx(widgets.typeahead, {
117
- ...props,
118
- options: options
119
- });
120
- }
121
- };
122
- const Form = forwardRef((_ref5, ref) => {
123
- let {
124
- action,
125
- method = 'post',
126
- onSuccess,
127
- formData,
128
- onSubmitting,
129
- onSubmit,
130
- onChange,
131
- submitText = '提交',
132
- transformData,
133
- children,
134
- ...props
135
- } = _ref5;
136
- const [extraErrors, setExtraErrors] = useState();
137
- const [loading, setLoading] = useSafeState(false);
138
- const [data, setData] = useState(formData);
139
- const handleSubmit = useCallback(async (e, nativeEvent) => {
140
- if (!loading) {
141
- try {
142
- setLoading(true);
143
- if (onSubmitting) {
144
- onSubmitting(true);
145
- }
146
- if (action) {
147
- let {
148
- formData
149
- } = e;
150
- if (transformData) {
151
- formData = transformData(formData);
152
- }
153
- //todo 包含File对象需转FormData
154
- try {
155
- const result = await request({
156
- url: action,
157
- method,
158
- data: formData
159
- });
160
- setExtraErrors(undefined);
161
- if (onSuccess) {
162
- await onSuccess(result);
163
- }
164
- return result;
165
- } catch (e) {
166
- if (axios.isAxiosError(e)) {
167
- setExtraErrors(toExtraErrors(e));
168
- } else {
169
- throw e;
170
- }
171
- }
172
- } else if (onSubmit) {
173
- return await onSubmit(e, nativeEvent);
174
- }
175
- } finally {
176
- setLoading(false);
177
- if (onSubmitting) {
178
- onSubmitting(false);
179
- }
180
- }
181
- }
182
- }, [action, method, onSubmit]);
183
- const handleChange = useCallback(e => {
184
- const {
185
- formData
186
- } = e;
187
- setData(formData);
188
- if (onChange) {
189
- onChange(e);
190
- }
191
- }, [setData, onChange]);
192
- const transformErrors = useCallback(errors => {
193
- errors = errors.map(error => ({
194
- keyword: error.name,
195
- dataPath: error.property,
196
- ...error
197
- }));
198
- localize(errors);
199
- return errors;
200
- }, []);
201
- const submit = jsx(Button, {
202
- className: 'px-4',
203
- loading: loading,
204
- type: 'submit',
205
- variant: 'primary',
206
- children: submitText
207
- });
208
- if (typeof children === 'function') {
209
- children = children({
210
- submit,
211
- loading
212
- });
213
- }
214
- return jsx(JsonForm, {
215
- ref: ref,
216
- extraErrors: extraErrors,
217
- onSubmit: handleSubmit,
218
- transformErrors: transformErrors,
219
- noHtml5Validate: true,
220
- noValidate: true,
221
- ...props,
222
- formData: data,
223
- onChange: handleChange,
224
- widgets: widgets,
225
- children: children || jsx("div", {
226
- className: 'col-12',
227
- children: submit
228
- })
229
- });
230
- });
231
-
232
- export { Form as default };
233
- //# sourceMappingURL=form-01bf45e9.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-01bf45e9.js","sources":["../src/components/lazy/form.tsx"],"sourcesContent":["import JsonForm, { getRegistry, JsonFormProps, JsonFormType } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useState\r\n} from 'react';\r\nimport axios, { AxiosError, Method } from 'axios';\r\nimport request from '../../request';\r\nimport { mapValues } from 'lodash';\r\nimport type { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\r\nimport Button from '../button';\r\nimport useSafeState from '../../hooks/use-safe-state';\r\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nexport interface FormProps<T = any> extends JsonFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n children?: ReactNode | ((props: { submit: ReactNode, loading: boolean }) => ReactNode);\r\n submitText?: string;\r\n onSubmitting?: (submitting: boolean) => void;\r\n transformData?: (data: T) => T;\r\n}\r\n\r\ntype Error = {\r\n __errors: string[]\r\n}\r\n\r\ntype Errors = Error | {\r\n [key: string]: Error\r\n}\r\n\r\nconst toExtraErrors = (error: AxiosError): Errors => {\r\n const errors = error.errors;\r\n if (typeof errors === 'string') {\r\n return {\r\n __errors: [errors]\r\n };\r\n }\r\n return mapValues(errors, (e) => {\r\n return {\r\n __errors: [e]\r\n };\r\n });\r\n};\r\n\r\nconst widgets = {\r\n upload: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url, value } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return { url, value };\r\n };\r\n }\r\n\r\n return <widgets.upload {...props} options={options} />;\r\n },\r\n editor: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return url;\r\n };\r\n }\r\n\r\n return <widgets.editor {...props} options={options} />;\r\n },\r\n typeahead: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onSearch = async ({ value, query }) => {\r\n return await request({\r\n url: options.endpoint as string,\r\n params: { value, query }\r\n });\r\n };\r\n }\r\n\r\n return <widgets.typeahead {...props} options={options} />;\r\n }\r\n};\r\n\r\nexport interface FormType extends JsonFormType {\r\n\r\n}\r\n\r\ntype Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: Form = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmitting,\r\n onSubmit,\r\n onChange,\r\n submitText = '提交',\r\n transformData,\r\n children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useSafeState(false);\r\n const [data, setData] = useState(formData);\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n if (!loading) {\r\n try {\r\n setLoading(true);\r\n if (onSubmitting) {\r\n onSubmitting(true);\r\n }\r\n if (action) {\r\n let { formData } = e;\r\n\r\n if (transformData) {\r\n formData = transformData(formData);\r\n }\r\n\r\n //todo 包含File对象需转FormData\r\n try {\r\n const result = await request({\r\n url: action,\r\n method,\r\n data: formData\r\n });\r\n setExtraErrors(undefined);\r\n if (onSuccess) {\r\n await onSuccess(result);\r\n }\r\n return result;\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n } else {\r\n throw e;\r\n }\r\n }\r\n } else if (onSubmit) {\r\n return await onSubmit(e, nativeEvent);\r\n }\r\n } finally {\r\n setLoading(false);\r\n if (onSubmitting) {\r\n onSubmitting(false);\r\n }\r\n }\r\n }\r\n }, [action, method, onSubmit]);\r\n\r\n const handleChange = useCallback((e: ISubmitEvent<any>) => {\r\n const { formData } = e;\r\n setData(formData);\r\n if (onChange) {\r\n onChange(e);\r\n }\r\n }, [setData, onChange]);\r\n\r\n const transformErrors = useCallback((errors: AjvError[]) => {\r\n errors = errors.map(error => ({\r\n keyword: error.name,\r\n dataPath: error.property,\r\n ...error\r\n }));\r\n\r\n localize(errors);\r\n\r\n return errors;\r\n }, []);\r\n\r\n const submit = <Button className={'px-4'} loading={loading} type='submit' variant='primary'>{submitText}</Button>;\r\n\r\n if (typeof children === 'function') {\r\n children = children({ submit, loading });\r\n }\r\n\r\n return <JsonForm\r\n ref={ref}\r\n extraErrors={extraErrors}\r\n onSubmit={handleSubmit}\r\n transformErrors={transformErrors}\r\n noHtml5Validate\r\n noValidate\r\n {...props}\r\n formData={data}\r\n onChange={handleChange}\r\n widgets={widgets}\r\n >\r\n {children || <div className='col-12'>\r\n {submit}\r\n </div>}\r\n </JsonForm>;\r\n});\r\n\r\nexport default Form;\r\n"],"names":["localize","require","toExtraErrors","error","errors","__errors","mapValues","e","widgets","upload","options","props","getRegistry","endpoint","onUpload","file","data","FormData","set","url","value","request","method","_jsx","editor","typeahead","onSearch","query","params","Form","forwardRef","ref","action","onSuccess","formData","onSubmitting","onSubmit","onChange","submitText","transformData","children","extraErrors","setExtraErrors","useState","loading","setLoading","useSafeState","setData","handleSubmit","useCallback","nativeEvent","result","undefined","axios","isAxiosError","handleChange","transformErrors","map","keyword","name","dataPath","property","submit","Button","className","type","variant","JsonForm","noHtml5Validate","noValidate"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{jsx as t}from"react/jsx-runtime";import o,{getRegistry as r}from"@topthink/json-form";import{forwardRef as e,useState as a,useCallback as n}from"react";import i from"axios";import{u as s,r as m,B as p}from"./index-5142110c.js";import{mapValues as l}from"lodash";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"react-bootstrap";import"query-string";import"retry-axios";import"@babel/runtime/helpers/defineProperty";import"rc-notification";import"styled-components";import"classnames";import"react-async-hook";const c=require("ajv-i18n/localize/zh"),d={upload:function(o){let{options:e,...a}=o;const{widgets:n}=r();return e.endpoint&&(e.onUpload=async t=>{const o=new FormData;o.set("file",t);const{url:r,value:a}=await m({url:e.endpoint,method:"post",data:o});return{url:r,value:a}}),t(n.upload,{...a,options:e})},editor:function(o){let{options:e,...a}=o;const{widgets:n}=r();return e.endpoint&&(e.onUpload=async t=>{const o=new FormData;o.set("file",t);const{url:r}=await m({url:e.endpoint,method:"post",data:o});return r}),t(n.editor,{...a,options:e})},typeahead:function(o){let{options:e,...a}=o;const{widgets:n}=r();return e.endpoint&&(e.onSearch=async t=>{let{value:o,query:r}=t;return await m({url:e.endpoint,params:{value:o,query:r}})}),t(n.typeahead,{...a,options:e})}},u=e(((r,e)=>{let{action:u,method:f="post",onSuccess:y,formData:h,onSubmitting:w,onSubmit:g,onChange:b,submitText:x="提交",transformData:v,children:D,...j}=r;const[S,q]=a(),[_,k]=s(!1),[E,z]=a(h),C=n((async(t,o)=>{if(!_)try{if(k(!0),w&&w(!0),u){let{formData:o}=t;v&&(o=v(o));try{const t=await m({url:u,method:f,data:o});return q(void 0),y&&await y(t),t}catch(t){if(!i.isAxiosError(t))throw t;q((t=>{const o=t.errors;return"string"==typeof o?{__errors:[o]}:l(o,(t=>({__errors:[t]})))})(t))}}else if(g)return await g(t,o)}finally{k(!1),w&&w(!1)}}),[u,f,g]),F=n((t=>{const{formData:o}=t;z(o),b&&b(t)}),[z,b]),N=n((t=>(t=t.map((t=>({keyword:t.name,dataPath:t.property,...t}))),c(t),t)),[]),P=t(p,{className:"px-4",loading:_,type:"submit",variant:"primary",children:x});return"function"==typeof D&&(D=D({submit:P,loading:_})),t(o,{ref:e,extraErrors:S,onSubmit:C,transformErrors:N,noHtml5Validate:!0,noValidate:!0,...j,formData:E,onChange:F,widgets:d,children:D||t("div",{className:"col-12",children:P})})}));export{u as default};
2
- //# sourceMappingURL=form-0a372a24.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-0a372a24.js","sources":["../src/components/lazy/form.tsx"],"sourcesContent":["import JsonForm, { getRegistry, JsonFormProps, JsonFormType } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useState\r\n} from 'react';\r\nimport axios, { AxiosError, Method } from 'axios';\r\nimport request from '../../request';\r\nimport { mapValues } from 'lodash';\r\nimport type { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\r\nimport Button from '../button';\r\nimport useSafeState from '../../hooks/use-safe-state';\r\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nexport interface FormProps<T = any> extends JsonFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n children?: ReactNode | ((props: { submit: ReactNode, loading: boolean }) => ReactNode);\r\n submitText?: string;\r\n onSubmitting?: (submitting: boolean) => void;\r\n transformData?: (data: T) => T;\r\n}\r\n\r\ntype Error = {\r\n __errors: string[]\r\n}\r\n\r\ntype Errors = Error | {\r\n [key: string]: Error\r\n}\r\n\r\nconst toExtraErrors = (error: AxiosError): Errors => {\r\n const errors = error.errors;\r\n if (typeof errors === 'string') {\r\n return {\r\n __errors: [errors]\r\n };\r\n }\r\n return mapValues(errors, (e) => {\r\n return {\r\n __errors: [e]\r\n };\r\n });\r\n};\r\n\r\nconst widgets = {\r\n upload: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url, value } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return { url, value };\r\n };\r\n }\r\n\r\n return <widgets.upload {...props} options={options} />;\r\n },\r\n editor: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return url;\r\n };\r\n }\r\n\r\n return <widgets.editor {...props} options={options} />;\r\n },\r\n typeahead: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onSearch = async ({ value, query }) => {\r\n return await request({\r\n url: options.endpoint as string,\r\n params: { value, query }\r\n });\r\n };\r\n }\r\n\r\n return <widgets.typeahead {...props} options={options} />;\r\n }\r\n};\r\n\r\nexport interface FormType extends JsonFormType {\r\n\r\n}\r\n\r\ntype Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: Form = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmitting,\r\n onSubmit,\r\n onChange,\r\n submitText = '提交',\r\n transformData,\r\n children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useSafeState(false);\r\n const [data, setData] = useState(formData);\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n if (!loading) {\r\n try {\r\n setLoading(true);\r\n if (onSubmitting) {\r\n onSubmitting(true);\r\n }\r\n if (action) {\r\n let { formData } = e;\r\n\r\n if (transformData) {\r\n formData = transformData(formData);\r\n }\r\n\r\n //todo 包含File对象需转FormData\r\n try {\r\n const result = await request({\r\n url: action,\r\n method,\r\n data: formData\r\n });\r\n setExtraErrors(undefined);\r\n if (onSuccess) {\r\n await onSuccess(result);\r\n }\r\n return result;\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n } else {\r\n throw e;\r\n }\r\n }\r\n } else if (onSubmit) {\r\n return await onSubmit(e, nativeEvent);\r\n }\r\n } finally {\r\n setLoading(false);\r\n if (onSubmitting) {\r\n onSubmitting(false);\r\n }\r\n }\r\n }\r\n }, [action, method, onSubmit]);\r\n\r\n const handleChange = useCallback((e: ISubmitEvent<any>) => {\r\n const { formData } = e;\r\n setData(formData);\r\n if (onChange) {\r\n onChange(e);\r\n }\r\n }, [setData, onChange]);\r\n\r\n const transformErrors = useCallback((errors: AjvError[]) => {\r\n errors = errors.map(error => ({\r\n keyword: error.name,\r\n dataPath: error.property,\r\n ...error\r\n }));\r\n\r\n localize(errors);\r\n\r\n return errors;\r\n }, []);\r\n\r\n const submit = <Button className={'px-4'} loading={loading} type='submit' variant='primary'>{submitText}</Button>;\r\n\r\n if (typeof children === 'function') {\r\n children = children({ submit, loading });\r\n }\r\n\r\n return <JsonForm\r\n ref={ref}\r\n extraErrors={extraErrors}\r\n onSubmit={handleSubmit}\r\n transformErrors={transformErrors}\r\n noHtml5Validate\r\n noValidate\r\n {...props}\r\n formData={data}\r\n onChange={handleChange}\r\n widgets={widgets}\r\n >\r\n {children || <div className='col-12'>\r\n {submit}\r\n </div>}\r\n </JsonForm>;\r\n});\r\n\r\nexport default Form;\r\n"],"names":["localize","require","widgets","upload","_ref","options","props","getRegistry","endpoint","onUpload","async","data","FormData","set","file","url","value","request","method","_jsx","editor","_ref2","typeahead","_ref3","onSearch","query","_ref4","params","Form","forwardRef","_ref5","ref","action","onSuccess","formData","onSubmitting","onSubmit","onChange","submitText","transformData","children","extraErrors","setExtraErrors","useState","loading","setLoading","useSafeState","setData","handleSubmit","useCallback","e","nativeEvent","result","undefined","axios","isAxiosError","error","errors","__errors","mapValues","toExtraErrors","handleChange","transformErrors","map","keyword","name","dataPath","property","submit","Button","className","type","variant","JsonForm","noHtml5Validate","noValidate"],"mappings":"oiBAkBA,MAAMA,EAAWC,QAAQ,wBAiCnBC,EAAU,CACZC,OAAQ,SAA2CC,GAAA,IAAlCC,QAAEA,KAAYC,GAAoBF,EAC/C,MAAMF,QAAEA,GAAYK,IAmBpB,OAjBIF,EAAQG,WACRH,EAAQI,SAAWC,UAEf,MAAMC,EAAO,IAAIC,SAEjBD,EAAKE,IAAI,OAAQC,GAEjB,MAAMC,IAAEA,EAAGC,MAAEA,SAAgBC,EAAQ,CACjCF,IAAKV,EAAQG,SACbU,OAAQ,OACRP,SAGJ,MAAO,CAAEI,MAAKC,QAAO,GAItBG,EAACjB,EAAQC,OAAM,IAAKG,EAAOD,QAASA,GAC9C,EACDe,OAAQ,SAA2CC,GAAA,IAAlChB,QAAEA,KAAYC,GAAoBe,EAC/C,MAAMnB,QAAEA,GAAYK,IAmBpB,OAjBIF,EAAQG,WACRH,EAAQI,SAAWC,UAEf,MAAMC,EAAO,IAAIC,SAEjBD,EAAKE,IAAI,OAAQC,GAEjB,MAAMC,IAAEA,SAAcE,EAAQ,CAC1BF,IAAKV,EAAQG,SACbU,OAAQ,OACRP,SAGJ,OAAOI,CAAG,GAIXI,EAACjB,EAAQkB,OAAM,IAAKd,EAAOD,QAASA,GAC9C,EACDiB,UAAW,SAA2CC,GAAA,IAAlClB,QAAEA,KAAYC,GAAoBiB,EAClD,MAAMrB,QAAEA,GAAYK,IAWpB,OATIF,EAAQG,WACRH,EAAQmB,SAAWd,UAA2B,IAApBM,MAAEA,EAAKS,MAAEA,GAAOC,EACtC,aAAaT,EAAQ,CACjBF,IAAKV,EAAQG,SACbmB,OAAQ,CAAEX,QAAOS,UACnB,GAIHN,EAACjB,EAAQoB,UAAS,IAAKhB,EAAOD,QAASA,GAClD,GASEuB,EAAaC,GAAW,CAAAC,EAY3BC,KAAO,IAZqBC,OAC3BA,EAAMd,OACNA,EAAS,OAAMe,UACfA,EAASC,SACTA,EAAQC,aACRA,EAAYC,SACZA,EAAQC,SACRA,EAAQC,WACRA,EAAa,KAAIC,cACjBA,EAAaC,SACbA,KACGlC,GACNwB,EAEG,MAAOW,EAAaC,GAAkBC,KAC/BC,EAASC,GAAcC,GAAa,IACpCnC,EAAMoC,GAAWJ,EAAST,GAE3Bc,EAAeC,GAAYvC,MAAOwC,EAAsBC,KAC1D,IAAKP,EACD,IAKI,GAJAC,GAAW,GACPV,GACAA,GAAa,GAEbH,EAAQ,CACR,IAAIE,SAAEA,GAAagB,EAEfX,IACAL,EAAWK,EAAcL,IAI7B,IACI,MAAMkB,QAAenC,EAAQ,CACzBF,IAAKiB,EACLd,SACAP,KAAMuB,IAMV,OAJAQ,OAAeW,GACXpB,SACMA,EAAUmB,GAEbA,CAOV,CANC,MAAOF,GACL,IAAII,EAAMC,aAAaL,GAGnB,MAAMA,EAFNR,EA/HLc,KACnB,MAAMC,EAASD,EAAMC,OACrB,MAAsB,iBAAXA,EACA,CACHC,SAAU,CAACD,IAGZE,EAAUF,GAASP,IACf,CACHQ,SAAU,CAACR,MAEjB,EAoHqCU,CAAcV,GAIpC,CACJ,MAAM,GAAId,EACP,aAAaA,EAASc,EAAGC,EAOhC,CALS,QACNN,GAAW,GACPV,GACAA,GAAa,EAEpB,CACJ,GACF,CAACH,EAAQd,EAAQkB,IAEdyB,EAAeZ,GAAaC,IAC9B,MAAMhB,SAAEA,GAAagB,EACrBH,EAAQb,GACJG,GACAA,EAASa,EACZ,GACF,CAACH,EAASV,IAEPyB,EAAkBb,GAAaQ,IACjCA,EAASA,EAAOM,KAAIP,IAAU,CAC1BQ,QAASR,EAAMS,KACfC,SAAUV,EAAMW,YACbX,MAGPxD,EAASyD,GAEFA,IACR,IAEGW,EAASjD,EAACkD,GAAOC,UAAW,OAAQ1B,QAASA,EAAS2B,KAAK,SAASC,QAAQ,UAAShC,SAAEF,IAM7F,MAJwB,mBAAbE,IACPA,EAAWA,EAAS,CAAE4B,SAAQxB,aAG3BzB,EAACsD,EACJ,CAAA1C,IAAKA,EACLU,YAAaA,EACbL,SAAUY,EACVc,gBAAiBA,EACjBY,iBAAe,EACfC,YAAU,KACNrE,EACJ4B,SAAUvB,EACV0B,SAAUwB,EACV3D,QAASA,WAERsC,GAAYrB,SAAKmD,UAAU,SACvB9B,SAAA4B,KAEE"}