Skip to content

Commit 7fe4f01

Browse files
authored
Use the Vue composition API (#81)
* Update NPM dependencies * Update Show.vue * Update Show.vue * Update Show.vue * Update Edit.vue * Update RegisterController.php * Update Show.vue * Update Index.vue * Update Index.vue * Update Edit.vue * Make logo clickable * Update Header.vue * Update App.vue * Update Notice.vue
1 parent be2ce2c commit 7fe4f01

File tree

13 files changed

+228
-302
lines changed

13 files changed

+228
-302
lines changed

app/Http/Controllers/RegisterController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Enums\Role;
66
use App\Http\Requests\Register\RegisterStoreRequest;
77
use App\Models\User;
8+
use Filament\Events\Auth\Registered;
89

910
class RegisterController extends Controller
1011
{
@@ -29,6 +30,8 @@ public function store(RegisterStoreRequest $request)
2930

3031
auth()->guard()->loginUsingId($user->id);
3132

33+
event(new Registered($user));
34+
3235
return redirect()->route('home');
3336
}
3437
}

bun.lockb

-15 KB
Binary file not shown.

package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
"build": "vite build"
77
},
88
"devDependencies": {
9-
"@heroicons/vue": "^2.1.3",
10-
"@inertiajs/vue3": "^1.1.0",
11-
"@tailwindcss/forms": "^0.5.7",
12-
"@vitejs/plugin-vue": "^5.0.5",
13-
"autoprefixer": "^10.4.19",
14-
"laravel-vite-plugin": "^1.0.4",
15-
"postcss": "^8.4.38",
16-
"sass": "^1.77.4",
17-
"tailwindcss": "^3.4.4",
18-
"vite": "^5.2.13",
9+
"@heroicons/vue": "^2.1.5",
10+
"@inertiajs/vue3": "^1.2.0",
11+
"@tailwindcss/forms": "^0.5.9",
12+
"@vitejs/plugin-vue": "^5.1.4",
13+
"autoprefixer": "^10.4.20",
14+
"laravel-vite-plugin": "^1.0.5",
15+
"postcss": "^8.4.47",
16+
"sass": "^1.79.1",
17+
"tailwindcss": "^3.4.12",
18+
"vite": "^5.4.6",
1919
"vite-svg-loader": "^5.1.0",
20-
"vue": "^3.4.27",
21-
"@sentry/vue": "^7.40.0"
20+
"vue": "^3.5.6",
21+
"@sentry/vue": "^8.30.0"
2222
}
2323
}

resources/js/Components/Header.vue

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
55
<div class="flex h-16 items-center justify-between">
66
<div class="flex items-center">
7-
<div class="flex-shrink-0">
8-
<SparklesIcon class="h-8 w-8" />
9-
</div>
7+
<Link :href="route('home')">
8+
<SparklesIcon class="h-8 w-8 flex-shrink-0" />
9+
</Link>
1010
</div>
1111

1212
<div class="hidden md:block">
@@ -80,16 +80,12 @@
8080
</header>
8181
</template>
8282

83-
<script>
84-
export default {
85-
props: {
86-
menu: Array,
87-
},
83+
<script setup>
84+
import { ref } from 'vue';
85+
86+
const props = defineProps({
87+
menu: Array,
88+
});
8889
89-
data() {
90-
return {
91-
mobileMenuOpen: false,
92-
};
93-
},
94-
};
90+
const mobileMenuOpen = ref(false);
9591
</script>

resources/js/Components/Notice.vue

Lines changed: 39 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,67 +18,54 @@
1818
</div>
1919
</template>
2020

