@rpcbase/client 0.227.0 → 0.231.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 (237) hide show
  1. package/package.json +11 -113
  2. package/src/apiClient/getServerApiClient.ts +131 -0
  3. package/src/apiClient/index.ts +86 -0
  4. package/src/index.ts +3 -0
  5. package/src/initClient.ts +32 -0
  6. package/src/types.ts +7 -0
  7. package/AppProvider/AnalyticsContainer.js +0 -56
  8. package/AppProvider/debug.js +0 -4
  9. package/AppProvider/index.tsx +0 -79
  10. package/access-control/ACLForm/components/GrantField/OpSelector.tsx +0 -129
  11. package/access-control/ACLForm/components/GrantField/ResourceSelector.tsx +0 -86
  12. package/access-control/ACLForm/components/GrantField/UsersSelector.tsx +0 -96
  13. package/access-control/ACLForm/components/GrantField/grant-field.scss +0 -26
  14. package/access-control/ACLForm/components/GrantField/icons/CheckMark.tsx +0 -16
  15. package/access-control/ACLForm/components/GrantField/icons/CollapseArrow.tsx +0 -14
  16. package/access-control/ACLForm/components/GrantField/icons/ExpandArrow.tsx +0 -14
  17. package/access-control/ACLForm/components/GrantField/index.tsx +0 -91
  18. package/access-control/ACLForm/components/GrantsList.tsx +0 -48
  19. package/access-control/ACLForm/components/RoleForm.tsx +0 -134
  20. package/access-control/ACLForm/components/RoleView.tsx +0 -115
  21. package/access-control/ACLForm/components/RolesList.tsx +0 -79
  22. package/access-control/ACLForm/components/constants.tsx +0 -1
  23. package/access-control/ACLForm/components/resolver.ts +0 -57
  24. package/access-control/ACLForm/components/role-form.scss +0 -19
  25. package/access-control/ACLForm/index.tsx +0 -48
  26. package/access-control/ACLModal/acl-modal.scss +0 -7
  27. package/access-control/ACLModal/index.tsx +0 -66
  28. package/access-control/PolicyEditor/TargetSelector/QueryBuilder.tsx +0 -48
  29. package/access-control/PolicyEditor/TargetSelector/index.tsx +0 -5
  30. package/access-control/PolicyEditor/TargetSelector/query-builder.scss +0 -9
  31. package/access-control/PolicyEditor/index.tsx +0 -165
  32. package/access-control/index.ts +0 -3
  33. package/apiClient.js +0 -15
  34. package/auth/authProps.js +0 -8
  35. package/auth/components/AccountsList/AccountListItem.js +0 -61
  36. package/auth/components/AccountsList/account-list-item.scss +0 -5
  37. package/auth/components/AccountsList/index.js +0 -17
  38. package/auth/components/Footer/index.js +0 -11
  39. package/auth/components/ForgotPassword/forgot-password.scss +0 -37
  40. package/auth/components/ForgotPassword/index.js +0 -114
  41. package/auth/components/SetNewPassword/index.js +0 -130
  42. package/auth/components/SetNewPassword/set-new-password.scss +0 -47
  43. package/auth/components/SignIn/SignInEmailForm.tsx +0 -115
  44. package/auth/components/SignIn/index.js +0 -69
  45. package/auth/components/SignIn/sign-in.scss +0 -56
  46. package/auth/components/SignOut/index.js +0 -144
  47. package/auth/components/SignOut/sign-out.scss +0 -34
  48. package/auth/components/SignUp/SignUpEmailForm.tsx +0 -98
  49. package/auth/components/SignUp/index.js +0 -66
  50. package/auth/components/SignUp/sign-up.scss +0 -56
  51. package/auth/getTenantId.js +0 -12
  52. package/auth/getUid.js +0 -11
  53. package/auth/helpers/redirectSignIn.native.js +0 -9
  54. package/auth/helpers/redirectSignIn.web.js +0 -7
  55. package/auth/index.js +0 -146
  56. package/auth/signOut.js +0 -20
  57. package/auth/useAuthRouter.js +0 -56
  58. package/env.d.ts +0 -3
  59. package/firebase/index.js +0 -1
  60. package/firebase/sw.js +0 -1
  61. package/form/FileInput/FileUploadContext.tsx +0 -162
  62. package/form/FileInput/FileUploadForm/index.tsx +0 -139
  63. package/form/FileInput/FileUploadForm/usePreventUnload.js +0 -21
  64. package/form/FileInput/UploadButton.tsx +0 -23
  65. package/form/FileInput/constants.ts +0 -16
  66. package/form/FileInput/file-input.scss +0 -1
  67. package/form/FileInput/index.tsx +0 -21
  68. package/form/FileInput/upload-worker/get_file_hash.js +0 -63
  69. package/form/FileInput/upload-worker/index.js +0 -16
  70. package/form/FileInput/upload-worker/no_compress_exts.ts +0 -33
  71. package/form/FileInput/upload-worker/upload_file.js +0 -129
  72. package/form/Form.tsx +0 -23
  73. package/form/Input.tsx +0 -62
  74. package/form/SubmitButton/index.tsx +0 -58
  75. package/form/hook-form.tsx +0 -7
  76. package/form/index.tsx +0 -5
  77. package/getBaseUrl.js +0 -14
  78. package/getObjectId.ts +0 -31
  79. package/hashState.js +0 -158
  80. package/helpers/createBatcher/index.js +0 -36
  81. package/helpers/getInitials.js +0 -39
  82. package/helpers/onReady.js +0 -15
  83. package/helpers/post.js +0 -18
  84. package/helpers/postRPC.js +0 -42
  85. package/helpers/useRPC.js +0 -41
  86. package/helpers/useStoredValue/batchedGetStoredValues.js +0 -30
  87. package/helpers/useStoredValue/index.js +0 -107
  88. package/helpers/useStoredValue/setStoredValues.js +0 -14
  89. package/i18n/en/rb.nav.json +0 -13
  90. package/i18n/en/rb.sign_in.json +0 -11
  91. package/i18n/en/rb.sign_out.json +0 -5
  92. package/i18n/fr/rb.sign_in.json +0 -11
  93. package/i18n/fr/rb.sign_out.json +0 -5
  94. package/i18n/index.js +0 -63
  95. package/index.js +0 -6
  96. package/isEqualValues.js +0 -47
  97. package/jest.config.js +0 -16
  98. package/notifications/Notification/index.js +0 -36
  99. package/notifications/Notification/notification.scss +0 -1
  100. package/notifications/NotificationItem/HeaderStatus.js +0 -93
  101. package/notifications/NotificationItem/index.js +0 -65
  102. package/notifications/NotificationItem/notification-item.scss +0 -25
  103. package/notifications/NotificationsContainer/index.js +0 -37
  104. package/notifications/NotificationsContainer/notifications-container.scss +0 -38
  105. package/notifications/NotificationsContainer/useLLTs.js +0 -28
  106. package/notifications/NotificationsContext/index.js +0 -71
  107. package/notifications/NotificationsContext/useNotificationsList.js +0 -75
  108. package/notifications/NotificationsSettingsModal/SettingsForm.js +0 -52
  109. package/notifications/NotificationsSettingsModal/index.js +0 -48
  110. package/notifications/NotificationsSettingsModal/notifications-settings.scss +0 -1
  111. package/notifications/config.js +0 -1
  112. package/notifications/index.js +0 -4
  113. package/page.js +0 -9
  114. package/publish-output.txt +0 -0
  115. package/rpc.js +0 -32
  116. package/rr-trace/get_fingerprint.js +0 -10
  117. package/rr-trace/get_perf_vitals.js +0 -24
  118. package/rr-trace/get_session_id.js +0 -29
  119. package/rr-trace/index.js +0 -138
  120. package/rr-trace/write_session_data.js +0 -86
  121. package/rts/boot.js +0 -3
  122. package/rts/getUseDocument.js +0 -21
  123. package/rts/getUseQuery/index.js +0 -233
  124. package/rts/getUseQuery/useData.js +0 -55
  125. package/rts/index.js +0 -10
  126. package/rts/rts.js +0 -243
  127. package/rts/signout.ts +0 -8
  128. package/rts/store/constants.js +0 -3
  129. package/rts/store/debug.js +0 -24
  130. package/rts/store/get_collection.js +0 -55
  131. package/rts/store/index.js +0 -100
  132. package/rts/store/replace_query_keys.js +0 -30
  133. package/rts/store/satisfies_projection.js +0 -32
  134. package/rts/store/update_docs.js +0 -47
  135. package/storage/index.jest.js +0 -15
  136. package/storage/index.native.js +0 -38
  137. package/storage/index.web.js +0 -25
  138. package/types.ts +0 -6
  139. package/ui/ActivityIndicator/index.js +0 -113
  140. package/ui/Avatar/index.native.js +0 -31
  141. package/ui/Avatar/index.web.js +0 -37
  142. package/ui/Avatar/styles.js +0 -41
  143. package/ui/ErrorBoundary/index.js +0 -12
  144. package/ui/ExpandableFloatView/exp.scss +0 -15
  145. package/ui/ExpandableFloatView/index.tsx +0 -123
  146. package/ui/ExpandableFloatView/useBackdrop.js +0 -45
  147. package/ui/LottiePlayer/LottiePlayer.js +0 -4
  148. package/ui/LottiePlayer/index.js +0 -8
  149. package/ui/Modal/HashStateModal.js +0 -30
  150. package/ui/Modal/Modal.js +0 -93
  151. package/ui/Modal/ModalForm/AlertBanner.js +0 -82
  152. package/ui/Modal/ModalForm/index.js +0 -188
  153. package/ui/Modal/ModalForm/modal-form.scss +0 -63
  154. package/ui/Modal/index.js +0 -10
  155. package/ui/Modal/modal.scss +0 -101
  156. package/ui/Modal/withHashStateModal.js +0 -24
  157. package/ui/RedboxError/index.js +0 -3
  158. package/ui/Search/SearchHistory/index.js +0 -45
  159. package/ui/Search/SearchHistory/search-history.scss +0 -9
  160. package/ui/Search/SearchHistory/useSearchHistory.tsx +0 -57
  161. package/ui/Search/SearchResults/index.tsx +0 -90
  162. package/ui/Search/index.tsx +0 -298
  163. package/ui/Search/search.scss +0 -0
  164. package/ui/SelectPills/index.tsx +0 -96
  165. package/ui/SelectPills/select-pills.scss +0 -66
  166. package/ui/Tabs/index.tsx +0 -161
  167. package/ui/Tabs/tabs.scss +0 -53
  168. package/ui/Tree/index.js +0 -257
  169. package/ui/Tree/model.js +0 -71
  170. package/ui/Tree/node.js +0 -112
  171. package/ui/Tree/tree.scss +0 -98
  172. package/ui/UserAvatar/default_colors.json +0 -82
  173. package/ui/UserAvatar/index.js +0 -55
  174. package/ui/View/index.tsx +0 -17
  175. package/ui/View/index.web.js +0 -44
  176. package/ui/animations/checkmark.json +0 -1
  177. package/ui/helpers/SizeContext/index.tsx +0 -11
  178. package/ui/helpers/helpers.scss +0 -61
  179. package/ui/helpers/index.ts +0 -6
  180. package/ui/helpers/stopEventPropagation.js +0 -5
  181. package/ui/helpers/useActiveListItemIndex/index.tsx +0 -45
  182. package/ui/helpers/useScrollSelectorIntoView/index.tsx +0 -14
  183. package/ui/helpers/useThrottledMeasure/index.js +0 -47
  184. package/ui/helpers/withSuspense/index.js +0 -37
  185. package/ui/icons/AddAccount.tsx +0 -5
  186. package/ui/icons/Billing.tsx +0 -6
  187. package/ui/icons/Close.tsx +0 -14
  188. package/ui/icons/Organization.tsx +0 -5
  189. package/ui/icons/Signout.tsx +0 -5
  190. package/ui/icons/index.tsx +0 -6
  191. package/ui/nav/AccountsDropdown/SwitchAccounts.tsx +0 -28
  192. package/ui/nav/AccountsDropdown/accounts-dropdown.scss +0 -51
  193. package/ui/nav/AccountsDropdown/index.tsx +0 -90
  194. package/ui/nav/AccountsToggle/index.tsx +0 -24
  195. package/ui/nav/ContentView/ContentViewContext.ts +0 -23
  196. package/ui/nav/ContentView/index.tsx +0 -115
  197. package/ui/nav/HeaderContainer/header.scss +0 -52
  198. package/ui/nav/HeaderContainer/index.tsx +0 -23
  199. package/ui/nav/HeaderContainer/variables.scss +0 -1
  200. package/ui/nav/MorphingDropdown/MorphingDropdownContext.tsx +0 -151
  201. package/ui/nav/MorphingDropdown/MorphingDropdownMenu.tsx +0 -38
  202. package/ui/nav/MorphingDropdown/MorphingDropdownPortal.tsx +0 -166
  203. package/ui/nav/MorphingDropdown/MorphingDropdownToggle.tsx +0 -34
  204. package/ui/nav/MorphingDropdown/index.tsx +0 -16
  205. package/ui/nav/MorphingDropdown/morphing-dropdown.scss +0 -35
  206. package/ui/nav/NotificationsDropdown/index.tsx +0 -52
  207. package/ui/nav/NotificationsDropdown/notifications-dropdown.scss +0 -5
  208. package/ui/nav/NotificationsToggle/NotificationsGlyph.tsx +0 -54
  209. package/ui/nav/NotificationsToggle/index.tsx +0 -12
  210. package/ui/nav/NotificationsToggle/notification-animation.json +0 -1
  211. package/ui/nav/NotificationsToggle/notifications-toggle.scss +0 -26
  212. package/ui/nav/SidebarContainer/index.tsx +0 -48
  213. package/ui/nav/SidebarContainer/sidebar-container.scss +0 -21
  214. package/ui/nav/SlideoutContainer/components/Body.tsx +0 -19
  215. package/ui/nav/SlideoutContainer/components/Header.tsx +0 -23
  216. package/ui/nav/SlideoutContainer/components/Wrapper.tsx +0 -46
  217. package/ui/nav/SlideoutContainer/index.tsx +0 -50
  218. package/ui/nav/SlideoutContainer/slideout-container.scss +0 -40
  219. package/ui/nav/index.ts +0 -13
  220. package/ui/oauth/GitHub.js +0 -38
  221. package/ui/oauth/getGitHubSigninUrl.js +0 -30
  222. package/ui/oauth/index.js +0 -9
  223. package/ui/oauth/oauth.scss +0 -16
  224. package/ui/sortable-hoc/AutoScroller.js +0 -76
  225. package/ui/sortable-hoc/DragHandle.js +0 -31
  226. package/ui/sortable-hoc/Manager.js +0 -54
  227. package/ui/sortable-hoc/README.md +0 -1
  228. package/ui/sortable-hoc/SortableContainer/defaultGetHelperDimensions.js +0 -7
  229. package/ui/sortable-hoc/SortableContainer/defaultShouldCancelStart.js +0 -24
  230. package/ui/sortable-hoc/SortableContainer/index.js +0 -994
  231. package/ui/sortable-hoc/SortableContainer/props.js +0 -81
  232. package/ui/sortable-hoc/SortableElement.js +0 -111
  233. package/ui/sortable-hoc/SortableHandle.js +0 -45
  234. package/ui/sortable-hoc/drag-handle.scss +0 -14
  235. package/ui/sortable-hoc/index.js +0 -9
  236. package/ui/sortable-hoc/utils.js +0 -292
  237. package/ui/springs.ts +0 -17
package/ui/Tabs/index.tsx DELETED
@@ -1,161 +0,0 @@
1
- import React, {useState, useEffect, useRef} from "react"
2
- import _isEmpty from "lodash/isEmpty"
3
-
4
- import stopEventPropagation from "../helpers/stopEventPropagation"
5
- import {useThrottledMeasure} from "..//helpers/useThrottledMeasure"
6
-
7
- import "./tabs.scss"
8
-
9
-
10
- type Props = {
11
- active: boolean,
12
- onChange: () => void,
13
- scrollIntoView: boolean
14
- }
15
-
16
- export const Tabs = (props: Props) => {
17
- const els = useRef({})
18
-
19
- // tracks drag movement, to prevent activating a tab if the user was just dragging the view arround
20
- const dragRef = useRef(null)
21
-
22
- const root = useRef(null)
23
- const [containerRef, {width: rootWidth}] = useThrottledMeasure()
24
-
25
- const [sizes, setSizes] = useState({})
26
- const [isFirstRender, setIsFirstRender] = useState(true)
27
-
28
- useEffect(() => {
29
- const updateSizes = () => {
30
- if (!root.current) {
31
- return
32
- }
33
-
34
- const rootBounds = root.current.getBoundingClientRect()
35
-
36
- const newSizes = {}
37
-
38
- Object.keys(els.current).forEach((key) => {
39
- const el = els.current[key]
40
- const bounds = el.getBoundingClientRect()
41
-
42
- const left = bounds.left - rootBounds.left
43
- const right = rootBounds.right - bounds.right
44
-
45
- newSizes[key] = {left, right}
46
- })
47
-
48
- setSizes(newSizes)
49
- return newSizes
50
- }
51
-
52
- requestAnimationFrame(() => {
53
- updateSizes()
54
- })
55
-
56
- const handleResize = () => {
57
- updateSizes()
58
- }
59
-
60
- window.addEventListener("resize", handleResize)
61
-
62
- return () => {
63
- window.removeEventListener("resize", handleResize)
64
- }
65
- }, [rootWidth])
66
-
67
- useEffect(() => {
68
- if (!_isEmpty(sizes) && isFirstRender) {
69
- requestAnimationFrame(() => {
70
- setIsFirstRender(false)
71
- })
72
- }
73
- }, [sizes])
74
-
75
- const onMouseDown = (event) => {
76
- dragRef.current = {
77
- x: event.clientX,
78
- y: event.clientY,
79
- }
80
- }
81
-
82
- const onMouseMove = (event) => {
83
- if (dragRef.current) {
84
- const distance = Math.sqrt(
85
- Math.pow(event.clientX - dragRef.current.x, 2) +
86
- Math.pow(event.clientY - dragRef.current.y, 2),
87
- )
88
-
89
- if (distance > 10) {
90
- dragRef.current.hasDragged = true
91
- }
92
- }
93
- }
94
-
95
- const getOnClickHandler = (child) => (event) => {
96
- if (dragRef.current?.hasDragged) {
97
- event.preventDefault()
98
- } else {
99
- const id = `tab-${child.key}`
100
- const el = document.getElementById(id)
101
-
102
- if (props.scrollIntoView) {
103
- el?.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})
104
- }
105
-
106
- props.onChange(child.key)
107
- }
108
-
109
- dragRef.current = null
110
- }
111
-
112
- const getTransitionTime = () => (isFirstRender ? 0 : 200)
113
-
114
- const getUnderlineStyle = () => {
115
- if (props.active === null || Object.keys(sizes).length === 0) {
116
- return {left: "0", right: "100%"}
117
- }
118
-
119
- const size = sizes[props.active]
120
-
121
- if (!size) return {}
122
-
123
- const transitionTime = getTransitionTime()
124
-
125
- return {
126
- left: `${size.left}px`,
127
- right: `${size.right}px`,
128
- transition: `left ${transitionTime}ms, right ${transitionTime}ms`,
129
- }
130
- }
131
-
132
- return (
133
- <div ref={containerRef} className="u-tabs-container">
134
- <div
135
- className={cx("u-tabs", props.className)}
136
- onMouseDown={stopEventPropagation}
137
- ref={root}
138
- style={props.style}
139
- >
140
- {React.Children.map(props.children, (child, i) => {
141
- if (!child) return null
142
-
143
- return (
144
- <div
145
- id={`tab-${child.key}`}
146
- className={cx([`u-tabs__Tab`, {active: child.key === props.active}])}
147
- onMouseDown={onMouseDown}
148
- onMouseMove={onMouseMove}
149
- onClick={getOnClickHandler(child)}
150
- ref={(el) => (els.current[child.key] = el)}
151
- >
152
- {child}
153
- </div>
154
- )
155
- })}
156
-
157
- <div className="u-tabs__Underline" style={getUnderlineStyle()} />
158
- </div>
159
- </div>
160
- )
161
- }
package/ui/Tabs/tabs.scss DELETED
@@ -1,53 +0,0 @@
1
- @import "helpers";
2
-
3
- $border-height: 3px;
4
-
5
- /* stylelint-disable */
6
- .u-tabs {
7
- position: relative;
8
- display: flex;
9
- flex-direction: row;
10
- margin-bottom: $border-height;
11
-
12
- // overflow-x: scroll;
13
- // overflow-y: visible;
14
- }
15
-
16
- .u-tabs__Tab {
17
- display: inline-block;
18
- width: 100%;
19
- padding: 4px 8px;
20
- color: $gray-900;
21
- cursor: pointer;
22
-
23
- & > div {
24
- display: flex;
25
- flex-direction: row;
26
- justify-content: center;
27
- }
28
-
29
- &.active {
30
- background-color: lighten($blue, 45%) !important;
31
- font-weight: 600;
32
-
33
- // &:first-child {
34
- // border-top-left-radius: 3px;
35
- // }
36
- }
37
-
38
- &:hover:not(.active) {
39
- color: $primary;
40
-
41
- svg path {
42
- fill: $primary;
43
- }
44
- }
45
- }
46
-
47
- .u-tabs__Underline {
48
- position: absolute;
49
- top: 100%;
50
- left: 0;
51
- right: 0;
52
- border-bottom: $border-height solid $primary;
53
- }
package/ui/Tree/index.js DELETED
@@ -1,257 +0,0 @@
1
- /* @flow */
2
- import * as React from "react"
3
-
4
- import TreeModel from "./model"
5
- import Node from "./node"
6
-
7
- import "./tree.scss"
8
-
9
-
10
- type Props = {|
11
- id: String,
12
- tree: Object,
13
- paddingLeft: number,
14
- renderNode: () => any,
15
- onChange: ?Function,
16
- style?: Object,
17
- disableDragging?: boolean,
18
- shouldHideNode?: (nodeProps) => boolean,
19
- |}
20
-
21
- type State = {|
22
- tree: Object,
23
- dragging: Object,
24
- |}
25
-
26
- export class Tree extends React.Component<Props, State> {
27
- static defaultProps = {
28
- paddingLeft: 10,
29
- }
30
-
31
- dragging: Object
32
- _updated: boolean
33
- _startX: number
34
- _startY: number
35
- _offsetX: number
36
- _offsetY: number
37
- _start: boolean
38
-
39
- constructor(props: Props) {
40
- super(props)
41
- this.state = this.init(props)
42
- }
43
-
44
- UNSAFE_componentWillReceiveProps(nextProps: Props) {
45
- if (!this._updated) {
46
- this.setState(this.init(nextProps))
47
- } else {
48
- this._updated = false
49
- }
50
- }
51
-
52
- init = (props: Props) => {
53
- const tree = new TreeModel(props.tree)
54
- tree.renderNode = props.renderNode
55
- tree.updateNodesPosition()
56
-
57
- return {
58
- tree: tree,
59
- dragging: {
60
- id: null,
61
- x: null,
62
- y: null,
63
- w: null,
64
- h: null,
65
- },
66
- }
67
- }
68
-
69
- renderDraggingElement = () => {
70
- const {tree, dragging} = this.state
71
-
72
- if (dragging?.id) {
73
- const draggingIndex = tree.getIndex(dragging.id)
74
- const draggingStyles = {
75
- top: dragging.y,
76
- left: dragging.x,
77
- width: dragging.w,
78
- }
79
-
80
- return (
81
- <div className="m-draggable" style={draggingStyles}>
82
- <Node
83
- tree={tree}
84
- index={draggingIndex}
85
- paddingLeft={this.props.paddingLeft}
86
- shouldHideNode={this.props.shouldHideNode}
87
- />
88
- </div>
89
- )
90
- }
91
-
92
- return null
93
- }
94
-
95
- dragStart = (id: number, dom: HTMLElement, e: SyntheticMouseEvent<HTMLElement>) => {
96
- if (e.button !== 0) return
97
- this.dragging = {
98
- id: id,
99
- w: dom.offsetWidth,
100
- h: dom.offsetHeight,
101
- x: dom.offsetLeft,
102
- y: dom.offsetTop,
103
- }
104
-
105
- this._startX = dom.offsetLeft
106
- this._startY = dom.offsetTop
107
- this._offsetX = e.clientX
108
- this._offsetY = e.clientY
109
- this._start = true
110
-
111
- window.addEventListener("mousemove", this.dragMouseMove)
112
- window.addEventListener("mouseup", this.dragEnd)
113
- }
114
-
115
- //
116
- dragMouseMove = (e: SyntheticMouseEvent<HTMLElement>) => {
117
- if (this._start) {
118
- this.setState({
119
- dragging: this.dragging,
120
- })
121
- this._start = false
122
- }
123
-
124
- const {tree} = this.state
125
- const dragging = this.dragging
126
- const paddingLeft = this.props.paddingLeft
127
- let newIndex = null
128
- let index = tree.getIndex(dragging.id)
129
- const collapsed = index.node.collapsed
130
-
131
- const _startX = this._startX
132
- const _startY = this._startY
133
- const _offsetX = this._offsetX
134
- const _offsetY = this._offsetY
135
-
136
- const pos = {
137
- x: _startX + e.clientX - _offsetX,
138
- y: _startY + e.clientY - _offsetY,
139
- }
140
-
141
- dragging.x = pos.x
142
- dragging.y = pos.y
143
-
144
- const diffX = dragging.x - paddingLeft / 2 - (index.left - 2) * paddingLeft
145
- const diffY = dragging.y - dragging.h / 2 - (index.top - 2) * dragging.h
146
-
147
- if (diffX < 0) {
148
- // left
149
- if (index.parent && !index.next) {
150
- newIndex = tree.move(index.id, index.parent, "after")
151
- }
152
- } else if (diffX > paddingLeft) {
153
- // right
154
- if (index.prev) {
155
- const prevNode = tree.getIndex(index.prev).node
156
- if (!prevNode.collapsed && !prevNode.leaf) {
157
- newIndex = tree.move(index.id, index.prev, "append")
158
- }
159
- }
160
- }
161
-
162
- if (newIndex) {
163
- index = newIndex
164
- newIndex.node.collapsed = collapsed
165
- dragging.id = newIndex.id
166
- }
167
-
168
- if (diffY < 0) {
169
- // up
170
- const above = tree.getNodeByTop(index.top - 1)
171
- newIndex = tree.move(index.id, above.id, "before")
172
- } else if (diffY > dragging.h) {
173
- // down
174
- if (index.next) {
175
- const below = tree.getIndex(index.next)
176
- if (below.children && below.children.length && !below.node.collapsed) {
177
- newIndex = tree.move(index.id, index.next, "prepend")
178
- } else {
179
- newIndex = tree.move(index.id, index.next, "after")
180
- }
181
- } else {
182
- const below = tree.getNodeByTop(index.top + index.height)
183
- if (below && below.parent !== index.id) {
184
- if (below.children && below.children.length && !below.node.collapsed) {
185
- newIndex = tree.move(index.id, below.id, "prepend")
186
- } else {
187
- newIndex = tree.move(index.id, below.id, "after")
188
- }
189
- }
190
- }
191
- }
192
-
193
- if (newIndex) {
194
- newIndex.node.collapsed = collapsed
195
- dragging.id = newIndex.id
196
- }
197
-
198
- this.setState({
199
- tree: tree,
200
- dragging: dragging,
201
- })
202
- }
203
-
204
- dragEnd = () => {
205
- this.setState({
206
- dragging: {
207
- id: null,
208
- x: null,
209
- y: null,
210
- w: null,
211
- h: null,
212
- },
213
- })
214
-
215
- this.change(this.state.tree)
216
- window.removeEventListener("mousemove", this.dragMouseMove)
217
- window.removeEventListener("mouseup", this.dragEnd)
218
- }
219
-
220
- change = (tree: Object) => {
221
- this._updated = true
222
- if (this.props.onChange) this.props.onChange(tree.obj)
223
- }
224
-
225
- toggleCollapse = (nodeId: number) => {
226
- const {tree} = this.state
227
- const index = tree.getIndex(nodeId)
228
- const node = index.node
229
- node.collapsed = !node.collapsed
230
- tree.updateNodesPosition()
231
-
232
- this.setState({tree})
233
-
234
- this.change(tree)
235
- }
236
-
237
- render() {
238
- const tree = this.state.tree
239
- const dragging = this.state.dragging
240
-
241
- return (
242
- <div id={this.props.id} className="m-tree" style={this.props.style || {}}>
243
- {this.renderDraggingElement()}
244
- <Node
245
- tree={tree}
246
- index={tree.getIndex(1)}
247
- key={1}
248
- paddingLeft={this.props.paddingLeft}
249
- onDragStart={this.props.disableDragging ? null : this.dragStart}
250
- onCollapse={this.toggleCollapse}
251
- dragging={dragging?.id}
252
- shouldHideNode={this.props.shouldHideNode}
253
- />
254
- </div>
255
- )
256
- }
257
- }
package/ui/Tree/model.js DELETED
@@ -1,71 +0,0 @@
1
- /* @flow */
2
- /* eslint-disable */
3
- const Tree = require("js-tree")
4
-
5
- const proto = Tree.prototype
6
-
7
- proto.updateNodesPosition = function () {
8
- let top = 1
9
- let left = 1
10
- let root = this.getIndex(1)
11
- let self = this
12
-
13
- root.top = top++
14
- root.left = left++
15
-
16
- if (root.children && root.children.length) {
17
- walk(root.children, root, left, root.node.collapsed)
18
- }
19
-
20
- function walk(children, parent, left, collapsed) {
21
- var height = 1
22
- children.forEach(function (id) {
23
- var node = self.getIndex(id)
24
- if (collapsed) {
25
- node.top = null
26
- node.left = null
27
- } else {
28
- node.top = top++
29
- node.left = left
30
- }
31
-
32
- if (node.children && node.children.length) {
33
- height += walk(node.children, node, left + 1, collapsed || node.node.collapsed)
34
- } else {
35
- node.height = 1
36
- height += 1
37
- }
38
- })
39
-
40
- if (parent.node.collapsed) parent.height = 1
41
- else parent.height = height
42
- return parent.height
43
- }
44
- }
45
-
46
- proto.move = function (fromId, toId, placement) {
47
- if (fromId === toId || toId === 1) return
48
-
49
- var obj = this.remove(fromId)
50
- var index = null
51
-
52
- if (placement === "before") index = this.insertBefore(obj, toId)
53
- else if (placement === "after") index = this.insertAfter(obj, toId)
54
- else if (placement === "prepend") index = this.prepend(obj, toId)
55
- else if (placement === "append") index = this.append(obj, toId)
56
-
57
- // todo: perf
58
- this.updateNodesPosition()
59
- return index
60
- }
61
-
62
- proto.getNodeByTop = function (top) {
63
- var indexes = this.indexes
64
- for (var id in indexes) {
65
- if (indexes.hasOwnProperty(id)) {
66
- if (indexes[id].top === top) return indexes[id]
67
- }
68
- }
69
- }
70
-
71
- module.exports = Tree
package/ui/Tree/node.js DELETED
@@ -1,112 +0,0 @@
1
- /* @flow */
2
- import React, {Component} from "react"
3
-
4
-
5
- type Props = {|
6
- paddingLeft: number,
7
- index: Object,
8
- tree: Object,
9
- dragging?: ?boolean,
10
- onDragStart?: ?Function,
11
- onCollapse?: ?Function,
12
- shouldHideNode?: () => boolean,
13
- |}
14
-
15
- type State = {}
16
-
17
- export default class UITreeNode extends Component<Props, State> {
18
- innerRef = React.createRef<HTMLDivElement>()
19
-
20
- renderCollapse = () => {
21
- const {index} = this.props
22
-
23
- if (index.children && index.children.length) {
24
- const {collapsed} = index.node
25
-
26
- return (
27
- <div
28
- className={cx("tree-collapse", collapsed ? "caret-right" : "caret-down")}
29
- onMouseDown={(e) => e.stopPropagation()}
30
- onClick={this.handleCollapse}
31
- />
32
- )
33
- }
34
-
35
- return null
36
- }
37
-
38
- renderChildren = () => {
39
- const {index, tree, dragging} = this.props
40
-
41
- if (index.children && index.children.length) {
42
- const childrenStyles = {
43
- paddingLeft: this.props.paddingLeft,
44
- }
45
-
46
- return (
47
- <div className="children" style={childrenStyles}>
48
- {index.children.map((child) => {
49
- const childIndex = tree.getIndex(child)
50
-
51
- return (
52
- <UITreeNode
53
- tree={tree}
54
- index={childIndex}
55
- key={childIndex.id}
56
- dragging={dragging}
57
- paddingLeft={this.props.paddingLeft}
58
- onCollapse={this.props.onCollapse}
59
- onDragStart={this.props.onDragStart}
60
- />
61
- )
62
- })}
63
- </div>
64
- )
65
- }
66
-
67
- return null
68
- }
69
-
70
- handleCollapse = (e: SyntheticMouseEvent<HTMLElement>) => {
71
- e.stopPropagation()
72
- const nodeId = this.props.index.id
73
-
74
- if (this.props.onCollapse) {
75
- this.props.onCollapse(nodeId)
76
- }
77
- }
78
-
79
- handleMouseDown = (e: SyntheticMouseEvent<HTMLDivElement>) => {
80
- const nodeId = this.props.index.id
81
- const dom = this.innerRef.current
82
-
83
- if (this.props.onDragStart) {
84
- this.props.onDragStart(nodeId, dom, e)
85
- }
86
- }
87
-
88
- render() {
89
- const {tree, index, dragging, shouldHideNode} = this.props
90
- const {node} = index
91
- const styles = {}
92
-
93
- if (typeof shouldHideNode === "function" && shouldHideNode(index)) {
94
- return this.renderChildren()
95
- }
96
-
97
- return (
98
- <div
99
- className={cx("m-node", {
100
- placeholder: index.id === dragging,
101
- })}
102
- style={styles}
103
- >
104
- <div className="d-flex flex-row align-items-center inner" ref={this.innerRef} onMouseDown={this.handleMouseDown}>
105
- {this.renderCollapse()}
106
- {tree.renderNode(node)}
107
- </div>
108
- {node.collapsed ? null : this.renderChildren()}
109
- </div>
110
- )
111
- }
112
- }