From ef309d0e3fa90217fbd071fea8bc443286cba582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Fri, 20 Jun 2025 23:17:38 +0300 Subject: [PATCH] Profile image eklendi --- .../Seeds/SeederData.json | 8 +- company/public/img/default-profile.png | Bin 0 -> 11808 bytes company/src/pages/LoginWithTenant.tsx | 4 +- company/src/pages/Profile.tsx | 57 ++++++--- company/src/services/api/language.service.ts | 42 +++++++ ui/src/views/blog/BlogManagement.tsx | 119 +++++++++++++++--- 6 files changed, 189 insertions(+), 41 deletions(-) create mode 100644 company/public/img/default-profile.png create mode 100644 company/src/services/api/language.service.ts diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json index 8db734f1..eed6f5ab 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json @@ -525,14 +525,14 @@ { "resourceName": "Platform", "key": "App.Blog", - "en": "Blog", - "tr": "Blog" + "en": "Blog Management", + "tr": "Blog Yönetimi" }, { "resourceName": "Platform", "key": "App.Forum", - "en": "Forum", - "tr": "Forum" + "en": "Forum Management", + "tr": "Forum Yönetimi" }, { "resourceName": "Platform", diff --git a/company/public/img/default-profile.png b/company/public/img/default-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..89cab7f6f561a6fb73ffaacdd8c437cf934b9197 GIT binary patch literal 11808 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 literal 0 HcmV?d00001 diff --git a/company/src/pages/LoginWithTenant.tsx b/company/src/pages/LoginWithTenant.tsx index 45108dd7..fc383d48 100644 --- a/company/src/pages/LoginWithTenant.tsx +++ b/company/src/pages/LoginWithTenant.tsx @@ -90,10 +90,10 @@ const LoginWithTenant: React.FC = () => { }; return ( -
+
-
+
diff --git a/company/src/pages/Profile.tsx b/company/src/pages/Profile.tsx index 2a96bdd4..481fb73d 100644 --- a/company/src/pages/Profile.tsx +++ b/company/src/pages/Profile.tsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { useAuthStore } from '../store/authStore'; -import { User, Mail, Calendar, Shield } from 'lucide-react'; -import { format } from 'date-fns'; -import { tr } from 'date-fns/locale'; +import React from "react"; +import { useAuthStore } from "../store/authStore"; +import { User, Mail, Calendar, Shield } from "lucide-react"; +import { format } from "date-fns"; +import { tr } from "date-fns/locale"; const Profile: React.FC = () => { const { user } = useAuthStore(); @@ -20,14 +20,18 @@ const Profile: React.FC = () => {

Profilim

- +
{user.avatar ? ( - {user.name} { + e.currentTarget.onerror = null; // sonsuz döngüyü önlemek için + e.currentTarget.src = "/img/default-profile.png"; // bu senin varsayılan avatar görselin + }} /> ) : (
@@ -35,7 +39,9 @@ const Profile: React.FC = () => {
)}
-

{user.fullName || user.name}

+

+ {user.fullName || user.name} +

@{user.userName}

@@ -65,9 +71,11 @@ const Profile: React.FC = () => {

Kayıt Tarihi

- {user.creationTime - ? format(new Date(user.creationTime), 'dd MMMM yyyy', { locale: tr }) - : 'Bilinmiyor'} + {user.creationTime + ? format(new Date(user.creationTime), "dd MMMM yyyy", { + locale: tr, + }) + : "Bilinmiyor"}

@@ -96,17 +104,30 @@ const Profile: React.FC = () => {
-

Hesap Durumu

+

+ Hesap Durumu +

-
- - {user.isActive ? 'Aktif' : 'Pasif'} +
+ + {user.isActive ? "Aktif" : "Pasif"}
- + {user.lastLoginTime && (

- Son giriş: {format(new Date(user.lastLoginTime), 'dd MMMM yyyy HH:mm', { locale: tr })} + Son giriş:{" "} + {format(new Date(user.lastLoginTime), "dd MMMM yyyy HH:mm", { + locale: tr, + })}

)}
diff --git a/company/src/services/api/language.service.ts b/company/src/services/api/language.service.ts new file mode 100644 index 00000000..afe0dc60 --- /dev/null +++ b/company/src/services/api/language.service.ts @@ -0,0 +1,42 @@ +import { apiClient } from "./config"; + +export interface LanguageText { + id: string; + name: string; + slug: string; + description: string; + icon?: string; + topicCount: number; + postCount: number; + lastPost?: { + id: string; + title: string; + author: string; + createdAt: string; + }; + order: number; + isLocked: boolean; +} + +export interface LanguageParams { + cultureName?: string; +} + +export interface PaginatedResponse { + items: T[]; + totalCount: number; + pageNumber: number; + pageSize: number; + totalPages: number; +} + +class LanguageService { + async getLanguageTextByCultureName(cultureName: string): Promise> { + const response = await apiClient.get>( + `/api/app/language/language-by-culture-name/${cultureName}`, + ); + return response.data; + } +} + +export const languageService = new LanguageService(); diff --git a/ui/src/views/blog/BlogManagement.tsx b/ui/src/views/blog/BlogManagement.tsx index 8f82da01..18dc6027 100644 --- a/ui/src/views/blog/BlogManagement.tsx +++ b/ui/src/views/blog/BlogManagement.tsx @@ -31,11 +31,11 @@ import THead from '@/components/ui/Table/THead' import TBody from '@/components/ui/Table/TBody' import Td from '@/components/ui/Table/Td' import { SelectBoxOption } from '@/shared/types' -import { CheckBox } from 'devextreme-react' import { Checkbox } from '@/components/ui' import { Helmet } from 'react-helmet' import { useLocalization } from '@/utils/hooks/useLocalization' import { ConfirmDialog } from '@/components/shared' +import { useStoreState } from '@/store/store' const validationSchema = Yup.object().shape({ title: Yup.string().required(), @@ -67,9 +67,10 @@ const BlogManagement = () => { const [categoryModalVisible, setCategoryModalVisible] = useState(false) const [editingPost, setEditingPost] = useState(null) const [editingCategory, setEditingCategory] = useState(null) + const { texts } = useStoreState((state) => state.abpConfig) const categoryItems = categories?.map((cat) => ({ value: cat.id, - label: cat.name, + label: texts?.Platform[cat.name] + ' (' + cat.name + ')', })) useEffect(() => { @@ -388,7 +389,7 @@ const BlogManagement = () => {
{activeTab === 'posts' ? ( - +
@@ -415,9 +416,9 @@ const BlogManagement = () => { ) : ( posts.map((post) => ( - + - + + - + - + +
{translate('::blog.posts.post.title')}
{post.title}{texts?.Platform[post.title]} {post.slug}{post.category?.name}{texts?.Platform[post.category?.name]} {post.author?.name} {post.publishedAt @@ -425,7 +426,11 @@ const BlogManagement = () => { : '-'} - handlePublish(post)} /> + handlePublish(post)} + />
@@ -452,6 +457,7 @@ const BlogManagement = () => {
{translate('::blog.posts.categories.slug')} {translate('::blog.posts.categories.description')} {translate('::blog.posts.categories.count')}{translate('::blog.posts.categories.order')} {translate('::blog.posts.categories.status')}
{category.name}{texts?.Platform[category.name]} {category.slug}{category.description}{texts?.Platform[category.description!!]} {category.postCount}{category.displayOrder} { invalid={errors.title && touched.title} errorMessage={errors.title} > - + + {({ field, form }: FieldProps) => { + const options = texts?.Platform + ? Object.entries(texts.Platform).map(([key, value]) => ({ + value: key, + label: value + ' (' + key + ')', + })) + : [] + + return ( + opt.value === field.value)} + onChange={(option) => form.setFieldValue(field.name, option?.value || '')} + /> + ) + }} + + + { invalid={errors.name && touched.name} errorMessage={errors.name} > - + + {({ field, form }: FieldProps) => { + const options = texts?.Platform + ? Object.entries(texts.Platform).map(([key, value]) => ({ + value: key, + label: value + ' (' + key + ')', + })) + : [] + + return ( + opt.value === field.value)} + onChange={(option) => form.setFieldValue(field.name, option?.value || '')} + /> + ) + }} +