@topthink/components 1.0.7 → 1.0.8-alpha.9

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,2 +1,112 @@
1
- import e from"sweetalert2/dist/sweetalert2.js";import r from"sweetalert2-react-content";import{jsx as t,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,Table as u,Form as d,Modal as p,OverlayTrigger as f,Tooltip as m}from"react-bootstrap";import h from"rc-notification";import g,{css as y}from"styled-components";export{createGlobalStyle,css,keyframes,default as styled}from"styled-components";import b from"classnames";import*as v from"react";import{Children as x,useState as w,useEffect as k,useMemo as C,useCallback as j,createElement as S,forwardRef as N,useRef as F,useImperativeHandle as E}from"react";import O from"rc-steps";import"rc-steps/assets/index.css";import z from"axios";import*as I from"retry-axios";import{useNavigate as A}from"react-router-dom";import U,{getRegistry as $}from"@topthink/json-form";import{mapValues as B,debounce as R,uniqueId as T,values as D}from"lodash";import _ from"rc-table";import{useAsyncCallback as L}from"react-async-hook";export{useAsync,useAsyncCallback}from"react-async-hook";const P=r(e),q={confirmButtonText:"确定",cancelButtonText:"取消"},M={confirm:async e=>{const{isConfirmed:r}=await P.fire({...q,icon:"warning",showCancelButton:!0,...e,async preConfirm(r){if(e.preConfirm)try{return await e.preConfirm(r)}catch(e){return e instanceof Error&&P.showValidationMessage(e.message),!1}return!0}});return r},success:e=>{P.fire({...q,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{P.fire({...q,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{P.close(e)}};let H;const K=e=>{let{type:r,...n}=e;!function(e){if(H)return e(H);h.newInstance({prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(r=>{H?e(H):(H=r,e(r))}))}((e=>{n.duration=3;let o=r;if("error"===r)o="danger",n.duration=n.closable?0:5;n.content=t(i,{variant:o,children:n.content}),e.notice(n)}))};let V={};function G(e,r){return r||(r=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(r)}}))}var Y,J,Q,W;["error","success","info"].forEach((e=>{V[e]=(r,t)=>{K({...t,type:e,content:r})}}));const X=g.div(Y||(Y=G(["\n padding: 48px 32px;\n"]))),Z=g.div(J||(J=G(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),ee=g.div(Q||(Q=G(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),re=g.div(W||(W=G(["\n margin-top: 32px;\n text-align: center;\n"]))),te={success:t("i",{className:"bi bi-check-circle-fill text-success"}),error:t("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:t("i",{className:"bi bi-info-circle-fill text-info"}),warning:t("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function ne(e){let{status:r,title:o,icon:i,extra:a}=e;return!i&&r&&(i=te[r]),n(X,{children:[i&&t(Z,{children:i}),o&&t(ee,{children:o}),a&&t(re,{children:a})]})}var oe,ie;g.div(oe||(oe=G(["\n position: relative;\n"])));const ae=g.div(ie||(ie=G(["\n display: ",";\n position: absolute;\n top: 0 !important;\n left: 0 !important;\n width: 100%;\n height: 100%;\n text-align: center;\n vertical-align: middle;\n padding: 1em;\n background-color: ",";\n opacity: ",";\n line-height: 1;\n animation-fill-mode: both;\n animation-duration: .5s;\n transition: background-color .5s linear;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n user-select: none;\n will-change: opacity;\n z-index: 990;\n"])),(e=>e.active?"flex":"none"),(e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"),(e=>e.active?1:0));var ce;function se(e){let{loading:r=!0,children:o,variant:i="primary",animation:c="border",wrap:s,...l}=e;return r?(o&&(o=t("p",{className:"mt-3 text-secondary",children:o})),o=n(ae,{inverted:!0,active:!0,children:[t(a,{animation:c,variant:i,...l}),o]}),s?t(le,{$height:"number"==typeof s?s:150,children:o}):o):null}const le=g.div(ce||(ce=G(["\n position: relative;\n height: ",";\n"])),(e=>"".concat(e.$height,"px")));function ue(e){let{children:r,title:i,className:a,...s}=e;return t(c,{className:b("border-0 shadow-sm mb-3",a),...s,children:n("div",{className:"card-body",children:[i&&n(o,{children:[t("h5",{children:i}),t("hr",{})]}),r]})})}function de(e){let{errors:r}=e;return r?t(i,{variant:"danger",children:t("ul",{className:"mb-0",children:"string"==typeof r?t("li",{children:r}):Object.entries(r).map((e=>{let[r,n]=e;return t("li",{children:n},r)}))})}):null}var pe,fe,me;function he(e){let{children:r,className:n,size:o="small",direction:i="horizontal"}=e;"string"==typeof o&&(o={small:8,middle:16,large:24}[o]);const a=x.map(r,(e=>{if(e)return t(ye,{children:e})}));return t(ge,{className:n,$direction:i,$size:o,children:a})}const ge=g.div(pe||(pe=G(["\n display: inline-flex;\n align-items: center;\n gap: ","px;\n\n ","\n"])),(e=>e.$size),(e=>"vertical"===e.$direction&&y(fe||(fe=G(["\n display: flex;\n flex-direction: column;\n align-items: inherit;\n "]))))),ye=g.div(me||(me=G(["\n\n"])));var be;function ve(){return ve=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},ve.apply(this,arguments)}const xe=e=>v.createElement("svg",ve({className:"step_check_svg__icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),be||(be=v.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"})));var we;function ke(e){return t(Ce,{icons:{finish:t(xe,{}),error:t(o,{})},...e})}ke.Step=O.Step;const Ce=g(O)(we||(we=G(["\n .rc-steps-item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n & > .rc-steps-icon {\n top: 0;\n }\n }\n\n .rc-steps-item-process {\n .rc-steps-item-icon {\n background: var(--bs-primary);\n border-color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-finish {\n .rc-steps-item-icon {\n border-color: var(--bs-primary);\n\n & > .rc-steps-icon {\n color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-title:after {\n background-color: var(--bs-primary);\n }\n }\n\n"])));function je(){}function Se(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function Ne(e){let{total:r=0,onChange:n=je,defaultCurrent:o=1,defaultPageSize:i=10,className:a,...c}=e;const[l,u]=w(o),[d,p]=w(i);k((()=>{Se(c.current)&&u(c.current)}),[c.current]),k((()=>{Se(c.pageSize)&&p(c.pageSize)}),[c.pageSize]);const f=C((()=>Math.floor((r-1)/d)+1),[r,d]),m=j((e=>()=>{e!==l&&(u(e),n(e,d))}),[n,l,d]),h=l-1>0?l-1:0,g=l+1<f?l+1:f,y=[];let b=null,v=null,x=null,S=null;if(f<=7)for(let e=1;e<=f;e+=1){const r=l===e;y.push(t(s.Item,{active:r,onClick:m(e),children:e},e))}else{S=t(s.Last,{onClick:m(f)},"last"),x=t(s.First,{onClick:m(1)},"first"),b=t(s.Prev,{onClick:m(h)},"prev"),v=t(s.Next,{onClick:m(g)},"next");let e=Math.max(1,l-2),r=Math.min(l+2,f);l-1<=2&&(r=5),f-l<=2&&(e=f-4);for(let n=e;n<=r;n+=1){const e=l===n;y.push(t(s.Item,{active:e,onClick:m(n),children:n},n))}l-1>=4&&3!==l&&y.unshift(b),f-l>=4&&l!==f-2&&y.push(v),1!==e&&y.unshift(x),r!==f&&y.push(S)}return t(s,{className:a,children:y})}function Fe(e){let{className:r,value:n,locale:i="zh-CN",currency:a=!0}=e;const c=C((()=>{let e={};return e=a?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(i,e)}),[a,i]);return r?t("span",{className:r,children:c.format(n)}):t(o,{children:c.format(n)})}function Ee(e){let{loading:r,disabled:n,children:o,...i}=e;return t(l,{...i,disabled:r||n,children:r?"Loading…":o})}var Oe={},ze=e=>encodeURIComponent(e).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)),Ie=new RegExp("%[a-f0-9]{2}","gi"),Ae=new RegExp("(%[a-f0-9]{2})+","gi");function Ue(e,r){try{return decodeURIComponent(e.join(""))}catch(e){}if(1===e.length)return e;r=r||1;var t=e.slice(0,r),n=e.slice(r);return Array.prototype.concat.call([],Ue(t),Ue(n))}function $e(e){try{return decodeURIComponent(e)}catch(n){for(var r=e.match(Ie),t=1;t<r.length;t++)r=(e=Ue(r,t).join("")).match(Ie);return e}}var Be=function(e){if("string"!=typeof e)throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof e+"`");try{return e=e.replace(/\+/g," "),decodeURIComponent(e)}catch(r){return function(e){for(var r={"%FE%FF":"��","%FF%FE":"��"},t=Ae.exec(e);t;){try{r[t[0]]=decodeURIComponent(t[0])}catch(e){var n=$e(t[0]);n!==t[0]&&(r[t[0]]=n)}t=Ae.exec(e)}r["%C2"]="�";for(var o=Object.keys(r),i=0;i<o.length;i++){var a=o[i];e=e.replace(new RegExp(a,"g"),r[a])}return e}(e)}},Re=(e,r)=>{if("string"!=typeof e||"string"!=typeof r)throw new TypeError("Expected the arguments to be of type `string`");if(""===r)return[e];const t=e.indexOf(r);return-1===t?[e]:[e.slice(0,t),e.slice(t+r.length)]},Te=function(e,r){for(var t={},n=Object.keys(e),o=Array.isArray(r),i=0;i<n.length;i++){var a=n[i],c=e[a];(o?-1!==r.indexOf(a):r(a,c,e))&&(t[a]=c)}return t};!function(e){const r=ze,t=Be,n=Re,o=Te,i=Symbol("encodeFragmentIdentifier");function a(e){if("string"!=typeof e||1!==e.length)throw new TypeError("arrayFormatSeparator must be single character string")}function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function s(e,r){return r.decode?t(e):e}function l(e){return Array.isArray(e)?e.sort():"object"==typeof e?l(Object.keys(e)).sort(((e,r)=>Number(e)-Number(r))).map((r=>e[r])):e}function u(e){const r=e.indexOf("#");return-1!==r&&(e=e.slice(0,r)),e}function d(e){const r=(e=u(e)).indexOf("?");return-1===r?"":e.slice(r+1)}function p(e,r){return r.parseNumbers&&!Number.isNaN(Number(e))&&"string"==typeof e&&""!==e.trim()?e=Number(e):!r.parseBooleans||null===e||"true"!==e.toLowerCase()&&"false"!==e.toLowerCase()||(e="true"===e.toLowerCase()),e}function f(e,r){a((r=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},r)).arrayFormatSeparator);const t=function(e){let r;switch(e.arrayFormat){case"index":return(e,t,n)=>{r=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),r?(void 0===n[e]&&(n[e]={}),n[e][r[1]]=t):n[e]=t};case"bracket":return(e,t,n)=>{r=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),r?void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=[t]:n[e]=t};case"comma":case"separator":return(r,t,n)=>{const o="string"==typeof t&&t.includes(e.arrayFormatSeparator),i="string"==typeof t&&!o&&s(t,e).includes(e.arrayFormatSeparator);t=i?s(t,e):t;const a=o||i?t.split(e.arrayFormatSeparator).map((r=>s(r,e))):null===t?t:s(t,e);n[r]=a};case"bracket-separator":return(r,t,n)=>{const o=/(\[\])$/.test(r);if(r=r.replace(/\[\]$/,""),!o)return void(n[r]=t?s(t,e):t);const i=null===t?[]:t.split(e.arrayFormatSeparator).map((r=>s(r,e)));void 0!==n[r]?n[r]=[].concat(n[r],i):n[r]=i};default:return(e,r,t)=>{void 0!==t[e]?t[e]=[].concat(t[e],r):t[e]=r}}}(r),o=Object.create(null);if("string"!=typeof e)return o;if(!(e=e.trim().replace(/^[?#&]/,"")))return o;for(const i of e.split("&")){if(""===i)continue;let[e,a]=n(r.decode?i.replace(/\+/g," "):i,"=");a=void 0===a?null:["comma","separator","bracket-separator"].includes(r.arrayFormat)?a:s(a,r),t(s(e,r),a,o)}for(const e of Object.keys(o)){const t=o[e];if("object"==typeof t&&null!==t)for(const e of Object.keys(t))t[e]=p(t[e],r);else o[e]=p(t,r)}return!1===r.sort?o:(!0===r.sort?Object.keys(o).sort():Object.keys(o).sort(r.sort)).reduce(((e,r)=>{const t=o[r];return Boolean(t)&&"object"==typeof t&&!Array.isArray(t)?e[r]=l(t):e[r]=t,e}),Object.create(null))}e.extract=d,e.parse=f,e.stringify=(e,r)=>{if(!e)return"";a((r=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},r)).arrayFormatSeparator);const t=t=>r.skipNull&&null==e[t]||r.skipEmptyString&&""===e[t],n=function(e){switch(e.arrayFormat){case"index":return r=>(t,n)=>{const o=t.length;return void 0===n||e.skipNull&&null===n||e.skipEmptyString&&""===n?t:null===n?[...t,[c(r,e),"[",o,"]"].join("")]:[...t,[c(r,e),"[",c(o,e),"]=",c(n,e)].join("")]};case"bracket":return r=>(t,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&""===n?t:null===n?[...t,[c(r,e),"[]"].join("")]:[...t,[c(r,e),"[]=",c(n,e)].join("")];case"comma":case"separator":case"bracket-separator":{const r="bracket-separator"===e.arrayFormat?"[]=":"=";return t=>(n,o)=>void 0===o||e.skipNull&&null===o||e.skipEmptyString&&""===o?n:(o=null===o?"":o,0===n.length?[[c(t,e),r,c(o,e)].join("")]:[[n,c(o,e)].join(e.arrayFormatSeparator)])}default:return r=>(t,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&""===n?t:null===n?[...t,c(r,e)]:[...t,[c(r,e),"=",c(n,e)].join("")]}}(r),o={};for(const r of Object.keys(e))t(r)||(o[r]=e[r]);const i=Object.keys(o);return!1!==r.sort&&i.sort(r.sort),i.map((t=>{const o=e[t];return void 0===o?"":null===o?c(t,r):Array.isArray(o)?0===o.length&&"bracket-separator"===r.arrayFormat?c(t,r)+"[]":o.reduce(n(t),[]).join("&"):c(t,r)+"="+c(o,r)})).filter((e=>e.length>0)).join("&")},e.parseUrl=(e,r)=>{r=Object.assign({decode:!0},r);const[t,o]=n(e,"#");return Object.assign({url:t.split("?")[0]||"",query:f(d(e),r)},r&&r.parseFragmentIdentifier&&o?{fragmentIdentifier:s(o,r)}:{})},e.stringifyUrl=(r,t)=>{t=Object.assign({encode:!0,strict:!0,[i]:!0},t);const n=u(r.url).split("?")[0]||"",o=e.extract(r.url),a=e.parse(o,{sort:!1}),s=Object.assign(a,r.query);let l=e.stringify(s,t);l&&(l=`?${l}`);let d=function(e){let r="";const t=e.indexOf("#");return-1!==t&&(r=e.slice(t)),r}(r.url);return r.fragmentIdentifier&&(d=`#${t[i]?c(r.fragmentIdentifier,t):r.fragmentIdentifier}`),`${n}${l}${d}`},e.pick=(r,t,n)=>{n=Object.assign({parseFragmentIdentifier:!0,[i]:!1},n);const{url:a,query:c,fragmentIdentifier:s}=e.parseUrl(r,n);return e.stringifyUrl({url:a,query:o(c,t),fragmentIdentifier:s},n)},e.exclude=(r,t,n)=>{const o=Array.isArray(t)?e=>!t.includes(e):(e,r)=>!t(e,r);return e.pick(r,o,n)}}(Oe);class De extends Error{constructor(e){var r,t,n;super("Unauthorized"),n=void 0,(t="url")in(r=this)?Object.defineProperty(r,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[t]=n,this.url=e}}I.attach(),z.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{var r,t;return"GET"===(null===(r=e.config.method)||void 0===r?void 0:r.toUpperCase())&&449===(null===(t=e.response)||void 0===t?void 0:t.status)}},z.defaults.maxContentLength=1/0,z.defaults.maxBodyLength=1/0,z.defaults.baseURL="/api",z.interceptors.request.use((e=>{const r=localStorage.getItem("authorization");return r&&(e.headers={...e.headers,Authorization:"Bearer ".concat(r)}),e}),(e=>Promise.reject(e)));const _e=e=>e&&"object"==typeof e;z.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(z.isAxiosError(e)&&e.response){const{data:r,status:t}=e.response;401===t?(e.errors="Unauthorized",_e(r)&&r.url&&(e=new De(r.url)),V.error("Unauthorized")):_e(r)?422===t?e.errors=r:"message"in r&&(e.errors=r.message):e.errors=r}return Promise.reject(e)}));const Le=z.isAxiosError,Pe=e=>{if(!z.isAxiosError(e))throw e;{let r=e.errors;"string"!=typeof e.errors&&(r=Object.values(e.errors).join("<br />")),M.error({title:r})}},qe=async function(e){e="string"==typeof e?{url:e}:e;const{data:r}=await z.request({paramsSerializer:function(e){return Oe.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return r};function Me(e){let{url:r,method:t,confirm:n,onSuccess:o,children:i,disabled:a,as:c=l,...s}=e;const[u,d]=w(!1),p=j((async e=>{e.preventDefault();try{if(d(!0),n&&!await M.confirm({text:n}))return;const e="string"==typeof r?{url:r,method:t}:{method:t,...r},i=await qe(e);o&&o(i)}catch(e){Pe(e)}finally{d(!1)}}),[r,t,d]);return S(c,{...s,disabled:a||u,onClick:p},i)}function He(e){let{to:r,replace:n,...o}=e,i=A();return t(l,{...o,onClick:e=>{e.preventDefault(),i(r,{replace:n})}})}qe.defaults=z.defaults,qe.interceptors=z.interceptors;const Ke=require("ajv-i18n/localize/zh"),Ve={upload:function(e){const{widgets:r}=$(),n={...e.options,async onUpload(r){if(e.options.onUpload instanceof Function)return await e.options.onUpload.call(void 0,r);if(e.options.endpoint){const t=new FormData;t.set("file",r);const{url:n}=await qe({url:e.options.endpoint,method:"post",data:t});return n}}};return t(r.upload,{...e,options:n})}},Ge=N(((e,r)=>{let{action:n,method:o="post",onSuccess:i,formData:a,onSubmitting:c,onSubmit:s,onChange:l,submitText:u="提交",children:d,...p}=e;const[f,m]=w(),[h,g]=w(!1),[y,b]=w(a),v=j((async(e,r)=>{if(!h)try{if(g(!0),c&&c(!0),n){const{formData:r}=e;try{const e=await qe({url:n,method:o,data:r});return m(void 0),i&&await i(e),e}catch(e){if(!z.isAxiosError(e))throw e;m((e=>{const r=e.errors;return"string"==typeof r?{__errors:[r]}:B(r,(e=>({__errors:[e]})))})(e))}}else if(s)return await s(e,r)}finally{g(!1),c&&c(!1)}}),[n,o,s]),x=j((e=>{const{formData:r}=e;b(r),l&&l(e)}),[b,l]),k=j((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),Ke(e),e)),[]),C=t(Ee,{loading:h,type:"submit",variant:"primary",children:u});return"function"==typeof d&&(d=d({submit:C,loading:h})),t(U,{ref:r,extraErrors:f,onSubmit:v,transformErrors:k,noHtml5Validate:!0,noValidate:!0,...p,formData:y,onChange:x,widgets:Ve,children:d||t("div",{className:"col-12",children:C})})}));const Ye=function(e){let{indeterminate:r=!1,...n}=e;const o=F(null);return k((()=>{o.current&&(o.current.indeterminate=r)}),[r]),t("input",{ref:o,...n,className:"form-check-input",type:"checkbox"})};var Je,Qe,We,Xe,Ze,er;const rr=g(u)(Je||(Je=G(["\n .rc-table-thead {\n border-top: none;\n }\n"]))),tr={table:e=>t(rr,{...e,className:"align-middle table-hover"})},nr=g(Ne)(Qe||(Qe=G(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function or(e){return"current_page"in e}const ir=N(((e,r)=>{let{source:i,rowKey:a="id",paginate:c=!0,toolBarRender:s,columns:l=[],search:u,rowSelection:p,card:f=!0,...m}=e;const[h,g]=w([]),[y,b]=w(c?{total:0,current:1,pageSize:10}:null),[v,x]=w(!0),[S,N]=w(""),O=j((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};x(!0);try{let r;if("string"==typeof i){const t={q:S};y&&(t.page=e.page||y.current),r=await qe({url:i,params:t})}else r=await i();c&&or(r)&&(b({total:r.total,current:r.current_page,pageSize:r.per_page}),r=r.data),g(r)}catch(e){}finally{x(!1)}}),[i,g,y,S]);k((()=>{O()}),[S]);const z=F({reload:O});k((()=>{z.current={reload:O}}),[O]),E(r,(()=>z.current));const[I]=function(e,r,n){const[o,i]=w((()=>new Set((null==e?void 0:e.selectedRowKeys)||[]))),a=e=>"string"==typeof r?e[r]:r(e),c=e=>n.find((r=>a(r)===e)),s=j((r=>{i(r);const t=Array.from(r),n=t.map((function(e){return c(e)}));null!=e&&e.onChange&&(null==e||e.onChange(t,n))}),[c]);return[j((r=>{if(!e)return r;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:t(Ye,{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:r}=e;const n=a(r),i=o.has(n);return t(Ye,{checked:i,onChange:()=>{i?o.delete(n):o.add(n),s(new Set(o))}})}},...r]}),[n,e,o])]}(p,a,h),A=C((()=>I(l).map((e=>{const r={...e,render:void 0};if("render"in e&&e.render){const t=e.render;r.render=(e,r,n)=>t({value:e,record:r,index:n,action:z.current})}return r}))),[l,I,z]),U=function(e,r,t){const n=F(e),o=F(R(e,r,t));return k((()=>{n.current=e})),k((()=>{o.current=R((function(){n.current(...arguments)}),r,t)}),[r,t]),o.current}((e=>{N(e.target.value)}),500),$=n(o,{children:[t(se,{loading:v}),!1!==s&&n(ar,{children:[t(sr,{size:12,children:s&&s(z.current)}),n(cr,{size:12,children:[u&&t(d.Control,{onChange:U,type:"search",placeholder:"Search..."}),t(lr,{onClick:z.current.reload,children:t("i",{className:"bi bi-arrow-repeat"})})]})]}),t(_,{...m,rowKey:a,columns:A,components:tr,data:h}),y&&t(nr,{...y,onChange:e=>{O({page:e})}})]});return f?t(ue,{children:$}):$})),ar=g.div(We||(We=G(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n height: 48px;\n border-bottom: 2px solid #212529;\n"]))),cr=g(he)(Xe||(Xe=G(["\n\n"]))),sr=g(he)(Ze||(Ze=G(["\n\n"]))),lr=g.span(er||(er=G(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"])));let ur=0;function dr(){let{onHide:e,onShow:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[t,n]=w(!1),[o,i]=w("visible-".concat(ur)),a=j((()=>{n(!1),e&&e()}),[n,e]),c=j((()=>{i("visible-".concat(++ur))}),[i,ur]),s=j((()=>{n(!0),r&&r()}),[n,r]),l={show:t,onHide:a,onExited:c,key:o};return{visible:t,show:s,hide:a,state:l}}function pr(e){let{text:r,variant:i,header:a=r,schema:c,uiSchema:s,action:u,method:d,formData:f,onSuccess:m,onChange:h,fields:g,size:y,onShow:b,okText:v="确定",formContext:x,className:k,as:C=l}=e;const[N,E]=w(!1),O=F(null),z=j((()=>{var e;null===(e=O.current)||void 0===e||e.submit()}),[]),{state:I,show:A,hide:U}=dr(),$=S(C,{className:k,variant:i,onClick:A},r),B=j((e=>{m&&m(e),U()}),[m]);return n(o,{children:[$,n(p,{size:y,...I,onShow:b,children:[t(p.Header,{closeButton:!0,children:t(p.Title,{as:"h5",children:a})}),t(p.Body,{children:t(Ge,{onSubmitting:E,ref:O,schema:c,uiSchema:s,action:u,method:d,formData:f,fields:g,onChange:h,onSuccess:B,formContext:x,children:t("input",{type:"submit",hidden:!0})})}),n(p.Footer,{children:[t(l,{variant:"secondary",onClick:U,children:"取消"}),t(Ee,{loading:N,variant:"primary",onClick:z,children:v})]})]})]})}const fr=N(((e,r)=>{let{text:i,variant:a,header:c=i,footer:s=!0,onOk:u,size:d,okText:f="确定",onShow:m,children:h,as:g=l}=e;const[y,b]=w(!1),{state:v,show:x,hide:k}=dr({onShow:m});E(r,(()=>({close:k})));const C=S(g,{variant:a,onClick:x},i);return n(o,{children:[C,n(p,{size:d,...v,children:[c&&t(p.Header,{closeButton:!0,children:t(p.Title,{as:"h5",children:c})}),t(p.Body,{children:h}),s&&n(p.Footer,{children:[t(l,{variant:"secondary",onClick:k,children:"取消"}),t(Ee,{loading:y,variant:"primary",onClick:async()=>{if(u){b(!0);const e=await u();if(b(!1),!1===e)return}k()},children:f})]})]})]})}));function mr(e){let{tooltip:r,children:n,placement:o="bottom"}=e;return t(f,{placement:o,overlay:t(m,{id:T(),children:r}),children:n})}function hr(e){let{manual:r,refreshDeps:t,...n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:o,currentParams:i,error:a,...c}=L((async r=>(e="string"==typeof e?{url:e}:e,await qe({...e,...r}))),n);k((()=>{r||t||o()}),[]),k((()=>{t&&s()}),t);const s=j((()=>{i?o(...i):o()}),[o,i]);if(a&&Le(a)){const e=a.errors;a=new Error("string"==typeof e?e:D(e).join(""))}return{refresh:s,execute:o,error:a,...c}}export{ue as Card,de as Error,Ge as Form,He as LinkButton,se as Loader,Ee as LoadingButton,M as Message,fr as ModalButton,pr as ModalForm,Fe as NumberFormat,Ne as Pagination,Me as RequestButton,ne as Result,he as Space,ke as Steps,ir as Table,V as Toast,mr as Tooltip,De as Unauthorized,Le as isRequestError,qe as request,Pe as showRequestError,dr as useOverlayState,hr as useRequest};
1
+ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-content";import{jsx as r,jsxs as n,Fragment as i}from"react/jsx-runtime";import{Alert as o,Spinner as a,Card as c,Pagination as s,Button as l,Table as d,Form as u,Modal as m,OverlayTrigger as h,Tooltip as p}from"react-bootstrap";import f from"rc-notification";import g,{css as y}from"styled-components";export{createGlobalStyle,css,keyframes,default as styled}from"styled-components";import b from"classnames";import*as v from"react";import{Children as x,useState as w,useEffect as C,useMemo as k,useCallback as S,createElement as z,forwardRef as N,useRef as j,useImperativeHandle as E}from"react";import $ from"rc-steps";import"rc-steps/assets/index.css";import B from"axios";import D from"query-string";import*as T from"retry-axios";import _ from"@babel/runtime/helpers/defineProperty";import F,{getRegistry as P}from"@topthink/json-form";import{mapValues as A,debounce as U,uniqueId as L,values as O}from"lodash";import M from"rc-table";import{useAsyncCallback as q}from"react-async-hook";export{useAsync,useAsyncCallback}from"react-async-hook";const H=t(e),I={confirmButtonText:"确定",cancelButtonText:"取消"},R={confirm:async e=>{const{isConfirmed:t}=await H.fire({...I,icon:"warning",showCancelButton:!0,...e,async preConfirm(t){if(e.preConfirm)try{return await e.preConfirm(t)}catch(e){return e instanceof Error&&H.showValidationMessage(e.message),!1}return!0}});return t},success:e=>{H.fire({...I,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{H.fire({...I,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{H.close(e)}};let K;const V=e=>{let{type:t,...n}=e;!function(e){if(K)return e(K);f.newInstance({prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(t=>{K?e(K):(K=t,e(t))}))}((e=>{n.duration=3;let i=t;if("error"===t)i="danger",n.duration=n.closable?0:5;n.content=r(o,{variant:i,children:n.content}),e.notice(n)}))};let G={};["error","success","info"].forEach((e=>{G[e]=(t,r)=>{V({...r,type:e,content:t})}}));const Y=g.div`
2
+ padding: 48px 32px;
3
+ `,J=g.div`
4
+ margin-bottom: 24px;
5
+ text-align: center;
6
+ font-size: 72px;
7
+ `,Q=g.div`
8
+ color: rgba(0, 0, 0, .85);
9
+ font-size: 24px;
10
+ line-height: 1.8;
11
+ text-align: center;
12
+ `,W=g.div`
13
+ margin-top: 32px;
14
+ text-align: center;
15
+ `,X={success:r("i",{className:"bi bi-check-circle-fill text-success"}),error:r("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:r("i",{className:"bi bi-info-circle-fill text-info"}),warning:r("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function Z(e){let{status:t,title:i,icon:o,extra:a}=e;return!o&&t&&(o=X[t]),n(Y,{children:[o&&r(J,{children:o}),i&&r(Q,{children:i}),a&&r(W,{children:a})]})}g.div`
16
+ position: relative;
17
+ `;const ee=g.div`
18
+ display: ${e=>e.active?"flex":"none"};
19
+ position: absolute;
20
+ top: 0 !important;
21
+ left: 0 !important;
22
+ width: 100%;
23
+ height: 100%;
24
+ text-align: center;
25
+ vertical-align: middle;
26
+ padding: 1em;
27
+ background-color: ${e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"};
28
+ opacity: ${e=>e.active?1:0};
29
+ line-height: 1;
30
+ animation-fill-mode: both;
31
+ animation-duration: .5s;
32
+ transition: background-color .5s linear;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ justify-content: center;
36
+ user-select: none;
37
+ will-change: opacity;
38
+ z-index: 990;
39
+ `;function te(e){let{loading:t=!0,children:i,variant:o="primary",animation:c="border",wrap:s,...l}=e;return t?(i&&(i=r("p",{className:"mt-3 text-secondary",children:i})),i=n(ee,{inverted:!0,active:!0,children:[r(a,{animation:c,variant:o,...l}),i]}),s?r(re,{$height:"number"==typeof s?s:150,children:i}):i):null}const re=g.div`
40
+ position: relative;
41
+ height: ${e=>`${e.$height}px`};
42
+ `;function ne(e){let{children:t,title:o,className:a,...s}=e;return r(c,{className:b("border-0 shadow-sm mb-3",a),...s,children:n("div",{className:"card-body",children:[o&&n(i,{children:[r("h5",{children:o}),r("hr",{})]}),t]})})}function ie(e){let{errors:t}=e;return t?r(o,{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 oe(e){let{children:t,className:n,size:i="small",direction:o="horizontal"}=e;"string"==typeof i&&(i={small:8,middle:16,large:24}[i]);const a=x.map(t,(e=>{if(e)return r(ce,{children:e})}));return r(ae,{className:n,$direction:o,$size:i,children:a})}const ae=g.div`
43
+ display: inline-flex;
44
+ align-items: center;
45
+ gap: ${e=>e.$size}px;
46
+
47
+ ${e=>"vertical"===e.$direction&&y`
48
+ display: flex;
49
+ flex-direction: column;
50
+ align-items: inherit;
51
+ `}
52
+ `,ce=g.div`
53
+
54
+ `;var se;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 de=e=>v.createElement("svg",le({className:"step_check_svg__icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),se||(se=v.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 ue(e){return r(me,{icons:{finish:r(de,{}),error:r(i,{})},...e})}ue.Step=$.Step;const me=g($)`
55
+ .rc-steps-item-icon {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+
60
+ & > .rc-steps-icon {
61
+ top: 0;
62
+ }
63
+ }
64
+
65
+ .rc-steps-item-process {
66
+ .rc-steps-item-icon {
67
+ background: var(--bs-primary);
68
+ border-color: var(--bs-primary);
69
+ }
70
+ }
71
+
72
+ .rc-steps-item-finish {
73
+ .rc-steps-item-icon {
74
+ border-color: var(--bs-primary);
75
+
76
+ & > .rc-steps-icon {
77
+ color: var(--bs-primary);
78
+ }
79
+ }
80
+
81
+ .rc-steps-item-title:after {
82
+ background-color: var(--bs-primary);
83
+ }
84
+ }
85
+
86
+ `;function he(){}function pe(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function fe(e){let{total:t=0,onChange:n=he,defaultCurrent:i=1,defaultPageSize:o=10,className:a,...c}=e;const[l,d]=w(i),[u,m]=w(o);C((()=>{pe(c.current)&&d(c.current)}),[c.current]),C((()=>{pe(c.pageSize)&&m(c.pageSize)}),[c.pageSize]);const h=k((()=>Math.floor((t-1)/u)+1),[t,u]),p=S((e=>()=>{e!==l&&(d(e),n(e,u))}),[n,l,u]),f=l-1>0?l-1:0,g=l+1<h?l+1:h,y=[];let b=null,v=null,x=null,z=null;if(h<=7)for(let e=1;e<=h;e+=1){const t=l===e;y.push(r(s.Item,{active:t,onClick:p(e),children:e},e))}else{z=r(s.Last,{onClick:p(h)},"last"),x=r(s.First,{onClick:p(1)},"first"),b=r(s.Prev,{onClick:p(f)},"prev"),v=r(s.Next,{onClick:p(g)},"next");let e=Math.max(1,l-2),t=Math.min(l+2,h);l-1<=2&&(t=5),h-l<=2&&(e=h-4);for(let n=e;n<=t;n+=1){const e=l===n;y.push(r(s.Item,{active:e,onClick:p(n),children:n},n))}l-1>=4&&3!==l&&y.unshift(b),h-l>=4&&l!==h-2&&y.push(v),1!==e&&y.unshift(x),t!==h&&y.push(z)}return r(s,{className:a,children:y})}function ge(e){let{className:t,value:n,locale:o="zh-CN",currency:a=!0}=e;const c=k((()=>{let e={};return e=a?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(o,e)}),[a,o]);return t?r("span",{className:t,children:c.format(n)}):r(i,{children:c.format(n)})}function ye(e){let{loading:t,disabled:n,children:i,...o}=e;return r(l,{...o,disabled:t||n,children:t?"Loading…":i})}class be extends Error{constructor(e){super("Unauthorized"),_(this,"url",void 0),this.url=e}}T.attach(),B.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{var t,r;return"GET"===(null===(t=e.config.method)||void 0===t?void 0:t.toUpperCase())&&449===(null===(r=e.response)||void 0===r?void 0:r.status)}},B.defaults.maxContentLength=1/0,B.defaults.maxBodyLength=1/0,B.defaults.baseURL="/api",B.interceptors.request.use((e=>{const t=localStorage.getItem("authorization");return t&&(e.headers={...e.headers,Authorization:`Bearer ${t}`}),e}),(e=>Promise.reject(e)));const ve=e=>e&&"object"==typeof e;B.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(B.isAxiosError(e)&&e.response){const{data:t,status:r}=e.response;401===r?(e.errors="Unauthorized",ve(t)&&t.url&&(e=new be(t.url)),G.error("Unauthorized")):ve(t)?422===r?e.errors=t:"message"in t&&(e.errors=t.message):e.errors=t}return Promise.reject(e)}));const xe=B.isAxiosError,we=e=>{if(!B.isAxiosError(e))throw e;{let t=e.errors;"string"!=typeof e.errors&&(t=Object.values(e.errors).join("<br />")),R.error({title:t})}},Ce=async function(e){e="string"==typeof e?{url:e}:e;const{data:t}=await B.request({paramsSerializer:function(e){return D.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return t};function ke(e){let{url:t,method:r,confirm:n,onSuccess:i,children:o,disabled:a,as:c=l,...s}=e;const[d,u]=w(!1),m=S((async e=>{e.preventDefault();try{if(u(!0),n&&!await R.confirm({text:n}))return;const e="string"==typeof t?{url:t,method:r}:{method:r,...t},o=await Ce(e);i&&i(o)}catch(e){we(e)}finally{u(!1)}}),[t,r,u]);return z(c,{...s,disabled:a||d,onClick:m},o)}Ce.defaults=B.defaults,Ce.interceptors=B.interceptors;const Se=require("ajv-i18n/localize/zh"),ze={upload:function(e){const{widgets:t}=P(),n={...e.options,async onUpload(t){if(e.options.onUpload instanceof Function)return await e.options.onUpload.call(void 0,t);if(e.options.endpoint){const r=new FormData;r.set("file",t);const{url:n}=await Ce({url:e.options.endpoint,method:"post",data:r});return n}}};return r(t.upload,{...e,options:n})}},Ne=N(((e,t)=>{let{action:n,method:i="post",onSuccess:o,formData:a,onSubmitting:c,onSubmit:s,onChange:l,submitText:d="提交",children:u,...m}=e;const[h,p]=w(),[f,g]=w(!1),[y,b]=w(a),v=S((async(e,t)=>{if(!f)try{if(g(!0),c&&c(!0),n){const{formData:t}=e;try{const e=await Ce({url:n,method:i,data:t});return p(void 0),o&&await o(e),e}catch(e){if(!B.isAxiosError(e))throw e;p((e=>{const t=e.errors;return"string"==typeof t?{__errors:[t]}:A(t,(e=>({__errors:[e]})))})(e))}}else if(s)return await s(e,t)}finally{g(!1),c&&c(!1)}}),[n,i,s]),x=S((e=>{const{formData:t}=e;b(t),l&&l(e)}),[b,l]),C=S((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),Se(e),e)),[]),k=r(ye,{loading:f,type:"submit",variant:"primary",children:d});return"function"==typeof u&&(u=u({submit:k,loading:f})),r(F,{ref:t,extraErrors:h,onSubmit:v,transformErrors:C,noHtml5Validate:!0,noValidate:!0,...m,formData:y,onChange:x,widgets:ze,children:u||r("div",{className:"col-12",children:k})})}));const je=function(e){let{indeterminate:t=!1,...n}=e;const i=j(null);return C((()=>{i.current&&(i.current.indeterminate=t)}),[t]),r("input",{ref:i,...n,className:"form-check-input",type:"checkbox"})};const Ee=g(d)`
87
+ .rc-table-thead {
88
+ border-top: none;
89
+ }
90
+ `,$e={table:e=>r(Ee,{...e,className:"align-middle table-hover"})},Be=g(fe)`
91
+ margin-bottom: 0;
92
+ justify-content: flex-end;
93
+ `;function De(e){return"current_page"in e}const Te=N(((e,t)=>{let{source:o,rowKey:a="id",paginate:c=!0,toolBarRender:s,columns:l=[],search:d,rowSelection:m,card:h=!0,...p}=e;const[f,g]=w([]),[y,b]=w(c?{total:0,current:1,pageSize:10}:null),[v,x]=w(!0),[z,N]=w(""),$=S((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};x(!0);try{let t;if("string"==typeof o){const r={q:z};y&&(r.page=e.page||y.current),t=await Ce({url:o,params:r})}else t=await o();c&&De(t)&&(b({total:t.total,current:t.current_page,pageSize:t.per_page}),t=t.data),g(t)}catch(e){}finally{x(!1)}}),[o,g,y,z]);C((()=>{$()}),[z]);const B=j({reload:$});C((()=>{B.current={reload:$}}),[$]),E(t,(()=>B.current));const[D]=function(e,t,n){const[i,o]=w((()=>new Set((null==e?void 0:e.selectedRowKeys)||[]))),a=e=>"string"==typeof t?e[t]:t(e),c=e=>n.find((t=>a(t)===e)),s=S((t=>{o(t);const r=Array.from(t),n=r.map((function(e){return c(e)}));null!=e&&e.onChange&&(null==e||e.onChange(r,n))}),[c]);return[S((t=>{if(!e)return t;const o=n.map(a),c=o.every((function(e){return i.has(e)})),l=o.some((function(e){return i.has(e)}));return[{key:"selection",title:r(je,{checked:c,indeterminate:!c&&l,onChange:()=>{c?o.forEach((function(e){i.delete(e)})):o.forEach((function(e){i.add(e)})),s(new Set(i))}}),width:30,align:"center",render(e){let{record:t}=e;const n=a(t),o=i.has(n);return r(je,{checked:o,onChange:()=>{o?i.delete(n):i.add(n),s(new Set(i))}})}},...t]}),[n,e,i])]}(m,a,f),T=k((()=>D(l).map((e=>{const t={...e,render:void 0};if("render"in e&&e.render){const r=e.render;t.render=(e,t,n)=>r({value:e,record:t,index:n,action:B.current})}return t}))),[l,D,B]),_=function(e,t,r){const n=j(e),i=j(U(e,t,r));return C((()=>{n.current=e})),C((()=>{i.current=U((function(){n.current(...arguments)}),t,r)}),[t,r]),i.current}((e=>{N(e.target.value)}),500),F=n(i,{children:[r(te,{loading:v}),!1!==s&&n(_e,{children:[r(Pe,{size:12,children:s&&s(B.current)}),n(Fe,{size:12,children:[d&&r(u.Control,{onChange:_,type:"search",placeholder:"Search..."}),r(Ae,{onClick:B.current.reload,children:r("i",{className:"bi bi-arrow-repeat"})})]})]}),r(M,{...p,rowKey:a,columns:T,components:$e,data:f}),y&&r(Be,{...y,onChange:e=>{$({page:e})}})]});return h?r(ne,{children:F}):F})),_e=g.div`
94
+ display: flex;
95
+ justify-content: space-between;
96
+ padding-bottom: 1rem;
97
+ height: 48px;
98
+ border-bottom: 2px solid #212529;
99
+ `,Fe=g(oe)`
100
+
101
+ `,Pe=g(oe)`
102
+
103
+ `,Ae=g.span`
104
+ cursor: pointer;
105
+ font-size: 20px;
106
+ line-height: 1;
107
+
108
+ &:hover {
109
+ color: var(--bs-primary);
110
+ }
111
+ `;let Ue=0;function Le(){let{onHide:e,onShow:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[r,n]=w(!1),[i,o]=w(`visible-${Ue}`),a=S((()=>{n(!1),e&&e()}),[n,e]),c=S((()=>{o("visible-"+ ++Ue)}),[o,Ue]),s=S((()=>{n(!0),t&&t()}),[n,t]),l={show:r,onHide:a,onExited:c,key:i};return{visible:r,show:s,hide:a,state:l}}function Oe(e){let{text:t,variant:o,header:a=t,schema:c,uiSchema:s,action:d,method:u,formData:h,onSuccess:p,onChange:f,fields:g,size:y,onShow:b,okText:v="确定",formContext:x,className:C,as:k=l}=e;const[N,E]=w(!1),$=j(null),B=S((()=>{var e;null===(e=$.current)||void 0===e||e.submit()}),[]),{state:D,show:T,hide:_}=Le(),F=z(k,{className:C,variant:o,onClick:T},t),P=S((e=>{p&&p(e),_()}),[p]);return n(i,{children:[F,n(m,{size:y,...D,onShow:b,children:[r(m.Header,{closeButton:!0,children:r(m.Title,{as:"h5",children:a})}),r(m.Body,{children:r(Ne,{onSubmitting:E,ref:$,schema:c,uiSchema:s,action:d,method:u,formData:h,fields:g,onChange:f,onSuccess:P,formContext:x,children:r("input",{type:"submit",hidden:!0})})}),n(m.Footer,{children:[r(l,{variant:"secondary",onClick:_,children:"取消"}),r(ye,{loading:N,variant:"primary",onClick:B,children:v})]})]})]})}const Me=N(((e,t)=>{let{text:o,variant:a,header:c=o,footer:s=!0,onOk:d,size:u,okText:h="确定",onShow:p,children:f,as:g=l}=e;const[y,b]=w(!1),{state:v,show:x,hide:C}=Le({onShow:p});E(t,(()=>({close:C})));const k=z(g,{variant:a,onClick:x},o);return n(i,{children:[k,n(m,{size:u,...v,children:[c&&r(m.Header,{closeButton:!0,children:r(m.Title,{as:"h5",children:c})}),r(m.Body,{children:f}),s&&n(m.Footer,{children:[r(l,{variant:"secondary",onClick:C,children:"取消"}),r(ye,{loading:y,variant:"primary",onClick:async()=>{if(d){b(!0);const e=await d();if(b(!1),!1===e)return}C()},children:h})]})]})]})}));function qe(e){let{tooltip:t,children:n,placement:i="bottom"}=e;return r(h,{placement:i,overlay:r(p,{id:L(),children:t}),children:n})}function He(e){let{manual:t,refreshDeps:r,...n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:i,currentParams:o,error:a,...c}=q((async t=>(e="string"==typeof e?{url:e}:e,await Ce({...e,...t}))),n);C((()=>{t||r||i()}),[]),C((()=>{r&&s()}),r);const s=S((()=>{o?i(...o):i()}),[i,o]);if(a&&xe(a)){const e=a.errors;a=new Error("string"==typeof e?e:O(e).join(""))}return{refresh:s,execute:i,error:a,...c}}export{ne as Card,ie as Error,Ne as Form,te as Loader,ye as LoadingButton,R as Message,Me as ModalButton,Oe as ModalForm,ge as NumberFormat,fe as Pagination,ke as RequestButton,Z as Result,oe as Space,ue as Steps,Te as Table,G as Toast,qe as Tooltip,be as Unauthorized,xe as isRequestError,Ce as request,we as showRequestError,Le as useOverlayState,He as useRequest};
2
112
  //# 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","../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../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","../../node_modules/strict-uri-encode/index.js","../../node_modules/decode-uri-component/index.js","../../node_modules/split-on-first/index.js","../../node_modules/filter-obj/index.js","../../node_modules/query-string/index.js","../src/errors/unauthorized.ts","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/request.ts","../src/components/request-button.tsx","../src/components/link-button.tsx","../src/components/form.tsx","../src/components/table/use-selection.tsx","../src/components/table/index.tsx","../src/hooks/use-debounce.ts","../src/hooks/use-overlay-state.ts","../src/components/modal-form.tsx","../src/components/modal-button.tsx","../src/components/tooltip.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 = {\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};\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\n\r\nlet noticeInstance: NotificationInstance | null;\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 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\nconst types = ['error', 'success', 'info'];\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\n\r\nlet Toast: {\r\n [index in typeof types[number]]: (content: string, options?: NoticeContent) => void\r\n} = {};\r\n\r\ntypes.forEach((type) => {\r\n Toast[type] = (content, options) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n});\r\n\r\nexport default Toast;\r\n","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\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' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16px' height='16px' 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 { 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 = [];\r\n let jumpPrev = null;\r\n let jumpNext = null;\r\n let firstPager = null;\r\n let lastPager = 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}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let options = {};\r\n\r\n if (currency) {\r\n options = {\r\n style: 'currency',\r\n currency: 'CNY',\r\n ...options\r\n };\r\n } else {\r\n options = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, options);\r\n }, [currency, locale]);\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","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\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","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\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 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n }\r\n}\r\n\r\nrax.attach();\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: (err) => {\r\n return (\r\n err.config.method?.toUpperCase() === 'GET'\r\n && err.response?.status === 449\r\n );\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.interceptors.request.use(\r\n config => {\r\n const token = localStorage.getItem('authorization');\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 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 { Button, ButtonProps } from 'react-bootstrap';\r\nimport request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback, useState } from 'react';\r\nimport Message from '../utils/message';\r\nimport { AxiosRequestConfig } from 'axios';\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] = useState(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 { Button, ButtonProps } from 'react-bootstrap';\r\nimport { LinkProps, useNavigate } from 'react-router-dom';\r\n\r\ninterface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {\r\n\r\n}\r\n\r\nexport default function LinkButton({ to, replace, ...props }: Props) {\r\n let navigate = useNavigate();\r\n\r\n return <Button {...props} onClick={(e) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n }} />;\r\n}\r\n","import JsonForm, { JsonFormProps, JsonFormType, getRegistry } 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 LoadingButton from './loading-button';\r\nimport request from '../request';\r\nimport { mapValues } from 'lodash';\r\nimport { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\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}\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(props: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n const options = {\r\n ...props.options,\r\n async onUpload(file: File) {\r\n if (props.options.onUpload instanceof Function) {\r\n return await props.options.onUpload.call(undefined, file);\r\n }\r\n if (props.options.endpoint) {\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\r\n return <widgets.upload {...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 children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useState(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 const { formData } = e;\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 = <LoadingButton loading={loading} type='submit' variant='primary'>{submitText}</LoadingButton>;\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","import RcTable from 'rc-table';\r\nimport { TableProps as RcTableProps } from 'rc-table/lib/Table';\r\nimport { ColumnGroupType, ColumnsType, ColumnType as BsColumnType, RenderedCell } from 'rc-table/lib/interface';\r\nimport { Form, Table as BsTable, TableProps as BsTableProps } from 'react-bootstrap';\r\nimport {\r\n ChangeEvent,\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 useDebounce from '../../hooks/use-debounce';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'> {\r\n render?: (data: { value: any, record: RecordType, index: number, action: TableType }) => ReactNode | RenderedCell<RecordType>;\r\n}\r\n\r\nexport type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[]\r\n\r\nconst CustomTable = styled(BsTable)`\r\n .rc-table-thead {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props: BsTableProps) => {\r\n return <CustomTable {...props} className='align-middle table-hover' />;\r\n },\r\n};\r\n\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\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 | (() => Promise<any>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean | string;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: 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 ...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 const [keyword, setKeyword] = useState('');\r\n\r\n const fetchData = useCallback(async (options: Params = {}) => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n if (typeof source === 'string') {\r\n const params: Params = {\r\n q: keyword\r\n };\r\n if (pagination) {\r\n params.page = options.page || pagination.current;\r\n }\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source();\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, pagination, keyword]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword]);\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((column) => {\r\n const customColumn: BsColumnType<any> = { ...column, render: undefined };\r\n\r\n if ('render' in column && column.render) {\r\n const defaultRender = column.render;\r\n customColumn.render = (value, record, index) => {\r\n return defaultRender({ value, record, index, action: action.current });\r\n };\r\n }\r\n return customColumn;\r\n }) as ColumnsType<any>;\r\n }, [columns, transformColumns, action]);\r\n\r\n const handlePageChange = (current: number) => {\r\n fetchData({\r\n page: current\r\n });\r\n };\r\n\r\n const handleSearch = useDebounce((e: ChangeEvent<HTMLInputElement>) => {\r\n setKeyword(e.target.value);\r\n }, 500);\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 &&\r\n <Form.Control onChange={handleSearch} type={'search'} placeholder={'Search...'} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <RcTable {...props} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n {pagination && <CustomPagination {...pagination} onChange={handlePageChange} />}\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 { 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 { 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 { ModalButtonProps } from './modal-button';\r\nimport { createElement, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\nimport { Button, Modal } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\n\r\nexport type ModalFormProps<T = any> =\r\n Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as' | 'okText' | 'className' | 'onShow'> &\r\n Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n variant,\r\n header = text,\r\n schema,\r\n uiSchema,\r\n action,\r\n method,\r\n formData,\r\n onSuccess,\r\n onChange,\r\n fields,\r\n size,\r\n onShow,\r\n okText = '确定',\r\n formContext,\r\n className,\r\n as = Button\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n }, []);\r\n\r\n const { state, show, hide } = useOverlayState();\r\n\r\n const button = createElement(as, {\r\n className,\r\n variant,\r\n onClick: show\r\n }, text);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n hide();\r\n }, [onSuccess]);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} {...state} onShow={onShow}>\r\n <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <Form\r\n onSubmitting={setLoading}\r\n ref={form}\r\n schema={schema}\r\n uiSchema={uiSchema}\r\n action={action}\r\n method={method}\r\n formData={formData}\r\n fields={fields}\r\n onChange={onChange}\r\n onSuccess={handleSuccess}\r\n formContext={formContext}\r\n >\r\n <input type='submit' hidden />\r\n </Form>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={hide}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>\r\n </Modal>\r\n </>;\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle,\r\n useState\r\n} from 'react';\r\nimport { Button, ButtonProps, Modal, ModalProps } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\n\r\nexport interface ModalButtonProps extends ModalProps {\r\n text: ReactNode;\r\n variant?: ButtonProps['variant'];\r\n header?: ReactNode;\r\n onOk?: () => any;\r\n okText?: ReactNode;\r\n footer?: 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 variant,\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n okText = '确定',\r\n onShow,\r\n children,\r\n as = Button\r\n}, ref) => {\r\n\r\n const [loading, setLoading] = useState(false);\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 () => {\r\n if (onOk) {\r\n setLoading(true);\r\n const result = await onOk();\r\n setLoading(false);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n hide();\r\n };\r\n\r\n const button = createElement(as, {\r\n variant,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} {...state}>\r\n {header && <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>}\r\n <Modal.Body>{children}</Modal.Body>\r\n {footer && <Modal.Footer>\r\n <Button variant='secondary' onClick={hide}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\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 { 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 execute();\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(() => {\r\n if (currentParams) {\r\n execute(...currentParams);\r\n } else {\r\n execute();\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","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","_jsx","Alert","Toast","_taggedTemplateLiteral","strings","raw","slice","Object","freeze","defineProperties","value","forEach","Container","styled","div","Icon","Title","Extra","IconMap","className","info","warning","Result","status","title","extra","_jsxs","Dimmer","props","active","inverted","Loader","loading","children","animation","wrap","Spinner","Wrap","$height","Card","BsCard","classNames","errors","entries","map","_ref2","name","Space","size","direction","small","middle","large","items","Children","child","Item","$size","$direction","css","_path","_extends","assign","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","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","minimumFractionDigits","Intl","format","LoadingButton","disabled","Button","module","str","encodeURIComponent","replace","x","charCodeAt","toString","toUpperCase","singleMatcher","RegExp","multiMatcher","decodeComponents","components","split","decodeURIComponent","join","err","Array","concat","decode","input","tokens","match","encodedURI","TypeError","replaceMap","exec","keys","customDecodeURIComponent","string","separator","separatorIndex","indexOf","obj","predicate","ret","isArr","isArray","val","strictUriEncode","require","decodeComponent","splitOnFirst","filterObject","encodeFragmentIdentifier","Symbol","validateArrayFormatSeparator","encode","strict","keysSorter","sort","a","b","Number","removeHash","hashStart","extract","queryStart","parseValue","parseNumbers","isNaN","trim","parseBooleans","toLowerCase","parse","query","arrayFormat","arrayFormatSeparator","accumulator","undefined","includes","isEncodedArray","newValue","item","test","arrayValue","parserForArrayFormat","create","param","k","reduce","Boolean","exports","object","shouldFilter","skipNull","skipEmptyString","index","keyValueSep","encoderForArrayFormat","objectCopy","filter","url","url_","hash","parseFragmentIdentifier","fragmentIdentifier","queryFromUrl","parsedQueryFromUrl","queryString","stringify","getHash","parseUrl","stringifyUrl","exclusionFilter","pick","Unauthorized","constructor","defineProperty","enumerable","configurable","writable","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","config","method","response","maxContentLength","Infinity","maxBodyLength","baseURL","interceptors","request","use","token","localStorage","getItem","headers","Authorization","Promise","reject","isRecord","location","window","href","isAxiosError","isRequestError","showRequestError","values","paramsSerializer","params","RequestButton","onSuccess","as","fetching","setFetching","handleClick","preventDefault","text","LinkButton","to","navigate","useNavigate","localize","widgets","upload","getRegistry","file","onUpload","Function","endpoint","FormData","set","Form","forwardRef","ref","action","formData","onSubmitting","onSubmit","submitText","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Checkbox","indeterminate","useRef","CustomTable","BsTable","table","CustomPagination","isPagination","Table","rowKey","paginate","toolBarRender","columns","search","rowSelection","card","pagination","setPagination","setKeyword","fetchData","q","page","current_page","per_page","reload","useImperativeHandle","transformColumns","setKeys","Set","selectedRowKeys","getRowKey","record","getRecordByKey","find","setSelectedKeys","changedKeys","from","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","delete","add","align","render","useSelection","customColumns","column","customColumn","defaultRender","handleSearch","wait","callbackRef","debouncedCallbackRef","debounce","useDebounce","Header","LeftTools","RightTools","Control","placeholder","Action","RcTable","span","id","useOverlayState","onHide","onShow","visible","setVisible","setKey","hide","exit","show","state","onExited","ModalForm","header","schema","uiSchema","fields","okText","formContext","form","handleOk","button","handleSuccess","Modal","closeButton","Body","hidden","Footer","ModalButton","footer","onOk","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","uniqueId","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/errors/unauthorized.ts","../src/request.ts","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/table/use-selection.tsx","../src/components/table/index.tsx","../src/hooks/use-debounce.ts","../src/hooks/use-overlay-state.ts","../src/components/modal-form.tsx","../src/components/modal-button.tsx","../src/components/tooltip.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 = {\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};\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\n\r\nlet noticeInstance: NotificationInstance | null;\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 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\nconst types = ['error', 'success', 'info'];\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\n\r\nlet Toast: {\r\n [index in typeof types[number]]: (content: string, options?: NoticeContent) => void\r\n} = {};\r\n\r\ntypes.forEach((type) => {\r\n Toast[type] = (content, options) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n});\r\n\r\nexport default Toast;\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' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16px' height='16px' 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}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let options = {};\r\n\r\n if (currency) {\r\n options = {\r\n style: 'currency',\r\n currency: 'CNY',\r\n ...options\r\n };\r\n } else {\r\n options = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, options);\r\n }, [currency, locale]);\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","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 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n }\r\n}\r\n\r\nrax.attach();\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: (err) => {\r\n return (\r\n err.config.method?.toUpperCase() === 'GET'\r\n && err.response?.status === 449\r\n );\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.interceptors.request.use(\r\n config => {\r\n const token = localStorage.getItem('authorization');\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 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 { Button, ButtonProps } from 'react-bootstrap';\r\nimport request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback, useState } from 'react';\r\nimport Message from '../utils/message';\r\nimport { AxiosRequestConfig } from 'axios';\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] = useState(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, { JsonFormProps, JsonFormType, getRegistry } 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 LoadingButton from './loading-button';\r\nimport request from '../request';\r\nimport { mapValues } from 'lodash';\r\nimport { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\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}\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(props: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n const options = {\r\n ...props.options,\r\n async onUpload(file: File) {\r\n if (props.options.onUpload instanceof Function) {\r\n return await props.options.onUpload.call(undefined, file);\r\n }\r\n if (props.options.endpoint) {\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\r\n return <widgets.upload {...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 children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useState(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 const { formData } = e;\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 = <LoadingButton loading={loading} type='submit' variant='primary'>{submitText}</LoadingButton>;\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","import RcTable from 'rc-table';\r\nimport { TableProps as RcTableProps } from 'rc-table/lib/Table';\r\nimport { ColumnGroupType, ColumnsType, ColumnType as BsColumnType, RenderedCell } from 'rc-table/lib/interface';\r\nimport { Form, Table as BsTable, TableProps as BsTableProps } from 'react-bootstrap';\r\nimport {\r\n ChangeEvent,\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 useDebounce from '../../hooks/use-debounce';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'> {\r\n render?: (data: { value: any, record: RecordType, index: number, action: TableType }) => ReactNode | RenderedCell<RecordType>;\r\n}\r\n\r\nexport type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[]\r\n\r\nconst CustomTable = styled(BsTable)`\r\n .rc-table-thead {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props: BsTableProps) => {\r\n return <CustomTable {...props} className='align-middle table-hover' />;\r\n },\r\n};\r\n\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\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 | (() => Promise<any>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean | string;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: 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 ...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 const [keyword, setKeyword] = useState('');\r\n\r\n const fetchData = useCallback(async (options: Params = {}) => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n if (typeof source === 'string') {\r\n const params: Params = {\r\n q: keyword\r\n };\r\n if (pagination) {\r\n params.page = options.page || pagination.current;\r\n }\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source();\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, pagination, keyword]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword]);\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((column) => {\r\n const customColumn: BsColumnType<any> = { ...column, render: undefined };\r\n\r\n if ('render' in column && column.render) {\r\n const defaultRender = column.render;\r\n customColumn.render = (value, record, index) => {\r\n return defaultRender({ value, record, index, action: action.current });\r\n };\r\n }\r\n return customColumn;\r\n }) as ColumnsType<any>;\r\n }, [columns, transformColumns, action]);\r\n\r\n const handlePageChange = (current: number) => {\r\n fetchData({\r\n page: current\r\n });\r\n };\r\n\r\n const handleSearch = useDebounce((e: ChangeEvent<HTMLInputElement>) => {\r\n setKeyword(e.target.value);\r\n }, 500);\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 &&\r\n <Form.Control onChange={handleSearch} type={'search'} placeholder={'Search...'} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <RcTable {...props} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n {pagination && <CustomPagination {...pagination} onChange={handlePageChange} />}\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 { 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 { 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 { ModalButtonProps } from './modal-button';\r\nimport { createElement, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\nimport { Button, Modal } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\n\r\nexport type ModalFormProps<T = any> =\r\n Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as' | 'okText' | 'className' | 'onShow'> &\r\n Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n variant,\r\n header = text,\r\n schema,\r\n uiSchema,\r\n action,\r\n method,\r\n formData,\r\n onSuccess,\r\n onChange,\r\n fields,\r\n size,\r\n onShow,\r\n okText = '确定',\r\n formContext,\r\n className,\r\n as = Button\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n }, []);\r\n\r\n const { state, show, hide } = useOverlayState();\r\n\r\n const button = createElement(as, {\r\n className,\r\n variant,\r\n onClick: show\r\n }, text);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n hide();\r\n }, [onSuccess]);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} {...state} onShow={onShow}>\r\n <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <Form\r\n onSubmitting={setLoading}\r\n ref={form}\r\n schema={schema}\r\n uiSchema={uiSchema}\r\n action={action}\r\n method={method}\r\n formData={formData}\r\n fields={fields}\r\n onChange={onChange}\r\n onSuccess={handleSuccess}\r\n formContext={formContext}\r\n >\r\n <input type='submit' hidden />\r\n </Form>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={hide}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>\r\n </Modal>\r\n </>;\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle,\r\n useState\r\n} from 'react';\r\nimport { Button, ButtonProps, Modal, ModalProps } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\n\r\nexport interface ModalButtonProps extends ModalProps {\r\n text: ReactNode;\r\n variant?: ButtonProps['variant'];\r\n header?: ReactNode;\r\n onOk?: () => any;\r\n okText?: ReactNode;\r\n footer?: 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 variant,\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n okText = '确定',\r\n onShow,\r\n children,\r\n as = Button\r\n}, ref) => {\r\n\r\n const [loading, setLoading] = useState(false);\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 () => {\r\n if (onOk) {\r\n setLoading(true);\r\n const result = await onOk();\r\n setLoading(false);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n hide();\r\n };\r\n\r\n const button = createElement(as, {\r\n variant,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} {...state}>\r\n {header && <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>}\r\n <Modal.Body>{children}</Modal.Body>\r\n {footer && <Modal.Footer>\r\n <Button variant='secondary' onClick={hide}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\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 { 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 execute();\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(() => {\r\n if (currentParams) {\r\n execute(...currentParams);\r\n } else {\r\n execute();\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","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","_jsx","Alert","children","Toast","forEach","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","minimumFractionDigits","Intl","format","LoadingButton","disabled","Button","Unauthorized","constructor","url","super","_defineProperty","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","err","_err$config$method","_err$response","config","method","toUpperCase","response","maxContentLength","Infinity","maxBodyLength","baseURL","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","RequestButton","onSuccess","as","fetching","setFetching","handleClick","preventDefault","text","localize","require","widgets","upload","getRegistry","file","onUpload","Function","endpoint","FormData","set","Form","forwardRef","ref","action","formData","onSubmitting","onSubmit","submitText","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Checkbox","indeterminate","useRef","CustomTable","BsTable","components","table","CustomPagination","isPagination","Table","rowKey","paginate","toolBarRender","columns","search","rowSelection","card","pagination","setPagination","setKeyword","fetchData","q","page","current_page","per_page","reload","useImperativeHandle","transformColumns","keys","setKeys","Set","selectedRowKeys","getRowKey","record","getRecordByKey","find","setSelectedKeys","changedKeys","Array","from","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","delete","add","align","render","useSelection","customColumns","column","customColumn","defaultRender","index","handleSearch","wait","callbackRef","debouncedCallbackRef","debounce","useDebounce","Header","LeftTools","RightTools","Control","placeholder","Action","RcTable","span","id","useOverlayState","onHide","onShow","visible","setVisible","setKey","hide","exit","show","state","onExited","ModalForm","header","schema","uiSchema","fields","okText","formContext","form","handleOk","_form$current","button","handleSuccess","Modal","closeButton","Body","hidden","Footer","ModalButton","footer","onOk","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","uniqueId","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@topthink/components",
3
- "version": "1.0.7",
3
+ "version": "1.0.8-alpha.9+40c5df6",
4
4
  "scripts": {
5
+ "prebuild": "rimraf lib types",
5
6
  "build": "rollup -c --environment NODE_ENV:production",
6
7
  "build:dev": "rollup -c",
7
8
  "watch": "rollup -c -w",
8
- "prepack": "yarn run build"
9
+ "prepack": "npm run build"
9
10
  },
10
11
  "module": "lib/index.js",
11
12
  "types": "types/index.d.ts",
@@ -15,12 +16,14 @@
15
16
  "scss"
16
17
  ],
17
18
  "dependencies": {
18
- "@topthink/bootstrap": "^1.0.15",
19
- "@topthink/json-form": "^1.0.22",
19
+ "@babel/runtime": "^7.11.2",
20
+ "@topthink/bootstrap": "^1.0.16-alpha.9+40c5df6",
21
+ "@topthink/json-form": "^1.0.23-alpha.31+40c5df6",
20
22
  "@types/styled-components": "^5.1.11",
21
23
  "ajv-i18n": "^4.0.0",
22
24
  "axios": "^0.27.2",
23
25
  "classnames": "^2.3.1",
26
+ "query-string": "^8.1.0",
24
27
  "rc-notification": "^4.5.2",
25
28
  "rc-steps": "^4.1.4",
26
29
  "rc-table": "^7.17.1",
@@ -31,7 +34,6 @@
31
34
  "sweetalert2-react-content": "^4.1.0"
32
35
  },
33
36
  "peerDependencies": {
34
- "bootstrap": "^5.2.2",
35
37
  "lodash": "*",
36
38
  "react": "^17",
37
39
  "react-bootstrap": "^2.1.2",
@@ -47,16 +49,16 @@
47
49
  "@rollup/plugin-node-resolve": "^13.0.0",
48
50
  "@svgr/rollup": "^6.2.1",
49
51
  "@types/lodash": "^4.14.161",
52
+ "@types/node": "^18.11.18",
50
53
  "@types/react": "^17.0.0",
51
54
  "@types/react-dom": "^17.0.0",
52
- "bootstrap": "^5.2.2",
53
55
  "react-bootstrap": "^2.1.2",
54
56
  "rollup": "^2.26.11",
55
57
  "rollup-plugin-terser": "^7.0.2",
56
- "rollup-plugin-typescript2": "^0.31.2",
58
+ "rollup-plugin-typescript2": "^0.34.1",
57
59
  "typescript": "^4.0.2"
58
60
  },
59
61
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
60
62
  "license": "MIT",
61
- "gitHead": "0e9348d322b43e58e1bffda8343dfc885f0b0343"
63
+ "gitHead": "40c5df627648bfe558cead56052b606a32d6e257"
62
64
  }
@@ -13,6 +13,6 @@ export interface FormProps<T = any> extends JsonFormProps<T> {
13
13
  }
14
14
  export interface FormType extends JsonFormType {
15
15
  }
16
- declare type Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>;
16
+ type Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>;
17
17
  declare const Form: Form;
18
18
  export default Form;
@@ -12,6 +12,6 @@ export interface ModalButtonProps extends ModalProps {
12
12
  export interface ModalType {
13
13
  close: () => void;
14
14
  }
15
- declare type ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>> & RefAttributes<ModalType>>;
15
+ type ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>> & RefAttributes<ModalType>>;
16
16
  declare const ModalButton: ModalButtonType;
17
17
  export default ModalButton;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { ModalButtonProps } from './modal-button';
3
3
  import { FormProps } from './form';
4
- export declare type ModalFormProps<T = any> = Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as' | 'okText' | 'className' | 'onShow'> & Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>;
4
+ export type ModalFormProps<T = any> = Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as' | 'okText' | 'className' | 'onShow'> & Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>;
5
5
  export default function ModalForm<T = any>({ text, variant, header, schema, uiSchema, action, method, formData, onSuccess, onChange, fields, size, onShow, okText, formContext, className, as }: ModalFormProps<T>): JSX.Element;
@@ -12,7 +12,7 @@ interface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'
12
12
  action: TableType;
13
13
  }) => ReactNode | RenderedCell<RecordType>;
14
14
  }
15
- export declare type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
15
+ export type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
16
16
  export interface TableRowSelection<RecordType = any> {
17
17
  selectedRowKeys?: Key[];
18
18
  onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;
@@ -26,6 +26,6 @@ export interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordTy
26
26
  rowSelection?: TableRowSelection<RecordType>;
27
27
  card?: boolean;
28
28
  }
29
- declare type CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>> & RefAttributes<TableType>>;
29
+ type CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>> & RefAttributes<TableType>>;
30
30
  declare const Table: CustomTableType;
31
31
  export default Table;
@@ -2,7 +2,7 @@ import { UseAsyncCallbackOptions } from 'react-async-hook';
2
2
  import { RequestConfig } from '../request';
3
3
  import { DependencyList } from 'react';
4
4
  import { AxiosRequestConfig } from 'axios';
5
- declare type UseRequestOptions<T> = {
5
+ type UseRequestOptions<T> = {
6
6
  manual?: boolean;
7
7
  refreshDeps?: DependencyList;
8
8
  } & UseAsyncCallbackOptions<T>;
package/types/index.d.ts CHANGED
@@ -11,7 +11,6 @@ export { default as Pagination } from './components/pagination';
11
11
  export { default as NumberFormat } from './components/number-format';
12
12
  export { default as LoadingButton } from './components/loading-button';
13
13
  export { default as RequestButton } from './components/request-button';
14
- export { default as LinkButton } from './components/link-button';
15
14
  export { default as Form, FormProps, FormType } from './components/form';
16
15
  export { default as Table, TableProps, Columns, TableType } from './components/table';
17
16
  export { default as ModalForm, ModalFormProps } from './components/modal-form';
@@ -1,6 +1,6 @@
1
1
  import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
2
  import { RetryConfig } from 'retry-axios';
3
- export declare type Errors = string | {
3
+ export type Errors = string | {
4
4
  [key: string]: string;
5
5
  };
6
6
  declare module 'axios' {
@@ -11,8 +11,8 @@ declare module 'axios' {
11
11
  raxConfig?: RetryConfig;
12
12
  }
13
13
  }
14
- export declare type RequestConfig = AxiosRequestConfig | string;
15
- export declare type RequestInstance = AxiosInstance;
14
+ export type RequestConfig = AxiosRequestConfig | string;
15
+ export type RequestInstance = AxiosInstance;
16
16
  export declare const isRequestError: (payload: any) => payload is import("axios").AxiosError<unknown, any>;
17
17
  export declare const showRequestError: (e: any) => void;
18
18
  declare const request: {
@@ -1,7 +0,0 @@
1
- /// <reference types="react" />
2
- import { ButtonProps } from 'react-bootstrap';
3
- import { LinkProps } from 'react-router-dom';
4
- interface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {
5
- }
6
- export default function LinkButton({ to, replace, ...props }: Props): JSX.Element;
7
- export {};