From c0f0c3ced30528a9ef5d5a5a446bc13ccfefa7fc Mon Sep 17 00:00:00 2001 From: Chika Date: Mon, 13 Sep 2021 09:26:13 +0300 Subject: [PATCH] UI\UX improvements --- craco.config.js | 1 + package.json | 1 + src/client/Components/Result.jsx | 9 ++- .../Containers/Calculation/Results/index.jsx | 7 +- .../Calculation/Results/resultsList.ts | 67 +++++++++++++------ .../Calculation/ResultsTable/index.jsx | 12 ---- .../ResultsTable/resultsTableList.ts | 13 ---- .../Calculation/Sections/sectionsList.ts | 33 +++++---- src/client/Containers/Calculation/index.jsx | 23 +++---- .../Calculation/lib/renderSections.js | 48 +++++++------ src/client/hooks/Calculation/useFetch.js | 10 ++- 11 files changed, 118 insertions(+), 106 deletions(-) delete mode 100644 src/client/Containers/Calculation/ResultsTable/index.jsx delete mode 100644 src/client/Containers/Calculation/ResultsTable/resultsTableList.ts diff --git a/craco.config.js b/craco.config.js index 9354b43..49d3f98 100644 --- a/craco.config.js +++ b/craco.config.js @@ -37,6 +37,7 @@ module.exports = { }, }, ], + ['babel-plugin-styled-components'], ], }, }; diff --git a/package.json b/package.json index a44e83d..de1b9de 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@testing-library/user-event": "^12.1.10", "antd": "^4.15.5", "axios": "^0.21.1", + "babel-plugin-styled-components": "^1.13.2", "babel-plugin-transform-imports": "^2.0.0", "craco-antd": "^1.19.0", "craco-esbuild": "^0.3.4", diff --git a/src/client/Components/Result.jsx b/src/client/Components/Result.jsx index 93c3d0c..01086ce 100644 --- a/src/client/Components/Result.jsx +++ b/src/client/Components/Result.jsx @@ -2,7 +2,12 @@ import { Result } from 'antd'; export default { 404: () => , - 500: () => ( - + 500: props => ( + ), }; diff --git a/src/client/Containers/Calculation/Results/index.jsx b/src/client/Containers/Calculation/Results/index.jsx index 61304d4..c18eb7d 100644 --- a/src/client/Containers/Calculation/Results/index.jsx +++ b/src/client/Containers/Calculation/Results/index.jsx @@ -1,13 +1,10 @@ -import { renderGroups } from 'client/Containers/Calculation/lib/renderSections'; +import { renderSections } from 'client/Containers/Calculation/lib/renderSections'; import Background from 'client/Elements/Background'; -import { Flex } from 'client/UIKit/grid'; import { calculationResults } from './resultsList'; const Results = props => ( - - {renderGroups({ groups: calculationResults })} - + {renderSections({ sectionsList: calculationResults })} ); diff --git a/src/client/Containers/Calculation/Results/resultsList.ts b/src/client/Containers/Calculation/Results/resultsList.ts index 3818e48..1f6a019 100644 --- a/src/client/Containers/Calculation/Results/resultsList.ts +++ b/src/client/Containers/Calculation/Results/resultsList.ts @@ -1,28 +1,51 @@ -import { IGroup } from 'core/types/Calculation/components'; +import { ISection } from 'core/types/Calculation/components'; -export const calculationResults: IGroup[] = [ +export const calculationResults: ISection[] = [ { - style: { columnsNumber: 1 }, - blocks: [ + title: 'График платежей', + groups: [ { - title: 'Результаты', - elements: [ - 'labelResultTotalGraphwithNDS', - 'labelResultPlPrice', - 'labelResultPriceUpPr', - 'labelResultIRRGraphPerc', - 'labelResultIRRNominalPerc', - 'labelResultInsKasko', - 'labelResultInsOsago', - 'labelResultDopProdSum', - 'labelResultFirstPayment', - 'labelResultLastPayment', - 'labelResultTerm', - 'labelResultAB_FL', - 'labelResultAB_UL', - 'labelResultBonusMPL', - 'labelResultDopMPLLeasing', - 'labelResultBonusDopProd', + style: { columnsNumber: 1 }, + blocks: [ + { + elements: ['tableResults'], + }, + ], + }, + ], + }, + { + title: 'Результаты', + groups: [ + { + style: { columnsNumber: 1 }, + blocks: [ + { + style: { columnsNumber: 2 }, + elementStyle: { + head: { + whiteSpace: 'normal', + }, + }, + elements: [ + 'labelResultTotalGraphwithNDS', + 'labelResultPlPrice', + 'labelResultPriceUpPr', + 'labelResultIRRGraphPerc', + 'labelResultIRRNominalPerc', + 'labelResultInsKasko', + 'labelResultInsOsago', + 'labelResultDopProdSum', + 'labelResultFirstPayment', + 'labelResultLastPayment', + 'labelResultTerm', + 'labelResultAB_FL', + 'labelResultAB_UL', + 'labelResultBonusMPL', + 'labelResultDopMPLLeasing', + 'labelResultBonusDopProd', + ], + }, ], }, ], diff --git a/src/client/Containers/Calculation/ResultsTable/index.jsx b/src/client/Containers/Calculation/ResultsTable/index.jsx deleted file mode 100644 index e1e68fd..0000000 --- a/src/client/Containers/Calculation/ResultsTable/index.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import { renderGroups } from 'client/Containers/Calculation/lib/renderSections'; -import Background from 'client/Elements/Background'; -import { Flex } from 'client/UIKit/grid'; -import { resultsTable } from './resultsTableList'; - -const Results = props => ( - - {renderGroups({ groups: resultsTable })} - -); - -export default Results; diff --git a/src/client/Containers/Calculation/ResultsTable/resultsTableList.ts b/src/client/Containers/Calculation/ResultsTable/resultsTableList.ts deleted file mode 100644 index c3f84fb..0000000 --- a/src/client/Containers/Calculation/ResultsTable/resultsTableList.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IGroup } from 'core/types/Calculation/components'; - -export const resultsTable: IGroup[] = [ - { - style: { columnsNumber: 1 }, - blocks: [ - { - title: 'График платежей', - elements: ['tableResults'], - }, - ], - }, -]; diff --git a/src/client/Containers/Calculation/Sections/sectionsList.ts b/src/client/Containers/Calculation/Sections/sectionsList.ts index 1757209..e67cbc1 100644 --- a/src/client/Containers/Calculation/Sections/sectionsList.ts +++ b/src/client/Containers/Calculation/Sections/sectionsList.ts @@ -397,20 +397,22 @@ const sections: ISection[] = [ title: 'Создание КП', groups: [ { + style: { columnsNumber: 1 }, blocks: [ { + style: { columnsNumber: 2 }, + elementStyle: { + head: { + whiteSpace: 'normal', + }, + }, elements: [ 'cbxLastPaymentRedemption', 'cbxPriceWithDiscount', 'cbxFullPriceWithDiscount', 'cbxCostIncrease', - ], - }, - { - elements: ['cbxInsurance', 'cbxRegistrationQuote'], - }, - { - elements: [ + 'cbxInsurance', + 'cbxRegistrationQuote', 'cbxTechnicalCardQuote', 'cbxNSIB', 'cbxQuoteRedemptionGraph', @@ -419,24 +421,21 @@ const sections: ISection[] = [ ], }, { - style: { columnsNumber: 2 }, + style: { columnsNumber: 1 }, blocks: [ { - elements: ['tbxQuoteName'], - }, - { - elements: ['radioQuoteContactGender'], + style: { columnsNumber: 2 }, + elements: ['tbxQuoteName', 'radioQuoteContactGender'], }, ], }, { - style: { columnsNumber: 2 }, + style: { columnsNumber: 1 }, blocks: [ { - elements: ['btnCreateKP'], - }, - { - elements: ['linkDownloadKp'], + style: { columnsNumber: 2 }, + + elements: ['btnCreateKP', 'linkDownloadKp'], }, ], }, diff --git a/src/client/Containers/Calculation/index.jsx b/src/client/Containers/Calculation/index.jsx index e14131b..dc19e64 100644 --- a/src/client/Containers/Calculation/index.jsx +++ b/src/client/Containers/Calculation/index.jsx @@ -1,14 +1,14 @@ import Result from 'client/Components/Result'; import Spinner from 'client/Components/Spinner'; +import Button from 'client/Elements/Button'; import { CenterContent } from 'client/Elements/Wrapper'; import { useFetch } from 'client/hooks/Calculation/useFetch'; -import { Box, Flex } from 'client/UIKit/grid'; +import { Box } from 'client/UIKit/grid'; import mq from 'client/UIKit/mq'; import styled from 'styled-components'; import Info from './Info'; import fetchData from './lib/fetchData'; import Results from './Results'; -import ResultsTable from './ResultsTable'; import Sections from './Sections'; const Grid = styled(Box)` @@ -25,15 +25,8 @@ const Grid = styled(Box)` `} `; -const Middle = () => ( - - - - -); - const Calculation = () => { - const { isLoading, error } = useFetch({ fetchData }); + const { isLoading, error, fetch } = useFetch({ fetchData }); if (isLoading) { return ( @@ -45,14 +38,18 @@ const Calculation = () => { if (error) { const ServerError = Result[500]; - return ; + return ( + ]} + /> + ); } return ( - - + + ); }; diff --git a/src/client/Containers/Calculation/lib/renderSections.js b/src/client/Containers/Calculation/lib/renderSections.js index 12aaa83..b6c8834 100644 --- a/src/client/Containers/Calculation/lib/renderSections.js +++ b/src/client/Containers/Calculation/lib/renderSections.js @@ -17,10 +17,10 @@ const ElementTitle = styled.h5` margin: 0 8px 3px 0; text-overflow: ellipsis; overflow: hidden; - white-space: nowrap; + white-space: ${props => props.whiteSpace || 'nowrap'}; `; -const Head = ({ sub, elementTitle }) => { +const Head = ({ sub, elementTitle, style }) => { if (sub?.Component) { return ( { justifyContent={[undefined, 'space-between']} alignItems={[undefined, 'center']} > - {elementTitle} + {elementTitle} ); } - return {elementTitle}; + return {elementTitle}; }; -const renderElements = ({ elements }) => { +const renderElements = ({ elements, elementStyle }) => { return elements.map((elementName, ie) => { const elementTitle = elementsTitles[elementName]; const { tooltip, sub, ...elementProps } = elementsProps[elementName] || {}; @@ -46,7 +46,11 @@ const renderElements = ({ elements }) => { const element = ( - + ); @@ -57,16 +61,29 @@ const renderElements = ({ elements }) => { }); }; +const ElementsGrid = styled(Box)` + display: grid; + grid-gap: 10px; + + grid-template-columns: 1fr; + ${mq.laptop` + grid-template-columns: repeat(${props => + props.columnsNumber || props.defaultColumnsNumber}, 1fr); + `} +`; + const renderBlocks = ({ blocks }) => { if (!blocks || blocks.length === 0) { return null; } return blocks.map((block, ib) => { - const { elements, title } = block; + const { elements, title, style, elementStyle } = block; return ( {title && {title}} - {renderElements({ elements })} + + {renderElements({ elements, elementStyle })} + ); }); @@ -78,17 +95,6 @@ const BlocksTitle = styled(Divider)` font-size: 0.95rem; `; -const BlocksGrid = styled(Box)` - display: grid; - grid-gap: 10px; - - grid-template-columns: 1fr; - ${mq.laptop` - grid-template-columns: repeat(${props => - props.columnsNumber || 2}, 1fr); - `} -`; - export const renderGroups = ({ groups }) => { if (!groups || groups.length === 0) { return null; @@ -99,7 +105,9 @@ export const renderGroups = ({ groups }) => { return ( {title && {title}} - {renderBlocks({ blocks })} + + {renderBlocks({ blocks })} + ); }); diff --git a/src/client/hooks/Calculation/useFetch.js b/src/client/hooks/Calculation/useFetch.js index 2a030b6..23d86dc 100644 --- a/src/client/hooks/Calculation/useFetch.js +++ b/src/client/hooks/Calculation/useFetch.js @@ -5,7 +5,9 @@ export const useFetch = ({ fetchData }) => { const [error, setError] = useState(); const [isLoading, setIsLoading] = useState(false); - useEffect(() => { + function fetch() { + setError(false); + setResponse(undefined); setIsLoading(true); fetchData() .then(res => { @@ -17,6 +19,10 @@ export const useFetch = ({ fetchData }) => { .finally(() => { setIsLoading(false); }); + } + + useEffect(() => { + fetch(); }, []); - return { response, isLoading, error }; + return { response, isLoading, error, fetch }; };