From e8cd469ee415a904e9aa4bc8f532b76e24c53470 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Sun, 30 Mar 2025 19:39:59 -0300 Subject: [PATCH] refactor: update component exports to named exports and enhance UI structure --- README.md | 11 - {src-tauri => src-rust}/.gitignore | 0 {src-tauri => src-rust}/Cargo.lock | 0 {src-tauri => src-rust}/Cargo.toml | 0 {src-tauri => src-rust}/build.rs | 0 .../capabilities/default.json | 0 {src-tauri => src-rust}/icons/128x128.png | Bin {src-tauri => src-rust}/icons/128x128@2x.png | Bin {src-tauri => src-rust}/icons/32x32.png | Bin .../icons/Square107x107Logo.png | Bin .../icons/Square142x142Logo.png | Bin .../icons/Square150x150Logo.png | Bin .../icons/Square284x284Logo.png | Bin .../icons/Square30x30Logo.png | Bin .../icons/Square310x310Logo.png | Bin .../icons/Square44x44Logo.png | Bin .../icons/Square71x71Logo.png | Bin .../icons/Square89x89Logo.png | Bin {src-tauri => src-rust}/icons/StoreLogo.png | Bin {src-tauri => src-rust}/icons/icon.icns | Bin {src-tauri => src-rust}/icons/icon.ico | Bin {src-tauri => src-rust}/icons/icon.png | Bin {src-tauri => src-rust}/src/drive.rs | 0 {src-tauri => src-rust}/src/lib.rs | 0 {src-tauri => src-rust}/src/main.rs | 0 {src-tauri => src-rust}/src/sync.rs | 0 {src-tauri => src-rust}/tauri.conf.json | 0 src/settings/account/account-form.tsx | 107 ++++----- src/settings/account/page.tsx | 20 +- src/settings/appearance/appearance-form.tsx | 91 ++++---- src/settings/appearance/page.tsx | 20 +- src/settings/components/sidebar-nav.tsx | 27 +-- src/settings/display/display-form.tsx | 46 ++-- src/settings/display/page.tsx | 17 +- src/settings/index.tsx | 17 +- src/settings/layout.tsx | 43 ++-- .../notifications/notifications-form.tsx | 211 +++++++++--------- src/settings/notifications/page.tsx | 17 +- src/settings/profile-form.tsx | 95 +++----- vite.config.ts | 4 +- 40 files changed, 325 insertions(+), 401 deletions(-) rename {src-tauri => src-rust}/.gitignore (100%) rename {src-tauri => src-rust}/Cargo.lock (100%) rename {src-tauri => src-rust}/Cargo.toml (100%) rename {src-tauri => src-rust}/build.rs (100%) rename {src-tauri => src-rust}/capabilities/default.json (100%) rename {src-tauri => src-rust}/icons/128x128.png (100%) rename {src-tauri => src-rust}/icons/128x128@2x.png (100%) rename {src-tauri => src-rust}/icons/32x32.png (100%) rename {src-tauri => src-rust}/icons/Square107x107Logo.png (100%) rename {src-tauri => src-rust}/icons/Square142x142Logo.png (100%) rename {src-tauri => src-rust}/icons/Square150x150Logo.png (100%) rename {src-tauri => src-rust}/icons/Square284x284Logo.png (100%) rename {src-tauri => src-rust}/icons/Square30x30Logo.png (100%) rename {src-tauri => src-rust}/icons/Square310x310Logo.png (100%) rename {src-tauri => src-rust}/icons/Square44x44Logo.png (100%) rename {src-tauri => src-rust}/icons/Square71x71Logo.png (100%) rename {src-tauri => src-rust}/icons/Square89x89Logo.png (100%) rename {src-tauri => src-rust}/icons/StoreLogo.png (100%) rename {src-tauri => src-rust}/icons/icon.icns (100%) rename {src-tauri => src-rust}/icons/icon.ico (100%) rename {src-tauri => src-rust}/icons/icon.png (100%) rename {src-tauri => src-rust}/src/drive.rs (100%) rename {src-tauri => src-rust}/src/lib.rs (100%) rename {src-tauri => src-rust}/src/main.rs (100%) rename {src-tauri => src-rust}/src/sync.rs (100%) rename {src-tauri => src-rust}/tauri.conf.json (100%) diff --git a/README.md b/README.md index c856e75..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,11 +0,0 @@ -# Tauri + React + Typescript - -This template should help get you started developing with Tauri, React and Typescript in Vite. - -## Recommended IDE Setup - -- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) - - - -upx --best --lzma /home/rodriguez/Sources/my-tauri-app/src-tauri/target/release/my-tauri-app diff --git a/src-tauri/.gitignore b/src-rust/.gitignore similarity index 100% rename from src-tauri/.gitignore rename to src-rust/.gitignore diff --git a/src-tauri/Cargo.lock b/src-rust/Cargo.lock similarity index 100% rename from src-tauri/Cargo.lock rename to src-rust/Cargo.lock diff --git a/src-tauri/Cargo.toml b/src-rust/Cargo.toml similarity index 100% rename from src-tauri/Cargo.toml rename to src-rust/Cargo.toml diff --git a/src-tauri/build.rs b/src-rust/build.rs similarity index 100% rename from src-tauri/build.rs rename to src-rust/build.rs diff --git a/src-tauri/capabilities/default.json b/src-rust/capabilities/default.json similarity index 100% rename from src-tauri/capabilities/default.json rename to src-rust/capabilities/default.json diff --git a/src-tauri/icons/128x128.png b/src-rust/icons/128x128.png similarity index 100% rename from src-tauri/icons/128x128.png rename to src-rust/icons/128x128.png diff --git a/src-tauri/icons/128x128@2x.png b/src-rust/icons/128x128@2x.png similarity index 100% rename from src-tauri/icons/128x128@2x.png rename to src-rust/icons/128x128@2x.png diff --git a/src-tauri/icons/32x32.png b/src-rust/icons/32x32.png similarity index 100% rename from src-tauri/icons/32x32.png rename to src-rust/icons/32x32.png diff --git a/src-tauri/icons/Square107x107Logo.png b/src-rust/icons/Square107x107Logo.png similarity index 100% rename from src-tauri/icons/Square107x107Logo.png rename to src-rust/icons/Square107x107Logo.png diff --git a/src-tauri/icons/Square142x142Logo.png b/src-rust/icons/Square142x142Logo.png similarity index 100% rename from src-tauri/icons/Square142x142Logo.png rename to src-rust/icons/Square142x142Logo.png diff --git a/src-tauri/icons/Square150x150Logo.png b/src-rust/icons/Square150x150Logo.png similarity index 100% rename from src-tauri/icons/Square150x150Logo.png rename to src-rust/icons/Square150x150Logo.png diff --git a/src-tauri/icons/Square284x284Logo.png b/src-rust/icons/Square284x284Logo.png similarity index 100% rename from src-tauri/icons/Square284x284Logo.png rename to src-rust/icons/Square284x284Logo.png diff --git a/src-tauri/icons/Square30x30Logo.png b/src-rust/icons/Square30x30Logo.png similarity index 100% rename from src-tauri/icons/Square30x30Logo.png rename to src-rust/icons/Square30x30Logo.png diff --git a/src-tauri/icons/Square310x310Logo.png b/src-rust/icons/Square310x310Logo.png similarity index 100% rename from src-tauri/icons/Square310x310Logo.png rename to src-rust/icons/Square310x310Logo.png diff --git a/src-tauri/icons/Square44x44Logo.png b/src-rust/icons/Square44x44Logo.png similarity index 100% rename from src-tauri/icons/Square44x44Logo.png rename to src-rust/icons/Square44x44Logo.png diff --git a/src-tauri/icons/Square71x71Logo.png b/src-rust/icons/Square71x71Logo.png similarity index 100% rename from src-tauri/icons/Square71x71Logo.png rename to src-rust/icons/Square71x71Logo.png diff --git a/src-tauri/icons/Square89x89Logo.png b/src-rust/icons/Square89x89Logo.png similarity index 100% rename from src-tauri/icons/Square89x89Logo.png rename to src-rust/icons/Square89x89Logo.png diff --git a/src-tauri/icons/StoreLogo.png b/src-rust/icons/StoreLogo.png similarity index 100% rename from src-tauri/icons/StoreLogo.png rename to src-rust/icons/StoreLogo.png diff --git a/src-tauri/icons/icon.icns b/src-rust/icons/icon.icns similarity index 100% rename from src-tauri/icons/icon.icns rename to src-rust/icons/icon.icns diff --git a/src-tauri/icons/icon.ico b/src-rust/icons/icon.ico similarity index 100% rename from src-tauri/icons/icon.ico rename to src-rust/icons/icon.ico diff --git a/src-tauri/icons/icon.png b/src-rust/icons/icon.png similarity index 100% rename from src-tauri/icons/icon.png rename to src-rust/icons/icon.png diff --git a/src-tauri/src/drive.rs b/src-rust/src/drive.rs similarity index 100% rename from src-tauri/src/drive.rs rename to src-rust/src/drive.rs diff --git a/src-tauri/src/lib.rs b/src-rust/src/lib.rs similarity index 100% rename from src-tauri/src/lib.rs rename to src-rust/src/lib.rs diff --git a/src-tauri/src/main.rs b/src-rust/src/main.rs similarity index 100% rename from src-tauri/src/main.rs rename to src-rust/src/main.rs diff --git a/src-tauri/src/sync.rs b/src-rust/src/sync.rs similarity index 100% rename from src-tauri/src/sync.rs rename to src-rust/src/sync.rs diff --git a/src-tauri/tauri.conf.json b/src-rust/tauri.conf.json similarity index 100% rename from src-tauri/tauri.conf.json rename to src-rust/tauri.conf.json diff --git a/src/settings/account/account-form.tsx b/src/settings/account/account-form.tsx index 22e71d2..4463157 100644 --- a/src/settings/account/account-form.tsx +++ b/src/settings/account/account-form.tsx @@ -1,10 +1,7 @@ import React, { useState } from 'react'; -import { View, Text, TouchableOpacity } from 'react-native'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; -import DateTimePicker from '@react-native-community/datetimepicker'; -import { Picker } from '@react-native-picker/picker'; const accountFormSchema = z.object({ name: z @@ -55,28 +52,23 @@ export function AccountForm() { }; return ( - +
( - - Name - + + onChange(e.target.value)} value={value} placeholder="Your name" /> - +

This is the name that will be displayed on your profile and in emails. - - +

+
)} /> @@ -84,36 +76,32 @@ export function AccountForm() { control={control} name="dob" render={({ field: { onChange, value } }) => ( - - Date of birth - setShowDatePicker(true)} +
+ + {showDatePicker && ( - { + { setShowDatePicker(false); - if (selectedDate) { - onChange(selectedDate); + if (e.target.value) { + onChange(new Date(e.target.value)); } }} + className="mt-1 p-1 border rounded" /> )} - +

Your date of birth is used to calculate your age. - - +

+
)} /> @@ -121,35 +109,32 @@ export function AccountForm() { control={control} name="language" render={({ field: { onChange, value } }) => ( - - Language - + + +

This is the language that will be used in the dashboard. - - +

+ )} /> - - Update account - -
+ Update account + + ); } diff --git a/src/settings/account/page.tsx b/src/settings/account/page.tsx index 69022a1..3a8c664 100644 --- a/src/settings/account/page.tsx +++ b/src/settings/account/page.tsx @@ -1,19 +1,17 @@ import React from 'react'; -import { View, Text } from 'react-native'; import { AccountForm } from './account-form'; export default function SettingsAccountPage() { return ( - - - Account - - Update your account settings. Set your preferred language and - timezone. - - - +
+
+

Account

+

+ Update your account settings. Set your preferred language and timezone. +

+
+
- +
); } diff --git a/src/settings/appearance/appearance-form.tsx b/src/settings/appearance/appearance-form.tsx index 853640f..f7cac53 100644 --- a/src/settings/appearance/appearance-form.tsx +++ b/src/settings/appearance/appearance-form.tsx @@ -1,6 +1,4 @@ import React from 'react'; -import { View, Text, TouchableOpacity } from 'react-native'; -import { Picker } from '@react-native-picker/picker'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -32,75 +30,64 @@ export function AppearanceForm() { }; return ( - - - Font +
+
+ ( - onChange(e.target.value)} > - - - - + + + + )} /> - +

