@postgres.ai/shared 3.5.1-pr-1027.0

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 (202) hide show
  1. package/.gitlab-ci.yml +60 -0
  2. package/components/AlertSnackbar/index.tsx +23 -0
  3. package/components/AlertSnackbar/useAlertSnackbar.tsx +65 -0
  4. package/components/Button/index.tsx +79 -0
  5. package/components/Button2/index.tsx +43 -0
  6. package/components/Button2/styles.module.scss +82 -0
  7. package/components/DestroyCloneModal/index.tsx +56 -0
  8. package/components/DestroyCloneRestrictionModal/index.tsx +50 -0
  9. package/components/ErrorStub/index.tsx +83 -0
  10. package/components/FormattedText/index.tsx +44 -0
  11. package/components/FormattedText/styles.module.scss +34 -0
  12. package/components/GatewayLink/index.tsx +33 -0
  13. package/components/HorizontalScrollContainer/index.tsx +131 -0
  14. package/components/HorizontalScrollContainer/types.ts +12 -0
  15. package/components/HorizontalScrollContainer/utils.ts +16 -0
  16. package/components/ImportantText/index.tsx +29 -0
  17. package/components/Link2/index.tsx +31 -0
  18. package/components/Link2/styles.module.scss +12 -0
  19. package/components/MenuButton/index.tsx +80 -0
  20. package/components/MenuButton/styles.module.scss +42 -0
  21. package/components/Modal/index.tsx +93 -0
  22. package/components/PageSpinner/index.tsx +18 -0
  23. package/components/PageSpinner/styles.module.scss +13 -0
  24. package/components/ResetCloneModal/index.tsx +154 -0
  25. package/components/SectionTitle/index.tsx +74 -0
  26. package/components/Select/index.tsx +42 -0
  27. package/components/SimpleModalControls/index.tsx +56 -0
  28. package/components/Spinner/icon.tsx +29 -0
  29. package/components/Spinner/index.tsx +16 -0
  30. package/components/Spinner/styles.module.scss +33 -0
  31. package/components/Status/index.tsx +61 -0
  32. package/components/Status/styles.module.scss +45 -0
  33. package/components/StubContainer/index.tsx +41 -0
  34. package/components/StubSpinner/index.tsx +49 -0
  35. package/components/StubSpinnerFlex/index.tsx +20 -0
  36. package/components/StubSpinnerFlex/styles.module.scss +20 -0
  37. package/components/SyntaxHighlight/index.tsx +107 -0
  38. package/components/Table/RowMenu/index.tsx +111 -0
  39. package/components/Table/index.tsx +140 -0
  40. package/components/Text/index.tsx +28 -0
  41. package/components/TextField/index.tsx +117 -0
  42. package/components/Tooltip/index.tsx +52 -0
  43. package/config/index.ts +32 -0
  44. package/config/links.ts +6 -0
  45. package/craco.config.js +80 -0
  46. package/helpers/getEntropy.ts +232 -0
  47. package/helpers/localStorage.ts +15 -0
  48. package/helpers/request.ts +47 -0
  49. package/hooks/useWindowDimensions.ts +16 -0
  50. package/icons/ArrowDropDown/index.tsx +29 -0
  51. package/icons/Circle/index.tsx +27 -0
  52. package/icons/External/index.tsx +14 -0
  53. package/icons/Info/index.tsx +12 -0
  54. package/icons/Renewable/index.tsx +65 -0
  55. package/icons/Shield/index.tsx +33 -0
  56. package/icons/Warning/index.tsx +29 -0
  57. package/meta.json +1 -0
  58. package/package.json +55 -0
  59. package/pages/Clone/Status/index.tsx +73 -0
  60. package/pages/Clone/context.ts +22 -0
  61. package/pages/Clone/index.tsx +634 -0
  62. package/pages/Clone/stores/Main.ts +206 -0
  63. package/pages/Clone/useCreatedStores.ts +11 -0
  64. package/pages/Configuration/Header/index.tsx +84 -0
  65. package/pages/Configuration/InputWithTooltip/index.tsx +240 -0
  66. package/pages/Configuration/ResponseMessage/index.tsx +71 -0
  67. package/pages/Configuration/configOptions.ts +60 -0
  68. package/pages/Configuration/index.tsx +1184 -0
  69. package/pages/Configuration/styles.module.scss +122 -0
  70. package/pages/Configuration/tooltipText.tsx +157 -0
  71. package/pages/Configuration/useForm.ts +108 -0
  72. package/pages/Configuration/utils/index.ts +153 -0
  73. package/pages/CreateClone/index.tsx +311 -0
  74. package/pages/CreateClone/stores/Main.ts +107 -0
  75. package/pages/CreateClone/styles.module.scss +71 -0
  76. package/pages/CreateClone/useCreatedStores.ts +11 -0
  77. package/pages/CreateClone/useForm.ts +36 -0
  78. package/pages/Instance/Clones/Header/Item/index.tsx +15 -0
  79. package/pages/Instance/Clones/Header/Item/styles.module.scss +17 -0
  80. package/pages/Instance/Clones/Header/index.tsx +74 -0
  81. package/pages/Instance/Clones/Header/styles.module.scss +11 -0
  82. package/pages/Instance/Clones/index.tsx +135 -0
  83. package/pages/Instance/ClonesModal/index.tsx +71 -0
  84. package/pages/Instance/ClonesModal/utils.ts +21 -0
  85. package/pages/Instance/InactiveInstance/index.tsx +165 -0
  86. package/pages/Instance/InactiveInstance/utils.ts +9 -0
  87. package/pages/Instance/Info/Connection/ConnectModal/Content/index.tsx +176 -0
  88. package/pages/Instance/Info/Connection/ConnectModal/Content/utils.ts +24 -0
  89. package/pages/Instance/Info/Connection/ConnectModal/index.tsx +36 -0
  90. package/pages/Instance/Info/Connection/index.tsx +81 -0
  91. package/pages/Instance/Info/Details/index.tsx +20 -0
  92. package/pages/Instance/Info/Disks/Disk/ActionsMenu/index.tsx +100 -0
  93. package/pages/Instance/Info/Disks/Disk/Marker/index.tsx +26 -0
  94. package/pages/Instance/Info/Disks/Disk/ProgressBar/PointerIcon.tsx +20 -0
  95. package/pages/Instance/Info/Disks/Disk/ProgressBar/index.tsx +73 -0
  96. package/pages/Instance/Info/Disks/Disk/Status/index.tsx +75 -0
  97. package/pages/Instance/Info/Disks/Disk/index.tsx +168 -0
  98. package/pages/Instance/Info/Disks/index.tsx +65 -0
  99. package/pages/Instance/Info/Icons/index.tsx +39 -0
  100. package/pages/Instance/Info/Retrieval/RefreshFailedAlert/index.tsx +32 -0
  101. package/pages/Instance/Info/Retrieval/RefreshFailedAlert/styles.module.scss +33 -0
  102. package/pages/Instance/Info/Retrieval/RetrievalModal/index.tsx +49 -0
  103. package/pages/Instance/Info/Retrieval/RetrievalModal/styles.module.scss +6 -0
  104. package/pages/Instance/Info/Retrieval/RetrievalTable/index.tsx +53 -0
  105. package/pages/Instance/Info/Retrieval/RetrievalTable/styles.module.scss +29 -0
  106. package/pages/Instance/Info/Retrieval/index.tsx +95 -0
  107. package/pages/Instance/Info/Retrieval/utils.ts +10 -0
  108. package/pages/Instance/Info/Snapshots/Calendar/Day/index.tsx +125 -0
  109. package/pages/Instance/Info/Snapshots/Calendar/index.tsx +133 -0
  110. package/pages/Instance/Info/Snapshots/Calendar/utils.ts +74 -0
  111. package/pages/Instance/Info/Snapshots/TimeLine/Day/index.tsx +79 -0
  112. package/pages/Instance/Info/Snapshots/TimeLine/index.tsx +57 -0
  113. package/pages/Instance/Info/Snapshots/index.tsx +97 -0
  114. package/pages/Instance/Info/Snapshots/utils.ts +18 -0
  115. package/pages/Instance/Info/Status/InstanceResponseModal/index.tsx +32 -0
  116. package/pages/Instance/Info/Status/InstanceResponseModal/styles.module.scss +3 -0
  117. package/pages/Instance/Info/Status/index.tsx +85 -0
  118. package/pages/Instance/Info/Status/styles.module.scss +12 -0
  119. package/pages/Instance/Info/Status/utils.ts +24 -0
  120. package/pages/Instance/Info/components/Property/index.tsx +32 -0
  121. package/pages/Instance/Info/components/Property/styles.module.scss +21 -0
  122. package/pages/Instance/Info/components/Section/index.tsx +50 -0
  123. package/pages/Instance/Info/components/ValueStatus/index.tsx +51 -0
  124. package/pages/Instance/Info/index.tsx +129 -0
  125. package/pages/Instance/SnapshotsModal/index.tsx +169 -0
  126. package/pages/Instance/SnapshotsModal/utils.ts +17 -0
  127. package/pages/Instance/Tabs/index.tsx +98 -0
  128. package/pages/Instance/components/ClonesList/ConnectionModal/index.tsx +196 -0
  129. package/pages/Instance/components/ClonesList/MenuCell/index.tsx +98 -0
  130. package/pages/Instance/components/ClonesList/MenuCell/utils.ts +21 -0
  131. package/pages/Instance/components/ClonesList/index.tsx +189 -0
  132. package/pages/Instance/components/ClonesList/styles.module.scss +32 -0
  133. package/pages/Instance/components/ErrorStub/index.tsx +77 -0
  134. package/pages/Instance/components/ModalReloadButton/index.tsx +43 -0
  135. package/pages/Instance/components/Tags/Tag/index.tsx +60 -0
  136. package/pages/Instance/components/Tags/index.tsx +42 -0
  137. package/pages/Instance/context.ts +39 -0
  138. package/pages/Instance/index.tsx +235 -0
  139. package/pages/Instance/stores/ClonesModal.ts +35 -0
  140. package/pages/Instance/stores/Main.ts +335 -0
  141. package/pages/Instance/stores/SnapshotsModal.ts +35 -0
  142. package/pages/Instance/styles.scss +40 -0
  143. package/pages/Instance/useCreatedStores.ts +14 -0
  144. package/pages/Logs/Icons/PlusIcon.tsx +8 -0
  145. package/pages/Logs/constants/index.ts +7 -0
  146. package/pages/Logs/hooks/useWsScroll.tsx +44 -0
  147. package/pages/Logs/index.tsx +267 -0
  148. package/pages/Logs/utils/index.ts +20 -0
  149. package/pages/Logs/wsLogs.ts +110 -0
  150. package/pages/Logs/wsSnackbar.ts +27 -0
  151. package/postgres.ai-shared-3.5.0.tgz +0 -0
  152. package/react-app-env.d.ts +71 -0
  153. package/scripts/copy-assets.js +30 -0
  154. package/scripts/pack.js +70 -0
  155. package/stores/Snapshots.ts +54 -0
  156. package/styles/colors.ts +67 -0
  157. package/styles/global.scss +29 -0
  158. package/styles/icons.tsx +1917 -0
  159. package/styles/mixins.scss +30 -0
  160. package/styles/styles.ts +87 -0
  161. package/styles/theme.ts +53 -0
  162. package/styles/vars.scss +43 -0
  163. package/styles/vars.ts +40 -0
  164. package/tsconfig.build.json +37 -0
  165. package/tsconfig.json +30 -0
  166. package/types/api/endpoints/createClone.ts +10 -0
  167. package/types/api/endpoints/destroyClone.ts +7 -0
  168. package/types/api/endpoints/getClone.ts +6 -0
  169. package/types/api/endpoints/getConfig.ts +6 -0
  170. package/types/api/endpoints/getEngine.ts +13 -0
  171. package/types/api/endpoints/getFullConfig.ts +4 -0
  172. package/types/api/endpoints/getInstance.ts +6 -0
  173. package/types/api/endpoints/getInstanceRetrieval.ts +6 -0
  174. package/types/api/endpoints/getSeImages.ts +22 -0
  175. package/types/api/endpoints/getSnapshots.ts +6 -0
  176. package/types/api/endpoints/getWSToken.ts +6 -0
  177. package/types/api/endpoints/initWS.ts +1 -0
  178. package/types/api/endpoints/refreshInstance.ts +4 -0
  179. package/types/api/endpoints/resetClone.ts +8 -0
  180. package/types/api/endpoints/testDbSource.ts +48 -0
  181. package/types/api/endpoints/updateClone.ts +10 -0
  182. package/types/api/endpoints/updateConfig.ts +6 -0
  183. package/types/api/entities/clone.ts +42 -0
  184. package/types/api/entities/config.ts +114 -0
  185. package/types/api/entities/dbSource.ts +13 -0
  186. package/types/api/entities/instance.ts +67 -0
  187. package/types/api/entities/instanceRetrieval.ts +46 -0
  188. package/types/api/entities/instanceState.ts +102 -0
  189. package/types/api/entities/pool.ts +27 -0
  190. package/types/api/entities/snapshot.ts +18 -0
  191. package/types/api/entities/wsToken.ts +7 -0
  192. package/types/byte-size/index.d.ts +22 -0
  193. package/utils/api.ts +30 -0
  194. package/utils/clone.ts +31 -0
  195. package/utils/connection.ts +38 -0
  196. package/utils/date.ts +87 -0
  197. package/utils/instance.ts +10 -0
  198. package/utils/numbers.ts +11 -0
  199. package/utils/react.ts +10 -0
  200. package/utils/snapshot.ts +4 -0
  201. package/utils/strings.ts +11 -0
  202. package/utils/units.ts +23 -0
