Skip to content

Commit a3e1e88

Browse files
committed
chore: fix compile errors
1 parent d403c70 commit a3e1e88

File tree

10 files changed

+68
-96
lines changed

10 files changed

+68
-96
lines changed

.githooks/pre-push

100644100755
File mode changed.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"build:ssr": "vue-tsc && vite build && vite build --ssr",
77
"dev": "vite",
88
"lint": "eslint .",
9-
"lint:fix": "eslint . --fix"
9+
"lint:fix": "eslint . --fix",
10+
"types": "vue-tsc --noEmit"
1011
},
1112
"dependencies": {
1213
"@inertiajs/vue3": "^2.0.0",

resources/js/components/AppHeader.vue

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet";
2020
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
2121
import UserMenuContent from "@/components/UserMenuContent.vue";
22-
import { getInitials } from "@/composables/useInitials";
2322
2423
interface Props {
2524
breadcrumbs?: BreadcrumbItem[];
@@ -116,10 +115,14 @@ const rightNavItems: NavItem[] = [
116115
<div class="hidden h-full lg:flex lg:flex-1">
117116
<NavigationMenu class="ml-10 flex h-full items-stretch">
118117
<NavigationMenuList class="flex h-full items-stretch space-x-2">
119-
<NavigationMenuItem v-for="(item, index) in mainNavItems" :key="index" class="relative flex h-full items-center">
118+
<NavigationMenuItem
119+
v-for="(item, index) in mainNavItems" :key="index"
120+
class="relative flex h-full items-center"
121+
>
120122
<Link :href="item.href">
121123
<NavigationMenuLink
122-
class="h-9 cursor-pointer px-3" :class="[navigationMenuTriggerStyle(), activeItemStyles(item.href)]"
124+
:class="[navigationMenuTriggerStyle(), activeItemStyles(item.href)]"
125+
class="h-9 cursor-pointer px-3"
123126
>
124127
<component :is="item.icon" v-if="item.icon" class="mr-2 h-4 w-4" />
125128
{{ item.title }}
@@ -145,10 +148,16 @@ const rightNavItems: NavItem[] = [
145148
<TooltipProvider :delay-duration="0">
146149
<Tooltip>
147150
<TooltipTrigger>
148-
<Button as-child class="group h-9 w-9 cursor-pointer" size="icon" variant="ghost">
151+
<Button
152+
as-child class="group h-9 w-9 cursor-pointer" size="icon"
153+
variant="ghost"
154+
>
149155
<a :href="item.href" rel="noopener noreferrer" target="_blank">
150156
<span class="sr-only">{{ item.title }}</span>
151-
<component :is="item.icon" class="size-5 opacity-80 group-hover:opacity-100" />
157+
<component
158+
:is="item.icon"
159+
class="size-5 opacity-80 group-hover:opacity-100"
160+
/>
152161
</a>
153162
</Button>
154163
</TooltipTrigger>
@@ -161,17 +170,22 @@ const rightNavItems: NavItem[] = [
161170
</div>
162171
</div>
163172

164-
<DropdownMenu>
173+
<DropdownMenu v-if="auth.user">
165174
<DropdownMenuTrigger :as-child="true">
166175
<Button
167176
class="focus-within:ring-primary relative size-10 w-auto rounded-full p-1 focus-within:ring-2"
168177
size="icon"
169178
variant="ghost"
170179
>
171180
<Avatar class="size-8 overflow-hidden rounded-full">
172-
<AvatarImage v-if="auth.user.avatar" :alt="auth.user.name" :src="auth.user.avatar" />
173-
<AvatarFallback class="rounded-lg bg-neutral-200 font-semibold text-black dark:bg-neutral-700 dark:text-white">
174-
{{ getInitials(auth.user?.name) }}
181+
<AvatarImage
182+
v-if="auth.user?.profileImage" :alt="auth.user.fullName"
183+
:src="auth.user.profileImage"
184+
/>
185+
<AvatarFallback
186+
class="rounded-lg bg-neutral-200 font-semibold text-black dark:bg-neutral-700 dark:text-white"
187+
>
188+
{{ auth.user?.initials }}
175189
</AvatarFallback>
176190
</Avatar>
177191
</Button>

resources/js/components/NavUser.vue

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<script setup lang="ts">
2-
import type { SharedData, User } from "@/types";
1+
<script lang="ts" setup>
2+
import type { SharedData } from "@/types";
33
import { usePage } from "@inertiajs/vue3";
44
import { ChevronsUpDown } from "lucide-vue-next";
55
import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
@@ -8,7 +8,7 @@ import UserInfo from "@/components/UserInfo.vue";
88
import UserMenuContent from "./UserMenuContent.vue";
99
1010
const page = usePage<SharedData>();
11-
const user = page.props.auth.user as User;
11+
const user = page.props.auth.user as App.Data.UserData;
1212
const { isMobile, state } = useSidebar();
1313
</script>
1414

@@ -17,16 +17,19 @@ const { isMobile, state } = useSidebar();
1717
<SidebarMenuItem>
1818
<DropdownMenu>
1919
<DropdownMenuTrigger as-child>
20-
<SidebarMenuButton size="lg" class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground">
20+
<SidebarMenuButton
21+
class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
22+
size="lg"
23+
>
2124
<UserInfo :user="user" />
2225
<ChevronsUpDown class="ml-auto size-4" />
2326
</SidebarMenuButton>
2427
</DropdownMenuTrigger>
2528
<DropdownMenuContent
26-
class="w-(--reka-dropdown-menu-trigger-width) min-w-56 rounded-lg"
2729
:side="isMobile ? 'bottom' : state === 'collapsed' ? 'left' : 'bottom'"
28-
align="end"
2930
:side-offset="4"
31+
align="end"
32+
class="w-(--reka-dropdown-menu-trigger-width) min-w-56 rounded-lg"
3033
>
3134
<UserMenuContent :user="user" />
3235
</DropdownMenuContent>
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
11
<script lang="ts" setup>
2-
import type { User } from "@/types";
32
import { computed } from "vue";
43
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
5-
import { useInitials } from "@/composables/useInitials";
64
75
interface Props {
8-
user: User;
6+
user: App.Data.UserData;
97
showEmail?: boolean;
108
}
119
1210
const props = withDefaults(defineProps<Props>(), {
1311
showEmail: false,
1412
});
1513
16-
const { getInitials } = useInitials();
17-
1814
// Compute whether we should show the avatar image
19-
const showAvatar = computed(() => props.user.avatar && props.user.avatar !== "");
15+
const showAvatar = computed(() => props.user.profileImage && props.user.profileImage !== "");
2016
</script>
2117

2218
<template>
2319
<Avatar class="h-8 w-8 overflow-hidden rounded-lg">
24-
<AvatarImage v-if="showAvatar" :alt="user.name" :src="user.avatar!" />
20+
<AvatarImage v-if="showAvatar" :alt="user.fullName" :src="user.profileImage!" />
2521
<AvatarFallback class="rounded-lg text-black dark:text-white">
26-
{{ getInitials(user.name) }}
22+
{{ user.initials }}
2723
</AvatarFallback>
2824
</Avatar>
2925

3026
<div class="grid flex-1 text-left text-sm leading-tight">
31-
<span class="truncate font-medium">{{ user.name }}</span>
27+
<span class="truncate font-medium">{{ user.fullName }}</span>
3228
<span v-if="showEmail" class="text-muted-foreground truncate text-xs">{{ user.email }}</span>
3329
</div>
3430
</template>

resources/js/components/UserMenuContent.vue

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
<script setup lang="ts">
2-
import type { User } from "@/types";
1+
<script lang="ts" setup>
32
import { Link, router } from "@inertiajs/vue3";
43
import { LogOut, Settings } from "lucide-vue-next";
5-
import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from "@/components/ui/dropdown-menu";
4+
import {
5+
DropdownMenuGroup,
6+
DropdownMenuItem,
7+
DropdownMenuLabel,
8+
DropdownMenuSeparator,
9+
} from "@/components/ui/dropdown-menu";
610
import UserInfo from "@/components/UserInfo.vue";
711
812
interface Props {
9-
user: User;
13+
user: App.Data.UserData;
1014
}
1115
1216
defineProps<Props>();
@@ -19,21 +23,21 @@ function handleLogout() {
1923
<template>
2024
<DropdownMenuLabel class="p-0 font-normal">
2125
<div class="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
22-
<UserInfo :user="user" :show-email="true" />
26+
<UserInfo :show-email="true" :user="user" />
2327
</div>
2428
</DropdownMenuLabel>
2529
<DropdownMenuSeparator />
2630
<DropdownMenuGroup>
2731
<DropdownMenuItem :as-child="true">
28-
<Link class="block w-full" :href="route('profile.edit')" prefetch as="button">
32+
<Link :href="route('profile.edit')" as="button" class="block w-full" prefetch>
2933
<Settings class="mr-2 h-4 w-4" />
3034
Settings
3135
</Link>
3236
</DropdownMenuItem>
3337
</DropdownMenuGroup>
3438
<DropdownMenuSeparator />
3539
<DropdownMenuItem :as-child="true">
36-
<Link class="block w-full" method="post" :href="route('logout')" as="button" @click="handleLogout">
40+
<Link :href="route('logout')" as="button" class="block w-full" method="post" @click="handleLogout">
3741
<LogOut class="mr-2 h-4 w-4" />
3842
Log out
3943
</Link>

resources/js/composables/useAppearance.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

resources/js/composables/useInitials.ts

Lines changed: 0 additions & 17 deletions
This file was deleted.

resources/js/pages/settings/Profile.vue

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<script setup lang="ts">
2-
import type { BreadcrumbItem, SharedData, User } from "@/types";
1+
<script lang="ts" setup>
2+
import type { BreadcrumbItem, SharedData } from "@/types";
33
44
import { Head, Link, useForm, usePage } from "@inertiajs/vue3";
55
import DeleteUser from "@/components/DeleteUser.vue";
@@ -26,10 +26,10 @@ const breadcrumbs: BreadcrumbItem[] = [
2626
];
2727
2828
const page = usePage<SharedData>();
29-
const user = page.props.auth.user as User;
29+
const user = page.props.auth.user as App.Data.UserData;
3030
3131
const form = useForm({
32-
name: user.name,
32+
name: user.fullName,
3333
email: user.email,
3434
});
3535
@@ -46,37 +46,41 @@ function submit() {
4646

4747
<SettingsLayout>
4848
<div class="flex flex-col space-y-6">
49-
<HeadingSmall title="Profile information" description="Update your name and email address" />
49+
<HeadingSmall description="Update your name and email address" title="Profile information" />
5050

5151
<form class="space-y-6" @submit.prevent="submit">
5252
<div class="grid gap-2">
5353
<Label for="name">Name</Label>
54-
<Input id="name" v-model="form.name" class="mt-1 block w-full" required autocomplete="name" placeholder="Full name" />
55-
<InputError class="mt-2" :message="form.errors.name" />
54+
<Input
55+
id="name" v-model="form.name" autocomplete="name" class="mt-1 block w-full"
56+
placeholder="Full name"
57+
required
58+
/>
59+
<InputError :message="form.errors.name" class="mt-2" />
5660
</div>
5761

5862
<div class="grid gap-2">
5963
<Label for="email">Email address</Label>
6064
<Input
6165
id="email"
6266
v-model="form.email"
63-
type="email"
64-
class="mt-1 block w-full"
65-
required
6667
autocomplete="username"
68+
class="mt-1 block w-full"
6769
placeholder="Email address"
70+
required
71+
type="email"
6872
/>
69-
<InputError class="mt-2" :message="form.errors.email" />
73+
<InputError :message="form.errors.email" class="mt-2" />
7074
</div>
7175

72-
<div v-if="mustVerifyEmail && !user.email_verified_at">
76+
<div v-if="mustVerifyEmail && !user.emailVerifiedAt">
7377
<p class="text-muted-foreground -mt-4 text-sm">
7478
Your email address is unverified.
7579
<Link
7680
:href="route('verification.send')"
77-
method="post"
7881
as="button"
7982
class="text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500"
83+
method="post"
8084
>
8185
Click here to resend the verification email.
8286
</Link>

resources/js/types/index.d.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { LucideIcon } from "lucide-vue-next";
33
import type { Config } from "ziggy-js";
44

55
export interface Auth {
6-
user: User;
6+
user?: App.Data.UserData | null;
77
}
88

99
export interface BreadcrumbItem {
@@ -26,14 +26,4 @@ export interface SharedData extends PageProps {
2626
sidebarOpen: boolean;
2727
}
2828

29-
export interface User {
30-
id: number;
31-
name: string;
32-
email: string;
33-
avatar?: string;
34-
email_verified_at: string | null;
35-
created_at: string;
36-
updated_at: string;
37-
}
38-
3929
export type BreadcrumbItemType = BreadcrumbItem;

0 commit comments

Comments
 (0)