@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
@@ -1,406 +0,0 @@
1
- import React from "react";
2
- import {
3
- DataTable,
4
- withSelectedEntities,
5
- CmdButton,
6
- getTagProps,
7
- getKeyedTagsAndTagOptions,
8
- DropdownButton,
9
- createCommandMenu,
10
- popoverOverflowModifiers,
11
- removeDuplicatesIcon
12
- } from "@teselagen/ui";
13
- import { map, upperFirst, pick, startCase, isFunction } from "lodash-es";
14
- import {
15
- AnchorButton,
16
- ButtonGroup,
17
- Icon,
18
- Menu,
19
- Tag,
20
- Tooltip
21
- } from "@blueprintjs/core";
22
- import { getRangeLength } from "@teselagen/range-utils";
23
- // import { Popover } from "@blueprintjs/core";
24
- // import ColorPicker from "./ColorPicker";
25
- import { connectToEditor } from "../../withEditorProps";
26
- import { compose } from "recompose";
27
- import commands from "../../commands";
28
- import { sizeSchema } from "./utils";
29
- import { showAddOrEditAnnotationDialog } from "../../GlobalDialogUtils";
30
- import { typeField } from "./typeField";
31
- import { getSequenceWithinRange } from "@teselagen/range-utils";
32
- import { getReverseComplementSequenceString } from "@teselagen/sequence-utils";
33
-
34
- const genericAnnotationProperties = ({
35
- annotationType,
36
- noType,
37
- visSubmenu,
38
- withTags,
39
- withBases,
40
- additionalFooterEls
41
- }) => {
42
- const annotationTypeUpper = upperFirst(annotationType);
43
- class AnnotationProperties extends React.Component {
44
- constructor(props) {
45
- super(props);
46
- this.commands = commands(this);
47
- }
48
- onRowSelect = ([record]) => {
49
- if (!record) return;
50
- const { dispatch, editorName } = this.props;
51
- dispatch({
52
- type: "SELECTION_LAYER_UPDATE",
53
- payload: record,
54
- meta: {
55
- editorName
56
- }
57
- });
58
- };
59
- render() {
60
- const {
61
- readOnly,
62
- annotations = {},
63
- annotationVisibility,
64
- sequenceLength,
65
- selectionLayer,
66
- sequence,
67
- isProtein,
68
- allPartTags,
69
- annotationPropertiesSelectedEntities:
70
- _annotationPropertiesSelectedEntities,
71
- selectedAnnotationId
72
- } = this.props;
73
- const annotationPropertiesSelectedEntities =
74
- _annotationPropertiesSelectedEntities.filter(a => annotations[a.id]);
75
-
76
- const deleteAnnotation = this.props[`delete${annotationTypeUpper}`];
77
-
78
- const annotationsToUse = map(annotations, annotation => {
79
- return {
80
- ...annotation,
81
- ...(annotation.strand === undefined && {
82
- strand: annotation.forward ? 1 : -1
83
- }),
84
- size: getRangeLength(annotation, sequenceLength)
85
- };
86
- });
87
-
88
- const keyedPartTags = getKeyedTagsAndTagOptions(allPartTags) ?? {};
89
-
90
- this.schema = {
91
- fields: [
92
- {
93
- path: "name",
94
- type: "string",
95
-
96
- render: (name, ann) => {
97
- const checked =
98
- !this.props.annotationVisibility[
99
- `${annotationType}IndividualToHide`
100
- ][ann.id];
101
-
102
- return (
103
- <>
104
- <Icon
105
- data-tip="Hide/Show"
106
- onClick={e => {
107
- e.stopPropagation();
108
- const upperType = startCase(annotationType);
109
- if (checked) {
110
- this.props[`hide${upperType}Individual`]([ann.id]);
111
- } else {
112
- this.props[`show${upperType}Individual`]([ann.id]);
113
- }
114
- }}
115
- style={{
116
- cursor: "pointer",
117
- marginRight: 4,
118
- marginTop: 3,
119
- color: "darkgray"
120
- }}
121
- icon={`eye-${checked ? "open" : "off"}`}
122
- ></Icon>
123
- {name}
124
- </>
125
- );
126
- }
127
- },
128
-
129
- ...(!withBases
130
- ? []
131
- : [
132
- {
133
- path: "bases",
134
- type: "string",
135
- render: (bases, primer) => {
136
- let bps = bases;
137
- if (!bases) {
138
- bps = getSequenceWithinRange(primer, this.props.sequence);
139
- if (!primer.forward) {
140
- bps = getReverseComplementSequenceString(bps);
141
- }
142
- }
143
- return bps;
144
- }
145
- }
146
- ]),
147
- ...(noType
148
- ? []
149
- : [
150
- typeField,
151
- {
152
- path: "color",
153
- type: "string",
154
- width: 50,
155
- render: color => {
156
- return (
157
- <div
158
- style={{ height: 20, width: 20, background: color }}
159
- />
160
- // <ColorPickerPopover>
161
- // <div style={{ height: 20, width: 20, background: color }} />
162
- // </ColorPickerPopover>
163
- );
164
- }
165
- }
166
- ]),
167
- sizeSchema(this.props.isProtein),
168
- ...(withTags && this.props.allPartTags
169
- ? [
170
- {
171
- path: "tags",
172
- type: "string",
173
- getValueToFilterOn: o => {
174
- const toRet = (o.tags || [])
175
- .map(tagId => {
176
- const tag = keyedPartTags[tagId];
177
- if (!tag) return "";
178
- return tag.label;
179
- })
180
- .join(" ");
181
- return toRet;
182
- },
183
- render: tags => {
184
- return (
185
- <div style={{ display: "flex" }}>
186
- {(tags || []).map((tagId, i) => {
187
- const tag = keyedPartTags[tagId];
188
- if (!tag) return null;
189
- return <Tag key={i} {...getTagProps(tag)}></Tag>;
190
- })}
191
- </div>
192
- );
193
- }
194
- }
195
- ]
196
- : []),
197
- { path: "strand", type: "number" }
198
- ]
199
- };
200
-
201
- return (
202
- <DataTable
203
- topLeftItems={getVisFilter(
204
- createCommandMenu(
205
- isFunction(visSubmenu) ? visSubmenu(this.props) : visSubmenu,
206
- this.commands,
207
- {
208
- useTicks: true
209
- }
210
- )
211
- )}
212
- annotationPropertiesSelectedEntities={
213
- annotationPropertiesSelectedEntities
214
- }
215
- leftOfSearchBarItems={
216
- <>
217
- {!readOnly && (
218
- <ButtonGroup style={{ marginTop: 3, marginRight: 4 }}>
219
- <Tooltip
220
- position="top"
221
- modifiers={popoverOverflowModifiers}
222
- content="New"
223
- >
224
- <AnchorButton
225
- disabled={!sequenceLength}
226
- icon="plus"
227
- className="tgNewAnnBtn"
228
- onClick={() => {
229
- showAddOrEditAnnotationDialog({
230
- type: annotationType,
231
- annotation: pick(
232
- selectionLayer,
233
- "start",
234
- "end",
235
- "forward"
236
- )
237
- });
238
- }}
239
- ></AnchorButton>
240
- </Tooltip>
241
- <Tooltip
242
- position="top"
243
- modifiers={popoverOverflowModifiers}
244
- content="Edit"
245
- >
246
- <AnchorButton
247
- onClick={() => {
248
- showAddOrEditAnnotationDialog({
249
- type: annotationType,
250
- annotation: annotationPropertiesSelectedEntities[0]
251
- });
252
- }}
253
- disabled={
254
- annotationPropertiesSelectedEntities.length !== 1
255
- }
256
- icon="edit"
257
- ></AnchorButton>
258
- </Tooltip>
259
-
260
- {["feature"].includes(annotationType) && (
261
- <CmdButton
262
- text=""
263
- icon="cog"
264
- data-tip="Configure Feature Types"
265
- cmd={this.commands.onConfigureFeatureTypesClick}
266
- />
267
- )}
268
- {["part", "primer", "feature"].includes(annotationType) && (
269
- <CmdButton
270
- text=""
271
- icon={removeDuplicatesIcon}
272
- data-tip="Remove Duplicates"
273
- cmd={
274
- this.commands[
275
- `showRemoveDuplicatesDialog${
276
- annotationTypeUpper + "s"
277
- }`
278
- ]
279
- }
280
- />
281
- )}
282
-
283
- {additionalFooterEls && additionalFooterEls(this.props)}
284
- <Tooltip
285
- position="top"
286
- modifiers={popoverOverflowModifiers}
287
- content="Delete"
288
- >
289
- <AnchorButton
290
- onClick={() => {
291
- deleteAnnotation(annotationPropertiesSelectedEntities);
292
- }}
293
- className="tgDeleteAnnsBtn"
294
- intent="danger"
295
- disabled={!annotationPropertiesSelectedEntities.length}
296
- icon="trash"
297
- ></AnchorButton>
298
- </Tooltip>
299
- </ButtonGroup>
300
- )}
301
- {/* {createCommandMenu(
302
- {
303
- cmd: "featureFilterIndividualCmd",
304
- // text: 'hahah',
305
- shouldDismissPopover: false
306
- },
307
- this.commands,
308
- {
309
- useTicks: true
310
- }
311
- )} */}
312
- {/* <CmdCheckbox
313
- prefix="Show "
314
- cmd={this.commands.featureFilterIndividualCmd}
315
- /> */}
316
- </>
317
- }
318
- onDoubleClick={annotation => {
319
- showAddOrEditAnnotationDialog({
320
- type: annotationType,
321
- annotation
322
- });
323
- }}
324
- withCheckboxes
325
- showFeatureIndividual={this.props.showFeatureIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
326
- hideFeatureIndividual={this.props.hideFeatureIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
327
- showPartIndividual={this.props.showPartIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
328
- hidePartIndividual={this.props.hidePartIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
329
- showPrimerIndividual={this.props.showPrimerIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
330
- hidePrimerIndividual={this.props.hidePrimerIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
331
- annotationVisibility={annotationVisibility} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
332
- featureLengthsToHide={this.props.featureLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
333
- primerLengthsToHide={this.props.primerLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
334
- partLengthsToHide={this.props.partLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
335
- sequence={sequence} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
336
- noPadding
337
- noFullscreenButton
338
- onRowSelect={this.onRowSelect}
339
- selectedIds={selectedAnnotationId}
340
- formName="annotationProperties"
341
- noRouter
342
- isProtein={isProtein}
343
- compact
344
- isInfinite
345
- schema={this.schema}
346
- entities={annotationsToUse}
347
- />
348
- );
349
- }
350
- }
351
-
352
- return compose(
353
- connectToEditor(
354
- ({
355
- readOnly,
356
- annotationVisibility = {},
357
- sequenceData,
358
- selectionLayer,
359
- featureLengthsToHide,
360
- primerLengthsToHide,
361
- partLengthsToHide
362
- }) => {
363
- return {
364
- annotationVisibility,
365
- selectionLayer,
366
- readOnly,
367
- featureLengthsToHide,
368
- primerLengthsToHide,
369
- partLengthsToHide,
370
- sequenceData,
371
- sequence: sequenceData.sequence,
372
- annotations: sequenceData[annotationType + "s"],
373
- [annotationType + "s"]: sequenceData[annotationType + "s"],
374
- sequenceLength: sequenceData.sequence.length
375
- };
376
- }
377
- ),
378
- // withEditorProps,
379
- withSelectedEntities("annotationProperties")
380
- )(AnnotationProperties);
381
- };
382
-
383
- export default genericAnnotationProperties;
384
-
385
- // const ColorPickerPopover = ({ readOnly, onColorSelect, children }) => {
386
- // return (
387
- // <Popover
388
- // disabled={readOnly}
389
- // content={<ColorPicker onColorSelect={onColorSelect} />}
390
- // >
391
- // {children}
392
- // </Popover>
393
- // );
394
- // };
395
-
396
- export function getVisFilter(submenu) {
397
- return (
398
- <DropdownButton
399
- style={{ marginTop: 3 }}
400
- icon="eye-open"
401
- className="propertiesVisFilter"
402
- data-tip="Visibility Filter"
403
- menu={<Menu>{submenu}</Menu>}
404
- ></DropdownButton>
405
- );
406
- }
package/GlobalDialog.js DELETED
@@ -1,73 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
-
3
- import { dialogHolder, hideDialog } from "./GlobalDialogUtils";
4
-
5
- import RenameSequenceDialog from "./helperComponents/RenameSequenceDialog";
6
- import PrintDialog from "./helperComponents/PrintDialog";
7
- import RemoveDuplicates from "./helperComponents/RemoveDuplicates";
8
- import { MultipleSeqsDetectedOnImportDialog } from "./helperComponents/MultipleSeqsDetectedOnImportDialog";
9
- import GoToDialog from "./helperComponents/GoToDialog";
10
- import SelectDialog from "./helperComponents/SelectDialog";
11
- import EnzymesDialog from "./helperComponents/EnzymesDialog";
12
- import CreateCustomEnzyme from "./CreateCustomEnzyme";
13
- import {
14
- AdditionalCutsiteInfoDialog,
15
- CompareEnzymeGroupsDialog
16
- } from "./CutsiteFilter/AdditionalCutsiteInfoDialog";
17
- import { AlignmentToolDialog } from "./ToolBar/alignmentTool";
18
- import MergeFeaturesDialog from "./helperComponents/MergeFeaturesDialog";
19
- import AddOrEditPartDialog from "./helperComponents/AddOrEditPartDialog";
20
- import AddOrEditFeatureDialog from "./helperComponents/AddOrEditFeatureDialog";
21
- import AddOrEditPrimerDialog from "./helperComponents/AddOrEditPrimerDialog";
22
-
23
- const Dialogs = {
24
- RenameSequenceDialog,
25
- PrintDialog,
26
- MultipleSeqsDetectedOnImportDialog,
27
- RemoveDuplicates,
28
- GoToDialog,
29
- SelectDialog,
30
- EnzymesDialog,
31
- CreateCustomEnzyme,
32
- AdditionalCutsiteInfoDialog,
33
- CompareEnzymeGroupsDialog,
34
- AlignmentToolDialog,
35
- MergeFeaturesDialog,
36
- AddOrEditPartDialog,
37
- AddOrEditFeatureDialog,
38
- AddOrEditPrimerDialog
39
- };
40
-
41
- export function GlobalDialog(props) {
42
- const { dialogOverrides = {}, editorName } = props;
43
- const [uniqKey, setUniqKeyToForceRerender] = useState();
44
- useEffect(() => {
45
- //on unmount, clear the global dialog state..
46
- return () => {
47
- hideDialog();
48
- };
49
- }, []);
50
- if (
51
- dialogHolder.editorName &&
52
- editorName &&
53
- dialogHolder.editorName !== editorName
54
- ) {
55
- return null;
56
- }
57
- dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
58
- const Comp =
59
- dialogHolder.CustomModalComponent ||
60
- dialogOverrides[dialogHolder.overrideName] ||
61
- Dialogs[dialogHolder.dialogType];
62
- if (!Comp) return null;
63
-
64
- return (
65
- <Comp
66
- key={uniqKey}
67
- hideDialog={hideDialog}
68
- hideModal={hideDialog}
69
- {...props}
70
- {...dialogHolder.props}
71
- ></Comp>
72
- );
73
- }
@@ -1,110 +0,0 @@
1
- import shortid from "shortid";
2
-
3
- import { cloneDeep, startCase } from "lodash-es";
4
- import { convertRangeTo1Based } from "@teselagen/range-utils";
5
-
6
- export const dialogHolder = {};
7
- //if an overrideName is passed, then that dialog can be overridden if an overriding dialog is passed as a prop to the <Editor/>
8
- export function showDialog({
9
- ModalComponent,
10
- dialogType,
11
- props,
12
- overrideName
13
- }) {
14
- dialogHolder.dialogType = dialogType;
15
- if (!dialogHolder.dialogType && ModalComponent) {
16
- dialogHolder.dialogType = "TGCustomModal";
17
- }
18
- // check if focused element in the dom is within a given editor and add an editor prop to the dialog
19
- if (document.activeElement && document.activeElement.closest(".veEditor")) {
20
- let editorName;
21
- document.activeElement
22
- .closest(".veEditor")
23
- ?.className.split(" ")
24
- .forEach(c => {
25
- if (!c.trim()) return;
26
- if (
27
- !c.trim().includes("veEditor") &&
28
- !c.trim().includes("previewModeFullscreen")
29
- ) {
30
- editorName = c;
31
- }
32
- });
33
- dialogHolder.editorName = editorName;
34
- }
35
-
36
- dialogHolder.CustomModalComponent = ModalComponent;
37
- dialogHolder.props = props;
38
- dialogHolder.overrideName = overrideName;
39
- dialogHolder.setUniqKeyToForceRerender(shortid());
40
- }
41
- export function hideDialog() {
42
- delete dialogHolder.dialogType;
43
- delete dialogHolder.CustomModalComponent;
44
- delete dialogHolder.props;
45
- delete dialogHolder.overrideName;
46
- delete dialogHolder.editorName;
47
- dialogHolder.setUniqKeyToForceRerender();
48
- }
49
-
50
- const typeToDialogType = {
51
- part: "AddOrEditPartDialog",
52
- feature: "AddOrEditFeatureDialog",
53
- primer: "AddOrEditPrimerDialog"
54
- };
55
-
56
- export function showAddOrEditAnnotationDialog({
57
- type,
58
- annotation: _annotation
59
- }) {
60
- // AddOrEditPartDialog
61
- // AddOrEditFeatureDialog
62
- // AddOrEditPrimerDialog
63
- const dialogType = typeToDialogType[type];
64
- if (Object.values(typeToDialogType).includes(dialogHolder.dialogType)) {
65
- return;
66
- }
67
- const nameUpper = startCase(type);
68
- const annotation = cloneDeep(_annotation);
69
- if (_annotation.isWrappedAddon) {
70
- delete annotation.isWrappedAddon;
71
- delete annotation.rangeTypeOverride;
72
- annotation.start = _annotation.end + 1;
73
- annotation.end = _annotation.start - 1;
74
- }
75
- const forward =
76
- annotation.strand === -1
77
- ? false
78
- : annotation.forward !== undefined
79
- ? !!annotation.forward
80
- : true;
81
- showDialog({
82
- overrideName: `AddOrEdit${nameUpper}DialogOverride`,
83
- dialogType,
84
- props: {
85
- ...(annotation.isEditLocked && {
86
- readOnly:
87
- typeof annotation.isEditLocked === "string"
88
- ? annotation.isEditLocked
89
- : "This annotation is locked"
90
- }),
91
- dialogProps: {
92
- title:
93
- annotation && annotation.id ? `Edit ${nameUpper}` : `New ${nameUpper}`
94
- },
95
- initialValues: {
96
- ...(annotation
97
- ? {
98
- ...convertRangeTo1Based(annotation),
99
- forward,
100
- arrowheadType:
101
- annotation.arrowheadType || (!forward ? "BOTTOM" : "TOP"),
102
- ...(annotation.locations && {
103
- locations: annotation.locations.map(convertRangeTo1Based)
104
- })
105
- }
106
- : {})
107
- }
108
- }
109
- });
110
- }
package/GoToDialog.js DELETED
@@ -1,25 +0,0 @@
1
- import createSimpleDialog from "./createSimpleDialog";
2
- import { NumericInputField } from "@teselagen/ui";
3
- import { get } from "lodash-es";
4
- import { tryToRefocusEditor } from "../utils/editorUtils";
5
-
6
- export default createSimpleDialog({
7
- formName: "goToDialog",
8
- fields: [
9
- {
10
- name: "sequencePosition",
11
- component: NumericInputField,
12
- validate: (val, vals, props) => {
13
- const { min, max } = get(props, "extraProps.sequencePosition", {});
14
- return (min && val < min) || (max && val > max)
15
- ? "Invalid position"
16
- : undefined;
17
- }
18
- }
19
- ],
20
- withDialogProps: {
21
- title: "Go To",
22
- height: 190,
23
- onCloseHook: tryToRefocusEditor
24
- }
25
- });
@@ -1,35 +0,0 @@
1
- import React, { useRef } from "react";
2
- export function HorizontalPanelDragHandle({ onDrag }) {
3
- const xStart = useRef(0);
4
-
5
- const resize = useRef(e => {
6
- const dx = xStart.current - e.clientX;
7
- onDrag({ dx });
8
- xStart.current = e.clientX;
9
- });
10
- const mouseup = useRef(() => {
11
- document.removeEventListener("mousemove", resize.current, false);
12
- document.removeEventListener("mousemove", mouseup.current, false);
13
- });
14
-
15
- return (
16
- <div
17
- onMouseDown={e => {
18
- xStart.current = e.clientX;
19
- document.addEventListener("mousemove", resize.current, false);
20
- document.addEventListener("mouseup", mouseup.current, false);
21
- }}
22
- style={{
23
- position: "absolute",
24
- top: 0,
25
- right: -1,
26
- zIndex: 1000,
27
- height: "100%",
28
- cursor: "ew-resize",
29
- width: 3,
30
- opacity: 0,
31
- background: "blue"
32
- }}
33
- ></div>
34
- );
35
- }