@@ -0,0 +1,74 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import React from 'react'
9
+ import { DefaultTheme, makeStyles } from '@material-ui/styles'
10
+ import clsx from 'clsx'
11
+
12
+ import { colors } from '@postgres.ai/shared/styles/colors'
13
+
14
+ type Props = {
15
+ level: 1 | 2
16
+ tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
17
+ text: React.ReactNode
18
+ className?: string
19
+ rightContent?: React.ReactNode
20
+ children?: React.ReactNode
21
+ contentClassName?: string
22
+ }
23
+
24
+ const LEVEL_TO_FONT_SIZE = {
25
+ 1: '16px',
26
+ 2: '14px',
27
+ }
28
+
29
+ const LEVEL_TO_BOTTOM_PADDING = {
30
+ 1: '16px',
31
+ 2: '8px',
32
+ }
33
+
34
+ const useStyles = makeStyles<DefaultTheme, { level: Props['level'] }>(
35
+ {
36
+ root: {
37
+ borderBottom: `1px solid ${colors.consoleStroke}`,
38
+ },
39
+ content: (props) => ({
40
+ display: 'flex',
41
+ alignItems: 'center',
42
+ paddingBottom: LEVEL_TO_BOTTOM_PADDING[props.level],
43
+ }),
44
+ text: (props) => ({
45
+ margin: '0 10px 0 0',
46
+ fontSize: LEVEL_TO_FONT_SIZE[props.level],
47
+ }),
48
+ },
49
+ { index: 1 },
50
+ )
51
+
52
+ export const SectionTitle = (props: Props) => {
53
+ const {
54
+ text,
55
+ tag: Tag,
56
+ level,
57
+ rightContent,
58
+ children,
59
+ className,
60
+ contentClassName,
61
+ } = props
62
+
63
+ const classes = useStyles({ level })
64
+
65
+ return (
66
+ <div className={clsx(classes.root, className)}>
67
+ <div className={clsx(classes.content, contentClassName)}>
68
+ <Tag className={classes.text}>{text}</Tag>
69
+ {rightContent}
70
+ </div>
71
+ {children}
72
+ </div>
73
+ )
74
+ }
@@ -0,0 +1,42 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import React from 'react'
9
+ import { MenuItem } from '@material-ui/core'
10
+
11
+ import { TextField, TextFieldProps } from '@postgres.ai/shared/components/TextField'
12
+
13
+ type Value = string | number
14
+
15
+ type Props = {
16
+ items: {
17
+ value: Value
18
+ children: React.ReactNode
19
+ }[]
20
+ value: Value | null
21
+ onChange: TextFieldProps['onChange']
22
+ className?: TextFieldProps['className']
23
+ label: TextFieldProps['label']
24
+ fullWidth?: TextFieldProps['fullWidth']
25
+ disabled?: TextFieldProps['disabled']
26
+ error?: boolean
27
+ }
28
+
29
+ export const Select = (props: Props) => {
30
+ const { items, ...textFieldProps } = props
31
+ return (
32
+ <TextField select {...textFieldProps}>
33
+ {items.map((item, i) => {
34
+ return (
35
+ <MenuItem value={item.value} key={`${item.value}-${i}`}>
36
+ {item.children}
37
+ </MenuItem>
38
+ )
39
+ })}
40
+ </TextField>
41
+ )
42
+ }
@@ -0,0 +1,56 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import React from 'react'
9
+ import { makeStyles } from '@material-ui/core'
10
+
11
+ import { Button } from '@postgres.ai/shared/components/Button'
12
+
13
+ type Props = {
14
+ items: {
15
+ text: string
16
+ variant?: 'primary' | 'secondary'
17
+ onClick: () => void
18
+ isDisabled?: boolean
19
+ }[]
20
+ }
21
+
22
+ const useStyles = makeStyles(
23
+ {
24
+ root: {
25
+ display: 'flex',
26
+ justifyContent: 'flex-end',
27
+ marginTop: '16px',
28
+ },
29
+ button: {
30
+ marginLeft: '8px',
31
+ },
32
+ },
33
+ { index: 1 },
34
+ )
35
+
36
+ export const SimpleModalControls = (props: Props) => {
37
+ const classes = useStyles()
38
+
39
+ return (
40
+ <div className={classes.root}>
41
+ {props.items.map((item) => {
42
+ return (
43
+ <Button
44
+ key={item.text}
45
+ className={classes.button}
46
+ onClick={item.onClick}
47
+ variant={item.variant}
48
+ isDisabled={item.isDisabled}
49
+ >
50
+ {item.text}
51
+ </Button>
52
+ )
53
+ })}
54
+ </div>
55
+ )
56
+ }
@@ -0,0 +1,29 @@
1
+ export const SpinnerIcon = ({ className }: { className: string }) => (
2
+ <svg
3
+ width="144px"
4
+ height="144px"
5
+ viewBox="0 0 144 144"
6
+ version="1.1"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlnsXlink="http://www.w3.org/1999/xlink"
9
+ className={className}
10
+ >
11
+ <title>Oval</title>
12
+ <g
13
+ id="Page-1"
14
+ stroke="none"
15
+ strokeWidth="1"
16
+ fill="none"
17
+ fillRule="evenodd"
18
+ strokeDasharray="100.5309677124023"
19
+ strokeLinecap="round"
20
+ >
21
+ <path
22
+ d="M72,136 C107.346224,136 136,107.346224 136,72 C136,36.653776 107.346224,8 72,8 C36.653776,8 8,36.653776 8,72 C8,107.346224 36.653776,136 72,136 Z"
23
+ id="Oval"
24
+ stroke="currentColor"
25
+ strokeWidth="16"
26
+ ></path>
27
+ </g>
28
+ </svg>
29
+ )
@@ -0,0 +1,16 @@
1
+ import cn from 'classnames'
2
+ import { SpinnerIcon } from './icon'
3
+
4
+ import styles from './styles.module.scss'
5
+
6
+ export type Size = 'sm' | 'md' | 'lg'
7
+
8
+ export type Props = {
9
+ size?: Size
10
+ className?: string
11
+ }
12
+
13
+ export const Spinner = (props: Props) => {
14
+ const { size = 'md' } = props
15
+ return <SpinnerIcon className={cn(styles.root, styles[size], props.className)} />
16
+ }
@@ -0,0 +1,33 @@
1
+ @import '@postgres.ai/shared/styles/vars';
2
+
3
+ @keyframes rotation {
4
+ from {
5
+ transform: rotate(0);
6
+ }
7
+
8
+ to {
9
+ transform: rotate(360deg);
10
+ }
11
+ }
12
+
13
+ .root {
14
+ color: $color-orange;
15
+
16
+ animation: rotation ease-in-out .5s infinite;
17
+
18
+ // Sizes.
19
+ &.sm {
20
+ height: 16px;
21
+ width: 16px;
22
+ }
23
+
24
+ &.md {
25
+ height: 24px;
26
+ width: 24px;
27
+ }
28
+
29
+ &.lg {
30
+ height: 32px;
31
+ width: 32px;
32
+ }
33
+ }
@@ -0,0 +1,61 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import React from 'react'
9
+ import clsx from 'clsx'
10
+
11
+ import { WarningIcon } from '@postgres.ai/shared/icons/Warning'
12
+ import { CircleIcon } from '@postgres.ai/shared/icons/Circle'
13
+
14
+ import styles from './styles.module.scss'
15
+
16
+ type Type = 'ok' | 'warning' | 'error' | 'waiting' | 'unknown'
17
+
18
+ export type Props = {
19
+ type?: Type
20
+ children?: React.ReactNode
21
+ icon?: React.ReactNode
22
+ className?: string
23
+ classNameIcon?: string
24
+ disableColor?: boolean
25
+ }
26
+
27
+ const TYPE_TO_ICON = {
28
+ ok: <CircleIcon className={styles.icon} />,
29
+ warning: <WarningIcon className={styles.icon} />,
30
+ error: <WarningIcon className={styles.icon} />,
31
+ waiting: <CircleIcon className={styles.icon} />,
32
+ unknown: <CircleIcon className={styles.icon} />,
33
+ }
34
+
35
+ export const Status = React.forwardRef<HTMLDivElement, Props>((props, ref) => {
36
+ const {
37
+ type = 'ok',
38
+ children = type,
39
+ icon = TYPE_TO_ICON[type],
40
+ className,
41
+ classNameIcon,
42
+ disableColor,
43
+ ...hiddenProps
44
+ } = props
45
+
46
+ return (
47
+ <span
48
+ {...hiddenProps}
49
+ className={clsx(styles.root, !disableColor && styles[type], className)}
50
+ ref={ref}
51
+ >
52
+ {icon && (
53
+ <span className={clsx(styles.iconContainer, classNameIcon)}>
54
+ {icon}
55
+ &thinsp;
56
+ </span>
57
+ )}
58
+ {children}
59
+ </span>
60
+ )
61
+ })
@@ -0,0 +1,45 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ @import '@postgres.ai/shared/styles/vars';
9
+
10
+ .root {
11
+ &.ok {
12
+ color: $color-status-ok;
13
+ }
14
+
15
+ &.warning {
16
+ color: $color-status-warning;
17
+ }
18
+
19
+ &.error {
20
+ color: $color-status-error;
21
+ }
22
+
23
+ &.waiting {
24
+ color: $color-status-waiting;
25
+ }
26
+
27
+ &.unknown {
28
+ color: $color-status-unknown;
29
+ }
30
+ }
31
+
32
+ .iconContainer {
33
+ display: inline-block;
34
+ margin-right: 0.5em;
35
+ width: 0.8em;
36
+ position: relative;
37
+ }
38
+
39
+ .icon {
40
+ position: absolute;
41
+ top: 0;
42
+ left: 0;
43
+ width: 100%;
44
+ height: 100%;
45
+ }
@@ -0,0 +1,41 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import React from 'react'
9
+ import { makeStyles } from '@material-ui/core'
10
+ import Box from '@mui/material/Box'
11
+ import clsx from 'clsx'
12
+
13
+ const useStyles = makeStyles(
14
+ {
15
+ root: {
16
+ padding: '20px 0',
17
+ flex: '1 1 100%',
18
+ },
19
+ },
20
+ { index: 1 },
21
+ )
22
+
23
+ type Props = {
24
+ className?: string
25
+ children: React.ReactNode
26
+ }
27
+
28
+ export const StubContainer = (props: Props) => {
29
+ const classes = useStyles()
30
+
31
+ return (
32
+ <Box
33
+ display="flex"
34
+ justifyContent="center"
35
+ alignItems="center"
36
+ className={clsx(classes.root, props.className)}
37
+ >
38
+ {props.children}
39
+ </Box>
40
+ )
41
+ }
@@ -0,0 +1,49 @@
1
+ /*--------------------------------------------------------------------------
2
+ * Copyright (c) 2019-2021, Postgres.ai, Nikolay Samokhvalov nik@postgres.ai
3
+ * All Rights Reserved. Proprietary and confidential.
4
+ * Unauthorized copying of this file, via any medium is strictly prohibited
5
+ *--------------------------------------------------------------------------
6
+ */
7
+
8
+ import { makeStyles } from '@material-ui/core'
9
+ import clsx from 'clsx'
10
+
11
+ import {
12
+ Spinner,
13
+ Props as SpinnerProps,
14
+ } from '@postgres.ai/shared/components/Spinner'
15
+
16
+ import { colors } from '@postgres.ai/shared/styles/colors'
17
+
18
+ type Props = {
19
+ className?: string
20
+ size?: SpinnerProps['size']
21
+ }
22
+
23
+ const useStyles = makeStyles(
24
+ {
25
+ root: {
26
+ position: 'absolute',
27
+ top: 0,
28
+ left: 0,
29
+ height: '100%',
30
+ width: '100%',
31
+ display: 'flex',
32
+ alignItems: 'center',
33
+ justifyContent: 'center',
34
+ background: colors.white,
35
+ },
36
+ },
37
+ { index: 1 },
38
+ )
39
+
40
+ export const StubSpinner = (props: Props) => {
41
+ const { className, size = 'lg' } = props
42
+ const classes = useStyles()
43
+
44
+ return (
45
+ <div className={clsx(classes.root, className)}>
46
+ <Spinner size={size} />
47
+ </div>
48
+ )
49
+ }
@@ -0,0 +1,20 @@
1
+ import cn from 'classnames'
2
+
3
+ import { Spinner, Size } from '@postgres.ai/shared/components/Spinner'
4
+
5
+ import styles from './styles.module.scss'
6
+
7
+ type Props = {
8
+ mode?: 'absolute' | 'flex'
9
+ size?: Size
10
+ className?: string
11
+ }
12
+
13
+ export const StubSpinner = (props: Props) => {
14
+ const { mode = 'flex', size = 'lg' } = props
15
+ return (
16
+ <div className={cn(styles.root, props.className, styles[mode])}>
17
+ <Spinner size={size} />
18
+ </div>
19
+ )
20
+ }
@@ -0,0 +1,20 @@
1
+ @import '@postgres.ai/shared/styles/vars';
2
+
3
+ .root {
4
+ background: $color-white;
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ width: 100%;
9
+ height: 100%;
10
+
11
+ &.absolute {
12
+ position: absolute;
13
+ top: 0;
14
+ left: 0;
15
+ }
16
+
17
+ &.flex {
18
+ flex: 1 1 100%;
19
+ }
20
+ }
@@ -0,0 +1,107 @@
1
+ import copyToClipboard from 'copy-to-clipboard'
2
+ import { makeStyles, IconButton } from '@material-ui/core'
3
+ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
4
+ import { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'
5
+
6
+ import { icons } from '@postgres.ai/shared/styles/icons'
7
+ import { Tooltip } from '@postgres.ai/shared/components/Tooltip'
8
+
9
+ const useStyles = makeStyles(
10
+ {
11
+ copyFieldContainer: {
12
+ position: 'relative',
13
+ display: 'inline-flex',
14
+ maxWidth: '100%',
15
+ width: '100%',
16
+ margin: "12px 0",
17
+ backgroundColor: 'rgb(250, 250, 250)',
18
+
19
+ '& code': {
20
+ whiteSpace: 'inherit !important',
21
+ },
22
+ },
23
+ copyButton: {
24
+ top: 6,
25
+ position: 'sticky',
26
+ right: 6,
27
+ zIndex: 10,
28
+ width: 26,
29
+ height: 26,
30
+ padding: 8,
31
+ backgroundColor: 'rgba(128, 128, 128, 0.15)',
32
+ transition: 'background-color 0.2s ease-in-out, color 0.2s ease-in-out',
33
+
34
+ '&:hover': {
35
+ backgroundColor: 'rgba(128, 128, 128, 0.25)',
36
+ },
37
+ },
38
+ },
39
+ { index: 1 },
40
+ )
41
+
42
+ export const SyntaxHighlight = ({
43
+ content,
44
+ wrapLines,
45
+ id,
46
+ style,
47
+ }: {
48
+ content: string
49
+ wrapLines?: boolean
50
+ id?: string
51
+ style?: React.CSSProperties
52
+ }) => {
53
+ const classes = useStyles()
54
+
55
+ const copyContent = () => {
56
+ if (!content) {
57
+ const codeTag = document.getElementById(id as string)
58
+ if (codeTag) {
59
+ copyToClipboard(codeTag.innerText)
60
+ }
61
+ return
62
+ }
63
+
64
+ copyToClipboard(content.replace(/^\s*[\r\n]/gm, ''))
65
+ }
66
+
67
+ const fontSize = style ? '12px' : '14px'
68
+
69
+ return (
70
+ <div className={classes.copyFieldContainer} style={style}>
71
+ <SyntaxHighlighter
72
+ id={id}
73
+ language="bash"
74
+ wrapLines={wrapLines}
75
+ style={oneLight}
76
+ customStyle={{
77
+ borderRadius: 4,
78
+ fontSize: fontSize,
79
+ margin: 0,
80
+ border: 0,
81
+ flexGrow: 1,
82
+ height: '100%',
83
+ }}
84
+ codeTagProps={{
85
+ style: {
86
+ fontSize: fontSize,
87
+ },
88
+ }}
89
+ lineProps={{
90
+ style: {
91
+ display: 'flex',
92
+ fontSize: fontSize,
93
+ },
94
+ }}
95
+ >
96
+ {content}
97
+ </SyntaxHighlighter>
98
+ <IconButton
99
+ className={classes.copyButton}
100
+ aria-label="Copy"
101
+ onClick={copyContent}
102
+ >
103
+ <Tooltip content={'Copy'}>{icons.copyIcon}</Tooltip>
104
+ </IconButton>
105
+ </div>
106
+ )
107
+ }