Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
thecybernanny-webapp
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
asranov0003
thecybernanny-webapp
Commits
61067c65
Commit
61067c65
authored
Jul 24, 2025
by
asranov0003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: messengers
parent
fd032884
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
84 additions
and
12 deletions
+84
-12
en.json
src/locales/en/en.json
+5
-0
ru.json
src/locales/ru/ru.json
+5
-0
Messengers.tsx
src/pages/Messengers/Messengers.tsx
+71
-9
messengerHistorySlice.ts
src/stores/slices/messengerHistorySlice.ts
+3
-3
No files found.
src/locales/en/en.json
View file @
61067c65
...
...
@@ -6,6 +6,7 @@
"denied"
:
"Denied"
,
"loading"
:
"Loading..."
,
"selectDates"
:
"Select dates"
,
"selectAppAndDates"
:
"Select App & Dates"
,
"from"
:
"From"
,
"to"
:
"To"
},
...
...
@@ -122,6 +123,10 @@
"title"
:
"Call History"
,
"empty"
:
"No call history found."
},
"messengers"
:
{
"title"
:
"Chats"
,
"empty"
:
"No chats found."
},
"pincode"
:
{
"enterTitle"
:
"Enter your PIN Code"
,
"createTitle"
:
"Create your PIN Code"
,
...
...
src/locales/ru/ru.json
View file @
61067c65
...
...
@@ -6,6 +6,7 @@
"denied"
:
"Выкл"
,
"loading"
:
"Загрузка..."
,
"selectDates"
:
"Выбрать даты"
,
"selectAppAndDates"
:
"Выбрать приложение и даты"
,
"from"
:
"От"
,
"to"
:
"До"
},
...
...
@@ -122,6 +123,10 @@
"title"
:
"История звонков"
,
"empty"
:
"История звонков не найдена."
},
"messengers"
:
{
"title"
:
"Чаты"
,
"empty"
:
"Чаты не найдены."
},
"pincode"
:
{
"enterTitle"
:
"Введите PIN-код"
,
"createTitle"
:
"Создайте PIN-код"
,
...
...
src/pages/Messengers/Messengers.tsx
View file @
61067c65
import
React
,
{
useState
}
from
"react"
;
import
React
,
{
use
Effect
,
use
State
}
from
"react"
;
import
"./Messengers.css"
;
import
SectionHeader
from
"../../layouts/SectionHeader"
;
import
{
MdInfoOutline
}
from
"react-icons/md"
;
import
CButton
from
"../../components/CButton"
;
import
{
MESSENGERS
,
type
IMessenger
}
from
"../../constants/messengers"
;
import
{
useTranslation
}
from
"react-i18next"
;
import
{
useAppDispatch
,
useAppSelector
,
type
RootState
,
}
from
"../../stores/store"
;
import
{
fetchMessengerHistory
}
from
"../../stores/slices/messengerHistorySlice"
;
import
CLoading
from
"../../components/CLoading"
;
const
Messengers
:
React
.
FC
=
()
=>
{
const
today
=
new
Date
().
toISOString
().
split
(
"T"
)[
0
];
const
[
fromDate
,
setFromDate
]
=
useState
(
today
);
const
[
toDate
,
setToDate
]
=
useState
(
today
);
const
[
selectedMessenger
,
setSelectedMessenger
]
=
useState
<
IMessenger
>
(
MESSENGERS
[
0
]
);
const
{
t
}
=
useTranslation
();
const
{
selectedDevice
}
=
useAppSelector
((
state
:
RootState
)
=>
state
.
device
);
const
dispatch
=
useAppDispatch
();
const
{
messengerHistories
,
loading
,
error
}
=
useAppSelector
(
(
state
:
RootState
)
=>
state
.
messengerHistory
);
const
fetchMessengerHistories
=
()
=>
{
if
(
selectedDevice
?.
id
)
{
dispatch
(
fetchMessengerHistory
({
deviceId
:
selectedDevice
.
id
,
messengerId
:
selectedMessenger
.
id
,
dateFrom
:
new
Date
(
fromDate
),
dateTo
:
new
Date
(
toDate
),
recStart
:
0
,
})
);
}
};
useEffect
(()
=>
{
fetchMessengerHistories
();
},
[
dispatch
,
selectedDevice
]);
return
(
<
div
className=
"messengers wrapper"
>
...
...
@@ -17,15 +53,27 @@ const Messengers: React.FC = () => {
<
div
className=
"messengers__content"
>
<
div
>
<
div
className=
"messengers__content__header"
>
<
h3
>
Messengers
</
h3
>
<
h3
>
{
t
(
"messengers.title"
)
}
</
h3
>
<
MdInfoOutline
className=
"messengers__content__header__icon"
/>
</
div
>
<
p
className=
"messengers__content__empty"
>
No data
</
p
>
{
loading
&&
(
<
div
className=
"cloading__center"
>
<
CLoading
/>
</
div
>
)
}
{
error
&&
<
p
className=
"text-danger"
>
{
error
}
</
p
>
}
{
messengerHistories
.
length
===
0
&&
!
loading
&&
(
<
p
>
{
t
(
"messengers.empty"
)
}
</
p
>
)
}
</
div
>
<
div
className=
"messengers__filter"
>
<
p
className=
"messengers__filter__title"
>
Select App
&
Dates
</
p
>
<
p
className=
"messengers__filter__title"
>
{
t
(
"common.selectAppAndDates"
)
}
</
p
>
<
div
className=
"messengers__filter__messengers"
>
{
MESSENGERS
.
map
((
messenger
)
=>
{
...
...
@@ -48,17 +96,31 @@ const Messengers: React.FC = () => {
<
div
className=
"messengers__filter__dates"
>
<
div
className=
"messengers__filter__date"
>
<
label
htmlFor=
"from"
>
From
</
label
>
<
input
type=
"date"
id=
"from"
/>
<
label
htmlFor=
"from"
>
{
t
(
"common.from"
)
}
</
label
>
<
input
type=
"date"
id=
"from"
value=
{
fromDate
}
onChange=
{
(
e
)
=>
setFromDate
(
e
.
target
.
value
)
}
/>
</
div
>
<
div
className=
"messengers__filter__date"
>
<
label
htmlFor=
"to"
>
To
</
label
>
<
input
type=
"date"
id=
"to"
/>
<
label
htmlFor=
"to"
>
{
t
(
"common.to"
)
}
</
label
>
<
input
type=
"date"
id=
"to"
value=
{
toDate
}
onChange=
{
(
e
)
=>
setToDate
(
e
.
target
.
value
)
}
/>
</
div
>
</
div
>
<
CButton
title=
"Search"
/>
<
CButton
title=
{
t
(
"button.search"
)
}
isLoading=
{
loading
}
onClick=
{
fetchMessengerHistories
}
/>
</
div
>
</
div
>
</
div
>
...
...
src/stores/slices/messengerHistorySlice.ts
View file @
61067c65
...
...
@@ -2,13 +2,13 @@ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import
{
sendRpcRequest
}
from
"../../services/apiClient"
;
interface
MessengerHistoryState
{
messengerHistor
y
:
any
[];
messengerHistor
ies
:
any
[];
loading
:
boolean
;
error
:
string
|
null
;
}
const
initialState
:
MessengerHistoryState
=
{
messengerHistor
y
:
[],
messengerHistor
ies
:
[],
loading
:
false
,
error
:
null
,
};
...
...
@@ -64,7 +64,7 @@ const messengerHistorySlice = createSlice({
})
.
addCase
(
fetchMessengerHistory
.
fulfilled
,
(
state
,
action
)
=>
{
state
.
loading
=
false
;
state
.
messengerHistor
y
=
action
.
payload
;
state
.
messengerHistor
ies
=
action
.
payload
;
})
.
addCase
(
fetchMessengerHistory
.
rejected
,
(
state
,
action
)
=>
{
state
.
loading
=
false
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment