Genel düzeltmeler

This commit is contained in:
Sedat ÖZTÜRK 2026-05-12 09:57:23 +03:00
parent 414006204e
commit bc31e1f06a
6 changed files with 80 additions and 123 deletions

View file

@ -3726,23 +3726,47 @@
"en": "Total Rooms", "en": "Total Rooms",
"tr": "Toplam Oda" "tr": "Toplam Oda"
}, },
{
"resourceName": "Platform",
"key": "App.Videoroom.TotalRoomsDescription",
"en": "Total number of rooms",
"tr": "Toplam oda sayısı"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "App.Videoroom.ActiveRooms", "key": "App.Videoroom.ActiveRooms",
"en": "Active Rooms", "en": "Active Rooms",
"tr": "Aktif Oda" "tr": "Aktif Oda"
}, },
{
"resourceName": "Platform",
"key": "App.Videoroom.ActiveRoomDescription",
"en": "Rooms with started sessions",
"tr": "Oturumu başlatılmış odalar"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "App.Videoroom.OpenRooms", "key": "App.Videoroom.OpenRooms",
"en": "Open Rooms", "en": "Open Rooms",
"tr": "Katılıma Açık" "tr": "Katılıma Açık"
}, },
{
"resourceName": "Platform",
"key": "App.Videoroom.OpenRoomsDescription",
"en": "Rooms where participants can join",
"tr": "Katılımcıların katılabileceği odalar"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "App.Videoroom.PassiveRooms", "key": "App.Videoroom.PassiveRooms",
"en": "Passive Rooms", "en": "Passive Rooms",
"tr": "Pasif Oda" "tr": "Pasif Odalar"
},
{
"resourceName": "Platform",
"key": "App.Videoroom.PassiveRoomsDescription",
"en": "Rooms that are not currently active",
"tr": "Şu anda aktif olmayan odalar"
}, },
{ {
"resourceName": "Platform", "resourceName": "Platform",
@ -3750,6 +3774,12 @@
"en": "Total Participants", "en": "Total Participants",
"tr": "Toplam Katılımcı" "tr": "Toplam Katılımcı"
}, },
{
"resourceName": "Platform",
"key": "App.Videoroom.TotalParticipantsDescription",
"en": "Total number of participants",
"tr": "Toplam katılımcı sayısı"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "App.Videoroom.RoomSettings", "key": "App.Videoroom.RoomSettings",

View file

@ -77,7 +77,7 @@ export default function Widget({
> >
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<p className="text-sm font-semibold text-gray-600 uppercase tracking-wide"> <p className="text-sm font-semibold text-gray-600 tracking-wide">
{title} {title}
</p> </p>
<p <p

View file

@ -956,7 +956,7 @@ const FileManager = () => {
{/* Sort */} {/* Sort */}
<Select <Select
size="sm" size="xs"
options={[ options={[
{ value: 'name-asc', label: 'Name (A-Z)' }, { value: 'name-asc', label: 'Name (A-Z)' },
{ value: 'name-desc', label: 'Name (Z-A)' }, { value: 'name-desc', label: 'Name (Z-A)' },
@ -990,30 +990,21 @@ const FileManager = () => {
setFilters((prev) => ({ ...prev, sortBy, sortOrder })) setFilters((prev) => ({ ...prev, sortBy, sortOrder }))
} }
}} }}
className="min-w-32 sm:min-w-36 flex-shrink-0"
/> />
{/* View Mode */} {/* View Mode */}
<div className="flex border border-gray-300 dark:border-gray-600 rounded flex-shrink-0"> <div className="flex gap-1 ml-auto">
<Button <Button
variant="plain"
size="sm" size="sm"
icon={<FaTh />} icon={<FaTh />}
className={classNames( variant={viewMode === 'grid' ? 'solid' : 'default'}
'rounded-r-none border-r ',
viewMode === 'grid' && 'bg-blue-50 dark:bg-blue-900/20 text-blue-600',
)}
onClick={() => setViewMode('grid')} onClick={() => setViewMode('grid')}
title="Grid view" title="Grid view"
/> />
<Button <Button
variant="plain"
size="sm" size="sm"
icon={<FaList />} icon={<FaList />}
className={classNames( variant={viewMode === 'list' ? 'solid' : 'default'}
'rounded-l-none ',
viewMode === 'list' && 'bg-blue-50 dark:bg-blue-900/20 text-blue-600',
)}
onClick={() => setViewMode('list')} onClick={() => setViewMode('list')}
title="List view" title="List view"
/> />

View file

@ -19,6 +19,7 @@ import {
import { useStoreState } from '@/store/store' import { useStoreState } from '@/store/store'
import { ROUTES_ENUM } from '@/routes/route.constant' import { ROUTES_ENUM } from '@/routes/route.constant'
import { Container } from '@/components/shared' import { Container } from '@/components/shared'
import Widget from '@/components/common/Widget'
import { import {
createVideoroom, createVideoroom,
deleteVideoroom, deleteVideoroom,
@ -307,112 +308,47 @@ const RoomList: React.FC = () => {
</div> </div>
{/* Stats Cards */} {/* Stats Cards */}
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-4 sm:gap-6 mt-4 mb-3"> <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-4 mt-2 mb-2">
<motion.div <Widget
initial={{ opacity: 0, y: 20 }} title={translate('::App.Videoroom.TotalRooms')}
animate={{ opacity: 1, y: 0 }} value={widgets().totalCount}
className="bg-white rounded-lg shadow-md p-4 sm:p-6" color="blue"
> icon="FaCalendarAlt"
<div className="flex items-center"> valueClassName="text-2xl"
<div className="p-2 sm:p-3 bg-blue-100 rounded-full"> subTitle={translate('::App.Videoroom.TotalRoomsDescription')}
<FaCalendarAlt className="text-blue-600" size={20} /> />
</div> <Widget
<div className="ml-3 sm:ml-4"> title={translate('::App.Videoroom.ActiveRooms')}
<p className="text-xs sm:text-sm font-medium text-gray-600"> value={widgets().activeCount}
{translate('::App.Videoroom.TotalRooms')} color="green"
</p> icon="FaPlay"
<p className="text-xl sm:text-2xl font-bold text-gray-900"> valueClassName="text-2xl"
{widgets().totalCount}{' '} subTitle={translate('::App.Videoroom.ActiveRoomDescription')}
</p> />
</div> <Widget
</div> title={translate('::App.Videoroom.OpenRooms')}
</motion.div> value={widgets().openCount}
color="indigo"
{/* Aktif Sınıf */} icon="FaDoorOpen"
<motion.div valueClassName="text-2xl"
initial={{ opacity: 0, y: 20 }} subTitle={translate('::App.Videoroom.OpenRoomsDescription')}
animate={{ opacity: 1, y: 0 }} />
transition={{ delay: 0.1 }} <Widget
className="bg-white rounded-lg shadow-md p-4 sm:p-6" title={translate('::App.Videoroom.PassiveRooms')}
> value={widgets().passiveCount}
<div className="flex items-center"> color="gray"
<div className="p-2 sm:p-3 bg-green-100 rounded-full"> icon="FaHourglassEnd"
<FaPlay className="text-green-600" size={20} /> valueClassName="text-2xl"
</div> subTitle={translate('::App.Videoroom.PassiveRoomsDescription')}
<div className="ml-3 sm:ml-4"> />
<p className="text-xs sm:text-sm font-medium text-gray-600"> <Widget
{translate('::App.Videoroom.ActiveRooms')} title={translate('::App.Videoroom.TotalParticipants')}
</p> value={videoList.reduce((sum, c) => sum + c.participantCount, 0)}
<p className="text-xl sm:text-2xl font-bold text-gray-900"> color="purple"
{widgets().activeCount} icon="FaUsers"
</p> valueClassName="text-2xl"
</div> subTitle={translate('::App.Videoroom.TotalParticipantsDescription')}
</div> />
</motion.div>
{/* Katılıma Açık */}
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.15 }}
className="bg-white rounded-lg shadow-md p-4 sm:p-6"
>
<div className="flex items-center">
<div className="p-2 sm:p-3 bg-blue-100 rounded-full">
<FaDoorOpen className="text-blue-600" size={20} />
</div>
<div className="ml-3 sm:ml-4">
<p className="text-xs sm:text-sm font-medium text-gray-600">
{translate('::App.Videoroom.OpenRooms')}
</p>
<p className="text-xl sm:text-2xl font-bold text-gray-900">{widgets().openCount}</p>
</div>
</div>
</motion.div>
{/* Pasif Sınıf */}
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.2 }}
className="bg-white rounded-lg shadow-md p-4 sm:p-6"
>
<div className="flex items-center">
<div className="p-2 sm:p-3 bg-gray-100 rounded-full">
<FaHourglassEnd className="text-gray-600" size={20} />
</div>
<div className="ml-3 sm:ml-4">
<p className="text-xs sm:text-sm font-medium text-gray-600">
{translate('::App.Videoroom.PassiveRooms')}
</p>
<p className="text-xl sm:text-2xl font-bold text-gray-900">
{widgets().passiveCount}
</p>
</div>
</div>
</motion.div>
{/* Toplam Katılımcı */}
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.2 }}
className="bg-white rounded-lg shadow-md p-4 sm:p-6 sm:col-span-2 lg:col-span-1"
>
<div className="flex items-center">
<div className="p-2 sm:p-3 bg-purple-100 rounded-full">
<FaUsers className="text-purple-600" size={20} />
</div>
<div className="ml-3 sm:ml-4">
<p className="text-xs sm:text-sm font-medium text-gray-600">
{translate('::App.Videoroom.TotalParticipants')}
</p>
<p className="text-xl sm:text-2xl font-bold text-gray-900">
{videoList.reduce((sum, c) => sum + c.participantCount, 0)}
</p>
</div>
</div>
</motion.div>
</div> </div>
{/* Scheduled Classes */} {/* Scheduled Classes */}

View file

@ -1093,7 +1093,7 @@ const Grid = (props: GridProps) => {
return ( return (
<> <>
<div ref={widgetGroupRef}> <div ref={widgetGroupRef} className="mt-2">
<WidgetGroup widgetGroups={gridDto?.widgets ?? []} /> <WidgetGroup widgetGroups={gridDto?.widgets ?? []} />
</div> </div>

View file

@ -51,7 +51,7 @@ export function IconPickerField({ value, onChange, invalid }: IconPickerFieldPro
<button <button
type="button" type="button"
onClick={() => setOpen((v) => !v)} onClick={() => setOpen((v) => !v)}
className={`flex items-center gap-2 w-full h-11 px-3 py-2 rounded-lg border text-sm text-left transition-colors className={`flex items-center gap-2 w-full px-3 py-2 rounded-lg border text-sm text-left transition-colors
${invalid ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'} ${invalid ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'}
bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200 hover:border-indigo-400`} bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200 hover:border-indigo-400`}
> >