Set the font you want to use in the dashboard. - - +

+
- - Theme - +
+ +

Select the theme for the dashboard. - +

( - - onChange('light')} +
+ + +
)} /> -
+
- - Update preferences - -
+ Update preferences + +
); } diff --git a/src/settings/appearance/page.tsx b/src/settings/appearance/page.tsx index 37aac20..9776295 100644 --- a/src/settings/appearance/page.tsx +++ b/src/settings/appearance/page.tsx @@ -1,19 +1,17 @@ import React from 'react'; -import { View, Text } from 'react-native'; import { AppearanceForm } from './appearance-form'; export default function SettingsAppearancePage() { return ( - - - Appearance - - Customize the appearance of the app. Automatically switch between day - and night themes. - - - +
+
+

Appearance

+

+ Customize the appearance of the app. Automatically switch between day and night themes. +

+
+
- +
); } diff --git a/src/settings/components/sidebar-nav.tsx b/src/settings/components/sidebar-nav.tsx index bb87d63..97ae613 100644 --- a/src/settings/components/sidebar-nav.tsx +++ b/src/settings/components/sidebar-nav.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { View, Text, TouchableOpacity } from 'react-native'; -import { useNavigation, useRoute } from '@react-navigation/native'; +import { useNavigate, useLocation } from 'react-router-dom'; interface SidebarNavProps { items: { @@ -10,24 +9,22 @@ interface SidebarNavProps { } export function SidebarNav({ items }: SidebarNavProps) { - const navigation = useNavigation(); - const route = useRoute(); + const navigate = useNavigate(); + const location = useLocation(); return ( - +
{items.map((item) => ( - navigation.navigate(item.href)} - style={{ - padding: 8, - backgroundColor: route.name === item.href ? '#f0f0f0' : 'transparent', - borderRadius: 4, - }} + onClick={() => navigate(item.href)} + className={`px-3 py-2 rounded-md text-sm font-medium ${ + location.pathname === item.href ? 'bg-gray-100' : 'hover:bg-gray-50' + }`} > - {item.title} - + {item.title} + ))} - +
); } diff --git a/src/settings/display/display-form.tsx b/src/settings/display/display-form.tsx index 2166e9a..b9a8324 100644 --- a/src/settings/display/display-form.tsx +++ b/src/settings/display/display-form.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { View, Text, Switch, TouchableOpacity } from 'react-native'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -36,44 +35,43 @@ export function DisplayForm() { }; return ( - - Sidebar - +
+

Sidebar

+

Select the items you want to display in the sidebar. - +

{items.map((item) => ( ( - - { - const updatedValue = checked +
+ { + const updatedValue = e.target.checked ? [...field.value, item.id] : field.value?.filter((value) => value !== item.id); field.onChange(updatedValue); }} + className="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" /> - {item.label} - + +
)} /> ))} - - Update display - -
+ Update display + +
); } diff --git a/src/settings/display/page.tsx b/src/settings/display/page.tsx index 09ed036..a4da4ad 100644 --- a/src/settings/display/page.tsx +++ b/src/settings/display/page.tsx @@ -1,18 +1,17 @@ import React from 'react'; -import { View, Text } from 'react-native'; import { DisplayForm } from './display-form'; export default function SettingsDisplayPage() { return ( - - - Display - +
+
+

Display

+

Turn items on or off to control what's displayed in the app. - - - +

+
+
- +
); } diff --git a/src/settings/index.tsx b/src/settings/index.tsx index 8d0bde9..4121c82 100644 --- a/src/settings/index.tsx +++ b/src/settings/index.tsx @@ -1,18 +1,17 @@ import React from 'react'; -import { View, Text } from 'react-native'; import { ProfileForm } from './profile-form'; export default function SettingsProfilePage() { return ( - - - Profile - +
+
+

Profile

+

This is how others will see you on the site. - - - +

+
+
- +
); } diff --git a/src/settings/layout.tsx b/src/settings/layout.tsx index 0658a41..56ac808 100644 --- a/src/settings/layout.tsx +++ b/src/settings/layout.tsx @@ -1,48 +1,47 @@ import React from 'react'; -import { View, Text, ScrollView } from 'react-native'; import { SidebarNav } from './components/sidebar-nav'; const sidebarNavItems = [ { title: "Profile", - href: "/setttings", + href: "/settings", }, { title: "Account", - href: "/setttings/account", + href: "/settings/account", }, { title: "Appearance", - href: "/setttings/appearance", + href: "/settings/appearance", }, { title: "Notifications", - href: "/setttings/notifications", + href: "/settings/notifications", }, { title: "Display", - href: "/setttings/display", + href: "/settings/display", }, ]; -export default function SettingsLayout({ children }) { +export default function SettingsLayout({ children }: { children: React.ReactNode }) { return ( - - - - Settings - +
+
+
+

Settings

+

Manage your account settings and set e-mail preferences. - - - - - +

+
+
+
+
- - {children} - - - +
+
{children}
+
+
+
); } diff --git a/src/settings/notifications/notifications-form.tsx b/src/settings/notifications/notifications-form.tsx index 74a000c..394c22c 100644 --- a/src/settings/notifications/notifications-form.tsx +++ b/src/settings/notifications/notifications-form.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { View, Text, Switch, TouchableOpacity } from 'react-native'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -35,145 +34,145 @@ export function NotificationsForm() { }; return ( - - - Notify me about... +
+
+ ( - - onChange('all')} - > - +
+ onChange('all')} + className="h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500" /> - All new messages - - onChange('mentions')} - > - + All new messages + +
+
+ onChange('mentions')} + className="h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500" /> - Direct messages and mentions - - onChange('none')} - > - + Direct messages and mentions + +
+
+ onChange('none')} + className="h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500" /> - Nothing - - + +
+
)} /> - +
- - Email Notifications +
+

