@redneckz/wildless-cms-uni-blocks 0.14.5 → 0.14.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/migration-scripts/0.13.5.js +14 -11
- package/bundle/blocks.schema.json +1 -1
- package/bundle/bundle.umd.js +167 -91
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/components/Depository/Depository.d.ts +6 -0
- package/bundle/components/Depository/DepositoryContent.d.ts +2 -0
- package/bundle/components/Depository/DepositoryItem.d.ts +3 -0
- package/bundle/components/Depository/useDepository.d.ts +9 -0
- package/bundle/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/bundle/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/bundle/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/bundle/utils/convertTimestampToDate.d.ts +1 -0
- package/dist/components/ApplicationForm/renderRegion.js +1 -1
- package/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/dist/components/ApplicationForm/renderWedDataOrganization.js +2 -2
- package/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/dist/components/BenefitsBlock/BenefitsBlock.js +7 -7
- package/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/dist/components/Blocks.js +2 -0
- package/dist/components/Blocks.js.map +1 -1
- package/dist/components/Depository/Depository.d.ts +6 -0
- package/dist/components/Depository/Depository.js +19 -0
- package/dist/components/Depository/Depository.js.map +1 -0
- package/dist/components/Depository/DepositoryContent.d.ts +2 -0
- package/dist/components/Depository/DepositoryContent.js +2 -0
- package/dist/components/Depository/DepositoryContent.js.map +1 -0
- package/dist/components/Depository/DepositoryItem.d.ts +3 -0
- package/dist/components/Depository/DepositoryItem.js +12 -0
- package/dist/components/Depository/DepositoryItem.js.map +1 -0
- package/dist/components/Depository/useDepository.d.ts +9 -0
- package/dist/components/Depository/useDepository.js +10 -0
- package/dist/components/Depository/useDepository.js.map +1 -0
- package/dist/ui-kit/Input/Input.js +7 -1
- package/dist/ui-kit/Input/Input.js.map +1 -1
- package/dist/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/dist/ui-kit/Pagination/Pagination.js +31 -0
- package/dist/ui-kit/Pagination/Pagination.js.map +1 -0
- package/dist/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/dist/ui-kit/Pagination/renderPages.js +18 -0
- package/dist/ui-kit/Pagination/renderPages.js.map +1 -0
- package/dist/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/dist/ui-kit/Pagination/shouldRenderPage.js +9 -0
- package/dist/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
- package/dist/ui-kit/Select/filterOptions.js +1 -10
- package/dist/ui-kit/Select/filterOptions.js.map +1 -1
- package/dist/utils/convertTimestampToDate.d.ts +1 -0
- package/dist/utils/convertTimestampToDate.js +16 -0
- package/dist/utils/convertTimestampToDate.js.map +1 -0
- package/dist/utils/fetchMultitudeJSON.js +1 -1
- package/dist/utils/fetchMultitudeJSON.js.map +1 -1
- package/lib/common.css +1 -1
- package/lib/components/ApplicationForm/renderRegion.js +1 -1
- package/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/lib/components/ApplicationForm/renderWedDataOrganization.js +2 -2
- package/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/lib/components/BenefitsBlock/BenefitsBlock.js +7 -7
- package/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/lib/components/Blocks.js +2 -0
- package/lib/components/Blocks.js.map +1 -1
- package/lib/components/Depository/Depository.d.ts +6 -0
- package/lib/components/Depository/Depository.fixture.d.ts +6 -0
- package/lib/components/Depository/Depository.js +17 -0
- package/lib/components/Depository/Depository.js.map +1 -0
- package/lib/components/Depository/DepositoryContent.d.ts +2 -0
- package/lib/components/Depository/DepositoryContent.js +2 -0
- package/lib/components/Depository/DepositoryContent.js.map +1 -0
- package/lib/components/Depository/DepositoryItem.d.ts +3 -0
- package/lib/components/Depository/DepositoryItem.js +9 -0
- package/lib/components/Depository/DepositoryItem.js.map +1 -0
- package/lib/components/Depository/useDepository.d.ts +9 -0
- package/lib/components/Depository/useDepository.js +7 -0
- package/lib/components/Depository/useDepository.js.map +1 -0
- package/lib/components/ProductBlock/ProductBlock.fixture.mobile.d.ts +1 -0
- package/lib/ui-kit/Input/Input.js +8 -2
- package/lib/ui-kit/Input/Input.js.map +1 -1
- package/lib/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/lib/ui-kit/Pagination/Pagination.js +28 -0
- package/lib/ui-kit/Pagination/Pagination.js.map +1 -0
- package/lib/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/lib/ui-kit/Pagination/renderPages.js +15 -0
- package/lib/ui-kit/Pagination/renderPages.js.map +1 -0
- package/lib/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/lib/ui-kit/Pagination/shouldRenderPage.js +6 -0
- package/lib/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
- package/lib/ui-kit/Select/filterOptions.js +1 -10
- package/lib/ui-kit/Select/filterOptions.js.map +1 -1
- package/lib/utils/convertTimestampToDate.d.ts +1 -0
- package/lib/utils/convertTimestampToDate.js +13 -0
- package/lib/utils/convertTimestampToDate.js.map +1 -0
- package/lib/utils/fetchMultitudeJSON.js +1 -1
- package/lib/utils/fetchMultitudeJSON.js.map +1 -1
- package/mobile/bundle/bundle.umd.js +91 -91
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/components/Depository/Depository.d.ts +6 -0
- package/mobile/bundle/components/Depository/DepositoryContent.d.ts +2 -0
- package/mobile/bundle/components/Depository/DepositoryItem.d.ts +3 -0
- package/mobile/bundle/components/Depository/useDepository.d.ts +9 -0
- package/mobile/bundle/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/mobile/bundle/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/mobile/bundle/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/mobile/bundle/utils/convertTimestampToDate.d.ts +1 -0
- package/mobile/dist/components/ApplicationForm/renderRegion.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js +2 -2
- package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js +7 -7
- package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/mobile/dist/components/Depository/Depository.d.ts +6 -0
- package/mobile/dist/components/Depository/Depository.js +19 -0
- package/mobile/dist/components/Depository/Depository.js.map +1 -0
- package/mobile/dist/components/Depository/DepositoryContent.d.ts +2 -0
- package/mobile/dist/components/Depository/DepositoryContent.js +2 -0
- package/mobile/dist/components/Depository/DepositoryContent.js.map +1 -0
- package/mobile/dist/components/Depository/DepositoryItem.d.ts +3 -0
- package/mobile/dist/components/Depository/DepositoryItem.js +12 -0
- package/mobile/dist/components/Depository/DepositoryItem.js.map +1 -0
- package/mobile/dist/components/Depository/useDepository.d.ts +9 -0
- package/mobile/dist/components/Depository/useDepository.js +10 -0
- package/mobile/dist/components/Depository/useDepository.js.map +1 -0
- package/mobile/dist/ui-kit/Input/Input.js +7 -1
- package/mobile/dist/ui-kit/Input/Input.js.map +1 -1
- package/mobile/dist/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/mobile/dist/ui-kit/Pagination/Pagination.js +31 -0
- package/mobile/dist/ui-kit/Pagination/Pagination.js.map +1 -0
- package/mobile/dist/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/mobile/dist/ui-kit/Pagination/renderPages.js +18 -0
- package/mobile/dist/ui-kit/Pagination/renderPages.js.map +1 -0
- package/mobile/dist/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/mobile/dist/ui-kit/Pagination/shouldRenderPage.js +9 -0
- package/mobile/dist/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
- package/mobile/dist/ui-kit/Select/filterOptions.js +1 -10
- package/mobile/dist/ui-kit/Select/filterOptions.js.map +1 -1
- package/mobile/dist/utils/convertTimestampToDate.d.ts +1 -0
- package/mobile/dist/utils/convertTimestampToDate.js +16 -0
- package/mobile/dist/utils/convertTimestampToDate.js.map +1 -0
- package/mobile/dist/utils/fetchMultitudeJSON.js +1 -1
- package/mobile/dist/utils/fetchMultitudeJSON.js.map +1 -1
- package/mobile/lib/common.css +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegion.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js +2 -2
- package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js +7 -7
- package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/mobile/lib/components/Depository/Depository.d.ts +6 -0
- package/mobile/lib/components/Depository/Depository.js +17 -0
- package/mobile/lib/components/Depository/Depository.js.map +1 -0
- package/mobile/lib/components/Depository/DepositoryContent.d.ts +2 -0
- package/mobile/lib/components/Depository/DepositoryContent.js +2 -0
- package/mobile/lib/components/Depository/DepositoryContent.js.map +1 -0
- package/mobile/lib/components/Depository/DepositoryItem.d.ts +3 -0
- package/mobile/lib/components/Depository/DepositoryItem.js +9 -0
- package/mobile/lib/components/Depository/DepositoryItem.js.map +1 -0
- package/mobile/lib/components/Depository/useDepository.d.ts +9 -0
- package/mobile/lib/components/Depository/useDepository.js +7 -0
- package/mobile/lib/components/Depository/useDepository.js.map +1 -0
- package/mobile/lib/ui-kit/Input/Input.js +8 -2
- package/mobile/lib/ui-kit/Input/Input.js.map +1 -1
- package/mobile/lib/ui-kit/Pagination/Pagination.d.ts +8 -0
- package/mobile/lib/ui-kit/Pagination/Pagination.js +28 -0
- package/mobile/lib/ui-kit/Pagination/Pagination.js.map +1 -0
- package/mobile/lib/ui-kit/Pagination/renderPages.d.ts +3 -0
- package/mobile/lib/ui-kit/Pagination/renderPages.js +15 -0
- package/mobile/lib/ui-kit/Pagination/renderPages.js.map +1 -0
- package/mobile/lib/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
- package/mobile/lib/ui-kit/Pagination/shouldRenderPage.js +6 -0
- package/mobile/lib/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
- package/mobile/lib/ui-kit/Select/filterOptions.js +1 -10
- package/mobile/lib/ui-kit/Select/filterOptions.js.map +1 -1
- package/mobile/lib/utils/convertTimestampToDate.d.ts +1 -0
- package/mobile/lib/utils/convertTimestampToDate.js +13 -0
- package/mobile/lib/utils/convertTimestampToDate.js.map +1 -0
- package/mobile/lib/utils/fetchMultitudeJSON.js +1 -1
- package/mobile/lib/utils/fetchMultitudeJSON.js.map +1 -1
- package/mobile/src/components/ApplicationForm/ApplicationFormGrantSupport.tsx +1 -1
- package/mobile/src/components/ApplicationForm/renderRegion.tsx +2 -2
- package/mobile/src/components/ApplicationForm/renderRegionDepartment.tsx +2 -2
- package/mobile/src/components/ApplicationForm/renderWedDataOrganization.tsx +5 -5
- package/mobile/src/components/BenefitsBlock/BenefitsBlock.tsx +24 -22
- package/mobile/src/components/Depository/Depository.example.json +1 -0
- package/mobile/src/components/Depository/Depository.tsx +43 -0
- package/mobile/src/components/Depository/Depository.ui.json +1 -0
- package/mobile/src/components/Depository/DepositoryContent.ts +3 -0
- package/mobile/src/components/Depository/DepositoryItem.tsx +21 -0
- package/mobile/src/components/Depository/useDepository.ts +23 -0
- package/mobile/src/ui-kit/Input/Input.tsx +9 -2
- package/mobile/src/ui-kit/Pagination/Pagination.tsx +87 -0
- package/mobile/src/ui-kit/Pagination/renderPages.tsx +33 -0
- package/mobile/src/ui-kit/Pagination/shouldRenderPage.ts +8 -0
- package/mobile/src/ui-kit/Select/filterOptions.ts +1 -11
- package/mobile/src/utils/convertTimestampToDate.ts +15 -0
- package/mobile/src/utils/fetchMultitudeJSON.ts +1 -1
- package/package.json +1 -1
- package/src/components/ApplicationForm/ApplicationFormGrantSupport.tsx +1 -1
- package/src/components/ApplicationForm/renderRegion.tsx +2 -2
- package/src/components/ApplicationForm/renderRegionDepartment.tsx +2 -2
- package/src/components/ApplicationForm/renderWedDataOrganization.tsx +5 -5
- package/src/components/BenefitsBlock/BenefitsBlock.tsx +24 -22
- package/src/components/Blocks.ts +2 -0
- package/src/components/Depository/Depository.example.json +1 -0
- package/src/components/Depository/Depository.fixture.tsx +10 -0
- package/src/components/Depository/Depository.tsx +43 -0
- package/src/components/Depository/Depository.ui.json +1 -0
- package/src/components/Depository/DepositoryContent.ts +3 -0
- package/src/components/Depository/DepositoryItem.tsx +21 -0
- package/src/components/Depository/useDepository.ts +23 -0
- package/src/components/ProductBlock/ProductBlock.fixture.mobile.tsx +23 -3
- package/src/ui-kit/Input/Input.tsx +9 -2
- package/src/ui-kit/Pagination/Pagination.tsx +87 -0
- package/src/ui-kit/Pagination/renderPages.tsx +33 -0
- package/src/ui-kit/Pagination/shouldRenderPage.ts +8 -0
- package/src/ui-kit/Select/filterOptions.ts +1 -11
- package/src/utils/convertTimestampToDate.ts +15 -0
- package/src/utils/fetchMultitudeJSON.ts +1 -1
|
@@ -4,6 +4,7 @@ import { BlockWrapper } from '../../ui-kit/BlockWrapper';
|
|
|
4
4
|
import { Heading } from '../../ui-kit/Heading/Heading';
|
|
5
5
|
import { RoundedIcon } from '../../ui-kit/Icon/RoundedIcon';
|
|
6
6
|
import { Img } from '../../ui-kit/Img/Img';
|
|
7
|
+
import { Text } from '../../ui-kit/Text/Text';
|
|
7
8
|
import type {
|
|
8
9
|
BenefitBlockItemProps,
|
|
9
10
|
BenefitsBlockContent,
|
|
@@ -12,19 +13,19 @@ import type {
|
|
|
12
13
|
TextBenefitDef,
|
|
13
14
|
} from './BenefitsBlockContent';
|
|
14
15
|
import { defaultIconSize } from './defaultIconSize';
|
|
15
|
-
import {
|
|
16
|
-
import { Paragraph } from '../../ui-kit/Paragraph/Paragraph';
|
|
16
|
+
import { AlignStyles } from '../../model/AlignStyles';
|
|
17
17
|
|
|
18
18
|
interface BenefitsBlockProps extends BenefitsBlockContent, UniBlockProps {}
|
|
19
19
|
|
|
20
20
|
export const BenefitsBlock = JSX<BenefitsBlockProps>(
|
|
21
21
|
({ className = '', title, benefitList, ...rest }) => (
|
|
22
|
-
<BlockWrapper className={
|
|
23
|
-
{title ?
|
|
24
|
-
<Heading headingType="h3" as="h2" className="text-left sm:text-center" title={title} />
|
|
25
|
-
) : null}
|
|
22
|
+
<BlockWrapper className={className} defaultPadding="p-6xl" {...rest}>
|
|
23
|
+
{title ? <Heading headingType="h3" as="h2" className={AlignStyles} title={title} /> : null}
|
|
26
24
|
{benefitList?.length ? (
|
|
27
|
-
<div
|
|
25
|
+
<div
|
|
26
|
+
className="flex flex-col @md:flex-row flex-wrap w-full @md:justify-center mt-xl gap-5xl"
|
|
27
|
+
role="list"
|
|
28
|
+
>
|
|
28
29
|
{benefitList.map(renderBenefit)}
|
|
29
30
|
</div>
|
|
30
31
|
) : null}
|
|
@@ -35,7 +36,7 @@ export const BenefitsBlock = JSX<BenefitsBlockProps>(
|
|
|
35
36
|
const renderBenefit = (benefit: BenefitBlockItemProps, i: number) => (
|
|
36
37
|
<div
|
|
37
38
|
key={String(i)}
|
|
38
|
-
className="flex gap-m items-center md:basis-1/2 md:max-w-[500px]"
|
|
39
|
+
className="flex gap-m items-center @md:basis-1/2 @md:max-w-[500px]"
|
|
39
40
|
role="listitem"
|
|
40
41
|
>
|
|
41
42
|
{benefit?.icon?.icon ? (
|
|
@@ -48,7 +49,7 @@ const renderBenefit = (benefit: BenefitBlockItemProps, i: number) => (
|
|
|
48
49
|
) : null}
|
|
49
50
|
{benefit?.icon?.src ? <Img className="shrink-0" image={benefit.icon} /> : null}
|
|
50
51
|
{benefit?.label ? (
|
|
51
|
-
<div className="sm:h-full">
|
|
52
|
+
<div className="@sm:h-full">
|
|
52
53
|
<Heading headingType="h6">{benefit.label}</Heading>
|
|
53
54
|
{renderDescription(benefit.description)}
|
|
54
55
|
</div>
|
|
@@ -60,7 +61,7 @@ const renderDescription = (description: DescriptionDef | undefined) => {
|
|
|
60
61
|
const benefitType = description?.benefitType || null;
|
|
61
62
|
|
|
62
63
|
return description && benefitType ? (
|
|
63
|
-
<div className="mt-
|
|
64
|
+
<div className="mt-xs text-l font-light text-secondary-text group-data-secondary:text-white/80">
|
|
64
65
|
{benefitType === 'list'
|
|
65
66
|
? renderListBenefit(description as ListBenefitDef)
|
|
66
67
|
: renderTextBenefit(description as TextBenefitDef)}
|
|
@@ -70,13 +71,13 @@ const renderDescription = (description: DescriptionDef | undefined) => {
|
|
|
70
71
|
|
|
71
72
|
const renderTextBenefit = (description?: TextBenefitDef) =>
|
|
72
73
|
description?.name ? (
|
|
73
|
-
<
|
|
74
|
-
font="font-light"
|
|
74
|
+
<Text
|
|
75
75
|
size="text-l"
|
|
76
|
-
color="text-secondary-text group-data-secondary:text-white"
|
|
76
|
+
color="text-secondary-text group-data-secondary:text-white/80"
|
|
77
|
+
font="font-light"
|
|
77
78
|
>
|
|
78
79
|
{description.name}
|
|
79
|
-
</
|
|
80
|
+
</Text>
|
|
80
81
|
) : null;
|
|
81
82
|
|
|
82
83
|
const renderListBenefit = (description?: ListBenefitDef) => {
|
|
@@ -85,14 +86,15 @@ const renderListBenefit = (description?: ListBenefitDef) => {
|
|
|
85
86
|
return description?.items && description.items.length > 0 ? (
|
|
86
87
|
<ul className={listStyleType}>
|
|
87
88
|
{description.items.map((_, i) => (
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
<li key={`benefitListItem-${i}`}>
|
|
90
|
+
<Text
|
|
91
|
+
size="text-l"
|
|
92
|
+
color="text-secondary-text group-data-secondary:text-white/80"
|
|
93
|
+
font="font-light"
|
|
94
|
+
>
|
|
95
|
+
{_}
|
|
96
|
+
</Text>
|
|
97
|
+
</li>
|
|
96
98
|
))}
|
|
97
99
|
</ul>
|
|
98
100
|
) : null;
|
package/src/components/Blocks.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { CarouselTariffsCard } from './CarouselTariffsCard/CarouselTariffsCard';
|
|
|
21
21
|
import { ComparisonTable } from './ComparisonTable/ComparisonTable';
|
|
22
22
|
import { ContactsBlock } from './ContactsBlock/ContactsBlock';
|
|
23
23
|
import { DepositFiltration } from './DepositFiltration/DepositFiltration';
|
|
24
|
+
import { Depository } from './Depository/Depository';
|
|
24
25
|
import { ErrorBlock } from './ErrorBlock/ErrorBlock';
|
|
25
26
|
import { ExchangeRateTile } from './ExchangeRateTile/ExchangeRateTile';
|
|
26
27
|
import { Footer } from './Footer/Footer';
|
|
@@ -78,6 +79,7 @@ export const Blocks: BlocksRegistry = {
|
|
|
78
79
|
CarouselTariffsCard,
|
|
79
80
|
ComparisonTable,
|
|
80
81
|
ContactsBlock,
|
|
82
|
+
Depository,
|
|
81
83
|
DepositFiltration,
|
|
82
84
|
ErrorBlock,
|
|
83
85
|
ExchangeRateTile,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
|
|
3
|
+
import type { JSXBlock, UniBlockProps } from '../../model/JSXBlock';
|
|
4
|
+
import { BlockWrapper } from '../../ui-kit/BlockWrapper';
|
|
5
|
+
import { Pagination } from '../../ui-kit/Pagination/Pagination';
|
|
6
|
+
import { style } from '../../utils/style';
|
|
7
|
+
import type { DepositoryContent } from './DepositoryContent';
|
|
8
|
+
import { DepositoryItem } from './DepositoryItem';
|
|
9
|
+
import { useDepository } from './useDepository';
|
|
10
|
+
|
|
11
|
+
const DEFAULT_ITEMS_COUNT = 10;
|
|
12
|
+
|
|
13
|
+
interface DepositoryProps extends DepositoryContent, UniBlockProps {}
|
|
14
|
+
|
|
15
|
+
export const Depository: JSXBlock<DepositoryProps> = JSX<DepositoryProps>(
|
|
16
|
+
({ className, ...rest }) => {
|
|
17
|
+
const [currentPage, setCurrentPage] = useState(0);
|
|
18
|
+
const [itemCount] = useState(DEFAULT_ITEMS_COUNT);
|
|
19
|
+
|
|
20
|
+
const { totalPages = 0, items } = useDepository(itemCount, currentPage);
|
|
21
|
+
|
|
22
|
+
const handleChangePage = useCallback((page) => setCurrentPage(page - 1), []);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<BlockWrapper className={style(className, 'container p-4xl')} {...rest}>
|
|
26
|
+
<div className="flex flex-col">
|
|
27
|
+
<div className="grid grid-cols-12 pb-lg border-gray border-opacity-50 border-b">
|
|
28
|
+
<span className="col-span-2 text-gray text-m">Дата</span>
|
|
29
|
+
<span className="col-span-10 text-gray text-m">Тема</span>
|
|
30
|
+
</div>
|
|
31
|
+
{items?.map((params) => (
|
|
32
|
+
<DepositoryItem key={String(params.publicId)} {...params} />
|
|
33
|
+
))}
|
|
34
|
+
<Pagination
|
|
35
|
+
currentPage={currentPage + 1}
|
|
36
|
+
onPageChange={handleChangePage}
|
|
37
|
+
totalPages={totalPages + 1}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
</BlockWrapper>
|
|
41
|
+
);
|
|
42
|
+
},
|
|
43
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useLink } from '../../hooks/useLink';
|
|
2
|
+
import { convertTimestampToDate } from '../../utils/convertTimestampToDate';
|
|
3
|
+
import { DepositoryDataItem } from './useDepository';
|
|
4
|
+
|
|
5
|
+
export const DepositoryItem = ({ title, timestamp = 0, publicId }: DepositoryDataItem) => {
|
|
6
|
+
const link = useLink();
|
|
7
|
+
const { href } = link({ href: `/api/v1/depository/${publicId}/file` });
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<div className="grid grid-cols-12 py-lg border-gray border-opacity-50 border-b" key={publicId}>
|
|
11
|
+
<div className="col-span-2 text-m">
|
|
12
|
+
<span>{convertTimestampToDate(timestamp)}</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div className="col-span-10 text-h6 hover:text-primary-active">
|
|
15
|
+
<a href={href} download aria-label="Скачать">
|
|
16
|
+
{title}
|
|
17
|
+
</a>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useAsyncData } from '@redneckz/uni-jsx/lib/hooks/useAsyncData';
|
|
2
|
+
import { fetchJSONUnsafe } from '../../utils/fetchJSON';
|
|
3
|
+
|
|
4
|
+
export interface DepositoryDataItem {
|
|
5
|
+
publicId?: number;
|
|
6
|
+
timestamp?: number;
|
|
7
|
+
title?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface DepositoryData {
|
|
11
|
+
content?: DepositoryDataItem[];
|
|
12
|
+
totalPages?: number;
|
|
13
|
+
totalElements?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const useDepository = (size: number, page: number) => {
|
|
17
|
+
const { data } = useAsyncData<DepositoryData>(
|
|
18
|
+
`/api/v1/depository?page=${page}&size=${size}`,
|
|
19
|
+
fetchJSONUnsafe,
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return { items: data?.content, totalPages: data?.totalPages };
|
|
23
|
+
};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import '../../setup-fixture';
|
|
2
|
-
|
|
3
1
|
import type { Picture } from '../../model/Picture';
|
|
2
|
+
import '../../setup-fixture';
|
|
4
3
|
import type { ComplexBenefitContent } from '../../ui-kit/BenefitItem/BenefitItemContent';
|
|
5
|
-
import { ProductBlock } from './ProductBlock';
|
|
6
4
|
import type { ButtonContent } from '../../ui-kit/Button/ButtonContent';
|
|
5
|
+
import { ProductBlock } from './ProductBlock';
|
|
7
6
|
|
|
8
7
|
const title = 'Кредит до 5 000 000 Р\nбез залога и поручителей';
|
|
9
8
|
const description =
|
|
@@ -20,6 +19,16 @@ const image: Picture = {
|
|
|
20
19
|
},
|
|
21
20
|
};
|
|
22
21
|
|
|
22
|
+
const imageCard: Picture = {
|
|
23
|
+
src: 'card-1.png',
|
|
24
|
+
format: 'webp',
|
|
25
|
+
alt: 'Потребительский кредит наличными',
|
|
26
|
+
size: {
|
|
27
|
+
width: 200,
|
|
28
|
+
height: 126,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
23
32
|
const benefits: ComplexBenefitContent[] = [
|
|
24
33
|
{
|
|
25
34
|
type: 'default',
|
|
@@ -101,4 +110,15 @@ export default {
|
|
|
101
110
|
/>
|
|
102
111
|
</div>
|
|
103
112
|
),
|
|
113
|
+
'image bottom': (
|
|
114
|
+
<div className="container grid grid-cols-12">
|
|
115
|
+
<ProductBlock
|
|
116
|
+
className="col-span-12"
|
|
117
|
+
{...props}
|
|
118
|
+
image={imageCard}
|
|
119
|
+
benefits={benefits}
|
|
120
|
+
imageOptions={{ isBackground: true }}
|
|
121
|
+
/>
|
|
122
|
+
</div>
|
|
123
|
+
),
|
|
104
124
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
-
import { useCallback } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
|
+
import { useCallback, useEffect, useRef } from '@redneckz/uni-jsx/lib/hooks';
|
|
3
3
|
import { style } from '../../utils/style';
|
|
4
4
|
import { Text } from '../Text/Text';
|
|
5
5
|
import type { InputProps } from './InputProps';
|
|
@@ -23,6 +23,7 @@ export const Input = JSX<InputProps>(
|
|
|
23
23
|
pattern,
|
|
24
24
|
autoFocus = false,
|
|
25
25
|
}) => {
|
|
26
|
+
const inputRef = useRef<HTMLInputElement | null>(null);
|
|
26
27
|
const handleChange = useCallback(
|
|
27
28
|
(e: { target?: { value?: string } }) => {
|
|
28
29
|
onChange && onChange(e.target?.value || '');
|
|
@@ -30,6 +31,12 @@ export const Input = JSX<InputProps>(
|
|
|
30
31
|
[onChange],
|
|
31
32
|
);
|
|
32
33
|
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (autoFocus) {
|
|
36
|
+
inputRef.current?.focus();
|
|
37
|
+
}
|
|
38
|
+
}, [autoFocus, inputRef]);
|
|
39
|
+
|
|
33
40
|
const paddingStyle = children ? 'pr-3xl' : '';
|
|
34
41
|
const validStyle = valid
|
|
35
42
|
? 'border-gray hover:border-primary-hover active:border-primary-text focus:border-primary-text'
|
|
@@ -46,6 +53,7 @@ export const Input = JSX<InputProps>(
|
|
|
46
53
|
</div>
|
|
47
54
|
) : null}
|
|
48
55
|
<input
|
|
56
|
+
ref={inputRef}
|
|
49
57
|
key={key}
|
|
50
58
|
className={style(
|
|
51
59
|
'w-full border rounded-md text-primary-text outline-none p-m',
|
|
@@ -62,7 +70,6 @@ export const Input = JSX<InputProps>(
|
|
|
62
70
|
onFocus={onFocus}
|
|
63
71
|
onBlur={onBlur}
|
|
64
72
|
pattern={pattern}
|
|
65
|
-
autoFocus={autoFocus}
|
|
66
73
|
/>
|
|
67
74
|
</label>
|
|
68
75
|
{children}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useCallback, useMemo } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
|
+
import { Icon } from '../Icon/Icon';
|
|
3
|
+
import { renderPages } from './renderPages';
|
|
4
|
+
|
|
5
|
+
export const paginationBlockStyle =
|
|
6
|
+
'py-m px-lg rounded-md cursor-pointer hover:bg-green-more-dark hover:text-white';
|
|
7
|
+
|
|
8
|
+
export interface PaginationProps {
|
|
9
|
+
currentPage: number;
|
|
10
|
+
onPageChange: (page: number) => void;
|
|
11
|
+
totalPages: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const ICON_SIZE = { width: '24', height: '24' };
|
|
15
|
+
|
|
16
|
+
export const Pagination = ({ currentPage, onPageChange, totalPages }: PaginationProps) => {
|
|
17
|
+
const handlePrevPage = useCallback(() => {
|
|
18
|
+
if (currentPage > 1) {
|
|
19
|
+
onPageChange(currentPage - 1);
|
|
20
|
+
}
|
|
21
|
+
}, [currentPage]);
|
|
22
|
+
|
|
23
|
+
const handleNextPage = useCallback(() => {
|
|
24
|
+
if (currentPage < totalPages - 1) {
|
|
25
|
+
onPageChange(currentPage + 1);
|
|
26
|
+
}
|
|
27
|
+
}, [currentPage, totalPages]);
|
|
28
|
+
|
|
29
|
+
const handleFirstPage = useCallback(() => onPageChange(1), []);
|
|
30
|
+
const handleLastPage = useCallback(() => onPageChange(totalPages), [totalPages]);
|
|
31
|
+
|
|
32
|
+
const pages = useMemo(
|
|
33
|
+
() =>
|
|
34
|
+
new Array(totalPages).fill({
|
|
35
|
+
currentPage,
|
|
36
|
+
onPageChange,
|
|
37
|
+
totalPages,
|
|
38
|
+
}),
|
|
39
|
+
[totalPages, currentPage],
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div className="mt-3xl flex items-center select-none" role="navigation" aria-label="Пагинация">
|
|
44
|
+
<div className="flex gap-m items-center">
|
|
45
|
+
<div onClick={handlePrevPage}>
|
|
46
|
+
<Icon
|
|
47
|
+
name="ArrowLeftIcon"
|
|
48
|
+
iconVersion="black"
|
|
49
|
+
imageClassName={getIconStyle(currentPage === 1)}
|
|
50
|
+
{...ICON_SIZE}
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
<div className="flex gap-xs">
|
|
54
|
+
{currentPage > 1 ? (
|
|
55
|
+
<div onClick={handleFirstPage} className={paginationBlockStyle} aria-label="Страница 1">
|
|
56
|
+
1
|
|
57
|
+
</div>
|
|
58
|
+
) : null}
|
|
59
|
+
{currentPage > 4 ? <div className="py-m px-s">...</div> : null}
|
|
60
|
+
{pages.map(renderPages)}
|
|
61
|
+
{currentPage < totalPages - 3 ? <div className="py-m px-s">...</div> : null}
|
|
62
|
+
{currentPage < totalPages ? (
|
|
63
|
+
<div
|
|
64
|
+
onClick={handleLastPage}
|
|
65
|
+
className={paginationBlockStyle}
|
|
66
|
+
aria-label={`Страница ${totalPages}}`}
|
|
67
|
+
>
|
|
68
|
+
{totalPages}
|
|
69
|
+
</div>
|
|
70
|
+
) : null}
|
|
71
|
+
</div>
|
|
72
|
+
<div onClick={handleNextPage}>
|
|
73
|
+
<Icon
|
|
74
|
+
className="rotate-180"
|
|
75
|
+
name="ArrowLeftIcon"
|
|
76
|
+
iconVersion="black"
|
|
77
|
+
imageClassName={getIconStyle(currentPage === totalPages)}
|
|
78
|
+
{...ICON_SIZE}
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const getIconStyle = (condition: boolean) =>
|
|
87
|
+
condition ? 'opacity-20' : 'cursor-pointer hover:opacity-60';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { paginationBlockStyle, PaginationProps } from './Pagination';
|
|
2
|
+
import { shouldRenderPage } from './shouldRenderPage';
|
|
3
|
+
|
|
4
|
+
export const renderPages = (pagesParams: PaginationProps, index: number) => {
|
|
5
|
+
const { currentPage, onPageChange, totalPages } = pagesParams;
|
|
6
|
+
const page = index + 1;
|
|
7
|
+
if (page === currentPage) {
|
|
8
|
+
return (
|
|
9
|
+
<div
|
|
10
|
+
key={String(index)}
|
|
11
|
+
aria-current="true"
|
|
12
|
+
className="py-m px-lg bg-green-light text-white rounded-md"
|
|
13
|
+
>
|
|
14
|
+
{page}
|
|
15
|
+
</div>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (page !== 1 && page !== totalPages && shouldRenderPage(page, currentPage, totalPages)) {
|
|
20
|
+
return (
|
|
21
|
+
<div
|
|
22
|
+
key={String(index)}
|
|
23
|
+
onClick={() => onPageChange(page)}
|
|
24
|
+
className={paginationBlockStyle}
|
|
25
|
+
aria-label={`Страница ${page}`}
|
|
26
|
+
>
|
|
27
|
+
{page}
|
|
28
|
+
</div>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const checkPageRange = (page: number, currentPage: number, totalPages: number) =>
|
|
2
|
+
(currentPage <= 3 && page <= currentPage + 3) ||
|
|
3
|
+
(currentPage >= totalPages - 1 && page >= totalPages - 4);
|
|
4
|
+
|
|
5
|
+
export const shouldRenderPage = (page: number, currentPage: number, totalPages: number) =>
|
|
6
|
+
(page < currentPage && page >= currentPage - 2) ||
|
|
7
|
+
(page <= currentPage + 2 && page > currentPage) ||
|
|
8
|
+
checkPageRange(page, currentPage, totalPages);
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { compareBy, desc } from '../../utils/Comparator';
|
|
2
|
-
import { jaroWinklerDistance } from '../../utils/jaroWinklerDistance';
|
|
3
|
-
import { zip } from '../../utils/zip';
|
|
4
1
|
import type { Option } from './Option';
|
|
5
2
|
|
|
6
3
|
export const filterOptions = (options: Option[], query: string | undefined): Option[] => {
|
|
@@ -8,12 +5,5 @@ export const filterOptions = (options: Option[], query: string | undefined): Opt
|
|
|
8
5
|
return options;
|
|
9
6
|
}
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
.map((_) => _.text?.toLowerCase())
|
|
13
|
-
.map(jaroWinklerDistance(query?.trim().toLowerCase()));
|
|
14
|
-
|
|
15
|
-
return zip(options, ranking)
|
|
16
|
-
.filter(([, rank]) => rank >= 0.5)
|
|
17
|
-
.sort(desc(compareBy(([, rank]) => rank)))
|
|
18
|
-
.map(([option]) => option);
|
|
8
|
+
return options.filter((_) => _.text?.toLocaleLowerCase().includes(query?.trim().toLocaleLowerCase()))
|
|
19
9
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const convertTimestampToDate = (timestamp: number) => {
|
|
2
|
+
const date = new Date(timestamp * 1000);
|
|
3
|
+
|
|
4
|
+
let dd: string | number = date.getDate();
|
|
5
|
+
if (dd < 10) {
|
|
6
|
+
dd = '0' + dd;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let mm: string | number = date.getMonth() + 1;
|
|
10
|
+
if (mm < 10) {
|
|
11
|
+
mm = '0' + mm;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return dd + '.' + mm + '.' + date.getFullYear();
|
|
15
|
+
};
|