@teselagen/ove 0.7.28 → 0.7.29

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 (285) hide show
  1. package/index.cjs.js +1055 -996
  2. package/index.es.js +1055 -996
  3. package/index.umd.js +189036 -0
  4. package/ove.css +1 -1
  5. package/package.json +2 -6
  6. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +1 -1
  7. package/AASliver.js +0 -187
  8. package/AddLaddersDialog.js +0 -82
  9. package/AdditionalCutsiteInfoDialog.js +0 -599
  10. package/AlignmentVisibilityTool.js +0 -105
  11. package/AnnotationContainerHolder.js +0 -20
  12. package/AnnotationPositioner.js +0 -27
  13. package/AutoAnnotate.js +0 -501
  14. package/AutoAnnotateBpMatchingDialog.js +0 -208
  15. package/Axis.js +0 -151
  16. package/AxisNumbers.js +0 -35
  17. package/Browser.js +0 -106
  18. package/Caret.js +0 -63
  19. package/Chromatogram.js +0 -293
  20. package/CircularDnaSequence.js +0 -73
  21. package/CircularZoomMinimap.js +0 -16
  22. package/ColorPicker.js +0 -30
  23. package/CommandHotkeyHandler.js +0 -44
  24. package/CreateAnnotationsPage.js +0 -98
  25. package/Cutsite.js +0 -18
  26. package/CutsiteProperties.js +0 -176
  27. package/CutsiteSelectionLayers.js +0 -47
  28. package/Cutsites.js +0 -271
  29. package/DeletionLayer.js +0 -28
  30. package/DropHandler.css +0 -21
  31. package/DropHandler.js +0 -64
  32. package/EditCaretPosition.js +0 -234
  33. package/EditTrackNameDialog.js +0 -30
  34. package/Feature.js +0 -83
  35. package/FeatureProperties.js +0 -6
  36. package/FillWindow.js +0 -47
  37. package/GenbankView.js +0 -74
  38. package/GeneralProperties.js +0 -117
  39. package/GenericAnnotationProperties.js +0 -406
  40. package/GlobalDialog.js +0 -73
  41. package/GlobalDialogUtils.js +0 -110
  42. package/GoToDialog.js +0 -25
  43. package/HorizontalPanelDragHandle.js +0 -35
  44. package/Keyboard.js +0 -85
  45. package/Labels.js +0 -327
  46. package/Ladder.css +0 -20
  47. package/Ladder.js +0 -303
  48. package/MeltingTemp.js +0 -85
  49. package/Menlo.ttf +0 -0
  50. package/Minimap.js +0 -515
  51. package/Mismatches.js +0 -134
  52. package/Monaco.ttf +0 -0
  53. package/MultipleSeqsDetectedOnImportDialog.js +0 -74
  54. package/Orf.js +0 -109
  55. package/OrfProperties.js +0 -117
  56. package/Orfs.js +0 -35
  57. package/PCRTool.js +0 -179
  58. package/PairwiseAlignmentView.js +0 -68
  59. package/Part.js +0 -34
  60. package/PartProperties.js +0 -9
  61. package/PassThrough.js +0 -3
  62. package/PerformantSelectionLayer.js +0 -32
  63. package/PinchHelper.js +0 -24
  64. package/PointedAnnotation.js +0 -347
  65. package/PositionAnnotationOnCircle.js +0 -26
  66. package/Primer.js +0 -41
  67. package/PrimerProperties.js +0 -19
  68. package/ReflexContainer.js +0 -802
  69. package/ReflexElement.js +0 -160
  70. package/ReflexEvents.js +0 -77
  71. package/ReflexSplitter.js +0 -205
  72. package/RenameSequenceDialog.js +0 -7
  73. package/RotateCircularViewSlider.js +0 -93
  74. package/SelectDialog.js +0 -150
  75. package/SequenceName.js +0 -15
  76. package/SimpleCircularOrLinearView.js +0 -381
  77. package/SimpleOligoPreview.js +0 -39
  78. package/SingleEnzymeCutsiteInfo.js +0 -139
  79. package/ToolbarItem.js +0 -192
  80. package/Translation.js +0 -198
  81. package/TranslationProperties.js +0 -149
  82. package/UncontrolledSliderWithPlusMinusBtns.css +0 -5
  83. package/UncontrolledSliderWithPlusMinusBtns.js +0 -134
  84. package/VeTopRightContainer.js +0 -12
  85. package/ZoomCircularViewSlider.js +0 -62
  86. package/ZoomLinearView.js +0 -47
  87. package/addAlignment.js +0 -6
  88. package/addMetaToActionCreators.js +0 -12
  89. package/addWrappedAddons.js +0 -20
  90. package/alignmentTool.js +0 -503
  91. package/alignments.js +0 -379
  92. package/annotationLabelVisibility.js +0 -2
  93. package/annotationSearchSelector.js +0 -24
  94. package/annotationTypes.js +0 -35
  95. package/annotationVisibility.js +0 -196
  96. package/annotationsToSupport.js +0 -104
  97. package/arrayToObjWithIds.js +0 -17
  98. package/arrayUtils.js +0 -19
  99. package/array_move.js +0 -10
  100. package/calculateTickMarkPositionsForGivenRange.js +0 -47
  101. package/caretPosition.js +0 -27
  102. package/cdsFeaturesSelector.js +0 -9
  103. package/charWidth.js +0 -22
  104. package/circular.js +0 -19
  105. package/circularSelector.js +0 -4
  106. package/clickAndDragUtils.js +0 -576
  107. package/coerceInitialValue.js +0 -7
  108. package/combineReducersDontIgnoreKeys.js +0 -12
  109. package/commandUtils.js +0 -20
  110. package/constants.js +0 -2
  111. package/copyOptions.js +0 -34
  112. package/createFragmentLines.js +0 -120
  113. package/createMergedDefaultStateReducer.js +0 -30
  114. package/createMetaAction.js +0 -12
  115. package/createSequenceInputPopup.js +0 -290
  116. package/createSequenceInputPopupStyle.css +0 -87
  117. package/createSimpleDialog.js +0 -89
  118. package/createYourOwnEnzyme.js +0 -39
  119. package/cutsiteLabelColorSelector.js +0 -6
  120. package/cutsiteTool.js +0 -88
  121. package/cutsitesByRangeSelector.js +0 -5
  122. package/cutsitesSelector.js +0 -61
  123. package/darkmode.css +0 -98
  124. package/defaultConfig.js +0 -150
  125. package/deletionLayers.js +0 -36
  126. package/description.js +0 -21
  127. package/digestTool.js +0 -34
  128. package/dnaToColor.js +0 -17
  129. package/downloadTool.js +0 -39
  130. package/draggableClassnames.js +0 -5
  131. package/drawAnnotations.js +0 -440
  132. package/drawDirectedPiePiece.js +0 -142
  133. package/editTool.js +0 -49
  134. package/editorSelector.js +0 -2
  135. package/editorUtils.js +0 -205
  136. package/estimateRowHeight.js +0 -184
  137. package/featureLengthsToHide.js +0 -27
  138. package/featureTool.js +0 -34
  139. package/features.js +0 -19
  140. package/featuresSelector.js +0 -8
  141. package/filteredCutsitesSelector.js +0 -136
  142. package/filteredFeaturesSelector.js +0 -32
  143. package/filteredPartsSelector.js +0 -57
  144. package/filteredPrimersSelector.js +0 -27
  145. package/filteredRestrictionEnzymesSelector.js +0 -1
  146. package/find.png +0 -0
  147. package/findTool.js +0 -79
  148. package/findToolConstants.js +0 -1
  149. package/frameTranslations.js +0 -52
  150. package/fullscreen.png +0 -0
  151. package/getAdditionalEnzymesSelector.js +0 -46
  152. package/getAngleForPositionMidpoint.js +0 -3
  153. package/getAnnotationClassnames.js +0 -12
  154. package/getAnnotationNameAndStartStopString.js +0 -61
  155. package/getBpsPerRow.js +0 -19
  156. package/getCutsiteLabelHeights.js +0 -56
  157. package/getGapMap.js +0 -12
  158. package/getGaps.js +0 -27
  159. package/getInternalLabel.js +0 -40
  160. package/getOveHotkeyDefs.js +0 -12
  161. package/getPairwiseOverviewLinearViewOptions.js +0 -38
  162. package/getRangeAnglesSpecial.js +0 -12
  163. package/getStructuredBases.js +0 -97
  164. package/getTrackFromEvent.js +0 -25
  165. package/getVisibleStartEnd.js +0 -7
  166. package/getXStartAndWidthFromNonCircularRange.js +0 -12
  167. package/getXStartAndWidthOfRangeWrtRow.js +0 -27
  168. package/getXStartAndWidthOfRowAnnotation.js +0 -19
  169. package/getYOffset.js +0 -15
  170. package/hoveredAnnotation.js +0 -24
  171. package/importTool.js +0 -27
  172. package/index.js +0 -71
  173. package/inlineFindTool.js +0 -38
  174. package/isElementInViewport.js +0 -29
  175. package/isEnzymeFilterAndSelector.js +0 -1
  176. package/isTargetWithinEl.js +0 -6
  177. package/labelLineIntensity.js +0 -25
  178. package/labelSize.js +0 -23
  179. package/ladderDefaults.js +0 -25
  180. package/lastSavedId.js +0 -20
  181. package/lineageLines.js +0 -11
  182. package/linear.png +0 -0
  183. package/makeStore.js +0 -34
  184. package/massageTickSpacing.js +0 -19
  185. package/materiallyAvailable.js +0 -19
  186. package/middleware.js +0 -112
  187. package/minimumOrfSize.js +0 -24
  188. package/minimumOrfSizeSelector.js +0 -2
  189. package/modalActions.js +0 -3
  190. package/moveCaret.js +0 -58
  191. package/name.js +0 -19
  192. package/normalizeAngle.js +0 -3
  193. package/normalizeAngleRange.js +0 -9
  194. package/oligoTool.js +0 -30
  195. package/onlyUpdateForKeysDeep.js +0 -31
  196. package/orfFrameToColorMap.js +0 -10
  197. package/orfTool.js +0 -136
  198. package/orfsSelector.js +0 -15
  199. package/panelsShown.js +0 -294
  200. package/partLengthsToHide.js +0 -23
  201. package/partOverhangs.js +0 -6
  202. package/partTagSearch.js +0 -69
  203. package/partTool.js +0 -45
  204. package/parts.js +0 -19
  205. package/partsSelector.js +0 -8
  206. package/pie.png +0 -0
  207. package/polarToSpecialCartesian.js +0 -7
  208. package/positionCutsites.js +0 -6
  209. package/prepareRowData.js +0 -64
  210. package/primerBases.js +0 -221
  211. package/primerLengthsToHide.js +0 -27
  212. package/primers.js +0 -19
  213. package/primersSelector.js +0 -8
  214. package/print.png +0 -0
  215. package/printTool.js +0 -31
  216. package/propertiesTool.js +0 -40
  217. package/proteinUtils.js +0 -3
  218. package/pureNoFunc.js +0 -18
  219. package/readOnly.js +0 -25
  220. package/redoTool.js +0 -30
  221. package/reflex-styles.css +0 -128
  222. package/reflex-styles.css.map +0 -9
  223. package/relaxLabelAngles.js +0 -157
  224. package/relaxLabels_DEPRECATED.js +0 -105
  225. package/replacementLayers.js +0 -36
  226. package/restrictionEnzymes.js +0 -52
  227. package/restrictionEnzymesSelector.js +0 -34
  228. package/rowviewContants.js +0 -3
  229. package/ruler.css +0 -89
  230. package/save.png +0 -0
  231. package/saveTool.js +0 -44
  232. package/searchLayersSelector.js +0 -71
  233. package/selectedAnnotations.js +0 -89
  234. package/selectedAnnotationsSelector.js +0 -1
  235. package/selectedCutsitesSelector.js +0 -21
  236. package/selectedPartTags.js +0 -21
  237. package/selectionLayer.js +0 -25
  238. package/sequence.js +0 -12
  239. package/sequenceDataHistory.js +0 -43
  240. package/sequenceDataSelector.js +0 -2
  241. package/sequenceLengthSelector.js +0 -5
  242. package/sequenceSelector.js +0 -4
  243. package/sharedActionCreators.js +0 -0
  244. package/shouldFlipText.js +0 -4
  245. package/shouldRerender.js +0 -27
  246. package/showFileDialog.js +0 -25
  247. package/showGCContent.js +0 -23
  248. package/show_cut_sites.png +0 -0
  249. package/show_features.png +0 -0
  250. package/show_orfs.png +0 -0
  251. package/show_primers.png +0 -0
  252. package/simpleDialog.css +0 -13
  253. package/specialCutsiteFilterOptions.js +0 -22
  254. package/style.css +0 -10
  255. package/tagsToBoldSelector.js +0 -2
  256. package/toggle_views.svg +0 -1
  257. package/toolBar.js +0 -23
  258. package/translationSearchMatchesSelector.js +0 -14
  259. package/translations.js +0 -20
  260. package/translationsRawSelector.js +0 -8
  261. package/translationsSelector.js +0 -137
  262. package/typeField.js +0 -24
  263. package/undoTool.js +0 -30
  264. package/updateEditor.js +0 -200
  265. package/updateLabelsForInViewFeatures.js +0 -55
  266. package/updateLabelsForInViewFeaturesCircView.js +0 -41
  267. package/updateTrackHelper.js +0 -58
  268. package/uppercaseSequenceMapFont.js +0 -25
  269. package/upsertDeleteActionGenerator.js +0 -31
  270. package/useAAColorType.js +0 -8
  271. package/useAdditionalOrfStartCodons.js +0 -24
  272. package/useAnnotationLimits.js +0 -42
  273. package/useChromatogramPrefs.js +0 -31
  274. package/useFormValue.js +0 -7
  275. package/useLadders.js +0 -6
  276. package/useMeltingTemp.js +0 -7
  277. package/useTmType.js +0 -10
  278. package/userDefinedHandlersAndOpts.js +0 -61
  279. package/utils.js +0 -37
  280. package/versionHistory.js +0 -26
  281. package/versionHistoryTool.js +0 -21
  282. package/viewSubmenu.js +0 -479
  283. package/visibilityTool.js +0 -39
  284. package/withHover.js +0 -113
  285. package/withRestrictionEnzymes.js +0 -15
