@ducks-tinder-client/auth 1.0.0-alpha.1
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/LICENSE +21 -0
- package/dist/cjs/index.css +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/entities/user/api/auth/index.d.ts +5 -0
- package/dist/entities/user/api/auth/keys.d.ts +3 -0
- package/dist/entities/user/api/auth/useLoginMutation.d.ts +2 -0
- package/dist/entities/user/api/auth/useLogoutMutation.d.ts +1 -0
- package/dist/entities/user/api/auth/useRefreshMutation.d.ts +1 -0
- package/dist/entities/user/api/auth/useRegisterMutation.d.ts +2 -0
- package/dist/entities/user/api/index.d.ts +2 -0
- package/dist/entities/user/api/user/index.d.ts +2 -0
- package/dist/entities/user/api/user/keys.d.ts +3 -0
- package/dist/entities/user/api/user/useGetCurrentUserQuery.d.ts +1 -0
- package/dist/entities/user/index.d.ts +4 -0
- package/dist/entities/user/lib/hocs/WithAuthRedirect.d.ts +2 -0
- package/dist/entities/user/lib/hocs/WithInitialLoading.d.ts +2 -0
- package/dist/entities/user/lib/hocs/WithUserData.d.ts +2 -0
- package/dist/entities/user/lib/hocs/index.d.ts +3 -0
- package/dist/entities/user/lib/hooks/index.d.ts +1 -0
- package/dist/entities/user/lib/hooks/useAuthForm.d.ts +19 -0
- package/dist/entities/user/lib/index.d.ts +2 -0
- package/dist/entities/user/model/auth/auth.interface.d.ts +6 -0
- package/dist/entities/user/model/auth/auth.store.d.ts +24 -0
- package/dist/entities/user/model/auth/index.d.ts +2 -0
- package/dist/entities/user/model/index.d.ts +2 -0
- package/dist/entities/user/model/user/index.d.ts +1 -0
- package/dist/entities/user/model/user/user.store.d.ts +22 -0
- package/dist/entities/user/ui/AuthLayout/AuthLayout.d.ts +10 -0
- package/dist/entities/user/ui/InitialLoading/InitialLoading.d.ts +1 -0
- package/dist/entities/user/ui/index.d.ts +2 -0
- package/dist/esm/index.css +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/features/LoginForm/index.d.ts +1 -0
- package/dist/features/LoginForm/ui/LoginForm.d.ts +2 -0
- package/dist/features/RegistrationForm/index.d.ts +1 -0
- package/dist/features/RegistrationForm/ui/RegistrationForm.d.ts +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/shared/api/index.d.ts +2 -0
- package/dist/shared/api/interceptors.d.ts +2 -0
- package/dist/shared/api/services/auth/auth.interfaces.d.ts +21 -0
- package/dist/shared/api/services/auth/auth.mock-service.d.ts +2 -0
- package/dist/shared/api/services/auth/auth.service.d.ts +2 -0
- package/dist/shared/api/services/index.d.ts +8 -0
- package/dist/shared/api/services/mock/index.d.ts +2 -0
- package/dist/shared/api/services/mock/mock.d.ts +8 -0
- package/dist/shared/api/services/mock/stub/auth.stub.d.ts +2 -0
- package/dist/shared/api/services/mock/stub/index.d.ts +1 -0
- package/package.json +101 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Stepasha419a
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._auth_4slza_1{width:100%;margin:0 auto;height:100%}._auth_4slza_1 ._container_4slza_6{width:100%;height:100%;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;padding:15px;background:var(--color--purple-100);background:linear-gradient(-135deg,var(--color--purple-90),var(--color--yellow-60))}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:960px;background:var(--bg-sub-primary);border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:space-between;padding:50px 130px 40px 95px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{width:316px;height:316px;max-width:100%}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:100px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:700;font-size:24px;color:var(--main-primary);line-height:1.2;text-align:center;width:100%;display:block;padding-bottom:54px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45{font-weight:600;font-size:15px;color:var(--danger-main)}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{max-width:290px;text-align:center;margin-bottom:10px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{text-align:center;padding-top:136px;font-size:12px}@media(max-height:750px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:700px;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:800px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{align-items:center;justify-content:center;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{display:none}}@media(max-width:700px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:350px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:400px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:500;font-size:18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{font-size:13px}}._link_1o9kz_1{font-size:14px;line-height:1.5;color:var(--main-secondary);position:relative;padding:10px}._link_1o9kz_1 ._icon_1o9kz_8{position:absolute;top:13px;right:-10px}._form_1o9kz_14{width:290px}._form_1o9kz_14 ._inputWrapper_1o9kz_17{position:relative;margin-bottom:10px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:50px;z-index:1;color:var(--main-secondary);background:var(--bg-primary);padding:0 30px 0 68px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{font-size:16px;display:flex;align-items:center;position:absolute;border-radius:25px;bottom:18px;left:35px;pointer-events:none;color:var(--main-secondary)}._form_1o9kz_14 ._btn_1o9kz_40{font-weight:700;font-size:15px;color:var(--color--white-100);text-transform:uppercase;height:50px;background:var(--color--green-90);padding:0 25px;margin-top:10px;transition:all .4s}._form_1o9kz_14 ._btn_1o9kz_40._disabled_1o9kz_51{background:var(--bg-secondary)!important;cursor:not-allowed}@media(max-width:400px){._form_1o9kz_14{max-width:290px;width:100%}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:40px;font-size:13px;padding:0 16px 0 40px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{bottom:12px;left:16px}._form_1o9kz_14 ._btn_1o9kz_40{height:40px;font-weight:500;font-size:13px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var Dt=Object.create;var P=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Kt=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},nt=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Gt(e))!qt.call(t,a)&&a!==r&&P(t,a,{get:()=>e[a],enumerable:!(o=Xt(e,a))||o.enumerable});return t};var Vt=(t,e,r)=>(r=t!=null?Dt(Bt(t)):{},nt(e||!t||!t.__esModule?P(r,"default",{value:t,enumerable:!0}):r,t)),jt=t=>nt(P({},"__esModule",{value:!0}),t);var Yt={};Kt(Yt,{AuthLayout:()=>T,AuthQueryKey:()=>v,InitialLoading:()=>W,LoginForm:()=>Nt,RegistrationForm:()=>Wt,UserQueryKey:()=>Y,WithAuthRedirect:()=>F,WithInitialLoading:()=>O,WithUserData:()=>ot,authResponseStub:()=>E,deleteTestUser:()=>K,getAuthService:()=>x,getMockableService:()=>q,getOrCreateService:()=>xt,getTestUser:()=>V,rejectWithAxiosResponseError:()=>B,resolveAxiosResponse:()=>S,saveTestUser:()=>M,setUpInterceptors:()=>$t,useAuthForm:()=>y,useAuthStore:()=>s,useGetCurrentUserQuery:()=>Z,useLoginMutation:()=>Q,useLogoutMutation:()=>Jt,useRefreshMutation:()=>J,useRegisterMutation:()=>$,useUserStore:()=>g});module.exports=jt(Yt);var _=require("@ducks-tinder-client/common");var It=require("react-hook-form"),p=require("@ducks-tinder-client/common");var v=(e=>(e.AuthMutation="auth-data-mutation",e))(v||{});var h={auth:"_auth_4slza_1",container:"_container_4slza_6",wrapper:"_wrapper_4slza_17",formWrapper:"_formWrapper_4slza_32",title:"_title_4slza_35",validation:"_validation_4slza_45",error:"_error_4slza_50",navigate:"_navigate_4slza_55"};var pt=require("@ducks-tinder-client/ui"),d=require("react/jsx-runtime"),T=({errors:t,title:e,children:r,link:o})=>(0,d.jsx)("div",{className:h.auth,children:(0,d.jsx)("div",{className:h.container,children:(0,d.jsxs)("div",{className:h.wrapper,children:[(0,d.jsx)("img",{draggable:!1,src:pt.authDuck,alt:"IMG"}),(0,d.jsxs)("div",{className:h.formWrapper,children:[(0,d.jsx)("span",{className:h.title,children:e}),(0,d.jsx)("div",{className:h.validation,children:Object.values(t).map((a,i)=>(0,d.jsx)("div",{className:h.error,children:a.message?.toString()},i))}),r,(0,d.jsx)("div",{className:h.navigate,children:o})]})]})})});var ct=require("@ducks-tinder-client/ui");var mt=require("zustand"),ut=require("zustand/middleware"),s=(0,mt.create)()((0,ut.devtools)(t=>({isAuth:null,authData:null,setIsAuth:e=>t(()=>({isAuth:e})),setAuthData:e=>t(()=>({authData:e}))})));var _t=require("zustand"),lt=require("zustand/middleware"),g=(0,_t.create)()((0,lt.devtools)(t=>({currentUser:null,setCurrentUser:e=>t(()=>({currentUser:e}))})));var dt=require("react/jsx-runtime"),W=()=>{let t=s(r=>r.isAuth),e=g(r=>r.currentUser);return(0,dt.jsx)(ct.LoadingPage,{visible:t===null&&e===null||t===!0&&e===null})};var At=require("@tanstack/react-query");var R=require("@ducks-tinder-client/common");async function S(t){return Promise.resolve({config:{},data:t,headers:{},status:200,statusText:""})}async function B(t,e){return Promise.reject({config:{},data:e,headers:{},status:t,statusText:""})}function q(t,e){return R.COMMON_LIB_SETTINGS.WITH_MOCKS?e:t}function M(t){localStorage.setItem("testUser",JSON.stringify(t))}function K(){localStorage.removeItem("testUser")}function V(){let t=localStorage.getItem("testUser");if(!t)return null;let e=JSON.parse(t);return Qt(e)?e:(localStorage.removeItem("testUser"),null)}function Qt(t){if(!t||typeof t!="object")return!1;for(let e in R.userStub)if(!(e in t))return!1;return Object.keys(R.userStub).length===Object.keys(t).length}var E={email:"email@gmail.com",accessToken:"token",id:"id",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};var z=require("@ducks-tinder-client/common"),ft={async registration(t,e,r){return z.mockStorage.currentUser={...z.mockStorage.currentUser,name:e},M(z.mockStorage.currentUser),S({...E,...z.mockStorage.currentUser})},async login(t,e){return M(z.mockStorage.currentUser),S({...E,...z.mockStorage.currentUser})},async refresh(){let t=V();return t?(z.mockStorage.currentUser=t,S({...E,...t})):B(401)},async logout(){return K(),S()}};var f=require("@ducks-tinder-client/common"),ht=()=>q({async refresh(){return f.instance.get(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/refresh`)},async registration(t,e,r){return f.instance.post(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/register`,{email:t,name:e,password:r})},async login(t,e){return f.instance.post(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/login`,{email:t,password:e})},async logout(){return f.instance.patch(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/logout`)}},ft);var j={authService:null},xt=(t,e)=>(j[t]||(j[t]=e()),j[t]),x=()=>xt("authService",ht);var gt=Vt(require("axios")),zt=require("@ducks-tinder-client/common");function $t(t){t.interceptors.request.use(e=>(e.headers.Authorization="Bearer "+localStorage.getItem("accessToken"),e)),t.interceptors.response.use(e=>e,async e=>{let r=e.config;if(e.config?.url?.endsWith("/auth/refresh"))throw e;if(e.response?.status===401&&!e.config._isRetry){r._isRetry=!0;let o=await gt.default.get(`${zt.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/refresh`,{withCredentials:!0});return localStorage.setItem("accessToken",o.data.accessToken),t.request(r)}throw e})}var kt=require("@ducks-tinder-client/common"),vt=require("react-toastify");function Q(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,At.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o})=>x().login(r,o),onError:r=>{t(null),e(!1),(0,vt.toast)((0,kt.returnErrorMessage)(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var Tt=require("@tanstack/react-query");var St=require("@ducks-tinder-client/common"),yt=require("react-toastify");function $(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,Tt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o,name:a})=>x().registration(r,a,o),onError:r=>{t(null),e(!1),(0,yt.toast)((0,St.returnErrorMessage)(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var bt=require("@tanstack/react-query");function J(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,bt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async()=>x().refresh(),onError:()=>{t(null),e(!1)},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var wt=require("@tanstack/react-query");function Jt(){let t=s(o=>o.setAuthData),e=s(o=>o.setIsAuth),r=g(o=>o.setCurrentUser);return(0,wt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async()=>(localStorage.removeItem("accessToken"),t(null),e(!1),r(null),x().logout())})}var Y=(e=>(e.User="user",e))(Y||{});var Rt=require("@tanstack/react-query");var Et=require("@ducks-tinder-client/common");function Z(){return(0,Rt.useQuery)({queryKey:["user"],queryFn:async()=>Et.serviceGetter.getUserService().getMe(),select:t=>t.data,retryDelay:2e3})}function y(t){let{mutateAsync:e,isPending:r}=Q(),{mutateAsync:o,isPending:a}=$(),i=r||a,{register:c,formState:{errors:N,isValid:G},handleSubmit:Mt}=(0,It.useForm)({mode:"onChange"}),Ft=Mt(async it=>{t?await o(it):await e(it)}),Ot={type:"text",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.email,...c("email",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.emailRequired,pattern:{value:p.EMAIL_REGEXP,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.emailIncorrect},maxLength:{value:30,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getEmailLengthMax(30)}})},Ht={type:"password",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.password,...c("password",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.passwordRequired,minLength:{value:6,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getPasswordLengthMin(6)},maxLength:{value:30,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getPasswordLengthMax(30)}})},st={fields:{email:Ot,password:Ht},validation:{errors:N,isValid:G},submitHandler:Ft,disabled:i};return t&&(st.fields.name={type:"text",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.name,...c("name",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.nameRequired,minLength:{value:2,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getNameLengthMin(2)},maxLength:{value:14,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getNameLengthMax(14)}})}),st}var tt=require("@ducks-tinder-client/common");var et=require("react"),rt=require("react-toastify"),Ut=require("react/jsx-runtime"),ot=t=>r=>{let{data:o,failureCount:a,isError:i,isLoading:c}=Z(),N=g(G=>G.setCurrentUser);return(0,et.useEffect)(()=>{N(o||null)},[o,N]),(0,et.useEffect)(()=>{i&&!o?(0,rt.toast)(tt.COMMON_LIB_SETTINGS.TEXTS.reconnection):a>=1&&(0,rt.toast)(tt.COMMON_LIB_SETTINGS.TEXTS.successConnect)},[o,a,i,c]),!c&&o?(0,Ut.jsx)(t,{...r}):null};var Ct=require("react"),U=require("react-router-dom"),at=require("@ducks-tinder-client/common");var I=require("react/jsx-runtime"),F=t=>r=>{let{pathname:o}=(0,U.useLocation)(),{mutateAsync:a}=J(),i=s(c=>c.isAuth);return(0,Ct.useEffect)(()=>{i===null&&a()},[i,a]),o===at.ROUTES.LOGIN||o===at.ROUTES.REGISTRATION?i?(0,I.jsx)(U.Navigate,{to:"/"}):(0,I.jsx)(t,{...r}):i===!1?(0,I.jsx)(U.Navigate,{to:"/login",replace:!0}):i?(0,I.jsx)(t,{...r}):null};var k=require("react/jsx-runtime"),O=t=>r=>(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(W,{}),(0,k.jsx)(t,{...r})]});var Lt=require("react-router-dom"),b=require("@fortawesome/free-solid-svg-icons"),H=require("@fortawesome/react-fontawesome");var l={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};var C=require("@ducks-tinder-client/ui"),D=require("@ducks-tinder-client/common"),u=require("react/jsx-runtime"),Nt=()=>{let{fields:{email:t,password:e},validation:{errors:r,isValid:o},submitHandler:a,disabled:i}=y();return(0,u.jsx)(T,{errors:r,title:D.COMMON_LIB_SETTINGS.TEXTS.auth.memberLogin,link:(0,u.jsxs)(Lt.Link,{className:l.link,to:"/reg",children:[D.COMMON_LIB_SETTINGS.TEXTS.auth.create,(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faArrowRightLong})]}),children:(0,u.jsxs)("form",{onSubmit:a,className:l.form,children:[(0,u.jsxs)("div",{className:l.inputWrapper,children:[(0,u.jsx)(C.TextField,{...t,variant:"rounded",extraClassName:l.input}),(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faEnvelope})]}),(0,u.jsxs)("div",{className:l.inputWrapper,children:[(0,u.jsx)(C.TextField,{...e,variant:"rounded",extraClassName:l.input}),(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faLock})]}),(0,u.jsx)(C.Button,{type:"submit",rounded:!0,disabled:!o||i,extraClassName:[l.btn,o&&!i?"":l.disabled],children:D.COMMON_LIB_SETTINGS.TEXTS.auth.login})]})})};var Pt=require("react-router-dom"),A=require("@fortawesome/free-solid-svg-icons"),L=require("@fortawesome/react-fontawesome");var m={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};var w=require("@ducks-tinder-client/ui"),X=require("@ducks-tinder-client/common"),n=require("react/jsx-runtime"),Wt=()=>{let{fields:{name:t,email:e,password:r},validation:{errors:o,isValid:a},submitHandler:i,disabled:c}=y(!0);return(0,n.jsx)(T,{errors:o,title:X.COMMON_LIB_SETTINGS.TEXTS.auth.memberSignUp,link:(0,n.jsxs)(Pt.Link,{className:m.link,to:"/login",children:[X.COMMON_LIB_SETTINGS.TEXTS.auth.loginAccount,(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faArrowRightLong})]}),children:(0,n.jsxs)("form",{onSubmit:i,className:m.form,children:[(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...t,extraClassName:m.input,variant:"rounded"}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faFileText})]}),(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...e,variant:"rounded",extraClassName:m.input}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faEnvelope})]}),(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...r,variant:"rounded",extraClassName:m.input}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faLock})]}),(0,n.jsx)(w.Button,{type:"submit",rounded:!0,disabled:!a||c,extraClassName:[m.btn,a&&!c?"":m.disabled],children:X.COMMON_LIB_SETTINGS.TEXTS.auth.signUp})]})})};_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.BOOTSTRAPPING,[O]);_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.AUTH_CHECK,[F]);_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.USER_HYDRATION,[ot]);_.APP_AUTH_HOC_COMPOSITION.addHocs(_.HocCompositionStage.BOOTSTRAPPING,[O]);_.APP_AUTH_HOC_COMPOSITION.addHocs(_.HocCompositionStage.AUTH_CHECK,[F]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useLogoutMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<boolean, any>, Error, void, unknown>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useRefreshMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<import("../../../../shared/api").AuthResponse, any>, Error, void, unknown>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { RegistrationParams } from '../../../../shared/api';
|
|
2
|
+
export declare function useRegisterMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<import("../../../../shared/api").AuthResponse, any>, unknown, RegistrationParams, unknown>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useGetCurrentUserQuery(): import("@tanstack/react-query").UseQueryResult<import("@ducks-tinder-client/common").User, Error>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useAuthForm } from './useAuthForm';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SubmitEventHandler } from 'react';
|
|
2
|
+
import type { FieldErrors } from 'react-hook-form';
|
|
3
|
+
import type { RegistrationParams } from '@ducks-tinder-client/common';
|
|
4
|
+
import type { TextFieldProps } from '@ducks-tinder-client/ui';
|
|
5
|
+
interface AuthFormReturn {
|
|
6
|
+
fields: {
|
|
7
|
+
email: TextFieldProps;
|
|
8
|
+
password: TextFieldProps;
|
|
9
|
+
name?: TextFieldProps;
|
|
10
|
+
};
|
|
11
|
+
validation: {
|
|
12
|
+
errors: FieldErrors<RegistrationParams>;
|
|
13
|
+
isValid: boolean;
|
|
14
|
+
};
|
|
15
|
+
submitHandler: SubmitEventHandler<HTMLFormElement>;
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function useAuthForm(isRegisterForm?: boolean): AuthFormReturn;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AuthData } from './auth.interface';
|
|
2
|
+
export interface AuthState {
|
|
3
|
+
authData: AuthData | null;
|
|
4
|
+
isAuth: boolean | null;
|
|
5
|
+
setIsAuth: (value: boolean) => void;
|
|
6
|
+
setAuthData: (value: AuthData | null) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const useAuthStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<AuthState>, "setState" | "devtools"> & {
|
|
9
|
+
setState(partial: AuthState | Partial<AuthState> | ((state: AuthState) => AuthState | Partial<AuthState>), replace?: false | undefined, action?: (string | {
|
|
10
|
+
[x: string]: unknown;
|
|
11
|
+
[x: number]: unknown;
|
|
12
|
+
[x: symbol]: unknown;
|
|
13
|
+
type: string;
|
|
14
|
+
}) | undefined): void;
|
|
15
|
+
setState(state: AuthState | ((state: AuthState) => AuthState), replace: true, action?: (string | {
|
|
16
|
+
[x: string]: unknown;
|
|
17
|
+
[x: number]: unknown;
|
|
18
|
+
[x: symbol]: unknown;
|
|
19
|
+
type: string;
|
|
20
|
+
}) | undefined): void;
|
|
21
|
+
devtools: {
|
|
22
|
+
cleanup: () => void;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useUserStore } from './user.store';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { User } from '@ducks-tinder-client/common';
|
|
2
|
+
export interface UserState {
|
|
3
|
+
currentUser: User | null;
|
|
4
|
+
setCurrentUser: (value: User | null) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const useUserStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<UserState>, "setState" | "devtools"> & {
|
|
7
|
+
setState(partial: UserState | Partial<UserState> | ((state: UserState) => UserState | Partial<UserState>), replace?: false | undefined, action?: (string | {
|
|
8
|
+
[x: string]: unknown;
|
|
9
|
+
[x: number]: unknown;
|
|
10
|
+
[x: symbol]: unknown;
|
|
11
|
+
type: string;
|
|
12
|
+
}) | undefined): void;
|
|
13
|
+
setState(state: UserState | ((state: UserState) => UserState), replace: true, action?: (string | {
|
|
14
|
+
[x: string]: unknown;
|
|
15
|
+
[x: number]: unknown;
|
|
16
|
+
[x: symbol]: unknown;
|
|
17
|
+
type: string;
|
|
18
|
+
}) | undefined): void;
|
|
19
|
+
devtools: {
|
|
20
|
+
cleanup: () => void;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FC, PropsWithChildren, ReactNode } from 'react';
|
|
2
|
+
import type { FieldErrors } from 'react-hook-form';
|
|
3
|
+
import type { RegistrationParams } from '@ducks-tinder-client/common';
|
|
4
|
+
interface AuthLayoutProps {
|
|
5
|
+
errors: FieldErrors<RegistrationParams>;
|
|
6
|
+
title: string;
|
|
7
|
+
link: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const AuthLayout: FC<PropsWithChildren<AuthLayoutProps>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const InitialLoading: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._auth_4slza_1{width:100%;margin:0 auto;height:100%}._auth_4slza_1 ._container_4slza_6{width:100%;height:100%;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;padding:15px;background:var(--color--purple-100);background:linear-gradient(-135deg,var(--color--purple-90),var(--color--yellow-60))}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:960px;background:var(--bg-sub-primary);border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:space-between;padding:50px 130px 40px 95px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{width:316px;height:316px;max-width:100%}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:100px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:700;font-size:24px;color:var(--main-primary);line-height:1.2;text-align:center;width:100%;display:block;padding-bottom:54px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45{font-weight:600;font-size:15px;color:var(--danger-main)}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{max-width:290px;text-align:center;margin-bottom:10px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{text-align:center;padding-top:136px;font-size:12px}@media(max-height:750px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:700px;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:800px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{align-items:center;justify-content:center;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{display:none}}@media(max-width:700px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:350px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:400px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:500;font-size:18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{font-size:13px}}._link_1o9kz_1{font-size:14px;line-height:1.5;color:var(--main-secondary);position:relative;padding:10px}._link_1o9kz_1 ._icon_1o9kz_8{position:absolute;top:13px;right:-10px}._form_1o9kz_14{width:290px}._form_1o9kz_14 ._inputWrapper_1o9kz_17{position:relative;margin-bottom:10px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:50px;z-index:1;color:var(--main-secondary);background:var(--bg-primary);padding:0 30px 0 68px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{font-size:16px;display:flex;align-items:center;position:absolute;border-radius:25px;bottom:18px;left:35px;pointer-events:none;color:var(--main-secondary)}._form_1o9kz_14 ._btn_1o9kz_40{font-weight:700;font-size:15px;color:var(--color--white-100);text-transform:uppercase;height:50px;background:var(--color--green-90);padding:0 25px;margin-top:10px;transition:all .4s}._form_1o9kz_14 ._btn_1o9kz_40._disabled_1o9kz_51{background:var(--bg-secondary)!important;cursor:not-allowed}@media(max-width:400px){._form_1o9kz_14{max-width:290px;width:100%}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:40px;font-size:13px;padding:0 16px 0 40px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{bottom:12px;left:16px}._form_1o9kz_14 ._btn_1o9kz_40{height:40px;font-weight:500;font-size:13px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{APP_AUTH_HOC_COMPOSITION as _t,APP_PRIVATE_HOC_COMPOSITION as D,HocCompositionStage as T}from"@ducks-tinder-client/common";import{useForm as Ft}from"react-hook-form";import{COMMON_LIB_SETTINGS as p,EMAIL_REGEXP as Ot}from"@ducks-tinder-client/common";var g=(e=>(e.AuthMutation="auth-data-mutation",e))(g||{});var _={auth:"_auth_4slza_1",container:"_container_4slza_6",wrapper:"_wrapper_4slza_17",formWrapper:"_formWrapper_4slza_32",title:"_title_4slza_35",validation:"_validation_4slza_45",error:"_error_4slza_50",navigate:"_navigate_4slza_55"};import{authDuck as ht}from"@ducks-tinder-client/ui";import{jsx as d,jsxs as B}from"react/jsx-runtime";var z=({errors:t,title:e,children:r,link:o})=>d("div",{className:_.auth,children:d("div",{className:_.container,children:B("div",{className:_.wrapper,children:[d("img",{draggable:!1,src:ht,alt:"IMG"}),B("div",{className:_.formWrapper,children:[d("span",{className:_.title,children:e}),d("div",{className:_.validation,children:Object.values(t).map((a,s)=>d("div",{className:_.error,children:a.message?.toString()},s))}),r,d("div",{className:_.navigate,children:o})]})]})})});import{LoadingPage as kt}from"@ducks-tinder-client/ui";import{create as xt}from"zustand";import{devtools as gt}from"zustand/middleware";var i=xt()(gt(t=>({isAuth:null,authData:null,setIsAuth:e=>t(()=>({isAuth:e})),setAuthData:e=>t(()=>({authData:e}))})));import{create as zt}from"zustand";import{devtools as At}from"zustand/middleware";var f=zt()(At(t=>({currentUser:null,setCurrentUser:e=>t(()=>({currentUser:e}))})));import{jsx as vt}from"react/jsx-runtime";var C=()=>{let t=i(r=>r.isAuth),e=f(r=>r.currentUser);return vt(kt,{visible:t===null&&e===null||t===!0&&e===null})};import{useMutation as Rt}from"@tanstack/react-query";import{COMMON_LIB_SETTINGS as Tt,userStub as q}from"@ducks-tinder-client/common";async function A(t){return Promise.resolve({config:{},data:t,headers:{},status:200,statusText:""})}async function K(t,e){return Promise.reject({config:{},data:e,headers:{},status:t,statusText:""})}function V(t,e){return Tt.WITH_MOCKS?e:t}function L(t){localStorage.setItem("testUser",JSON.stringify(t))}function j(){localStorage.removeItem("testUser")}function Q(){let t=localStorage.getItem("testUser");if(!t)return null;let e=JSON.parse(t);return St(e)?e:(localStorage.removeItem("testUser"),null)}function St(t){if(!t||typeof t!="object")return!1;for(let e in q)if(!(e in t))return!1;return Object.keys(q).length===Object.keys(t).length}var y={email:"email@gmail.com",accessToken:"token",id:"id",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};import{mockStorage as h}from"@ducks-tinder-client/common";var $={async registration(t,e,r){return h.currentUser={...h.currentUser,name:e},L(h.currentUser),A({...y,...h.currentUser})},async login(t,e){return L(h.currentUser),A({...y,...h.currentUser})},async refresh(){let t=Q();return t?(h.currentUser=t,A({...y,...t})):K(401)},async logout(){return j(),A()}};import{COMMON_LIB_SETTINGS as b,instance as w}from"@ducks-tinder-client/common";var J=()=>V({async refresh(){return w.get(`${b.AUTH_SERVICE_URL}/auth/refresh`)},async registration(t,e,r){return w.post(`${b.AUTH_SERVICE_URL}/auth/register`,{email:t,name:e,password:r})},async login(t,e){return w.post(`${b.AUTH_SERVICE_URL}/auth/login`,{email:t,password:e})},async logout(){return w.patch(`${b.AUTH_SERVICE_URL}/auth/logout`)}},$);var N={authService:null},yt=(t,e)=>(N[t]||(N[t]=e()),N[t]),c=()=>yt("authService",J);import bt from"axios";import{COMMON_LIB_SETTINGS as wt}from"@ducks-tinder-client/common";function ir(t){t.interceptors.request.use(e=>(e.headers.Authorization="Bearer "+localStorage.getItem("accessToken"),e)),t.interceptors.response.use(e=>e,async e=>{let r=e.config;if(e.config?.url?.endsWith("/auth/refresh"))throw e;if(e.response?.status===401&&!e.config._isRetry){r._isRetry=!0;let o=await bt.get(`${wt.AUTH_SERVICE_URL}/auth/refresh`,{withCredentials:!0});return localStorage.setItem("accessToken",o.data.accessToken),t.request(r)}throw e})}import{returnErrorMessage as Et}from"@ducks-tinder-client/common";import{toast as It}from"react-toastify";function Y(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Rt({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o})=>c().login(r,o),onError:r=>{t(null),e(!1),It(Et(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Ut}from"@tanstack/react-query";import{returnErrorMessage as Ct}from"@ducks-tinder-client/common";import{toast as Lt}from"react-toastify";function Z(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Ut({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o,name:a})=>c().registration(r,a,o),onError:r=>{t(null),e(!1),Lt(Ct(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Nt}from"@tanstack/react-query";function tt(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Nt({mutationKey:["auth-data-mutation"],mutationFn:async()=>c().refresh(),onError:()=>{t(null),e(!1)},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Pt}from"@tanstack/react-query";function Pr(){let t=i(o=>o.setAuthData),e=i(o=>o.setIsAuth),r=f(o=>o.setCurrentUser);return Pt({mutationKey:["auth-data-mutation"],mutationFn:async()=>(localStorage.removeItem("accessToken"),t(null),e(!1),r(null),c().logout())})}var et=(e=>(e.User="user",e))(et||{});import{useQuery as Wt}from"@tanstack/react-query";import{serviceGetter as Mt}from"@ducks-tinder-client/common";function rt(){return Wt({queryKey:["user"],queryFn:async()=>Mt.getUserService().getMe(),select:t=>t.data,retryDelay:2e3})}function k(t){let{mutateAsync:e,isPending:r}=Y(),{mutateAsync:o,isPending:a}=Z(),s=r||a,{register:u,formState:{errors:S,isValid:U},handleSubmit:lt}=Ft({mode:"onChange"}),ct=lt(async G=>{t?await o(G):await e(G)}),dt={type:"text",placeholder:p.TEXTS.auth.email,...u("email",{required:p.TEXTS.auth.emailRequired,pattern:{value:Ot,message:p.TEXTS.auth.emailIncorrect},maxLength:{value:30,message:p.TEXTS.auth.getEmailLengthMax(30)}})},ft={type:"password",placeholder:p.TEXTS.auth.password,...u("password",{required:p.TEXTS.auth.passwordRequired,minLength:{value:6,message:p.TEXTS.auth.getPasswordLengthMin(6)},maxLength:{value:30,message:p.TEXTS.auth.getPasswordLengthMax(30)}})},X={fields:{email:dt,password:ft},validation:{errors:S,isValid:U},submitHandler:ct,disabled:s};return t&&(X.fields.name={type:"text",placeholder:p.TEXTS.auth.name,...u("name",{required:p.TEXTS.auth.nameRequired,minLength:{value:2,message:p.TEXTS.auth.getNameLengthMin(2)},maxLength:{value:14,message:p.TEXTS.auth.getNameLengthMax(14)}})}),X}import{COMMON_LIB_SETTINGS as ot}from"@ducks-tinder-client/common";import{useEffect as at}from"react";import{toast as st}from"react-toastify";import{jsx as Ht}from"react/jsx-runtime";var it=t=>r=>{let{data:o,failureCount:a,isError:s,isLoading:u}=rt(),S=f(U=>U.setCurrentUser);return at(()=>{S(o||null)},[o,S]),at(()=>{s&&!o?st(ot.TEXTS.reconnection):a>=1&&st(ot.TEXTS.successConnect)},[o,a,s,u]),!u&&o?Ht(t,{...r}):null};import{useEffect as Dt}from"react";import{Navigate as nt,useLocation as Xt}from"react-router-dom";import{ROUTES as pt}from"@ducks-tinder-client/common";import{jsx as R}from"react/jsx-runtime";var P=t=>r=>{let{pathname:o}=Xt(),{mutateAsync:a}=tt(),s=i(u=>u.isAuth);return Dt(()=>{s===null&&a()},[s,a]),o===pt.LOGIN||o===pt.REGISTRATION?s?R(nt,{to:"/"}):R(t,{...r}):s===!1?R(nt,{to:"/login",replace:!0}):s?R(t,{...r}):null};import{Fragment as Gt,jsx as mt,jsxs as Bt}from"react/jsx-runtime";var W=t=>r=>Bt(Gt,{children:[mt(C,{}),mt(t,{...r})]});import{Link as qt}from"react-router-dom";import{faArrowRightLong as Kt,faEnvelope as Vt,faLock as jt}from"@fortawesome/free-solid-svg-icons";import{FontAwesomeIcon as M}from"@fortawesome/react-fontawesome";var m={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};import{Button as Qt,TextField as ut}from"@ducks-tinder-client/ui";import{COMMON_LIB_SETTINGS as F}from"@ducks-tinder-client/common";import{jsx as x,jsxs as E}from"react/jsx-runtime";var $t=()=>{let{fields:{email:t,password:e},validation:{errors:r,isValid:o},submitHandler:a,disabled:s}=k();return x(z,{errors:r,title:F.TEXTS.auth.memberLogin,link:E(qt,{className:m.link,to:"/reg",children:[F.TEXTS.auth.create,x(M,{className:m.icon,icon:Kt})]}),children:E("form",{onSubmit:a,className:m.form,children:[E("div",{className:m.inputWrapper,children:[x(ut,{...t,variant:"rounded",extraClassName:m.input}),x(M,{className:m.icon,icon:Vt})]}),E("div",{className:m.inputWrapper,children:[x(ut,{...e,variant:"rounded",extraClassName:m.input}),x(M,{className:m.icon,icon:jt})]}),x(Qt,{type:"submit",rounded:!0,disabled:!o||s,extraClassName:[m.btn,o&&!s?"":m.disabled],children:F.TEXTS.auth.login})]})})};import{Link as Jt}from"react-router-dom";import{faArrowRightLong as Yt,faEnvelope as Zt,faFileText as te,faLock as ee}from"@fortawesome/free-solid-svg-icons";import{FontAwesomeIcon as I}from"@fortawesome/react-fontawesome";var n={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};import{Button as re,TextField as O}from"@ducks-tinder-client/ui";import{COMMON_LIB_SETTINGS as H}from"@ducks-tinder-client/common";import{jsx as l,jsxs as v}from"react/jsx-runtime";var oe=()=>{let{fields:{name:t,email:e,password:r},validation:{errors:o,isValid:a},submitHandler:s,disabled:u}=k(!0);return l(z,{errors:o,title:H.TEXTS.auth.memberSignUp,link:v(Jt,{className:n.link,to:"/login",children:[H.TEXTS.auth.loginAccount,l(I,{className:n.icon,icon:Yt})]}),children:v("form",{onSubmit:s,className:n.form,children:[v("div",{className:n.inputWrapper,children:[l(O,{...t,extraClassName:n.input,variant:"rounded"}),l(I,{className:n.icon,icon:te})]}),v("div",{className:n.inputWrapper,children:[l(O,{...e,variant:"rounded",extraClassName:n.input}),l(I,{className:n.icon,icon:Zt})]}),v("div",{className:n.inputWrapper,children:[l(O,{...r,variant:"rounded",extraClassName:n.input}),l(I,{className:n.icon,icon:ee})]}),l(re,{type:"submit",rounded:!0,disabled:!a||u,extraClassName:[n.btn,a&&!u?"":n.disabled],children:H.TEXTS.auth.signUp})]})})};D.addHocs(T.BOOTSTRAPPING,[W]);D.addHocs(T.AUTH_CHECK,[P]);D.addHocs(T.USER_HYDRATION,[it]);_t.addHocs(T.BOOTSTRAPPING,[W]);_t.addHocs(T.AUTH_CHECK,[P]);export{z as AuthLayout,g as AuthQueryKey,C as InitialLoading,$t as LoginForm,oe as RegistrationForm,et as UserQueryKey,P as WithAuthRedirect,W as WithInitialLoading,it as WithUserData,y as authResponseStub,j as deleteTestUser,c as getAuthService,V as getMockableService,yt as getOrCreateService,Q as getTestUser,K as rejectWithAxiosResponseError,A as resolveAxiosResponse,L as saveTestUser,ir as setUpInterceptors,k as useAuthForm,i as useAuthStore,rt as useGetCurrentUserQuery,Y as useLoginMutation,Pr as useLogoutMutation,tt as useRefreshMutation,Z as useRegisterMutation,f as useUserStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LoginForm } from './ui/LoginForm';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RegistrationForm } from './ui/RegistrationForm';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AxiosResponse } from 'axios';
|
|
2
|
+
export interface LoginParams {
|
|
3
|
+
email: string;
|
|
4
|
+
password: string;
|
|
5
|
+
}
|
|
6
|
+
export interface RegistrationParams extends LoginParams {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AuthResponse {
|
|
10
|
+
id: string;
|
|
11
|
+
email: string;
|
|
12
|
+
accessToken: string;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AuthService {
|
|
17
|
+
refresh(): Promise<AxiosResponse<AuthResponse>>;
|
|
18
|
+
registration(email: string, name: string, password: string): Promise<AxiosResponse<AuthResponse>>;
|
|
19
|
+
login(email: string, password: string): Promise<AxiosResponse<AuthResponse>>;
|
|
20
|
+
logout(): Promise<AxiosResponse<boolean>>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './mock';
|
|
2
|
+
export * from './auth/auth.interfaces';
|
|
3
|
+
import type { AuthService } from './auth/auth.interfaces';
|
|
4
|
+
interface Instances {
|
|
5
|
+
authService: AuthService | null;
|
|
6
|
+
}
|
|
7
|
+
export declare const getOrCreateService: <T extends Instances[keyof Instances]>(key: keyof Instances, createService: () => T) => T;
|
|
8
|
+
export declare const getAuthService: () => AuthService;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { User } from '@ducks-tinder-client/common';
|
|
2
|
+
import type { AxiosError, AxiosResponse } from 'axios';
|
|
3
|
+
export declare function resolveAxiosResponse<T>(data?: T): Promise<AxiosResponse<T>>;
|
|
4
|
+
export declare function rejectWithAxiosResponseError<T>(status: number, data?: T): Promise<AxiosError<T>>;
|
|
5
|
+
export declare function getMockableService<T>(service: T, mockService: T): T;
|
|
6
|
+
export declare function saveTestUser(user: User): void;
|
|
7
|
+
export declare function deleteTestUser(): void;
|
|
8
|
+
export declare function getTestUser(): User | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './auth.stub';
|
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ducks-tinder-client/auth",
|
|
3
|
+
"version": "1.0.0-alpha.1",
|
|
4
|
+
"author": "Stepan B <dark_magic419a@mail.ru> (https://github.com/Stepasha419a)",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "A module of ui components",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/Stepasha419a/ducks-tinder-client"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/cjs/index.js",
|
|
12
|
+
"module": "dist/esm/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"storybook": "storybook dev -p 6006",
|
|
19
|
+
"storybook:test": "test-storybook",
|
|
20
|
+
"build": "rimraf ./dist && pnpm build:types && node esbuild.js",
|
|
21
|
+
"build:types": "tsc -p ./tsconfig.build.json && tsc-alias -p ./tsconfig.build.json",
|
|
22
|
+
"lint": "eslint src/** --ext .ts --ext .tsx --ext .js --max-warnings=0",
|
|
23
|
+
"lint:fix": "eslint src/** --ext .ts --ext .tsx --ext .js --fix --max-warnings=0",
|
|
24
|
+
"prettier": "prettier --check src/**/*{.css,.scss,.ts,.tsx,.js,.jsx}",
|
|
25
|
+
"prettier:fix": "prettier --write src/**/*{.css,.scss,.ts,.tsx,.js,.jsx}",
|
|
26
|
+
"types": "tsc --noemit",
|
|
27
|
+
"steiger": "steiger ./src"
|
|
28
|
+
},
|
|
29
|
+
"browserslist": {
|
|
30
|
+
"production": [
|
|
31
|
+
">0.2%",
|
|
32
|
+
"not dead",
|
|
33
|
+
"not op_mini all"
|
|
34
|
+
],
|
|
35
|
+
"development": [
|
|
36
|
+
"last 1 chrome version",
|
|
37
|
+
"last 1 firefox version",
|
|
38
|
+
"last 1 safari version"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"@ducks-tinder-client/ui": "1.1.7-alpha.5",
|
|
43
|
+
"@fortawesome/fontawesome-common-types": "6.7.x",
|
|
44
|
+
"@fortawesome/fontawesome-svg-core": "6.7.x",
|
|
45
|
+
"@fortawesome/free-solid-svg-icons": "6.7.x",
|
|
46
|
+
"@fortawesome/react-fontawesome": "0.2.x",
|
|
47
|
+
"axios": "1.9.x",
|
|
48
|
+
"browserslist": "4.25.x",
|
|
49
|
+
"classnames": "2.5.x",
|
|
50
|
+
"react": "19.1.x",
|
|
51
|
+
"react-dom": "19.1.x",
|
|
52
|
+
"react-hook-form": "7.66.x",
|
|
53
|
+
"react-router-dom": "7.9.x",
|
|
54
|
+
"react-toastify": "11.0.x"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@ducks-tinder-client/common": "1.7.0-alpha.9",
|
|
58
|
+
"@tanstack/react-query": "^5.100.10",
|
|
59
|
+
"zustand": "^5.0.13"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@eslint/js": "^9.39.1",
|
|
63
|
+
"@feature-sliced/eslint-config": "^0.1.1",
|
|
64
|
+
"@feature-sliced/steiger-plugin": "^0.5.7",
|
|
65
|
+
"@storybook/addon-links": "10.0.6",
|
|
66
|
+
"@storybook/addon-onboarding": "^10.0.6",
|
|
67
|
+
"@storybook/builder-vite": "^10.0.6",
|
|
68
|
+
"@storybook/react": "^10.0.6",
|
|
69
|
+
"@storybook/react-vite": "^10.0.6",
|
|
70
|
+
"@storybook/test-runner": "^0.24.1",
|
|
71
|
+
"@storybook/testing-library": "0.2.2",
|
|
72
|
+
"@types/node": "^24.10.0",
|
|
73
|
+
"@types/react": "^19.2.2",
|
|
74
|
+
"@types/react-dom": "^19.2.2",
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "^8.46.4",
|
|
76
|
+
"@typescript-eslint/parser": "^8.46.4",
|
|
77
|
+
"esbuild": "^0.27.0",
|
|
78
|
+
"esbuild-node-externals": "^1.18.0",
|
|
79
|
+
"esbuild-sass-plugin": "^3.3.1",
|
|
80
|
+
"eslint": "^9.39.1",
|
|
81
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
82
|
+
"eslint-plugin-boundaries": "^5.1.0",
|
|
83
|
+
"eslint-plugin-import": "^2.32.0",
|
|
84
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
85
|
+
"eslint-plugin-react-hooks": "7.0.1",
|
|
86
|
+
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
87
|
+
"eslint-plugin-storybook": "^10.0.6",
|
|
88
|
+
"globals": "^16.5.0",
|
|
89
|
+
"postcss": "^8.5.6",
|
|
90
|
+
"postcss-modules": "^6.0.1",
|
|
91
|
+
"prettier": "^3.6.2",
|
|
92
|
+
"rimraf": "^6.1.0",
|
|
93
|
+
"sass": "^1.94.0",
|
|
94
|
+
"steiger": "^0.5.11",
|
|
95
|
+
"storybook": "^10.0.6",
|
|
96
|
+
"tsc-alias": "^1.8.16",
|
|
97
|
+
"typescript": "^5.9.3",
|
|
98
|
+
"typescript-eslint": "^8.46.4",
|
|
99
|
+
"vite": "^7.2.2"
|
|
100
|
+
}
|
|
101
|
+
}
|