@topthink/components 1.0.35 → 1.0.37

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.
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-content";import{jsx as r,jsxs as n,Fragment as o}from"react/jsx-runtime";import{Alert as i,Spinner as a,Card as c,Pagination as s,Button as l,OverlayTrigger as d,Tooltip as u,Form as p,Table as m,Modal as h}from"react-bootstrap";import f from"rc-notification";import g,{css as y}from"styled-components";export{StyleSheetManager,createGlobalStyle,css,keyframes,default as styled}from"styled-components";import v from"classnames";import*as b from"react";import{Children as w,useState as x,useEffect as C,useMemo as k,useCallback as S,createContext as z,forwardRef as N,useContext as j,useRef as E,createElement as P,useImperativeHandle as O,Fragment as B}from"react";import $ from"rc-steps";import"rc-steps/assets/index.css";import{uniqueId as D,mapValues as V,debounce as H,values as M}from"lodash";import T from"axios";import A from"query-string";import*as L from"retry-axios";import q from"@babel/runtime/helpers/defineProperty";import F,{getRegistry as U}from"@topthink/json-form";import _ from"rc-table";import{unstable_batchedUpdates as I}from"react-dom";import{useUrlSearchParams as K}from"use-url-search-params";import{useAsyncCallback as R}from"react-async-hook";export{useAsync,useAsyncCallback}from"react-async-hook";const G=t(e),Y={confirmButtonText:"确定",cancelButtonText:"取消"},J={confirm:async e=>{const{isConfirmed:t}=await G.fire({...Y,icon:"warning",showCancelButton:!0,...e,async preConfirm(t){if(e.preConfirm)try{return await e.preConfirm(t)}catch(e){return e instanceof Error&&G.showValidationMessage(e.message),!1}return!0}});return t},success:e=>{G.fire({...Y,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{G.fire({...Y,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{G.close(e)},defaults:Y};let Q;const W={};const X=e=>{let{type:t,...n}=e;!function(e){if(Q)return e(Q);f.newInstance({...W,prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(t=>{Q?e(Q):(Q=t,e(t))}))}((e=>{n.duration=3;let o=t;if("error"===t)o="danger",n.duration=n.closable?0:5;n.content=r(i,{variant:o,children:n.content}),e.notice(n)}))},Z=["error","success","info"].reduce(((e,t)=>(e[t]=(e,r)=>{X({...r,type:t,content:e})},e)),{});Z.defaults=W;const ee=g.div`
1
+ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-content";import{jsx as r,jsxs as n,Fragment as o}from"react/jsx-runtime";import{Alert as i,Spinner as a,Card as c,Pagination as s,Button as l,OverlayTrigger as d,Tooltip as u,Modal as h,Form as p,Table as m}from"react-bootstrap";import f from"rc-notification";import g,{css as y}from"styled-components";export{StyleSheetManager,createGlobalStyle,css,keyframes,default as styled}from"styled-components";import v from"classnames";import*as b from"react";import{Children as w,useState as x,useEffect as C,useMemo as k,useCallback as S,createContext as z,forwardRef as N,useContext as j,useRef as E,Fragment as P,createElement as B,useImperativeHandle as O}from"react";import T from"rc-steps";import"rc-steps/assets/index.css";import{uniqueId as $,mapValues as D,debounce as H,values as V}from"lodash";import M from"axios";import A from"query-string";import*as L from"retry-axios";import F from"@babel/runtime/helpers/defineProperty";import q,{getRegistry as U}from"@topthink/json-form";import _ from"rc-table";import{unstable_batchedUpdates as I}from"react-dom";import{useUrlSearchParams as K}from"use-url-search-params";import{useAsyncCallback as R}from"react-async-hook";export{useAsync,useAsyncCallback}from"react-async-hook";const G=t(e),Y={confirmButtonText:"确定",cancelButtonText:"取消"},J={confirm:async e=>{const{isConfirmed:t}=await G.fire({...Y,icon:"warning",showCancelButton:!0,...e,async preConfirm(t){if(e.preConfirm)try{return await e.preConfirm(t)}catch(e){return e instanceof Error&&G.showValidationMessage(e.message),!1}return!0}});return t},success:e=>{G.fire({...Y,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{G.fire({...Y,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{G.close(e)},defaults:Y};let Q;const W={};const X=e=>{let{type:t,...n}=e;!function(e){if(Q)return e(Q);f.newInstance({...W,prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(t=>{Q?e(Q):(Q=t,e(t))}))}((e=>{n.duration=3;let o=t;if("error"===t)o="danger",n.duration=n.closable?0:5;n.content=r(i,{variant:o,children:n.content}),e.notice(n)}))},Z=["error","success","info"].reduce(((e,t)=>(e[t]=(e,r)=>{X({...r,type:t,content:e})},e)),{});Z.defaults=W;const ee=g.div`
2
2
  padding: 48px 32px;
3
3
  `,te=g.div`
4
4
  margin-bottom: 24px;
@@ -39,7 +39,7 @@ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-c
39
39
  `;function ce(e){let{loading:t=!0,children:o,variant:i="primary",animation:c="border",wrap:s,...l}=e;return t?(o&&(o=r("p",{className:"mt-3 text-secondary",children:o})),o=n(ae,{inverted:!0,active:!0,children:[r(a,{animation:c,variant:i,...l}),o]}),s?r(se,{$height:"number"==typeof s?s:150,children:o}):o):null}const se=g.div`
40
40
  position: relative;
41
41
  height: ${e=>`${e.$height}px`};
42
- `;function le(e){let{children:t,title:i,className:a,...s}=e;return r(c,{className:v("border-0 shadow-sm mb-3",a),...s,children:n("div",{className:"card-body",children:[i&&n(o,{children:[r("h5",{children:i}),r("hr",{})]}),t]})})}function de(e){let{errors:t}=e;return t?r(i,{variant:"danger",children:r("ul",{className:"mb-0",children:"string"==typeof t?r("li",{children:t}):Object.entries(t).map((e=>{let[t,n]=e;return r("li",{children:n},t)}))})}):null}function ue(e){let{children:t,className:n,size:o="small",direction:i="horizontal"}=e;"string"==typeof o&&(o={small:8,middle:16,large:24}[o]);const a=w.map(t,(e=>{if(e)return r(me,{children:e})}));return r(pe,{className:n,$direction:i,$size:o,children:a})}const pe=g.div`
42
+ `;function le(e){let{children:t,title:i,className:a,...s}=e;return r(c,{className:v("border-0 shadow-sm mb-3",a),...s,children:n("div",{className:"card-body",children:[i&&n(o,{children:[r("h5",{children:i}),r("hr",{})]}),t]})})}function de(e){let{errors:t}=e;return t?r(i,{variant:"danger",children:r("ul",{className:"mb-0",children:"string"==typeof t?r("li",{children:t}):Object.entries(t).map((e=>{let[t,n]=e;return r("li",{children:n},t)}))})}):null}function ue(e){let{children:t,className:n,size:o="small",direction:i="horizontal"}=e;"string"==typeof o&&(o={small:8,middle:16,large:24}[o]);const a=w.map(t,(e=>{if(e)return r(pe,{children:e})}));return r(he,{className:n,$direction:i,$size:o,children:a})}const he=g.div`
43
43
  display: inline-flex;
44
44
  align-items: center;
45
45
  gap: ${e=>e.$size}px;
@@ -49,9 +49,9 @@ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-c
49
49
  flex-direction: column;
50
50
  align-items: inherit;
51
51
  `}
52
- `,me=g.div`
52
+ `,pe=g.div`
53
53
 
54
- `;var he;function fe(){return fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},fe.apply(this,arguments)}const ge=e=>b.createElement("svg",fe({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),he||(he=b.createElement("path",{d:"M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696c-12.608-12.416-32.864-12.288-45.28.32-12.416 12.576-12.256 32.864.352 45.248l256.48 252.672c.096.096.224.128.32.224s.128.224.224.32c2.016 1.92 4.448 3.008 6.784 4.288 1.152.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-.832 12.288-2.496 1.312-.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672.096-.096.128-.256.224-.352.064-.096.192-.128.288-.224L889.28 343.424c12.16-12.832 11.488-33.088-1.376-45.216z"})));function ye(e){return r(ve,{icons:{finish:r(ge,{}),error:r(o,{})},...e})}ye.Step=$.Step;const ve=g($)`
54
+ `;var me;function fe(){return fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},fe.apply(this,arguments)}const ge=e=>b.createElement("svg",fe({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),me||(me=b.createElement("path",{d:"M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696c-12.608-12.416-32.864-12.288-45.28.32-12.416 12.576-12.256 32.864.352 45.248l256.48 252.672c.096.096.224.128.32.224s.128.224.224.32c2.016 1.92 4.448 3.008 6.784 4.288 1.152.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-.832 12.288-2.496 1.312-.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672.096-.096.128-.256.224-.352.064-.096.192-.128.288-.224L889.28 343.424c12.16-12.832 11.488-33.088-1.376-45.216z"})));function ye(e){return r(ve,{icons:{finish:r(ge,{}),error:r(o,{})},...e})}ye.Step=T.Step;const ve=g(T)`
55
55
  .rc-steps-item-icon {
56
56
  display: inline-flex;
57
57
  align-items: center;
@@ -83,13 +83,13 @@ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-c
83
83
  }
84
84
  }
85
85
 
86
- `;function be(){}function we(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function xe(e){let{total:t=0,onChange:n=be,defaultCurrent:o=1,defaultPageSize:i=10,className:a,...c}=e;const[l,d]=x(o),[u,p]=x(i);C((()=>{we(c.current)&&d(c.current)}),[c.current]),C((()=>{we(c.pageSize)&&p(c.pageSize)}),[c.pageSize]);const m=k((()=>Math.floor((t-1)/u)+1),[t,u]),h=S((e=>()=>{e!==l&&(d(e),n(e,u))}),[n,l,u]),f=l-1>0?l-1:0,g=l+1<m?l+1:m,y=[];let v=null,b=null,w=null,z=null;if(m<=7)for(let e=1;e<=m;e+=1){const t=l===e;y.push(r(s.Item,{active:t,onClick:h(e),children:e},e))}else{z=r(s.Last,{onClick:h(m)},"last"),w=r(s.First,{onClick:h(1)},"first"),v=r(s.Prev,{onClick:h(f)},"prev"),b=r(s.Next,{onClick:h(g)},"next");let e=Math.max(1,l-2),t=Math.min(l+2,m);l-1<=2&&(t=5),m-l<=2&&(e=m-4);for(let n=e;n<=t;n+=1){const e=l===n;y.push(r(s.Item,{active:e,onClick:h(n),children:n},n))}l-1>=4&&3!==l&&y.unshift(v),m-l>=4&&l!==m-2&&y.push(b),1!==e&&y.unshift(w),t!==m&&y.push(z)}return r(s,{className:a,children:y})}function Ce(e){let{className:t,value:n,locale:i="zh-CN",currency:a=!0,options:c={}}=e;const s=k((()=>{let e;return e=a?{style:"currency",currency:"CNY"}:{minimumFractionDigits:2},new Intl.NumberFormat(i,{...e,...c})}),[a,i,c]);return t?r("span",{className:t,children:s.format(n)}):r(o,{children:s.format(n)})}function ke(e){let{loading:t,disabled:n,children:o,...i}=e;return r(l,{...i,disabled:t||n,children:t?"Loading…":o})}function Se(e){let{tooltip:t,children:n,placement:o="bottom"}=e;return r(d,{placement:o,overlay:r(u,{id:D(),children:t}),children:n})}const ze=z(!1),Ne=N(((e,t)=>{let{loading:i,percent:c,disabled:s,children:d,tooltip:u,variant:p,...m}=e;j(ze)&&!p&&(p="link"),i&&(s=!0,d=n(o,{children:[r(a,{ref:t,as:"span",size:"sm",role:"status","aria-hidden":"true",animation:"border"}),c?n("span",{className:"ms-2",children:[c,"%"]}):null]}));const h=r(l,{ref:t,...m,variant:p,disabled:s,children:d});return u?r(Se,{tooltip:u,children:r("span",{className:"d-inline-block",children:h})}):h}));class je extends Error{constructor(e){super("Unauthorized"),q(this,"url",void 0),this.url=e}}L.attach(),T.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{let{config:t,response:r}=e;return!(t.raxConfig?.retryDecider&&!t.raxConfig.retryDecider())&&("GET"===t.method?.toUpperCase()&&449===r?.status)}},T.defaults.maxContentLength=1/0,T.defaults.maxBodyLength=1/0,T.defaults.baseURL="/api",T.defaults.authTokenName="authorization",T.interceptors.request.use((e=>{const t=e.authTokenName;if(t){const r=localStorage.getItem(t);r&&(e.headers={...e.headers,Authorization:`Bearer ${r}`})}return e}),(e=>Promise.reject(e)));const Ee=e=>e&&"object"==typeof e;T.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(T.isAxiosError(e)&&e.response){const{data:t,status:r}=e.response;401===r?(e.errors="Unauthorized",Ee(t)&&t.url&&(e=new je(t.url)),Z.error("Unauthorized")):Ee(t)?422===r?e.errors=t:"message"in t&&(e.errors=t.message):e.errors=t}return Promise.reject(e)}));const Pe=T.isAxiosError,Oe=e=>{if(!T.isAxiosError(e))throw e;{let t=e.errors;"string"!=typeof e.errors&&(t=Object.values(e.errors).join("<br />")),J.error({title:t})}},Be=async function(e){e="string"==typeof e?{url:e}:e;const{data:t}=await T.request({paramsSerializer:function(e){return A.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return t};Be.defaults=T.defaults,Be.interceptors=T.interceptors;function $e(e){const t=(()=>{const e=E(!1);return C((()=>(e.current=!1,()=>{e.current=!0})),[]),e})(),[r,n]=x(e);return[r,S((e=>{t.current||n(e)}),[])]}function De(e){let{url:t,method:r,confirm:n,onSuccess:o,children:i,disabled:a,as:c=Ne,...s}=e;const[l,d]=$e(!1),u=S((async e=>{e.preventDefault();try{if(d(!0),n&&!await J.confirm({text:n}))return;const e="string"==typeof t?{url:t,method:r}:{method:r,...t},i=await Be(e);o&&o(i)}catch(e){Oe(e)}finally{d(!1)}}),[t,r,d]);return P(c,{...s,disabled:a||l,onClick:u},i)}const Ve=require("ajv-i18n/localize/zh"),He={upload:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onUpload=async e=>{const r=new FormData;r.set("file",e);const{url:n}=await Be({url:t.endpoint,method:"post",data:r});return n}),r(o.upload,{...n,options:t})},editor:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onUpload=async e=>{const t=new FormData;t.set("file",e);const{url:r}=await Be({url:n.options.endpoint,method:"post",data:t});return r}),r(o.editor,{...n,options:t})},typeahead:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onSearch=async e=>{let{value:t,query:r}=e;return await Be({url:n.options.endpoint,params:{value:t,query:r}})}),r(o.typeahead,{...n,options:t})}},Me=N(((e,t)=>{let{action:n,method:o="post",onSuccess:i,formData:a,onSubmitting:c,onSubmit:s,onChange:l,submitText:d="提交",transformData:u,children:p,...m}=e;const[h,f]=x(),[g,y]=$e(!1),[v,b]=x(a),w=S((async(e,t)=>{if(!g)try{if(y(!0),c&&c(!0),n){let{formData:t}=e;u&&(t=u(t));try{const e=await Be({url:n,method:o,data:t});return f(void 0),i&&await i(e),e}catch(e){if(!T.isAxiosError(e))throw e;f((e=>{const t=e.errors;return"string"==typeof t?{__errors:[t]}:V(t,(e=>({__errors:[e]})))})(e))}}else if(s)return await s(e,t)}finally{y(!1),c&&c(!1)}}),[n,o,s]),C=S((e=>{const{formData:t}=e;b(t),l&&l(e)}),[b,l]),k=S((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),Ve(e),e)),[]),z=r(Ne,{className:"px-4",loading:g,type:"submit",variant:"primary",children:d});return"function"==typeof p&&(p=p({submit:z,loading:g})),r(F,{ref:t,extraErrors:h,onSubmit:w,transformErrors:k,noHtml5Validate:!0,noValidate:!0,...m,formData:v,onChange:C,widgets:He,children:p||r("div",{className:"col-12",children:z})})})),Te=function(e){let{indeterminate:t=!1,...n}=e;const o=E(null);return C((()=>{o.current&&(o.current.indeterminate=t)}),[t]),r("input",{ref:o,...n,className:"form-check-input",type:"checkbox"})};var Ae;function Le(){return Le=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Le.apply(this,arguments)}const qe=e=>b.createElement("svg",Le({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),Ae||(Ae=b.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zM511.78 714.496c22.71 0 36.425-15.854 36.425-40.704V547.365H682.35c24.009 0 40.722-12.874 40.722-35.584 0-23.132-15.854-36.426-40.722-36.426H548.206V340.773c0-24.85-13.715-40.704-36.425-40.704s-35.566 16.713-35.566 40.722v134.583H342.49c-24.85 0-41.142 13.275-41.142 36.407 0 22.71 17.152 35.584 41.142 35.584h133.724v126.427c0 23.99 12.855 40.704 35.566 40.704z"})));var Fe;function Ue(){return Ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Ue.apply(this,arguments)}const _e=e=>b.createElement("svg",Ue({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),Fe||(Fe=b.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zm86.582-289.719h344.576c23.991 0 40.704-12.855 40.704-35.566 0-23.15-15.433-36.425-40.704-36.425H339.931c-24.868 0-40.722 13.276-40.722 36.425 0 22.711 16.713 35.566 40.722 35.566z"})));function Ie(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=E(e);return C((()=>{r.current=e})),S((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.current?.(...t)}),t)}function Ke(e){const{value:t,defaultValue:r,onChange:n,shouldUpdate:o=((e,t)=>e!==t)}=e,i=Ie(n),a=Ie(o),[c,s]=x(r),l=void 0!==t,d=l?t:c,u=Ie((e=>{const t="function"==typeof e?e(d):e;a(d,t)&&(l||s(t),i(t))}),[l,i,d,a]);return[d,u]}function Re(e,t,r){const n=E(e),o=E(H(e,t,r));return C((()=>{n.current=e})),C((()=>{o.current=H((function(){n.current(...arguments)}),t,r)}),[t,r]),o.current}function Ge(e){let{keyword:t,onKeywordChange:n}=e;const[o,i]=x(t),a=Re(n,500);C((()=>{i(t)}),[t]);const c=S((e=>{i(e.target.value),a(e.target.value)}),[a,i]);return r(p.Control,{value:o,onChange:c,type:"search",placeholder:"Search..."})}const Ye=g.thead`
86
+ `;function be(){}function we(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function xe(e){let{total:t=0,onChange:n=be,defaultCurrent:o=1,defaultPageSize:i=10,className:a,...c}=e;const[l,d]=x(o),[u,h]=x(i);C((()=>{we(c.current)&&d(c.current)}),[c.current]),C((()=>{we(c.pageSize)&&h(c.pageSize)}),[c.pageSize]);const p=k((()=>Math.floor((t-1)/u)+1),[t,u]),m=S((e=>()=>{e!==l&&(d(e),n(e,u))}),[n,l,u]),f=l-1>0?l-1:0,g=l+1<p?l+1:p,y=[];let v=null,b=null,w=null,z=null;if(p<=7)for(let e=1;e<=p;e+=1){const t=l===e;y.push(r(s.Item,{active:t,onClick:m(e),children:e},e))}else{z=r(s.Last,{onClick:m(p)},"last"),w=r(s.First,{onClick:m(1)},"first"),v=r(s.Prev,{onClick:m(f)},"prev"),b=r(s.Next,{onClick:m(g)},"next");let e=Math.max(1,l-2),t=Math.min(l+2,p);l-1<=2&&(t=5),p-l<=2&&(e=p-4);for(let n=e;n<=t;n+=1){const e=l===n;y.push(r(s.Item,{active:e,onClick:m(n),children:n},n))}l-1>=4&&3!==l&&y.unshift(v),p-l>=4&&l!==p-2&&y.push(b),1!==e&&y.unshift(w),t!==p&&y.push(z)}return r(s,{className:a,children:y})}function Ce(e){let{className:t,value:n,locale:i="zh-CN",currency:a=!0,options:c={}}=e;const s=k((()=>{let e;return e=a?{style:"currency",currency:"CNY"}:{minimumFractionDigits:2},new Intl.NumberFormat(i,{...e,...c})}),[a,i,c]);return t?r("span",{className:t,children:s.format(n)}):r(o,{children:s.format(n)})}function ke(e){let{loading:t,disabled:n,children:o,...i}=e;return r(l,{...i,disabled:t||n,children:t?"Loading…":o})}function Se(e){let{tooltip:t,children:n,placement:o="bottom"}=e;return r(d,{placement:o,overlay:r(u,{id:$(),children:t}),children:n})}const ze=z(!1),Ne=N(((e,t)=>{let{loading:i,percent:c,disabled:s,children:d,tooltip:u,variant:h,...p}=e;j(ze)&&!h&&(h="link"),i&&(s=!0,d=n(o,{children:[r(a,{ref:t,as:"span",size:"sm",role:"status","aria-hidden":"true",animation:"border"}),c?n("span",{className:"ms-2",children:[c,"%"]}):null]}));const m=r(l,{ref:t,...p,variant:h,disabled:s,children:d});return u?r(Se,{tooltip:u,children:r("span",{className:"d-inline-block",children:m})}):m}));class je extends Error{constructor(e){super("Unauthorized"),F(this,"url",void 0),this.url=e}}L.attach(),M.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{let{config:t,response:r}=e;return!(t.raxConfig?.retryDecider&&!t.raxConfig.retryDecider())&&("GET"===t.method?.toUpperCase()&&449===r?.status)}},M.defaults.maxContentLength=1/0,M.defaults.maxBodyLength=1/0,M.defaults.baseURL="/api",M.defaults.authTokenName="authorization",M.interceptors.request.use((e=>{const t=e.authTokenName;if(t){const r=localStorage.getItem(t);r&&(e.headers={Authorization:`Bearer ${r}`,...e.headers})}return e}),(e=>Promise.reject(e)));const Ee=e=>e&&"object"==typeof e;M.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(M.isAxiosError(e)&&e.response){const{data:t,status:r}=e.response;401===r?(e.errors="Unauthorized",Ee(t)&&t.url&&(e=new je(t.url)),Z.error("Unauthorized")):Ee(t)?422===r?e.errors=t:"message"in t&&(e.errors=t.message):e.errors=t}return Promise.reject(e)}));const Pe=M.isAxiosError,Be=e=>{if(!M.isAxiosError(e))throw e;{let t=e.errors;"string"!=typeof e.errors&&(t=Object.values(e.errors).join("<br />")),Z.error(t)}},Oe=async function(e){e="string"==typeof e?{url:e}:e;const{data:t}=await M.request({paramsSerializer:function(e){return A.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return t};Oe.defaults=M.defaults,Oe.interceptors=M.interceptors;function Te(e){const t=(()=>{const e=E(!1);return C((()=>(e.current=!1,()=>{e.current=!0})),[]),e})(),[r,n]=x(e);return[r,S((e=>{t.current||n(e)}),[])]}const $e=z({});function De(e){return t=>{let{resolve:n,destroy:o,message:i}=t;const[a,c]=function(e){const t=E(null),[r,n]=x(e);return C((()=>{t.current&&(t.current(),t.current=null)}),[r]),[r,(e,r)=>{t.current="function"==typeof r?r:null,n(e)}]}(!0),s=j($e),l=S((e=>{c(!1,(()=>{n(e)}))}),[c,n]),d=k((()=>({show:a,onHide:()=>l(),onExited:()=>o(),container:s.container})),[a,l,o]);return r(e,{resolve:l,state:d,message:i})}}function He(e){return t=>new Promise((n=>{const o=r(e,{resolve:n,destroy:()=>{Le(o)},message:t});Ae(o)}))}let Ve=()=>{},Me=new Set;const Ae=e=>{Me=new Set(Me),Me.add(e),Ve(Me)},Le=e=>{Me=new Set(Me),Me.delete(e),Ve(Me)};const Fe=function(e){let{state:t,message:{title:o,message:i,okText:a,cancelText:c},resolve:s}=e;return n(h,{...t,children:[r(h.Header,{children:r(h.Title,{as:"h5",children:o||"确认"})}),r(h.Body,{children:i}),n(h.Footer,{children:[r(Ne,{variant:"secondary",onClick:()=>s(),children:c||"取消"}),r(Ne,{onClick:()=>s(!0),children:a||"确定"})]})]})};const qe=e=>{let{header:t,children:i,footer:a,closable:c=!0,show:s,cancelText:l="取消",okText:d="确定",onOk:u,onCancel:p,onHide:m,okButtonProps:f,bodyAs:g,headerAs:y="h5",confirmLoading:v=!1,...b}=e;const[w,C]=x(!1),S=k((()=>r(Ne,{loading:w||v,variant:"primary",onClick:async e=>{C(!0);try{await(u?.(e)),e.defaultPrevented||m?.()}finally{C(!1)}},...f,children:d})),[f,d,u,m,w,v]),z=k((()=>r(Ne,{variant:"secondary",onClick:e=>{p?.(e),e.defaultPrevented||m?.()},children:l})),[p,m,l]);switch(typeof a){case"undefined":a=n(o,{children:[z,S]});break;case"function":a=a({okButton:S,cancelButton:z})}return n(h,{...b,onHide:m,show:s,children:[t&&r(h.Header,{closeButton:c,children:r(h.Title,{as:y,children:t})}),r(h.Body,{as:g,children:i}),a&&r(h.Footer,{children:a})]})};function Ue(e){let{url:t,method:r,confirm:n,onSuccess:o,children:i,disabled:a,as:c=Ne,...s}=e;const[l,d]=Te(!1),u=S((async e=>{e.preventDefault();try{if(d(!0),n&&!await qe.confirm({message:n}))return;const e="string"==typeof t?{url:t,method:r}:{method:r,...t},i=await Oe(e);o&&o(i)}catch(e){Be(e)}finally{d(!1)}}),[t,r,d]);return B(c,{...s,disabled:a||l,onClick:u},i)}qe.Message=function(e){const[t,n]=x(Me);return C((()=>{Ve=n}),[]),r($e.Provider,{value:e,children:Array.from(t).map(((e,t)=>r(P,{children:e},`message-${t}`)))})},qe.confirm=function(e){return He(De(Fe))(e)},qe.show=function(e){return He(De(e))()};const _e=require("ajv-i18n/localize/zh"),Ie={upload:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onUpload=async e=>{const r=new FormData;r.set("file",e);const{url:n}=await Oe({url:t.endpoint,method:"post",data:r});return n}),r(o.upload,{...n,options:t})},editor:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onUpload=async e=>{const t=new FormData;t.set("file",e);const{url:r}=await Oe({url:n.options.endpoint,method:"post",data:t});return r}),r(o.editor,{...n,options:t})},typeahead:function(e){let{options:t,...n}=e;const{widgets:o}=U();return t.endpoint&&(t.onSearch=async e=>{let{value:t,query:r}=e;return await Oe({url:n.options.endpoint,params:{value:t,query:r}})}),r(o.typeahead,{...n,options:t})}},Ke=N(((e,t)=>{let{action:n,method:o="post",onSuccess:i,formData:a,onSubmitting:c,onSubmit:s,onChange:l,submitText:d="提交",transformData:u,children:h,...p}=e;const[m,f]=x(),[g,y]=Te(!1),[v,b]=x(a),w=S((async(e,t)=>{if(!g)try{if(y(!0),c&&c(!0),n){let{formData:t}=e;u&&(t=u(t));try{const e=await Oe({url:n,method:o,data:t});return f(void 0),i&&await i(e),e}catch(e){if(!M.isAxiosError(e))throw e;f((e=>{const t=e.errors;return"string"==typeof t?{__errors:[t]}:D(t,(e=>({__errors:[e]})))})(e))}}else if(s)return await s(e,t)}finally{y(!1),c&&c(!1)}}),[n,o,s]),C=S((e=>{const{formData:t}=e;b(t),l&&l(e)}),[b,l]),k=S((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),_e(e),e)),[]),z=r(Ne,{className:"px-4",loading:g,type:"submit",variant:"primary",children:d});return"function"==typeof h&&(h=h({submit:z,loading:g})),r(q,{ref:t,extraErrors:m,onSubmit:w,transformErrors:k,noHtml5Validate:!0,noValidate:!0,...p,formData:v,onChange:C,widgets:Ie,children:h||r("div",{className:"col-12",children:z})})})),Re=function(e){let{indeterminate:t=!1,...n}=e;const o=E(null);return C((()=>{o.current&&(o.current.indeterminate=t)}),[t]),r("input",{ref:o,...n,className:"form-check-input",type:"checkbox"})};var Ge;function Ye(){return Ye=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Ye.apply(this,arguments)}const Je=e=>b.createElement("svg",Ye({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),Ge||(Ge=b.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zM511.78 714.496c22.71 0 36.425-15.854 36.425-40.704V547.365H682.35c24.009 0 40.722-12.874 40.722-35.584 0-23.132-15.854-36.426-40.722-36.426H548.206V340.773c0-24.85-13.715-40.704-36.425-40.704s-35.566 16.713-35.566 40.722v134.583H342.49c-24.85 0-41.142 13.275-41.142 36.407 0 22.71 17.152 35.584 41.142 35.584h133.724v126.427c0 23.99 12.855 40.704 35.566 40.704z"})));var Qe;function We(){return We=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},We.apply(this,arguments)}const Xe=e=>b.createElement("svg",We({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),Qe||(Qe=b.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zm86.582-289.719h344.576c23.991 0 40.704-12.855 40.704-35.566 0-23.15-15.433-36.425-40.704-36.425H339.931c-24.868 0-40.722 13.276-40.722 36.425 0 22.711 16.713 35.566 40.722 35.566z"})));function Ze(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=E(e);return C((()=>{r.current=e})),S((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.current?.(...t)}),t)}function et(e){const{value:t,defaultValue:r,onChange:n,shouldUpdate:o=((e,t)=>e!==t)}=e,i=Ze(n),a=Ze(o),[c,s]=x(r),l=void 0!==t,d=l?t:c,u=Ze((e=>{const t="function"==typeof e?e(d):e;a(d,t)&&(l||s(t),i(t))}),[l,i,d,a]);return[d,u]}function tt(e,t,r){const n=E(e),o=E(H(e,t,r));return C((()=>{n.current=e})),C((()=>{o.current=H((function(){n.current(...arguments)}),t,r)}),[t,r]),o.current}function rt(e){let{keyword:t,onKeywordChange:n}=e;const[o,i]=x(t),a=tt(n,500);C((()=>{i(t)}),[t]);const c=S((e=>{i(e.target.value),a(e.target.value)}),[a,i]);return r(p.Control,{value:o,onChange:c,type:"search",placeholder:"Search..."})}const nt=g.thead`
87
87
  th {
88
88
  padding: 0.5rem 0.5rem;
89
89
  border-bottom-width: 1px;
90
90
  border-color: var(--bs-border-color);
91
91
  }
92
- `,Je={table:e=>r(m,{...e,className:"mb-0 align-middle table-hover"}),header:{wrapper:e=>r(Ye,{...e})}},Qe=g.a`
92
+ `,ot={table:e=>r(m,{...e,className:"mb-0 align-middle table-hover"}),header:{wrapper:e=>r(nt,{...e})}},it=g.a`
93
93
  cursor: pointer;
94
94
  width: 28px;
95
95
  height: 28px;
@@ -97,21 +97,21 @@ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-c
97
97
  align-items: center;
98
98
  justify-content: center;
99
99
  vertical-align: middle;
100
- `,We=function(e){let{record:t,expanded:n,expandable:o,onExpand:i}=e;return r(Qe,o?{onClick:e=>i(t,e),children:r(n?_e:qe,{})}:{})},Xe=g(xe)`
100
+ `,at=function(e){let{record:t,expanded:n,expandable:o,onExpand:i}=e;return r(it,o?{onClick:e=>i(t,e),children:r(n?Xe:Je,{})}:{})},ct=g(xe)`
101
101
  margin-bottom: 0;
102
102
  justify-content: flex-end;
103
103
  margin-top: 1rem;
104
- `;const Ze=N(((e,t)=>{let{source:i,rowKey:a="id",paginate:c=!0,toolBarRender:s,columns:l=[],search:d,rowSelection:u,card:p=!0,expandable:m={},sync:h=!1,...f}=e;const[g,y]=x([]),[v,b]=x(c?{total:0,current:1,pageSize:10}:null),[w,z]=x(!0),[N,j]=K({}),[P,B]=Ke({value:h?N.q||"":void 0,defaultValue:"",onChange:e=>{h&&j({q:e||void 0})}}),[$,D]=Ke({value:h?N.page||1:void 0,defaultValue:1,onChange:e=>{h&&j({page:e||void 0})}}),V=S((async()=>{z(!0);try{let e;const t={q:P,page:$>1?$:void 0};e="string"==typeof i?await Be({url:i,params:t}):await i(t),c&&function(e){return"current_page"in e}(e)&&(b({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),y(e)}catch(e){}finally{z(!1)}}),[i,y,P,$]);C((()=>{V()}),[P,$]);const H=E({reload:V});C((()=>{H.current={reload:V}}),[V]),O(t,(()=>H.current));const[M]=function(e,t,n){const[o,i]=x((()=>new Set(e?.selectedRowKeys||[]))),a=e=>"string"==typeof t?e[t]:t(e),c=e=>n.find((t=>a(t)===e)),s=S((t=>{i(t);const r=Array.from(t),n=r.map((function(e){return c(e)}));e?.onChange&&e?.onChange(r,n)}),[c]);return[S((t=>{if(!e)return t;const i=n.map(a),c=i.every((function(e){return o.has(e)})),l=i.some((function(e){return o.has(e)}));return[{key:"selection",title:r(Te,{checked:c,indeterminate:!c&&l,onChange:()=>{c?i.forEach((function(e){o.delete(e)})):i.forEach((function(e){o.add(e)})),s(new Set(o))}}),width:30,align:"center",render(e){let{record:t}=e;const n=a(t),i=o.has(n);return r(Te,{checked:i,onChange:()=>{i?o.delete(n):o.add(n),s(new Set(o))}})}},...t]}),[n,e,o])]}(u,a,g),T=k((()=>M(l).map((e=>{let{render:t,valueType:n,...o}=e;const i={...o};return t?i.render=(e,r,n)=>t({value:e,record:r,index:n,action:H.current}):"currency"===n&&(i.render=e=>r(Ce,{value:e})),i}))),[l,M,H]),A=n(o,{children:[r(ce,{loading:w}),!1!==s&&n(et,{children:[r(rt,{size:12,children:s&&s(H.current)}),n(tt,{size:12,children:[d&&r(Ge,{keyword:P,onKeywordChange:e=>{I((()=>{D(1),B(e)}))}}),r(nt,{onClick:H.current.reload,children:r("i",{className:"bi bi-arrow-repeat"})})]})]}),r(ze.Provider,{value:!0,children:r(_,{...f,expandable:{expandIcon:We,...m},rowKey:a,columns:T,components:Je,data:g})}),v&&r(Xe,{...v,onChange:D})]});return p?r(le,{children:A}):A})),et=g.div`
104
+ `;const st=N(((e,t)=>{let{source:i,rowKey:a="id",paginate:c=!0,toolBarRender:s,columns:l=[],search:d,rowSelection:u,card:h=!0,expandable:p={},sync:m=!1,...f}=e;const[g,y]=x([]),[v,b]=x(c?{total:0,current:1,pageSize:10}:null),[w,z]=x(!0),[N,j]=K({}),[P,B]=et({value:m?N.q||"":void 0,defaultValue:"",onChange:e=>{m&&j({q:e||void 0})}}),[T,$]=et({value:m?N.page||1:void 0,defaultValue:1,onChange:e=>{m&&j({page:e||void 0})}}),D=S((async()=>{z(!0);try{let e;const t={q:P,page:T>1?T:void 0};e="string"==typeof i?await Oe({url:i,params:t}):await i(t),c&&function(e){return"current_page"in e}(e)&&(b({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),y(e)}catch(e){}finally{z(!1)}}),[i,y,P,T]);C((()=>{D()}),[P,T]);const H=E({reload:D});C((()=>{H.current={reload:D}}),[D]),O(t,(()=>H.current));const[V]=function(e,t,n){const[o,i]=x((()=>new Set(e?.selectedRowKeys||[]))),a=e=>"string"==typeof t?e[t]:t(e),c=e=>n.find((t=>a(t)===e)),s=S((t=>{i(t);const r=Array.from(t),n=r.map((function(e){return c(e)}));e?.onChange&&e?.onChange(r,n)}),[c]);return[S((t=>{if(!e)return t;const i=n.map(a),c=i.every((function(e){return o.has(e)})),l=i.some((function(e){return o.has(e)}));return[{key:"selection",title:r(Re,{checked:c,indeterminate:!c&&l,onChange:()=>{c?i.forEach((function(e){o.delete(e)})):i.forEach((function(e){o.add(e)})),s(new Set(o))}}),width:30,align:"center",render(e){let{record:t}=e;const n=a(t),i=o.has(n);return r(Re,{checked:i,onChange:()=>{i?o.delete(n):o.add(n),s(new Set(o))}})}},...t]}),[n,e,o])]}(u,a,g),M=k((()=>V(l).map((e=>{let{render:t,valueType:n,...o}=e;const i={...o};return t?i.render=(e,r,n)=>t({value:e,record:r,index:n,action:H.current}):"currency"===n&&(i.render=e=>r(Ce,{value:e})),i}))),[l,V,H]),A=n(o,{children:[r(ce,{loading:w}),!1!==s&&n(lt,{children:[r(ut,{size:12,children:s&&s(H.current)}),n(dt,{size:12,children:[d&&r(rt,{keyword:P,onKeywordChange:e=>{I((()=>{$(1),B(e)}))}}),r(ht,{onClick:H.current.reload,children:r("i",{className:"bi bi-arrow-repeat"})})]})]}),r(ze.Provider,{value:!0,children:r(_,{...f,expandable:{expandIcon:at,...p},rowKey:a,columns:M,components:ot,data:g})}),v&&r(ct,{...v,onChange:$})]});return h?r(le,{children:A}):A})),lt=g.div`
105
105
  display: flex;
106
106
  justify-content: space-between;
107
107
  padding-bottom: 1rem;
108
108
  height: 48px;
109
109
  border-bottom: 2px solid #212529;
110
- `,tt=g(ue)`
110
+ `,dt=g(ue)`
111
111
 
112
- `,rt=g(ue)`
112
+ `,ut=g(ue)`
113
113
 
114
- `,nt=g.span`
114
+ `,ht=g.span`
115
115
  cursor: pointer;
116
116
  font-size: 20px;
117
117
  line-height: 1;
@@ -119,5 +119,5 @@ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-c
119
119
  &:hover {
120
120
  color: var(--bs-primary);
121
121
  }
122
- `;let ot=0;function it(){let{onHide:e,onShow:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[r,n]=x(!1),[o,i]=x(`visible-${ot}`),a=S((()=>{n(!1),e&&e()}),[n,e]),c=S((()=>{i("visible-"+ ++ot)}),[i,ot]),s=S((()=>{n(!0),t&&t()}),[n,t]),l={show:r,onHide:a,onExited:c,key:o};return{visible:r,show:s,hide:a,state:l}}const at=z({});function ct(e){return t=>{let{resolve:n,destroy:o,message:i}=t;const[a,c]=function(e){const t=E(null),[r,n]=x(e);return C((()=>{t.current&&(t.current(),t.current=null)}),[r]),[r,(e,r)=>{t.current="function"==typeof r?r:null,n(e)}]}(!0),s=j(at),l=S((e=>{c(!1,(()=>{n(e)}))}),[c,n]),d=k((()=>({show:a,onHide:()=>l(),onExited:()=>o(),container:s.container})),[a,l,o]);return r(e,{resolve:l,state:d,message:i})}}let st=()=>{},lt=new Set;const dt=e=>{lt=new Set(lt),lt.add(e),st(lt)},ut=e=>{lt=new Set(lt),lt.delete(e),st(lt)};const pt=e=>{let{header:t,children:i,footer:a,closable:c=!0,show:s,cancelText:l="取消",okText:d="确定",onOk:u,onCancel:p,onHide:m,okButtonProps:f,bodyAs:g,headerAs:y="h5",confirmLoading:v=!1,...b}=e;const[w,C]=x(!1),S=k((()=>r(Ne,{loading:w||v,variant:"primary",onClick:async e=>{C(!0);try{await(u?.(e)),e.defaultPrevented||m?.()}finally{C(!1)}},...f,children:d})),[f,d,u,m,w,v]),z=k((()=>r(Ne,{variant:"secondary",onClick:e=>{p?.(e),e.defaultPrevented||m?.()},children:l})),[p,m,l]);switch(typeof a){case"undefined":a=n(o,{children:[z,S]});break;case"function":a=a({okButton:S,cancelButton:z})}return n(h,{...b,onHide:m,show:s,children:[t&&r(h.Header,{closeButton:c,children:r(h.Title,{as:y,children:t})}),r(h.Body,{as:g,children:i}),a&&r(h.Footer,{children:a})]})};pt.Message=function(e){const[t,n]=x(lt);return C((()=>{st=n}),[]),r(at.Provider,{value:e,children:Array.from(t).map(((e,t)=>r(B,{children:e},`message-${t}`)))})},pt.show=function(e){return function(e){return t=>new Promise((n=>{const o=r(e,{resolve:n,destroy:()=>{ut(o)},message:t});dt(o)}))}(ct(e))()};const mt=N(((e,t)=>{let{text:i,onOk:a,modalProps:c,children:s,onShow:l,confirmLoading:d,as:u=Ne,...p}=e;const{state:m,show:h,hide:f}=it({onShow:l});O(t,(()=>({close:f})));const g=P(u,{...p,onClick:h},i);return n(o,{children:[g,r(pt,{header:i,...c,...m,confirmLoading:d,onOk:async e=>{if(a){!1===await a()&&e.preventDefault()}},children:s})]})}));function ht(e){let{text:t,onSuccess:o,buttonProps:i,modalProps:a,children:c,...s}=e;const[l,d]=x(!1),u=E(null),p=E(null),m=S((()=>(p.current?.submit(),!1)),[]),h=S((e=>{o&&o(e),u.current?.close()}),[o]);return r(mt,{ref:u,text:t,...i,modalProps:a,onOk:m,confirmLoading:l,children:n(Me,{...s,onSubmitting:d,ref:p,onSuccess:h,children:[c,r("input",{type:"submit",hidden:!0})]})})}function ft(e){let{manual:t,refreshDeps:r,...n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:o,currentParams:i,error:a,...c}=R((async t=>(e="string"==typeof e?{url:e}:e,await Be({...e,...t}))),n);C((()=>{if(!t&&!r)try{o()}catch{}}),[]),C((()=>{r&&s()}),r);const s=S((async()=>{try{i?await o(...i):await o()}catch{}}),[o,i]);if(a&&Pe(a)){const e=a.errors;a=new Error("string"==typeof e?e:M(e).join(""))}return{refresh:s,execute:o,error:a,...c}}export{Ne as Button,le as Card,de as Error,Me as Form,ce as Loader,ke as LoadingButton,J as Message,pt as Modal,mt as ModalButton,ht as ModalForm,Ce as NumberFormat,xe as Pagination,De as RequestButton,ie as Result,ue as Space,ye as Steps,Ze as Table,Z as Toast,Se as Tooltip,je as Unauthorized,Pe as isRequestError,Be as request,Oe as showRequestError,Ke as useControllableState,Re as useDebounce,it as useOverlayState,ft as useRequest,$e as useSafeState};
122
+ `;let pt=0;function mt(){let{onHide:e,onShow:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[r,n]=x(!1),[o,i]=x(`visible-${pt}`),a=S((()=>{n(!1),e&&e()}),[n,e]),c=S((()=>{i("visible-"+ ++pt)}),[i,pt]),s=S((()=>{n(!0),t&&t()}),[n,t]),l={show:r,onHide:a,onExited:c,key:o};return{visible:r,show:s,hide:a,state:l}}const ft=N(((e,t)=>{let{text:i,onOk:a,modalProps:c,children:s,onShow:l,confirmLoading:d,as:u=Ne,...h}=e;const{state:p,show:m,hide:f}=mt({onShow:l});O(t,(()=>({close:f})));const g=B(u,{...h,onClick:m},i);return n(o,{children:[g,r(qe,{header:i,...c,...p,confirmLoading:d,onOk:async e=>{if(a){!1===await a()&&e.preventDefault()}},children:s})]})}));function gt(e){let{text:t,onSuccess:o,buttonProps:i,modalProps:a,children:c,...s}=e;const[l,d]=x(!1),u=E(null),h=E(null),p=S((()=>(h.current?.submit(),!1)),[]),m=S((e=>{o&&o(e),u.current?.close()}),[o]);return r(ft,{ref:u,text:t,...i,modalProps:a,onOk:p,confirmLoading:l,children:n(Ke,{...s,onSubmitting:d,ref:h,onSuccess:m,children:[c,r("input",{type:"submit",hidden:!0})]})})}function yt(e){let{manual:t,refreshDeps:r,...n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:o,currentParams:i,error:a,...c}=R((async t=>(e="string"==typeof e?{url:e}:e,await Oe({...e,...t}))),n);C((()=>{if(!t&&!r)try{o()}catch{}}),[]),C((()=>{r&&s()}),r);const s=S((async()=>{try{i?await o(...i):await o()}catch{}}),[o,i]);if(a&&Pe(a)){const e=a.errors;a=new Error("string"==typeof e?e:V(e).join(""))}return{refresh:s,execute:o,error:a,...c}}export{Ne as Button,le as Card,de as Error,Ke as Form,ce as Loader,ke as LoadingButton,J as Message,qe as Modal,ft as ModalButton,gt as ModalForm,Ce as NumberFormat,xe as Pagination,Ue as RequestButton,ie as Result,ue as Space,ye as Steps,st as Table,Z as Toast,Se as Tooltip,je as Unauthorized,Pe as isRequestError,Oe as request,Be as showRequestError,et as useControllableState,tt as useDebounce,mt as useOverlayState,yt as useRequest,Te as useSafeState};
123
123
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/message.ts","../src/utils/toast.tsx","../src/components/result.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/space.tsx","../src/images/step_check.svg","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/tooltip.tsx","../src/components/table/context.ts","../src/components/button.tsx","../src/errors/unauthorized.ts","../src/request.ts","../src/hooks/use-safe-state.ts","../src/hooks/use-unmounted-ref.ts","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/table/use-selection.tsx","../src/images/plus_square.svg","../src/images/minus_square.svg","../src/hooks/use-callback-ref.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-debounce.ts","../src/components/table/search.tsx","../src/components/table/index.tsx","../src/hooks/use-overlay-state.ts","../src/components/modal/message.tsx","../src/hooks/use-state-with-callback.ts","../src/components/modal/index.tsx","../src/components/modal/show.tsx","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts"],"sourcesContent":["import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions<T = any> extends SweetAlertOptions<T> {\r\n\r\n}\r\n\r\nconst defaultOptions: MessageOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n};\r\n\r\nconst Message = {\r\n confirm: async <T = any>(options: MessageOptions<T>) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options,\r\n async preConfirm(data) {\r\n if (options.preConfirm) {\r\n try {\r\n return await options.preConfirm(data);\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n CustomSwal.showValidationMessage(e.message);\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n success: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'success',\r\n timer: 2000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 5000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n close: (result?: SweetAlertResult) => {\r\n CustomSwal.close(result);\r\n },\r\n defaults: defaultOptions\r\n};\r\n\r\nexport default Message;\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\nimport { NotificationProps } from 'rc-notification/es/Notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nconst defaultOptions: NotificationProps & {\r\n getContainer?: () => HTMLElement;\r\n} = {};\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n ...defaultOptions,\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\nconst types = ['error', 'success', 'info'] as const;\r\n\r\ntype ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {\r\n defaults: typeof defaultOptions;\r\n};\r\n\r\nconst Toast = types.reduce((toast, type) => {\r\n toast[type] = (content: string, options?: NoticeContent) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n return toast;\r\n}, {} as any);\r\n\r\nToast.defaults = defaultOptions;\r\n\r\nexport default Toast as ToastType;\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean | number;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'primary',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap $height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ $height: number }>`\r\n position: relative;\r\n height: ${props => `${props.$height}px`};\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n direction?: 'vertical' | 'horizontal';\r\n className?: string;\r\n}\r\n\r\n\r\nexport default function Space({ children, className, size = 'small', direction = 'horizontal' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container className={className} $direction={direction} $size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ $size: number, $direction: string }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.$size}px;\r\n\r\n ${props => props.$direction === 'vertical' && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: inherit;\r\n `}\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg t='1651217947509' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16' height='16' fill='currentColor'%3e %3cpath d='M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696C170.208 511.872 149.952 512 137.536 524.608c-12.416 12.576-12.256 32.864 0.352 45.248l256.48 252.672c0.096 0.096 0.224 0.128 0.32 0.224 0.096 0.096 0.128 0.224 0.224 0.32 2.016 1.92 4.448 3.008 6.784 4.288 1.152 0.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-0.832 12.288-2.496 1.312-0.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672 0.096-0.096 0.128-0.256 0.224-0.352 0.064-0.096 0.192-0.128 0.288-0.224l449.184-478.208C901.44 330.592 900.768 310.336 887.904 298.208z' p-id='2549'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import RcSteps from 'rc-steps';\r\nimport 'rc-steps/assets/index.css';\r\nimport styled from 'styled-components';\r\nimport { ComponentProps } from 'react';\r\nimport { ReactComponent as CheckIcon } from '../images/step_check.svg';\r\n\r\nexport default function Steps(props: ComponentProps<typeof RcSteps>) {\r\n return <CustomRcSteps\r\n icons={{\r\n finish: <CheckIcon />,\r\n error: <></>\r\n }}\r\n {...props}\r\n />;\r\n}\r\n\r\nSteps.Step = RcSteps.Step;\r\n\r\nconst CustomRcSteps = styled(RcSteps)`\r\n .rc-steps-item-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n & > .rc-steps-icon {\r\n top: 0;\r\n }\r\n }\r\n\r\n .rc-steps-item-process {\r\n .rc-steps-item-icon {\r\n background: var(--bs-primary);\r\n border-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-finish {\r\n .rc-steps-item-icon {\r\n border-color: var(--bs-primary);\r\n\r\n & > .rc-steps-icon {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-title:after {\r\n background-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n`;\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList: ReactNode[] = [];\r\n let jumpPrev: ReactNode = null;\r\n let jumpNext: ReactNode = null;\r\n let firstPager: ReactNode = null;\r\n let lastPager: ReactNode = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n options?: Intl.NumberFormatOptions;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true, options = {} }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let opt;\r\n\r\n if (currency) {\r\n opt = {\r\n style: 'currency',\r\n currency: 'CNY'\r\n };\r\n } else {\r\n opt = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, { ...opt, ...options });\r\n }, [currency, locale, options]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean;\r\n}\r\n\r\nexport default function LoadingButton({ loading, disabled, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading || disabled}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const TableContext = createContext(false);\r\n","import { Button as BsButton, ButtonProps as BsButtonProps, Spinner } from 'react-bootstrap';\r\nimport { forwardRef, useContext } from 'react';\r\nimport Tooltip from './tooltip';\r\nimport { TableContext } from './table/context';\r\n\r\nexport interface ButtonProps extends BsButtonProps {\r\n loading?: boolean;\r\n percent?: number;\r\n tooltip?: string;\r\n}\r\n\r\nconst Button = forwardRef<any, ButtonProps>((\r\n {\r\n loading,\r\n percent,\r\n disabled,\r\n children,\r\n tooltip,\r\n variant,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n\r\n const inTable = useContext(TableContext);\r\n\r\n if (inTable && !variant) {\r\n variant = 'link';\r\n }\r\n\r\n if (loading) {\r\n disabled = true;\r\n children = <>\r\n <Spinner ref={ref} as='span' size='sm' role='status' aria-hidden='true' animation='border' />\r\n {percent ? <span className='ms-2'>{percent}%</span> : null}\r\n </>;\r\n }\r\n\r\n const button = <BsButton ref={ref} {...props} variant={variant} disabled={disabled}>{children}</BsButton>;\r\n\r\n if (tooltip) {\r\n return <Tooltip tooltip={tooltip}>\r\n <span className={'d-inline-block'}>{button}</span>\r\n </Tooltip>;\r\n }\r\n\r\n return button;\r\n});\r\n\r\nexport default Button;\r\n","export default class Unauthorized extends Error {\r\n\r\n url: string;\r\n\r\n constructor(url: string) {\r\n super('Unauthorized');\r\n this.url = url;\r\n }\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Unauthorized from './errors/unauthorized';\r\nimport Toast from './utils/toast';\r\nimport Message from './utils/message';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'retry-axios' {\r\n interface RetryConfig {\r\n retryDecider?: () => boolean;\r\n }\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n authTokenName?: string;\r\n }\r\n}\r\n\r\nrax.attach();\r\n\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: ({ config, response }) => {\r\n if (config.raxConfig?.retryDecider && !config.raxConfig.retryDecider()) {\r\n return false;\r\n }\r\n return config.method?.toUpperCase() === 'GET' && response?.status === 449;\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.defaults.authTokenName = 'authorization';\r\naxios.interceptors.request.use(\r\n config => {\r\n const key = config.authTokenName;\r\n if (key) {\r\n const token = localStorage.getItem(key);\r\n\r\n if (token) {\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: `Bearer ${token}`\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst isRecord = (data: any): data is Record<string, string> => {\r\n return data && (typeof data === 'object');\r\n};\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n if (isRecord(data) && data.url) {\r\n e = new Unauthorized(data.url);\r\n }\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nexport const showRequestError = (e: any) => {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Message.error({ title: errors as string });\r\n } else {\r\n throw e;\r\n }\r\n};\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import { useCallback, useState } from 'react';\r\nimport type { Dispatch, SetStateAction } from 'react';\r\nimport useUnmountedRef from './use-unmounted-ref';\r\n\r\nfunction useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];\r\n\r\nfunction useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];\r\n\r\nfunction useSafeState<S>(initialState?: S | (() => S)) {\r\n const unmountedRef = useUnmountedRef();\r\n const [state, setState] = useState(initialState);\r\n const setCurrentState = useCallback((currentState) => {\r\n /** if component is unmounted, stop update */\r\n if (unmountedRef.current) return;\r\n setState(currentState);\r\n }, []);\r\n\r\n return [state, setCurrentState] as const;\r\n}\r\n\r\nexport default useSafeState;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useUnmountedRef = () => {\r\n const unmountedRef = useRef(false);\r\n useEffect(() => {\r\n unmountedRef.current = false;\r\n return () => {\r\n unmountedRef.current = true;\r\n };\r\n }, []);\r\n return unmountedRef;\r\n};\r\n\r\nexport default useUnmountedRef;\r\n","import request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback } from 'react';\r\nimport Message from '../utils/message';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport Button, { ButtonProps } from './button';\r\nimport useSafeState from '../hooks/use-safe-state';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useSafeState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Message.confirm({ text: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n showRequestError(e);\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","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 { 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 } = 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.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: props.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: props.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","import { Columns, TableProps, TableRowSelection } from './index';\r\nimport { InputHTMLAttributes, Key, useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nconst Checkbox = function({\r\n indeterminate = false,\r\n ...props\r\n}: InputHTMLAttributes<HTMLInputElement> & { indeterminate?: boolean }) {\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n ref.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return <input\r\n ref={ref}\r\n {...props}\r\n className='form-check-input'\r\n type='checkbox'\r\n />;\r\n};\r\n\r\nexport default function useSelection<T = any>(\r\n rowSelection: TableRowSelection<T> | undefined,\r\n rowKey: Required<TableProps<T>>['rowKey'],\r\n data: T[]\r\n) {\r\n const [keys, setKeys] = useState(() => new Set(rowSelection?.selectedRowKeys || []));\r\n\r\n const getRowKey = (record: T) => {\r\n if (typeof rowKey === 'string') {\r\n // @ts-ignore\r\n return record[rowKey];\r\n } else {\r\n return rowKey(record);\r\n }\r\n };\r\n\r\n const getRecordByKey = (key: Key) => {\r\n return data.find((record) => {\r\n return getRowKey(record) === key;\r\n })!;\r\n };\r\n\r\n const setSelectedKeys = useCallback((keys: Set<Key>) => {\r\n setKeys(keys);\r\n const changedKeys = Array.from(keys);\r\n\r\n const records = changedKeys.map(function(key) {\r\n return getRecordByKey(key);\r\n });\r\n\r\n if (rowSelection?.onChange) {\r\n rowSelection?.onChange(changedKeys, records);\r\n }\r\n }, [getRecordByKey]);\r\n\r\n const transformColumns = useCallback((columns: Columns): Columns => {\r\n if (!rowSelection) {\r\n return columns;\r\n }\r\n\r\n const recordKeys = data.map(getRowKey);\r\n\r\n const checkedCurrentAll = recordKeys.every(function(key) {\r\n return keys.has(key);\r\n });\r\n const checkedCurrentSome = recordKeys.some(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n return [{\r\n key: 'selection',\r\n title: <Checkbox\r\n checked={checkedCurrentAll}\r\n indeterminate={!checkedCurrentAll && checkedCurrentSome}\r\n onChange={() => {\r\n if (checkedCurrentAll) {\r\n recordKeys.forEach(function(key) {\r\n keys.delete(key);\r\n });\r\n } else {\r\n recordKeys.forEach(function(key) {\r\n keys.add(key);\r\n });\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />,\r\n width: 30,\r\n align: 'center',\r\n render({ record }) {\r\n const key = getRowKey(record);\r\n const checked = keys.has(key);\r\n return <Checkbox\r\n checked={checked}\r\n onChange={() => {\r\n if (checked) {\r\n keys.delete(key);\r\n } else {\r\n keys.add(key);\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />;\r\n }\r\n }, ...columns];\r\n }, [data, rowSelection, keys]);\r\n\r\n return [transformColumns];\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg t='1681378941268' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='11434' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m258.432-123.008c22.710857 0 36.425143-15.853714 36.425143-40.704v-126.427429h134.144c24.009143 0 40.722286-12.873143 40.722286-35.584 0-23.131429-15.853714-36.425143-40.722286-36.425142H548.205714v-134.582858c0-24.850286-13.714286-40.704-36.425143-40.704s-35.565714 16.713143-35.565714 40.722286v134.582857H342.491429c-24.850286 0-41.142857 13.275429-41.142858 36.406857 0 22.710857 17.152 35.584 41.142858 35.584h133.723428v126.427429c0 23.990857 12.854857 40.704 35.565714 40.704z' p-id='11435'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg t='1681378996359' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='12821' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m86.582858-289.718857h344.576c23.990857 0 40.704-12.854857 40.704-35.565714 0-23.149714-15.433143-36.425143-40.704-36.425143H339.931429c-24.868571 0-40.722286 13.275429-40.722286 36.425143 0 22.710857 16.713143 35.565714 40.722286 35.565714z' p-id='12822'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import { DependencyList, useCallback, useEffect, useRef } from 'react';\r\n\r\nexport default function useCallbackRef<T extends (...args: any[]) => any>(\r\n callback: T | undefined,\r\n deps: DependencyList = [],\r\n) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return useCallback(((...args) => callbackRef.current?.(...args)) as T, deps);\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport useCallbackRef from './use-callback-ref';\r\n\r\nexport interface UseControllableStateProps<T> {\r\n value?: T;\r\n defaultValue?: T | (() => T);\r\n onChange?: (value: T) => void;\r\n shouldUpdate?: (prev: T, next: T) => boolean;\r\n}\r\n\r\nexport default function useControllableState<T>(props: UseControllableStateProps<T>) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n shouldUpdate = (prev, next) => prev !== next,\r\n } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\r\n\r\n const [uncontrolledState, setUncontrolledState] = useState(defaultValue as T);\r\n const controlled = valueProp !== undefined;\r\n const value = controlled ? valueProp : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) {\r\n return;\r\n }\r\n\r\n if (!controlled) {\r\n setUncontrolledState(nextValue);\r\n }\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue] as [T, Dispatch<SetStateAction<T>>];\r\n}\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n","import { Form } from 'react-bootstrap';\r\nimport { ChangeEvent, useCallback, useEffect, useState } from 'react';\r\nimport useDebounce from '../../hooks/use-debounce';\r\n\r\ninterface Props {\r\n keyword: string;\r\n onKeywordChange: (value: string) => void;\r\n}\r\n\r\nexport default function Search({ keyword, onKeywordChange }: Props) {\r\n\r\n const [value, setValue] = useState(keyword);\r\n\r\n const debouncedOnKeywordChange = useDebounce(onKeywordChange, 500);\r\n\r\n useEffect(() => {\r\n setValue(keyword);\r\n }, [keyword]);\r\n\r\n const onChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\r\n setValue(e.target.value);\r\n debouncedOnKeywordChange(e.target.value);\r\n }, [debouncedOnKeywordChange, setValue]);\r\n\r\n return <Form.Control value={value} onChange={onChange} type={'search'} placeholder={'Search...'} />;\r\n}\r\n","import RcTable, { TableProps as RcTableProps } from 'rc-table';\r\nimport { unstable_batchedUpdates } from 'react-dom';\r\nimport { ColumnType as BsColumnType, RenderedCell, RenderExpandIconProps } from 'rc-table/es/interface';\r\nimport { Table as BsTable } from 'react-bootstrap';\r\nimport { useUrlSearchParams } from 'use-url-search-params';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n Key,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport Pagination from '../pagination';\r\nimport styled from 'styled-components';\r\nimport request from '../../request';\r\nimport Card from '../card';\r\nimport Loader from '../loader';\r\nimport Space from '../space';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\nimport { ReactComponent as PlusIcon } from '../../images/plus_square.svg';\r\nimport { ReactComponent as MinusIcon } from '../../images/minus_square.svg';\r\nimport useControllableState from '../../hooks/use-controllable-state';\r\nimport Search from './search';\r\nimport NumberFormat from '../number-format';\r\nimport { TableContext } from './context';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends BsColumnType<RecordType> {\r\n render?: (data: {\r\n value: any,\r\n record: RecordType,\r\n index: number,\r\n action: TableType\r\n }) => ReactNode | RenderedCell<RecordType>;\r\n valueType?: 'currency';\r\n}\r\n\r\nexport type Columns<RecordType = any> = ColumnType<RecordType>[]\r\n\r\nconst CustomTHead = styled.thead`\r\n th {\r\n padding: 0.5rem 0.5rem;\r\n border-bottom-width: 1px;\r\n border-color: var(--bs-border-color);\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props) => {\r\n return <BsTable {...props} className='mb-0 align-middle table-hover' />;\r\n },\r\n header: {\r\n wrapper(props) {\r\n return <CustomTHead {...props} />;\r\n }\r\n }\r\n};\r\n\r\nconst ExpandIconContainer = styled.a`\r\n cursor: pointer;\r\n width: 28px;\r\n height: 28px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: middle;\r\n`;\r\n\r\nconst ExpandIcon = function <RecordType>({\r\n record,\r\n expanded,\r\n expandable,\r\n onExpand\r\n}: RenderExpandIconProps<RecordType>) {\r\n if (!expandable) return <ExpandIconContainer />;\r\n return <ExpandIconContainer onClick={e => onExpand(record, e)}>\r\n {expanded ? <MinusIcon /> : <PlusIcon />}\r\n </ExpandIconContainer>;\r\n};\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\r\n margin-top: 1rem;\r\n`;\r\n\r\nfunction isPagination<T>(data: any): data is PaginationType<T> {\r\n return 'current_page' in data;\r\n}\r\n\r\nexport interface TableRowSelection<RecordType = any> {\r\n selectedRowKeys?: Key[];\r\n onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;\r\n}\r\n\r\nexport interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {\r\n source: string | ((params: Params) => Promise<RecordType>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: boolean;\r\n sync?: boolean;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\r\n q?: string;\r\n [key: string]: any;\r\n};\r\n\r\ntype CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>>\r\n & RefAttributes<TableType>>\r\n\r\nconst Table: CustomTableType = forwardRef((\r\n {\r\n source,\r\n rowKey = 'id',\r\n paginate = true,\r\n toolBarRender,\r\n columns = [],\r\n search,\r\n rowSelection,\r\n card = true,\r\n expandable = {},\r\n sync = false,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n const [data, setData] = useState<any[]>([]);\r\n const [pagination, setPagination] = useState(paginate ? { total: 0, current: 1, pageSize: 10 } : null);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [params, setParams] = useUrlSearchParams({});\r\n\r\n const [keyword, setKeyword] = useControllableState<string>({\r\n value: sync ? (params.q as string || '') : undefined,\r\n defaultValue: '',\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ q: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const [page, setPage] = useControllableState<number>({\r\n value: sync ? (params.page as number || 1) : undefined,\r\n defaultValue: 1,\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ page: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const fetchData = useCallback(async () => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n const params: Params = {\r\n q: keyword,\r\n page: page > 1 ? page : undefined,\r\n };\r\n\r\n if (typeof source === 'string') {\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source(params);\r\n }\r\n\r\n if (paginate && isPagination<any>(result)) {\r\n setPagination({\r\n total: result.total,\r\n current: result.current_page,\r\n pageSize: result.per_page\r\n });\r\n result = result.data;\r\n }\r\n setData(result);\r\n } catch (e) {\r\n\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [source, setData, keyword, page]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword, page]);\r\n\r\n const action = useRef<TableType>({\r\n reload: fetchData\r\n });\r\n\r\n useEffect(() => {\r\n action.current = {\r\n reload: fetchData\r\n };\r\n }, [fetchData]);\r\n\r\n useImperativeHandle(ref, () => action.current);\r\n\r\n //多选\r\n const [transformColumns] = useSelection(rowSelection, rowKey, data);\r\n\r\n const customColumns = useMemo(() => {\r\n return transformColumns(columns).map(({ render, valueType, ...column }) => {\r\n const customColumn: BsColumnType<any> = { ...column };\r\n\r\n if (render) {\r\n customColumn.render = (value, record, index) => {\r\n return render({ value, record, index, action: action.current });\r\n };\r\n } else if (valueType === 'currency') {\r\n customColumn.render = (value) => {\r\n return <NumberFormat value={value} />;\r\n };\r\n }\r\n return customColumn;\r\n });\r\n }, [columns, transformColumns, action]);\r\n\r\n const children = <>\r\n <Loader loading={loading} />\r\n {toolBarRender !== false && <Header>\r\n <LeftTools size={12}>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools size={12}>\r\n {search && <Search keyword={keyword} onKeywordChange={(value) => {\r\n unstable_batchedUpdates(() => {\r\n setPage(1);\r\n setKeyword(value);\r\n });\r\n }} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <TableContext.Provider value={true}>\r\n <RcTable {...props} expandable={{ expandIcon: ExpandIcon, ...expandable }} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n </TableContext.Provider>\r\n {pagination && <CustomPagination {...pagination} onChange={setPage} />}\r\n </>;\r\n\r\n if (card) {\r\n return <Card>\r\n {children}\r\n </Card>;\r\n }\r\n return children;\r\n});\r\n\r\nexport default Table;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n height: 48px;\r\n border-bottom: 2px solid #212529;\r\n`;\r\n\r\nconst RightTools = styled(Space)`\r\n\r\n`;\r\nconst LeftTools = styled(Space)`\r\n\r\n`;\r\n\r\nconst Action = styled.span`\r\n cursor: pointer;\r\n font-size: 20px;\r\n line-height: 1;\r\n\r\n &:hover {\r\n color: var(--bs-primary);\r\n }\r\n`;\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import {\r\n ComponentType,\r\n createContext,\r\n Fragment,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport useStateWithCallback from '../../hooks/use-state-with-callback';\r\nimport { ModalProps } from 'react-bootstrap';\r\n\r\ninterface MessageContextType {\r\n container?: ModalProps['container'];\r\n}\r\n\r\nconst MessageContext = createContext<MessageContextType>({});\r\n\r\ntype MessageWrapProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n destroy: () => void\r\n message: T\r\n}\r\n\r\nexport type MessageProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n message: T\r\n state: {\r\n show: boolean\r\n onHide: () => void\r\n onExited: () => void\r\n container?: ModalProps['container']\r\n }\r\n}\r\n\r\nexport function wrapMessage<T = {}, P = any>(Component: ComponentType<MessageProps<T, P>>): ComponentType<MessageWrapProps<T, P>> {\r\n\r\n return ({ resolve, destroy, message }) => {\r\n\r\n const [show, setShow] = useStateWithCallback(true);\r\n const context = useContext(MessageContext);\r\n\r\n const handleResolve = useCallback((value: P | void) => {\r\n setShow(false, () => {\r\n resolve(value);\r\n });\r\n }, [setShow, resolve]);\r\n\r\n const state = useMemo(() => {\r\n return {\r\n show,\r\n onHide: () => handleResolve(),\r\n onExited: () => destroy(),\r\n container: context.container\r\n };\r\n }, [show, handleResolve, destroy]);\r\n\r\n return <Component\r\n resolve={handleResolve}\r\n state={state}\r\n message={message}\r\n />;\r\n };\r\n}\r\n\r\nexport function createMessage<T = {}, P = any>(Component: ComponentType<MessageWrapProps<T, P>>): (message: T) => Promise<P | void> {\r\n return (message) => {\r\n return new Promise<P | void>((resolve) => {\r\n const component = <Component\r\n resolve={resolve}\r\n destroy={() => {\r\n hide(component);\r\n }}\r\n message={message}\r\n />;\r\n\r\n show(component);\r\n });\r\n };\r\n}\r\n\r\ntype State = Set<ReactNode>\r\n\r\nlet listener: (state: State) => void = () => void 0;\r\n\r\nlet memoryState: State = new Set();\r\n\r\nexport const show = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.add(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport const hide = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.delete(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport default function Message(props: MessageContextType) {\r\n const [state, setState] = useState<State>(memoryState);\r\n useEffect(() => {\r\n listener = setState;\r\n }, []);\r\n\r\n return <MessageContext.Provider value={props}>\r\n {Array.from(state).map((message, index) => <Fragment key={`message-${index}`}>{message}</Fragment>)}\r\n </MessageContext.Provider>;\r\n}\r\n","import { SetStateAction, useEffect, useRef, useState } from 'react';\n\nexport default function useStateWithCallback<S>(initState: S): [S, (value: SetStateAction<S>, callback: () => void) => void] {\n const callbackRef = useRef<Function | null>(null);\n\n const [state, setState] = useState(initState);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current();\n callbackRef.current = null;\n }\n }, [state]);\n\n const setCallbackState = (value: SetStateAction<S>, callback: () => void) => {\n callbackRef.current = typeof callback === 'function' ? callback : null;\n setState(value);\n };\n\n return [state, setCallbackState];\n}\n","import { Modal as ReactModal, ModalProps as ReactModalProps } from 'react-bootstrap';\r\nimport { ElementType, MouseEvent, ReactNode, useMemo, useState } from 'react';\r\nimport Button, { ButtonProps } from '../button';\r\nimport show from './show';\r\nimport Message, { MessageProps } from './message';\r\n\r\nexport interface ModalProps extends Pick<\r\n ReactModalProps,\r\n 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'\r\n> {\r\n children: ReactNode;\r\n header?: ReactNode;\r\n footer?: ReactNode | ((args: { okButton: ReactNode, cancelButton: ReactNode }) => ReactNode);\r\n okText?: string;\r\n cancelText?: string;\r\n closable?: boolean;\r\n show?: boolean;\r\n onOk?: (e: MouseEvent) => void;\r\n onCancel?: (e: MouseEvent) => void;\r\n okButtonProps?: ButtonProps;\r\n bodyAs?: ElementType;\r\n headerAs?: ElementType;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nconst Modal = ({\r\n header,\r\n children,\r\n footer,\r\n closable = true,\r\n show,\r\n cancelText = '取消',\r\n okText = '确定',\r\n onOk,\r\n onCancel,\r\n onHide,\r\n okButtonProps,\r\n bodyAs,\r\n headerAs = 'h5',\r\n confirmLoading = false,\r\n ...rest\r\n}: ModalProps) => {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const okButton = useMemo(() => {\r\n return <Button loading={loading || confirmLoading} variant={'primary'} onClick={async (e) => {\r\n setLoading(true);\r\n try {\r\n await onOk?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }} {...okButtonProps}>{okText}</Button>;\r\n }, [okButtonProps, okText, onOk, onHide, loading, confirmLoading]);\r\n\r\n const cancelButton = useMemo(() => {\r\n return <Button variant='secondary' onClick={(e) => {\r\n onCancel?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n }}>{cancelText}</Button>;\r\n }, [onCancel, onHide, cancelText]);\r\n\r\n switch (typeof footer) {\r\n case 'undefined':\r\n footer = <>\r\n {cancelButton}\r\n {okButton}\r\n </>;\r\n break;\r\n case 'function':\r\n footer = footer({ okButton, cancelButton });\r\n break;\r\n }\r\n\r\n return <ReactModal {...rest} onHide={onHide} show={show}>\r\n {header && <ReactModal.Header closeButton={closable}>\r\n <ReactModal.Title as={headerAs}>{header}</ReactModal.Title>\r\n </ReactModal.Header>}\r\n <ReactModal.Body as={bodyAs}>{children}</ReactModal.Body>\r\n {footer && <ReactModal.Footer>{footer}</ReactModal.Footer>}\r\n </ReactModal>;\r\n};\r\n\r\nModal.Message = Message;\r\nModal.show = show;\r\nexport default Modal;\r\nexport { MessageProps };\r\n","import { createMessage, MessageProps, wrapMessage } from './message';\r\nimport { ComponentType } from 'react';\r\n\r\nexport default function show<T>(Component: ComponentType<MessageProps<void, T>>) {\r\n return createMessage(wrapMessage(Component))();\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n MouseEvent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle\r\n} from 'react';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\nimport Modal, { ModalProps } from './modal';\r\nimport { ButtonProps } from 'react-bootstrap';\r\nimport Button from './button';\r\n\r\nexport interface ModalButtonProps extends Omit<ButtonProps, 'as'> {\r\n text: ReactNode;\r\n modalProps?: Omit<ModalProps, 'children' | 'confirmLoading' | 'onOk'>;\r\n onOk?: () => any;\r\n onShow?: () => void;\r\n confirmLoading?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n onOk,\r\n modalProps,\r\n children,\r\n onShow,\r\n confirmLoading,\r\n as = Button,\r\n ...props\r\n}, ref) => {\r\n\r\n const { state, show, hide } = useOverlayState({ onShow });\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: hide\r\n }));\r\n\r\n const handleOk = async (e: MouseEvent) => {\r\n if (onOk) {\r\n const result = await onOk();\r\n if (result === false) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n const button = createElement(as, {\r\n ...props,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal\r\n header={text}\r\n {...modalProps}\r\n {...state}\r\n confirmLoading={confirmLoading}\r\n onOk={handleOk}\r\n >\r\n {children}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps, ModalType } from './modal-button';\r\nimport { ReactNode, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport interface ModalFormProps<T = any> extends FormProps<T> {\r\n text: ReactNode;\r\n buttonProps?: Omit<ModalButtonProps, 'text' | 'modalProps' | 'confirmLoading' | 'onOk'>;\r\n modalProps?: ModalButtonProps['modalProps'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n onSuccess,\r\n buttonProps,\r\n modalProps,\r\n children,\r\n ...props\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const ref = useRef<ModalType>(null);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n return false;\r\n }, []);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n ref.current?.close();\r\n }, [onSuccess]);\r\n\r\n return <ModalButton\r\n ref={ref}\r\n text={text}\r\n {...buttonProps}\r\n modalProps={modalProps}\r\n onOk={handleOk}\r\n confirmLoading={loading}\r\n >\r\n <Form\r\n {...props}\r\n onSubmitting={setLoading}\r\n ref={form}\r\n onSuccess={handleSuccess}\r\n >\r\n {children}\r\n <input type='submit' hidden />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n try {\r\n execute();\r\n } catch {\r\n\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(async () => {\r\n try {\r\n if (currentParams) {\r\n await execute(...currentParams);\r\n } else {\r\n await execute();\r\n }\r\n } catch {\r\n\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n"],"names":["CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","data","preConfirm","e","Error","showValidationMessage","message","success","toast","position","timer","showConfirmButton","error","close","result","defaults","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","_jsx","Alert","children","Toast","reduce","Container","styled","div","Icon","Title","Extra","IconMap","className","info","warning","Result","status","title","extra","_jsxs","Dimmer","props","active","inverted","Loader","loading","animation","wrap","Spinner","Wrap","$height","Card","BsCard","classNames","_Fragment","errors","Object","entries","map","_ref2","name","Space","size","direction","small","middle","large","items","Children","child","Item","$direction","$size","css","_path","_extends","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgStepCheck","React","createElement","viewBox","xmlns","width","height","fill","d","Steps","CustomRcSteps","icons","finish","CheckIcon","Step","RcSteps","noop","isInteger","value","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","current","setCurrent","useState","pageSize","setPageSize","useEffect","allPages","useMemo","handleChange","useCallback","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","push","BsPagination","onClick","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","opt","minimumFractionDigits","Intl","format","LoadingButton","disabled","Button","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","id","uniqueId","TableContext","createContext","forwardRef","ref","percent","useContext","as","role","button","BsButton","Unauthorized","constructor","url","super","_defineProperty","rax","attach","axios","raxConfig","retryDelay","backoffType","shouldRetry","config","response","retryDecider","method","toUpperCase","maxContentLength","Infinity","maxBodyLength","baseURL","authTokenName","interceptors","request","use","token","localStorage","getItem","headers","Authorization","Promise","reject","isRecord","location","window","href","undefined","isAxiosError","isRequestError","showRequestError","values","join","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","useSafeState","initialState","unmountedRef","useRef","useUnmountedRef","state","setState","currentState","RequestButton","onSuccess","fetching","setFetching","handleClick","preventDefault","text","localize","require","widgets","upload","getRegistry","endpoint","onUpload","FormData","set","file","editor","typeahead","_ref3","onSearch","query","_ref4","Form","_ref5","action","formData","onSubmitting","onSubmit","submitText","transformData","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Checkbox","indeterminate","SvgPlusSquare","SvgMinusSquare","useCallbackRef","deps","callbackRef","_len","args","Array","_key","useControllableState","valueProp","defaultValue","shouldUpdate","prev","next","onChangeProp","shouldUpdateProp","uncontrolledState","setUncontrolledState","controlled","setValue","nextValue","useDebounce","wait","debouncedCallbackRef","debounce","Search","onKeywordChange","debouncedOnKeywordChange","Control","placeholder","CustomTHead","thead","components","table","BsTable","header","wrapper","ExpandIconContainer","a","ExpandIcon","record","expanded","expandable","onExpand","MinusIcon","PlusIcon","CustomPagination","Table","rowKey","paginate","toolBarRender","columns","search","rowSelection","card","sync","pagination","setPagination","setParams","useUrlSearchParams","setKeyword","q","page","setPage","fetchData","isPagination","current_page","per_page","reload","useImperativeHandle","transformColumns","keys","setKeys","Set","selectedRowKeys","getRowKey","getRecordByKey","find","setSelectedKeys","changedKeys","from","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","forEach","delete","add","align","render","useSelection","customColumns","valueType","column","customColumn","index","Header","LeftTools","RightTools","unstable_batchedUpdates","Action","Provider","RcTable","expandIcon","span","useOverlayState","onHide","onShow","visible","setVisible","setKey","hide","exit","show","onExited","MessageContext","wrapMessage","Component","resolve","destroy","setShow","initState","useStateWithCallback","context","handleResolve","container","listener","memoryState","modal","Modal","footer","cancelText","okText","onOk","onCancel","okButtonProps","bodyAs","headerAs","confirmLoading","rest","okButton","defaultPrevented","cancelButton","ReactModal","closeButton","Body","Footer","Fragment","component","createMessage","ModalButton","modalProps","ModalForm","buttonProps","form","handleOk","handleSuccess","hidden","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/message.ts","../src/utils/toast.tsx","../src/components/result.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/space.tsx","../src/images/step_check.svg","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/tooltip.tsx","../src/components/table/context.ts","../src/components/button.tsx","../src/errors/unauthorized.ts","../src/request.ts","../src/hooks/use-safe-state.ts","../src/hooks/use-unmounted-ref.ts","../src/components/modal/message.tsx","../src/hooks/use-state-with-callback.ts","../src/components/modal/confirm.tsx","../src/components/modal/index.tsx","../src/components/request-button.tsx","../src/components/modal/show.tsx","../src/components/form.tsx","../src/components/table/use-selection.tsx","../src/images/plus_square.svg","../src/images/minus_square.svg","../src/hooks/use-callback-ref.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-debounce.ts","../src/components/table/search.tsx","../src/components/table/index.tsx","../src/hooks/use-overlay-state.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts"],"sourcesContent":["import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions<T = any> extends SweetAlertOptions<T> {\r\n\r\n}\r\n\r\nconst defaultOptions: MessageOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n};\r\n\r\nconst Message = {\r\n confirm: async <T = any>(options: MessageOptions<T>) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options,\r\n async preConfirm(data) {\r\n if (options.preConfirm) {\r\n try {\r\n return await options.preConfirm(data);\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n CustomSwal.showValidationMessage(e.message);\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n success: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'success',\r\n timer: 2000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 5000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n close: (result?: SweetAlertResult) => {\r\n CustomSwal.close(result);\r\n },\r\n defaults: defaultOptions\r\n};\r\n\r\nexport default Message;\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\nimport { NotificationProps } from 'rc-notification/es/Notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nconst defaultOptions: NotificationProps & {\r\n getContainer?: () => HTMLElement;\r\n} = {};\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n ...defaultOptions,\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\nconst types = ['error', 'success', 'info'] as const;\r\n\r\ntype ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {\r\n defaults: typeof defaultOptions;\r\n};\r\n\r\nconst Toast = types.reduce((toast, type) => {\r\n toast[type] = (content: string, options?: NoticeContent) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n return toast;\r\n}, {} as any);\r\n\r\nToast.defaults = defaultOptions;\r\n\r\nexport default Toast as ToastType;\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean | number;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'primary',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap $height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ $height: number }>`\r\n position: relative;\r\n height: ${props => `${props.$height}px`};\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n direction?: 'vertical' | 'horizontal';\r\n className?: string;\r\n}\r\n\r\n\r\nexport default function Space({ children, className, size = 'small', direction = 'horizontal' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container className={className} $direction={direction} $size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ $size: number, $direction: string }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.$size}px;\r\n\r\n ${props => props.$direction === 'vertical' && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: inherit;\r\n `}\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg t='1651217947509' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16' height='16' fill='currentColor'%3e %3cpath d='M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696C170.208 511.872 149.952 512 137.536 524.608c-12.416 12.576-12.256 32.864 0.352 45.248l256.48 252.672c0.096 0.096 0.224 0.128 0.32 0.224 0.096 0.096 0.128 0.224 0.224 0.32 2.016 1.92 4.448 3.008 6.784 4.288 1.152 0.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-0.832 12.288-2.496 1.312-0.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672 0.096-0.096 0.128-0.256 0.224-0.352 0.064-0.096 0.192-0.128 0.288-0.224l449.184-478.208C901.44 330.592 900.768 310.336 887.904 298.208z' p-id='2549'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import RcSteps from 'rc-steps';\r\nimport 'rc-steps/assets/index.css';\r\nimport styled from 'styled-components';\r\nimport { ComponentProps } from 'react';\r\nimport { ReactComponent as CheckIcon } from '../images/step_check.svg';\r\n\r\nexport default function Steps(props: ComponentProps<typeof RcSteps>) {\r\n return <CustomRcSteps\r\n icons={{\r\n finish: <CheckIcon />,\r\n error: <></>\r\n }}\r\n {...props}\r\n />;\r\n}\r\n\r\nSteps.Step = RcSteps.Step;\r\n\r\nconst CustomRcSteps = styled(RcSteps)`\r\n .rc-steps-item-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n & > .rc-steps-icon {\r\n top: 0;\r\n }\r\n }\r\n\r\n .rc-steps-item-process {\r\n .rc-steps-item-icon {\r\n background: var(--bs-primary);\r\n border-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-finish {\r\n .rc-steps-item-icon {\r\n border-color: var(--bs-primary);\r\n\r\n & > .rc-steps-icon {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-title:after {\r\n background-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n`;\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList: ReactNode[] = [];\r\n let jumpPrev: ReactNode = null;\r\n let jumpNext: ReactNode = null;\r\n let firstPager: ReactNode = null;\r\n let lastPager: ReactNode = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n options?: Intl.NumberFormatOptions;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true, options = {} }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let opt;\r\n\r\n if (currency) {\r\n opt = {\r\n style: 'currency',\r\n currency: 'CNY'\r\n };\r\n } else {\r\n opt = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, { ...opt, ...options });\r\n }, [currency, locale, options]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean;\r\n}\r\n\r\nexport default function LoadingButton({ loading, disabled, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading || disabled}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const TableContext = createContext(false);\r\n","import { Button as BsButton, ButtonProps as BsButtonProps, Spinner } from 'react-bootstrap';\r\nimport { forwardRef, useContext } from 'react';\r\nimport Tooltip from './tooltip';\r\nimport { TableContext } from './table/context';\r\n\r\nexport interface ButtonProps extends BsButtonProps {\r\n loading?: boolean;\r\n percent?: number;\r\n tooltip?: string;\r\n}\r\n\r\nconst Button = forwardRef<any, ButtonProps>((\r\n {\r\n loading,\r\n percent,\r\n disabled,\r\n children,\r\n tooltip,\r\n variant,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n\r\n const inTable = useContext(TableContext);\r\n\r\n if (inTable && !variant) {\r\n variant = 'link';\r\n }\r\n\r\n if (loading) {\r\n disabled = true;\r\n children = <>\r\n <Spinner ref={ref} as='span' size='sm' role='status' aria-hidden='true' animation='border' />\r\n {percent ? <span className='ms-2'>{percent}%</span> : null}\r\n </>;\r\n }\r\n\r\n const button = <BsButton ref={ref} {...props} variant={variant} disabled={disabled}>{children}</BsButton>;\r\n\r\n if (tooltip) {\r\n return <Tooltip tooltip={tooltip}>\r\n <span className={'d-inline-block'}>{button}</span>\r\n </Tooltip>;\r\n }\r\n\r\n return button;\r\n});\r\n\r\nexport default Button;\r\n","export default class Unauthorized extends Error {\r\n\r\n url: string;\r\n\r\n constructor(url: string) {\r\n super('Unauthorized');\r\n this.url = url;\r\n }\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Unauthorized from './errors/unauthorized';\r\nimport Toast from './utils/toast';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'retry-axios' {\r\n interface RetryConfig {\r\n retryDecider?: () => boolean;\r\n }\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n authTokenName?: string;\r\n }\r\n}\r\n\r\nrax.attach();\r\n\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: ({ config, response }) => {\r\n if (config.raxConfig?.retryDecider && !config.raxConfig.retryDecider()) {\r\n return false;\r\n }\r\n return config.method?.toUpperCase() === 'GET' && response?.status === 449;\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.defaults.authTokenName = 'authorization';\r\naxios.interceptors.request.use(\r\n config => {\r\n const key = config.authTokenName;\r\n if (key) {\r\n const token = localStorage.getItem(key);\r\n\r\n if (token) {\r\n config.headers = {\r\n Authorization: `Bearer ${token}`,\r\n ...config.headers,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst isRecord = (data: any): data is Record<string, string> => {\r\n return data && (typeof data === 'object');\r\n};\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n if (isRecord(data) && data.url) {\r\n e = new Unauthorized(data.url);\r\n }\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nexport const showRequestError = (e: any) => {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Toast.error(errors as string);\r\n } else {\r\n throw e;\r\n }\r\n};\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import { useCallback, useState } from 'react';\r\nimport type { Dispatch, SetStateAction } from 'react';\r\nimport useUnmountedRef from './use-unmounted-ref';\r\n\r\nfunction useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];\r\n\r\nfunction useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];\r\n\r\nfunction useSafeState<S>(initialState?: S | (() => S)) {\r\n const unmountedRef = useUnmountedRef();\r\n const [state, setState] = useState(initialState);\r\n const setCurrentState = useCallback((currentState) => {\r\n /** if component is unmounted, stop update */\r\n if (unmountedRef.current) return;\r\n setState(currentState);\r\n }, []);\r\n\r\n return [state, setCurrentState] as const;\r\n}\r\n\r\nexport default useSafeState;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useUnmountedRef = () => {\r\n const unmountedRef = useRef(false);\r\n useEffect(() => {\r\n unmountedRef.current = false;\r\n return () => {\r\n unmountedRef.current = true;\r\n };\r\n }, []);\r\n return unmountedRef;\r\n};\r\n\r\nexport default useUnmountedRef;\r\n","import {\r\n ComponentType,\r\n createContext,\r\n Fragment,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport useStateWithCallback from '../../hooks/use-state-with-callback';\r\nimport { ModalProps } from 'react-bootstrap';\r\n\r\ninterface MessageContextType {\r\n container?: ModalProps['container'];\r\n}\r\n\r\nconst MessageContext = createContext<MessageContextType>({});\r\n\r\ntype MessageWrapProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n destroy: () => void\r\n message: T\r\n}\r\n\r\nexport type MessageProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n message: T\r\n state: {\r\n show: boolean\r\n onHide: () => void\r\n onExited: () => void\r\n container?: ModalProps['container']\r\n }\r\n}\r\n\r\nexport function wrapMessage<T = {}, P = any>(Component: ComponentType<MessageProps<T, P>>): ComponentType<MessageWrapProps<T, P>> {\r\n\r\n return ({ resolve, destroy, message }) => {\r\n\r\n const [show, setShow] = useStateWithCallback(true);\r\n const context = useContext(MessageContext);\r\n\r\n const handleResolve = useCallback((value: P | void) => {\r\n setShow(false, () => {\r\n resolve(value);\r\n });\r\n }, [setShow, resolve]);\r\n\r\n const state = useMemo(() => {\r\n return {\r\n show,\r\n onHide: () => handleResolve(),\r\n onExited: () => destroy(),\r\n container: context.container\r\n };\r\n }, [show, handleResolve, destroy]);\r\n\r\n return <Component\r\n resolve={handleResolve}\r\n state={state}\r\n message={message}\r\n />;\r\n };\r\n}\r\n\r\nexport function createMessage<T = {}, P = any>(Component: ComponentType<MessageWrapProps<T, P>>): (message: T) => Promise<P | void> {\r\n return (message) => {\r\n return new Promise<P | void>((resolve) => {\r\n const component = <Component\r\n resolve={resolve}\r\n destroy={() => {\r\n hide(component);\r\n }}\r\n message={message}\r\n />;\r\n\r\n show(component);\r\n });\r\n };\r\n}\r\n\r\ntype State = Set<ReactNode>\r\n\r\nlet listener: (state: State) => void = () => void 0;\r\n\r\nlet memoryState: State = new Set();\r\n\r\nexport const show = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.add(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport const hide = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.delete(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport default function Message(props: MessageContextType) {\r\n const [state, setState] = useState<State>(memoryState);\r\n useEffect(() => {\r\n listener = setState;\r\n }, []);\r\n\r\n return <MessageContext.Provider value={props}>\r\n {Array.from(state).map((message, index) => <Fragment key={`message-${index}`}>{message}</Fragment>)}\r\n </MessageContext.Provider>;\r\n}\r\n","import { SetStateAction, useEffect, useRef, useState } from 'react';\n\nexport default function useStateWithCallback<S>(initState: S): [S, (value: SetStateAction<S>, callback: () => void) => void] {\n const callbackRef = useRef<Function | null>(null);\n\n const [state, setState] = useState(initState);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current();\n callbackRef.current = null;\n }\n }, [state]);\n\n const setCallbackState = (value: SetStateAction<S>, callback: () => void) => {\n callbackRef.current = typeof callback === 'function' ? callback : null;\n setState(value);\n };\n\n return [state, setCallbackState];\n}\n","import { FC } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { createMessage, MessageProps, wrapMessage } from './message';\r\nimport Button from '../button';\r\n\r\ninterface ConfirmOptions {\r\n title?: string;\r\n message: string;\r\n okText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nconst Confirm: FC<MessageProps<ConfirmOptions, true>> = function({\r\n state,\r\n message: {\r\n title,\r\n message,\r\n okText,\r\n cancelText\r\n },\r\n resolve,\r\n}) {\r\n return <Modal {...state}>\r\n <Modal.Header>\r\n <Modal.Title as='h5'>{title || '确认'}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>{message}</Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={() => resolve()}>{cancelText || '取消'}</Button>\r\n <Button onClick={() => resolve(true)}>{okText || '确定'}</Button>\r\n </Modal.Footer>\r\n </Modal>;\r\n};\r\n\r\nexport default function confirm(options: ConfirmOptions) {\r\n return createMessage(wrapMessage(Confirm))(options);\r\n}\r\n","import { Modal as ReactModal, ModalProps as ReactModalProps } from 'react-bootstrap';\r\nimport { ElementType, MouseEvent, ReactNode, useMemo, useState } from 'react';\r\nimport Button, { ButtonProps } from '../button';\r\nimport show from './show';\r\nimport confirm from './confirm';\r\nimport Message, { MessageProps } from './message';\r\n\r\nexport interface ModalProps extends Pick<\r\n ReactModalProps,\r\n 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'\r\n> {\r\n children: ReactNode;\r\n header?: ReactNode;\r\n footer?: ReactNode | ((args: { okButton: ReactNode, cancelButton: ReactNode }) => ReactNode);\r\n okText?: string;\r\n cancelText?: string;\r\n closable?: boolean;\r\n show?: boolean;\r\n onOk?: (e: MouseEvent) => void;\r\n onCancel?: (e: MouseEvent) => void;\r\n okButtonProps?: ButtonProps;\r\n bodyAs?: ElementType;\r\n headerAs?: ElementType;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nconst Modal = ({\r\n header,\r\n children,\r\n footer,\r\n closable = true,\r\n show,\r\n cancelText = '取消',\r\n okText = '确定',\r\n onOk,\r\n onCancel,\r\n onHide,\r\n okButtonProps,\r\n bodyAs,\r\n headerAs = 'h5',\r\n confirmLoading = false,\r\n ...rest\r\n}: ModalProps) => {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const okButton = useMemo(() => {\r\n return <Button loading={loading || confirmLoading} variant={'primary'} onClick={async (e) => {\r\n setLoading(true);\r\n try {\r\n await onOk?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }} {...okButtonProps}>{okText}</Button>;\r\n }, [okButtonProps, okText, onOk, onHide, loading, confirmLoading]);\r\n\r\n const cancelButton = useMemo(() => {\r\n return <Button variant='secondary' onClick={(e) => {\r\n onCancel?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n }}>{cancelText}</Button>;\r\n }, [onCancel, onHide, cancelText]);\r\n\r\n switch (typeof footer) {\r\n case 'undefined':\r\n footer = <>\r\n {cancelButton}\r\n {okButton}\r\n </>;\r\n break;\r\n case 'function':\r\n footer = footer({ okButton, cancelButton });\r\n break;\r\n }\r\n\r\n return <ReactModal {...rest} onHide={onHide} show={show}>\r\n {header && <ReactModal.Header closeButton={closable}>\r\n <ReactModal.Title as={headerAs}>{header}</ReactModal.Title>\r\n </ReactModal.Header>}\r\n <ReactModal.Body as={bodyAs}>{children}</ReactModal.Body>\r\n {footer && <ReactModal.Footer>{footer}</ReactModal.Footer>}\r\n </ReactModal>;\r\n};\r\n\r\nModal.Message = Message;\r\nModal.confirm = confirm;\r\nModal.show = show;\r\nexport default Modal;\r\nexport { MessageProps };\r\n","import request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport Button, { ButtonProps } from './button';\r\nimport useSafeState from '../hooks/use-safe-state';\r\nimport Modal from './modal';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useSafeState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Modal.confirm({ message: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n showRequestError(e);\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { createMessage, MessageProps, wrapMessage } from './message';\r\nimport { ComponentType } from 'react';\r\n\r\nexport default function show<T>(Component: ComponentType<MessageProps<void, T>>) {\r\n return createMessage(wrapMessage(Component))();\r\n}\r\n","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 { 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 } = 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.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: props.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: props.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","import { Columns, TableProps, TableRowSelection } from './index';\r\nimport { InputHTMLAttributes, Key, useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nconst Checkbox = function({\r\n indeterminate = false,\r\n ...props\r\n}: InputHTMLAttributes<HTMLInputElement> & { indeterminate?: boolean }) {\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n ref.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return <input\r\n ref={ref}\r\n {...props}\r\n className='form-check-input'\r\n type='checkbox'\r\n />;\r\n};\r\n\r\nexport default function useSelection<T = any>(\r\n rowSelection: TableRowSelection<T> | undefined,\r\n rowKey: Required<TableProps<T>>['rowKey'],\r\n data: T[]\r\n) {\r\n const [keys, setKeys] = useState(() => new Set(rowSelection?.selectedRowKeys || []));\r\n\r\n const getRowKey = (record: T) => {\r\n if (typeof rowKey === 'string') {\r\n // @ts-ignore\r\n return record[rowKey];\r\n } else {\r\n return rowKey(record);\r\n }\r\n };\r\n\r\n const getRecordByKey = (key: Key) => {\r\n return data.find((record) => {\r\n return getRowKey(record) === key;\r\n })!;\r\n };\r\n\r\n const setSelectedKeys = useCallback((keys: Set<Key>) => {\r\n setKeys(keys);\r\n const changedKeys = Array.from(keys);\r\n\r\n const records = changedKeys.map(function(key) {\r\n return getRecordByKey(key);\r\n });\r\n\r\n if (rowSelection?.onChange) {\r\n rowSelection?.onChange(changedKeys, records);\r\n }\r\n }, [getRecordByKey]);\r\n\r\n const transformColumns = useCallback((columns: Columns): Columns => {\r\n if (!rowSelection) {\r\n return columns;\r\n }\r\n\r\n const recordKeys = data.map(getRowKey);\r\n\r\n const checkedCurrentAll = recordKeys.every(function(key) {\r\n return keys.has(key);\r\n });\r\n const checkedCurrentSome = recordKeys.some(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n return [{\r\n key: 'selection',\r\n title: <Checkbox\r\n checked={checkedCurrentAll}\r\n indeterminate={!checkedCurrentAll && checkedCurrentSome}\r\n onChange={() => {\r\n if (checkedCurrentAll) {\r\n recordKeys.forEach(function(key) {\r\n keys.delete(key);\r\n });\r\n } else {\r\n recordKeys.forEach(function(key) {\r\n keys.add(key);\r\n });\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />,\r\n width: 30,\r\n align: 'center',\r\n render({ record }) {\r\n const key = getRowKey(record);\r\n const checked = keys.has(key);\r\n return <Checkbox\r\n checked={checked}\r\n onChange={() => {\r\n if (checked) {\r\n keys.delete(key);\r\n } else {\r\n keys.add(key);\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />;\r\n }\r\n }, ...columns];\r\n }, [data, rowSelection, keys]);\r\n\r\n return [transformColumns];\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg t='1681378941268' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='11434' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m258.432-123.008c22.710857 0 36.425143-15.853714 36.425143-40.704v-126.427429h134.144c24.009143 0 40.722286-12.873143 40.722286-35.584 0-23.131429-15.853714-36.425143-40.722286-36.425142H548.205714v-134.582858c0-24.850286-13.714286-40.704-36.425143-40.704s-35.565714 16.713143-35.565714 40.722286v134.582857H342.491429c-24.850286 0-41.142857 13.275429-41.142858 36.406857 0 22.710857 17.152 35.584 41.142858 35.584h133.723428v126.427429c0 23.990857 12.854857 40.704 35.565714 40.704z' p-id='11435'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg t='1681378996359' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='12821' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m86.582858-289.718857h344.576c23.990857 0 40.704-12.854857 40.704-35.565714 0-23.149714-15.433143-36.425143-40.704-36.425143H339.931429c-24.868571 0-40.722286 13.275429-40.722286 36.425143 0 22.710857 16.713143 35.565714 40.722286 35.565714z' p-id='12822'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import { DependencyList, useCallback, useEffect, useRef } from 'react';\r\n\r\nexport default function useCallbackRef<T extends (...args: any[]) => any>(\r\n callback: T | undefined,\r\n deps: DependencyList = [],\r\n) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return useCallback(((...args) => callbackRef.current?.(...args)) as T, deps);\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport useCallbackRef from './use-callback-ref';\r\n\r\nexport interface UseControllableStateProps<T> {\r\n value?: T;\r\n defaultValue?: T | (() => T);\r\n onChange?: (value: T) => void;\r\n shouldUpdate?: (prev: T, next: T) => boolean;\r\n}\r\n\r\nexport default function useControllableState<T>(props: UseControllableStateProps<T>) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n shouldUpdate = (prev, next) => prev !== next,\r\n } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\r\n\r\n const [uncontrolledState, setUncontrolledState] = useState(defaultValue as T);\r\n const controlled = valueProp !== undefined;\r\n const value = controlled ? valueProp : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) {\r\n return;\r\n }\r\n\r\n if (!controlled) {\r\n setUncontrolledState(nextValue);\r\n }\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue] as [T, Dispatch<SetStateAction<T>>];\r\n}\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n","import { Form } from 'react-bootstrap';\r\nimport { ChangeEvent, useCallback, useEffect, useState } from 'react';\r\nimport useDebounce from '../../hooks/use-debounce';\r\n\r\ninterface Props {\r\n keyword: string;\r\n onKeywordChange: (value: string) => void;\r\n}\r\n\r\nexport default function Search({ keyword, onKeywordChange }: Props) {\r\n\r\n const [value, setValue] = useState(keyword);\r\n\r\n const debouncedOnKeywordChange = useDebounce(onKeywordChange, 500);\r\n\r\n useEffect(() => {\r\n setValue(keyword);\r\n }, [keyword]);\r\n\r\n const onChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\r\n setValue(e.target.value);\r\n debouncedOnKeywordChange(e.target.value);\r\n }, [debouncedOnKeywordChange, setValue]);\r\n\r\n return <Form.Control value={value} onChange={onChange} type={'search'} placeholder={'Search...'} />;\r\n}\r\n","import RcTable, { TableProps as RcTableProps } from 'rc-table';\r\nimport { unstable_batchedUpdates } from 'react-dom';\r\nimport { ColumnType as BsColumnType, RenderedCell, RenderExpandIconProps } from 'rc-table/es/interface';\r\nimport { Table as BsTable } from 'react-bootstrap';\r\nimport { useUrlSearchParams } from 'use-url-search-params';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n Key,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport Pagination from '../pagination';\r\nimport styled from 'styled-components';\r\nimport request from '../../request';\r\nimport Card from '../card';\r\nimport Loader from '../loader';\r\nimport Space from '../space';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\nimport { ReactComponent as PlusIcon } from '../../images/plus_square.svg';\r\nimport { ReactComponent as MinusIcon } from '../../images/minus_square.svg';\r\nimport useControllableState from '../../hooks/use-controllable-state';\r\nimport Search from './search';\r\nimport NumberFormat from '../number-format';\r\nimport { TableContext } from './context';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends BsColumnType<RecordType> {\r\n render?: (data: {\r\n value: any,\r\n record: RecordType,\r\n index: number,\r\n action: TableType\r\n }) => ReactNode | RenderedCell<RecordType>;\r\n valueType?: 'currency';\r\n}\r\n\r\nexport type Columns<RecordType = any> = ColumnType<RecordType>[]\r\n\r\nconst CustomTHead = styled.thead`\r\n th {\r\n padding: 0.5rem 0.5rem;\r\n border-bottom-width: 1px;\r\n border-color: var(--bs-border-color);\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props) => {\r\n return <BsTable {...props} className='mb-0 align-middle table-hover' />;\r\n },\r\n header: {\r\n wrapper(props) {\r\n return <CustomTHead {...props} />;\r\n }\r\n }\r\n};\r\n\r\nconst ExpandIconContainer = styled.a`\r\n cursor: pointer;\r\n width: 28px;\r\n height: 28px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: middle;\r\n`;\r\n\r\nconst ExpandIcon = function <RecordType>({\r\n record,\r\n expanded,\r\n expandable,\r\n onExpand\r\n}: RenderExpandIconProps<RecordType>) {\r\n if (!expandable) return <ExpandIconContainer />;\r\n return <ExpandIconContainer onClick={e => onExpand(record, e)}>\r\n {expanded ? <MinusIcon /> : <PlusIcon />}\r\n </ExpandIconContainer>;\r\n};\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\r\n margin-top: 1rem;\r\n`;\r\n\r\nfunction isPagination<T>(data: any): data is PaginationType<T> {\r\n return 'current_page' in data;\r\n}\r\n\r\nexport interface TableRowSelection<RecordType = any> {\r\n selectedRowKeys?: Key[];\r\n onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;\r\n}\r\n\r\nexport interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {\r\n source: string | ((params: Params) => Promise<RecordType>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: boolean;\r\n sync?: boolean;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\r\n q?: string;\r\n [key: string]: any;\r\n};\r\n\r\ntype CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>>\r\n & RefAttributes<TableType>>\r\n\r\nconst Table: CustomTableType = forwardRef((\r\n {\r\n source,\r\n rowKey = 'id',\r\n paginate = true,\r\n toolBarRender,\r\n columns = [],\r\n search,\r\n rowSelection,\r\n card = true,\r\n expandable = {},\r\n sync = false,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n const [data, setData] = useState<any[]>([]);\r\n const [pagination, setPagination] = useState(paginate ? { total: 0, current: 1, pageSize: 10 } : null);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [params, setParams] = useUrlSearchParams({});\r\n\r\n const [keyword, setKeyword] = useControllableState<string>({\r\n value: sync ? (params.q as string || '') : undefined,\r\n defaultValue: '',\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ q: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const [page, setPage] = useControllableState<number>({\r\n value: sync ? (params.page as number || 1) : undefined,\r\n defaultValue: 1,\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ page: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const fetchData = useCallback(async () => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n const params: Params = {\r\n q: keyword,\r\n page: page > 1 ? page : undefined,\r\n };\r\n\r\n if (typeof source === 'string') {\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source(params);\r\n }\r\n\r\n if (paginate && isPagination<any>(result)) {\r\n setPagination({\r\n total: result.total,\r\n current: result.current_page,\r\n pageSize: result.per_page\r\n });\r\n result = result.data;\r\n }\r\n setData(result);\r\n } catch (e) {\r\n\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [source, setData, keyword, page]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword, page]);\r\n\r\n const action = useRef<TableType>({\r\n reload: fetchData\r\n });\r\n\r\n useEffect(() => {\r\n action.current = {\r\n reload: fetchData\r\n };\r\n }, [fetchData]);\r\n\r\n useImperativeHandle(ref, () => action.current);\r\n\r\n //多选\r\n const [transformColumns] = useSelection(rowSelection, rowKey, data);\r\n\r\n const customColumns = useMemo(() => {\r\n return transformColumns(columns).map(({ render, valueType, ...column }) => {\r\n const customColumn: BsColumnType<any> = { ...column };\r\n\r\n if (render) {\r\n customColumn.render = (value, record, index) => {\r\n return render({ value, record, index, action: action.current });\r\n };\r\n } else if (valueType === 'currency') {\r\n customColumn.render = (value) => {\r\n return <NumberFormat value={value} />;\r\n };\r\n }\r\n return customColumn;\r\n });\r\n }, [columns, transformColumns, action]);\r\n\r\n const children = <>\r\n <Loader loading={loading} />\r\n {toolBarRender !== false && <Header>\r\n <LeftTools size={12}>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools size={12}>\r\n {search && <Search keyword={keyword} onKeywordChange={(value) => {\r\n unstable_batchedUpdates(() => {\r\n setPage(1);\r\n setKeyword(value);\r\n });\r\n }} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <TableContext.Provider value={true}>\r\n <RcTable {...props} expandable={{ expandIcon: ExpandIcon, ...expandable }} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n </TableContext.Provider>\r\n {pagination && <CustomPagination {...pagination} onChange={setPage} />}\r\n </>;\r\n\r\n if (card) {\r\n return <Card>\r\n {children}\r\n </Card>;\r\n }\r\n return children;\r\n});\r\n\r\nexport default Table;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n height: 48px;\r\n border-bottom: 2px solid #212529;\r\n`;\r\n\r\nconst RightTools = styled(Space)`\r\n\r\n`;\r\nconst LeftTools = styled(Space)`\r\n\r\n`;\r\n\r\nconst Action = styled.span`\r\n cursor: pointer;\r\n font-size: 20px;\r\n line-height: 1;\r\n\r\n &:hover {\r\n color: var(--bs-primary);\r\n }\r\n`;\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n MouseEvent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle\r\n} from 'react';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\nimport Modal, { ModalProps } from './modal';\r\nimport { ButtonProps } from 'react-bootstrap';\r\nimport Button from './button';\r\n\r\nexport interface ModalButtonProps extends Omit<ButtonProps, 'as'> {\r\n text: ReactNode;\r\n modalProps?: Omit<ModalProps, 'children' | 'confirmLoading' | 'onOk'>;\r\n onOk?: () => any;\r\n onShow?: () => void;\r\n confirmLoading?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n onOk,\r\n modalProps,\r\n children,\r\n onShow,\r\n confirmLoading,\r\n as = Button,\r\n ...props\r\n}, ref) => {\r\n\r\n const { state, show, hide } = useOverlayState({ onShow });\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: hide\r\n }));\r\n\r\n const handleOk = async (e: MouseEvent) => {\r\n if (onOk) {\r\n const result = await onOk();\r\n if (result === false) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n const button = createElement(as, {\r\n ...props,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal\r\n header={text}\r\n {...modalProps}\r\n {...state}\r\n confirmLoading={confirmLoading}\r\n onOk={handleOk}\r\n >\r\n {children}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps, ModalType } from './modal-button';\r\nimport { ReactNode, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport interface ModalFormProps<T = any> extends FormProps<T> {\r\n text: ReactNode;\r\n buttonProps?: Omit<ModalButtonProps, 'text' | 'modalProps' | 'confirmLoading' | 'onOk'>;\r\n modalProps?: ModalButtonProps['modalProps'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n onSuccess,\r\n buttonProps,\r\n modalProps,\r\n children,\r\n ...props\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const ref = useRef<ModalType>(null);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n return false;\r\n }, []);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n ref.current?.close();\r\n }, [onSuccess]);\r\n\r\n return <ModalButton\r\n ref={ref}\r\n text={text}\r\n {...buttonProps}\r\n modalProps={modalProps}\r\n onOk={handleOk}\r\n confirmLoading={loading}\r\n >\r\n <Form\r\n {...props}\r\n onSubmitting={setLoading}\r\n ref={form}\r\n onSuccess={handleSuccess}\r\n >\r\n {children}\r\n <input type='submit' hidden />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n try {\r\n execute();\r\n } catch {\r\n\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(async () => {\r\n try {\r\n if (currentParams) {\r\n await execute(...currentParams);\r\n } else {\r\n await execute();\r\n }\r\n } catch {\r\n\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n"],"names":["CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","data","preConfirm","e","Error","showValidationMessage","message","success","toast","position","timer","showConfirmButton","error","close","result","defaults","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","_jsx","Alert","children","Toast","reduce","Container","styled","div","Icon","Title","Extra","IconMap","className","info","warning","Result","status","title","extra","_jsxs","Dimmer","props","active","inverted","Loader","loading","animation","wrap","Spinner","Wrap","$height","Card","BsCard","classNames","_Fragment","errors","Object","entries","map","_ref2","name","Space","size","direction","small","middle","large","items","Children","child","Item","$direction","$size","css","_path","_extends","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgStepCheck","React","createElement","viewBox","xmlns","width","height","fill","d","Steps","CustomRcSteps","icons","finish","CheckIcon","Step","RcSteps","noop","isInteger","value","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","current","setCurrent","useState","pageSize","setPageSize","useEffect","allPages","useMemo","handleChange","useCallback","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","push","BsPagination","onClick","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","opt","minimumFractionDigits","Intl","format","LoadingButton","disabled","Button","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","id","uniqueId","TableContext","createContext","forwardRef","ref","percent","useContext","as","role","button","BsButton","Unauthorized","constructor","url","super","_defineProperty","rax","attach","axios","raxConfig","retryDelay","backoffType","shouldRetry","config","response","retryDecider","method","toUpperCase","maxContentLength","Infinity","maxBodyLength","baseURL","authTokenName","interceptors","request","use","token","localStorage","getItem","headers","Authorization","Promise","reject","isRecord","location","window","href","undefined","isAxiosError","isRequestError","showRequestError","values","join","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","useSafeState","initialState","unmountedRef","useRef","useUnmountedRef","state","setState","currentState","MessageContext","wrapMessage","Component","resolve","destroy","show","setShow","initState","callbackRef","useStateWithCallback","context","handleResolve","onHide","onExited","container","createMessage","component","hide","listener","memoryState","Set","modal","add","delete","Confirm","okText","cancelText","Modal","Header","Body","Footer","header","footer","onOk","onCancel","okButtonProps","bodyAs","headerAs","confirmLoading","rest","setLoading","okButton","defaultPrevented","cancelButton","ReactModal","closeButton","RequestButton","onSuccess","fetching","setFetching","handleClick","preventDefault","Provider","Array","from","index","Fragment","localize","require","widgets","upload","getRegistry","endpoint","onUpload","FormData","set","file","editor","typeahead","_ref3","onSearch","query","_ref4","Form","_ref5","action","formData","onSubmitting","onSubmit","submitText","transformData","extraErrors","setExtraErrors","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Checkbox","indeterminate","SvgPlusSquare","SvgMinusSquare","useCallbackRef","deps","_len","args","_key","useControllableState","valueProp","defaultValue","shouldUpdate","prev","next","onChangeProp","shouldUpdateProp","uncontrolledState","setUncontrolledState","controlled","setValue","nextValue","useDebounce","wait","debouncedCallbackRef","debounce","Search","onKeywordChange","debouncedOnKeywordChange","Control","placeholder","CustomTHead","thead","components","table","BsTable","wrapper","ExpandIconContainer","a","ExpandIcon","record","expanded","expandable","onExpand","MinusIcon","PlusIcon","CustomPagination","Table","rowKey","paginate","toolBarRender","columns","search","rowSelection","card","sync","pagination","setPagination","setParams","useUrlSearchParams","setKeyword","q","page","setPage","fetchData","isPagination","current_page","per_page","reload","useImperativeHandle","transformColumns","keys","setKeys","selectedRowKeys","getRowKey","getRecordByKey","find","setSelectedKeys","changedKeys","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","forEach","align","render","useSelection","customColumns","valueType","column","customColumn","LeftTools","RightTools","unstable_batchedUpdates","Action","RcTable","expandIcon","span","useOverlayState","onShow","visible","setVisible","setKey","exit","ModalButton","text","modalProps","ModalForm","buttonProps","form","handleOk","handleSuccess","hidden","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/components",
3
- "version": "1.0.35",
3
+ "version": "1.0.37",
4
4
  "scripts": {
5
5
  "prebuild": "rimraf lib types",
6
6
  "build": "rollup -c --environment NODE_ENV:production",
@@ -61,5 +61,5 @@
61
61
  },
62
62
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
63
63
  "license": "MIT",
64
- "gitHead": "948efe58456c89ba45d1063fde2b717df21ad857"
64
+ "gitHead": "7d49125ccedc1fcd6fc924cdfabbca0b0881efa3"
65
65
  }
@@ -0,0 +1,8 @@
1
+ interface ConfirmOptions {
2
+ title?: string;
3
+ message: string;
4
+ okText?: string;
5
+ cancelText?: string;
6
+ }
7
+ export default function confirm(options: ConfirmOptions): Promise<true | void>;
8
+ export {};
@@ -2,6 +2,7 @@ import { ModalProps as ReactModalProps } from 'react-bootstrap';
2
2
  import { ElementType, MouseEvent, ReactNode } from 'react';
3
3
  import { ButtonProps } from '../button';
4
4
  import show from './show';
5
+ import confirm from './confirm';
5
6
  import Message, { MessageProps } from './message';
6
7
  export interface ModalProps extends Pick<ReactModalProps, 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'> {
7
8
  children: ReactNode;
@@ -24,6 +25,7 @@ export interface ModalProps extends Pick<ReactModalProps, 'style' | 'container'
24
25
  declare const Modal: {
25
26
  ({ header, children, footer, closable, show, cancelText, okText, onOk, onCancel, onHide, okButtonProps, bodyAs, headerAs, confirmLoading, ...rest }: ModalProps): JSX.Element;
26
27
  Message: typeof Message;
28
+ confirm: typeof confirm;
27
29
  show: typeof show;
28
30
  };
29
31
  export default Modal;