Skip to content

Commit bea181d

Browse files
authored
Vue 3 in Laravel 10
1 parent 8bf5df8 commit bea181d

File tree

4 files changed

+100
-3
lines changed

4 files changed

+100
-3
lines changed

app/resources/js/app.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@ app.use(router)
1919

2020
/*
2121
22-
// Glogal provide/inject composition api
23-
app.provide('globalStore', {
22+
// Glogal variable provide/inject composition api
23+
app.provide('globalVariable', {
2424
user: null,
2525
isLogged: false,
2626
async getUser(id = 1) {
2727
let res = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`)
28-
console.log('App global store', res.data)
2928
return res.data ?? null
3029
},
3130
})
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<script setup>
2+
import { useThemeStore } from '@/stores/theme.js'
3+
import { onMounted } from 'vue';
4+
5+
let theme = useThemeStore()
6+
7+
onMounted(() => {
8+
theme.update()
9+
})
10+
11+
</script>
12+
13+
<template>
14+
<div @click="theme.toggle()" :class="{ 'toggle-theme': true, 'toggle-theme-dark': theme.getColor == 'dark'}" >
15+
<div class="theme-switch-icon">
16+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="theme-switch-sun"><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg>
17+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="theme-switch-moon"><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg>
18+
</div>
19+
</div>
20+
</template>
21+
22+
<style scoped>
23+
.toggle-theme {
24+
float: right;
25+
padding: 3px;
26+
margin: 5px;
27+
border: 1px solid #cfcfcf;
28+
border-radius: 20px;
29+
width: 45px;
30+
height: 25px;
31+
text-align: left;
32+
cursor: pointer;
33+
}
34+
35+
.toggle-theme-dark {
36+
border: 1px solid #fff;
37+
}
38+
39+
.theme-switch-icon {
40+
position: relative;
41+
float: left;
42+
width: 17px;
43+
height: 17px;
44+
padding: 2px;
45+
border-radius: 50%;
46+
box-sizing: border-box;
47+
}
48+
49+
.theme-switch-icon svg {
50+
position: absolute;
51+
top:0;
52+
left: 0;
53+
width: 16px;
54+
height: 16px;
55+
}
56+
57+
.toggle-theme-dark .theme-switch-icon {
58+
float: right !important;
59+
}
60+
61+
.toggle-theme-dark .theme-switch-icon svg {
62+
fill: #fff !important;
63+
}
64+
65+
.toggle-theme .theme-switch-icon svg.theme-switch-sun {
66+
display: inherit;
67+
}
68+
.toggle-theme .theme-switch-icon svg.theme-switch-moon {
69+
display: none;
70+
}
71+
72+
.toggle-theme-dark .theme-switch-icon svg.theme-switch-sun {
73+
display: none;
74+
}
75+
76+
.toggle-theme-dark .theme-switch-icon svg.theme-switch-moon {
77+
display: inherit;
78+
}
79+
</style>

app/resources/js/components/TopBar.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup>
22
import { RouterLink } from 'vue-router'
3+
import ChangeTheme from '@/components/ChangeTheme.vue';
34
import ChangeLocale from '@/components/ChangeLocale.vue'
45
</script>
56

@@ -8,6 +9,8 @@ import ChangeLocale from '@/components/ChangeLocale.vue'
89
<RouterLink to="/" class="menu-link">{{ $t('page.Home') }}</RouterLink>
910
<RouterLink to="/about" class="menu-link">{{ $t('page.About') }}</RouterLink>
1011
<RouterLink to="/error404" class="menu-link">404</RouterLink>
12+
1113
<ChangeLocale />
14+
<ChangeTheme />
1215
</nav>
1316
</template>

app/resources/js/stores/theme.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { ref, computed } from 'vue'
2+
import { defineStore } from 'pinia'
3+
4+
export const useThemeStore = defineStore('theme', () => {
5+
const color = ref('light')
6+
const getColor = computed(() => color.value )
7+
function toggle() {
8+
color.value = color.value == 'light' ? 'dark' : 'light'
9+
update()
10+
}
11+
function update() {
12+
document.querySelector('body').setAttribute('color-scheme', color.value)
13+
}
14+
15+
return { color, getColor, toggle, update }
16+
})

0 commit comments

Comments
 (0)