package/ove.css CHANGED
@@ -9676,7 +9676,7 @@ body:not(.drag-active)
9676
9676
  display: flex;
9677
9677
  flex-wrap: wrap;
9678
9678
  align-items: center;
9679
- margin-top: 20px;
9679
+ margin-top: 10px;
9680
9680
  }
9681
9681
 
9682
9682
  .ReactTable {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ove",
3
- "version": "0.7.28",
3
+ "version": "0.7.29",
4
4
  "main": "./src/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@teselagen/sequence-utils": "0.3.31",
15
15
  "@teselagen/range-utils": "0.3.13",
16
- "@teselagen/ui": "0.8.6",
16
+ "@teselagen/ui": "0.8.6-beta.23",
17
17
  "@teselagen/file-utils": "0.3.20",
18
18
  "@teselagen/bio-parsers": "0.4.28",
19
19
  "@blueprintjs/core": "3.54.0",
@@ -62,10 +62,6 @@
62
62
  "biomsa": "^0.2.4",
63
63
  "shortid": "2.2.16",
64
64
  "@use-gesture/react": "10.3.0",
65
- "vite": "^5.2.11",
66
- "@vitejs/plugin-react": "^4.3.0",
67
- "vite-plugin-libcss": "^1.1.1",
68
- "vite-tsconfig-paths": "^4.3.2",
69
65
  "@playwright/test": "^1.44.1"
70
66
  },
