Commit 7a3d50d8 by asranov0003

feat: add feature delete device

parent 12a8d101
...@@ -152,6 +152,10 @@ ...@@ -152,6 +152,10 @@
"createTitle": "Создайте PIN-код", "createTitle": "Создайте PIN-код",
"confirmTitle": "Подтвердите PIN-код" "confirmTitle": "Подтвердите PIN-код"
}, },
"device": {
"deleteDevice": "Удалить устройство",
"deleteDeviceDesc": "Вы уверены, что хотите удалить это устройство?"
},
"logout": { "logout": {
"title": "Выйти", "title": "Выйти",
"desc": "Вы уверены, что хотите продолжить?" "desc": "Вы уверены, что хотите продолжить?"
...@@ -164,6 +168,7 @@ ...@@ -164,6 +168,7 @@
"resetPassword": "Сбросить пароль", "resetPassword": "Сбросить пароль",
"logout": "Выйти", "logout": "Выйти",
"cancel": "Отмена", "cancel": "Отмена",
"delete": "Удалить",
"search": "Поиск", "search": "Поиск",
"save": "Сохранить", "save": "Сохранить",
"confirm": "Подтвердить" "confirm": "Подтвердить"
......
...@@ -22,7 +22,7 @@ import { ...@@ -22,7 +22,7 @@ import {
useAppSelector, useAppSelector,
type RootState, type RootState,
} from "../../stores/store"; } from "../../stores/store";
import { fetchDeviceData } from "../../stores/slices/deviceSlice"; import { deleteDevice, fetchDeviceData } from "../../stores/slices/deviceSlice";
import GoogleMapReact from "google-map-react"; import GoogleMapReact from "google-map-react";
import CMarker from "../../components/CMarker/CMarker"; import CMarker from "../../components/CMarker/CMarker";
import CModal from "../../components/CModal"; import CModal from "../../components/CModal";
...@@ -36,7 +36,7 @@ const Home: React.FC = () => { ...@@ -36,7 +36,7 @@ const Home: React.FC = () => {
}); });
const ref = useRef<SheetRef>(null); const ref = useRef<SheetRef>(null);
const { t } = useTranslation(); const { t } = useTranslation();
const { deviceData, selectedDevice } = useAppSelector( const { deviceData, selectedDevice, isDeletingDevice } = useAppSelector(
(state: RootState) => state.device (state: RootState) => state.device
); );
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
...@@ -61,6 +61,16 @@ const Home: React.FC = () => { ...@@ -61,6 +61,16 @@ const Home: React.FC = () => {
setIsOpenRemoveDeviceModal((prev) => !prev); setIsOpenRemoveDeviceModal((prev) => !prev);
}; };
const handleDeleteDevice = async () => {
try {
await dispatch(deleteDevice(selectedDevice?.id || ""));
} catch (error) {
console.error("Failed to delete device:", error);
} finally {
setIsOpenRemoveDeviceModal(false);
}
};
return ( return (
<> <>
<div className="home"> <div className="home">
...@@ -181,7 +191,12 @@ const Home: React.FC = () => { ...@@ -181,7 +191,12 @@ const Home: React.FC = () => {
title={t("button.cancel")} title={t("button.cancel")}
onClick={toggleRemoveDeviceModal} onClick={toggleRemoveDeviceModal}
/> />
<CButton title={t("button.delete")} variant="danger" /> <CButton
title={t("button.delete")}
variant="danger"
isLoading={isDeletingDevice}
onClick={handleDeleteDevice}
/>
</div> </div>
</div> </div>
} }
......
...@@ -18,6 +18,7 @@ interface IDeviceState { ...@@ -18,6 +18,7 @@ interface IDeviceState {
loadingDevices: boolean; loadingDevices: boolean;
errorDevices: string; errorDevices: string;
isFetched: boolean; isFetched: boolean;
isDeletingDevice: boolean;
} }
const initialState: IDeviceState = { const initialState: IDeviceState = {
...@@ -27,6 +28,7 @@ const initialState: IDeviceState = { ...@@ -27,6 +28,7 @@ const initialState: IDeviceState = {
loadingDevices: false, loadingDevices: false,
errorDevices: "", errorDevices: "",
isFetched: false, isFetched: false,
isDeletingDevice: false,
}; };
export const fetchDevices = createAsyncThunk( export const fetchDevices = createAsyncThunk(
...@@ -70,6 +72,31 @@ export const fetchDeviceData = createAsyncThunk( ...@@ -70,6 +72,31 @@ export const fetchDeviceData = createAsyncThunk(
} }
); );
export const deleteDevice = createAsyncThunk(
"device/deleteDevice",
async (deviceId: string, { rejectWithValue }) => {
try {
const response = await sendRpcRequest<{ success: boolean }>(
"devices.deleteDevice",
{ deviceId }
);
console.log(response);
if (response.success) {
fetchDevices();
}
return response;
} catch (error: unknown) {
if (typeof error === "object" && error !== null && "message" in error) {
return rejectWithValue(error.message);
}
return rejectWithValue("Unknown error occurred");
}
}
);
const deviceSlice = createSlice({ const deviceSlice = createSlice({
name: "device", name: "device",
initialState, initialState,
...@@ -99,6 +126,20 @@ const deviceSlice = createSlice({ ...@@ -99,6 +126,20 @@ const deviceSlice = createSlice({
.addCase(fetchDeviceData.fulfilled, (state, action) => { .addCase(fetchDeviceData.fulfilled, (state, action) => {
state.deviceData = action.payload; state.deviceData = action.payload;
})
.addCase(deleteDevice.pending, (state) => {
state.isDeletingDevice = true;
})
.addCase(deleteDevice.fulfilled, (state, action) => {
state.isDeletingDevice = false;
if (action.payload.success) {
state.isFetched = false;
}
})
.addCase(deleteDevice.rejected, (state, action) => {
state.isDeletingDevice = false;
console.error("Error deleting device:", action.payload);
}); });
}, },
}); });
......
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