Email Notifications

( - - - Communication emails - Receive emails about your account activity. - - - + render={({ field: { onChange, value } }) => ( +
+
+ +

+ Receive emails about your account activity. +

+
+ onChange(e.target.checked)} + className="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" + /> +
)} /> ( - - - Marketing emails - Receive emails about new products, features, and more. - - - +
+
+ +

+ Receive emails about new products, features, and more. +

+
+ onChange(e.target.checked)} + className="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" + /> +
)} /> ( - - - Social emails - Receive emails for friend requests, follows, and more. - - - +
+
+ +

+ Receive emails for friend requests, follows, and more. +

+
+ onChange(e.target.checked)} + className="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" + /> +
)} /> ( - - - Security emails - Receive emails about your account activity and security. - - - +
+
+ +

+ Receive emails about your account activity and security. +

+
+ +
)} /> - +
- - Update notifications - -
+ Update notifications + +
); } diff --git a/src/settings/notifications/page.tsx b/src/settings/notifications/page.tsx index a56b493..6aa2c25 100644 --- a/src/settings/notifications/page.tsx +++ b/src/settings/notifications/page.tsx @@ -1,18 +1,17 @@ import React from 'react'; -import { View, Text } from 'react-native'; import { NotificationsForm } from './notifications-form'; export default function SettingsNotificationsPage() { return ( - - - Notifications - +
+
+

Notifications

+

Configure how you receive notifications. - - - +

+
+
- +
); } diff --git a/src/settings/profile-form.tsx b/src/settings/profile-form.tsx index 06e1749..c83dd3e 100644 --- a/src/settings/profile-form.tsx +++ b/src/settings/profile-form.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { View, Text, TextInput, TouchableOpacity } from 'react-native'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -38,30 +37,25 @@ export function ProfileForm() { }; return ( - +
( - - Username - + + onChange(e.target.value)} value={value} placeholder="Enter username" /> - {error && {error.message}} - + {error &&

{error.message}

} +

This is your public display name. It can be your real name or a pseudonym. You can only change this once every 30 days. - - +

+
)} /> @@ -69,26 +63,21 @@ export function ProfileForm() { control={control} name="email" render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => ( - - Email - + + onChange(e.target.value)} value={value} placeholder="Enter email" - keyboardType="email-address" + type="email" /> - {error && {error.message}} - + {error &&

{error.message}

} +

You can manage verified email addresses in your email settings. - - +

+
)} /> @@ -96,42 +85,30 @@ export function ProfileForm() { control={control} name="bio" render={({ field: { onChange, onBlur, value }, fieldState: { error } }) => ( - - Bio - + +