diff --git a/src/client/components/ComicDetail/AcquisitionPanel.tsx b/src/client/components/ComicDetail/AcquisitionPanel.tsx index 27d3d0c..3e1f7f5 100644 --- a/src/client/components/ComicDetail/AcquisitionPanel.tsx +++ b/src/client/components/ComicDetail/AcquisitionPanel.tsx @@ -14,6 +14,8 @@ import { RootState, SearchInstance } from "threetwo-ui-typings"; import ellipsize from "ellipsize"; import { Form, Field } from "react-final-form"; import { isEmpty, isNil, map } from "lodash"; +import { useStore } from "../../store"; +import { useShallow } from "zustand/react/shallow"; interface IAcquisitionPanelProps { query: any; @@ -25,26 +27,38 @@ interface IAcquisitionPanelProps { export const AcquisitionPanel = ( props: IAcquisitionPanelProps, ): ReactElement => { + const { + airDCPPSocketInstance, + airDCPPClientConfiguration, + airDCPPSessionInformation, + } = useStore( + useShallow((state) => ({ + airDCPPSocketInstance: state.airDCPPSocketInstance, + airDCPPClientConfiguration: state.airDCPPClientConfiguration, + airDCPPSessionInformation: state.airDCPPSessionInformation, + })), + ); + console.log("ulhas umlaut", airDCPPSessionInformation); const issueName = props.query.issue.name || ""; // const { settings } = props; const sanitizedIssueName = issueName.replace(/[^a-zA-Z0-9 ]/g, " "); // Selectors for picking state - const airDCPPSearchResults = useSelector((state: RootState) => { - return state.airdcpp.searchResults; - }); - const isAirDCPPSearchInProgress = useSelector( - (state: RootState) => state.airdcpp.isAirDCPPSearchInProgress, - ); - const searchInfo = useSelector( - (state: RootState) => state.airdcpp.searchInfo, - ); - const searchInstance: SearchInstance = useSelector( - (state: RootState) => state.airdcpp.searchInstance, - ); + // const airDCPPSearchResults = useSelector((state: RootState) => { + // return state.airdcpp.searchResults; + // }); + // const isAirDCPPSearchInProgress = useSelector( + // (state: RootState) => state.airdcpp.isAirDCPPSearchInProgress, + // ); + // const searchInfo = useSelector( + // (state: RootState) => state.airdcpp.searchInfo, + // ); + // const searchInstance: SearchInstance = useSelector( + // (state: RootState) => state.airdcpp.searchInstance, + // ); // const settings = useSelector((state: RootState) => state.settings.data); - const airDCPPConfiguration = useContext(AirDCPPSocketContext); + // const airDCPPConfiguration = useContext(AirDCPPSocketContext); const [dcppQuery, setDcppQuery] = useState({}); diff --git a/src/client/components/Settings/AirDCPPSettings/AirDCPPHubsForm.tsx b/src/client/components/Settings/AirDCPPSettings/AirDCPPHubsForm.tsx index c2a88bf..0524f95 100644 --- a/src/client/components/Settings/AirDCPPSettings/AirDCPPHubsForm.tsx +++ b/src/client/components/Settings/AirDCPPSettings/AirDCPPHubsForm.tsx @@ -1,38 +1,67 @@ import React, { ReactElement, useEffect, useState, useContext } from "react"; import { Form, Field } from "react-final-form"; -import { useDispatch } from "react-redux"; import { isEmpty, isNil, isUndefined } from "lodash"; import Select from "react-select"; import { saveSettings } from "../../../actions/settings.actions"; -import { AirDCPPSocketContext } from "../../../context/AirDCPPSocket"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { useStore } from "../../../store"; +import { useShallow } from "zustand/react/shallow"; +import axios from "axios"; export const AirDCPPHubsForm = (airDCPPClientUserSettings): ReactElement => { - const dispatch = useDispatch(); - const [hubList, setHubList] = useState([]); - const airDCPPConfiguration = useContext(AirDCPPSocketContext); + const queryClient = useQueryClient(); const { - airDCPPState: { settings, socket }, - } = airDCPPConfiguration; + airDCPPSocketInstance, + airDCPPClientConfiguration, + airDCPPSessionInformation, + } = useStore( + useShallow((state) => ({ + airDCPPSocketInstance: state.airDCPPSocketInstance, + airDCPPClientConfiguration: state.airDCPPClientConfiguration, + airDCPPSessionInformation: state.airDCPPSessionInformation, + })), + ); - useEffect(() => { - (async () => { - if (!isEmpty(settings)) { - const hubs = await socket.get(`hubs`); - const hubSelectionOptions = hubs.map(({ hub_url, identity }) => ({ - value: hub_url, - label: identity.name, - })); + const { data, isLoading, isError } = useQuery({ + queryKey: ["settings"], + queryFn: async () => + await axios({ + url: "http://localhost:3000/api/settings/getAllSettings", + method: "GET", + }), + }); - setHubList(hubSelectionOptions); - } - })(); - }, []); + console.log("Asd", data); + const { + settings: { + data: { directConnect }, + }, + } = data; - const onSubmit = (values) => { - if (!isUndefined(values.hubs)) { - dispatch(saveSettings({ ...settings, hubs: values.hubs }, settings._id)); - } - }; + const { data: hubs } = useQuery({ + queryKey: [], + queryFn: async () => await airDCPPSocketInstance.get(`hubs`), + enabled: !!settings, + }); + let hubList = {}; + if (hubs) { + hubList = hubs.map(({ hub_url, identity }) => ({ + value: hub_url, + label: identity.name, + })); + } + + const { mutate } = useMutation({ + mutationFn: async (values) => + await axios({ + url: `http://localhost:3000/api/settings/saveSettings`, + method: "POST", + data: { settingsPayload: values, settingsKey: "directConnect" }, + }), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["settings"] }); + }, + }); const validate = async () => {}; @@ -43,7 +72,7 @@ export const AirDCPPHubsForm = (airDCPPClientUserSettings): ReactElement => { return ( <>