aio-login 7.0.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +10 -10
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- function _defineProperty(e,t,i){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function _toPropertyKey(e){var t=_toPrimitive(e,"string");return"symbol"==typeof t?t:String(t)}function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var r=i.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}import e,{Component as t,createRef as i}from"react";import r from"react-virtual-dom";import o from"aio-storage";import s,{getFormInputs as n}from"aio-input";import{Icon as l}from"@mdi/react";import{mdiCellphone as a,mdiLock as u,mdiLoading as d,mdiAccount as p,mdiAccountBoxOutline as g,mdiEmail as m,mdiChevronRight as h}from"@mdi/js";import f from"aio-popup";import"./index.css";import{jsx as b}from"react/jsx-runtime";import{jsxs as c}from"react/jsx-runtime";export default class y{constructor(e){_defineProperty(this,"render",(e={})=>{let{attrs:t=this.props.attrs,profile:i}=e;if(i&&("object"!=typeof i||!Array.isArray(i.fields)||!i.fields.length||"function"!=typeof i.onSubmit)){let r=`
1
+ function _defineProperty(e,t,i){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function _toPropertyKey(e){var t=_toPrimitive(e,"string");return"symbol"==typeof t?t:String(t)}function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var r=i.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}import e,{Component as t,createRef as i}from"react";import r from"react-virtual-dom";import o from"aio-storage";import s,{getFormInputs as n}from"aio-input";import{Icon as l}from"@mdi/react";import{mdiCellphone as a,mdiLock as u,mdiLoading as d,mdiAccount as p,mdiAccountBoxOutline as g,mdiEmail as m,mdiChevronRight as h}from"@mdi/js";import f from"aio-popup";import"./index.css";import{jsx as b}from"react/jsx-runtime";import{jsxs as c}from"react/jsx-runtime";export default class y{constructor(e){_defineProperty(this,"render",(e={})=>{let{attrs:t=this.props.attrs,profile:i,appState:r}=e;if(i&&("object"!=typeof i||!Array.isArray(i.fields)||!i.fields.length||"function"!=typeof i.onSubmit)){let o=`
2
2
  aio-login-error => profile props should be an object contain :
3
3
  submitText : string | undefined,
4
4
  title : string | undefined,
@@ -10,18 +10,18 @@ function _defineProperty(e,t,i){return(t=_toPropertyKey(t))in e?Object.definePro
10
10
  <default field> : (
11
11
  "fullname" | "firstname" | "lastname" | "username" | "address" | "email" | "fathername" | "phone" | "mobile" | "postalcode",
12
12
  "nationalcode" | "idcode" | "cardbank" | "state" | "city" | "gender" | "married" | "militaryservice" | "location"
13
- )`;return alert(r),console.log(r),null}return b(AIOLOGIN,{...this.props,getActions:({setMode:e})=>this.setMode=e,profile:i,attrs:t})});let{id:t,onSubmit:i,modes:r,timer:s,checkToken:n,register:l,userId:a,attrs:u,forget:d,otpLength:p,renderApp:g,renderSplash:m,splashTime:h,renderLogin:f}=e;AIOLoginValidator(e);let c=o(`-AIOLogin-${t}`);this.setStorage=(e,t)=>{if("object"==typeof e)for(let i in e)c.save({name:i,value:e[i]});else c.save({name:e,value:t})},this.getStorage=e=>{let t=c.load({name:"token",def:!1}),i=c.load({name:"userId",def:""}),r=c.load({name:"userInfo"}),o={token:t,userId:i,userInfo:r};return e?o[e]:o},this.removeStorage=e=>c.remove({name:e}),this.logout=()=>{this.removeStorage("token"),window.location.reload()},this.props={id:t,checkToken:n,onSubmit:i,modes:r,register:l,userId:a,attrs:u,timer:s,forget:d,otpLength:p,renderApp:g,renderSplash:m,splashTime:h,renderLogin:f,getStorage:this.getStorage.bind(this),setStorage:this.setStorage.bind(this),removeStorage:this.removeStorage.bind(this),logout:this.logout}}};class AIOLOGIN extends t{constructor(e){super(e);let{splashTime:t=0}=e;this.state={isTokenChecked:!1,showReload:!1,mode:e.mode||e.modes[0],loading:!1,showSplash:!0},e.getActions({setMode:this.setMode.bind(this)}),setTimeout(()=>this.setState({showSplash:!1}),t)}async checkToken(){let{getStorage:e,checkToken:t,removeStorage:i}=this.props,{token:r,userId:o,userInfo:s}=e(),n;try{n=await t(r,{userId:o,userInfo:s})}catch(l){new f().addAlert({type:"error",text:"بررسی توکن با خطا روبرو شد",subtext:this.getError(l)})}!0===n?this.setMode("auth"):!1===n?i("token"):("string"==typeof n&&new f().addAlert({type:"error",text:"بررسی توکن با خطا روبرو شد",subtext:n}),this.setState({showReload:!0})),this.setState({isTokenChecked:!0})}getError(e){if("string"==typeof e)return e;if("object"==typeof e){if("object"!=typeof e.response)return e.message||e.Message;if("object"==typeof e.response.data){let{message:t,Message:i}=e.response.data;return i||t}return"string"==typeof e.response.data?e.response.data:"error"}}async componentDidMount(){let{profile:e}=this.props;!e&&this.checkToken()}setLoading(e){this.setState({loading:e})}async onSubmit(e){let{onSubmit:t}=this.props,{mode:i}=this.state,r;this.setLoading(!0);try{r=await t(e,i)}catch{this.setLoading(!1);return}if(this.setLoading(!1),"string"==typeof r){let o={OTPNumber:"ارسال شماره همراه",OTPCode:"ارسال کد یکبار مصرف",userName:"ارسال نام کاربری و رمز عبور",phoneNumber:"ارسال شماره همراه و رمز عبور",email:"ارسال آدرس ایمیل و رمز عبور",register:"عملیات ثبت نام"}[i];o=`${o} با خطا روبرو شد`;let s=r;new f().addAlert({type:"error",text:o,subtext:s})}}async onSubmitProfile(e){let{profile:t}=this.props,i;this.setLoading(!0);try{i=await t.onSubmit(e)}catch{this.setLoading(!1);return}this.setLoading(!1),"string"==typeof i&&new f().addAlert({type:"error",text:"ویرایش پروفایل با خطا روبرو شد",subtext:i})}setMode(e){this.setState({mode:e})}render(){let{otpLength:e,id:t,timer:i,modes:r,userId:o,register:s={},profile:n,attrs:l={},forget:a,getStorage:u,logout:d,renderSplash:p=()=>null,renderApp:g,renderLogin:m}=this.props,{isTokenChecked:h,showReload:f,mode:c,loading:y,showSplash:$}=this.state;if(n){let _={timer:i,id:t,attrs:l,userId:o,loading:y,profile:n,onSubmitProfile:this.onSubmitProfile.bind(this)};return b(LoginForm,{..._})}if(f)return b("div",{className:"aio-login-reload",children:b("button",{onClick:()=>window.location.reload(),children:"بارگذاری مجدد"})});if(!h||$)return p();if("auth"===c){let{token:N,userId:v,userInfo:I}=u();return g({token:N,userId:v,userInfo:I,logout:d})}let T=b(LoginForm,{forget:a,timer:i,otpLength:e,id:t,modes:r,attrs:l,userId:o,register:s,loading:y,mode:c,onSubmit:this.onSubmit.bind(this),onChangeMode:this.setMode.bind(this)});return m?m(T):T}}class LoginForm extends t{constructor(e){super(e),this.storage=o(`-AIOLogin-${e.id}`);let{timer:t=30}=e;this.state={timer:t,recode:!1,tab:"login",model:this.getInitialModel(e.mode),error:!e.userId}}getLabels(e){let{model:t,tab:i}=this.state,{register:r,profile:o,forget:s}=this.props;if(o){let{title:n,onClose:l,submitText:a="ویرایش اطلاعات کاربری",subtitle:u=!1}=o;return n||l?{inputLabel:!1,title:n||"ویرایش اطلاعات کاربری",submitText:a,subtitle:u,backButton:!!l}:{inputLabel:!1,title:!1,subtitle:!1,submitText:a,backButton:!1}}if("OTPNumber"===e)return{inputLabel:"شماره همراه",title:"ورود با کد یکبار مصرف",submitText:"ورود",subtitle:"شماره همراه خود را وارد کنید . پیامکی حاوی کد برای شما ارسال خواهد شد"};if("OTPCode"===e)return{inputLabel:"کد پیامک شده",title:!1,submitText:"ورود",subtitle:`کد پیامک شده به شماره ی ${t.login.userId} را وارد کنید`};if("register"===e){let{title:d,submitText:p="ثبت نام",subtitle:g=!1}=r;return{inputLabel:!1,title:d,submitText:p,subtitle:g,backButton:"register"!==i}}if("forgetUserId"===e){let m=`${"phoneNumber"===s.mode?"شماره همراه":"ایمیل"} خود را وارد کنید . کد باز یابی رمز عبور برای شما ارسال خواهد شد`;return{inputLabel:"email"===s.mode?"ایمیل":"شماره همراه",backButton:!0,title:"بازیابی رمز عبور",submitText:"دریافت کد بازیابی رمز",subtitle:m}}if("forgetPassword"===e){let{mode:h}=s,f=`کد ${"phoneNumber"===h?"پیامک":"ایمیل"} شده به ${"phoneNumber"===h?"شماره ی":"آدرس"} ${t.forget.userId} را وارد کنید`;return{inputLabel:`کد ${"email"===h?"ایمیل":"پیامک"} شده`,backButton:!0,title:"بازیابی رمز عبور",submitText:"تایید",subtitle:f}}return"userName"===e?{inputLabel:"نام کاربری",title:"ورود با نام کاربری",submitText:"ورود",subtitle:!1}:"email"===e?{inputLabel:"ایمیل",title:"ورود با ایمیل",submitText:"ورود",subtitle:!1}:"phoneNumber"===e?{inputLabel:"شماره همراه",title:"ورود با شماره همراه",submitText:"ورود",subtitle:!1}:void 0}changeMode(e){let{onChangeMode:t}=this.props;t(e),this.setState({model:this.getInitialModel(e)})}getInitialModel(e){e||(e=this.props.mode);let{userId:t,profile:i={}}=this.props;return{forget:{},register:{},profile:i.model,login:{userId:t}}}title_layout({title:e,backButton:t}){if(!e)return!1;let{modes:i,profile:r}=this.props;return{className:"aio-login-title",align:"v",row:[{show:!!t,html:b(l,{path:h,size:1}),size:48,align:"vh",onClick:()=>r?r.onClose():this.changeMode(i[0])},{html:e}]}}subtitle_layout({subtitle:e}){return!!e&&{html:e,className:"aio-login-subtitle"}}getInput_phoneNumber(e,t){return{field:e,label:"شماره همراه",input:{type:"text",justNumber:!0,before:b(l,{path:a,size:.8}),placeholder:"09...",maxLength:11,attrs:{style:{direction:"ltr"}}},validations:[["function",()=>{let e=t();return e?0!==e.indexOf("09")?"شماره همراه باید با 09 شروع شود":11!==e.length&&"شماره همراه باید 11 رقم باشد":"شماره همراه خود را وارد کنید"}]]}}getInput_userName(e){let{userId:t}=this.props;return{field:e,label:"نام کاربری",validations:[["required"]],style:{direction:"ltr"},input:{type:"text",disabled:!!t,before:b(l,{path:p,size:.8})}}}getInput_email(e,t){let{userId:i}=this.props;return{field:e,label:"ایمیل",style:{direction:"ltr"},input:{type:"text",disabled:!!i,before:b(l,{path:m,size:.8})},validations:[["function",()=>{let e=t();return e?!!(1>e.indexOf("@")||-1===e.indexOf(".")||e.lastIndexOf(".")>e.length-3)&&"ایمیل خود را به درستی وارد کنید":"ایمیل خود را وارد کنید"}]]}}getInput_otp(e,t){let{otpLength:i}=this.props;return{field:e,label:"رمز یکبار مصرف",input:{maxLength:i,justNumber:!0,type:"text",placeholder:Array(i).fill("-").join(""),className:"aio-login-otp-code"},validations:[["function",()=>{let{otpLength:e}=this.props,i=t();return i?i.length!==e&&`رمز یکبار مصرف باید شامل ${e} کاراکتر باشد`:"رمز یکبار مصرف را وارد کنید"}]]}}getInput_password(e,t){let i;return i=2===t?[["function",()=>{let{model:e}=this.state,t=e.forget.reNewPassword;return t?t.length<1?"رمز عبور را وارد کنید":t!==e.forget.newPassword&&"رمز با تکرار آن مطابقت ندارد":"تکرار رمز عبور جدید را وارد کنید"}]]:[["required"]],{field:e,label:["رمز عبور","رمز عبور جدید","تکرار رمز عبور جدید"][t],validations:i,input:{type:"password",before:b(l,{path:u,size:.8}),style:{direction:"ltr"},visible:!0}}}getInputs(){let{forget:e,mode:t,profile:i,register:r}=this.props;return i?n(i.fields,"profile"):"register"===t?n(r.fields,"register"):"forgetUserId"===t?[this["getInput_"+e.mode]("value.forget.userId",()=>this.state.model.forget.userId)]:"forgetPassword"===t?[this.getInput_otp("value.forget.password",()=>this.state.model.forget.password),this.getInput_password("value.forget.newPassword",1),this.getInput_password("value.forget.reNewPassword",2)]:"OTPNumber"===t?[this.getInput_phoneNumber("value.login.userId",()=>this.state.model.login.userId)]:"OTPCode"===t?[this.getInput_otp("value.login.password",()=>this.state.model.login.password)]:[this["getInput_"+t]("value.login.userId",()=>this.state.model.login.userId),this.getInput_password("value.login.password",0)]}form_layout(e){let{model:t}=this.state,{mode:i,userId:r}=this.props;return{className:"ofy-auto",html:b(s,{type:"form",lang:"fa",value:t,rtl:!0,initialDisabled:!r,onChange:(e,t)=>{this.setState({model:e,error:!!t.length})},inputs:{props:{gap:12},column:this.getInputs(e)},footer:({disabled:t})=>this.submit_layout({submitText:e.submitText,disabled:t})},i)}}submit_layout({submitText:e,disabled:t}){let{loading:i,timer:o,mode:s}=this.props,n={style:{padding:"0 12px"},html:b(SubmitButton,{mode:s,timer:o,text:e,loading:i,disabled:()=>!!t,onClick:()=>this.onSubmit()})};return b(r,{layout:n})}async onSubmit(){let{onSubmit:e,profile:t,onSubmitProfile:i}=this.props,{model:r,error:o}=this.state;!o&&(t?i(r):e(r))}changeUserId_layout(){let{mode:e}=this.props;return"OTPCode"===e&&{onClick:()=>this.changeMode("OTPNumber"),className:"aio-login-text m-b-12",align:"vh",html:"تغییر شماره همراه"}}recode_layout(){let{model:e}=this.state,{mode:t,onChangeMode:i}=this.props;return"OTPCode"===t&&{className:"aio-login-text m-b-12",html:`ارسال مجدد کد`,align:"vh",onClick:()=>{i("OTPNumber"),this.setState({model:{...e,login:{...e.login,password:""}}})}}}changeMode_layout(){let{mode:e,modes:t,profile:i}=this.props;if("register"===e||i||"forgetUserId"===e||"forgetPassword"===e)return!1;let r=[];for(let o=0;o<t.length;o++){let s=t[o];if(e===s||"OTPCode"===e&&"OTPNumber"===s)continue;let n={OTPNumber:"رمز یکبار مصرف",userName:"نام کاربری و رمز عبور",email:"آدرس ایمیل و رمز عبور",phoneNumber:"شماره همراه و رمز عبور"}[s],u={OTPNumber:p,phoneNumber:a,userName:g,email:m}[s];r.push({flex:1,className:`of-visible aio-login-other-method aio-login-${s}`,onClick:()=>this.changeMode(s),row:[{html:b(l,{path:u,size:.7}),align:"vh"},{size:6},{align:"v",html:n}]})}return!!r.length&&{className:"p-h-12",column:[{gap:6,row:[{flex:1,html:b("div",{className:"aio-login-splitter"}),align:"v"},{html:"یا ورود با",align:"v",className:"aio-login-or bold"},{flex:1,html:b("div",{className:"aio-login-splitter"}),align:"v"}]},{size:12},{grid:r,gridCols:1,gridRow:{gap:12}}]}}registerButton_layout(){let{register:e,mode:t}=this.props;return"register"===t||e.type,!1}registerTab_layout(){let{register:e,modes:t,mode:i,profile:r}=this.props;if(!e||"tab"!==e.type||r||"forgetUserId"===i||"forgetPassword"===i)return!1;let{tabText:o="ثبت نام"}=e;return{html:b(s,{className:"aio-login-register-tabs",type:"tabs",value:"register"===i?"register":"login",options:[{text:"ورود",value:"login"},{text:o,value:"register"}],onChange:e=>{"login"===e?this.changeMode(t[0]):"register"===e&&this.changeMode("register")}})}}forget_layout(){let{forget:e,mode:t,profile:i}=this.props;if(i||!e||"register"===t||"OTPCode"===t||"OTPNumber"===t||"forgetUserId"===t||"forgetPassword"===t)return!1;let{text:r=[]}=e;return{className:"aio-login-forget",html:r[0]||"رمز عبور خود را فراموش کرده اید؟ اینجا کلیک کنید",onClick:()=>this.changeMode("forgetUserId")}}render(){let{attrs:e,mode:t,profile:i}=this.props,o=this.getLabels(t),s;s=i?[{column:[this.title_layout(o),this.subtitle_layout(o)]},this.form_layout(o)]:[this.registerTab_layout(),{column:[this.title_layout(o),this.subtitle_layout(o)]},this.form_layout(o),this.forget_layout(),{gap:12,align:"h",row:[this.recode_layout(),this.changeUserId_layout()]},this.changeMode_layout(),this.registerButton_layout()];let n="aio-login"+(e.className?" "+e.className:""),l=e.style;return b(r,{layout:{className:n,style:l,column:s,attrs:{onKeyDown:e=>{13===e.keyCode&&this.onSubmit()}}}})}}class SubmitButton extends t{constructor(...e){super(...e),_defineProperty(this,"state",{time:this.getDelta()})}async onClick(){let{onClick:e,loading:t}=this.props;!t&&(this.setLastTry(),await e())}setLastTry(){let{mode:e}=this.props;o("aiologinlasttrypermode").save({name:"dic",value:{...this.getLastTry(),[e]:new Date().getTime()}});let t=this.getDelta();this.setState({time:t})}getLastTry(){return o("aiologinlasttrypermode").load({name:"dic",def:{}})}getDelta(){let{mode:e,timer:t}=this.props;if(!t)return 0;let i=this.getLastTry()[e];if(!i)return 0;let r=new Date().getTime()-i;return r/=1e3,(r=Math.round(r=t-r))<0&&(r=0),r}render(){let{disabled:e,loading:t,text:i,outline:r}=this.props,o=e(),{time:s}=this.state;return s>0?setTimeout(()=>this.setState({time:this.state.time-1}),1e3):s<0&&setTimeout(()=>this.setState({time:0}),0),s&&(o=!0,t||(i=`لطفا ${s} ثانیه صبر کنید`)),c("button",{className:"aio-login-submit"+(r?" aio-login-submit-outline":""),disabled:o,onClick:()=>this.onClick(),children:[!t&&i,!!t&&b(l,{path:d,size:1,spin:.2,style:{margin:"0 6px"}}),!!t&&"در حال ارسال"]})}}function AIOLoginValidator(e){let{id:t,onSubmit:i,modes:r,timer:o,checkToken:s,register:n,userId:l="",renderApp:a,forget:u,otpLength:d}=e;for(let p in e)if(-1===["id","renderApp","renderLogin","onSubmit","modes","timer","checkToken","register","userId","attrs","forget","otpLength","renderSplash","splashTime"].indexOf(p)){let g=`
13
+ )`;return alert(o),console.log(o),null}return b(AIOLOGIN,{...this.props,getActions:({setMode:e})=>this.setMode=e,profile:i,attrs:t,appState:r})});let{id:t,onSubmit:i,modes:r,timer:s,checkToken:n,register:l,userId:a,attrs:u,forget:d,otpLength:p,renderApp:g,renderSplash:m,splashTime:h,renderLogin:f}=e;AIOLoginValidator(e);let c=o(`-AIOLogin-${t}`);this.setStorage=(e,t)=>{if("object"==typeof e)for(let i in e)c.save({name:i,value:e[i]});else c.save({name:e,value:t})},this.getStorage=e=>{let t=c.load({name:"token",def:!1}),i=c.load({name:"userId",def:""}),r=c.load({name:"userInfo"}),o={token:t,userId:i,userInfo:r};return e?o[e]:o},this.removeStorage=e=>c.remove({name:e}),this.logout=()=>{this.removeStorage("token"),window.location.reload()},this.props={id:t,checkToken:n,onSubmit:i,modes:r,register:l,userId:a,attrs:u,timer:s,forget:d,otpLength:p,renderApp:g,renderSplash:m,splashTime:h,renderLogin:f,getStorage:this.getStorage.bind(this),setStorage:this.setStorage.bind(this),removeStorage:this.removeStorage.bind(this),logout:this.logout}}};class AIOLOGIN extends t{constructor(e){super(e);let{splashTime:t=0}=e;this.state={isTokenChecked:!1,showReload:!1,mode:e.mode||e.modes[0],loading:!1,showSplash:!0},e.getActions({setMode:this.setMode.bind(this)}),setTimeout(()=>this.setState({showSplash:!1}),t)}async checkToken(){let{getStorage:e,checkToken:t,removeStorage:i}=this.props,{token:r,userId:o,userInfo:s}=e(),n;try{n=await t(r,{userId:o,userInfo:s})}catch(l){new f().addAlert({type:"error",text:"بررسی توکن با خطا روبرو شد",subtext:this.getError(l)})}!0===n?this.setMode("auth"):!1===n?i("token"):("string"==typeof n&&new f().addAlert({type:"error",text:"بررسی توکن با خطا روبرو شد",subtext:n}),this.setState({showReload:!0})),this.setState({isTokenChecked:!0})}getError(e){if("string"==typeof e)return e;if("object"==typeof e){if("object"!=typeof e.response)return e.message||e.Message;if("object"==typeof e.response.data){let{message:t,Message:i}=e.response.data;return i||t}return"string"==typeof e.response.data?e.response.data:"error"}}async componentDidMount(){let{profile:e}=this.props;!e&&this.checkToken()}setLoading(e){this.setState({loading:e})}async onSubmit(e){let{onSubmit:t}=this.props,{mode:i}=this.state,r;this.setLoading(!0);try{r=await t(e,i)}catch{this.setLoading(!1);return}if(this.setLoading(!1),"string"==typeof r){let o={OTPNumber:"ارسال شماره همراه",OTPCode:"ارسال کد یکبار مصرف",userName:"ارسال نام کاربری و رمز عبور",phoneNumber:"ارسال شماره همراه و رمز عبور",email:"ارسال آدرس ایمیل و رمز عبور",register:"عملیات ثبت نام"}[i];o=`${o} با خطا روبرو شد`;let s=r;new f().addAlert({type:"error",text:o,subtext:s})}}async onSubmitProfile(e){let{profile:t}=this.props,i;this.setLoading(!0);try{i=await t.onSubmit(e)}catch{this.setLoading(!1);return}this.setLoading(!1),"string"==typeof i&&new f().addAlert({type:"error",text:"ویرایش پروفایل با خطا روبرو شد",subtext:i})}setMode(e){this.setState({mode:e})}render(){let{otpLength:e,id:t,timer:i,modes:r,userId:o,register:s={},profile:n,attrs:l={},forget:a,getStorage:u,logout:d,renderSplash:p=()=>null,renderApp:g,renderLogin:m,appState:h}=this.props,{isTokenChecked:f,showReload:c,mode:y,loading:$,showSplash:_}=this.state;if(n){let N={timer:i,id:t,attrs:l,userId:o,loading:$,profile:n,onSubmitProfile:this.onSubmitProfile.bind(this)};return b(LoginForm,{...N})}if(c)return b("div",{className:"aio-login-reload",children:b("button",{onClick:()=>window.location.reload(),children:"بارگذاری مجدد"})});if(!f||_)return p();if("auth"===y){let{token:v,userId:I,userInfo:T}=u();return g({token:v,userId:I,userInfo:T,logout:d,appState:h})}let x=b(LoginForm,{forget:a,timer:i,otpLength:e,id:t,modes:r,attrs:l,userId:o,register:s,loading:$,mode:y,onSubmit:this.onSubmit.bind(this),onChangeMode:this.setMode.bind(this)});return m?m(x):x}}class LoginForm extends t{constructor(e){super(e),this.storage=o(`-AIOLogin-${e.id}`);let{timer:t=30}=e;this.state={timer:t,recode:!1,tab:"login",model:this.getInitialModel(e.mode),error:!e.userId}}getLabels(e){let{model:t,tab:i}=this.state,{register:r,profile:o,forget:s}=this.props;if(o){let{title:n,onClose:l,submitText:a="ویرایش اطلاعات کاربری",subtitle:u=!1}=o;return n||l?{inputLabel:!1,title:n||"ویرایش اطلاعات کاربری",submitText:a,subtitle:u,backButton:!!l}:{inputLabel:!1,title:!1,subtitle:!1,submitText:a,backButton:!1}}if("OTPNumber"===e)return{inputLabel:"شماره همراه",title:"ورود با کد یکبار مصرف",submitText:"ورود",subtitle:"شماره همراه خود را وارد کنید . پیامکی حاوی کد برای شما ارسال خواهد شد"};if("OTPCode"===e)return{inputLabel:"کد پیامک شده",title:!1,submitText:"ورود",subtitle:`کد پیامک شده به شماره ی ${t.login.userId} را وارد کنید`};if("register"===e){let{title:d,submitText:p="ثبت نام",subtitle:g=!1}=r;return{inputLabel:!1,title:d,submitText:p,subtitle:g,backButton:"register"!==i}}if("forgetUserId"===e){let m=`${"phoneNumber"===s.mode?"شماره همراه":"ایمیل"} خود را وارد کنید . کد باز یابی رمز عبور برای شما ارسال خواهد شد`;return{inputLabel:"email"===s.mode?"ایمیل":"شماره همراه",backButton:!0,title:"بازیابی رمز عبور",submitText:"دریافت کد بازیابی رمز",subtitle:m}}if("forgetPassword"===e){let{mode:h}=s,f=`کد ${"phoneNumber"===h?"پیامک":"ایمیل"} شده به ${"phoneNumber"===h?"شماره ی":"آدرس"} ${t.forget.userId} را وارد کنید`;return{inputLabel:`کد ${"email"===h?"ایمیل":"پیامک"} شده`,backButton:!0,title:"بازیابی رمز عبور",submitText:"تایید",subtitle:f}}return"userName"===e?{inputLabel:"نام کاربری",title:"ورود با نام کاربری",submitText:"ورود",subtitle:!1}:"email"===e?{inputLabel:"ایمیل",title:"ورود با ایمیل",submitText:"ورود",subtitle:!1}:"phoneNumber"===e?{inputLabel:"شماره همراه",title:"ورود با شماره همراه",submitText:"ورود",subtitle:!1}:void 0}changeMode(e){let{onChangeMode:t}=this.props;t(e),this.setState({model:this.getInitialModel(e)})}getInitialModel(e){e||(e=this.props.mode);let{userId:t,profile:i={}}=this.props;return{forget:{},register:{},profile:i.model,login:{userId:t}}}title_layout({title:e,backButton:t}){if(!e)return!1;let{modes:i,profile:r}=this.props;return{className:"aio-login-title",align:"v",row:[{show:!!t,html:b(l,{path:h,size:1}),size:48,align:"vh",onClick:()=>r?r.onClose():this.changeMode(i[0])},{html:e}]}}subtitle_layout({subtitle:e}){return!!e&&{html:e,className:"aio-login-subtitle"}}getInput_phoneNumber(e,t){return{field:e,label:"شماره همراه",input:{type:"text",justNumber:!0,before:b(l,{path:a,size:.8}),placeholder:"09...",maxLength:11,attrs:{style:{direction:"ltr"}}},validations:[["function",()=>{let e=t();return e?0!==e.indexOf("09")?"شماره همراه باید با 09 شروع شود":11!==e.length&&"شماره همراه باید 11 رقم باشد":"شماره همراه خود را وارد کنید"}]]}}getInput_userName(e){let{userId:t}=this.props;return{field:e,label:"نام کاربری",validations:[["required"]],style:{direction:"ltr"},input:{type:"text",disabled:!!t,before:b(l,{path:p,size:.8})}}}getInput_email(e,t){let{userId:i}=this.props;return{field:e,label:"ایمیل",style:{direction:"ltr"},input:{type:"text",disabled:!!i,before:b(l,{path:m,size:.8})},validations:[["function",()=>{let e=t();return e?!!(1>e.indexOf("@")||-1===e.indexOf(".")||e.lastIndexOf(".")>e.length-3)&&"ایمیل خود را به درستی وارد کنید":"ایمیل خود را وارد کنید"}]]}}getInput_otp(e,t){let{otpLength:i}=this.props;return{field:e,label:"رمز یکبار مصرف",input:{maxLength:i,justNumber:!0,type:"text",placeholder:Array(i).fill("-").join(""),className:"aio-login-otp-code"},validations:[["function",()=>{let{otpLength:e}=this.props,i=t();return i?i.length!==e&&`رمز یکبار مصرف باید شامل ${e} کاراکتر باشد`:"رمز یکبار مصرف را وارد کنید"}]]}}getInput_password(e,t){let i;return i=2===t?[["function",()=>{let{model:e}=this.state,t=e.forget.reNewPassword;return t?t.length<1?"رمز عبور را وارد کنید":t!==e.forget.newPassword&&"رمز با تکرار آن مطابقت ندارد":"تکرار رمز عبور جدید را وارد کنید"}]]:[["required"]],{field:e,label:["رمز عبور","رمز عبور جدید","تکرار رمز عبور جدید"][t],validations:i,input:{type:"password",before:b(l,{path:u,size:.8}),style:{direction:"ltr"},visible:!0}}}getInputs(){let{forget:e,mode:t,profile:i,register:r}=this.props;return i?n(i.fields,"profile"):"register"===t?n(r.fields,"register"):"forgetUserId"===t?[this["getInput_"+e.mode]("value.forget.userId",()=>this.state.model.forget.userId)]:"forgetPassword"===t?[this.getInput_otp("value.forget.password",()=>this.state.model.forget.password),this.getInput_password("value.forget.newPassword",1),this.getInput_password("value.forget.reNewPassword",2)]:"OTPNumber"===t?[this.getInput_phoneNumber("value.login.userId",()=>this.state.model.login.userId)]:"OTPCode"===t?[this.getInput_otp("value.login.password",()=>this.state.model.login.password)]:[this["getInput_"+t]("value.login.userId",()=>this.state.model.login.userId),this.getInput_password("value.login.password",0)]}form_layout(e){let{model:t}=this.state,{mode:i,userId:r}=this.props;return{className:"ofy-auto",html:b(s,{type:"form",lang:"fa",value:t,rtl:!0,initialDisabled:!r,onChange:(e,t)=>{this.setState({model:e,error:!!t.length})},inputs:{props:{gap:12},column:this.getInputs(e)},footer:({disabled:t})=>this.submit_layout({submitText:e.submitText,disabled:t})},i)}}submit_layout({submitText:e,disabled:t}){let{loading:i,timer:o,mode:s}=this.props,n={style:{padding:"0 12px"},html:b(SubmitButton,{mode:s,timer:o,text:e,loading:i,disabled:()=>!!t,onClick:()=>this.onSubmit()})};return b(r,{layout:n})}async onSubmit(){let{onSubmit:e,profile:t,onSubmitProfile:i}=this.props,{model:r,error:o}=this.state;!o&&(t?i(r):e(r))}changeUserId_layout(){let{mode:e}=this.props;return"OTPCode"===e&&{onClick:()=>this.changeMode("OTPNumber"),className:"aio-login-text m-b-12",align:"vh",html:"تغییر شماره همراه"}}recode_layout(){let{model:e}=this.state,{mode:t,onChangeMode:i}=this.props;return"OTPCode"===t&&{className:"aio-login-text m-b-12",html:`ارسال مجدد کد`,align:"vh",onClick:()=>{i("OTPNumber"),this.setState({model:{...e,login:{...e.login,password:""}}})}}}changeMode_layout(){let{mode:e,modes:t,profile:i}=this.props;if("register"===e||i||"forgetUserId"===e||"forgetPassword"===e)return!1;let r=[];for(let o=0;o<t.length;o++){let s=t[o];if(e===s||"OTPCode"===e&&"OTPNumber"===s)continue;let n={OTPNumber:"رمز یکبار مصرف",userName:"نام کاربری و رمز عبور",email:"آدرس ایمیل و رمز عبور",phoneNumber:"شماره همراه و رمز عبور"}[s],u={OTPNumber:p,phoneNumber:a,userName:g,email:m}[s];r.push({flex:1,className:`of-visible aio-login-other-method aio-login-${s}`,onClick:()=>this.changeMode(s),row:[{html:b(l,{path:u,size:.7}),align:"vh"},{size:6},{align:"v",html:n}]})}return!!r.length&&{className:"p-h-12",column:[{gap:6,row:[{flex:1,html:b("div",{className:"aio-login-splitter"}),align:"v"},{html:"یا ورود با",align:"v",className:"aio-login-or bold"},{flex:1,html:b("div",{className:"aio-login-splitter"}),align:"v"}]},{size:12},{grid:r,gridCols:1,gridRow:{gap:12}}]}}registerButton_layout(){let{register:e,mode:t}=this.props;return"register"===t||e.type,!1}registerTab_layout(){let{register:e,modes:t,mode:i,profile:r}=this.props;if(!e||"tab"!==e.type||r||"forgetUserId"===i||"forgetPassword"===i)return!1;let{tabText:o="ثبت نام"}=e;return{html:b(s,{className:"aio-login-register-tabs",type:"tabs",value:"register"===i?"register":"login",options:[{text:"ورود",value:"login"},{text:o,value:"register"}],onChange:e=>{"login"===e?this.changeMode(t[0]):"register"===e&&this.changeMode("register")}})}}forget_layout(){let{forget:e,mode:t,profile:i}=this.props;if(i||!e||"register"===t||"OTPCode"===t||"OTPNumber"===t||"forgetUserId"===t||"forgetPassword"===t)return!1;let{text:r=[]}=e;return{className:"aio-login-forget",html:r[0]||"رمز عبور خود را فراموش کرده اید؟ اینجا کلیک کنید",onClick:()=>this.changeMode("forgetUserId")}}render(){let{attrs:e,mode:t,profile:i}=this.props,o=this.getLabels(t),s;s=i?[{column:[this.title_layout(o),this.subtitle_layout(o)]},this.form_layout(o)]:[this.registerTab_layout(),{column:[this.title_layout(o),this.subtitle_layout(o)]},this.form_layout(o),this.forget_layout(),{gap:12,align:"h",row:[this.recode_layout(),this.changeUserId_layout()]},this.changeMode_layout(),this.registerButton_layout()];let n="aio-login"+(e.className?" "+e.className:""),l=e.style;return b(r,{layout:{className:n,style:l,column:s,attrs:{onKeyDown:e=>{13===e.keyCode&&this.onSubmit()}}}})}}class SubmitButton extends t{constructor(...e){super(...e),_defineProperty(this,"state",{time:this.getDelta()})}async onClick(){let{onClick:e,loading:t}=this.props;!t&&(this.setLastTry(),await e())}setLastTry(){let{mode:e}=this.props;o("aiologinlasttrypermode").save({name:"dic",value:{...this.getLastTry(),[e]:new Date().getTime()}});let t=this.getDelta();this.setState({time:t})}getLastTry(){return o("aiologinlasttrypermode").load({name:"dic",def:{}})}getDelta(){let{mode:e,timer:t}=this.props;if(!t)return 0;let i=this.getLastTry()[e];if(!i)return 0;let r=new Date().getTime()-i;return r/=1e3,(r=Math.round(r=t-r))<0&&(r=0),r}render(){let{disabled:e,loading:t,text:i,outline:r}=this.props,o=e(),{time:s}=this.state;return s>0?setTimeout(()=>this.setState({time:this.state.time-1}),1e3):s<0&&setTimeout(()=>this.setState({time:0}),0),s&&(o=!0,t||(i=`لطفا ${s} ثانیه صبر کنید`)),c("button",{className:"aio-login-submit"+(r?" aio-login-submit-outline":""),disabled:o,onClick:()=>this.onClick(),children:[!t&&i,!!t&&b(l,{path:d,size:1,spin:.2,style:{margin:"0 6px"}}),!!t&&"در حال ارسال"]})}}function AIOLoginValidator(e){let{id:t,onSubmit:i,modes:r,timer:o,checkToken:s,register:n,userId:l="",renderApp:a,forget:u,otpLength:d,renderLogin:p}=e;for(let g in e)if(-1===["id","renderApp","renderLogin","onSubmit","modes","timer","checkToken","register","userId","attrs","forget","otpLength","renderSplash","splashTime"].indexOf(g)){let m=`
14
14
  aio-login error => invalid props
15
- ${p} is not one of AIOLogin props,
15
+ ${g} is not one of AIOLogin props,
16
16
  valid props are 'id' | 'renderApp' | 'renderLogin','onSubmit' | 'modes' | 'timer' | 'checkToken' | 'register' | 'userId' | 'attrs' | 'forget' | 'otpLength' | 'renderSplash' | 'splashTime'
17
- `;alert(g),console.log(g);return}if(t||alert("aio-login error=> missing id props, id props should be an string"),!a){let m=`
17
+ `;alert(m),console.log(m);return}if(t||alert("aio-login error=> missing id props, id props should be an string"),!a){let h=`
18
18
  aio-login error => missing renderApp props
19
19
  renderApp type is => ({token:string,userId:string,userInfo?:any,logout:function})=>React.ReactNode
20
- `;alert(m),console.log(m);return}if("string"!=typeof l){let h="aio-login error=> userId props should be an string";alert(h),console.log(h);return}if(!s){let f=`
20
+ `;alert(h),console.log(h);return}if("string"!=typeof l){let f="aio-login error=> userId props should be an string";alert(f),console.log(f);return}if(!s){let b=`
21
21
  aio-login error=> missing checkToken props
22
22
  checkToken type is => (token:string)=>boolean
23
23
  for prevent it set checkToken : ()=>true
24
- `;alert(f),console.log(f);return}if(!i){let b=`
24
+ `;alert(b),console.log(b);return}if(!i){let c=`
25
25
  aio-login error=> missing onSubmit props,
26
26
  onSubmit type is =>
27
27
  (model:<model type>,mode:<mode type>)=>string|undefined
@@ -31,13 +31,13 @@ function _defineProperty(e,t,i){return(t=_toPropertyKey(t))in e?Object.definePro
31
31
  register:{[field:string]:any},
32
32
  }
33
33
  <mode type> is 'OTPNumber' | 'OTPCode' | 'userName' | 'email' | 'phoneNumber' | 'forgetUserId' | 'forgetPassword' | 'register' | 'auth'
34
- `;alert(b),console.log(b);return}if(renderLogin&&"function"!=typeof renderLogin){let c=`
34
+ `;alert(c),console.log(c);return}if(p&&"function"!=typeof p){let y=`
35
35
  aio-login error=> renderLogin props is not a function,
36
36
  renderLogin type is =>
37
37
  ( loginForm : React.ReactNode ) => React.ReactNode
38
- `;alert(c),console.log(c);return}if("number"!=typeof o){let y="aio-login error=> timer props should be an number";alert(y),console.log(y);return}if(!Array.isArray(r)||!r.filter(e=>-1!==["OTPNumber","userName","email","phoneNumber"].indexOf(e)).length){let $=`
38
+ `;alert(y),console.log(y);return}if("number"!=typeof o){let $="aio-login error=> timer props should be an number";alert($),console.log($);return}if(!Array.isArray(r)||!r.filter(e=>-1!==["OTPNumber","userName","email","phoneNumber"].indexOf(e)).length){let _=`
39
39
  aio-login error=> modes props should be an array contain composite of 'OTPNumber' | 'userName' | 'email' | 'phoneNumber'
40
- `;alert($),console.log($);return}if(-1!==r.indexOf("OTPNumber")&&!d){let _="aio-login error => otpLength props is not an number (for define length of otp code)";alert(_),console.log(_);return}if(n&&("object"!=typeof n||-1===["mode","tab","button"].indexOf(n.type)||!Array.isArray(n.fields)||!n.fields.length)){let N=`
40
+ `;alert(_),console.log(_);return}if(-1!==r.indexOf("OTPNumber")&&!d){let N="aio-login error => otpLength props is not an number (for define length of otp code)";alert(N),console.log(N);return}if(n&&("object"!=typeof n||-1===["mode","tab","button"].indexOf(n.type)||!Array.isArray(n.fields)||!n.fields.length)){let v=`
41
41
  aio-login-error => register props should be an object contain :
42
42
  type : "mode" | "tab" | "button"
43
43
  tabText : string | undefined
@@ -51,4 +51,4 @@ function _defineProperty(e,t,i){return(t=_toPropertyKey(t))in e?Object.definePro
51
51
  "fullname" | "firstname" | "lastname" | "username" | "address" | "email" | "fathername" | "phone" | "mobile" | "postalcode",
52
52
  "nationalcode" | "idcode" | "cardbank" | "state" | "city" | "gender" | "married" | "militaryservice" | "location"
53
53
  )
54
- `;alert(N),console.log(N);return}if(u){let v="aio-login error=> forget props should be an object contain mode:'phoneNumber | email'";if("object"!=typeof u&&alert(v),-1===["phoneNumber","email"].indexOf(u.mode)){alert(v),console.log(v);return}}}
54
+ `;alert(v),console.log(v);return}if(u){let I="aio-login error=> forget props should be an object contain mode:'phoneNumber | email'";if("object"!=typeof u&&alert(I),-1===["phoneNumber","email"].indexOf(u.mode)){alert(I),console.log(I);return}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aio-login",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {