dinocollab-core 2.1.16 → 2.1.18
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/dist/api-context/alert-global.js +1 -1
- package/dist/api-context/alert-global.js.map +1 -1
- package/dist/form/validator.js +1 -1
- package/dist/form/validator.js.map +1 -1
- package/dist/http-service/base/helpers.js +1 -1
- package/dist/http-service/base/helpers.js.map +1 -1
- package/dist/types/form/validator.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as e,toConsumableArray as t,objectSpread2 as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import
|
|
1
|
+
import{slicedToArray as e,toConsumableArray as t,objectSpread2 as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import a,{useState as o,useCallback as l,useEffect as u}from"react";import{styled as s,Box as d,Stack as c,Dialog as f,DialogTitle as p,DialogContent as h,DialogContentText as m,DialogActions as g,Button as x}from"@mui/material";import v from"@mui/material/Alert";var y=a.forwardRef((function(e,t){return n(v,i(i({elevation:6,ref:t,variant:"standard"},e),{},{style:{minWidth:"300px"}}))})),C={};function A(){var r,a,s=o([]),d=e(s,2),f=d[0],p=d[1],h=l((function(e){p((function(i){return[].concat(t(i),[e])}))}),[]),m=l((function(e){var i=f.findIndex((function(t){return t.id===e.id}));f.splice(i,1),p(t(f))}),[f]);return u((function(){C.ApiAlert=i(i({},C.ApiAlert?C.ApiAlert:{}),{},{PushMessage:h,PushError:function(e,t){this.PushMessage({id:(new Date).getTime().toString(),text:e,type:"error",duration:(null==t?void 0:t.duration)||15e3})},PushInfo:function(e,t){this.PushMessage({id:(new Date).getTime().toString(),text:e,type:"info",duration:(null==t?void 0:t.duration)||6e3})},PushWarning:function(e,t){this.PushMessage({id:(new Date).getTime().toString(),text:e,type:"warning",duration:(null==t?void 0:t.duration)||6e3})},PushSuccess:function(e,t){this.PushMessage({id:(new Date).getTime().toString(),text:e,type:"success",duration:(null==t?void 0:t.duration)||3e3})}})}),[h]),n(S,{children:n(c,{spacing:2,sx:{maxWidth:"300px"},children:(r=f,a=m,r.map((function(e,t){return n(P,{data:e,IsOpen:!0,handleClose:a,autoDurationHide:e.duration},e.id+t)})))})})}var P=function(e){var t=l((function(){return e.handleClose(e.data)}),[e]);return u((function(){var t=null;return e.autoDurationHide&&(t=setTimeout((function(){e.handleClose(e.data)}),e.autoDurationHide)),function(){clearTimeout(t)}}),[e]),n(y,{sx:{whiteSpace:"pre-line"},onClose:t,severity:e.data.type,children:e.data.text})},S=s(d)({position:"fixed",top:"calc(var(--height-header) + 20px)",right:"50px",zIndex:2e3,display:"flex",justifyContent:"flex-start",alignItems:"center"}),b=function(t){var i=a.useState(t.IsOpen),o=e(i,2),l=o[0],u=o[1];a.useEffect((function(){u(t.IsOpen)}),[t.IsOpen]);var s=a.useCallback((function(){u(!1),t.onClose&&t.onClose()}),[t]);return n("div",{children:r(f,{open:l,onClose:s,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[n(p,{id:"alert-dialog-title",children:t.Title}),n(h,{children:n(m,{id:"alert-dialog-description",sx:{whiteSpace:"pre-line"},children:t.Message})}),r(g,{children:[n(x,{onClick:t.onAccept,autoFocus:!0,color:"info",children:"Ok"}),n(x,{onClick:s,color:"error",children:"Cancel"})]})]})})};export{b as AlertDialog,C as ApiAlertContext,A as default};
|
|
2
2
|
//# sourceMappingURL=alert-global.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-global.js","sources":["../../src/api-context/alert-global.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useState } from 'react'\r\nimport { Box, Stack, styled, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@mui/material'\r\nimport MuiAlert, { AlertProps, AlertColor } from '@mui/material/Alert'\r\n\r\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(props, ref) {\r\n return <MuiAlert elevation={6} ref={ref} variant='standard' {...props} style={{ minWidth: '300px' }} />\r\n})\r\n\r\ninterface MessageData {\r\n id: string\r\n text: string\r\n type: AlertColor\r\n duration?: number\r\n}\r\n\r\ninterface IOptions {\r\n duration?: number\r\n}\r\n\r\ninterface IApiAlert {\r\n PushMessage: (data: MessageData) => void\r\n PushInfo: (data: string) => void\r\n PushError: (data: string) => void\r\n PushWarning: (data: string) => void\r\n PushSuccess: (data: string) => void\r\n}\r\n\r\nexport interface IApiContext {\r\n ApiAlert?: IApiAlert\r\n}\r\n\r\nexport const ApiAlertContext: IApiContext = {}\r\n\r\nconst RenderArea = (messages: MessageData[], onClose: (data: MessageData) => void) => {\r\n return messages.map((x, i) => {\r\n return <Message key={x.id + i} data={x} IsOpen={true} handleClose={onClose} autoDurationHide={x.duration} />\r\n })\r\n}\r\n\r\nfunction AlertGlobal() {\r\n const [Messages, setMessages] = useState<MessageData[]>([])\r\n const _PushMessage = useCallback((data: MessageData) => {\r\n setMessages((st) => [...st, data])\r\n }, [])\r\n const _HandleClose = useCallback(\r\n (data: MessageData) => {\r\n const index = Messages.findIndex((x) => x.id === data.id)\r\n Messages.splice(index, 1)\r\n setMessages([...Messages])\r\n },\r\n [Messages]\r\n )\r\n\r\n useEffect(() => {\r\n ApiAlertContext.ApiAlert = {\r\n ...(ApiAlertContext.ApiAlert ? ApiAlertContext.ApiAlert : {}),\r\n PushMessage: _PushMessage,\r\n PushError: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'error',\r\n duration: options?.duration || 15000\r\n })\r\n },\r\n PushInfo: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'info',\r\n duration: options?.duration || 6000\r\n })\r\n },\r\n PushWarning: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'warning',\r\n duration: options?.duration || 6000\r\n })\r\n },\r\n PushSuccess: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'success',\r\n duration: options?.duration || 3000\r\n })\r\n }\r\n }\r\n }, [_PushMessage])\r\n\r\n return (\r\n <Wrap>\r\n <Stack spacing={2} sx={{ maxWidth: '300px' }}>\r\n {RenderArea(Messages, _HandleClose)}\r\n </Stack>\r\n </Wrap>\r\n )\r\n}\r\nexport default AlertGlobal\r\n\r\ninterface MessageProps {\r\n IsOpen: boolean\r\n handleClose: (data: MessageData) => void\r\n data: MessageData\r\n autoDurationHide?: number\r\n}\r\nconst Message: FC<MessageProps> = (props) => {\r\n const _handleClose = useCallback(() => props.handleClose(props.data), [props])\r\n\r\n useEffect(() => {\r\n let Timer: any = null\r\n if (props.autoDurationHide) {\r\n Timer = setTimeout(() => {\r\n props.handleClose(props.data)\r\n }, props.autoDurationHide)\r\n }\r\n return () => {\r\n clearTimeout(Timer as any)\r\n }\r\n }, [props])\r\n return (\r\n <Alert onClose={_handleClose} severity={props.data.type}>\r\n {props.data.text}\r\n </Alert>\r\n )\r\n}\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'fixed',\r\n top: 'calc(var(--height-header) + 20px)',\r\n right: '50px',\r\n zIndex: 2000,\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center'\r\n})\r\n\r\ninterface AlertDialogProps {\r\n IsOpen: boolean\r\n onClose?: () => void\r\n onAccept?: () => void\r\n Title: string\r\n Message: string\r\n}\r\nexport const AlertDialog: React.FC<AlertDialogProps> = (props) => {\r\n const [Open, setOpen] = React.useState(props.IsOpen)\r\n React.useEffect(() => {\r\n setOpen(props.IsOpen)\r\n }, [props.IsOpen])\r\n const _handleClose = React.useCallback(() => {\r\n setOpen(false)\r\n props.onClose && props.onClose()\r\n }, [props])\r\n return (\r\n <div>\r\n <Dialog open={Open} onClose={_handleClose} aria-labelledby='alert-dialog-title' aria-describedby='alert-dialog-description'>\r\n <DialogTitle id='alert-dialog-title'>{props.Title}</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id='alert-dialog-description'
|
|
1
|
+
{"version":3,"file":"alert-global.js","sources":["../../src/api-context/alert-global.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useState } from 'react'\r\nimport { Box, Stack, styled, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@mui/material'\r\nimport MuiAlert, { AlertProps, AlertColor } from '@mui/material/Alert'\r\n\r\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(props, ref) {\r\n return <MuiAlert elevation={6} ref={ref} variant='standard' {...props} style={{ minWidth: '300px' }} />\r\n})\r\n\r\ninterface MessageData {\r\n id: string\r\n text: string\r\n type: AlertColor\r\n duration?: number\r\n}\r\n\r\ninterface IOptions {\r\n duration?: number\r\n}\r\n\r\ninterface IApiAlert {\r\n PushMessage: (data: MessageData) => void\r\n PushInfo: (data: string) => void\r\n PushError: (data: string) => void\r\n PushWarning: (data: string) => void\r\n PushSuccess: (data: string) => void\r\n}\r\n\r\nexport interface IApiContext {\r\n ApiAlert?: IApiAlert\r\n}\r\n\r\nexport const ApiAlertContext: IApiContext = {}\r\n\r\nconst RenderArea = (messages: MessageData[], onClose: (data: MessageData) => void) => {\r\n return messages.map((x, i) => {\r\n return <Message key={x.id + i} data={x} IsOpen={true} handleClose={onClose} autoDurationHide={x.duration} />\r\n })\r\n}\r\n\r\nfunction AlertGlobal() {\r\n const [Messages, setMessages] = useState<MessageData[]>([])\r\n const _PushMessage = useCallback((data: MessageData) => {\r\n setMessages((st) => [...st, data])\r\n }, [])\r\n const _HandleClose = useCallback(\r\n (data: MessageData) => {\r\n const index = Messages.findIndex((x) => x.id === data.id)\r\n Messages.splice(index, 1)\r\n setMessages([...Messages])\r\n },\r\n [Messages]\r\n )\r\n\r\n useEffect(() => {\r\n ApiAlertContext.ApiAlert = {\r\n ...(ApiAlertContext.ApiAlert ? ApiAlertContext.ApiAlert : {}),\r\n PushMessage: _PushMessage,\r\n PushError: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'error',\r\n duration: options?.duration || 15000\r\n })\r\n },\r\n PushInfo: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'info',\r\n duration: options?.duration || 6000\r\n })\r\n },\r\n PushWarning: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'warning',\r\n duration: options?.duration || 6000\r\n })\r\n },\r\n PushSuccess: function (data: string, options?: IOptions) {\r\n this.PushMessage({\r\n id: new Date().getTime().toString(),\r\n text: data,\r\n type: 'success',\r\n duration: options?.duration || 3000\r\n })\r\n }\r\n }\r\n }, [_PushMessage])\r\n\r\n return (\r\n <Wrap>\r\n <Stack spacing={2} sx={{ maxWidth: '300px' }}>\r\n {RenderArea(Messages, _HandleClose)}\r\n </Stack>\r\n </Wrap>\r\n )\r\n}\r\nexport default AlertGlobal\r\n\r\ninterface MessageProps {\r\n IsOpen: boolean\r\n handleClose: (data: MessageData) => void\r\n data: MessageData\r\n autoDurationHide?: number\r\n}\r\nconst Message: FC<MessageProps> = (props) => {\r\n const _handleClose = useCallback(() => props.handleClose(props.data), [props])\r\n\r\n useEffect(() => {\r\n let Timer: any = null\r\n if (props.autoDurationHide) {\r\n Timer = setTimeout(() => {\r\n props.handleClose(props.data)\r\n }, props.autoDurationHide)\r\n }\r\n return () => {\r\n clearTimeout(Timer as any)\r\n }\r\n }, [props])\r\n return (\r\n <Alert sx={{ whiteSpace: 'pre-line' }} onClose={_handleClose} severity={props.data.type}>\r\n {props.data.text}\r\n </Alert>\r\n )\r\n}\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'fixed',\r\n top: 'calc(var(--height-header) + 20px)',\r\n right: '50px',\r\n zIndex: 2000,\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center'\r\n})\r\n\r\ninterface AlertDialogProps {\r\n IsOpen: boolean\r\n onClose?: () => void\r\n onAccept?: () => void\r\n Title: string\r\n Message: string\r\n}\r\nexport const AlertDialog: React.FC<AlertDialogProps> = (props) => {\r\n const [Open, setOpen] = React.useState(props.IsOpen)\r\n React.useEffect(() => {\r\n setOpen(props.IsOpen)\r\n }, [props.IsOpen])\r\n const _handleClose = React.useCallback(() => {\r\n setOpen(false)\r\n props.onClose && props.onClose()\r\n }, [props])\r\n return (\r\n <div>\r\n <Dialog open={Open} onClose={_handleClose} aria-labelledby='alert-dialog-title' aria-describedby='alert-dialog-description'>\r\n <DialogTitle id='alert-dialog-title'>{props.Title}</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id='alert-dialog-description' sx={{ whiteSpace: 'pre-line' }}>\r\n {props.Message}\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={props.onAccept} autoFocus color='info'>\r\n Ok\r\n </Button>\r\n <Button onClick={_handleClose} color='error'>\r\n Cancel\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n )\r\n}\r\n"],"names":["Alert","React","forwardRef","props","ref","_jsx","MuiAlert","_objectSpread","elevation","variant","style","minWidth","ApiAlertContext","AlertGlobal","messages","onClose","_useState","useState","_useState2","_slicedToArray","Messages","setMessages","_PushMessage","useCallback","data","st","concat","_toConsumableArray","_HandleClose","index","findIndex","x","id","splice","useEffect","ApiAlert","PushMessage","PushError","options","this","Date","getTime","toString","text","type","duration","PushInfo","PushWarning","PushSuccess","Wrap","children","Stack","spacing","sx","maxWidth","map","i","Message","IsOpen","handleClose","autoDurationHide","_handleClose","Timer","setTimeout","clearTimeout","whiteSpace","severity","styled","Box","position","top","right","zIndex","display","justifyContent","alignItems","AlertDialog","_React$useState","_React$useState2","Open","setOpen","_jsxs","Dialog","open","DialogTitle","Title","DialogContent","DialogContentText","DialogActions","Button","onClick","onAccept","autoFocus","color"],"mappings":"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"}
|
package/dist/form/validator.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,createClass as r,classCallCheck as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{formatFileSize as u}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";var n
|
|
1
|
+
import{defineProperty as e,createClass as r,classCallCheck as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{formatFileSize as u}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";var t,n;!function(e){e.Required="Required",e.Regex="Regex",e.RequiredValue="RequiredValue",e.Array="Array",e.Number="Number",e.Email="Email",e.PhoneNumber="PhoneNumber",e.Url="Url",e.File="File",e.FileRequired="FileRequired",e.Custom="Custom"}(n||(n={}));var s={Required:"The {0} is required",Regex:"The {0} is not match {1}",RequiredValue:"the {0} is not equal {1}",Array:"The {0} is not valid",Number:"{0} must be a number",Email:"The {0} is not valid",PhoneNumber:"The {0} is not valid",Url:"The {0} is not valid",File:"File size must be less than {1}",FileRequired:"The {0} is required",Custom:"Error Custom"},a=function(e,r){return r},l=r((function r(t){var l=this;i(this,r),e(this,"AddRules",(function(e){var r,i=l.configs[e];i||(i={Rules:[]},l.configs[e]=i);for(var u=arguments.length,t=new Array(u>1?u-1:0),n=1;n<u;n++)t[n-1]=arguments[n];return(r=i.Rules).push.apply(r,t),l})),e(this,"Required",(function(e,r){return null==r||""===r})),e(this,"Regex",(function(e,r,i){return!!r&&!e.Value.test(r)})),e(this,"RequiredValue",(function(e,r){return!!r&&r!==e.Value})),e(this,"Custom",(function(e,r,i){return"function"!=typeof e.Value||e.Value(r,i)})),e(this,"Array",(function(e,r){return!!r&&("number"!=typeof e.Value||(!Array.isArray(r)||r.length<=e.Value))})),e(this,"Number",(function(e,r){return!!r&&isNaN(Number(r))})),e(this,"Email",(function(e,r){if(!r)return!1;return!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)})),e(this,"PhoneNumber",(function(e,r){if(!r)return!1;return!/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())})),e(this,"Url",(function(e,r){if(!r)return!1;try{return new URL(r),!1}catch(e){return!0}})),e(this,"File",(function(e,r){if(!r)return!1;var i=a(0,e.options),u=Array.isArray(r)?r:[r];return!!i&&(!0===i.all?u.reduce((function(e,r){return e+=r.size}),0)>i.maxSize:u.some((function(e){return e.size>i.maxSize})))})),e(this,"FileRequired",(function(e,r){return!!(Array.isArray(r)?r:[r]).filter((function(e){return!!e})).some((function(e){return e.size<=0}))})),e(this,"RenderMessage",(function(e,r,i,t){if(t&&"string"==typeof t)e.message=t;else if(!e.message)switch(e.message=s[e.rule].replace("{0}",null!=i?i:r),e.rule){case n.Regex:e.message=e.message.replace("{1}",e.Value.source);break;case n.RequiredValue:var l,o;e.message=e.message.replace("{1}",null!==(l=null===(o=e.Value)||void 0===o?void 0:o.toString())&&void 0!==l?l:"");break;case n.File:var c,f,m=a(0,e.options);if(!0===(null==m?void 0:m.all))e.message="Total file size must be less than ".concat(u((null!==(c=null==m?void 0:m.maxSize)&&void 0!==c?c:0)/1024));else e.message=e.message.replace("{1}",u((null!==(f=null==m?void 0:m.maxSize)&&void 0!==f?f:0)/1024))}return e.message=e.message.replace("{0}",r),e})),e(this,"run",(function(e){var r=Object.keys(l.configs),i={};return r.forEach((function(r){var u=l.configs[r];if(u){var t=l.Executed(u,e[r],e);t.length<1||(i[r]=t.map((function(e){return l.RenderMessage(e.rule,r,u.label,e.value)})))}})),i})),e(this,"Executed",(function(e,r,i){return e.Rules.map((function(e){var u=l[e.rule.toString()],t=u&&u(e,r,i);return{value:t,rule:e}})).filter((function(e){return e.value}))})),this.configs=t}));t=l,e(l,"initial",(function(e){return new t(e)}));var o=function(){return new l({})};export{n as SingleRuleValidate,o as createFormValidator,l as default,a as mapRuleOptions};
|
|
2
2
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sources":["../../src/form/validator.ts"],"sourcesContent":["import { formatFileSize } from '../utils'\r\n\r\nexport type IModelBase = { [key: string]: any }\r\n\r\nexport enum SingleRuleValidate {\r\n Required = 'Required',\r\n Regex = 'Regex',\r\n RequiredValue = 'RequiredValue',\r\n Array = 'Array',\r\n Number = 'Number',\r\n Email = 'Email',\r\n PhoneNumber = 'PhoneNumber',\r\n Url = 'Url',\r\n File = 'File',\r\n FileRequired = 'FileRequired',\r\n Custom = 'Custom'\r\n}\r\n\r\nconst MessageDefault = {\r\n Required: 'The {0} is required',\r\n Regex: 'The {0} is not match {1}',\r\n RequiredValue: 'the {0} is not equal {1}',\r\n Array: 'The {0} is not valid',\r\n Number: '{0} must be a number',\r\n Email: 'The {0} is not valid',\r\n PhoneNumber: 'The {0} is not valid',\r\n Url: 'The {0} is not valid',\r\n File: 'File size must be less than {1}',\r\n FileRequired: 'The {0} is required',\r\n Custom: 'Error Custom'\r\n}\r\n\r\nexport interface IRuleOptions {\r\n File: {\r\n maxSize: number\r\n // toal size of files\r\n all?: boolean\r\n }\r\n}\r\n\r\nexport const mapRuleOptions = <TK extends keyof IRuleOptions>(key: TK, options?: IRuleOptions[TK]) => options\r\n\r\nexport interface IRuleOption<TModel = any> {\r\n rule: SingleRuleValidate\r\n message?: string\r\n Value?: RegExp | ((value: any, model: TModel) => boolean | string) | number | Array<any> | boolean\r\n options?: any\r\n}\r\n\r\nexport interface IConfigValue<TModel = any> {\r\n Rules: IRuleOption<TModel>[]\r\n label?: string\r\n}\r\n\r\nexport interface IModelError {\r\n message: string\r\n error: boolean\r\n}\r\n\r\nexport type IFormValidatorConfig<TModel> = {\r\n [key in keyof Extract<TModel, IModelBase>]?: IConfigValue<TModel>\r\n}\r\n\r\nexport type IPartialError<TModel> = {\r\n [key in keyof TModel]?: IRuleOption<TModel>[]\r\n}\r\n\r\nexport default class FormValidator<TModel> {\r\n configs: IFormValidatorConfig<TModel>\r\n constructor(configs: IFormValidatorConfig<TModel>) {\r\n this.configs = configs\r\n }\r\n\r\n static initial = <T>(configs: IFormValidatorConfig<T>) => new FormValidator(configs)\r\n\r\n AddRules = (key: keyof TModel, ...rule: IRuleOption<TModel>[]) => {\r\n let fieldConfig = this.configs[key]\r\n if (!fieldConfig) {\r\n fieldConfig = { Rules: [] }\r\n this.configs[key] = fieldConfig\r\n }\r\n fieldConfig.Rules.push(...rule)\r\n return this\r\n }\r\n\r\n Required = (RuleOption: IRuleOption, value: any) => {\r\n return value === null || value === undefined || value === ''\r\n }\r\n Regex = (RuleOption: IRuleOption, value: string, Regex: RegExp) => {\r\n if (!value) return false\r\n return !(RuleOption.Value as RegExp).test(value)\r\n }\r\n RequiredValue = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return value !== RuleOption.Value\r\n }\r\n Custom = (RuleOption: IRuleOption, value: any, model: any) => {\r\n if (typeof RuleOption.Value === 'function') {\r\n return RuleOption.Value(value, model)\r\n }\r\n return true\r\n }\r\n Array = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n if (typeof RuleOption.Value === 'number') {\r\n return Array.isArray(value) ? value.length <= RuleOption.Value : true\r\n }\r\n return true\r\n }\r\n Number = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return isNaN(Number(value))\r\n }\r\n Email = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return !regex.test(value)\r\n }\r\n PhoneNumber = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return !phoneRegex.test((value ?? '').trim())\r\n }\r\n Url = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n try {\r\n new URL(value)\r\n return false\r\n } catch (err) {\r\n return true\r\n }\r\n }\r\n File = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n if (!options) return false\r\n if (options.all === true) {\r\n const size = files.reduce((a, b) => {\r\n a += b.size\r\n return a\r\n }, 0)\r\n return size > options.maxSize\r\n } else {\r\n return files.some((x) => x.size > options.maxSize)\r\n }\r\n }\r\n FileRequired = (RuleOption: IRuleOption, value: any) => {\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n return !!files.filter((x) => !!x).some((x) => x.size <= 0)\r\n }\r\n RenderMessage = (RuleOption: IRuleOption, key: string, label?: string, message?: string) => {\r\n if (message) {\r\n RuleOption.message = message\r\n } else if (!RuleOption.message) {\r\n RuleOption.message = MessageDefault[RuleOption.rule].replace('{0}', label ?? key)\r\n switch (RuleOption.rule) {\r\n case SingleRuleValidate.Regex: {\r\n RuleOption.message = RuleOption.message.replace('{1}', (RuleOption.Value as RegExp).source)\r\n break\r\n }\r\n case SingleRuleValidate.RequiredValue: {\r\n RuleOption.message = RuleOption.message.replace('{1}', RuleOption.Value?.toString() ?? '')\r\n break\r\n }\r\n case SingleRuleValidate.File: {\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n if (options?.all === true) {\r\n RuleOption.message = `Total file size must be less than ${formatFileSize((options?.maxSize ?? 0) / 1024)}`\r\n } else {\r\n RuleOption.message = RuleOption.message.replace('{1}', formatFileSize((options?.maxSize ?? 0) / 1024))\r\n }\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n RuleOption.message = RuleOption.message.replace('{0}', key)\r\n return RuleOption\r\n }\r\n run = (model: TModel) => {\r\n const keys = Object.keys(this.configs)\r\n const data: IPartialError<TModel> = {}\r\n keys.forEach((key) => {\r\n const config = this.configs[key]\r\n if (!config) return\r\n const tmp = this.Executed(config, (model as any)[key], model)\r\n if (tmp.length < 1) return\r\n ;(data as any)[key] = tmp.map((x) => this.RenderMessage(x.rule, key, config.label, x.value))\r\n })\r\n return data\r\n }\r\n Executed = (Config: IConfigValue, valueField: any, model: any) => {\r\n return Config.Rules.map((Value) => {\r\n const action = (this as any)[Value.rule.toString()]\r\n const res = action && action(Value, valueField, model)\r\n return { value: typeof res === 'boolean' ? undefined : (res as string), rule: Value }\r\n }).filter((x) => x.value)\r\n }\r\n}\r\n\r\nexport const createFormValidator = <TModel>() => {\r\n return new FormValidator<Partial<TModel>>({})\r\n}\r\n"],"names":["SingleRuleValidate","MessageDefault","Required","Regex","RequiredValue","Array","Number","Email","PhoneNumber","Url","File","FileRequired","Custom","mapRuleOptions","key","options","FormValidator","_createClass","configs","_this","this","_classCallCheck","_defineProperty","_fieldConfig$Rules","fieldConfig","Rules","_len","arguments","length","rule","_key","push","apply","RuleOption","value","Value","test","model","isArray","isNaN","trim","URL","err","files","all","reduce","a","b","size","maxSize","some","x","filter","label","message","replace","source","_RuleOption$Value$toS","_RuleOption$Value","toString","_options$maxSize","_options$maxSize2","concat","formatFileSize","keys","Object","data","forEach","config","tmp","Executed","map","RenderMessage","Config","valueField","action","res","undefined","_FormValidator","createFormValidator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sources":["../../src/form/validator.ts"],"sourcesContent":["import { formatFileSize } from '../utils'\r\n\r\nexport type IModelBase = { [key: string]: any }\r\n\r\nexport enum SingleRuleValidate {\r\n Required = 'Required',\r\n Regex = 'Regex',\r\n RequiredValue = 'RequiredValue',\r\n Array = 'Array',\r\n Number = 'Number',\r\n Email = 'Email',\r\n PhoneNumber = 'PhoneNumber',\r\n Url = 'Url',\r\n File = 'File',\r\n FileRequired = 'FileRequired',\r\n Custom = 'Custom'\r\n}\r\n\r\nconst MessageDefault = {\r\n Required: 'The {0} is required',\r\n Regex: 'The {0} is not match {1}',\r\n RequiredValue: 'the {0} is not equal {1}',\r\n Array: 'The {0} is not valid',\r\n Number: '{0} must be a number',\r\n Email: 'The {0} is not valid',\r\n PhoneNumber: 'The {0} is not valid',\r\n Url: 'The {0} is not valid',\r\n File: 'File size must be less than {1}',\r\n FileRequired: 'The {0} is required',\r\n Custom: 'Error Custom'\r\n}\r\n\r\nexport interface IRuleOptions {\r\n File: {\r\n maxSize: number\r\n // toal size of files\r\n all?: boolean\r\n }\r\n}\r\n\r\nexport const mapRuleOptions = <TK extends keyof IRuleOptions>(key: TK, options?: IRuleOptions[TK]) => options\r\n\r\nexport interface IRuleOption<TModel = any> {\r\n rule: SingleRuleValidate\r\n message?: string\r\n Value?: RegExp | ((value: any, model: TModel) => boolean | string) | number | Array<any> | boolean\r\n options?: any\r\n}\r\n\r\nexport interface IConfigValue<TModel = any> {\r\n Rules: IRuleOption<TModel>[]\r\n label?: string\r\n}\r\n\r\nexport interface IModelError {\r\n message: string\r\n error: boolean\r\n}\r\n\r\nexport type IFormValidatorConfig<TModel> = {\r\n [key in keyof Extract<TModel, IModelBase>]?: IConfigValue<TModel>\r\n}\r\n\r\nexport type IPartialError<TModel> = {\r\n [key in keyof TModel]?: IRuleOption<TModel>[]\r\n}\r\n\r\nexport default class FormValidator<TModel> {\r\n configs: IFormValidatorConfig<TModel>\r\n constructor(configs: IFormValidatorConfig<TModel>) {\r\n this.configs = configs\r\n }\r\n\r\n static initial = <T>(configs: IFormValidatorConfig<T>) => new FormValidator(configs)\r\n\r\n AddRules = (key: keyof TModel, ...rule: IRuleOption<TModel>[]) => {\r\n let fieldConfig = this.configs[key]\r\n if (!fieldConfig) {\r\n fieldConfig = { Rules: [] }\r\n this.configs[key] = fieldConfig\r\n }\r\n fieldConfig.Rules.push(...rule)\r\n return this\r\n }\r\n\r\n Required = (RuleOption: IRuleOption, value: any) => {\r\n return value === null || value === undefined || value === ''\r\n }\r\n Regex = (RuleOption: IRuleOption, value: string, Regex: RegExp) => {\r\n if (!value) return false\r\n return !(RuleOption.Value as RegExp).test(value)\r\n }\r\n RequiredValue = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return value !== RuleOption.Value\r\n }\r\n Custom = (RuleOption: IRuleOption, value: any, model: any) => {\r\n if (typeof RuleOption.Value === 'function') {\r\n return RuleOption.Value(value, model)\r\n }\r\n return true\r\n }\r\n Array = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n if (typeof RuleOption.Value === 'number') {\r\n return Array.isArray(value) ? value.length <= RuleOption.Value : true\r\n }\r\n return true\r\n }\r\n Number = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return isNaN(Number(value))\r\n }\r\n Email = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return !regex.test(value)\r\n }\r\n PhoneNumber = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return !phoneRegex.test((value ?? '').trim())\r\n }\r\n Url = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n try {\r\n new URL(value)\r\n return false\r\n } catch (err) {\r\n return true\r\n }\r\n }\r\n File = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n if (!options) return false\r\n if (options.all === true) {\r\n const size = files.reduce((a, b) => {\r\n a += b.size\r\n return a\r\n }, 0)\r\n return size > options.maxSize\r\n } else {\r\n return files.some((x) => x.size > options.maxSize)\r\n }\r\n }\r\n FileRequired = (RuleOption: IRuleOption, value: any) => {\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n return !!files.filter((x) => !!x).some((x) => x.size <= 0)\r\n }\r\n RenderMessage = (RuleOption: IRuleOption, key: string, label?: string, message?: string | boolean) => {\r\n if (!!message && typeof message === 'string') {\r\n RuleOption.message = message\r\n } else if (!RuleOption.message) {\r\n RuleOption.message = MessageDefault[RuleOption.rule].replace('{0}', label ?? key)\r\n switch (RuleOption.rule) {\r\n case SingleRuleValidate.Regex: {\r\n RuleOption.message = RuleOption.message.replace('{1}', (RuleOption.Value as RegExp).source)\r\n break\r\n }\r\n case SingleRuleValidate.RequiredValue: {\r\n RuleOption.message = RuleOption.message.replace('{1}', RuleOption.Value?.toString() ?? '')\r\n break\r\n }\r\n case SingleRuleValidate.File: {\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n if (options?.all === true) {\r\n RuleOption.message = `Total file size must be less than ${formatFileSize((options?.maxSize ?? 0) / 1024)}`\r\n } else {\r\n RuleOption.message = RuleOption.message.replace('{1}', formatFileSize((options?.maxSize ?? 0) / 1024))\r\n }\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n RuleOption.message = RuleOption.message.replace('{0}', key)\r\n return RuleOption\r\n }\r\n run = (model: TModel) => {\r\n const keys = Object.keys(this.configs)\r\n const data: IPartialError<TModel> = {}\r\n keys.forEach((key) => {\r\n const config = this.configs[key]\r\n if (!config) return\r\n const tmp = this.Executed(config, (model as any)[key], model)\r\n if (tmp.length < 1) return\r\n ;(data as any)[key] = tmp.map((x) => this.RenderMessage(x.rule, key, config.label, x.value))\r\n })\r\n return data\r\n }\r\n Executed = (Config: IConfigValue, valueField: any, model: any) => {\r\n return Config.Rules.map((Value) => {\r\n const action = (this as any)[Value.rule.toString()]\r\n const res = action && action(Value, valueField, model)\r\n return { value: typeof res === 'boolean' ? res : (res as string), rule: Value }\r\n }).filter((x) => x.value)\r\n }\r\n}\r\n\r\nexport const createFormValidator = <TModel>() => {\r\n return new FormValidator<Partial<TModel>>({})\r\n}\r\n"],"names":["SingleRuleValidate","MessageDefault","Required","Regex","RequiredValue","Array","Number","Email","PhoneNumber","Url","File","FileRequired","Custom","mapRuleOptions","key","options","FormValidator","_createClass","configs","_this","this","_classCallCheck","_defineProperty","_fieldConfig$Rules","fieldConfig","Rules","_len","arguments","length","rule","_key","push","apply","RuleOption","value","Value","test","model","isArray","isNaN","trim","URL","err","files","all","reduce","a","b","size","maxSize","some","x","filter","label","message","replace","source","_RuleOption$Value$toS","_RuleOption$Value","toString","_options$maxSize","_options$maxSize2","concat","formatFileSize","keys","Object","data","forEach","config","tmp","Executed","map","RenderMessage","Config","valueField","action","res","_FormValidator","createFormValidator"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asyncToGenerator as r,regenerator as e,slicedToArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{authService as o,ApplicationPaths as t}from"partner-oidc-auth";var
|
|
1
|
+
import{asyncToGenerator as r,regenerator as e,slicedToArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{authService as o,ApplicationPaths as t}from"partner-oidc-auth";var i=globalThis.ApiAlertContext;"development"===process.env.NODE_ENV&&(globalThis.authService=o);var u=function(r){return new Promise((function(e){return setTimeout(e,r)}))},s=function(){var o=r(e().m((function r(o,t){var i,s,l;return e().w((function(r){for(;;)switch(r.n){case 0:return r.n=1,Promise.all([o(),u(t)]);case 1:return i=r.v,s=n(i,1),l=s[0],r.a(2,l)}}),r)})));return function(r,e){return o.apply(this,arguments)}}(),l=function(r){var e,n,o,t,u,s=Object.values(null!==(e=null!==(n=null===(o=r.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.errors)&&void 0!==n?n:null===(t=r.response)||void 0===t?void 0:t.data)&&void 0!==e?e:{}).filter((function(r){return r.length>0})).map((function(r){return r[0]}));s.length<1||null==i||null===(u=i.ApiAlert)||void 0===u||u.PushError(s.join("\n"))},a=function(){var n=r(e().m((function r(n){var u,s,l,a,c,d,v,p,f,h;return e().w((function(r){for(;;)switch(r.n){case 0:if(403!==(null===(u=n.response)||void 0===u?void 0:u.status)){r.n=7;break}d=n.response.data,h=d.Code,r.n=3===h?1:1===h?3:5;break;case 1:return r.n=2,o.signOut({returnUrl:o.getReturnUrl()});case 2:return r.a(3,6);case 3:return r.n=4,null===(v=o.userManager)||void 0===v?void 0:v.revokeTokens(["access_token"]);case 4:return window.location.replace(t.Origin("")),r.a(3,6);case 5:return window.location.replace(t.Origin(t.IdentityAccessDenied)),r.a(3,6);case 6:r.n=8;break;case 7:401===(null===(s=n.response)||void 0===s?void 0:s.status)||"ERR_CANCELED"===n.code||((null!==(l=null===(a=n.response)||void 0===a?void 0:a.status)&&void 0!==l?l:500)>=500?"ERR_CANCELED"!==n.code&&(null==i||null===(p=i.ApiAlert)||void 0===p||p.PushError("An error has occurred!")):404===(null===(c=n.response)||void 0===c?void 0:c.status)&&(null==i||null===(f=i.ApiAlert)||void 0===f||f.PushError("Resource not found!")));case 8:return r.a(2,Promise.reject(n))}}),r)})));return function(r){return n.apply(this,arguments)}}();export{i as ApiAlertContext,s as fetchDelay,a as handleResponseError,l as processError,u as sleep};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/http-service/base/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport { ApplicationPaths, authService } from 'partner-oidc-auth'\r\nimport type { IApiContext } from './type.api-alert'\r\n\r\nexport const ApiAlertContext = (globalThis as any).ApiAlertContext as IApiContext | undefined\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n ;(globalThis as any).authService = authService\r\n}\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\ninterface ErrorModel {\r\n [key: string]: string[]\r\n}\r\n\r\n/**\r\n * Processes axios errors and displays error messages to the user\r\n * @param err - The axios error containing response data\r\n */\r\nexport const processError = (err: AxiosError<ErrorModel>) => {\r\n const errorMessages = Object.values(err.response?.data ?? {})\r\n .filter((x) => x.length > 0)\r\n .map((x) => x[0])\r\n if (errorMessages.length < 1) return\r\n ApiAlertContext?.ApiAlert?.PushError(errorMessages.join('\\n'))\r\n}\r\n\r\n/**\r\n * Checks if the current user's token is expired.\r\n * @returns {Promise<boolean>} True if token is expired or user not logged in, false otherwise.\r\n */\r\nexport const checkTokenExpiry = async () => {\r\n try {\r\n const user = await authService.getUser()\r\n if (!user) {\r\n console.log('No user is currently logged in.')\r\n return true\r\n }\r\n\r\n const now = Math.floor(Date.now() / 1000) // Current time in seconds since epoch\r\n const expiresIn = user.exp - now\r\n\r\n if (expiresIn <= 0) {\r\n console.log('The token has expired.')\r\n return true\r\n } else {\r\n console.log(`The token will expire in ${expiresIn} seconds.`)\r\n return false\r\n }\r\n } catch (error) {\r\n console.error('Error checking token expiry:', error)\r\n return true\r\n }\r\n}\r\n/**\r\n * Refreshes the token once if at least 4 seconds have passed since the last refresh.\r\n * Uses localStorage key 'ltt' to track last refresh time.\r\n */\r\nexport const refreshTokenOnce = async () => {\r\n const timeStamp = new Date().getTime() - parseInt(localStorage.getItem('ltt') ?? '0')\r\n localStorage.setItem('ltt', new Date().getTime().toString())\r\n if (timeStamp >= 4000) {\r\n try {\r\n await authService.ensureUserManagerInitialized()\r\n await authService.signIn({})\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n}\r\n/**\r\n * Handles errors from Axios HTTP responses.\r\n * Redirects or signs out user based on error code and status.\r\n * @param {AxiosError} err - The error object from Axios.\r\n * @returns {Promise<never>} Always rejects with the error.\r\n */\r\nexport const handleResponseError = async (err: AxiosError) => {\r\n if (err.response?.status === 403) {\r\n const dataError: { Code: number; Message: string } = err.response.data as any\r\n switch (dataError.Code) {\r\n case 3: {\r\n await authService.signOut({ returnUrl: authService.getReturnUrl() })\r\n break\r\n }\r\n case 1: {\r\n await authService.userManager?.revokeTokens(['access_token'])\r\n window.location.replace(ApplicationPaths.Origin(''))\r\n break\r\n }\r\n default: {\r\n window.location.replace(ApplicationPaths.Origin(ApplicationPaths.IdentityAccessDenied))\r\n break\r\n }\r\n }\r\n } else if (err.response?.status === 401) {\r\n } else if (err.code === 'ERR_CANCELED') {\r\n } else if ((err.response?.status ?? 500) >= 500) {\r\n if (err.code !== 'ERR_CANCELED') {\r\n ApiAlertContext?.ApiAlert?.PushError('An error has occurred!')\r\n }\r\n } else if (err.response?.status === 404) {\r\n ApiAlertContext?.ApiAlert?.PushError('Resource not found!')\r\n }\r\n return Promise.reject(err)\r\n}\r\n"],"names":["ApiAlertContext","globalThis","process","env","NODE_ENV","authService","sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","processError","err","_err$response$data","_err$response","_ApiAlertContext$ApiA","errorMessages","Object","values","response","data","filter","x","length","map","ApiAlert","PushError","join","handleResponseError","
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/http-service/base/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport { ApplicationPaths, authService } from 'partner-oidc-auth'\r\nimport type { IApiContext } from './type.api-alert'\r\n\r\nexport const ApiAlertContext = (globalThis as any).ApiAlertContext as IApiContext | undefined\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n ;(globalThis as any).authService = authService\r\n}\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\ninterface ErrorModel {\r\n [key: string]: string[]\r\n}\r\n\r\n/**\r\n * Processes axios errors and displays error messages to the user\r\n * @param err - The axios error containing response data\r\n */\r\nexport const processError = (err: AxiosError<ErrorModel>) => {\r\n const errorMessages = Object.values(err.response?.data?.errors ?? err.response?.data ?? {})\r\n .filter((x) => x.length > 0)\r\n .map((x) => x[0])\r\n if (errorMessages.length < 1) return\r\n ApiAlertContext?.ApiAlert?.PushError(errorMessages.join('\\n'))\r\n}\r\n\r\n/**\r\n * Checks if the current user's token is expired.\r\n * @returns {Promise<boolean>} True if token is expired or user not logged in, false otherwise.\r\n */\r\nexport const checkTokenExpiry = async () => {\r\n try {\r\n const user = await authService.getUser()\r\n if (!user) {\r\n console.log('No user is currently logged in.')\r\n return true\r\n }\r\n\r\n const now = Math.floor(Date.now() / 1000) // Current time in seconds since epoch\r\n const expiresIn = user.exp - now\r\n\r\n if (expiresIn <= 0) {\r\n console.log('The token has expired.')\r\n return true\r\n } else {\r\n console.log(`The token will expire in ${expiresIn} seconds.`)\r\n return false\r\n }\r\n } catch (error) {\r\n console.error('Error checking token expiry:', error)\r\n return true\r\n }\r\n}\r\n/**\r\n * Refreshes the token once if at least 4 seconds have passed since the last refresh.\r\n * Uses localStorage key 'ltt' to track last refresh time.\r\n */\r\nexport const refreshTokenOnce = async () => {\r\n const timeStamp = new Date().getTime() - parseInt(localStorage.getItem('ltt') ?? '0')\r\n localStorage.setItem('ltt', new Date().getTime().toString())\r\n if (timeStamp >= 4000) {\r\n try {\r\n await authService.ensureUserManagerInitialized()\r\n await authService.signIn({})\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n}\r\n/**\r\n * Handles errors from Axios HTTP responses.\r\n * Redirects or signs out user based on error code and status.\r\n * @param {AxiosError} err - The error object from Axios.\r\n * @returns {Promise<never>} Always rejects with the error.\r\n */\r\nexport const handleResponseError = async (err: AxiosError) => {\r\n if (err.response?.status === 403) {\r\n const dataError: { Code: number; Message: string } = err.response.data as any\r\n switch (dataError.Code) {\r\n case 3: {\r\n await authService.signOut({ returnUrl: authService.getReturnUrl() })\r\n break\r\n }\r\n case 1: {\r\n await authService.userManager?.revokeTokens(['access_token'])\r\n window.location.replace(ApplicationPaths.Origin(''))\r\n break\r\n }\r\n default: {\r\n window.location.replace(ApplicationPaths.Origin(ApplicationPaths.IdentityAccessDenied))\r\n break\r\n }\r\n }\r\n } else if (err.response?.status === 401) {\r\n } else if (err.code === 'ERR_CANCELED') {\r\n } else if ((err.response?.status ?? 500) >= 500) {\r\n if (err.code !== 'ERR_CANCELED') {\r\n ApiAlertContext?.ApiAlert?.PushError('An error has occurred!')\r\n }\r\n } else if (err.response?.status === 404) {\r\n ApiAlertContext?.ApiAlert?.PushError('Resource not found!')\r\n }\r\n return Promise.reject(err)\r\n}\r\n"],"names":["ApiAlertContext","globalThis","process","env","NODE_ENV","authService","sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","processError","err","_ref2","_err$response$data$er","_err$response","_err$response2","_ApiAlertContext$ApiA","errorMessages","Object","values","response","data","errors","filter","x","length","map","ApiAlert","PushError","join","handleResponseError","_ref5","_callee4","_err$response3","_err$response4","_err$response$status","_err$response5","_err$response6","dataError","_authService$userMana","_ApiAlertContext$ApiA2","_ApiAlertContext$ApiA3","_t3","_context4","status","Code","signOut","returnUrl","getReturnUrl","userManager","revokeTokens","window","location","replace","ApplicationPaths","Origin","IdentityAccessDenied","code","reject","_x3"],"mappings":"yLAIaA,IAAAA,EAAmBC,WAAmBD,gBAEtB,gBAAzBE,QAAQC,IAAIC,WACZH,WAAmBI,YAAcA,OAGxBC,EAAQ,SAACC,GAAW,OAAK,IAAIC,SAAQ,SAACC,GAAG,OAAKC,WAAWD,EAAKF,KAAK,EAEnEI,EAAU,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,GAAG,SAAAC,EAAwBC,EAA+BV,GAAW,IAAAW,EAAAC,EAAAV,EAAA,OAAAK,IAAAM,GAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACtEd,QAAQe,IAAI,CAACN,IAAUX,EAAMC,KAAM,KAAA,EAA7C,OAA6CW,EAAAG,EAAAG,EAAAL,EAAAM,EAAAP,EAAA,GAAhDT,EAAGU,EAAA,GAAAE,EAAAK,EAAA,EACHjB,GAAG,GAAAO,OACX,OAAA,SAHsBW,EAAAC,GAAA,OAAAhB,EAAAiB,MAAAC,KAAAC,UAAA,CAAA,CAAA,GAaVC,EAAe,SAACC,GAA+B,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACpDC,EAAgBC,OAAOC,OAAuDP,QAAjDA,EAA2BC,QAA3BA,EAAa,QAAbC,EAACH,EAAIS,gBAAQ,IAAAN,GAAM,QAANA,EAAZA,EAAcO,YAAI,IAAAP,OAAA,EAAlBA,EAAoBQ,cAAMT,IAAAA,EAAAA,EAAgBE,QAAhBA,EAAIJ,EAAIS,gBAAJL,IAAYA,OAAZA,EAAAA,EAAcM,YAAIT,IAAAA,EAAAA,EAAI,IACrFW,QAAO,SAACC,GAAC,OAAKA,EAAEC,OAAS,CAAC,IAC1BC,KAAI,SAACF,GAAC,OAAKA,EAAE,MACZP,EAAcQ,OAAS,GAC3B/C,SAAyBsC,QAAVA,EAAftC,EAAiBiD,oBAAQX,GAAzBA,EAA2BY,UAAUX,EAAcY,KAAK,MAC1D,EAmDaC,EAAmB,WAAA,IAAAC,EAAAxC,EAAAC,IAAAC,GAAG,SAAAuC,EAAOrB,GAAe,IAAAsB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAlD,IAAAM,GAAA,SAAA6C,GAAA,cAAAA,EAAA3C,GAAA,KAAA,EAAA,GAC1B,OAAbiC,QAAZA,EAAAtB,EAAIS,gBAAJa,IAAYA,OAAZA,EAAAA,EAAcW,QAAc,CAAAD,EAAA3C,EAAA,EAAA,KAAA,CACxBsC,EAA+C3B,EAAIS,SAASC,KAAWqB,EACrEJ,EAAUO,KAAIF,EAAA3C,EACf,IADe0C,EACd,EAID,IAJCA,EAIA,EAAA,EAAA,MAAA,KAAA,EAAA,OAAAC,EAAA3C,EAAA,EAHEjB,EAAY+D,QAAQ,CAAEC,UAAWhE,EAAYiE,iBAAiB,KAAA,EAAA,OAAAL,EAAAvC,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAuC,EAAA3C,EAAA,EAIvCuC,QAJuCA,EAI9DxD,EAAYkE,mBAAZV,IAAuBA,OAAvBA,EAAAA,EAAyBW,aAAa,CAAC,iBAAgB,KAAA,EACT,OAApDC,OAAOC,SAASC,QAAQC,EAAiBC,OAAO,KAAIZ,EAAAvC,EAAA,EAAA,GAAA,KAAA,EAImC,OAAvF+C,OAAOC,SAASC,QAAQC,EAAiBC,OAAOD,EAAiBE,uBAAsBb,EAAAvC,EAAA,EAAA,GAAA,KAAA,EAAAuC,EAAA3C,EAAA,EAAA,MAAA,KAAA,EAIzD,OAAb,QAAZkC,EAAAvB,EAAIS,gBAAQ,IAAAc,OAAA,EAAZA,EAAcU,SACD,iBAAbjC,EAAI8C,QACiB,QAArBtB,EAAaC,QAAbA,EAACzB,EAAIS,oBAAQgB,SAAZA,EAAcQ,cAAM,IAAAT,EAAAA,EAAI,MAAQ,IACzB,iBAAbxB,EAAI8C,OACN/E,SAAyB8D,QAAVA,EAAf9D,EAAiBiD,oBAAQa,GAAzBA,EAA2BZ,UAAU,2BAEL,OAAbS,QAAZA,EAAA1B,EAAIS,oBAAQiB,SAAZA,EAAcO,UACvBlE,SAAyB+D,QAAVA,EAAf/D,EAAiBiD,oBAAQc,GAAzBA,EAA2Bb,UAAU,yBACtC,KAAA,EAAA,OAAAe,EAAAvC,EAAA,EACMlB,QAAQwE,OAAO/C,IAAI,GAAAqB,OAC3B,OA5BYF,SAAmB6B,GAAA,OAAA5B,EAAAxB,MAAAC,KAAAC,UAAA,CAAA,CAAA"}
|
|
@@ -57,10 +57,10 @@ export default class FormValidator<TModel> {
|
|
|
57
57
|
Url: (RuleOption: IRuleOption, value: any) => boolean;
|
|
58
58
|
File: (RuleOption: IRuleOption, value: any) => boolean;
|
|
59
59
|
FileRequired: (RuleOption: IRuleOption, value: any) => boolean;
|
|
60
|
-
RenderMessage: (RuleOption: IRuleOption, key: string, label?: string, message?: string) => IRuleOption<any>;
|
|
60
|
+
RenderMessage: (RuleOption: IRuleOption, key: string, label?: string, message?: string | boolean) => IRuleOption<any>;
|
|
61
61
|
run: (model: TModel) => IPartialError<TModel>;
|
|
62
62
|
Executed: (Config: IConfigValue, valueField: any, model: any) => {
|
|
63
|
-
value: string |
|
|
63
|
+
value: string | boolean;
|
|
64
64
|
rule: IRuleOption<any>;
|
|
65
65
|
}[];
|
|
66
66
|
}
|