diff --git a/src/client/Containers/Calculation/index.jsx b/src/client/Containers/Calculation/index.jsx index 12206ea..85eef56 100644 --- a/src/client/Containers/Calculation/index.jsx +++ b/src/client/Containers/Calculation/index.jsx @@ -1,10 +1,10 @@ -import { LoadingStatus } from 'client/common/loadingStatus'; import Result from 'client/Components/Result'; import Spinner from 'client/Components/Spinner'; import Modal from 'client/Elements/Modal'; import withModal from 'client/hocs/Calculation/withModal'; +import { useFetch } from 'client/hooks/Calculation/useFetch'; import { Flex } from 'client/UIKit/grid'; -import React, { useEffect, useState } from 'react'; +import React from 'react'; import Info from './Info'; import fetchData from './lib/fetchData'; import Results from './Results'; @@ -12,22 +12,13 @@ import ResultsTable from './ResultsTable'; import Sections from './Sections'; const Calculation = () => { - const [status, setStatus] = useState(LoadingStatus.loading); - useEffect(() => { - fetchData() - .then(() => { - setStatus(LoadingStatus.ready); - }) - .catch(() => { - setStatus(LoadingStatus.error); - }); - }, []); + const { isLoading, error } = useFetch({ fetchData }); - if (status === LoadingStatus.loading) { + if (isLoading) { return ; } - if (status === LoadingStatus.error) { + if (error) { const ServerError = Result[500]; return ; } diff --git a/src/client/Containers/Calculation/lib/elements/elementsProps.ts b/src/client/Containers/Calculation/lib/elements/elementsProps.ts index 5978205..86478fe 100644 --- a/src/client/Containers/Calculation/lib/elements/elementsProps.ts +++ b/src/client/Containers/Calculation/lib/elements/elementsProps.ts @@ -10,7 +10,7 @@ import { validateInn, validateKpp, validatePhone, -} from 'client/tools/validate'; +} from 'core/tools/validate'; import { DownloadOutlined } from '@ant-design/icons'; diff --git a/src/client/Containers/Calculation/lib/fetchData/index.js b/src/client/Containers/Calculation/lib/fetchData/index.js index 1fb5da5..5f4bcd6 100644 --- a/src/client/Containers/Calculation/lib/fetchData/index.js +++ b/src/client/Containers/Calculation/lib/fetchData/index.js @@ -1,6 +1,6 @@ -import CrmService from 'client/services/CrmService'; +import CrmService from 'core/services/CrmService'; import CalculationStore from 'client/stores/CalculationStore'; -import { getUser } from 'client/tools/user'; +import { getUser } from 'core/tools/user'; import insuranceQuery from './queries/insuranceQuery'; import optionsQuery from './queries/optionsQuery'; import initialOwnerQuery from './queries/ownerQuery'; diff --git a/src/client/Containers/Calculation/lib/fetchData/queries/optionsQuery.ts b/src/client/Containers/Calculation/lib/fetchData/queries/optionsQuery.ts index 2e1fa8c..d93352b 100644 --- a/src/client/Containers/Calculation/lib/fetchData/queries/optionsQuery.ts +++ b/src/client/Containers/Calculation/lib/fetchData/queries/optionsQuery.ts @@ -1,4 +1,4 @@ -import { currentDate } from 'client/tools/date'; +import { currentDate } from 'core/tools/date'; import { IQueryToCRMGQL } from 'core/types/Calculation/Requests'; import { gql } from '@apollo/client'; diff --git a/src/client/Containers/Calculation/lib/fetchData/queries/staticDataQuery.ts b/src/client/Containers/Calculation/lib/fetchData/queries/staticDataQuery.ts index b492454..cb9a614 100644 --- a/src/client/Containers/Calculation/lib/fetchData/queries/staticDataQuery.ts +++ b/src/client/Containers/Calculation/lib/fetchData/queries/staticDataQuery.ts @@ -1,5 +1,5 @@ import { IQueryToCRMGQL } from 'core/types/Calculation/Requests'; -import { currentDate } from 'client/tools/date'; +import { currentDate } from 'core/tools/date'; import { gql } from '@apollo/client'; const query = gql` diff --git a/src/client/Layout/routes.jsx b/src/client/Layout/routes.jsx index 9105f53..59cf0f7 100644 --- a/src/client/Layout/routes.jsx +++ b/src/client/Layout/routes.jsx @@ -1,8 +1,8 @@ -import paths from 'client/common/paths'; +import paths from 'core/common/paths'; import Spinner from 'client/Components/Spinner'; import React, { Suspense } from 'react'; import { Route, Switch } from 'react-router-dom'; -import { container as resolveContainer } from 'client/tools/resolve'; +import { container as resolveContainer } from 'core/tools/resolve'; export default () => ( }> diff --git a/src/client/common/loadingStatus.ts b/src/client/common/loadingStatus.ts deleted file mode 100644 index 6fa0a8d..0000000 --- a/src/client/common/loadingStatus.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum LoadingStatus { - loading, - ready, - error, -} diff --git a/src/client/hooks/Calculation/useFetch.js b/src/client/hooks/Calculation/useFetch.js new file mode 100644 index 0000000..2a030b6 --- /dev/null +++ b/src/client/hooks/Calculation/useFetch.js @@ -0,0 +1,22 @@ +import { useEffect, useState } from 'react'; + +export const useFetch = ({ fetchData }) => { + const [response, setResponse] = useState(); + const [error, setError] = useState(); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + setIsLoading(true); + fetchData() + .then(res => { + setResponse(res); + }) + .catch(err => { + setError(err); + }) + .finally(() => { + setIsLoading(false); + }); + }, []); + return { response, isLoading, error }; +}; diff --git a/src/client/hooks/Calculation/useUrl.js b/src/client/hooks/Calculation/useUrl.js index 8968b48..ab80974 100644 --- a/src/client/hooks/Calculation/useUrl.js +++ b/src/client/hooks/Calculation/useUrl.js @@ -1,6 +1,7 @@ -import { calculationUrls } from 'client/stores/CalculationStore'; +import { useStores } from '../useStores'; export const useUrl = ({ urlName }) => { + const { calculationUrls } = useStores(); const url = calculationUrls.urls[urlName]; return { url }; }; diff --git a/src/client/hooks/Calculation/useValidation.ts b/src/client/hooks/Calculation/useValidation.ts index 34fd755..7e8478d 100644 --- a/src/client/hooks/Calculation/useValidation.ts +++ b/src/client/hooks/Calculation/useValidation.ts @@ -1,7 +1,7 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { ValidateStatus } from 'antd/lib/form/FormItem'; -import { INVALID_INPUT as INVALID_INPUT_MESSAGE } from 'client/constants/errorMessages'; +import { INVALID_INPUT as INVALID_INPUT_MESSAGE } from 'core/constants/errorMessages'; import { ElementsNames } from 'core/types/Calculation/Store/elements'; import { TableNames, diff --git a/src/client/hooks/Calculation/useValue.js b/src/client/hooks/Calculation/useValue.js index bfaeb3a..05e2f51 100644 --- a/src/client/hooks/Calculation/useValue.js +++ b/src/client/hooks/Calculation/useValue.js @@ -1,5 +1,5 @@ /* eslint-disable react-hooks/exhaustive-deps */ -import { DEFAULT_DEBOUNCE_DELAY } from 'client/constants/debounce'; +import { DEFAULT_DEBOUNCE_DELAY } from 'core/constants/debounce'; import { Process } from 'core/types/Calculation/Store/process'; import { useEffect, useState } from 'react'; import { useDebouncedCallback } from 'use-debounce'; diff --git a/src/client/stores/CalculationStore/Effects/actions/calculate/index.js b/src/client/stores/CalculationStore/Effects/actions/calculate/index.js index 7459c10..6addcd0 100644 --- a/src/client/stores/CalculationStore/Effects/actions/calculate/index.js +++ b/src/client/stores/CalculationStore/Effects/actions/calculate/index.js @@ -1,6 +1,6 @@ import { message } from 'antd'; import { openNotification } from 'client/Elements/Notification'; -import CalculationService from 'client/services/CalculationService'; +import CalculationService from 'core/services/CalculationService'; import { resultsValues } from 'core/types/Calculation/Store/values'; import { ElementStatus } from 'core/types/statuses'; import CalculationStore from '../../..'; diff --git a/src/client/stores/CalculationStore/Effects/actions/createKP.js b/src/client/stores/CalculationStore/Effects/actions/createKP.js index 407f074..69be1ba 100644 --- a/src/client/stores/CalculationStore/Effects/actions/createKP.js +++ b/src/client/stores/CalculationStore/Effects/actions/createKP.js @@ -1,8 +1,8 @@ import { gql } from '@apollo/client'; import { message } from 'antd'; import { openNotification } from 'client/Elements/Notification'; -import CrmService from 'client/services/CrmService'; -import { getUser } from 'client/tools/user'; +import CrmService from 'core/services/CrmService'; +import { getUser } from 'core/tools/user'; import { CRM_PROXY_URL } from 'core/constants/urls'; import { toJS } from 'mobx'; import CalculationStore, { calculationUrls } from '../..'; diff --git a/src/client/stores/CalculationStore/Effects/reactions/loadKpReaction/index.ts b/src/client/stores/CalculationStore/Effects/reactions/loadKpReaction/index.ts index 35a7333..c1e43cf 100644 --- a/src/client/stores/CalculationStore/Effects/reactions/loadKpReaction/index.ts +++ b/src/client/stores/CalculationStore/Effects/reactions/loadKpReaction/index.ts @@ -3,10 +3,10 @@ import { message } from 'antd'; import { elementsValues } from 'client/Containers/Calculation/lib/elements/values'; import { openNotification } from 'client/Elements/Notification'; -import CrmService from 'client/services/CrmService'; +import CrmService from 'core/services/CrmService'; import { calculationProcess } from 'client/stores/CalculationStore'; import initialValues from 'client/stores/CalculationStore/config/initialValues'; -import { currentDate } from 'client/tools/date'; +import { currentDate } from 'core/tools/date'; import { IReactionEffect } from 'core/types/Calculation/Store/effect'; import { Process } from 'core/types/Calculation/Store/process'; import { ElementStatus } from 'core/types/statuses'; diff --git a/src/client/stores/CalculationStore/Effects/reactions/requestReactions.ts b/src/client/stores/CalculationStore/Effects/reactions/requestReactions.ts index e40761a..fd83ec7 100644 --- a/src/client/stores/CalculationStore/Effects/reactions/requestReactions.ts +++ b/src/client/stores/CalculationStore/Effects/reactions/requestReactions.ts @@ -1,6 +1,6 @@ import { gql } from '@apollo/client'; -import CrmService from 'client/services/CrmService'; -import { currentDate } from 'client/tools/date'; +import CrmService from 'core/services/CrmService'; +import { currentDate } from 'core/tools/date'; import { IReactionEffect } from 'core/types/Calculation/Store/effect'; import { ElementStatus } from 'core/types/statuses'; import { Process } from 'core/types/Calculation/Store/process'; diff --git a/src/client/stores/index.js b/src/client/stores/index.js index 3446553..d19aa04 100644 --- a/src/client/stores/index.js +++ b/src/client/stores/index.js @@ -1,9 +1,13 @@ -import CalculationStore, { calculationProcess } from './CalculationStore'; +import CalculationStore, { + calculationProcess, + calculationUrls, +} from './CalculationStore'; class RootStore { constructor() { this.calculationStore = CalculationStore; this.calculationProcess = calculationProcess; + this.calculationUrls = calculationUrls; } } diff --git a/src/client/common/paths.js b/src/core/common/paths.js similarity index 100% rename from src/client/common/paths.js rename to src/core/common/paths.js diff --git a/src/client/constants/debounce.js b/src/core/constants/debounce.js similarity index 100% rename from src/client/constants/debounce.js rename to src/core/constants/debounce.js diff --git a/src/client/constants/errorMessages.js b/src/core/constants/errorMessages.js similarity index 100% rename from src/client/constants/errorMessages.js rename to src/core/constants/errorMessages.js diff --git a/src/client/services/CalculationService/index.ts b/src/core/services/CalculationService/index.ts similarity index 100% rename from src/client/services/CalculationService/index.ts rename to src/core/services/CalculationService/index.ts diff --git a/src/client/services/CrmService/client.ts b/src/core/services/CrmService/client.ts similarity index 74% rename from src/client/services/CrmService/client.ts rename to src/core/services/CrmService/client.ts index ffc3670..642ba4a 100644 --- a/src/client/services/CrmService/client.ts +++ b/src/core/services/CrmService/client.ts @@ -2,6 +2,6 @@ import { ApolloClient, InMemoryCache } from '@apollo/client'; import { CRM_PROXY_URL } from 'core/constants/urls'; export default new ApolloClient({ - uri: String.prototype.concat('/proxy', CRM_PROXY_URL, '/'), + uri: String.prototype.concat(CRM_PROXY_URL, '/'), cache: new InMemoryCache(), }); diff --git a/src/client/services/CrmService/index.ts b/src/core/services/CrmService/index.ts similarity index 100% rename from src/client/services/CrmService/index.ts rename to src/core/services/CrmService/index.ts diff --git a/src/client/services/CrmService/propsMap.ts b/src/core/services/CrmService/propsMap.ts similarity index 100% rename from src/client/services/CrmService/propsMap.ts rename to src/core/services/CrmService/propsMap.ts diff --git a/src/client/services/CrmService/tools/entity.ts b/src/core/services/CrmService/tools/entity.ts similarity index 100% rename from src/client/services/CrmService/tools/entity.ts rename to src/core/services/CrmService/tools/entity.ts diff --git a/src/client/tools/assignProps.js b/src/core/tools/assignProps.js similarity index 100% rename from src/client/tools/assignProps.js rename to src/core/tools/assignProps.js diff --git a/src/client/tools/date.js b/src/core/tools/date.js similarity index 100% rename from src/client/tools/date.js rename to src/core/tools/date.js diff --git a/src/client/tools/resolve.js b/src/core/tools/resolve.js similarity index 100% rename from src/client/tools/resolve.js rename to src/core/tools/resolve.js diff --git a/src/client/tools/user.ts b/src/core/tools/user.ts similarity index 100% rename from src/client/tools/user.ts rename to src/core/tools/user.ts diff --git a/src/client/tools/validate.js b/src/core/tools/validate.js similarity index 100% rename from src/client/tools/validate.js rename to src/core/tools/validate.js