71
67
  "license": "MIT"
@@ -45,7 +45,7 @@ class TranslationProperties extends React.Component {
45
45
  let aaString = "";
46
46
  for (let i = 0; i < translation.aminoAcids.length; i++) {
47
47
  // sometimes the `translation.aminoAcids[i].aminoAcid` is null
48
- aaString += translation.aminoAcids[i].aminoAcid?.value || '';
48
+ aaString += translation.aminoAcids[i].aminoAcid?.value || "";
49
49
  }
50
50
  return {
51
51
  ...translation,
package/AASliver.js DELETED
@@ -1,187 +0,0 @@
1
- // import PropTypes from "prop-types";
2
- import React from "react";
3
- import pureNoFunc from "../../utils/pureNoFunc";
4
-
5
- function AASliver(props) {
6
- const {
7
- forward,
8
- aminoAcidIndex,
9
- showAAColors = true,
10
- onClick,
11
- onContextMenu,
12
- width,
13
- height,
14
- isFiller,
15
- isTruncatedStart,
16
- isTruncatedEnd,
17
- relativeAAPositionInTranslation,
18
- title,
19
- color,
20
- showAminoAcidNumbers,
21
- letter
22
- } = props;
23
-
24
- if (letter === "-") {
25
- return null;
26
- }
27
-
28
- const dirX1 = 1 / Math.sqrt(26);
29
- const dirY1 = 5 * dirX1;
30
-
31
- const dirX2 = 16 / Math.sqrt(2756);
32
- const dirY2 = 50 / Math.sqrt(2756);
33
-
34
- const roundedCorner = 15;
35
- let path = "";
36
- path = isFiller
37
- ? "25,0 49,0 60,50 49,100 25,100 38,50 25,0"
38
- : isTruncatedStart
39
- ? // ? "0,0 50,0 60,50 50,100 00,100 16,50 0,0"
40
- `M ${roundedCorner / 3}, 0
41
- L ${50 - roundedCorner / 3}, 0
42
- Q 50 0 ${50 + roundedCorner * dirX1} ${roundedCorner * dirY1}
43
- L ${60 - roundedCorner * dirX1}, ${50 - roundedCorner * dirY1}
44
- Q 60 50 ${60 - roundedCorner * dirX1} ${
45
- 50 + roundedCorner * dirY1
46
- }
47
- L ${50 + roundedCorner * dirX1}, ${
48
- 100 - roundedCorner * dirY1
49
- }
50
- Q 50 100 ${50 - roundedCorner} 100
51
- L ${roundedCorner / 3}, 100
52
- Q 0 100 ${roundedCorner * dirX2} ${
53
- 100 - roundedCorner * dirY2
54
- }
55
- L ${16 - roundedCorner * dirX2}, ${50 + roundedCorner * dirY2}
56
- Q 16 50 ${16 - roundedCorner * dirX2} ${
57
- 50 - roundedCorner * dirY2
58
- }
59
- L ${roundedCorner * dirX2}, ${roundedCorner * dirY2}
60
- Q 0 0 ${roundedCorner / 3} 0
61
- z`
62
- : isTruncatedEnd
63
- ? // ? "24,0 74,0 84,50 74,100 24,100 40,50 24,0"
64
- `M ${24 + roundedCorner / 3}, 0
65
- L ${74 - roundedCorner / 3}, 0
66
- Q 74 0 ${74 + roundedCorner * dirX1} ${roundedCorner * dirY1}
67
- L ${84 - roundedCorner * dirX1}, ${50 - roundedCorner * dirY1}
68
- Q 84 50 ${84 - roundedCorner * dirX1} ${
69
- 50 + roundedCorner * dirY1
70
- }
71
- L ${74 + roundedCorner * dirX1}, ${
72
- 100 - roundedCorner * dirY1
73
- }
74
- Q 74 100 ${74 - roundedCorner} 100
75
- L ${24 + roundedCorner / 3}, 100
76
- Q 24 100 ${24 + roundedCorner * dirX2} ${
77
- 100 - roundedCorner * dirY2
78
- }
79
- L ${40 - roundedCorner * dirX2}, ${50 + roundedCorner * dirY2}
80
- Q 40 50 ${40 - roundedCorner * dirX2}, ${
81
- 50 - roundedCorner * dirY2
82
- }
83
- L ${24 + roundedCorner * dirX2}, ${roundedCorner * dirY2}
84
- Q 24 0 ${24 + roundedCorner / 3} 0
85
- z`
86
- : `M ${roundedCorner / 3}, 0
87
- L ${74 - roundedCorner / 3}, 0
88
- Q 74 0 ${74 + roundedCorner * dirX1} ${roundedCorner * dirY1}
89
- L ${84 - roundedCorner * dirX1}, ${50 - roundedCorner * dirY1}
90
- Q 84 50 ${84 - roundedCorner * dirX1} ${
91
- 50 + roundedCorner * dirY1
92
- }
93
- L ${74 + roundedCorner * dirX1}, ${
94
- 100 - roundedCorner * dirY1
95
- }
96
- Q 74 100 ${74 - roundedCorner / 3} 100
97
- L ${roundedCorner / 3}, 100
98
- Q 0 100 ${roundedCorner * dirX2} ${
99
- 100 - roundedCorner * dirY2
100
- }
101
- L ${16 - roundedCorner * dirX2}, ${50 + roundedCorner * dirY2}
102
- Q 16 50 ${16 - roundedCorner * dirX2}, ${
103
- 50 - roundedCorner * dirY2
104
- }
105
- L ${roundedCorner * dirX2}, ${roundedCorner * dirY2}
106
- Q 0 0 ${roundedCorner / 3} 0
107
- z`;
108
- return (
109
- <g
110
- onClick={onClick}
111
- onContextMenu={onContextMenu}
112
- transform={
113
- "scale(" +
114
- (width / 100) * 1.25 +
115
- ", " +
116
- height / 100 +
117
- ") translate(" +
118
- ((forward ? -20 : -50) +
119
- ((relativeAAPositionInTranslation - 1) * 100) / 1.25) +
120
- ",0)"
121
- }
122
- >
123
- <title>{title}</title>
124
- {showAAColors &&
125
- (isFiller ? (
126
- <polyline
127
- className={letter}
128
- transform={forward ? "scale(3,1)" : "translate(300,0) scale(-3,1) "}
129
- points={
130
- isFiller
131
- ? "25,0 49,0 60,50 49,100 25,100 38,50 25,0"
132
- : isTruncatedStart
133
- ? "0,0 50,0 60,50 50,100 00,100 16,50 0,0"
134
- : isTruncatedEnd
135
- ? "24,0 74,0 84,50 74,100 24,100 40,50 24,0"
136
- : "0,0 74,0 85,50 74,100 0,100 16,50 0,0"
137
- }
138
- strokeWidth="5"
139
- fill={color || "gray"}
140
- />
141
- ) : (
142
- <path
143
- className={letter}
144
- transform={forward ? "scale(3,1)" : "translate(300,0) scale(-3,1) "}
145
- d={path}
146
- strokeWidth="5"
147
- fill={color || "gray"}
148
- />
149
- ))}
150
-
151
- {/* isTruncatedEnd && isTruncatedStart is the special case of a single base exon */}
152
- {(!isFiller || (isTruncatedEnd && isTruncatedStart)) && (
153
- <text
154
- fontSize={25}
155
- stroke="black"
156
- strokeWidth={2}
157
- transform={`scale(${(3 / width) * 10},3) translate(${
158
- ((forward ? 45 : 55) * width) / 10
159
- },21)`}
160
- x="0"
161
- y="4"
162
- style={{ textAnchor: "middle" }}
163
- >
164
- {letter}
165
- </text>
166
- )}
167
-
168
- {showAminoAcidNumbers && (aminoAcidIndex + 1) % 5 === 0 && (
169
- <text
170
- fontSize={25}
171
- stroke="black"
172
- strokeWidth={2}
173
- transform={`scale(${(3 / width) * 10},3) translate(${
174
- ((forward ? 45 : 55) * width) / 10
175
- },51)`}
176
- x="0"
177
- y="4"
178
- style={{ textAnchor: "middle" }}
179
- >
180
- {aminoAcidIndex + 1}
181
- </text>
182
- )}
183
- </g>
184
- );
185
- }
186
-
187
- export default pureNoFunc(AASliver);
@@ -1,82 +0,0 @@
1
- import { FileUploadField, wrapDialog } from "@teselagen/ui";
2
- import React from "react";
3
- import { compose } from "recompose";
4
- import { reduxForm } from "redux-form";
5
- import useLadders from "../utils/useLadders";
6
- import { MenuItem } from "@blueprintjs/core";
7
- import downloadjs from "downloadjs";
8
- import { isArray } from "lodash-es";
9
- import { hideDialog } from "../GlobalDialogUtils";
10
-
11
- export const AddLaddersDialog = compose(
12
- wrapDialog({ title: "Add Ladder" }),
13
- reduxForm({ form: "AddLaddersDialog" })
14
- )(function AddLaddersDialog({ setSelectedLadder }) {
15
- const [additionalLadders, setLadders] = useLadders();
16
- return (
17
- <div className="bp3-dialog-body">
18
- <FileUploadField
19
- fileLimit={1}
20
- threeDotMenuItems={
21
- <MenuItem
22
- text="Download Example File"
23
- onClick={() => {
24
- downloadjs(
25
- `{
26
- "value": "exampleRuler",
27
- "label": "Example Ladder 2Kb",
28
- "markings": [
29
- 40000, 20000, 8000, 3000, 1500, 900, 440, 333,
30
- 222, 17
31
- ]
32
- }
33
- `,
34
- `exampleLadderFile.json`,
35
- "text/plain"
36
- );
37
- }}
38
- />
39
- }
40
- name="ladderUpload"
41
- innerText="Upload a new ladder .json file"
42
- accept={[".json"]}
43
- readBeforeUpload
44
- style={{ maxWidth: 400 }}
45
- beforeUpload={async files => {
46
- try {
47
- const newLadder = JSON.parse(files[0].parsedString);
48
- if (!newLadder) {
49
- throw new Error(
50
- "No new ladder found. Use the example file for the proper JSON format"
51
- );
52
- }
53
- if (typeof newLadder.value !== "string") {
54
- throw new Error(
55
- "Incorrect value. Use the example file for the proper JSON format"
56
- );
57
- }
58
- if (typeof newLadder.label !== "string") {
59
- throw new Error(
60
- "Incorrect label. Use the example file for the proper JSON format"
61
- );
62
- }
63
- if (!isArray(newLadder.markings)) {
64
- throw new Error(
65
- "Incorrect markings. Use the example file for the proper JSON format"
66
- );
67
- }
68
- setLadders([...additionalLadders, newLadder]);
69
- window.toastr.success(`Added New Ladder ${newLadder.label}`);
70
- setSelectedLadder(newLadder.value);
71
- } catch (e) {
72
- console.error(`e:`, e);
73
- window.toastr.error(
74
- "Something went wrong with the file upload. Check the dev console for more details. Use the example file for the proper JSON format"
75
- );
76
- }
77
- hideDialog();
78
- }}
79
- />
80
- </div>
81
- );
82
- });