Commit 61067c65 by asranov0003

refactor: messengers

parent fd032884
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"denied": "Denied", "denied": "Denied",
"loading": "Loading...", "loading": "Loading...",
"selectDates": "Select dates", "selectDates": "Select dates",
"selectAppAndDates": "Select App & Dates",
"from": "From", "from": "From",
"to": "To" "to": "To"
}, },
...@@ -122,6 +123,10 @@ ...@@ -122,6 +123,10 @@
"title": "Call History", "title": "Call History",
"empty": "No call history found." "empty": "No call history found."
}, },
"messengers": {
"title": "Chats",
"empty": "No chats found."
},
"pincode": { "pincode": {
"enterTitle": "Enter your PIN Code", "enterTitle": "Enter your PIN Code",
"createTitle": "Create your PIN Code", "createTitle": "Create your PIN Code",
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"denied": "Выкл", "denied": "Выкл",
"loading": "Загрузка...", "loading": "Загрузка...",
"selectDates": "Выбрать даты", "selectDates": "Выбрать даты",
"selectAppAndDates": "Выбрать приложение и даты",
"from": "От", "from": "От",
"to": "До" "to": "До"
}, },
...@@ -122,6 +123,10 @@ ...@@ -122,6 +123,10 @@
"title": "История звонков", "title": "История звонков",
"empty": "История звонков не найдена." "empty": "История звонков не найдена."
}, },
"messengers": {
"title": "Чаты",
"empty": "Чаты не найдены."
},
"pincode": { "pincode": {
"enterTitle": "Введите PIN-код", "enterTitle": "Введите PIN-код",
"createTitle": "Создайте PIN-код", "createTitle": "Создайте PIN-код",
......
import React, { useState } from "react"; import React, { useEffect, useState } from "react";
import "./Messengers.css"; import "./Messengers.css";
import SectionHeader from "../../layouts/SectionHeader"; import SectionHeader from "../../layouts/SectionHeader";
import { MdInfoOutline } from "react-icons/md"; import { MdInfoOutline } from "react-icons/md";
import CButton from "../../components/CButton"; import CButton from "../../components/CButton";
import { MESSENGERS, type IMessenger } from "../../constants/messengers"; 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 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>( const [selectedMessenger, setSelectedMessenger] = useState<IMessenger>(
MESSENGERS[0] 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 ( return (
<div className="messengers wrapper"> <div className="messengers wrapper">
...@@ -17,15 +53,27 @@ const Messengers: React.FC = () => { ...@@ -17,15 +53,27 @@ const Messengers: React.FC = () => {
<div className="messengers__content"> <div className="messengers__content">
<div> <div>
<div className="messengers__content__header"> <div className="messengers__content__header">
<h3>Messengers</h3> <h3>{t("messengers.title")}</h3>
<MdInfoOutline className="messengers__content__header__icon" /> <MdInfoOutline className="messengers__content__header__icon" />
</div> </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>
<div className="messengers__filter"> <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"> <div className="messengers__filter__messengers">
{MESSENGERS.map((messenger) => { {MESSENGERS.map((messenger) => {
...@@ -48,17 +96,31 @@ const Messengers: React.FC = () => { ...@@ -48,17 +96,31 @@ const Messengers: React.FC = () => {
<div className="messengers__filter__dates"> <div className="messengers__filter__dates">
<div className="messengers__filter__date"> <div className="messengers__filter__date">
<label htmlFor="from">From</label> <label htmlFor="from">{t("common.from")}</label>
<input type="date" id="from" /> <input
type="date"
id="from"
value={fromDate}
onChange={(e) => setFromDate(e.target.value)}
/>
</div> </div>
<div className="messengers__filter__date"> <div className="messengers__filter__date">
<label htmlFor="to">To</label> <label htmlFor="to">{t("common.to")}</label>
<input type="date" id="to" /> <input
type="date"
id="to"
value={toDate}
onChange={(e) => setToDate(e.target.value)}
/>
</div> </div>
</div> </div>
<CButton title="Search" /> <CButton
title={t("button.search")}
isLoading={loading}
onClick={fetchMessengerHistories}
/>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -2,13 +2,13 @@ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; ...@@ -2,13 +2,13 @@ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { sendRpcRequest } from "../../services/apiClient"; import { sendRpcRequest } from "../../services/apiClient";
interface MessengerHistoryState { interface MessengerHistoryState {
messengerHistory: any[]; messengerHistories: any[];
loading: boolean; loading: boolean;
error: string | null; error: string | null;
} }
const initialState: MessengerHistoryState = { const initialState: MessengerHistoryState = {
messengerHistory: [], messengerHistories: [],
loading: false, loading: false,
error: null, error: null,
}; };
...@@ -64,7 +64,7 @@ const messengerHistorySlice = createSlice({ ...@@ -64,7 +64,7 @@ const messengerHistorySlice = createSlice({
}) })
.addCase(fetchMessengerHistory.fulfilled, (state, action) => { .addCase(fetchMessengerHistory.fulfilled, (state, action) => {
state.loading = false; state.loading = false;
state.messengerHistory = action.payload; state.messengerHistories = action.payload;
}) })
.addCase(fetchMessengerHistory.rejected, (state, action) => { .addCase(fetchMessengerHistory.rejected, (state, action) => {
state.loading = false; state.loading = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment