+
-
![Profile Picture]()
-
+
+
![Profile Picture]()
+
-
-
- Profilbild hochladen
-
diff --git a/nuxt-app/components/ProfilePictureEditable.vue b/nuxt-app/components/ProfilePictureEditable.vue
new file mode 100644
index 0000000..c9ce16f
--- /dev/null
+++ b/nuxt-app/components/ProfilePictureEditable.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+ Profilbild hochladen
+
+
+
diff --git a/nuxt-app/components/ProfileSection.vue b/nuxt-app/components/ProfileSection.vue
new file mode 100644
index 0000000..60dd4ec
--- /dev/null
+++ b/nuxt-app/components/ProfileSection.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
{{ title }}
+
{{ content }}
+
+
+
+
diff --git a/nuxt-app/composables/useDirectus.ts b/nuxt-app/composables/useDirectus.ts
index 4736073..7b8ee2a 100644
--- a/nuxt-app/composables/useDirectus.ts
+++ b/nuxt-app/composables/useDirectus.ts
@@ -9,6 +9,7 @@ import {
type QueryFilter,
} from '@directus/sdk'
import type {
+ DirectusEmojiItem,
DirectusMemberItem,
DirectusPickOfTheDayItem,
DirectusProfileItem,
@@ -562,24 +563,50 @@ export function useDirectus() {
)
}
- async function getProfileById(id: string) {
- return (await directus
+ async function getProfileBySlug(slug: string) {
+ const profile = (await directus
.request(
readItems('profiles', {
fields: [
'id',
+ 'date_created',
'first_name',
'last_name',
'display_name',
'description',
'job_role',
'job_employer',
- 'profile_image.*'
+ 'profile_image.*',
+ 'slug',
+ 'interested_tags.tags_id.id',
+ 'interested_tags.tags_id.name',
+ 'emojis.emojis_id.id',
+ 'emojis.emojis_id.title',
+ 'emojis.emojis_id.display_emoji',
+ //'interested_tags.tag.id',
+ //'interested_tags.tag.name',
],
limit: 1,
- filter: { id: { _eq: id } },
+ filter: { slug: { _eq: slug } },
})
- ))?.pop() as unknown as DirectusProfileItem
+ ).then((results: any) => {
+ const items = results as DirectusProfileItem[];
+ return items.map((profile) => ({
+ ...profile,
+ interested_tags_prepared: profile.interested_tags?.map((tag: any) => tag.tags_id).filter((tag) => tag) as TagItem[],
+ }))
+ }).then((results: any) => {
+ const items = results as DirectusProfileItem[];
+ return items.map((profile) => ({
+ ...profile,
+ emojis_prepared: profile.emojis?.map((emoji: any) => emoji.emojis_id).filter((emoji) => emoji) as DirectusEmojiItem[],
+ }))
+ })
+ )?.pop() as unknown as DirectusProfileItem
+
+ profile.date_created_prepared = new Date(profile.date_created);
+
+ return profile;
}
async function getSingleSignOnProviders() {
@@ -657,6 +684,6 @@ export function useDirectus() {
getSingleSignOnProviders,
getCurrentUser,
registerNewUser,
- getProfileById,
+ getProfileBySlug,
}
}
diff --git a/nuxt-app/nuxt.config.ts b/nuxt-app/nuxt.config.ts
index 23a2082..0aaddc5 100644
--- a/nuxt-app/nuxt.config.ts
+++ b/nuxt-app/nuxt.config.ts
@@ -53,6 +53,7 @@ export default defineNuxtConfig({
// '@nuxtjs/sitemap',
'nuxt-jsonld',
'@pinia/nuxt',
+ 'nuxt-time',
],
// Router configuration: https://nuxtjs.org/docs/configuration-glossary/configuration-router
diff --git a/nuxt-app/package-lock.json b/nuxt-app/package-lock.json
index 775a626..a89cfa9 100644
--- a/nuxt-app/package-lock.json
+++ b/nuxt-app/package-lock.json
@@ -36,6 +36,7 @@
"eslint-plugin-nuxt": "^4.0.0",
"eslint-plugin-vue": "^9.21.1",
"nuxt": "^3.10.2",
+ "nuxt-time": "^0.1.3",
"postcss": "^8.4.35",
"prettier": "^3.2.5",
"prettier-plugin-tailwindcss": "^0.5.11"
@@ -9045,6 +9046,17 @@
"schema-dts": "^1.1.2"
}
},
+ "node_modules/nuxt-time": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/nuxt-time/-/nuxt-time-0.1.3.tgz",
+ "integrity": "sha512-Ie9KA4DfaebqDaTy+u49VVI8lHHjTlllEqdFgeQuvQItrkDaojXWKLwHfW7ju7tDJlpVIV9K6KpRXWPAWUq7Bw==",
+ "dev": true,
+ "dependencies": {
+ "@nuxt/kit": "^3.11.0",
+ "defu": "^6.1.4",
+ "pathe": "^1.1.2"
+ }
+ },
"node_modules/nuxt/node_modules/escape-string-regexp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
diff --git a/nuxt-app/package.json b/nuxt-app/package.json
index fceadfb..17a10b2 100644
--- a/nuxt-app/package.json
+++ b/nuxt-app/package.json
@@ -39,6 +39,7 @@
"eslint-plugin-nuxt": "^4.0.0",
"eslint-plugin-vue": "^9.21.1",
"nuxt": "^3.10.2",
+ "nuxt-time": "^0.1.3",
"postcss": "^8.4.35",
"prettier": "^3.2.5",
"prettier-plugin-tailwindcss": "^0.5.11"
diff --git a/nuxt-app/pages/profiles/[slug].vue b/nuxt-app/pages/profiles/[slug].vue
index 33342a7..c0b6653 100644
--- a/nuxt-app/pages/profiles/[slug].vue
+++ b/nuxt-app/pages/profiles/[slug].vue
@@ -1,53 +1,61 @@
-
-
Profile
-
- - ID:
- - {{ profile.id }}
- - First Name:
- - {{ profile.first_name }}
- - Last Name:
- - {{ profile.last_name }}
- - Display Name:
- - {{ profile.display_name }}
- - Description:
-
- - Job Role:
- - {{ profile.job_role }}
- - Job Employer:
- - {{ profile.job_employer }}
- - Photo:
- -
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ emoji.display_emoji }}
+
+
+
+
+
+
+ #{{ interestedTag.name }}
+
+
+
+
+
+
+
+
diff --git a/nuxt-app/types/items.ts b/nuxt-app/types/items.ts
index acb01ce..e384c15 100644
--- a/nuxt-app/types/items.ts
+++ b/nuxt-app/types/items.ts
@@ -1,6 +1,6 @@
/* eslint-disable no-use-before-define */
-import type { DirectusMeetupItem, DirectusPodcastItem, DirectusSpeakerItem } from '~/types/directus'
+import type { DirectusMeetupItem, DirectusPodcastItem, DirectusSpeakerItem, DirectusTagItem } from '~/types/directus';
export type LatestPodcastItem = Pick<
DirectusPodcastItem,
@@ -92,8 +92,16 @@ export interface LoginProvider {
url: string
}
+export interface DirectusEmojiItem {
+ id: string
+ title: string
+ display_emoji: string
+}
+
export interface DirectusProfileItem {
id: string
+ date_created: string
+ date_created_prepared: Date;
first_name: string
last_name: string
display_name: string
@@ -101,4 +109,15 @@ export interface DirectusProfileItem {
job_role: string
job_employer: string
profile_image: FileItem
+ slug: string
+ interested_tags: {
+ id: number
+ tags_id: DirectusTagItem
+ }[]
+ emojis: {
+ id: number
+ emojis_id: DirectusEmojiItem
+ }[]
+ interested_tags_prepared: TagItem[]
+ emojis_prepared: DirectusEmojiItem[]
}