@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.
Files changed (214) hide show
  1. package/bin/migration-scripts/0.13.5.js +14 -11
  2. package/bundle/blocks.schema.json +1 -1
  3. package/bundle/bundle.umd.js +167 -91
  4. package/bundle/bundle.umd.min.js +1 -1
  5. package/bundle/components/Depository/Depository.d.ts +6 -0
  6. package/bundle/components/Depository/DepositoryContent.d.ts +2 -0
  7. package/bundle/components/Depository/DepositoryItem.d.ts +3 -0
  8. package/bundle/components/Depository/useDepository.d.ts +9 -0
  9. package/bundle/ui-kit/Pagination/Pagination.d.ts +8 -0
  10. package/bundle/ui-kit/Pagination/renderPages.d.ts +3 -0
  11. package/bundle/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  12. package/bundle/utils/convertTimestampToDate.d.ts +1 -0
  13. package/dist/components/ApplicationForm/renderRegion.js +1 -1
  14. package/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
  15. package/dist/components/ApplicationForm/renderWedDataOrganization.js +2 -2
  16. package/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
  17. package/dist/components/BenefitsBlock/BenefitsBlock.js +7 -7
  18. package/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  19. package/dist/components/Blocks.js +2 -0
  20. package/dist/components/Blocks.js.map +1 -1
  21. package/dist/components/Depository/Depository.d.ts +6 -0
  22. package/dist/components/Depository/Depository.js +19 -0
  23. package/dist/components/Depository/Depository.js.map +1 -0
  24. package/dist/components/Depository/DepositoryContent.d.ts +2 -0
  25. package/dist/components/Depository/DepositoryContent.js +2 -0
  26. package/dist/components/Depository/DepositoryContent.js.map +1 -0
  27. package/dist/components/Depository/DepositoryItem.d.ts +3 -0
  28. package/dist/components/Depository/DepositoryItem.js +12 -0
  29. package/dist/components/Depository/DepositoryItem.js.map +1 -0
  30. package/dist/components/Depository/useDepository.d.ts +9 -0
  31. package/dist/components/Depository/useDepository.js +10 -0
  32. package/dist/components/Depository/useDepository.js.map +1 -0
  33. package/dist/ui-kit/Input/Input.js +7 -1
  34. package/dist/ui-kit/Input/Input.js.map +1 -1
  35. package/dist/ui-kit/Pagination/Pagination.d.ts +8 -0
  36. package/dist/ui-kit/Pagination/Pagination.js +31 -0
  37. package/dist/ui-kit/Pagination/Pagination.js.map +1 -0
  38. package/dist/ui-kit/Pagination/renderPages.d.ts +3 -0
  39. package/dist/ui-kit/Pagination/renderPages.js +18 -0
  40. package/dist/ui-kit/Pagination/renderPages.js.map +1 -0
  41. package/dist/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  42. package/dist/ui-kit/Pagination/shouldRenderPage.js +9 -0
  43. package/dist/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
  44. package/dist/ui-kit/Select/filterOptions.js +1 -10
  45. package/dist/ui-kit/Select/filterOptions.js.map +1 -1
  46. package/dist/utils/convertTimestampToDate.d.ts +1 -0
  47. package/dist/utils/convertTimestampToDate.js +16 -0
  48. package/dist/utils/convertTimestampToDate.js.map +1 -0
  49. package/dist/utils/fetchMultitudeJSON.js +1 -1
  50. package/dist/utils/fetchMultitudeJSON.js.map +1 -1
  51. package/lib/common.css +1 -1
  52. package/lib/components/ApplicationForm/renderRegion.js +1 -1
  53. package/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
  54. package/lib/components/ApplicationForm/renderWedDataOrganization.js +2 -2
  55. package/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
  56. package/lib/components/BenefitsBlock/BenefitsBlock.js +7 -7
  57. package/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  58. package/lib/components/Blocks.js +2 -0
  59. package/lib/components/Blocks.js.map +1 -1
  60. package/lib/components/Depository/Depository.d.ts +6 -0
  61. package/lib/components/Depository/Depository.fixture.d.ts +6 -0
  62. package/lib/components/Depository/Depository.js +17 -0
  63. package/lib/components/Depository/Depository.js.map +1 -0
  64. package/lib/components/Depository/DepositoryContent.d.ts +2 -0
  65. package/lib/components/Depository/DepositoryContent.js +2 -0
  66. package/lib/components/Depository/DepositoryContent.js.map +1 -0
  67. package/lib/components/Depository/DepositoryItem.d.ts +3 -0
  68. package/lib/components/Depository/DepositoryItem.js +9 -0
  69. package/lib/components/Depository/DepositoryItem.js.map +1 -0
  70. package/lib/components/Depository/useDepository.d.ts +9 -0
  71. package/lib/components/Depository/useDepository.js +7 -0
  72. package/lib/components/Depository/useDepository.js.map +1 -0
  73. package/lib/components/ProductBlock/ProductBlock.fixture.mobile.d.ts +1 -0
  74. package/lib/ui-kit/Input/Input.js +8 -2
  75. package/lib/ui-kit/Input/Input.js.map +1 -1
  76. package/lib/ui-kit/Pagination/Pagination.d.ts +8 -0
  77. package/lib/ui-kit/Pagination/Pagination.js +28 -0
  78. package/lib/ui-kit/Pagination/Pagination.js.map +1 -0
  79. package/lib/ui-kit/Pagination/renderPages.d.ts +3 -0
  80. package/lib/ui-kit/Pagination/renderPages.js +15 -0
  81. package/lib/ui-kit/Pagination/renderPages.js.map +1 -0
  82. package/lib/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  83. package/lib/ui-kit/Pagination/shouldRenderPage.js +6 -0
  84. package/lib/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
  85. package/lib/ui-kit/Select/filterOptions.js +1 -10
  86. package/lib/ui-kit/Select/filterOptions.js.map +1 -1
  87. package/lib/utils/convertTimestampToDate.d.ts +1 -0
  88. package/lib/utils/convertTimestampToDate.js +13 -0
  89. package/lib/utils/convertTimestampToDate.js.map +1 -0
  90. package/lib/utils/fetchMultitudeJSON.js +1 -1
  91. package/lib/utils/fetchMultitudeJSON.js.map +1 -1
  92. package/mobile/bundle/bundle.umd.js +91 -91
  93. package/mobile/bundle/bundle.umd.min.js +1 -1
  94. package/mobile/bundle/components/Depository/Depository.d.ts +6 -0
  95. package/mobile/bundle/components/Depository/DepositoryContent.d.ts +2 -0
  96. package/mobile/bundle/components/Depository/DepositoryItem.d.ts +3 -0
  97. package/mobile/bundle/components/Depository/useDepository.d.ts +9 -0
  98. package/mobile/bundle/ui-kit/Pagination/Pagination.d.ts +8 -0
  99. package/mobile/bundle/ui-kit/Pagination/renderPages.d.ts +3 -0
  100. package/mobile/bundle/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  101. package/mobile/bundle/utils/convertTimestampToDate.d.ts +1 -0
  102. package/mobile/dist/components/ApplicationForm/renderRegion.js +1 -1
  103. package/mobile/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
  104. package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js +2 -2
  105. package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
  106. package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js +7 -7
  107. package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  108. package/mobile/dist/components/Depository/Depository.d.ts +6 -0
  109. package/mobile/dist/components/Depository/Depository.js +19 -0
  110. package/mobile/dist/components/Depository/Depository.js.map +1 -0
  111. package/mobile/dist/components/Depository/DepositoryContent.d.ts +2 -0
  112. package/mobile/dist/components/Depository/DepositoryContent.js +2 -0
  113. package/mobile/dist/components/Depository/DepositoryContent.js.map +1 -0
  114. package/mobile/dist/components/Depository/DepositoryItem.d.ts +3 -0
  115. package/mobile/dist/components/Depository/DepositoryItem.js +12 -0
  116. package/mobile/dist/components/Depository/DepositoryItem.js.map +1 -0
  117. package/mobile/dist/components/Depository/useDepository.d.ts +9 -0
  118. package/mobile/dist/components/Depository/useDepository.js +10 -0
  119. package/mobile/dist/components/Depository/useDepository.js.map +1 -0
  120. package/mobile/dist/ui-kit/Input/Input.js +7 -1
  121. package/mobile/dist/ui-kit/Input/Input.js.map +1 -1
  122. package/mobile/dist/ui-kit/Pagination/Pagination.d.ts +8 -0
  123. package/mobile/dist/ui-kit/Pagination/Pagination.js +31 -0
  124. package/mobile/dist/ui-kit/Pagination/Pagination.js.map +1 -0
  125. package/mobile/dist/ui-kit/Pagination/renderPages.d.ts +3 -0
  126. package/mobile/dist/ui-kit/Pagination/renderPages.js +18 -0
  127. package/mobile/dist/ui-kit/Pagination/renderPages.js.map +1 -0
  128. package/mobile/dist/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  129. package/mobile/dist/ui-kit/Pagination/shouldRenderPage.js +9 -0
  130. package/mobile/dist/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
  131. package/mobile/dist/ui-kit/Select/filterOptions.js +1 -10
  132. package/mobile/dist/ui-kit/Select/filterOptions.js.map +1 -1
  133. package/mobile/dist/utils/convertTimestampToDate.d.ts +1 -0
  134. package/mobile/dist/utils/convertTimestampToDate.js +16 -0
  135. package/mobile/dist/utils/convertTimestampToDate.js.map +1 -0
  136. package/mobile/dist/utils/fetchMultitudeJSON.js +1 -1
  137. package/mobile/dist/utils/fetchMultitudeJSON.js.map +1 -1
  138. package/mobile/lib/common.css +1 -1
  139. package/mobile/lib/components/ApplicationForm/renderRegion.js +1 -1
  140. package/mobile/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
  141. package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js +2 -2
  142. package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
  143. package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js +7 -7
  144. package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  145. package/mobile/lib/components/Depository/Depository.d.ts +6 -0
  146. package/mobile/lib/components/Depository/Depository.js +17 -0
  147. package/mobile/lib/components/Depository/Depository.js.map +1 -0
  148. package/mobile/lib/components/Depository/DepositoryContent.d.ts +2 -0
  149. package/mobile/lib/components/Depository/DepositoryContent.js +2 -0
  150. package/mobile/lib/components/Depository/DepositoryContent.js.map +1 -0
  151. package/mobile/lib/components/Depository/DepositoryItem.d.ts +3 -0
  152. package/mobile/lib/components/Depository/DepositoryItem.js +9 -0
  153. package/mobile/lib/components/Depository/DepositoryItem.js.map +1 -0
  154. package/mobile/lib/components/Depository/useDepository.d.ts +9 -0
  155. package/mobile/lib/components/Depository/useDepository.js +7 -0
  156. package/mobile/lib/components/Depository/useDepository.js.map +1 -0
  157. package/mobile/lib/ui-kit/Input/Input.js +8 -2
  158. package/mobile/lib/ui-kit/Input/Input.js.map +1 -1
  159. package/mobile/lib/ui-kit/Pagination/Pagination.d.ts +8 -0
  160. package/mobile/lib/ui-kit/Pagination/Pagination.js +28 -0
  161. package/mobile/lib/ui-kit/Pagination/Pagination.js.map +1 -0
  162. package/mobile/lib/ui-kit/Pagination/renderPages.d.ts +3 -0
  163. package/mobile/lib/ui-kit/Pagination/renderPages.js +15 -0
  164. package/mobile/lib/ui-kit/Pagination/renderPages.js.map +1 -0
  165. package/mobile/lib/ui-kit/Pagination/shouldRenderPage.d.ts +1 -0
  166. package/mobile/lib/ui-kit/Pagination/shouldRenderPage.js +6 -0
  167. package/mobile/lib/ui-kit/Pagination/shouldRenderPage.js.map +1 -0
  168. package/mobile/lib/ui-kit/Select/filterOptions.js +1 -10
  169. package/mobile/lib/ui-kit/Select/filterOptions.js.map +1 -1
  170. package/mobile/lib/utils/convertTimestampToDate.d.ts +1 -0
  171. package/mobile/lib/utils/convertTimestampToDate.js +13 -0
  172. package/mobile/lib/utils/convertTimestampToDate.js.map +1 -0
  173. package/mobile/lib/utils/fetchMultitudeJSON.js +1 -1
  174. package/mobile/lib/utils/fetchMultitudeJSON.js.map +1 -1
  175. package/mobile/src/components/ApplicationForm/ApplicationFormGrantSupport.tsx +1 -1
  176. package/mobile/src/components/ApplicationForm/renderRegion.tsx +2 -2
  177. package/mobile/src/components/ApplicationForm/renderRegionDepartment.tsx +2 -2
  178. package/mobile/src/components/ApplicationForm/renderWedDataOrganization.tsx +5 -5
  179. package/mobile/src/components/BenefitsBlock/BenefitsBlock.tsx +24 -22
  180. package/mobile/src/components/Depository/Depository.example.json +1 -0
  181. package/mobile/src/components/Depository/Depository.tsx +43 -0
  182. package/mobile/src/components/Depository/Depository.ui.json +1 -0
  183. package/mobile/src/components/Depository/DepositoryContent.ts +3 -0
  184. package/mobile/src/components/Depository/DepositoryItem.tsx +21 -0
  185. package/mobile/src/components/Depository/useDepository.ts +23 -0
  186. package/mobile/src/ui-kit/Input/Input.tsx +9 -2
  187. package/mobile/src/ui-kit/Pagination/Pagination.tsx +87 -0
  188. package/mobile/src/ui-kit/Pagination/renderPages.tsx +33 -0
  189. package/mobile/src/ui-kit/Pagination/shouldRenderPage.ts +8 -0
  190. package/mobile/src/ui-kit/Select/filterOptions.ts +1 -11
  191. package/mobile/src/utils/convertTimestampToDate.ts +15 -0
  192. package/mobile/src/utils/fetchMultitudeJSON.ts +1 -1
  193. package/package.json +1 -1
  194. package/src/components/ApplicationForm/ApplicationFormGrantSupport.tsx +1 -1
  195. package/src/components/ApplicationForm/renderRegion.tsx +2 -2
  196. package/src/components/ApplicationForm/renderRegionDepartment.tsx +2 -2
  197. package/src/components/ApplicationForm/renderWedDataOrganization.tsx +5 -5
  198. package/src/components/BenefitsBlock/BenefitsBlock.tsx +24 -22
  199. package/src/components/Blocks.ts +2 -0
  200. package/src/components/Depository/Depository.example.json +1 -0
  201. package/src/components/Depository/Depository.fixture.tsx +10 -0
  202. package/src/components/Depository/Depository.tsx +43 -0
  203. package/src/components/Depository/Depository.ui.json +1 -0
  204. package/src/components/Depository/DepositoryContent.ts +3 -0
  205. package/src/components/Depository/DepositoryItem.tsx +21 -0
  206. package/src/components/Depository/useDepository.ts +23 -0
  207. package/src/components/ProductBlock/ProductBlock.fixture.mobile.tsx +23 -3
  208. package/src/ui-kit/Input/Input.tsx +9 -2
  209. package/src/ui-kit/Pagination/Pagination.tsx +87 -0
  210. package/src/ui-kit/Pagination/renderPages.tsx +33 -0
  211. package/src/ui-kit/Pagination/shouldRenderPage.ts +8 -0
  212. package/src/ui-kit/Select/filterOptions.ts +1 -11
  213. package/src/utils/convertTimestampToDate.ts +15 -0
  214. 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 { style } from '../../utils/style';
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={style('space-y-x', className)} defaultPadding="p-6xl" {...rest}>
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 className="flex flex-wrap w-full sm:justify-center mt-xl gap-5xl" role="list">
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-2xs sm:mt-xs">
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
- <Paragraph
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
- </Paragraph>
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
- <Paragraph
89
- key={`benefitListItem-${i}`}
90
- font="font-light"
91
- size="text-l"
92
- color="text-secondary-text group-data-secondary:text-white"
93
- >
94
- {_}
95
- </Paragraph>
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;
@@ -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,10 @@
1
+ import '../../setup-fixture';
2
+ import { Depository } from './Depository';
3
+
4
+ export default {
5
+ default: (
6
+ <div className="container grid grid-cols-12">
7
+ <Depository className="col-span-12" />
8
+ </div>
9
+ ),
10
+ };
@@ -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,3 @@
1
+ import type { UniBlockContent } from '../../model/JSXBlock';
2
+
3
+ export type DepositoryContent = UniBlockContent;
@@ -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
- const ranking = options
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
+ };
@@ -5,5 +5,5 @@ export async function fetchMultitudeJSON<R = unknown>(
5
5
  ): Promise<Awaited<R | null>[]> {
6
6
  const fetchPromises = urls.map((url) => fetchJSON<R>(url));
7
7
 
8
- return await Promise.all(fetchPromises);
8
+ return Promise.all(fetchPromises);
9
9
  }