@digigov/ui 0.11.0 → 0.12.2

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 (661) hide show
  1. package/.eslintrc.js +4 -0
  2. package/.prettierrc.js +3 -0
  3. package/.rush/temp/package-deps_build.json +176 -0
  4. package/.rush/temp/shrinkwrap-deps.json +278 -0
  5. package/CHANGELOG.json +796 -0
  6. package/CHANGELOG.md +22 -1
  7. package/docs/components.mdx +1 -0
  8. package/docs/create-a-new-service.mdx +93 -0
  9. package/docs/create-common-page-layout.mdx +205 -0
  10. package/docs/create-static-page.mdx +179 -0
  11. package/docs/edit-start-page.mdx +143 -0
  12. package/docs/index.mdx +66 -0
  13. package/docs/introduction.mdx +34 -0
  14. package/package.json +31 -8
  15. package/src/api/APIErrors.tsx +44 -0
  16. package/src/api/APIProvider.tsx +27 -0
  17. package/src/api/fetchAPI.ts +45 -0
  18. package/src/api/index.spec.tsx +419 -0
  19. package/{esm/api/index.js → src/api/index.tsx} +6 -3
  20. package/{api → src/api}/introduction.md +0 -0
  21. package/src/api/useResource.tsx +96 -0
  22. package/src/api/useResourceAction.tsx +80 -0
  23. package/src/api/useResourceQuery.tsx +177 -0
  24. package/src/api/utils.tsx +156 -0
  25. package/src/app/App.tsx +33 -0
  26. package/{app/Confirmation/index.d.ts → src/app/Confirmation/index.tsx} +0 -0
  27. package/{app/Footer/index.d.ts → src/app/Footer/index.tsx} +0 -0
  28. package/{es/app/Header/HeaderLogo.js → src/app/Header/HeaderLogo.tsx} +9 -7
  29. package/src/app/Header/HeaderSection.tsx +13 -0
  30. package/src/app/Header/HeaderTitle.tsx +24 -0
  31. package/{app → src/app}/Header/__snapshots__/index.spec.tsx.snap +0 -0
  32. package/{app → src/app}/Header/index.mdx +0 -0
  33. package/src/app/Header/index.spec.tsx +32 -0
  34. package/{esm/app/Header/index.js → src/app/Header/index.tsx} +10 -4
  35. package/src/app/NotFound/index.tsx +21 -0
  36. package/src/app/OutdatedBrowserBanner.tsx +37 -0
  37. package/src/app/PageTitle.tsx +70 -0
  38. package/{app → src/app}/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -0
  39. package/{app → src/app}/QrCodeScanner/index.mdx +0 -0
  40. package/src/app/QrCodeScanner/index.spec.tsx +19 -0
  41. package/src/app/QrCodeScanner/index.tsx +90 -0
  42. package/src/app/i18n.tsx +44 -0
  43. package/{app/index.d.ts → src/app/index.ts} +0 -0
  44. package/{core → src/core}/Accordion/__snapshots__/index.spec.tsx.snap +0 -0
  45. package/{core → src/core}/Accordion/index.mdx +0 -0
  46. package/src/core/Accordion/index.spec.tsx +30 -0
  47. package/src/core/Accordion/index.tsx +86 -0
  48. package/{core → src/core}/Blockquote/__snapshots__/index.spec.tsx.snap +0 -0
  49. package/{core → src/core}/Blockquote/index.mdx +0 -0
  50. package/src/core/Blockquote/index.spec.tsx +10 -0
  51. package/{esm/core/Blockquote/index.js → src/core/Blockquote/index.tsx} +9 -7
  52. package/{core/Breadcrumbs/index.d.ts → src/core/Breadcrumbs/index.tsx} +0 -0
  53. package/{esm/core/Button/BackButton.js → src/core/Button/BackButton.tsx} +10 -8
  54. package/src/core/Button/ButtonLink.tsx +20 -0
  55. package/src/core/Button/CallToAction.tsx +31 -0
  56. package/src/core/Button/Icon.tsx +9 -0
  57. package/{core → src/core}/Button/__snapshots__/index.spec.tsx.snap +0 -0
  58. package/{core → src/core}/Button/index.mdx +0 -0
  59. package/src/core/Button/index.spec.tsx +8 -0
  60. package/src/core/Button/index.tsx +46 -0
  61. package/{core/Card/index.d.ts → src/core/Card/index.tsx} +0 -0
  62. package/{core → src/core}/Details/__snapshots__/index.spec.tsx.snap +0 -0
  63. package/{core → src/core}/Details/index.mdx +0 -0
  64. package/src/core/Details/index.spec.tsx +38 -0
  65. package/{core/Details/index.d.ts → src/core/Details/index.tsx} +2 -0
  66. package/src/core/Divider/index.tsx +13 -0
  67. package/{core → src/core}/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -0
  68. package/{core → src/core}/ErrorSummary/index.mdx +0 -0
  69. package/src/core/ErrorSummary/index.spec.tsx +10 -0
  70. package/{core/ErrorSummary/index.d.ts → src/core/ErrorSummary/index.tsx} +1 -0
  71. package/{core/Hidden/index.d.ts → src/core/Hidden/index.tsx} +0 -0
  72. package/{core → src/core}/Link/__snapshots__/index.spec.tsx.snap +0 -0
  73. package/src/core/Link/index.spec.tsx +22 -0
  74. package/src/core/Link/index.tsx +41 -0
  75. package/{core/List/List.d.ts → src/core/List/List.tsx} +2 -0
  76. package/{core/List/ListItem.d.ts → src/core/List/ListItem.tsx} +2 -0
  77. package/src/core/List/ListItemContent.tsx +32 -0
  78. package/src/core/List/ListItemIcon.tsx +31 -0
  79. package/src/core/List/ListItemText.tsx +23 -0
  80. package/src/core/List/ListItemTitle.tsx +37 -0
  81. package/{core → src/core}/List/__snapshots__/index.spec.tsx.snap +0 -0
  82. package/{core → src/core}/List/index.mdx +0 -0
  83. package/src/core/List/index.spec.tsx +10 -0
  84. package/{core/List/index.d.ts → src/core/List/index.tsx} +0 -0
  85. package/src/core/NavList/NavList.tsx +103 -0
  86. package/src/core/NavList/NavListContext.tsx +85 -0
  87. package/src/core/NavList/NavListItem.tsx +143 -0
  88. package/src/core/NavList/NavListItemBase.tsx +146 -0
  89. package/src/core/NavList/NavListSubMenu.tsx +33 -0
  90. package/{core → src/core}/NavList/__snapshots__/index.spec.tsx.snap +0 -0
  91. package/{core → src/core}/NavList/index.mdx +0 -0
  92. package/src/core/NavList/index.spec.tsx +10 -0
  93. package/{core/NavList/index.d.ts → src/core/NavList/index.tsx} +0 -0
  94. package/{core → src/core}/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -0
  95. package/{core → src/core}/NotificationBanner/index.mdx +0 -0
  96. package/src/core/NotificationBanner/index.spec.tsx +27 -0
  97. package/src/core/NotificationBanner/index.tsx +52 -0
  98. package/{core → src/core}/ServiceBadge/ServiceBadge.mdx +0 -0
  99. package/{core → src/core}/ServiceBadge/index.mdx +0 -0
  100. package/src/core/ServiceBadge/index.tsx +35 -0
  101. package/{core → src/core}/SummaryList/__snapshots__/index.spec.tsx.snap +0 -0
  102. package/{core → src/core}/SummaryList/index.mdx +0 -0
  103. package/src/core/SummaryList/index.spec.tsx +28 -0
  104. package/{core/SummaryList/index.d.ts → src/core/SummaryList/index.tsx} +2 -0
  105. package/{core/Table/index.d.ts → src/core/Table/index.tsx} +0 -0
  106. package/{core → src/core}/Tabs/index.mdx +0 -0
  107. package/src/core/Tabs/index.tsx +36 -0
  108. package/{core/VisuallyHidden/index.d.ts → src/core/VisuallyHidden/index.tsx} +0 -0
  109. package/{core → src/core}/WarningText/__snapshots__/index.spec.tsx.snap +0 -0
  110. package/{core → src/core}/WarningText/index.mdx +0 -0
  111. package/src/core/WarningText/index.spec.tsx +10 -0
  112. package/{core/WarningText/index.d.ts → src/core/WarningText/index.tsx} +1 -0
  113. package/{core/index.d.ts → src/core/index.ts} +3 -0
  114. package/src/custom.d.ts +8 -0
  115. package/{es → src}/form/inputs/Input/index.mdx +0 -0
  116. package/src/govgr/Footer/Copyright.tsx +64 -0
  117. package/{govgr/Footer/HellenicRepublicLogo.d.ts → src/govgr/Footer/HellenicRepublicLogo.tsx} +1 -0
  118. package/src/govgr/Footer/LicenseCCSA.tsx +24 -0
  119. package/{es → src}/govgr/Footer/index.mdx +0 -0
  120. package/src/govgr/Footer/index.tsx +49 -0
  121. package/{esm/govgr/Footer/logo.js → src/govgr/Footer/logo.ts} +1 -1
  122. package/{esm/govgr/Footer/logos/logo-el.js → src/govgr/Footer/logos/logo-el.ts} +1 -1
  123. package/{esm/govgr/Footer/logos/logo-en.js → src/govgr/Footer/logos/logo-en.ts} +1 -1
  124. package/{es → src}/govgr/Logo/govgr-logo.svg +0 -0
  125. package/{govgr/Logo/index.d.ts → src/govgr/Logo/index.tsx} +2 -0
  126. package/{es/govgr/Logo/logo.js → src/govgr/Logo/logo.ts} +1 -1
  127. package/{govgr/index.d.ts → src/govgr/index.ts} +0 -0
  128. package/src/hooks/useDebounce.ts +50 -0
  129. package/src/hooks/useLatest.ts +12 -0
  130. package/{esm/hooks/useOutdatedBrowserCheck.js → src/hooks/useOutdatedBrowserCheck.ts} +16 -15
  131. package/src/hooks/useSearch.ts +47 -0
  132. package/src/hooks/useTogglableSections.tsx +102 -0
  133. package/{index.d.ts → src/index.ts} +0 -0
  134. package/{es → src}/layouts/Basic/Bottom/index.mdx +0 -0
  135. package/{layouts/Basic/Bottom/index.d.ts → src/layouts/Basic/Bottom/index.tsx} +1 -0
  136. package/{es → src}/layouts/Basic/Content/index.mdx +0 -0
  137. package/src/layouts/Basic/Content/index.tsx +24 -0
  138. package/{es → src}/layouts/Basic/Main/index.mdx +0 -0
  139. package/{layouts/Basic/Main/index.d.ts → src/layouts/Basic/Main/index.tsx} +1 -0
  140. package/{es → src}/layouts/Basic/Masthead/index.mdx +0 -0
  141. package/{layouts/Basic/Masthead/index.d.ts → src/layouts/Basic/Masthead/index.tsx} +2 -0
  142. package/{es → src}/layouts/Basic/Side/index.mdx +0 -0
  143. package/{esm/layouts/Basic/Side/index.js → src/layouts/Basic/Side/index.tsx} +5 -3
  144. package/{es → src}/layouts/Basic/Top/index.mdx +0 -0
  145. package/{es/layouts/Basic/Top/index.js → src/layouts/Basic/Top/index.tsx} +7 -5
  146. package/{es → src}/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -0
  147. package/{es → src}/layouts/Basic/index.mdx +0 -0
  148. package/src/layouts/Basic/index.spec.tsx +24 -0
  149. package/{layouts/Basic/index.d.ts → src/layouts/Basic/index.tsx} +2 -0
  150. package/{layouts/Grid/index.d.ts → src/layouts/Grid/index.tsx} +0 -0
  151. package/{layouts/index.d.ts → src/layouts/index.ts} +0 -0
  152. package/src/locales/el.ts +60 -0
  153. package/{esm/locales/en.js → src/locales/en.ts} +25 -11
  154. package/{es → src}/router/index.mdx +0 -0
  155. package/src/router/index.tsx +28 -0
  156. package/src/test-utils/delay.ts +9 -0
  157. package/src/test-utils/mountWithTheme.tsx +33 -0
  158. package/{es → src}/themes/govgr.js +33 -29
  159. package/src/themes/grnet.js +109 -0
  160. package/src/themes/index.tsx +38 -0
  161. package/src/typography/Caption.tsx +15 -0
  162. package/src/typography/NormalText.tsx +7 -0
  163. package/src/typography/Paragraph.tsx +9 -0
  164. package/src/typography/Title.tsx +51 -0
  165. package/{es → src}/typography/index.mdx +0 -0
  166. package/{typography/index.d.ts → src/typography/index.ts} +0 -0
  167. package/src/utils/evaluateBrowserVersion.ts +346 -0
  168. package/src/utils/withDeprecation.tsx +97 -0
  169. package/tsconfig.json +18 -0
  170. package/tsconfig.production.json +27 -0
  171. package/ui.build.log +17 -0
  172. package/LICENSE +0 -0
  173. package/api/APIErrors.d.ts +0 -22
  174. package/api/APIErrors.js +0 -117
  175. package/api/APIProvider.d.ts +0 -15
  176. package/api/APIProvider.js +0 -43
  177. package/api/fetchAPI.d.ts +0 -18
  178. package/api/fetchAPI.js +0 -64
  179. package/api/index.d.ts +0 -9
  180. package/api/index.js +0 -104
  181. package/api/index.spec.d.ts +0 -1
  182. package/api/index.spec.js +0 -584
  183. package/api/useResource.d.ts +0 -11
  184. package/api/useResource.js +0 -144
  185. package/api/useResourceAction.d.ts +0 -2
  186. package/api/useResourceAction.js +0 -157
  187. package/api/useResourceQuery.d.ts +0 -18
  188. package/api/useResourceQuery.js +0 -229
  189. package/api/utils.d.ts +0 -6
  190. package/api/utils.js +0 -250
  191. package/app/App.d.ts +0 -14
  192. package/app/App.js +0 -49
  193. package/app/Confirmation/index.js +0 -44
  194. package/app/Footer/index.js +0 -200
  195. package/app/Header/HeaderLogo.d.ts +0 -3
  196. package/app/Header/HeaderLogo.js +0 -30
  197. package/app/Header/HeaderSection.d.ts +0 -5
  198. package/app/Header/HeaderSection.js +0 -20
  199. package/app/Header/HeaderTitle.d.ts +0 -5
  200. package/app/Header/HeaderTitle.js +0 -30
  201. package/app/Header/index.d.ts +0 -11
  202. package/app/Header/index.js +0 -106
  203. package/app/Header/index.spec.d.ts +0 -1
  204. package/app/Header/index.spec.js +0 -45
  205. package/app/NotFound/index.d.ts +0 -3
  206. package/app/NotFound/index.js +0 -29
  207. package/app/OutdatedBrowserBanner.d.ts +0 -2
  208. package/app/OutdatedBrowserBanner.js +0 -41
  209. package/app/PageTitle.d.ts +0 -10
  210. package/app/PageTitle.js +0 -76
  211. package/app/QrCodeScanner/index.d.ts +0 -29
  212. package/app/QrCodeScanner/index.js +0 -85
  213. package/app/QrCodeScanner/index.spec.d.ts +0 -1
  214. package/app/QrCodeScanner/index.spec.js +0 -26
  215. package/app/i18n.d.ts +0 -10
  216. package/app/i18n.js +0 -57
  217. package/app/index.js +0 -70
  218. package/core/Accordion/index.d.ts +0 -21
  219. package/core/Accordion/index.js +0 -127
  220. package/core/Accordion/index.spec.d.ts +0 -1
  221. package/core/Accordion/index.spec.js +0 -19
  222. package/core/Blockquote/index.d.ts +0 -3
  223. package/core/Blockquote/index.js +0 -29
  224. package/core/Blockquote/index.spec.d.ts +0 -1
  225. package/core/Blockquote/index.spec.js +0 -21
  226. package/core/Breadcrumbs/index.js +0 -44
  227. package/core/Button/BackButton.d.ts +0 -3
  228. package/core/Button/BackButton.js +0 -34
  229. package/core/Button/ButtonLink.d.ts +0 -4
  230. package/core/Button/ButtonLink.js +0 -28
  231. package/core/Button/CallToAction.d.ts +0 -7
  232. package/core/Button/CallToAction.js +0 -41
  233. package/core/Button/Icon.d.ts +0 -2
  234. package/core/Button/Icon.js +0 -19
  235. package/core/Button/index.d.ts +0 -15
  236. package/core/Button/index.js +0 -121
  237. package/core/Button/index.spec.d.ts +0 -1
  238. package/core/Button/index.spec.js +0 -21
  239. package/core/Card/index.js +0 -57
  240. package/core/Details/index.js +0 -35
  241. package/core/Details/index.spec.d.ts +0 -1
  242. package/core/Details/index.spec.js +0 -27
  243. package/core/Divider/index.d.ts +0 -5
  244. package/core/Divider/index.js +0 -20
  245. package/core/ErrorSummary/index.js +0 -19
  246. package/core/ErrorSummary/index.spec.d.ts +0 -1
  247. package/core/ErrorSummary/index.spec.js +0 -21
  248. package/core/Hidden/index.js +0 -18
  249. package/core/Link/index.d.ts +0 -12
  250. package/core/Link/index.js +0 -50
  251. package/core/Link/index.spec.d.ts +0 -1
  252. package/core/Link/index.spec.js +0 -31
  253. package/core/List/List.js +0 -19
  254. package/core/List/ListItem.js +0 -19
  255. package/core/List/ListItemContent.d.ts +0 -7
  256. package/core/List/ListItemContent.js +0 -45
  257. package/core/List/ListItemIcon.d.ts +0 -7
  258. package/core/List/ListItemIcon.js +0 -48
  259. package/core/List/ListItemText.d.ts +0 -8
  260. package/core/List/ListItemText.js +0 -36
  261. package/core/List/ListItemTitle.d.ts +0 -10
  262. package/core/List/ListItemTitle.js +0 -44
  263. package/core/List/index.js +0 -96
  264. package/core/List/index.spec.d.ts +0 -1
  265. package/core/List/index.spec.js +0 -21
  266. package/core/NavList/NavList.d.ts +0 -17
  267. package/core/NavList/NavList.js +0 -99
  268. package/core/NavList/NavListContext.d.ts +0 -20
  269. package/core/NavList/NavListContext.js +0 -102
  270. package/core/NavList/NavListItem.d.ts +0 -13
  271. package/core/NavList/NavListItem.js +0 -171
  272. package/core/NavList/NavListItemBase.d.ts +0 -16
  273. package/core/NavList/NavListItemBase.js +0 -161
  274. package/core/NavList/NavListSubMenu.d.ts +0 -8
  275. package/core/NavList/NavListSubMenu.js +0 -52
  276. package/core/NavList/index.js +0 -68
  277. package/core/NavList/index.spec.d.ts +0 -1
  278. package/core/NavList/index.spec.js +0 -21
  279. package/core/NotificationBanner/index.d.ts +0 -18
  280. package/core/NotificationBanner/index.js +0 -78
  281. package/core/NotificationBanner/index.spec.d.ts +0 -1
  282. package/core/NotificationBanner/index.spec.js +0 -32
  283. package/core/ServiceBadge/index.d.ts +0 -9
  284. package/core/ServiceBadge/index.js +0 -36
  285. package/core/SummaryList/index.js +0 -79
  286. package/core/SummaryList/index.spec.d.ts +0 -1
  287. package/core/SummaryList/index.spec.js +0 -19
  288. package/core/Table/index.js +0 -96
  289. package/core/Tabs/index.d.ts +0 -16
  290. package/core/Tabs/index.js +0 -88
  291. package/core/VisuallyHidden/index.js +0 -18
  292. package/core/WarningText/index.js +0 -19
  293. package/core/WarningText/index.spec.d.ts +0 -1
  294. package/core/WarningText/index.spec.js +0 -21
  295. package/core/index.js +0 -199
  296. package/custom.d.js +0 -1
  297. package/es/api/APIErrors.js +0 -96
  298. package/es/api/APIProvider.js +0 -25
  299. package/es/api/fetchAPI.js +0 -49
  300. package/es/api/index.js +0 -13
  301. package/es/api/index.spec.js +0 -546
  302. package/es/api/introduction.md +0 -6
  303. package/es/api/useResource.js +0 -128
  304. package/es/api/useResourceAction.js +0 -141
  305. package/es/api/useResourceQuery.js +0 -208
  306. package/es/api/utils.js +0 -233
  307. package/es/app/App.js +0 -27
  308. package/es/app/Confirmation/index.js +0 -3
  309. package/es/app/Footer/index.js +0 -15
  310. package/es/app/Header/HeaderSection.js +0 -7
  311. package/es/app/Header/HeaderTitle.js +0 -17
  312. package/es/app/Header/__snapshots__/index.spec.tsx.snap +0 -393
  313. package/es/app/Header/index.js +0 -13
  314. package/es/app/Header/index.mdx +0 -50
  315. package/es/app/Header/index.spec.js +0 -32
  316. package/es/app/NotFound/index.js +0 -12
  317. package/es/app/OutdatedBrowserBanner.js +0 -24
  318. package/es/app/PageTitle.js +0 -57
  319. package/es/app/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -22
  320. package/es/app/QrCodeScanner/index.js +0 -64
  321. package/es/app/QrCodeScanner/index.mdx +0 -22
  322. package/es/app/QrCodeScanner/index.spec.js +0 -13
  323. package/es/app/i18n.js +0 -36
  324. package/es/app/index.js +0 -5
  325. package/es/core/Accordion/__snapshots__/index.spec.tsx.snap +0 -78
  326. package/es/core/Accordion/index.js +0 -67
  327. package/es/core/Accordion/index.mdx +0 -104
  328. package/es/core/Accordion/index.spec.js +0 -9
  329. package/es/core/Blockquote/__snapshots__/index.spec.tsx.snap +0 -13
  330. package/es/core/Blockquote/index.js +0 -16
  331. package/es/core/Blockquote/index.mdx +0 -61
  332. package/es/core/Blockquote/index.spec.js +0 -9
  333. package/es/core/Breadcrumbs/index.js +0 -3
  334. package/es/core/Button/BackButton.js +0 -21
  335. package/es/core/Button/ButtonLink.js +0 -16
  336. package/es/core/Button/CallToAction.js +0 -27
  337. package/es/core/Button/Icon.js +0 -7
  338. package/es/core/Button/__snapshots__/index.spec.tsx.snap +0 -13
  339. package/es/core/Button/index.js +0 -36
  340. package/es/core/Button/index.mdx +0 -65
  341. package/es/core/Button/index.spec.js +0 -9
  342. package/es/core/Card/index.js +0 -4
  343. package/es/core/Details/__snapshots__/index.spec.tsx.snap +0 -50
  344. package/es/core/Details/index.js +0 -5
  345. package/es/core/Details/index.mdx +0 -34
  346. package/es/core/Details/index.spec.js +0 -17
  347. package/es/core/Divider/index.js +0 -7
  348. package/es/core/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -322
  349. package/es/core/ErrorSummary/index.js +0 -3
  350. package/es/core/ErrorSummary/index.mdx +0 -61
  351. package/es/core/ErrorSummary/index.spec.js +0 -9
  352. package/es/core/Hidden/index.js +0 -1
  353. package/es/core/Link/__snapshots__/index.spec.tsx.snap +0 -31
  354. package/es/core/Link/index.js +0 -26
  355. package/es/core/Link/index.spec.js +0 -21
  356. package/es/core/List/List.js +0 -3
  357. package/es/core/List/ListItem.js +0 -3
  358. package/es/core/List/ListItemContent.js +0 -27
  359. package/es/core/List/ListItemIcon.js +0 -29
  360. package/es/core/List/ListItemText.js +0 -19
  361. package/es/core/List/ListItemTitle.js +0 -25
  362. package/es/core/List/__snapshots__/index.spec.tsx.snap +0 -322
  363. package/es/core/List/index.js +0 -7
  364. package/es/core/List/index.mdx +0 -40
  365. package/es/core/List/index.spec.js +0 -9
  366. package/es/core/NavList/NavList.js +0 -78
  367. package/es/core/NavList/NavListContext.js +0 -80
  368. package/es/core/NavList/NavListItem.js +0 -141
  369. package/es/core/NavList/NavListItemBase.js +0 -133
  370. package/es/core/NavList/NavListSubMenu.js +0 -27
  371. package/es/core/NavList/__snapshots__/index.spec.tsx.snap +0 -334
  372. package/es/core/NavList/index.js +0 -5
  373. package/es/core/NavList/index.mdx +0 -185
  374. package/es/core/NavList/index.spec.js +0 -9
  375. package/es/core/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -737
  376. package/es/core/NotificationBanner/index.js +0 -35
  377. package/es/core/NotificationBanner/index.mdx +0 -77
  378. package/es/core/NotificationBanner/index.spec.js +0 -20
  379. package/es/core/ServiceBadge/ServiceBadge.mdx +0 -0
  380. package/es/core/ServiceBadge/index.js +0 -20
  381. package/es/core/ServiceBadge/index.mdx +0 -42
  382. package/es/core/SummaryList/__snapshots__/index.spec.tsx.snap +0 -57
  383. package/es/core/SummaryList/index.js +0 -7
  384. package/es/core/SummaryList/index.mdx +0 -82
  385. package/es/core/SummaryList/index.spec.js +0 -9
  386. package/es/core/Table/index.js +0 -7
  387. package/es/core/Tabs/index.js +0 -37
  388. package/es/core/Tabs/index.mdx +0 -54
  389. package/es/core/VisuallyHidden/index.js +0 -1
  390. package/es/core/WarningText/__snapshots__/index.spec.tsx.snap +0 -336
  391. package/es/core/WarningText/index.js +0 -3
  392. package/es/core/WarningText/index.mdx +0 -46
  393. package/es/core/WarningText/index.spec.js +0 -9
  394. package/es/core/index.js +0 -14
  395. package/es/custom.d.js +0 -0
  396. package/es/govgr/Footer/Copyright.js +0 -37
  397. package/es/govgr/Footer/HellenicRepublicLogo.js +0 -3
  398. package/es/govgr/Footer/LicenseCCSA.js +0 -18
  399. package/es/govgr/Footer/index.js +0 -21
  400. package/es/govgr/Footer/logo.js +0 -1
  401. package/es/govgr/Footer/logos/logo-el.js +0 -1
  402. package/es/govgr/Footer/logos/logo-en.js +0 -1
  403. package/es/govgr/Logo/index.js +0 -3
  404. package/es/govgr/index.js +0 -4
  405. package/es/hooks/useDebounce.js +0 -41
  406. package/es/hooks/useLatest.js +0 -12
  407. package/es/hooks/useOutdatedBrowserCheck.js +0 -46
  408. package/es/hooks/useSearch.js +0 -25
  409. package/es/hooks/useTogglableSections.js +0 -96
  410. package/es/index.js +0 -5
  411. package/es/layouts/Basic/Bottom/index.js +0 -3
  412. package/es/layouts/Basic/Content/index.js +0 -18
  413. package/es/layouts/Basic/Main/index.js +0 -3
  414. package/es/layouts/Basic/Masthead/index.js +0 -4
  415. package/es/layouts/Basic/Side/index.js +0 -7
  416. package/es/layouts/Basic/index.js +0 -8
  417. package/es/layouts/Basic/index.spec.js +0 -10
  418. package/es/layouts/Grid/index.js +0 -1
  419. package/es/layouts/index.js +0 -2
  420. package/es/locales/el.js +0 -45
  421. package/es/locales/en.js +0 -45
  422. package/es/router/index.js +0 -15
  423. package/es/test-utils/delay.js +0 -31
  424. package/es/test-utils/mountWithTheme.js +0 -30
  425. package/es/themes/grnet.js +0 -110
  426. package/es/themes/index.js +0 -2
  427. package/es/typography/Caption.js +0 -7
  428. package/es/typography/NormalText.js +0 -3
  429. package/es/typography/Paragraph.js +0 -2
  430. package/es/typography/Title.js +0 -48
  431. package/es/typography/index.js +0 -8
  432. package/es/utils/evaluateBrowserVersion.js +0 -201
  433. package/es/utils/withDeprecation.js +0 -103
  434. package/esm/api/APIErrors.js +0 -96
  435. package/esm/api/APIProvider.js +0 -25
  436. package/esm/api/fetchAPI.js +0 -49
  437. package/esm/api/index.spec.js +0 -546
  438. package/esm/api/introduction.md +0 -6
  439. package/esm/api/useResource.js +0 -128
  440. package/esm/api/useResourceAction.js +0 -141
  441. package/esm/api/useResourceQuery.js +0 -208
  442. package/esm/api/utils.js +0 -233
  443. package/esm/app/App.js +0 -27
  444. package/esm/app/Confirmation/index.js +0 -3
  445. package/esm/app/Footer/index.js +0 -15
  446. package/esm/app/Header/HeaderLogo.js +0 -17
  447. package/esm/app/Header/HeaderSection.js +0 -7
  448. package/esm/app/Header/HeaderTitle.js +0 -17
  449. package/esm/app/Header/__snapshots__/index.spec.tsx.snap +0 -393
  450. package/esm/app/Header/index.mdx +0 -50
  451. package/esm/app/Header/index.spec.js +0 -32
  452. package/esm/app/NotFound/index.js +0 -12
  453. package/esm/app/OutdatedBrowserBanner.js +0 -24
  454. package/esm/app/PageTitle.js +0 -57
  455. package/esm/app/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -22
  456. package/esm/app/QrCodeScanner/index.js +0 -64
  457. package/esm/app/QrCodeScanner/index.mdx +0 -22
  458. package/esm/app/QrCodeScanner/index.spec.js +0 -13
  459. package/esm/app/i18n.js +0 -36
  460. package/esm/app/index.js +0 -5
  461. package/esm/core/Accordion/__snapshots__/index.spec.tsx.snap +0 -78
  462. package/esm/core/Accordion/index.js +0 -67
  463. package/esm/core/Accordion/index.mdx +0 -104
  464. package/esm/core/Accordion/index.spec.js +0 -9
  465. package/esm/core/Blockquote/__snapshots__/index.spec.tsx.snap +0 -13
  466. package/esm/core/Blockquote/index.mdx +0 -61
  467. package/esm/core/Blockquote/index.spec.js +0 -9
  468. package/esm/core/Breadcrumbs/index.js +0 -3
  469. package/esm/core/Button/ButtonLink.js +0 -16
  470. package/esm/core/Button/CallToAction.js +0 -27
  471. package/esm/core/Button/Icon.js +0 -7
  472. package/esm/core/Button/__snapshots__/index.spec.tsx.snap +0 -13
  473. package/esm/core/Button/index.js +0 -36
  474. package/esm/core/Button/index.mdx +0 -65
  475. package/esm/core/Button/index.spec.js +0 -9
  476. package/esm/core/Card/index.js +0 -4
  477. package/esm/core/Details/__snapshots__/index.spec.tsx.snap +0 -50
  478. package/esm/core/Details/index.js +0 -5
  479. package/esm/core/Details/index.mdx +0 -34
  480. package/esm/core/Details/index.spec.js +0 -17
  481. package/esm/core/Divider/index.js +0 -7
  482. package/esm/core/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -322
  483. package/esm/core/ErrorSummary/index.js +0 -3
  484. package/esm/core/ErrorSummary/index.mdx +0 -61
  485. package/esm/core/ErrorSummary/index.spec.js +0 -9
  486. package/esm/core/Hidden/index.js +0 -1
  487. package/esm/core/Link/__snapshots__/index.spec.tsx.snap +0 -31
  488. package/esm/core/Link/index.js +0 -26
  489. package/esm/core/Link/index.spec.js +0 -21
  490. package/esm/core/List/List.js +0 -3
  491. package/esm/core/List/ListItem.js +0 -3
  492. package/esm/core/List/ListItemContent.js +0 -27
  493. package/esm/core/List/ListItemIcon.js +0 -29
  494. package/esm/core/List/ListItemText.js +0 -19
  495. package/esm/core/List/ListItemTitle.js +0 -25
  496. package/esm/core/List/__snapshots__/index.spec.tsx.snap +0 -322
  497. package/esm/core/List/index.js +0 -7
  498. package/esm/core/List/index.mdx +0 -40
  499. package/esm/core/List/index.spec.js +0 -9
  500. package/esm/core/NavList/NavList.js +0 -78
  501. package/esm/core/NavList/NavListContext.js +0 -80
  502. package/esm/core/NavList/NavListItem.js +0 -141
  503. package/esm/core/NavList/NavListItemBase.js +0 -133
  504. package/esm/core/NavList/NavListSubMenu.js +0 -27
  505. package/esm/core/NavList/__snapshots__/index.spec.tsx.snap +0 -334
  506. package/esm/core/NavList/index.js +0 -5
  507. package/esm/core/NavList/index.mdx +0 -185
  508. package/esm/core/NavList/index.spec.js +0 -9
  509. package/esm/core/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -737
  510. package/esm/core/NotificationBanner/index.js +0 -35
  511. package/esm/core/NotificationBanner/index.mdx +0 -77
  512. package/esm/core/NotificationBanner/index.spec.js +0 -20
  513. package/esm/core/ServiceBadge/ServiceBadge.mdx +0 -0
  514. package/esm/core/ServiceBadge/index.js +0 -20
  515. package/esm/core/ServiceBadge/index.mdx +0 -42
  516. package/esm/core/SummaryList/__snapshots__/index.spec.tsx.snap +0 -57
  517. package/esm/core/SummaryList/index.js +0 -7
  518. package/esm/core/SummaryList/index.mdx +0 -82
  519. package/esm/core/SummaryList/index.spec.js +0 -9
  520. package/esm/core/Table/index.js +0 -7
  521. package/esm/core/Tabs/index.js +0 -37
  522. package/esm/core/Tabs/index.mdx +0 -54
  523. package/esm/core/VisuallyHidden/index.js +0 -1
  524. package/esm/core/WarningText/__snapshots__/index.spec.tsx.snap +0 -336
  525. package/esm/core/WarningText/index.js +0 -3
  526. package/esm/core/WarningText/index.mdx +0 -46
  527. package/esm/core/WarningText/index.spec.js +0 -9
  528. package/esm/core/index.js +0 -14
  529. package/esm/custom.d.js +0 -0
  530. package/esm/form/inputs/Input/index.mdx +0 -10
  531. package/esm/govgr/Footer/Copyright.js +0 -37
  532. package/esm/govgr/Footer/HellenicRepublicLogo.js +0 -3
  533. package/esm/govgr/Footer/LicenseCCSA.js +0 -18
  534. package/esm/govgr/Footer/index.js +0 -21
  535. package/esm/govgr/Footer/index.mdx +0 -97
  536. package/esm/govgr/Logo/govgr-logo.svg +0 -1
  537. package/esm/govgr/Logo/index.js +0 -3
  538. package/esm/govgr/Logo/logo.js +0 -1
  539. package/esm/govgr/index.js +0 -4
  540. package/esm/hooks/useDebounce.js +0 -41
  541. package/esm/hooks/useLatest.js +0 -12
  542. package/esm/hooks/useSearch.js +0 -25
  543. package/esm/hooks/useTogglableSections.js +0 -96
  544. package/esm/index.js +0 -10
  545. package/esm/layouts/Basic/Bottom/index.js +0 -3
  546. package/esm/layouts/Basic/Bottom/index.mdx +0 -37
  547. package/esm/layouts/Basic/Content/index.js +0 -18
  548. package/esm/layouts/Basic/Content/index.mdx +0 -64
  549. package/esm/layouts/Basic/Main/index.js +0 -3
  550. package/esm/layouts/Basic/Main/index.mdx +0 -64
  551. package/esm/layouts/Basic/Masthead/index.js +0 -4
  552. package/esm/layouts/Basic/Masthead/index.mdx +0 -74
  553. package/esm/layouts/Basic/Side/index.mdx +0 -71
  554. package/esm/layouts/Basic/Top/index.js +0 -11
  555. package/esm/layouts/Basic/Top/index.mdx +0 -74
  556. package/esm/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -54
  557. package/esm/layouts/Basic/index.js +0 -8
  558. package/esm/layouts/Basic/index.mdx +0 -62
  559. package/esm/layouts/Basic/index.spec.js +0 -10
  560. package/esm/layouts/Grid/index.js +0 -1
  561. package/esm/layouts/index.js +0 -2
  562. package/esm/locales/el.js +0 -45
  563. package/esm/router/index.js +0 -15
  564. package/esm/router/index.mdx +0 -40
  565. package/esm/test-utils/delay.js +0 -31
  566. package/esm/test-utils/mountWithTheme.js +0 -30
  567. package/esm/themes/govgr.js +0 -79
  568. package/esm/themes/grnet.js +0 -110
  569. package/esm/themes/index.js +0 -2
  570. package/esm/typography/Caption.js +0 -7
  571. package/esm/typography/NormalText.js +0 -3
  572. package/esm/typography/Paragraph.js +0 -2
  573. package/esm/typography/Title.js +0 -48
  574. package/esm/typography/index.js +0 -8
  575. package/esm/typography/index.mdx +0 -32
  576. package/esm/utils/evaluateBrowserVersion.js +0 -201
  577. package/esm/utils/withDeprecation.js +0 -103
  578. package/form/inputs/Input/index.mdx +0 -10
  579. package/govgr/Footer/Copyright.d.ts +0 -8
  580. package/govgr/Footer/Copyright.js +0 -52
  581. package/govgr/Footer/HellenicRepublicLogo.js +0 -19
  582. package/govgr/Footer/LicenseCCSA.d.ts +0 -3
  583. package/govgr/Footer/LicenseCCSA.js +0 -33
  584. package/govgr/Footer/index.d.ts +0 -13
  585. package/govgr/Footer/index.js +0 -39
  586. package/govgr/Footer/index.mdx +0 -97
  587. package/govgr/Footer/logo.d.ts +0 -2
  588. package/govgr/Footer/logo.js +0 -8
  589. package/govgr/Footer/logos/logo-el.d.ts +0 -2
  590. package/govgr/Footer/logos/logo-el.js +0 -8
  591. package/govgr/Footer/logos/logo-en.d.ts +0 -2
  592. package/govgr/Footer/logos/logo-en.js +0 -8
  593. package/govgr/Logo/govgr-logo.svg +0 -1
  594. package/govgr/Logo/index.js +0 -19
  595. package/govgr/Logo/logo.d.ts +0 -2
  596. package/govgr/Logo/logo.js +0 -8
  597. package/govgr/index.js +0 -57
  598. package/hooks/useDebounce.d.ts +0 -3
  599. package/hooks/useDebounce.js +0 -63
  600. package/hooks/useLatest.d.ts +0 -3
  601. package/hooks/useLatest.js +0 -26
  602. package/hooks/useOutdatedBrowserCheck.d.ts +0 -2
  603. package/hooks/useOutdatedBrowserCheck.js +0 -60
  604. package/hooks/useSearch.d.ts +0 -4
  605. package/hooks/useSearch.js +0 -40
  606. package/hooks/useTogglableSections.d.ts +0 -18
  607. package/hooks/useTogglableSections.js +0 -108
  608. package/index.js +0 -70
  609. package/layouts/Basic/Bottom/index.js +0 -19
  610. package/layouts/Basic/Bottom/index.mdx +0 -37
  611. package/layouts/Basic/Content/index.d.ts +0 -5
  612. package/layouts/Basic/Content/index.js +0 -31
  613. package/layouts/Basic/Content/index.mdx +0 -64
  614. package/layouts/Basic/Main/index.js +0 -19
  615. package/layouts/Basic/Main/index.mdx +0 -64
  616. package/layouts/Basic/Masthead/index.js +0 -27
  617. package/layouts/Basic/Masthead/index.mdx +0 -74
  618. package/layouts/Basic/Side/index.d.ts +0 -3
  619. package/layouts/Basic/Side/index.js +0 -20
  620. package/layouts/Basic/Side/index.mdx +0 -71
  621. package/layouts/Basic/Top/index.d.ts +0 -3
  622. package/layouts/Basic/Top/index.js +0 -24
  623. package/layouts/Basic/Top/index.mdx +0 -74
  624. package/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -54
  625. package/layouts/Basic/index.js +0 -97
  626. package/layouts/Basic/index.mdx +0 -62
  627. package/layouts/Basic/index.spec.d.ts +0 -1
  628. package/layouts/Basic/index.spec.js +0 -20
  629. package/layouts/Grid/index.js +0 -18
  630. package/layouts/index.js +0 -34
  631. package/locales/el.d.ts +0 -46
  632. package/locales/el.js +0 -52
  633. package/locales/en.d.ts +0 -46
  634. package/locales/en.js +0 -52
  635. package/router/index.d.ts +0 -9
  636. package/router/index.js +0 -37
  637. package/router/index.mdx +0 -40
  638. package/test-utils/delay.d.ts +0 -2
  639. package/test-utils/delay.js +0 -45
  640. package/test-utils/mountWithTheme.d.ts +0 -3
  641. package/test-utils/mountWithTheme.js +0 -43
  642. package/themes/govgr.d.ts +0 -3
  643. package/themes/govgr.js +0 -89
  644. package/themes/grnet.d.ts +0 -2
  645. package/themes/grnet.js +0 -128
  646. package/themes/index.d.ts +0 -32
  647. package/themes/index.js +0 -19
  648. package/typography/Caption.d.ts +0 -7
  649. package/typography/Caption.js +0 -20
  650. package/typography/NormalText.d.ts +0 -5
  651. package/typography/NormalText.js +0 -19
  652. package/typography/Paragraph.d.ts +0 -6
  653. package/typography/Paragraph.js +0 -13
  654. package/typography/Title.d.ts +0 -9
  655. package/typography/Title.js +0 -63
  656. package/typography/index.js +0 -97
  657. package/typography/index.mdx +0 -32
  658. package/utils/evaluateBrowserVersion.d.ts +0 -15
  659. package/utils/evaluateBrowserVersion.js +0 -216
  660. package/utils/withDeprecation.d.ts +0 -16
  661. package/utils/withDeprecation.js +0 -116