21-
<script>
21+
<script setup>
22+
import { ref, onMounted } from 'vue';
2223
import { router } from "@inertiajs/vue3";
2324
24-
export default {
25-
data() {
26-
return {
27-
active: false,
28-
icon: "",
29-
type: "",
30-
message: "",
31-
};
32-
},
25+
const active = ref(false);
26+
const icon = ref("");
27+
const type = ref("");
28+
const message = ref("");
3329
34-
mounted() {
35-
router.on('finish', () => {
36-
let error = Object.values(router.page.props.errors)[0] || null;
37-
let type = null;
38-
let message = null;
30+
onMounted(() => {
31+
router.on('finish', () => {
32+
let error = Object.values(router.page.props.errors)[0] || router.page.props.error;
3933
40-
if (router.page.props.success) {
41-
type = "success";
42-
message = router.page.props.success;
43-
} else if (router.page.props.error) {
44-
type = "error";
45-
error = router.page.props.error;
46-
} else if (router.page.props.warning) {
47-
type = "warning";
48-
message = router.page.props.warning;
49-
}
34+
if (router.page.props.success) {
35+
icon.value = "CheckCircleIcon";
36+
type.value = "success";
37+
message.value = router.page.props.success;
38+
} else if (error) {
39+
icon.value = "XCircleIcon";
40+
type.value = "error";
41+
message.value = error;
42+
} else if (router.page.props.warning) {
43+
icon.value = "ExclamationCircleIcon";
44+
type.value = "warning";
45+
message.value = router.page.props.warning;
46+
}
5047
51-
if (message) {
52-
this.setNotice(message, type);
53-
} else if (error) {
54-
this.setNotice(error, "error");
55-
}
56-
});
57-
},
48+
setActive();
49+
});
50+
});
5851
59-
methods: {
60-
setNotice(message, type) {
61-
this.type = type;
62-
this.message = message;
52+
function reset() {
53+
icon.value = "";
54+
type.value = "";
55+
message.value = "";
56+
}
6357
64-
if (type === "success") {
65-
this.icon = "CheckCircleIcon";
66-
} else if (type === "error") {
67-
this.icon = "XCircleIcon";
68-
} else if (type === "warning") {
69-
this.icon = "ExclamationCircleIcon";
70-
}
58+
function setActive() {
59+
if (!type && !message) {
60+
return;
61+
}
7162
72-
this.setActive();
73-
},
63+
active.value = true;
7464
75-
setActive() {
76-
this.active = true;
65+
setTimeout(() => {
66+
active.value = false;
7767
78-
setTimeout(() => {
79-
this.active = false;
80-
}, 4000);
81-
},
82-
},
68+
reset();
69+
}, 4000);
8370
};
8471
</script>

resources/js/Layouts/App.vue

Lines changed: 49 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<template>
2+
23
<Head>
34
<title></title>
45
</Head>
@@ -16,73 +17,61 @@
1617
<Notice />
1718
</template>
1819

19-
<script>
20-
import { router } from "@inertiajs/core";
20+
<script setup>
21+
import { ref, computed, onMounted } from "vue";
22+
import { usePage, router } from '@inertiajs/vue3'
2123
2224
import Header from "@js/Components/Header.vue";
2325
import Notice from "@js/Components/Notice.vue";
2426
25-
export default {
26-
name: "App Layout",
27-
28-
components: {
29-
Header,
30-
Notice,
31-
},
27+
const page = usePage();
3228
33-
data() {
34-
return {
35-
mobileMenuOpen: false,
36-
};
37-
},
29+
const mobileMenuOpen = ref(false);
3830
39-
computed: {
40-
menu() {
41-
if (this.$page.props.auth.loggedIn) {
42-
return [
43-
{
44-
label: "Dashboard",
45-
route: route("home"),
46-
condition: true,
47-
components: ['Dashboard/Index'],
48-
},
49-
{
50-
label: "Account",
51-
route: route("account.edit"),
52-
condition: true,
53-
components: ['Account/Edit', 'EmailVerification/Show'],
54-
},
55-
{
56-
label: "Logout",
57-
route: route("logout"),
58-
method: "post",
59-
condition: true,
60-
components: [],
61-
},
62-
];
63-
}
31+
const menu = computed(() => {
32+
if (page.props.auth.loggedIn) {
33+
return [
34+
{
35+
label: "Dashboard",
36+
route: route("home"),
37+
condition: true,
38+
components: ['Dashboard/Index'],
39+
},
40+
{
41+
label: "Account",
42+
route: route("account.edit"),
43+
condition: true,
44+
components: ['Account/Edit', 'EmailVerification/Show'],
45+
},
46+
{
47+
label: "Logout",
48+
route: route("logout"),
49+
method: "post",
50+
condition: true,
51+
components: [],
52+
},
53+
];
54+
}
6455
65-
return [
66-
{
67-
label: "Login",
68-
route: route("login"),
69-
condition: true,
70-
components: ['Login/Show'],
71-
},
72-
{
73-
label: "Register",
74-
route: route("register"),
75-
condition: true,
76-
components: ['Register/Show'],
77-
},
78-
];
56+
return [
57+
{
58+
label: "Login",
59+
route: route("login"),
60+
condition: true,
61+
components: ['Login/Show'],
62+
},
63+
{
64+
label: "Register",
65+
route: route("register"),
66+
condition: true,
67+
components: ['Register/Show'],
7968
},
80-
},
69+
];
70+
});
8171
82-
mounted() {
83-
router.on("success", () => {
84-
this.mobileMenuOpen = false;
85-
});
86-
},
87-
};
72+
onMounted(() => {
73+
router.on("success", () => {
74+
mobileMenuOpen.value = false;
75+
});
76+
});
8877
</script>

0 commit comments

Comments
 (0)