Skip to content

Commit c7ddbed

Browse files
committed
chore(*): updated shad example app deps and home page
1 parent ab6d58b commit c7ddbed

File tree

3 files changed

+120
-77
lines changed

3 files changed

+120
-77
lines changed

examples/shadcn/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"dependencies": {
1515
"@hookform/resolvers": "^5.2.2",
16-
"@invertase/firebaseui-core": "0.0.4",
16+
"@invertase/firebaseui-core": "0.0.5",
1717
"@invertase/firebaseui-react": "workspace:*",
1818
"@invertase/firebaseui-styles": "0.0.9",
1919
"@invertase/firebaseui-translations": "0.0.4",

examples/shadcn/src/App.tsx

Lines changed: 92 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -14,75 +14,104 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { NavLink } from "react-router";
17+
import { Link, useNavigate } from "react-router";
18+
import { routes } from "./routes";
1819
import { useUser } from "./firebase/hooks";
20+
import { auth } from "./firebase/firebase";
21+
import { multiFactor, sendEmailVerification, signOut } from "firebase/auth";
1922

2023
function App() {
2124
const user = useUser();
2225

26+
if (user) {
27+
return <AuthenticatedApp />;
28+
}
29+
30+
return <UnauthenticatedApp />;
31+
}
32+
33+
function UnauthenticatedApp() {
34+
return (
35+
<div className="max-w-sm mx-auto pt-36 space-y-6 pb-36">
36+
<div className="text-center space-y-4">
37+
<img src="/firebase-logo-inverted.png" alt="Firebase UI" className="hidden dark:block h-36 mx-auto" />
38+
<img src="/firebase-logo.png" alt="Firebase UI" className="block dark:hidden h-36 mx-auto" />
39+
<p className="text-sm text-gray-700 dark:text-gray-300">
40+
Welcome to Firebase UI, choose an example screen below to get started!
41+
</p>
42+
</div>
43+
<div className="border border-neutral-800 rounded divide-y divide-neutral-800 overflow-hidden">
44+
{routes.map((route) => (
45+
<Link
46+
key={route.path}
47+
to={route.path}
48+
className="flex items-center justify-between hover:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 p-4"
49+
>
50+
<div className="space-y-1">
51+
<h2 className="font-medium text-sm">{route.name}</h2>
52+
<p className="text-xs text-gray-400 dark:text-gray-300">{route.description}</p>
53+
</div>
54+
<div>
55+
<span className="text-xl">&rarr;</span>
56+
</div>
57+
</Link>
58+
))}
59+
</div>
60+
</div>
61+
);
62+
}
63+
64+
function AuthenticatedApp() {
65+
const user = useUser()!;
66+
const mfa = multiFactor(user);
67+
const navigate = useNavigate();
68+
2369
return (
24-
<div className="p-8 ">
25-
<h1 className="text-3xl font-bold mb-6">Firebase UI Demo</h1>
26-
<div className="mb-6">{user && <div>Welcome: {user.email || user.phoneNumber}</div>}</div>
27-
<div>
28-
<h2 className="text-2xl font-bold mb-4">Auth Screens</h2>
29-
<ul className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4">
30-
<li>
31-
<NavLink to="/screens/sign-in-auth-screen" className="text-blue-500 hover:underline">
32-
Sign In Auth Screen
33-
</NavLink>
34-
</li>
35-
<li>
36-
<NavLink to="/screens/sign-in-auth-screen-w-handlers" className="text-blue-500 hover:underline">
37-
Sign In Auth Screen with Handlers
38-
</NavLink>
39-
</li>
40-
<li>
41-
<NavLink to="/screens/sign-in-auth-screen-w-oauth" className="text-blue-500 hover:underline">
42-
Sign In Auth Screen with OAuth
43-
</NavLink>
44-
</li>
45-
<li>
46-
<NavLink to="/screens/email-link-auth-screen" className="text-blue-500 hover:underline">
47-
Email Link Auth Screen
48-
</NavLink>
49-
</li>
50-
<li>
51-
<NavLink to="/screens/email-link-auth-screen-w-oauth" className="text-blue-500 hover:underline">
52-
Email Link Auth Screen with OAuth
53-
</NavLink>
54-
</li>
55-
<li>
56-
<NavLink to="/screens/phone-auth-screen" className="text-blue-500 hover:underline">
57-
Phone Auth Screen
58-
</NavLink>
59-
</li>
60-
<li>
61-
<NavLink to="/screens/phone-auth-screen-w-oauth" className="text-blue-500 hover:underline">
62-
Phone Auth Screen with OAuth
63-
</NavLink>
64-
</li>
65-
<li>
66-
<NavLink to="/screens/sign-up-auth-screen" className="text-blue-500 hover:underline">
67-
Sign Up Auth Screen
68-
</NavLink>
69-
</li>
70-
<li>
71-
<NavLink to="/screens/sign-up-auth-screen-w-oauth" className="text-blue-500 hover:underline">
72-
Sign Up Auth Screen with OAuth
73-
</NavLink>
74-
</li>
75-
<li>
76-
<NavLink to="/screens/oauth-screen" className="text-blue-500 hover:underline">
77-
OAuth Screen
78-
</NavLink>
79-
</li>
80-
<li>
81-
<NavLink to="/screens/password-reset-screen" className="text-blue-500 hover:underline">
82-
Password Reset Screen
83-
</NavLink>
84-
</li>
85-
</ul>
70+
<div className="max-w-sm mx-auto pt-36 space-y-6 pb-36">
71+
<div className="border border-neutral-800 rounded p-4 space-y-4">
72+
<h1 className="text-md font-medium">Welcome, {user.displayName || user.email || user.phoneNumber}</h1>
73+
{user.emailVerified ? (
74+
<div className="text-green-500">Email verified</div>
75+
) : (
76+
<button
77+
className="bg-red-500 text-white px-3 py-1.5 rounded text-sm"
78+
onClick={async () => {
79+
try {
80+
await sendEmailVerification(user);
81+
alert("Email verification sent, please check your email");
82+
} catch (error) {
83+
console.error(error);
84+
alert("Error sending email verification, check console");
85+
}
86+
}}
87+
>
88+
Verify Email &rarr;
89+
</button>
90+
)}
91+
<hr className="opacity-20" />
92+
<h2 className="text-sm font-medium">Multi-factor Authentication</h2>
93+
{mfa.enrolledFactors.map((factor) => {
94+
return (
95+
<div key={factor.factorId}>
96+
{factor.factorId} - {factor.displayName}
97+
</div>
98+
);
99+
})}
100+
<button
101+
className="bg-blue-500 text-white px-3 py-1.5 rounded text-sm"
102+
onClick={() => {
103+
navigate("/screens/mfa-enrollment-screen");
104+
}}
105+
>
106+
Add MFA Factor &rarr;
107+
</button>
108+
<hr className="opacity-20" />
109+
<button
110+
className="bg-blue-500 text-white px-3 py-1.5 rounded text-sm"
111+
onClick={async () => await signOut(auth)}
112+
>
113+
Sign Out &rarr;
114+
</button>
86115
</div>
87116
</div>
88117
);

pnpm-lock.yaml

Lines changed: 27 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)