@@ -1,13 +1,16 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  import { useContext } from 'react';
3
- import { APIContext } from '@digigov/ui/api/APIProvider';
3
+ import { APIContextData, APIContext } from '@digigov/ui/api/APIProvider';
4
+
4
5
  export * from '@digigov/ui/api/APIErrors';
5
6
  export * from '@digigov/ui/api/APIProvider';
6
7
  export * from '@digigov/ui/api/useResource';
7
8
  export * from '@digigov/ui/api/useResourceAction';
8
9
  export * from '@digigov/ui/api/useResourceQuery';
9
10
  export * from '@digigov/ui/api/fetchAPI';
10
- export var useAPI = function useAPI() {
11
+
12
+ export const useAPI = (): APIContextData => {
11
13
  return useContext(APIContext);
12
14
  };
13
- export default useAPI;
15
+
16
+ export default useAPI;
File without changes
@@ -0,0 +1,96 @@
1
+ import { getQueryKey, processResponse } from '@digigov/ui/api/utils';
2
+ import { useQuery, queryCache } from 'react-query';
3
+ import { useAPI } from '@digigov/ui/api';
4
+ import { useState } from 'react';
5
+
6
+ export type RequestResponse = {
7
+ data?: Record<string, any>;
8
+ loading?: boolean;
9
+ loaded?: boolean;
10
+ error?: Error | string | null | unknown;
11
+ invalidate: () => void;
12
+ fetch: () => void;
13
+ dataSet?: boolean | null;
14
+ url: string;
15
+ };
16
+
17
+ export function useResource(
18
+ resource: string,
19
+ id?: string | number | ((...args) => void),
20
+ query?: Record<string, any> | null | ((...args) => void),
21
+ options?: RequestInit | null,
22
+ suspense?: boolean
23
+ ): RequestResponse {
24
+ const {
25
+ config: { baseURL },
26
+ token,
27
+ } = useAPI();
28
+ const [{ url, dataSet }, setFetchOpts] = useState({
29
+ url: '',
30
+ dataSet: false,
31
+ });
32
+
33
+ async function customFetcher(fetchUrl, options) {
34
+ setFetchOpts({ url: fetchUrl, dataSet: false });
35
+ const response = await fetch(fetchUrl, options);
36
+ try {
37
+ const { data, error } = await processResponse(response);
38
+ if (error) {
39
+ return Promise.reject(error);
40
+ }
41
+ if (data) {
42
+ return Promise.resolve(data);
43
+ }
44
+ } catch (error) {
45
+ return Promise.reject(error.error);
46
+ }
47
+ }
48
+
49
+ const queryKey = getQueryKey(
50
+ resource,
51
+ id,
52
+ query,
53
+ null,
54
+ options,
55
+ 'GET',
56
+ baseURL,
57
+ token
58
+ );
59
+ let enabled = true;
60
+ let resolvedQueryKey;
61
+ if (typeof queryKey === 'function') {
62
+ try {
63
+ resolvedQueryKey = queryKey();
64
+ } catch (err) {
65
+ enabled = false;
66
+ }
67
+ }
68
+
69
+ const { status, data, error, isFetching, refetch } = useQuery(
70
+ resolvedQueryKey || queryKey,
71
+ customFetcher,
72
+ {
73
+ enabled,
74
+ refetchOnWindowFocus: false,
75
+ refetchOnMount: false,
76
+ suspense: suspense || false,
77
+ cacheTime: 300000,
78
+ staleTime: 20000,
79
+ retry: false,
80
+ useErrorBoundary: false, // falls back to suspense
81
+ }
82
+ );
83
+
84
+ return {
85
+ data,
86
+ loading: isFetching,
87
+ loaded: ['error', 'success'].includes(status),
88
+ error,
89
+ invalidate: (): void => {
90
+ queryCache.invalidateQueries(resolvedQueryKey || queryKey);
91
+ },
92
+ fetch: refetch,
93
+ dataSet,
94
+ url,
95
+ };
96
+ }
@@ -0,0 +1,80 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { RequestResponse } from '@digigov/ui/api/useResource';
3
+ import { getQueryKey, processResponse } from '@digigov/ui/api/utils';
4
+ import { useMutation } from 'react-query';
5
+ import { useAPI } from '@digigov/ui/api';
6
+
7
+ export function useResourceAction(
8
+ resource: string,
9
+ id?: (string | null | undefined) | number | ((...args: any) => void),
10
+ method = 'POST',
11
+ data?: Record<string, any> | null | ((...args: any) => void),
12
+ query?: Record<string, any> | null | ((...args: any) => void),
13
+ options?: RequestInit | null
14
+ ): RequestResponse {
15
+ const {
16
+ config: { baseURL },
17
+ token,
18
+ } = useAPI();
19
+ const [{ url, dataSet }, setFetchOpts] = useState({
20
+ url: '',
21
+ dataSet: false,
22
+ });
23
+ const [consume, setConsume] = useState(false);
24
+ async function customFetcher(...args) {
25
+ const [fetchUrl, options] = args[0];
26
+ if (options.body) {
27
+ setFetchOpts({ url: fetchUrl, dataSet: true });
28
+ } else {
29
+ setFetchOpts({ url: fetchUrl, dataSet: false });
30
+ }
31
+ const response = await fetch(fetchUrl, options);
32
+ try {
33
+ const { data } = await processResponse(response, true);
34
+ if (data) {
35
+ return Promise.resolve(data);
36
+ }
37
+ } catch (error) {
38
+ return Promise.reject(error.error);
39
+ }
40
+ }
41
+
42
+ const [mutate, { status, data: _data, error, reset }] = useMutation(
43
+ customFetcher,
44
+ {}
45
+ );
46
+ useEffect(() => {
47
+ if (consume) {
48
+ const queryKey = getQueryKey(
49
+ resource,
50
+ id,
51
+ query,
52
+ data,
53
+ options,
54
+ method,
55
+ baseURL,
56
+ token
57
+ );
58
+ if (typeof queryKey === 'function') {
59
+ mutate(queryKey());
60
+ } else {
61
+ mutate(queryKey);
62
+ }
63
+ setConsume(false);
64
+ }
65
+ }, [consume]);
66
+ return {
67
+ data: _data,
68
+ loading: status === 'loading',
69
+ loaded: ['success', 'error'].includes(status),
70
+ error,
71
+ invalidate: (): void => {
72
+ reset();
73
+ },
74
+ fetch() {
75
+ setConsume(true);
76
+ },
77
+ dataSet,
78
+ url,
79
+ };
80
+ }
@@ -0,0 +1,177 @@
1
+ import { useEffect, useMemo, useState, useCallback } from 'react';
2
+ import { getQueryKey, processResponse } from '@digigov/ui/api/utils';
3
+ import { usePaginatedQuery, QueryFunction, queryCache } from 'react-query';
4
+ import { useAPI } from '@digigov/ui/api';
5
+
6
+ const DEFAULT_PAGINATION_LIMIT = 30;
7
+ const DEFAULT_LIMIT_OPTIONS = [10, 30, 60, 100];
8
+
9
+ export function useResourceManyBase(
10
+ resource: string,
11
+ query?: Record<string, any> | null | ((...args: any) => any),
12
+ options?: RequestInit | null
13
+ ): any {
14
+ const {
15
+ config: { baseURL },
16
+ token,
17
+ } = useAPI();
18
+ const [{ url, dataSet }, setFetchOpts] = useState({
19
+ url: '',
20
+ dataSet: false,
21
+ });
22
+ const customFetcher: QueryFunction<any> = useCallback(
23
+ async (fetchUrl, options) => {
24
+ setFetchOpts({ url: fetchUrl, dataSet: false });
25
+ const response = await fetch(fetchUrl, options);
26
+ try {
27
+ const { data } = await processResponse(response, true);
28
+ if (data) {
29
+ return Promise.resolve(data);
30
+ }
31
+ } catch (error) {
32
+ return Promise.reject(error.error);
33
+ }
34
+ },
35
+ []
36
+ );
37
+ const queryKey = getQueryKey(
38
+ resource,
39
+ null,
40
+ query,
41
+ null,
42
+ options,
43
+ 'GET',
44
+ baseURL,
45
+ token
46
+ );
47
+ let enabled = true;
48
+ let resolvedQueryKey;
49
+ if (typeof queryKey === 'function') {
50
+ try {
51
+ resolvedQueryKey = queryKey();
52
+ } catch (err) {
53
+ enabled = false;
54
+ }
55
+ }
56
+
57
+ const {
58
+ resolvedData,
59
+ latestData: data,
60
+ error,
61
+ isFetching,
62
+ refetch,
63
+ } = usePaginatedQuery({
64
+ queryKey: resolvedQueryKey || queryKey,
65
+ queryFn: customFetcher,
66
+ config: {
67
+ enabled,
68
+ suspense: true,
69
+ cacheTime: 30000,
70
+ refetchOnMount: false,
71
+ },
72
+ });
73
+
74
+ return {
75
+ data: data || resolvedData,
76
+ loading: isFetching,
77
+ loaded: !!data || !!error,
78
+ error,
79
+ invalidate: (): void => {
80
+ queryCache.invalidateQueries(resolvedQueryKey || queryKey);
81
+ },
82
+ fetch: refetch,
83
+ dataSet,
84
+ url,
85
+ };
86
+ }
87
+
88
+ export type UseResourceManyResponse = {
89
+ data?: any;
90
+ meta?: {
91
+ total?: number;
92
+ count?: number;
93
+ };
94
+ page: number;
95
+ limit: number;
96
+ totalPages: number;
97
+ total: number;
98
+ limitOptions: number[];
99
+ setPage: (page: number) => void;
100
+ setLimit: (limit: number) => void;
101
+ hasNext: boolean;
102
+ hasPrevious: boolean;
103
+ };
104
+ export function useResourceMany(
105
+ resource: string,
106
+ query?: Record<string, any> | null,
107
+ options?: RequestInit | null
108
+ ): UseResourceManyResponse {
109
+ // allow developer to set a custom limit, fallback to a common value
110
+ const [limit, setLimit] = useState(
111
+ (query && query.limit) || DEFAULT_PAGINATION_LIMIT
112
+ );
113
+ const [pageParams, setPageParams] = useState({
114
+ offset: (query && query.offset) || 0,
115
+ limit,
116
+ });
117
+ // update options when limit is changed
118
+ useEffect(() => {
119
+ if (pageParams.limit !== limit) {
120
+ setPageParams({ ...pageParams, limit: limit });
121
+ }
122
+ }, [limit]);
123
+ // update user provided query with pagination params
124
+ const queryKey = JSON.stringify(query);
125
+ const pageParamsKey = JSON.stringify(pageParams);
126
+ const q = useMemo(() => {
127
+ return { ...pageParams, ...query };
128
+ }, [queryKey, pageParamsKey]);
129
+ const { data, ...rest } = useResourceManyBase(resource, q, options);
130
+ // extract data/metadata from response
131
+ const resp = data ? data.data : data;
132
+ const meta = data ? data.meta : data;
133
+ const totalPages = useMemo(
134
+ () => (data && data.meta && data.meta.total) || 1,
135
+ [data]
136
+ );
137
+ const total = useMemo(() => (data && data.meta && data.meta.count) || 0, [
138
+ data,
139
+ ]);
140
+ const limitOptions = useMemo(() => DEFAULT_LIMIT_OPTIONS, []);
141
+ const page = useMemo(() => {
142
+ const offset = parseInt(pageParams.offset) || 0;
143
+ const _limit = parseInt(`${pageParams.limit}`) || parseInt(`${limit}`);
144
+ return offset / _limit;
145
+ }, [pageParams]);
146
+ // set params to specific page
147
+ const setPage = useCallback(
148
+ (page) => {
149
+ if (page > totalPages) {
150
+ page = totalPages;
151
+ }
152
+ if (page <= 0) {
153
+ page = 0;
154
+ }
155
+ const _limit = limit || DEFAULT_PAGINATION_LIMIT;
156
+ const offset = _limit * page;
157
+ setPageParams({ offset, limit });
158
+ },
159
+ [setPageParams]
160
+ );
161
+ const hasNext = page < totalPages - 1;
162
+ const hasPrevious = page > 0;
163
+ return {
164
+ data: resp,
165
+ meta,
166
+ page,
167
+ limit,
168
+ totalPages,
169
+ total,
170
+ limitOptions,
171
+ setPage,
172
+ setLimit,
173
+ hasNext,
174
+ hasPrevious,
175
+ ...rest,
176
+ };
177
+ }
@@ -0,0 +1,156 @@
1
+ import { APIError } from '@digigov/ui/api/APIErrors';
2
+ import { ProcessedResponse } from '@digigov/ui/api/fetchAPI';
3
+ import { ArrayQueryKey } from 'react-query/types';
4
+
5
+ export async function parseErrors(response: Response): Promise<string[]> {
6
+ const errors: string[] = [];
7
+ const error = {
8
+ message: response.statusText,
9
+ code: response.status,
10
+ meta: {},
11
+ };
12
+ // do our best to resolve as more specific details for the error
13
+ try {
14
+ const json: Record<string, string> = await response.json();
15
+ error.meta = json;
16
+ // this is the way synnefo reports errors
17
+ try {
18
+ const apiErrors = Object.keys(json);
19
+ apiErrors.forEach((key) => json[key] && errors.push(json[key]));
20
+ } catch (err) {
21
+ console.error('Cannot parse json error', json);
22
+ }
23
+ } catch (err) {
24
+ try {
25
+ const text = await response.text();
26
+ error.message = text;
27
+ // error.meta.statusText = response.statusText; // keep reference to statusText
28
+ } catch (err) {}
29
+ }
30
+ return errors;
31
+ }
32
+
33
+ export async function processResponse(
34
+ response,
35
+ raiseError = false
36
+ ): Promise<ProcessedResponse> {
37
+ const status = response.status;
38
+ try {
39
+ if (!response.ok) {
40
+ const errors = await parseErrors(response);
41
+ if (raiseError) {
42
+ throw new APIError(errors, status);
43
+ }
44
+ return {
45
+ error: errors[0],
46
+ status,
47
+ };
48
+ }
49
+ const contentType = response.headers.get('content-type');
50
+ if (contentType && contentType.indexOf('application/json') !== -1) {
51
+ const data = await response.json();
52
+ return {
53
+ data,
54
+ status,
55
+ };
56
+ } else {
57
+ const data = await response.text();
58
+ return {
59
+ data,
60
+ status,
61
+ };
62
+ }
63
+ } catch (error) {
64
+ if (raiseError) {
65
+ throw new APIError([error], status);
66
+ }
67
+ return {
68
+ status,
69
+ error,
70
+ };
71
+ }
72
+ }
73
+
74
+ export function getArgs(
75
+ resource: any,
76
+ id: any,
77
+ query: any,
78
+ data: any,
79
+ options,
80
+ method,
81
+ baseURL,
82
+ token
83
+ ) {
84
+ let body, params;
85
+ if (typeof query === 'function') {
86
+ params = new URLSearchParams(query()).toString();
87
+ } else if (query) {
88
+ params = new URLSearchParams(query).toString();
89
+ }
90
+ if (typeof data === 'function') {
91
+ body = JSON.stringify(data());
92
+ } else if (data) {
93
+ body = JSON.stringify(data);
94
+ }
95
+ if (typeof id === 'function') {
96
+ id = id();
97
+ }
98
+ if (!options) {
99
+ options = {};
100
+ }
101
+ const url = `${baseURL}/${resource}${id ? `/${id}/` : ''}${
102
+ params ? `?${params}` : ''
103
+ }`;
104
+ const _options = {
105
+ headers: {
106
+ 'content-type': 'application/json',
107
+ },
108
+ body,
109
+ method,
110
+ ...options,
111
+ };
112
+ if (token) {
113
+ _options.headers.Authorization = `Token ${token}`;
114
+ }
115
+ return [url, _options];
116
+ }
117
+
118
+ export function getQueryKey(
119
+ resource: string,
120
+ id: string | number | null | undefined | ((...args: any) => void),
121
+ query: Record<string, any> | null | undefined | ((...args: any) => void),
122
+ data: Record<string, any> | null | undefined | ((...args: any) => void),
123
+ options: RequestInit | null | undefined,
124
+ method: string | null | undefined,
125
+ baseURL: string,
126
+ token: string | null | undefined
127
+ ): ArrayQueryKey | ((...args: any) => ArrayQueryKey) {
128
+ let queryKey;
129
+
130
+ if ([id, query, data].some((param) => typeof param === 'function')) {
131
+ queryKey = () => {
132
+ return getArgs(
133
+ resource,
134
+ id,
135
+ query,
136
+ data,
137
+ options,
138
+ method,
139
+ baseURL,
140
+ token
141
+ );
142
+ };
143
+ } else {
144
+ queryKey = getArgs(
145
+ resource,
146
+ id,
147
+ query,
148
+ data,
149
+ options,
150
+ method,
151
+ baseURL,
152
+ token
153
+ );
154
+ }
155
+ return queryKey;
156
+ }
@@ -0,0 +1,33 @@
1
+ import React, { Suspense } from 'react';
2
+ import CssBaseline from '@material-ui/core/CssBaseline';
3
+ import { BaseCSSProperties } from '@material-ui/core/styles/withStyles';
4
+ import { ThemeProvider, Theme, makeStyles } from '@material-ui/core/styles';
5
+
6
+ export const useAppStyles = makeStyles({
7
+ root: {},
8
+ });
9
+
10
+ export interface AppProps {
11
+ theme: Theme;
12
+ children?: React.ReactNode;
13
+ classes?: { root: BaseCSSProperties };
14
+ }
15
+
16
+ const App: React.FC<AppProps> = ({ theme, children }) => {
17
+ return (
18
+ <ThemeProvider theme={theme}>
19
+ <Suspense fallback={'loading...'}>{children}</Suspense>
20
+ </ThemeProvider>
21
+ );
22
+ };
23
+
24
+ export const StaticApp: React.FC<AppProps> = ({ theme, children }) => {
25
+ return (
26
+ <ThemeProvider theme={theme}>
27
+ <CssBaseline />
28
+ {children}
29
+ </ThemeProvider>
30
+ );
31
+ };
32
+
33
+ export default App;
@@ -1,17 +1,19 @@
1
1
  import CoreHeaderLogo from '@digigov/react-core/HeaderLogo';
2
2
  import withDeprecation from '@digigov/ui/utils/withDeprecation';
3
- export var HeaderLogo = withDeprecation(CoreHeaderLogo, {
3
+
4
+ export const HeaderLogo = withDeprecation(CoreHeaderLogo, {
4
5
  name: 'HeaderLogo',
5
6
  props: {
6
7
  height: {
7
- warning: true
8
+ warning: true,
8
9
  },
9
10
  linkprops: {
10
- warning: true
11
+ warning: true,
11
12
  },
12
13
  label: {
13
- warning: true
14
- }
15
- }
14
+ warning: true,
15
+ },
16
+ },
16
17
  });
17
- export default HeaderLogo;
18
+
19
+ export default HeaderLogo;
@@ -0,0 +1,13 @@
1
+ import CoreHeaderSection, {
2
+ HeaderSectionProps as CoreHeaderSectionProps,
3
+ } from '@digigov/react-core/HeaderSection';
4
+ import withDeprecation from '@digigov/ui/utils/withDeprecation';
5
+
6
+ export type HeaderSectionProps = CoreHeaderSectionProps;
7
+
8
+ export const HeaderSection = withDeprecation(CoreHeaderSection, {
9
+ name: 'HeaderSection',
10
+ rename: 'HeaderSection',
11
+ });
12
+
13
+ export default HeaderSection;
@@ -0,0 +1,24 @@
1
+ import CoreHeaderTitle, {
2
+ HeaderTitleProps as CoreHeaderTitleProps,
3
+ } from '@digigov/react-core/HeaderTitle';
4
+ import withDeprecation from '@digigov/ui/utils/withDeprecation';
5
+
6
+ export type HeaderTitleProps = CoreHeaderTitleProps;
7
+
8
+ export const HeaderTitle = withDeprecation(CoreHeaderTitle, {
9
+ name: 'Header',
10
+ props: {
11
+ xs: {
12
+ error: true,
13
+ },
14
+ linkProps: {
15
+ error:
16
+ 'The `linkProps` property is deprecated. You can use native anchor link props instead.',
17
+ },
18
+ linkComponent: {
19
+ error: 'The `linkComponent` property is deprecated.',
20
+ },
21
+ },
22
+ });
23
+
24
+ export default HeaderTitle;
File without changes
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import mountWithTheme from '@digigov/ui/test-utils/mountWithTheme';
4
+
5
+ import logo from '../../govgr/Logo/govgr-logo.svg';
6
+ import Header, {
7
+ HeaderTitle,
8
+ HeaderSubtitle,
9
+ HeaderLogo,
10
+ } from '@digigov/ui/app/Header';
11
+
12
+ it('renders the header with logo, title and subtitle ', () => {
13
+ expect(
14
+ mountWithTheme(
15
+ <Header>
16
+ <HeaderLogo src={logo} href="https://gov.gr" />
17
+ <HeaderTitle href="/some-url">A title</HeaderTitle>
18
+ <HeaderSubtitle>A subtitle</HeaderSubtitle>
19
+ </Header>
20
+ )
21
+ ).toMatchSnapshot();
22
+ });
23
+
24
+ it('renders the HeaderTitle component', () => {
25
+ expect(mount(<HeaderTitle>A title</HeaderTitle>)).toMatchSnapshot();
26
+ });
27
+
28
+ it('renders the HeaderTitle component with custom href', () => {
29
+ expect(
30
+ mount(<HeaderTitle href={'/somelink'}>A title</HeaderTitle>)
31
+ ).toMatchSnapshot();
32
+ });
@@ -1,13 +1,19 @@
1
- import CoreHeader from '@digigov/react-core/Header';
1
+ import CoreHeader, {
2
+ HeaderProps as CoreHeaderProps,
3
+ } from '@digigov/react-core/Header';
2
4
  import withDeprecation from '@digigov/ui/utils/withDeprecation';
3
- export var Header = withDeprecation(CoreHeader, {
5
+
6
+ export type HeaderProps = CoreHeaderProps;
7
+
8
+ export const Header = withDeprecation(CoreHeader, {
4
9
  name: 'Header',
5
- props: {}
10
+ props: {},
6
11
  });
12
+
7
13
  export * from '@digigov/ui/app/Header/HeaderTitle';
8
14
  export * from '@digigov/ui/app/Header/HeaderLogo';
9
15
  export * from '@digigov/ui/app/Header/HeaderSection';
10
16
  export * from '@digigov/react-core/HeaderContent';
11
17
  export * from '@digigov/react-core/HeaderSecondaryLogo';
12
18
  export * from '@digigov/react-core/HeaderSubtitle';
13
- export default Header;
19
+ export default Header;