vchikalkin 32f265fc8d optimize package/ui/elements imports
optimize antd/link imports

ui/elements/text: use antd component

ui/element: optimize input, input-number, switch, checkbox imports

fix Number typename

ui/elements: optimize Radio, Segmented, Select

move type Status to store types

fix TableInsurance builders

packages/ui: remove antd dir

Output/Results: fix elements margin

revert Loading status to elements

packages/ui: remove value from props

remove unnecessary loading prop
2023-05-16 11:31:45 +03:00

219 lines
6.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { buildLink } from '../../builders';
import components from '../elements-components';
import elementsProps from '../elements-props';
import titles from '../elements-titles';
import types from '../elements-types';
import map from '../map';
import type { RenderProps } from './types';
import { Container, Head } from '@/Components/Layout/Element';
import { useStore } from '@/stores/hooks';
import { useIsFetching } from '@tanstack/react-query';
import { observer } from 'mobx-react-lite';
import type { ComponentProps } from 'react';
import { Link, Tooltip } from 'ui/elements';
import { LoadingOutlined } from 'ui/elements/icons';
const defaultLinkProps: ComponentProps<typeof Link> = {
children: 'Открыть в CRM',
type: 'link',
};
const overrideRender: Partial<Record<keyof typeof map, RenderProps>> = {
selectHighSeasonStart: {
render: () => {
const elementName = 'selectHighSeasonStart';
const title = titles.selectHighSeasonStart;
const valueName = map.selectHighSeasonStart;
const Component = components.selectHighSeasonStart;
const props = elementsProps.selectHighSeasonStart;
const { builder } = types.selectHighSeasonStart();
const Element = builder(Component, {
elementName,
valueName,
});
return (
<Tooltip placement="topLeft" title="С какого платежа начинается полный высокий сезон">
<Container>
<Head htmlFor={elementName} title={title} />
<Element {...props} id={elementName} />
</Container>
</Tooltip>
);
},
},
selectLead: {
render: () => {
const elementName = 'selectLead';
const title = titles.selectLead;
const valueName = map.selectLead;
const Component = components.selectLead;
const props = elementsProps.selectLead;
const { builder } = types.selectLead();
const Element = builder(Component, {
elementName,
valueName,
});
const LinkComponent = buildLink(Link, {
elementName: 'linkLeadUrl',
valueName: 'leadUrl',
});
return (
<Container key={elementName}>
<Head
addon={<LinkComponent {...defaultLinkProps} />}
htmlFor={elementName}
title={title}
/>
<Element {...props} id={elementName} />
</Container>
);
},
},
selectOpportunity: {
render: () => {
const elementName = 'selectOpportunity';
const title = titles.selectOpportunity;
const valueName = map.selectOpportunity;
const Component = components.selectOpportunity;
const props = elementsProps.selectOpportunity;
const { builder } = types.selectOpportunity();
const Element = builder(Component, {
elementName,
valueName,
});
const LinkComponent = buildLink(Link, {
elementName: 'linkOpportunityUrl',
valueName: 'opportunityUrl',
});
return (
<Container key={elementName}>
<Head
addon={<LinkComponent {...defaultLinkProps} />}
htmlFor={elementName}
title={title}
/>
<Element {...props} id={elementName} />
</Container>
);
},
},
selectQuote: {
render: () => {
const elementName = 'selectQuote';
const title = titles.selectQuote;
const valueName = map.selectQuote;
const Component = components.selectQuote;
const props = elementsProps.selectQuote;
const { builder } = types.selectQuote();
const Element = builder(Component, {
elementName,
valueName,
});
const LinkComponent = buildLink(Link, {
elementName: 'linkQuoteUrl',
valueName: 'quoteUrl',
});
return (
<Container key={elementName}>
<Head
addon={<LinkComponent {...defaultLinkProps} />}
htmlFor={elementName}
title={title}
/>
<Element {...props} id={elementName} />
</Container>
);
},
},
selectSeasonType: {
render: () => {
const elementName = 'selectSeasonType';
const valueName = map.selectSeasonType;
const Component = components.selectSeasonType;
const props = elementsProps.selectSeasonType;
const { builder } = types.selectSeasonType();
const Element = builder(Component, {
elementName,
valueName,
});
const Title = observer(() => {
const { $calculation } = useStore();
const graphType = $calculation.element('radioGraphType').getValue();
switch (graphType) {
case 100_000_001: {
return <span>Тип дегрессии</span>;
}
case 100_000_003: {
return <span>Тип сезонности</span>;
}
default: {
return <span>{titles.selectSeasonType}</span>;
}
}
});
return (
<Container>
<Head htmlFor={elementName} title={<Title />} />
<Element {...props} id={elementName} />
</Container>
);
},
},
tbxVehicleTaxInYear: {
render: () => {
const elementName = 'tbxVehicleTaxInYear';
const title = titles.tbxVehicleTaxInYear;
const valueName = map.tbxVehicleTaxInYear;
const Component = components.tbxVehicleTaxInYear;
const props = elementsProps.tbxVehicleTaxInYear;
const { builder } = types.tbxVehicleTaxInYear();
const Element = builder(Component, {
elementName,
valueName,
});
function RenderedComponent() {
const isFetching = useIsFetching({ queryKey: ['1c', 'trans-tax'] });
return (
<Tooltip placement="topLeft" title="Без учета налога на роскошь">
<Container>
<Head htmlFor={elementName} title={title} />
<Element
{...props}
id={elementName}
addonBefore={isFetching && <LoadingOutlined spin />}
/>
</Container>
</Tooltip>
);
}
return <RenderedComponent />;
},
},
};
export default overrideRender;