@studiocubics/cms 0.0.21 → 0.0.23
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/client/ui/System/Auth/SignIn/SignIn.js +1 -1
- package/dist/client/ui/System/Auth/SignIn/SignIn.js.map +1 -1
- package/dist/client/ui/System/Auth/SignUp/SignUp.js +1 -1
- package/dist/client/ui/System/Auth/SignUp/SignUp.js.map +1 -1
- package/dist/server/clerk/actions/systemUsers.js +1 -1
- package/dist/server/clerk/actions/systemUsers.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsxs as e,jsx as r}from"react/jsx-runtime";import{useUser as i}from"@clerk/nextjs";import{Card as o,CubicsUILogo as t,TextInput as n,PasswordInput as a,Button as
|
|
1
|
+
"use client";import{jsxs as e,jsx as r}from"react/jsx-runtime";import{useUser as i}from"@clerk/nextjs";import{Card as o,CubicsUILogo as t,TextInput as n,PasswordInput as a,Button as c,PoweredByBanner as d}from"@studiocubics/components";import{useRouter as s}from"next/navigation";import{useEffect as l}from"react";import m from"./SignIn.module.css.js";import{useSignInForm as u}from"./useSignInForm.js";import h from"next/link";function p(){const{user:p}=i(),f=s(),{formState:g,setFormState:b,pending:v,error:S,handleSubmit:x}=u();function N(e){const r=e.currentTarget;b({...g,[r.id]:r.value})}return l(()=>{p?.id&&f.replace("/dashboard")},[p]),e(o,{size:"lg",className:m.root,children:[e("div",{className:m.body,children:[r(t,{width:"120px"}),e("header",{className:m.header,children:[r("h1",{children:"Sign in to your Account"}),r("p",{children:"Welcome Back! Lets get started."})]}),e("form",{onSubmit:x,className:m.form,children:[r("div",{id:"clerk-captcha"}),r(n,{label:"Email Address",id:"email",value:g.email,onChange:N,required:!0,fullWidth:!0,type:"email"}),r(a,{label:"Password",id:"password",value:g.password,onChange:N,required:!0,fullWidth:!0,disabled:v}),r(c,{type:"submit",variant:"contained",children:"Confirm"}),S&&r("p",{className:m.error,children:S})]})]}),e("div",{className:m.footer,children:[e("p",{children:["Dont have an account?"," ",r(h,{href:"/auth/requestAccount",children:"Request"})," one from an admin"]}),r(d,{})]})]})}export{p as SignIn};
|
|
2
2
|
//# sourceMappingURL=SignIn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignIn.js","sources":["../../../../../../src/client/ui/System/Auth/SignIn/SignIn.tsx"],"sourcesContent":["\"use client\";\n\nimport { useUser } from \"@clerk/nextjs\";\nimport {\n Button,\n Card,\n CubicsUILogo,\n PasswordInput,\n TextInput,\n PoweredByBanner,\n} from \"@studiocubics/components\";\nimport { useRouter } from \"next/navigation\";\nimport { type ChangeEvent, useEffect } from \"react\";\nimport styles from \"./SignIn.module.css\";\nimport { useSignInForm } from \"./useSignInForm\";\nimport Link from \"next/link\";\n\nexport function SignIn() {\n const { user } = useUser();\n const router = useRouter();\n const { formState, setFormState, pending, error, handleSubmit } =\n useSignInForm();\n\n useEffect(() => {\n if (user?.id) {\n router.
|
|
1
|
+
{"version":3,"file":"SignIn.js","sources":["../../../../../../src/client/ui/System/Auth/SignIn/SignIn.tsx"],"sourcesContent":["\"use client\";\n\nimport { useUser } from \"@clerk/nextjs\";\nimport {\n Button,\n Card,\n CubicsUILogo,\n PasswordInput,\n TextInput,\n PoweredByBanner,\n} from \"@studiocubics/components\";\nimport { useRouter } from \"next/navigation\";\nimport { type ChangeEvent, useEffect } from \"react\";\nimport styles from \"./SignIn.module.css\";\nimport { useSignInForm } from \"./useSignInForm\";\nimport Link from \"next/link\";\n\nexport function SignIn() {\n const { user } = useUser();\n const router = useRouter();\n const { formState, setFormState, pending, error, handleSubmit } =\n useSignInForm();\n\n useEffect(() => {\n if (user?.id) {\n router.replace(\"/dashboard\");\n }\n }, [user]);\n\n function handleFormStateChange(e: ChangeEvent<HTMLInputElement>) {\n const target = e.currentTarget as HTMLInputElement;\n setFormState({ ...formState, [target.id]: target.value });\n }\n\n return (\n <Card size=\"lg\" className={styles.root}>\n <div className={styles.body}>\n <CubicsUILogo width={\"120px\"} />\n <header className={styles.header}>\n <h1>Sign in to your Account</h1>\n <p>Welcome Back! Lets get started.</p>\n </header>\n <form onSubmit={handleSubmit} className={styles.form}>\n <div id=\"clerk-captcha\" />\n\n <TextInput\n label={\"Email Address\"}\n id=\"email\"\n value={formState.email}\n onChange={handleFormStateChange}\n required\n fullWidth\n type=\"email\"\n />\n <PasswordInput\n label={\"Password\"}\n id=\"password\"\n value={formState.password}\n onChange={handleFormStateChange}\n required\n fullWidth\n disabled={pending}\n />\n <Button type=\"submit\" variant=\"contained\">\n Confirm\n </Button>\n {error && <p className={styles.error}>{error}</p>}\n </form>\n </div>\n <div className={styles.footer}>\n <p>\n Dont have an account?{\" \"}\n <Link href={\"/auth/requestAccount\"}>Request</Link> one from an admin\n </p>\n <PoweredByBanner />\n </div>\n </Card>\n );\n}\n"],"names":["SignIn","user","useUser","router","useRouter","formState","setFormState","pending","error","handleSubmit","useSignInForm","handleFormStateChange","e","target","currentTarget","id","value","useEffect","replace","_jsxs","Card","size","className","styles","root","body","children","_jsx","CubicsUILogo","width","header","onSubmit","form","TextInput","label","email","onChange","required","fullWidth","type","PasswordInput","password","disabled","Button","variant","footer","Link","href","PoweredByBanner"],"mappings":"qbAiBgBA,IACd,MAAMC,KAAEA,GAASC,IACXC,EAASC,KACTC,UAAEA,EAASC,aAAEA,EAAYC,QAAEA,EAAOC,MAAEA,EAAKC,aAAEA,GAC/CC,IAQF,SAASC,EAAsBC,GAC7B,MAAMC,EAASD,EAAEE,cACjBR,EAAa,IAAKD,EAAW,CAACQ,EAAOE,IAAKF,EAAOG,OACnD,CAEA,OAXAC,EAAU,KACJhB,GAAMc,IACRZ,EAAOe,QAAQ,eAEhB,CAACjB,IAQFkB,EAACC,EAAI,CAACC,KAAK,KAAKC,UAAWC,EAAOC,eAChCL,EAAA,MAAA,CAAKG,UAAWC,EAAOE,KAAIC,SAAA,CACzBC,EAACC,EAAY,CAACC,MAAO,UACrBV,EAAA,SAAA,CAAQG,UAAWC,EAAOO,iBACxBH,EAAA,KAAA,CAAAD,SAAA,4BACAC,uDAEFR,EAAA,OAAA,CAAMY,SAAUtB,EAAca,UAAWC,EAAOS,KAAIN,SAAA,CAClDC,EAAA,MAAA,CAAKZ,GAAG,kBAERY,EAACM,EAAS,CACRC,MAAO,gBACPnB,GAAG,QACHC,MAAOX,EAAU8B,MACjBC,SAAUzB,EACV0B,UAAQ,EACRC,WAAS,EACTC,KAAK,UAEPZ,EAACa,EAAa,CACZN,MAAO,WACPnB,GAAG,WACHC,MAAOX,EAAUoC,SACjBL,SAAUzB,EACV0B,YACAC,WAAS,EACTI,SAAUnC,IAEZoB,EAACgB,EAAM,CAACJ,KAAK,SAASK,QAAQ,YAAWlB,SAAA,YAGxClB,GAASmB,OAAGL,UAAWC,EAAOf,MAAKkB,SAAGlB,UAG3CW,EAAA,MAAA,CAAKG,UAAWC,EAAOsB,OAAMnB,SAAA,CAC3BP,yCACwB,IACtBQ,EAACmB,EAAI,CAACC,KAAM,uBAAsBrB,SAAA,YAAgB,wBAEpDC,EAACqB,WAIT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as
|
|
1
|
+
"use client";import{jsx as e,jsxs as r,Fragment as i}from"react/jsx-runtime";import{useUser as t}from"@clerk/nextjs";import{Card as a,TextInput as n,Button as l,PasswordInput as o,CubicsUILogo as d,PoweredByBanner as s}from"@studiocubics/components";import c from"next/link";import{useRouter as m}from"next/navigation";import{useState as h,useEffect as u}from"react";import f from"./SignUp.module.css.js";import{useSignUpForm as p}from"./useSignUpForm.js";function b(){const{user:b}=t(),g=m(),{ticket:v,setFormState:N,formState:k,pending:C,error:S,handleSubmit:W}=p(),[w,y]=h(0);if(u(()=>{b?.id&&g.replace("/dashboard")},[b]),!v)return e(a,{size:"lg",className:f.root,children:r("p",{children:["Looks like you haven‘t been invited!",e("br",{})," Please ",e(c,{href:"/auth/requestAccount",children:"request"})," an invitation from an admin."]})});function q(e){N({...k,[e.target.id]:e.target.value})}const x=r(i,{children:[e(n,{label:"First Name",id:"firstName",value:k.firstName,onChange:q,required:!0,fullWidth:!0}),e(n,{label:"Last Name",id:"lastName",value:k.lastName,onChange:q,required:!0,fullWidth:!0}),e(l,{type:"button",variant:"contained",onClick:()=>y(1),fullWidth:!0,disabled:!k.firstName||!k.lastName,children:"Continue"})]}),P=r(i,{children:[e(o,{label:"Password",id:"password",value:k.password,onChange:q,required:!0,fullWidth:!0,disabled:C,disableStrengthMeter:!1}),e(o,{label:"Confirm Password",id:"confirmPassword",value:k.confirmPassword,onChange:q,required:!0,fullWidth:!0,disabled:C}),e(l,{disabled:C,variant:"contained",type:"submit",fullWidth:!0,children:"Register"})]});return r(a,{size:"lg",className:f.root,children:[r("div",{className:f.body,children:[e(d,{width:"120px"}),r("header",{className:f.header,children:[e("h1",{children:"Create your account"}),e("p",{children:"Welcome! Please fill in the details to get started."})]}),r("form",{onSubmit:W,className:f.form,children:[e("div",{id:"clerk-captcha"}),0==w&&x,1==w&&P,w>0&&e(l,{disabled:C,type:"button",onClick:()=>y(w-1),fullWidth:!0,children:"Go back"}),S&&e("p",{className:f.error,children:S})]})]}),r("div",{className:f.footer,children:[r("p",{children:["Already have an account? ",e(c,{href:"/auth/signIn/",children:"Sign In"})]}),e(s,{})]})]})}export{b as SignUp};
|
|
2
2
|
//# sourceMappingURL=SignUp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignUp.js","sources":["../../../../../../src/client/ui/System/Auth/SignUp/SignUp.tsx"],"sourcesContent":["\"use client\";\n\nimport { useUser } from \"@clerk/nextjs\";\nimport {\n Card,\n CubicsUILogo,\n TextInput,\n PasswordInput,\n Button,\n PoweredByBanner,\n} from \"@studiocubics/components\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useState, useEffect, type ChangeEvent } from \"react\";\nimport styles from \"./SignUp.module.css\";\nimport { useSignUpForm } from \"./useSignUpForm\";\n\nexport function SignUp() {\n const { user } = useUser();\n const router = useRouter();\n const { ticket, setFormState, formState, pending, error, handleSubmit } =\n useSignUpForm();\n const [step, setStep] = useState(0);\n\n // Handle signed-in users visiting this page\n // This will also redirect the user once they finish the sign-up process\n useEffect(() => {\n if (user?.id) {\n router.
|
|
1
|
+
{"version":3,"file":"SignUp.js","sources":["../../../../../../src/client/ui/System/Auth/SignUp/SignUp.tsx"],"sourcesContent":["\"use client\";\n\nimport { useUser } from \"@clerk/nextjs\";\nimport {\n Card,\n CubicsUILogo,\n TextInput,\n PasswordInput,\n Button,\n PoweredByBanner,\n} from \"@studiocubics/components\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useState, useEffect, type ChangeEvent } from \"react\";\nimport styles from \"./SignUp.module.css\";\nimport { useSignUpForm } from \"./useSignUpForm\";\n\nexport function SignUp() {\n const { user } = useUser();\n const router = useRouter();\n const { ticket, setFormState, formState, pending, error, handleSubmit } =\n useSignUpForm();\n const [step, setStep] = useState(0);\n\n // Handle signed-in users visiting this page\n // This will also redirect the user once they finish the sign-up process\n useEffect(() => {\n if (user?.id) {\n router.replace(\"/dashboard\");\n }\n }, [user]);\n\n // If there is no invitation ticket, restrict access to this page\n if (!ticket) {\n return (\n <Card size=\"lg\" className={styles.root}>\n <p>\n Looks like you haven‘t been invited!\n <br /> Please <Link href={\"/auth/requestAccount\"}>request</Link> an\n invitation from an admin.\n </p>\n </Card>\n );\n }\n\n function handleFormStateChange(e: ChangeEvent<HTMLInputElement>) {\n setFormState({ ...formState, [e.target.id]: e.target.value });\n }\n\n const Step0 = (\n <>\n <TextInput\n label={\"First Name\"}\n id=\"firstName\"\n value={formState.firstName}\n onChange={handleFormStateChange}\n required\n fullWidth\n />\n <TextInput\n label={\"Last Name\"}\n id=\"lastName\"\n value={formState.lastName}\n onChange={handleFormStateChange}\n required\n fullWidth\n />\n <Button\n type=\"button\"\n variant=\"contained\"\n onClick={() => setStep(1)}\n fullWidth\n disabled={!formState.firstName || !formState.lastName}\n >\n Continue\n </Button>\n </>\n );\n const Step1 = (\n <>\n <PasswordInput\n label={\"Password\"}\n id=\"password\"\n value={formState.password}\n onChange={handleFormStateChange}\n required\n fullWidth\n disabled={pending}\n disableStrengthMeter={false}\n />\n <PasswordInput\n label={\"Confirm Password\"}\n id=\"confirmPassword\"\n value={formState.confirmPassword}\n onChange={handleFormStateChange}\n required\n fullWidth\n disabled={pending}\n />\n <Button disabled={pending} variant=\"contained\" type=\"submit\" fullWidth>\n Register\n </Button>\n </>\n );\n return (\n <Card size=\"lg\" className={styles.root}>\n <div className={styles.body}>\n <CubicsUILogo width={\"120px\"} />\n <header className={styles.header}>\n <h1>Create your account</h1>\n <p>Welcome! Please fill in the details to get started.</p>\n </header>\n <form onSubmit={handleSubmit} className={styles.form}>\n <div id=\"clerk-captcha\" />\n {step == 0 && Step0}\n {step == 1 && Step1}\n {step > 0 && (\n <Button\n disabled={pending}\n type=\"button\"\n onClick={() => setStep(step - 1)}\n fullWidth\n >\n Go back\n </Button>\n )}\n {error && <p className={styles.error}>{error}</p>}\n </form>\n </div>\n <div className={styles.footer}>\n <p>\n Already have an account? <Link href={\"/auth/signIn/\"}>Sign In</Link>\n </p>\n <PoweredByBanner />\n </div>\n </Card>\n );\n}\n"],"names":["SignUp","user","useUser","router","useRouter","ticket","setFormState","formState","pending","error","handleSubmit","useSignUpForm","step","setStep","useState","useEffect","id","replace","_jsx","Card","size","className","styles","root","children","_jsxs","Link","href","handleFormStateChange","e","target","value","Step0","_Fragment","TextInput","label","firstName","onChange","required","fullWidth","lastName","Button","type","variant","onClick","disabled","Step1","PasswordInput","password","disableStrengthMeter","confirmPassword","body","CubicsUILogo","width","header","onSubmit","form","footer","PoweredByBanner"],"mappings":"idAiBgBA,IACd,MAAMC,KAAEA,GAASC,IACXC,EAASC,KACTC,OAAEA,EAAMC,aAAEA,EAAYC,UAAEA,EAASC,QAAEA,EAAOC,MAAEA,EAAKC,aAAEA,GACvDC,KACKC,EAAMC,GAAWC,EAAS,GAWjC,GAPAC,EAAU,KACJd,GAAMe,IACRb,EAAOc,QAAQ,eAEhB,CAAChB,KAGCI,EACH,OACEa,EAACC,EAAI,CAACC,KAAK,KAAKC,UAAWC,EAAOC,KAAIC,SACpCC,EAAA,IAAA,CAAAD,SAAA,CAAA,uCAEEN,EAAA,KAAA,CAAA,GAAM,WAAQA,EAACQ,EAAI,CAACC,KAAM,uBAAsBH,SAAA,YAAgB,qCAOxE,SAASI,EAAsBC,GAC7BvB,EAAa,IAAKC,EAAW,CAACsB,EAAEC,OAAOd,IAAKa,EAAEC,OAAOC,OACvD,CAEA,MAAMC,EACJP,EAAAQ,EAAA,CAAAT,SAAA,CACEN,EAACgB,EAAS,CACRC,MAAO,aACPnB,GAAG,YACHe,MAAOxB,EAAU6B,UACjBC,SAAUT,EACVU,UAAQ,EACRC,eAEFrB,EAACgB,EAAS,CACRC,MAAO,YACPnB,GAAG,WACHe,MAAOxB,EAAUiC,SACjBH,SAAUT,EACVU,YACAC,WAAS,IAEXrB,EAACuB,GACCC,KAAK,SACLC,QAAQ,YACRC,QAAS,IAAM/B,EAAQ,GACvB0B,WAAS,EACTM,UAAWtC,EAAU6B,YAAc7B,EAAUiC,SAAQhB,SAAA,gBAMrDsB,EACJrB,eACEP,EAAC6B,GACCZ,MAAO,WACPnB,GAAG,WACHe,MAAOxB,EAAUyC,SACjBX,SAAUT,EACVU,UAAQ,EACRC,aACAM,SAAUrC,EACVyC,sBAAsB,IAExB/B,EAAC6B,GACCZ,MAAO,mBACPnB,GAAG,kBACHe,MAAOxB,EAAU2C,gBACjBb,SAAUT,EACVU,YACAC,WAAS,EACTM,SAAUrC,IAEZU,EAACuB,EAAM,CAACI,SAAUrC,EAASmC,QAAQ,YAAYD,KAAK,SAASH,WAAS,EAAAf,SAAA,gBAK1E,OACEC,EAACN,EAAI,CAACC,KAAK,KAAKC,UAAWC,EAAOC,KAAIC,SAAA,CACpCC,EAAA,MAAA,CAAKJ,UAAWC,EAAO6B,KAAI3B,SAAA,CACzBN,EAACkC,EAAY,CAACC,MAAO,UACrB5B,EAAA,SAAA,CAAQJ,UAAWC,EAAOgC,OAAM9B,SAAA,CAC9BN,EAAA,KAAA,CAAAM,SAAA,wBACAN,EAAA,IAAA,CAAAM,SAAA,2DAEFC,EAAA,OAAA,CAAM8B,SAAU7C,EAAcW,UAAWC,EAAOkC,KAAIhC,SAAA,CAClDN,EAAA,MAAA,CAAKF,GAAG,kBACC,GAARJ,GAAaoB,EACL,GAARpB,GAAakC,EACblC,EAAO,GACNM,EAACuB,EAAM,CACLI,SAAUrC,EACVkC,KAAK,SACLE,QAAS,IAAM/B,EAAQD,EAAO,GAC9B2B,WAAS,EAAAf,SAAA,YAKZf,GAASS,EAAA,IAAA,CAAGG,UAAWC,EAAOb,MAAKe,SAAGf,UAG3CgB,EAAA,MAAA,CAAKJ,UAAWC,EAAOmC,OAAMjC,SAAA,CAC3BC,EAAA,IAAA,CAAAD,SAAA,CAAA,4BAC2BN,EAACQ,EAAI,CAACC,KAAM,gBAAeH,SAAA,eAEtDN,EAACwC,EAAe,CAAA,QAIxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use server";import{clerkClient as s}from"@clerk/nextjs/server";import{auth as
|
|
1
|
+
"use server";import{clerkClient as s}from"@clerk/nextjs/server";import{auth as r}from"../auth.js";import{apiRes as e}from"@studiocubics/utils";import{cache as t}from"react";import{revalidatePath as a}from"next/cache";import{systemUserUpdateSchema as o}from"../schemas/systemUser.js";import i from"zod";import{redirect as n}from"next/navigation";const c=t(async(t,a=!1)=>{const o=await r();if(!o.hasPermission("systemUsers","read"))throw new Error(e.forbidden);const i=await s(),n=await i.users.getUserList(t);return a&&(n.data=n.data.filter(s=>s.id!==o.userId),n.totalCount--),n}),u=t(async t=>{if(!(await r()).hasPermission("systemUsers","read"))throw new Error(e.forbidden);const a=await s(),o=await a.users.getUser(t);if(!o)throw new Error(e.notFound(`System User: ${t}`));return o});async function d(t,o,i){const n=await r();if(!n.hasPermission("systemUsers","update"))throw new Error(e.forbidden);const c=i.get("role"),u=await s(),{publicMetadata:d}=await u.users.getUser(t);return await u.users.updateUserMetadata(t,{publicMetadata:{...d,role:c}}),n.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),e.actionSuccess()}async function m(t,n,c){const u=await r();if(!u.hasPermission("systemUsers","update"))throw new Error(e.forbidden);const d=Object.fromEntries(c.entries()),{success:m,data:w,error:f}=o.safeParse(d);if(!m){const s=i.flattenError(f);return e.actionFail(s.formErrors.join("\n"),s.fieldErrors)}const y=await s();return w.imageFile instanceof File&&await y.users.updateUserProfileImage(t,{file:w.imageFile}),(w.firstName||w.lastName)&&await y.users.updateUser(t,{firstName:w.firstName,lastName:w.lastName}),u.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),e.actionSuccess()}async function w(t){const o=await r();if(!o.hasPermission("systemUsers","update"))throw new Error(e.forbidden);const i=await s();return await i.users.deleteUserProfileImage(t),o.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),e.actionSuccess()}async function f(t){const o=await r();if(o.userId==t)throw new Error("Cannot delete current account.");if(!o.hasPermission("systemUsers","delete"))throw new Error(e.forbidden);const i=await s();await i.users.deleteUser(t),a("/dashboard/security/systemUsers"),n("/dashboard/security/systemUsers")}async function y(t){const o=await r();if(o.userId==t)throw new Error("Cannot ban current account.");if(!o.hasPermission("systemUsers","update"))throw new Error(e.forbidden);const i=await s();await i.users.banUser(t),a(`/dashboard/security/systemUsers/${t}`)}async function h(t){const o=await r();if(o.userId==t)throw new Error("Cannot ban current account.");if(!o.hasPermission("systemUsers","update"))throw new Error(e.forbidden);const i=await s();await i.users.unbanUser(t),a(`/dashboard/security/systemUsers/${t}`)}export{y as systemUserBanAction,f as systemUserDeleteAction,m as systemUserDetailsUpdateAction,c as systemUserListReadAction,w as systemUserProfileImageDeleteAction,u as systemUserReadAction,d as systemUserRoleUpdateAction,h as systemUserUnbanAction};
|
|
2
2
|
//# sourceMappingURL=systemUsers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemUsers.js","sources":["../../../../src/server/clerk/actions/systemUsers.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type User } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport type { SystemUserRoleUpdateState } from \"../../../client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm\";\nimport { cache } from \"react\";\nimport type { SystemUserDetailsUpdateState } from \"../../../client/ui/_index\";\nimport { revalidatePath } from \"next/cache\";\nimport { systemUserUpdateSchema } from \"../schemas/systemUser\";\nimport z from \"zod\";\nimport { redirect } from \"next/navigation\";\n\nexport const systemUserListReadAction = cache(\n async (\n params: ClerkUserListParams,\n removeCurrent: boolean = false,\n ): Promise<PaginatedResponse<User[]>> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUserList = await client.users.getUserList(params);\n\n if (removeCurrent) {\n systemUserList.data = systemUserList.data.filter(\n (su) => su.id !== session.userId,\n );\n systemUserList.totalCount--;\n }\n\n return systemUserList;\n },\n);\n\nexport const systemUserReadAction = cache(async (id: string) => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUser = await client.users.getUser(id);\n\n if (!systemUser) {\n throw new Error(apiRes.notFound(`System User: ${id}`));\n }\n\n return systemUser;\n});\n\nexport async function systemUserRoleUpdateAction(\n userId: string,\n _: SystemUserRoleUpdateState,\n formData: FormData,\n): Promise<SystemUserRoleUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const role = formData.get(\"role\");\n
|
|
1
|
+
{"version":3,"file":"systemUsers.js","sources":["../../../../src/server/clerk/actions/systemUsers.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type User } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport type { SystemUserRoleUpdateState } from \"../../../client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm\";\nimport { cache } from \"react\";\nimport type { SystemUserDetailsUpdateState } from \"../../../client/ui/_index\";\nimport { revalidatePath } from \"next/cache\";\nimport { systemUserUpdateSchema } from \"../schemas/systemUser\";\nimport z from \"zod\";\nimport { redirect } from \"next/navigation\";\n\nexport const systemUserListReadAction = cache(\n async (\n params: ClerkUserListParams,\n removeCurrent: boolean = false,\n ): Promise<PaginatedResponse<User[]>> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUserList = await client.users.getUserList(params);\n\n if (removeCurrent) {\n systemUserList.data = systemUserList.data.filter(\n (su) => su.id !== session.userId,\n );\n systemUserList.totalCount--;\n }\n\n return systemUserList;\n },\n);\n\nexport const systemUserReadAction = cache(async (id: string) => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUser = await client.users.getUser(id);\n\n if (!systemUser) {\n throw new Error(apiRes.notFound(`System User: ${id}`));\n }\n\n return systemUser;\n});\n\nexport async function systemUserRoleUpdateAction(\n userId: string,\n _: SystemUserRoleUpdateState,\n formData: FormData,\n): Promise<SystemUserRoleUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const role = formData.get(\"role\");\n\n const client = await clerkClient();\n const { publicMetadata } = await client.users.getUser(userId);\n await client.users.updateUserMetadata(userId, {\n publicMetadata: {\n ...publicMetadata,\n role,\n },\n });\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserDetailsUpdateAction(\n userId: string,\n _: SystemUserDetailsUpdateState,\n formData: FormData,\n): Promise<SystemUserDetailsUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const formDataObj = Object.fromEntries(formData.entries());\n const { success, data, error } =\n systemUserUpdateSchema.safeParse(formDataObj);\n if (!success) {\n const flattenedError = z.flattenError(error);\n return apiRes.actionFail(\n flattenedError.formErrors.join(\"\\n\"),\n flattenedError.fieldErrors,\n );\n }\n const client = await clerkClient();\n\n if (data.imageFile instanceof File) {\n await client.users.updateUserProfileImage(userId, { file: data.imageFile });\n }\n if (data.firstName || data.lastName) {\n await client.users.updateUser(userId, {\n firstName: data.firstName,\n lastName: data.lastName,\n });\n }\n\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserProfileImageDeleteAction(userId: User[\"id\"]) {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const client = await clerkClient();\n await client.users.deleteUserProfileImage(userId);\n\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserDeleteAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId)\n throw new Error(\"Cannot delete current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"delete\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.deleteUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers`);\n redirect(`/dashboard/security/systemUsers`);\n}\n\nexport async function systemUserBanAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId) throw new Error(\"Cannot ban current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"update\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.banUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n}\nexport async function systemUserUnbanAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId) throw new Error(\"Cannot ban current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"update\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.unbanUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n}\n"],"names":["systemUserListReadAction","cache","async","params","removeCurrent","session","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","systemUserList","users","getUserList","data","filter","su","id","userId","totalCount","systemUserReadAction","systemUser","getUser","notFound","systemUserRoleUpdateAction","_","formData","role","get","publicMetadata","updateUserMetadata","revalidatePath","actionSuccess","systemUserDetailsUpdateAction","formDataObj","Object","fromEntries","entries","success","error","systemUserUpdateSchema","safeParse","flattenedError","z","flattenError","actionFail","formErrors","join","fieldErrors","imageFile","File","updateUserProfileImage","file","firstName","lastName","updateUser","systemUserProfileImageDeleteAction","deleteUserProfileImage","systemUserDeleteAction","deleteUser","redirect","systemUserBanAction","banUser","systemUserUnbanAction","unbanUser"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"private": false,
|
|
8
|
-
"version": "0.0.
|
|
8
|
+
"version": "0.0.23",
|
|
9
9
|
"keywords": [
|
|
10
10
|
"@studiocubics",
|
|
11
11
|
"cubics",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"lucide-react": "^0.554.0",
|
|
38
38
|
"next-themes": "^0.4.6",
|
|
39
39
|
"zod": "^4.3.6",
|
|
40
|
-
"@studiocubics/components": "^0.0.
|
|
41
|
-
"@studiocubics/hooks": "^0.0.
|
|
42
|
-
"@studiocubics/next": "^0.0.
|
|
43
|
-
"@studiocubics/utils": "^0.0.
|
|
40
|
+
"@studiocubics/components": "^0.0.23",
|
|
41
|
+
"@studiocubics/hooks": "^0.0.23",
|
|
42
|
+
"@studiocubics/next": "^0.0.23",
|
|
43
|
+
"@studiocubics/utils": "^0.0.23"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@eslint/js": "^9.39.1",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"rollup-plugin-bundle-stats": "^4.21.9",
|
|
62
62
|
"typescript": "^5.9.3",
|
|
63
63
|
"typescript-eslint": "^8.46.4",
|
|
64
|
-
"@studiocubics/types": "^0.0.
|
|
64
|
+
"@studiocubics/types": "^0.0.23"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@clerk/nextjs": ">= 6",
|