Skip to content
This repository was archived by the owner on Dec 3, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 76 commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
68e8220
Implement login and register, localization feature
PrabuckiDominik Jun 13, 2025
cb3a938
Remove suffix
PrabuckiDominik Jun 13, 2025
478614b
Fix workflow test
PrabuckiDominik Jun 13, 2025
c4cc684
Add .env.ci
PrabuckiDominik Jun 13, 2025
476f850
Try to fix workflow
PrabuckiDominik Jun 13, 2025
75ed108
Try to fix workflow
PrabuckiDominik Jun 13, 2025
b187077
Try to fix workflow
PrabuckiDominik Jun 13, 2025
627985f
Implement reset password, add Spatie's activity log
PrabuckiDominik Jun 16, 2025
e9075b5
Fix TestCase
PrabuckiDominik Jun 16, 2025
5b77ff6
Implement login.
PrintJaDe Jun 17, 2025
e3a13c3
Implement login.
PrintJaDe Jun 17, 2025
93ecf56
**Add routes, components, and layouts for authentication pages**
PrintJaDe Jun 18, 2025
9bee6dd
**Refactor authentication components and layouts; update routes**
PrintJaDe Jun 23, 2025
7b23f67
**Refactor authentication components and layouts; update routes**
PrintJaDe Jun 24, 2025
dae2e16
**Refactor and enhance authentication components and layouts**
PrintJaDe Jun 25, 2025
1f50e08
Merge remote-tracking branch 'origin/main' into 11-add-sign-in-page
PrintJaDe Jun 25, 2025
edc6532
Merge remote-tracking branch 'origin/11-add-sign-in-page' into 11-add…
PrintJaDe Jun 26, 2025
c0f5163
Integrate shared layout and enhance form handling for authentication …
PrintJaDe Jun 26, 2025
6aafc93
Refactor authentication pages: remove unused `LoginPage.vue`, add `Fo…
PrintJaDe Jun 29, 2025
9de6608
Remove obsolete migration files for `activity_log` table updates.
PrintJaDe Jun 30, 2025
1d123dd
Merge branch 'main' of https://github.com/blumilksoftware/interns2025…
PrintJaDe Jun 30, 2025
7f252ea
Integrate `AppHead` component for enhanced meta handling, update Face…
PrintJaDe Jun 30, 2025
0c48dd4
Refactor authentication pages: extract `useApiForm` composable, add u…
PrintJaDe Jun 30, 2025
9076706
Refactor `web.php` routes for `LoginPage` and update notification mes…
PrintJaDe Jul 1, 2025
962fdd2
Refactor: Replace `Welcome` with `HomePage`, update route to point to…
PrintJaDe Jul 1, 2025
bc007ee
Refactor: Replace `Link` with `InertiaLink`, streamline form handling…
PrintJaDe Jul 1, 2025
4b102e9
Refactor authentication views: implement `AuthLayout`, improve form h…
PrintJaDe Jul 1, 2025
589b525
Refactor authentication views and components: improve styling, apply …
PrintJaDe Jul 2, 2025
c358b5e
Refactor layout components: simplify `AuthLayout.vue` and improve res…
PrintJaDe Jul 3, 2025
809d459
Integrate `@heroicons/vue` for icon support, refactor password inputs…
PrintJaDe Jul 4, 2025
c5ad8bb
Merge branch 'main' of https://github.com/blumilksoftware/interns2025…
PrintJaDe Jul 4, 2025
8ba7c91
Integrate `AppHead` component into authentication pages for enhanced …
PrintJaDe Jul 7, 2025
ad5e58c
Apply suggestions from code review
PrintJaDe Jul 13, 2025
4e0cfac
Apply tailwind config suggestions.
PrintJaDe Jul 13, 2025
6d203f6
Refactoring BaseInput.vue PasswordInput.vue according to suggestion a…
PrintJaDe Jul 13, 2025
ac3ac82
fixing tailwind.config.js, added placeholder and placeholder on focus.
PrintJaDe Jul 14, 2025
968606c
added outline and removed placeholders.
PrintJaDe Jul 14, 2025
99a7c48
Merge branch '11-add-sign-in-page' into 48-homepage
PrintJaDe Jul 14, 2025
3a03abb
draft for home page
PrintJaDe Jul 14, 2025
c061499
Refactor `HomePage.vue` layout for enhanced usability, create `Genera…
PrintJaDe Jul 15, 2025
575c83b
Extract `navbar.vue` component, refactor `HomePage.vue` and `EventPag…
PrintJaDe Jul 16, 2025
966499c
Add `leaflet` and `vue-i18n` libraries, integrate a map component usi…
PrintJaDe Jul 17, 2025
07b7628
Merge remote-tracking branch 'origin/main' into 48-homepage
PrintJaDe Jul 17, 2025
f91c67f
Add `prettier-plugin-tailwindcss`, update map tile layer in `Map.vue`…
PrintJaDe Jul 20, 2025
e3a9949
Add brand icons for social media sites fixed missing icons fixed resp…
PrintJaDe Jul 20, 2025
1819da8
fxing tailwind classes
PrintJaDe Jul 20, 2025
20ced46
fixed icons having wrong color
PrintJaDe Jul 21, 2025
3b881f1
fixed icons having wrong color
PrintJaDe Jul 21, 2025
7450dc4
fixing icons in event search bar
PrintJaDe Jul 21, 2025
76b5952
Add theme support for Input, fixed styling for map buttons.
PrintJaDe Jul 21, 2025
54d0e6e
Merge branch '48-homepage' into 51-map-of-events
PrintJaDe Jul 22, 2025
dc8481d
fixed events
PrintJaDe Jul 22, 2025
0723733
fixed fade and login
PrintJaDe Jul 22, 2025
9289535
fixes
PrintJaDe Jul 22, 2025
af1c65e
Merge remote-tracking branch 'origin/main' into 51-map-of-events
PrintJaDe Jul 22, 2025
9f49f09
Merge branch '48-homepage' into 51-map-of-events
PrintJaDe Jul 22, 2025
d8cb03f
fixed event name
PrintJaDe Jul 23, 2025
4eb1374
Squashed commit of the following:
PrintJaDe Jul 23, 2025
bac1813
Added centering map function on EventPAge, updated map to show events…
PrintJaDe Jul 23, 2025
aa4b03e
Merge branch '51-map-of-events' of https://github.com/blumilksoftware…
PrintJaDe Jul 23, 2025
fdf50e9
Refactored event-related components, added `/EventList` route, and im…
PrintJaDe Jul 23, 2025
042192e
Replaced `eventMapPopup` utility with a new `EventPopUp` Vue componen…
PrintJaDe Jul 24, 2025
ff259cd
Refactored `EventPage` for better data handling and UI improvements, …
PrintJaDe Jul 25, 2025
1519f1e
Refactored `EventList` and `EventPage` components for enhanced data h…
PrintJaDe Jul 26, 2025
967629f
Refactored `ProfilePage` and related components. Added `useAuth` and …
PrintJaDe Jul 27, 2025
6a0d4d7
Refactored `ProfilePage` and related components. Added `useAuth` and …
PrintJaDe Jul 27, 2025
0d9ce35
Added `AuthProps` and `UserDetail` TypeScript interfaces for improved…
PrintJaDe Jul 28, 2025
910e229
Merge branch 'main' of https://github.com/blumilksoftware/interns2025…
PrintJaDe Jul 28, 2025
862401b
Standardized route definitions in `web.php` for consistent formatting…
PrintJaDe Jul 28, 2025
b61f633
fixed code according to review
PrintJaDe Jul 29, 2025
e6923e9
Refactored `EventPage`, `EventList`, and `HomePage` components for co…
PrintJaDe Jul 29, 2025
598db46
Fixing according to review
PrintJaDe Jul 29, 2025
dce9303
Update resources/js/Pages/EventPage.vue
PrintJaDe Jul 30, 2025
0d9f124
Apply suggestions from code review
PrintJaDe Jul 30, 2025
db21132
Repalcing console logs with an ALerts and added computed for event ow…
PrintJaDe Jul 30, 2025
36c5c60
Merge remote-tracking branch 'origin/51-map-of-events' into 51-map-of…
PrintJaDe Jul 30, 2025
be9f194
Update resources/js/Pages/EventPage.vue
PrintJaDe Jul 30, 2025
54f2964
Updated participant count display in `EventPage` component by adding …
PrintJaDe Jul 30, 2025
aaa6f07
Merge remote-tracking branch 'origin/51-map-of-events' into 51-map-of…
PrintJaDe Jul 30, 2025
3e1fed2
Update resources/js/composables/useAuth.ts
PrintJaDe Jul 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions resources/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,12 @@
@apply bg-[linear-gradient(90deg,#FFFFFF_0%,#B0F8F9_33%,#A1FEFF_66%,#FFFFFF_100%)]
bg-clip-text text-transparent
}

.leaflet-popup-content-wrapper {
background: transparent !important;
}

.leaflet-popup-content,
.leaflet-popup-content p {
margin: 0 !important;
}
55 changes: 55 additions & 0 deletions resources/js/Components/EventCard.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<script setup lang="ts">

withDefaults(
defineProps<{
id: number | string
imageUrl?: string | undefined
start: string
isPaid: boolean
title: string
location?: string | null
ageCategory?: string | null
}>(),
{
imageUrl: 'https://picsum.photos/200/300',
location: 'Brak lokalizacji',
ageCategory: 'Brak',
},
)
</script>

<template>
<InertiaLink
:href="`/event/${id}`"
class="block max-w-sm bg-white rounded-2xl shadow-lg overflow-hidden hover:shadow-xl transition delay-100 duration-300 hover:scale-105"
>
<img
:src="imageUrl"
alt="Event Banner"
class="w-full h-48 object-cover"
>

<div class="p-4 space-y-2">
<div class="flex items-center justify-between">
<div class="text-sm text-gray-500">{{ start }}</div>
<span
class="text-xs font-semibold px-2 py-1 rounded-full"
:class="[isPaid ? 'bg-blue-100 text-blue-600' : 'bg-green-100 text-green-600']"
>
{{ isPaid ? 'Płatny' : 'Darmowy' }}
</span>
</div>

<h3 class="text-lg font-bold text-gray-900">{{ title }}</h3>

<p class="text-sm text-gray-600 flex items-center">
{{ location }}
</p>

<p class="text-sm text-gray-600">
Ograniczenie wiekowe:
<span class="font-medium">{{ ageCategory }}</span>
</p>
</div>
</InertiaLink>
</template>
55 changes: 55 additions & 0 deletions resources/js/Components/EventPopUp.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<script setup lang="ts">
import { Link as InertiaLink } from '@inertiajs/vue3'
import { formatDate, formatTime } from '@/utilities/formatDate'
import BaseButton from '@/Components/BaseButton.vue'
import type { EventMarker } from '@/types/events'

defineProps<{ event: EventMarker }>()
</script>

<template>
<div class="bg-white rounded-xl shadow-lg size-full overflow-hidden">
<img
:src="event.image_url ?? '/images/placeholder.png'"
:alt="event.title"
class="w-full h-24 object-cover"
>

<div class="px-3 py-2">
<div class="space-y-2">
<div class="flex items-center justify-between text-sm text-gray-500">
<span>{{ formatDate(event.start) }} - {{ formatTime(event.start) }} </span>
<span
class="text-xs font-semibold px-2 py-1 rounded-full"
:class="event.is_paid ? 'bg-blue-100 text-blue-600' : 'bg-green-100 text-green-600'"
>
{{ event.is_paid ? 'Płatny' : 'Darmowy' }}
</span>
</div>
<div>
<h3 class="text-lg font-bold text-gray-900 leading-tight">
{{ event.title }}
</h3>
</div>
<div class="">
<p class="text-base font-medium text-gray-800">
{{ event.location ?? 'Brak lokalizacji' }}
</p>
<p class="text-sm font-normal text-gray-500">
{{ event.age_category ? `Ogr. wiek.: ${event.age_category}` : 'Brak ograniczeń' }}
</p>
</div>
<div>
<InertiaLink :href="`/event/${event.id}`">
<BaseButton
type="button"
class="w-full bg-zinc-800 text-white justify-center font-bold px-10 "
>
Zobacz szczegóły
</BaseButton>
</InertiaLink>
</div>
</div>
</div>
</div>
</template>
52 changes: 36 additions & 16 deletions resources/js/Components/InfoBlock.vue
Original file line number Diff line number Diff line change
@@ -1,27 +1,47 @@
<script setup lang="ts">
import { MapPinIcon as DefaultIcon } from '@heroicons/vue/24/solid'

defineProps<{
icon?: any
title: string
line1?: string
line2?: string
line3?: string
}>()
import { UserIcon as DefaultIcon } from '@heroicons/vue/24/outline'
withDefaults(
defineProps<{
icon?: object | null
imageUrl?: string | null
title?: string | null
infoItems?: string[] | null
}>(),
{
icon: DefaultIcon,
imageUrl: undefined,
title: '',
infoItems: () => [],
},
)
</script>

<template>
<div class="flex gap-x-6 items-center">
<div class="flex sm:gap-x-6 gap-x-3 items-center">
<div
class="flex bg-brand/10 size-20 rounded-2xl items-center justify-center aspect-square"
class="flex shrink-0 bg-brand/10 sm:size-20 size-10 rounded-2xl items-center justify-center aspect-square overflow-hidden"
>
<component :is="icon || DefaultIcon" class="size-10 text-brand" />
<img
v-if="imageUrl"
:src="imageUrl"
alt="Obrazek"
class="object-cover size-full"
>
<component
:is="icon ?? DefaultIcon"
v-else
class="sm:size-10 size-5 text-brand"
/>
</div>
<div class="flex flex-col">
<h2 class="text-3xl font-bold">{{ title }}</h2>
<p v-if="line1" class="text-gray-500">{{ line1 }}</p>
<p v-if="line2" class="text-gray-500">{{ line2 }}</p>
<p v-if="line3" class="text-gray-500">{{ line3 }}</p>
<h2 class="sm:text-3xl text-left text-sm font-bold">{{ title }}</h2>
<p
v-for="(info, index) in infoItems"
:key="index"
class="sm:text-sm text-xs text-left text-gray-500"
>
{{ info }}
</p>
</div>
</div>
</template>
2 changes: 1 addition & 1 deletion resources/js/Components/LoginFacebook.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ async function handleFacebookLogin() {
try {
const response = await axios.get('/api/auth/facebook/redirect')
if (response.data.url) {
localStorage.setItem('loginRedirectUrl', window.location.href)
sessionStorage.setItem('loginRedirectUrl', window.location.href)
window.location.href = response.data.url
}
} catch (error: any) {
Expand Down
52 changes: 40 additions & 12 deletions resources/js/Components/Map.vue
Original file line number Diff line number Diff line change
@@ -1,28 +1,35 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import api from '@/services/api'
import { ref, onMounted, createApp, h } from 'vue'
import L from 'leaflet'
import EventPopUp from '@/Components/EventPopUp.vue'
import type { EventMarker } from '@/types/events'

const CENTER: [number, number] = [51.21006, 16.1619]
const INITIAL_ZOOM = 14
const MIN_ZOOM = 13
const MIN_ZOOM = 1
const MAX_ZOOM = 17
const BOUNDS: [[number, number], [number, number]] = [
[51.2597694104174, 16.03829270690674],
[51.153081195098444, 16.30093461210093],
]
const MAX_BOUNDS_VISCOSITY = 1

const props = defineProps<{
center?: [number, number]
zoom?: number
disableFetch?: boolean
}>()

const DEFAULT_CENTER: [number, number] = [51.21006, 16.1619]
const mapElement = ref<HTMLDivElement | null>(null)

onMounted(() => {
onMounted(async () => {
if (!mapElement.value) return

const mapCenter = props.center ?? DEFAULT_CENTER
const mapZoom = props.zoom ?? INITIAL_ZOOM

const map = L.map(mapElement.value, {
center: CENTER,
zoom: INITIAL_ZOOM,
center: mapCenter,
zoom: mapZoom,
minZoom: MIN_ZOOM,
maxZoom: MAX_ZOOM,
maxBounds: BOUNDS,
maxBoundsViscosity: MAX_BOUNDS_VISCOSITY,
})

Expand All @@ -36,7 +43,28 @@ onMounted(() => {
},
).addTo(map)

L.marker(CENTER).addTo(map).bindPopup('You are here.')
L.marker(mapCenter).addTo(map).bindPopup('You are here.')

try {
if (!props.disableFetch) {
const res = await api.get<{ data: EventMarker[] }>('/events')
res.data.data.forEach(event => {
if (event.latitude != null && event.longitude != null) {
const marker = L.marker([event.latitude, event.longitude]).addTo(map)
const container = document.createElement('div')
createApp({ render: () => h(EventPopUp, { event }) }).mount(container)
marker.bindPopup(container, {
minWidth: 250,
maxWidth: 250,
autoPanPadding: [0, 0],
className: 'leaflet-popup--custom',
})
}
})
}
} catch (error) {
alert('Nie udało się pobrać wydarzeń:')
}
})
</script>

Expand Down
42 changes: 11 additions & 31 deletions resources/js/Components/Navbar.vue
Original file line number Diff line number Diff line change
@@ -1,53 +1,33 @@
<script setup lang="ts">
import { Link as InertiaLink, usePage } from '@inertiajs/vue3'
import { computed } from 'vue'
import { useLogout } from '@/composables/useLogout'
import { type AuthProps } from '@/types/types'
import { Link as InertiaLink } from '@inertiajs/vue3'
import { useAuth } from '@/composables/useAuth'

const page = usePage()

const authProps = computed(() => (page.props as unknown) as AuthProps)
const isLoggedIn = computed(() => !!authProps.value.auth.user)

const { logout } = useLogout()
const { isLoggedIn, logout } = useAuth()
</script>

<template>
<div class="w-full">
<div
class="flex font-medium items-center md:justify-end justify-between gap-y-5 pt-10 sm:gap-x-10 mx-5 mb-10"
>
<div class="flex font-medium items-center md:justify-end justify-between gap-y-5 pt-10 sm:gap-x-10 mx-5 mb-10">
<template v-if="!isLoggedIn">
<InertiaLink href="/login" class="hover:underline">
Zaloguj się
</InertiaLink>
<InertiaLink
href="/register"
class="bg-black text-white rounded-full shadow-shadow-blue hover:scale-105 shadow-sm py-2 px-8"
<InertiaLink href="/login" class="hover:underline">Zaloguj się</InertiaLink>
<InertiaLink href="/register"
class="bg-black text-white rounded-full shadow-shadow-blue hover:scale-105 shadow-sm py-2 px-8"
>
Zarejestruj się
</InertiaLink>
</template>

<template v-else>
<InertiaLink
href="/profile"
class="hover:underline"
>
Profil
</InertiaLink>
<button
class="bg-black text-white rounded-full shadow-shadow-blue hover:scale-105 shadow-sm py-2 px-8"
@click.prevent="logout"
<InertiaLink href="/profile" class="hover:underline">Profil</InertiaLink>
<button class="bg-black text-white rounded-full shadow-shadow-blue hover:scale-105 shadow-sm py-2 px-8"
@click.prevent="logout"
>
Wyloguj się
</button>
</template>
</div>

<div
class="flex flex-col space-y-6 items-center justify-center text-center mb-6"
>
<div class="flex flex-col space-y-6 items-center justify-center text-center mb-6">
<img src="/images/LogoBrand.png" alt="LetsEvent">
<slot />
</div>
Expand Down
41 changes: 41 additions & 0 deletions resources/js/Components/PaginationComponent.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<script setup lang="ts">
import { computed } from 'vue'

const { page, lastPage } = defineProps<{
page: number
lastPage: number
}>()

const emit = defineEmits<(e: 'update:page', newPage: number) => void>()

const canPrev = computed(() => page > 1)
const canNext = computed(() => page < lastPage)

function goPrev() {
if (canPrev.value) emit('update:page', page - 1)
}

function goNext() {
if (canNext.value) emit('update:page', page + 1)
}
</script>

<template>
<div v-if="lastPage > 1" class="flex justify-center items-center gap-4 mt-4">
<button
class="px-4 py-2 bg-gray-200 rounded disabled:opacity-50"
:disabled="!canPrev"
@click="goPrev"
>
Poprzednia
</button>
<span>Strona {{ page }} z {{ lastPage }}</span>
<button
class="px-4 py-2 bg-gray-200 rounded disabled:opacity-50"
:disabled="!canNext"
@click="goNext"
>
Następna
</button>
</div>
</template>
2 changes: 1 addition & 1 deletion resources/js/Layouts/Layout.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<div
class="font-medium bg-gray-50 sm:flex sm:items-center sm:justify-center"
class="font-medium bg-gray-50 sm:flex sm:items-center min-h-screen sm:justify-center"
>
<slot />
</div>
Expand Down
Loading