@stack-spot/portal-components 2.26.0 → 2.27.1

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 (243) hide show
  1. package/CHANGELOG.md +628 -614
  2. package/dist/components/AnimatedHeight.d.ts +1 -1
  3. package/dist/components/AnimatedHeight.js +26 -26
  4. package/dist/components/AsyncContent.d.ts +1 -1
  5. package/dist/components/AsyncContent.js +1 -1
  6. package/dist/components/BannerWarning.d.ts +1 -1
  7. package/dist/components/BannerWarning.js +1 -1
  8. package/dist/components/Breadcrumb/index.d.ts +2 -2
  9. package/dist/components/Breadcrumb/index.js +1 -1
  10. package/dist/components/Breadcrumb/styled.js +31 -31
  11. package/dist/components/ButtonLoading.d.ts +1 -1
  12. package/dist/components/ButtonLoading.js +1 -1
  13. package/dist/components/ChatBot.d.ts +1 -1
  14. package/dist/components/ChatBot.js +1 -1
  15. package/dist/components/ContentValidateFilter.d.ts +1 -1
  16. package/dist/components/ContentValidateFilter.js +1 -1
  17. package/dist/components/FadingOverflow.d.ts +1 -1
  18. package/dist/components/FadingOverflow.js +69 -69
  19. package/dist/components/FileTreeView/More.d.ts +1 -1
  20. package/dist/components/FileTreeView/More.js +1 -1
  21. package/dist/components/FileTreeView/index.d.ts +1 -1
  22. package/dist/components/FileTreeView/index.js +1 -1
  23. package/dist/components/InfiniteScroll.d.ts +1 -1
  24. package/dist/components/InfiniteScroll.js +1 -1
  25. package/dist/components/InfoMaintenanceBanner.d.ts +1 -1
  26. package/dist/components/InfoMaintenanceBanner.js +2 -2
  27. package/dist/components/LazyMarkdown/BlockquoteMd.d.ts +1 -1
  28. package/dist/components/LazyMarkdown/BlockquoteMd.js +1 -1
  29. package/dist/components/LazyMarkdown/CodeViewer.d.ts +1 -1
  30. package/dist/components/LazyMarkdown/CodeViewer.js +76 -76
  31. package/dist/components/LazyMarkdown/Markdown.d.ts +1 -1
  32. package/dist/components/LazyMarkdown/Markdown.js +1 -1
  33. package/dist/components/LazyMarkdown/MarkdownButton.d.ts +1 -1
  34. package/dist/components/LazyMarkdown/MarkdownButton.js +1 -1
  35. package/dist/components/LazyMarkdown/Video.d.ts +1 -1
  36. package/dist/components/LazyMarkdown/Video.js +1 -1
  37. package/dist/components/LazyMarkdown/index.d.ts +1 -1
  38. package/dist/components/LazyMarkdown/index.js +1 -1
  39. package/dist/components/Placeholder.d.ts +3 -3
  40. package/dist/components/Placeholder.js +1 -1
  41. package/dist/components/ScrollView.js +16 -16
  42. package/dist/components/Select/BadgeItem.d.ts +1 -1
  43. package/dist/components/Select/BadgeItem.js +1 -1
  44. package/dist/components/Select/ClearInput.d.ts +1 -1
  45. package/dist/components/Select/ClearInput.js +1 -1
  46. package/dist/components/Select/CloseItem.d.ts +1 -1
  47. package/dist/components/Select/CloseItem.js +1 -1
  48. package/dist/components/Select/CreatableSelect.js +1 -1
  49. package/dist/components/Select/CustomMenu.d.ts +1 -1
  50. package/dist/components/Select/CustomMenu.js +1 -1
  51. package/dist/components/Select/LabelItem.d.ts +1 -1
  52. package/dist/components/Select/LabelItem.js +1 -1
  53. package/dist/components/Select/MultiValue.d.ts +1 -1
  54. package/dist/components/Select/MultiValue.js +1 -1
  55. package/dist/components/Select/SelectInfiniteScroll.d.ts +1 -1
  56. package/dist/components/Select/SelectInfiniteScroll.js +1 -1
  57. package/dist/components/Select/SelectSearch.d.ts +1 -1
  58. package/dist/components/Select/SelectSearch.js +1 -1
  59. package/dist/components/SelectionList.d.ts +1 -1
  60. package/dist/components/SelectionList.js +61 -61
  61. package/dist/components/StatusCircle.d.ts +1 -1
  62. package/dist/components/StatusCircle.js +6 -6
  63. package/dist/components/Stepper/Navigation.js +4 -4
  64. package/dist/components/Stepper/Step.js +3 -3
  65. package/dist/components/Stepper/Stepper.js +6 -6
  66. package/dist/components/Stepper/headers.js +22 -22
  67. package/dist/components/Table/HeaderItem.js +1 -1
  68. package/dist/components/Table/SettingsVerticalMenu.d.ts +1 -1
  69. package/dist/components/Table/SettingsVerticalMenu.js +1 -1
  70. package/dist/components/Table/StyledLinkTable.d.ts +1 -1
  71. package/dist/components/Table/StyledLinkTable.js +5 -5
  72. package/dist/components/Table/TableData.d.ts +1 -1
  73. package/dist/components/Table/TableData.js +25 -25
  74. package/dist/components/TimelineSection.d.ts +1 -1
  75. package/dist/components/TimelineSection.js +14 -14
  76. package/dist/components/error/ErrorFeedback.d.ts +1 -1
  77. package/dist/components/error/ErrorFeedback.js +35 -35
  78. package/dist/components/error/NotFound.d.ts +1 -1
  79. package/dist/components/error/NotFound.js +1 -1
  80. package/dist/components/error/UnderMaintenance.d.ts +1 -1
  81. package/dist/components/error/UnderMaintenance.js +1 -1
  82. package/dist/components/form/Form/Form.d.ts +1 -1
  83. package/dist/components/form/Form/Form.js +1 -1
  84. package/dist/components/form/Form/FormGroup.d.ts +2 -2
  85. package/dist/components/form/Form/FormGroup.js +1 -1
  86. package/dist/components/form/SearchInput.d.ts +1 -1
  87. package/dist/components/form/SearchInput.js +1 -1
  88. package/dist/components/form/Select/CustomSelect.d.ts +1 -1
  89. package/dist/components/form/Select/CustomSelect.js +1 -1
  90. package/dist/components/form/Select/DetailedSelect.d.ts +1 -1
  91. package/dist/components/form/Select/DetailedSelect.js +1 -1
  92. package/dist/components/form/Select/Select.d.ts +1 -1
  93. package/dist/components/form/Select/Select.js +1 -1
  94. package/dist/components/form/Select/styled.js +161 -161
  95. package/dist/components/form/Select/utils.js +1 -1
  96. package/dist/components/notification/NotificationComponent.d.ts +1 -1
  97. package/dist/components/notification/NotificationComponent.js +54 -54
  98. package/dist/components/notification/NotificationItem.d.ts +1 -1
  99. package/dist/components/notification/NotificationItem.d.ts.map +1 -1
  100. package/dist/components/notification/NotificationItem.js +4 -4
  101. package/dist/components/notification/NotificationItem.js.map +1 -1
  102. package/dist/components/notification/NotificationList.d.ts +1 -1
  103. package/dist/components/notification/NotificationList.js +43 -43
  104. package/dist/components/notification/NotificationPlaceholder.d.ts +1 -1
  105. package/dist/components/notification/NotificationPlaceholder.js +9 -9
  106. package/dist/components/notification/NotificationPlaceholder.js.map +1 -1
  107. package/dist/containers/NotificationsPage.d.ts +1 -1
  108. package/dist/containers/NotificationsPage.d.ts.map +1 -1
  109. package/dist/containers/NotificationsPage.js +24 -11
  110. package/dist/containers/NotificationsPage.js.map +1 -1
  111. package/dist/context/anchor.d.ts +1 -1
  112. package/dist/context/anchor.js +1 -1
  113. package/dist/context/loading.d.ts +1 -1
  114. package/dist/context/loading.js +1 -1
  115. package/dist/context/notification/context.d.ts +1 -1
  116. package/dist/context/notification/context.js +1 -1
  117. package/dist/context/notification/types.d.ts +1 -0
  118. package/dist/context/notification/types.d.ts.map +1 -1
  119. package/dist/hooks/date.js +1 -1
  120. package/dist/hooks/service-now.js +28 -28
  121. package/dist/svg/AI.d.ts +1 -1
  122. package/dist/svg/AI.js +1 -1
  123. package/dist/svg/CS.d.ts +1 -1
  124. package/dist/svg/CS.js +1 -1
  125. package/dist/svg/EDP.d.ts +1 -1
  126. package/dist/svg/EDP.js +1 -1
  127. package/dist/svg/Forbidden.d.ts +1 -1
  128. package/dist/svg/Forbidden.js +1 -1
  129. package/dist/svg/GenericPlaceholder.d.ts +1 -1
  130. package/dist/svg/GenericPlaceholder.js +1 -1
  131. package/dist/svg/HUB.d.ts +1 -1
  132. package/dist/svg/HUB.js +1 -1
  133. package/dist/svg/Logo.d.ts +1 -1
  134. package/dist/svg/Logo.js +1 -1
  135. package/dist/svg/MiniLogo.d.ts +1 -1
  136. package/dist/svg/MiniLogo.js +1 -1
  137. package/dist/svg/NotFound.d.ts +1 -1
  138. package/dist/svg/NotFound.js +1 -1
  139. package/dist/svg/ServerError.d.ts +1 -1
  140. package/dist/svg/ServerError.js +1 -1
  141. package/dist/svg/Unauthenticated.d.ts +1 -1
  142. package/dist/svg/Unauthenticated.js +1 -1
  143. package/package.json +80 -80
  144. package/readme.md +66 -66
  145. package/src/components/AnimatedHeight.tsx +174 -174
  146. package/src/components/AsyncContent.tsx +78 -78
  147. package/src/components/BannerWarning.tsx +91 -91
  148. package/src/components/Breadcrumb/index.tsx +76 -76
  149. package/src/components/Breadcrumb/styled.ts +37 -37
  150. package/src/components/ButtonLoading.tsx +29 -29
  151. package/src/components/ChatBot.tsx +82 -82
  152. package/src/components/ContentValidateFilter.tsx +15 -15
  153. package/src/components/FadingOverflow.tsx +265 -265
  154. package/src/components/FileTreeView/More.tsx +114 -114
  155. package/src/components/FileTreeView/index.tsx +186 -186
  156. package/src/components/InfiniteScroll.tsx +24 -24
  157. package/src/components/InfoMaintenanceBanner.tsx +29 -29
  158. package/src/components/LazyMarkdown/BlockquoteMd.tsx +107 -107
  159. package/src/components/LazyMarkdown/CodeViewer.tsx +161 -161
  160. package/src/components/LazyMarkdown/Markdown.tsx +122 -122
  161. package/src/components/LazyMarkdown/MarkdownButton.tsx +24 -24
  162. package/src/components/LazyMarkdown/Video.tsx +13 -13
  163. package/src/components/LazyMarkdown/index.tsx +21 -21
  164. package/src/components/Placeholder.tsx +118 -118
  165. package/src/components/ScrollView.tsx +57 -57
  166. package/src/components/Select/BadgeItem.tsx +58 -58
  167. package/src/components/Select/ClearInput.tsx +24 -24
  168. package/src/components/Select/CloseItem.tsx +38 -38
  169. package/src/components/Select/CreatableSelect.tsx +155 -155
  170. package/src/components/Select/CustomMenu.tsx +16 -16
  171. package/src/components/Select/LabelItem.tsx +8 -8
  172. package/src/components/Select/MultiValue.tsx +49 -49
  173. package/src/components/Select/SelectInfiniteScroll.tsx +82 -82
  174. package/src/components/Select/SelectSearch.tsx +195 -195
  175. package/src/components/Select/index.tsx +7 -7
  176. package/src/components/Select/types.ts +8 -8
  177. package/src/components/SelectionList.tsx +427 -427
  178. package/src/components/StatusCircle.tsx +67 -67
  179. package/src/components/Stepper/Navigation.tsx +97 -97
  180. package/src/components/Stepper/Step.tsx +30 -30
  181. package/src/components/Stepper/Stepper.tsx +113 -113
  182. package/src/components/Stepper/headers.tsx +64 -64
  183. package/src/components/Stepper/index.ts +3 -3
  184. package/src/components/Table/HeaderItem.tsx +52 -52
  185. package/src/components/Table/SettingsVerticalMenu.tsx +50 -50
  186. package/src/components/Table/StyledLinkTable.tsx +22 -22
  187. package/src/components/Table/TableData.tsx +251 -251
  188. package/src/components/Table/index.tsx +2 -2
  189. package/src/components/TimelineSection.tsx +66 -66
  190. package/src/components/error/ErrorFeedback.tsx +217 -217
  191. package/src/components/error/NotFound.tsx +24 -24
  192. package/src/components/error/UnderMaintenance.tsx +30 -30
  193. package/src/components/error/index.ts +4 -4
  194. package/src/components/form/Form/Form.tsx +101 -101
  195. package/src/components/form/Form/FormGroup.tsx +221 -221
  196. package/src/components/form/Form/index.ts +2 -2
  197. package/src/components/form/SearchInput.tsx +69 -69
  198. package/src/components/form/Select/CustomSelect.tsx +232 -232
  199. package/src/components/form/Select/DetailedSelect.tsx +85 -85
  200. package/src/components/form/Select/Select.tsx +67 -67
  201. package/src/components/form/Select/index.ts +4 -4
  202. package/src/components/form/Select/styled.ts +165 -165
  203. package/src/components/form/Select/types.ts +112 -112
  204. package/src/components/form/Select/utils.tsx +28 -28
  205. package/src/components/notification/NotificationComponent.tsx +340 -340
  206. package/src/components/notification/NotificationItem.tsx +337 -336
  207. package/src/components/notification/NotificationList.tsx +178 -178
  208. package/src/components/notification/NotificationPlaceholder.tsx +43 -43
  209. package/src/components/notification/types.ts +72 -72
  210. package/src/containers/NotificationsPage.tsx +119 -98
  211. package/src/context/anchor.tsx +37 -37
  212. package/src/context/loading.tsx +36 -36
  213. package/src/context/notification/LazyNotificationList.ts +103 -103
  214. package/src/context/notification/NotificationController.ts +104 -104
  215. package/src/context/notification/context.tsx +23 -23
  216. package/src/context/notification/hooks.ts +98 -98
  217. package/src/context/notification/types.ts +66 -65
  218. package/src/hooks/date.ts +31 -31
  219. package/src/hooks/keyboard.tsx +128 -128
  220. package/src/hooks/manual-render.tsx +10 -10
  221. package/src/hooks/service-now.tsx +233 -233
  222. package/src/hooks/text.tsx +30 -30
  223. package/src/hooks/title.tsx +28 -28
  224. package/src/hooks/use-effect-once.tsx +43 -43
  225. package/src/index.ts +19 -19
  226. package/src/notifications.ts +11 -11
  227. package/src/svg/AI.tsx +41 -41
  228. package/src/svg/CS.tsx +48 -48
  229. package/src/svg/EDP.tsx +31 -31
  230. package/src/svg/Forbidden.tsx +22 -22
  231. package/src/svg/GenericPlaceholder.tsx +20 -20
  232. package/src/svg/HUB.tsx +48 -48
  233. package/src/svg/Logo.tsx +16 -16
  234. package/src/svg/MiniLogo.tsx +12 -12
  235. package/src/svg/NotFound.tsx +16 -16
  236. package/src/svg/ServerError.tsx +33 -33
  237. package/src/svg/Unauthenticated.tsx +16 -16
  238. package/src/svg/index.ts +11 -11
  239. package/src/utils/accessibility.ts +135 -135
  240. package/src/utils/cookie.ts +73 -73
  241. package/src/utils/promise.ts +5 -5
  242. package/src/utils/read-file.ts +16 -16
  243. package/tsconfig.json +10 -10
@@ -1,16 +1,16 @@
1
- import { ReactNode } from 'react'
2
- import { components, GroupBase, MenuProps } from 'react-select'
3
-
4
- interface CustomMenuProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>>
5
- extends MenuProps<Option, IsMulti, Group> {
6
- afterList?: ReactNode,
7
- }
8
-
9
- export const CustomMenu = <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(
10
- props: CustomMenuProps<Option, IsMulti, Group>,
11
- ) => (
12
- <components.Menu {...props}>
13
- {props.children}
14
- {props.afterList && <>{props.afterList}</>}
15
- </components.Menu>
16
- )
1
+ import { ReactNode } from 'react'
2
+ import { components, GroupBase, MenuProps } from 'react-select'
3
+
4
+ interface CustomMenuProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>>
5
+ extends MenuProps<Option, IsMulti, Group> {
6
+ afterList?: ReactNode,
7
+ }
8
+
9
+ export const CustomMenu = <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(
10
+ props: CustomMenuProps<Option, IsMulti, Group>,
11
+ ) => (
12
+ <components.Menu {...props}>
13
+ {props.children}
14
+ {props.afterList && <>{props.afterList}</>}
15
+ </components.Menu>
16
+ )
@@ -1,8 +1,8 @@
1
- import { Box, Text } from '@citric/core'
2
- import { MultiValueGenericProps } from 'react-select'
3
-
4
- export const LabelItem = (props: MultiValueGenericProps<any>) => (
5
- <Box>
6
- <Text>{props.data.label}</Text>
7
- </Box>
8
- )
1
+ import { Box, Text } from '@citric/core'
2
+ import { MultiValueGenericProps } from 'react-select'
3
+
4
+ export const LabelItem = (props: MultiValueGenericProps<any>) => (
5
+ <Box>
6
+ <Text>{props.data.label}</Text>
7
+ </Box>
8
+ )
@@ -1,49 +1,49 @@
1
- import { SxProperties } from '@citric/core/dist/sx'
2
- import { TimesMini } from '@citric/icons'
3
- import { Badge, IconButton } from '@citric/ui'
4
- import { Dictionary, interpolate, useTranslate } from '@stack-spot/portal-translate'
5
- import { MultiValueProps, components } from 'react-select'
6
-
7
- export const MultiValue = (props: MultiValueProps) => {
8
- const t = useTranslate(dictionary)
9
- return (
10
- <>
11
- <components.MultiValue {...props}>
12
- <Badge appearance="square" className="badge" palette="cyan" sx={
13
- {
14
- mr: 0,
15
- my: 0,
16
- '.badge-citric-container:not(:has(> button:first-child))': {
17
- marginRight: 0,
18
- },
19
- } as SxProperties}
20
- afterElement={
21
- <components.MultiValueRemove {...props}>
22
- <IconButton
23
- type="button"
24
- aria-label={interpolate(t.ariaLabelRemoveItemButton, props.children)}
25
- appearance="square"
26
- colorIcon="cyan.800"
27
- onClick={(e: React.MouseEvent<HTMLElement, MouseEvent>) => {
28
- e.stopPropagation()
29
- props.removeProps?.onClick?.(e as React.MouseEvent<HTMLDivElement, MouseEvent>)
30
- }}>
31
- <TimesMini />
32
- </IconButton>
33
- </components.MultiValueRemove>
34
- }>
35
- {props.children}
36
- </Badge>
37
- </components.MultiValue>
38
- </>
39
- )
40
- }
41
-
42
- const dictionary = {
43
- en: {
44
- ariaLabelRemoveItemButton: 'Remove item $0',
45
- },
46
- pt: {
47
- ariaLabelRemoveItemButton: 'Remover item $0',
48
- },
49
- } satisfies Dictionary
1
+ import { SxProperties } from '@citric/core/dist/sx'
2
+ import { TimesMini } from '@citric/icons'
3
+ import { Badge, IconButton } from '@citric/ui'
4
+ import { Dictionary, interpolate, useTranslate } from '@stack-spot/portal-translate'
5
+ import { MultiValueProps, components } from 'react-select'
6
+
7
+ export const MultiValue = (props: MultiValueProps) => {
8
+ const t = useTranslate(dictionary)
9
+ return (
10
+ <>
11
+ <components.MultiValue {...props}>
12
+ <Badge appearance="square" className="badge" palette="cyan" sx={
13
+ {
14
+ mr: 0,
15
+ my: 0,
16
+ '.badge-citric-container:not(:has(> button:first-child))': {
17
+ marginRight: 0,
18
+ },
19
+ } as SxProperties}
20
+ afterElement={
21
+ <components.MultiValueRemove {...props}>
22
+ <IconButton
23
+ type="button"
24
+ aria-label={interpolate(t.ariaLabelRemoveItemButton, props.children)}
25
+ appearance="square"
26
+ colorIcon="cyan.800"
27
+ onClick={(e: React.MouseEvent<HTMLElement, MouseEvent>) => {
28
+ e.stopPropagation()
29
+ props.removeProps?.onClick?.(e as React.MouseEvent<HTMLDivElement, MouseEvent>)
30
+ }}>
31
+ <TimesMini />
32
+ </IconButton>
33
+ </components.MultiValueRemove>
34
+ }>
35
+ {props.children}
36
+ </Badge>
37
+ </components.MultiValue>
38
+ </>
39
+ )
40
+ }
41
+
42
+ const dictionary = {
43
+ en: {
44
+ ariaLabelRemoveItemButton: 'Remove item $0',
45
+ },
46
+ pt: {
47
+ ariaLabelRemoveItemButton: 'Remover item $0',
48
+ },
49
+ } satisfies Dictionary
@@ -1,82 +1,82 @@
1
- import { IconBox } from '@citric/core'
2
- import { LoadingCircular } from '@citric/ui'
3
- import InfiniteScroll from 'react-infinite-scroll-component'
4
- import { components, GroupBase, MenuListProps } from 'react-select'
5
- import { SelectSearch, SelectSearchProps } from './SelectSearch'
6
-
7
- interface CustomMenuListProps {
8
- loadMore: () => void,
9
- hasMore: boolean,
10
- }
11
-
12
- const MenuList = <
13
- OptionType,
14
- IsMulti extends boolean = false,
15
- Group extends GroupBase<OptionType> = GroupBase<OptionType>
16
- >(props: MenuListProps<OptionType, IsMulti, Group>) => {
17
- const { children, selectProps } = props
18
- const { loadMore, hasMore, options, isLoadingMore } = selectProps as typeof selectProps &
19
- CustomMenuListProps & { isLoadingMore?: boolean }
20
-
21
- return (
22
- <InfiniteScroll
23
- dataLength={options.length}
24
- next={loadMore}
25
- hasMore={hasMore}
26
- scrollableTarget="list-item"
27
- scrollThreshold={0.8}
28
- loader={isLoadingMore ? <IconBox w={12} colorBg="light.300" sx={{ alignItems: 'center', justifyContent: 'center' }}>
29
- <LoadingCircular />
30
- </IconBox> : null}
31
- style={{ overflow: 'hidden' }}
32
- >
33
- <components.MenuList {...props} innerProps={{ ...props.innerProps, id: 'list-item' }}>{children}</components.MenuList>
34
- </InfiniteScroll>
35
- )
36
- }
37
-
38
- type Option = { value: string, label: string }
39
-
40
- export interface SelectInfiniteScrollProps extends SelectSearchProps {
41
- options: Option[],
42
- loadMore: () => void,
43
- hasMore: boolean,
44
- isLoadingMore?: boolean,
45
- }
46
-
47
- export const SelectInfiniteScroll = ({
48
- options,
49
- loadMore,
50
- hasMore,
51
- isLoadingMore,
52
- ...props
53
- }: SelectInfiniteScrollProps) => (
54
- <SelectSearch
55
- components={{ MenuList }}
56
- options={options}
57
- closeMenuOnSelect={false}
58
- styles={{
59
- control: () => ({
60
- minHeight: '2.5rem',
61
- height: 'auto',
62
- }),
63
- menu: () => ({
64
- position: 'absolute',
65
- }),
66
- menuList: (base) => ({
67
- ...base,
68
- maxHeight: 300,
69
- overflowY: 'auto',
70
- }),
71
- input: () => ({
72
- position: 'relative',
73
- }),
74
- }}
75
- // @ts-ignore: Essas props não existem no tipo, mas são acessíveis via selectProps no MenuList
76
- loadMore={loadMore}
77
- hasMore={hasMore}
78
- isLoadingMore={isLoadingMore}
79
- {...props}
80
- />
81
- )
82
-
1
+ import { IconBox } from '@citric/core'
2
+ import { LoadingCircular } from '@citric/ui'
3
+ import InfiniteScroll from 'react-infinite-scroll-component'
4
+ import { components, GroupBase, MenuListProps } from 'react-select'
5
+ import { SelectSearch, SelectSearchProps } from './SelectSearch'
6
+
7
+ interface CustomMenuListProps {
8
+ loadMore: () => void,
9
+ hasMore: boolean,
10
+ }
11
+
12
+ const MenuList = <
13
+ OptionType,
14
+ IsMulti extends boolean = false,
15
+ Group extends GroupBase<OptionType> = GroupBase<OptionType>
16
+ >(props: MenuListProps<OptionType, IsMulti, Group>) => {
17
+ const { children, selectProps } = props
18
+ const { loadMore, hasMore, options, isLoadingMore } = selectProps as typeof selectProps &
19
+ CustomMenuListProps & { isLoadingMore?: boolean }
20
+
21
+ return (
22
+ <InfiniteScroll
23
+ dataLength={options.length}
24
+ next={loadMore}
25
+ hasMore={hasMore}
26
+ scrollableTarget="list-item"
27
+ scrollThreshold={0.8}
28
+ loader={isLoadingMore ? <IconBox w={12} colorBg="light.300" sx={{ alignItems: 'center', justifyContent: 'center' }}>
29
+ <LoadingCircular />
30
+ </IconBox> : null}
31
+ style={{ overflow: 'hidden' }}
32
+ >
33
+ <components.MenuList {...props} innerProps={{ ...props.innerProps, id: 'list-item' }}>{children}</components.MenuList>
34
+ </InfiniteScroll>
35
+ )
36
+ }
37
+
38
+ type Option = { value: string, label: string }
39
+
40
+ export interface SelectInfiniteScrollProps extends SelectSearchProps {
41
+ options: Option[],
42
+ loadMore: () => void,
43
+ hasMore: boolean,
44
+ isLoadingMore?: boolean,
45
+ }
46
+
47
+ export const SelectInfiniteScroll = ({
48
+ options,
49
+ loadMore,
50
+ hasMore,
51
+ isLoadingMore,
52
+ ...props
53
+ }: SelectInfiniteScrollProps) => (
54
+ <SelectSearch
55
+ components={{ MenuList }}
56
+ options={options}
57
+ closeMenuOnSelect={false}
58
+ styles={{
59
+ control: () => ({
60
+ minHeight: '2.5rem',
61
+ height: 'auto',
62
+ }),
63
+ menu: () => ({
64
+ position: 'absolute',
65
+ }),
66
+ menuList: (base) => ({
67
+ ...base,
68
+ maxHeight: 300,
69
+ overflowY: 'auto',
70
+ }),
71
+ input: () => ({
72
+ position: 'relative',
73
+ }),
74
+ }}
75
+ // @ts-ignore: Essas props não existem no tipo, mas são acessíveis via selectProps no MenuList
76
+ loadMore={loadMore}
77
+ hasMore={hasMore}
78
+ isLoadingMore={isLoadingMore}
79
+ {...props}
80
+ />
81
+ )
82
+