Skip to content

Commit 1d54d69

Browse files
Combine some files to avoid circular dependencies
1 parent bf48317 commit 1d54d69

9 files changed

+337
-370
lines changed

packages/apollo-shared/src/Changes/DeleteFeatureChange.ts renamed to packages/apollo-shared/src/Changes/AddAndDeleteFeatureChanges.ts

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,29 @@ import {
88
import type { AnnotationFeatureSnapshot } from '@apollo-annotation/mst'
99
import type { Feature } from '@apollo-annotation/schemas'
1010

11-
import { AddFeatureChange } from './AddFeatureChange.js'
11+
interface SerializedAddFeatureChangeBase extends SerializedFeatureChange {
12+
typeName: 'AddFeatureChange'
13+
}
14+
15+
export interface AddFeatureChangeDetails {
16+
addedFeature: AnnotationFeatureSnapshot
17+
parentFeatureId?: string // Parent feature to where feature will be added
18+
copyFeature?: boolean // Are we copying or adding a new child feature
19+
allIds?: string[]
20+
}
21+
22+
interface SerializedAddFeatureChangeSingle
23+
extends SerializedAddFeatureChangeBase,
24+
AddFeatureChangeDetails {}
25+
26+
interface SerializedAddFeatureChangeMultiple
27+
extends SerializedAddFeatureChangeBase {
28+
changes: AddFeatureChangeDetails[]
29+
}
30+
31+
export type SerializedAddFeatureChange =
32+
| SerializedAddFeatureChangeSingle
33+
| SerializedAddFeatureChangeMultiple
1234

1335
interface SerializedDeleteFeatureChangeBase extends SerializedFeatureChange {
1436
typeName: 'DeleteFeatureChange'
@@ -32,6 +54,62 @@ export type SerializedDeleteFeatureChange =
3254
| SerializedDeleteFeatureChangeSingle
3355
| SerializedDeleteFeatureChangeMultiple
3456

57+
export class AddFeatureChange extends FeatureChange {
58+
typeName = 'AddFeatureChange' as const
59+
changes: AddFeatureChangeDetails[]
60+
61+
constructor(json: SerializedAddFeatureChange, options?: ChangeOptions) {
62+
super(json, options)
63+
this.changes = 'changes' in json ? json.changes : [json]
64+
}
65+
// eslint-disable-next-line @typescript-eslint/class-literal-property-style
66+
get notification() {
67+
return 'Feature added successfully'
68+
}
69+
70+
toJSON(): SerializedAddFeatureChange {
71+
const { assembly, changedIds, changes, typeName } = this
72+
if (changes.length === 1) {
73+
const [{ addedFeature, allIds, copyFeature, parentFeatureId }] = changes
74+
return {
75+
typeName,
76+
changedIds,
77+
assembly,
78+
addedFeature,
79+
parentFeatureId,
80+
copyFeature,
81+
allIds,
82+
}
83+
}
84+
return { typeName, changedIds, assembly, changes }
85+
}
86+
87+
getInverse() {
88+
const { assembly, changedIds, changes, logger } = this
89+
const inverseChangedIds = [...changedIds].reverse()
90+
const inverseChanges = [...changes].reverse().map((addFeatureChange) => ({
91+
deletedFeature: addFeatureChange.addedFeature,
92+
parentFeatureId: addFeatureChange.parentFeatureId,
93+
}))
94+
95+
return new DeleteFeatureChange(
96+
{
97+
changedIds: inverseChangedIds,
98+
typeName: 'DeleteFeatureChange',
99+
changes: inverseChanges,
100+
assembly,
101+
},
102+
{ logger },
103+
)
104+
}
105+
}
106+
107+
export function isAddFeatureChange(
108+
change: unknown,
109+
): change is AddFeatureChange {
110+
return (change as AddFeatureChange).typeName === 'AddFeatureChange'
111+
}
112+
35113
export class DeleteFeatureChange extends FeatureChange {
36114
typeName = 'DeleteFeatureChange' as const
37115
changes: DeleteFeatureChangeDetails[]

packages/apollo-shared/src/Changes/AddFeatureChange.ts

Lines changed: 0 additions & 89 deletions
This file was deleted.

packages/apollo-shared/src/Changes/MergeExonsChange.ts renamed to packages/apollo-shared/src/Changes/MergeAndUndoMergeExonsChanges.ts

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import {
55
} from '@apollo-annotation/common'
66
import type { AnnotationFeatureSnapshot } from '@apollo-annotation/mst'
77

8-
import { UndoMergeExonsChange } from './UndoMergeExonsChange.js'
9-
108
interface SerializedMergeExonsChangeBase extends SerializedFeatureChange {
119
typeName: 'MergeExonsChange'
1210
}
@@ -30,6 +28,28 @@ export type SerializedMergeExonsChange =
3028
| SerializedMergeExonsChangeSingle
3129
| SerializedMergeExonsChangeMultiple
3230

31+
interface SerializedUndoMergeExonsChangeBase extends SerializedFeatureChange {
32+
typeName: 'UndoMergeExonsChange'
33+
}
34+
35+
export interface UndoMergeExonsChangeDetails {
36+
exonsToRestore: AnnotationFeatureSnapshot[]
37+
parentFeatureId: string
38+
}
39+
40+
interface SerializedUndoMergeExonsChangeSingle
41+
extends SerializedUndoMergeExonsChangeBase,
42+
UndoMergeExonsChangeDetails {}
43+
44+
interface SerializedUndoMergeExonsChangeMultiple
45+
extends SerializedUndoMergeExonsChangeBase {
46+
changes: UndoMergeExonsChangeDetails[]
47+
}
48+
49+
export type SerializedUndoMergeExonsChange =
50+
| SerializedUndoMergeExonsChangeSingle
51+
| SerializedUndoMergeExonsChangeMultiple
52+
3353
export class MergeExonsChange extends FeatureChange {
3454
typeName = 'MergeExonsChange' as const
3555
changes: MergeExonsChangeDetails[]
@@ -111,3 +131,51 @@ export class MergeExonsChange extends FeatureChange {
111131
// return mergedAttrs
112132
// }
113133
}
134+
135+
export class UndoMergeExonsChange extends FeatureChange {
136+
typeName = 'UndoMergeExonsChange' as const
137+
changes: UndoMergeExonsChangeDetails[]
138+
139+
constructor(json: SerializedUndoMergeExonsChange, options?: ChangeOptions) {
140+
super(json, options)
141+
this.changes = 'changes' in json ? json.changes : [json]
142+
}
143+
144+
toJSON(): SerializedUndoMergeExonsChange {
145+
const { assembly, changedIds, changes, typeName } = this
146+
if (changes.length === 1) {
147+
const [{ exonsToRestore, parentFeatureId }] = changes
148+
149+
return {
150+
typeName,
151+
changedIds,
152+
assembly,
153+
exonsToRestore,
154+
parentFeatureId,
155+
}
156+
}
157+
return { typeName, changedIds, assembly, changes }
158+
}
159+
160+
getInverse() {
161+
const { assembly, changedIds, changes, logger } = this
162+
const inverseChangedIds = [...changedIds].reverse()
163+
const inverseChanges = [...changes]
164+
.reverse()
165+
.map((undoMergeExonsChange) => ({
166+
firstExon: undoMergeExonsChange.exonsToRestore[0],
167+
secondExon: undoMergeExonsChange.exonsToRestore[1],
168+
parentFeatureId: undoMergeExonsChange.parentFeatureId,
169+
}))
170+
171+
return new MergeExonsChange(
172+
{
173+
changedIds: inverseChangedIds,
174+
typeName: 'MergeExonsChange',
175+
changes: inverseChanges,
176+
assembly,
177+
},
178+
{ logger },
179+
)
180+
}
181+
}

packages/apollo-shared/src/Changes/MergeTranscriptsChange.ts renamed to packages/apollo-shared/src/Changes/MergeAndUndoMergeTranscriptsChanges.ts

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import { getSnapshot } from '@jbrowse/mobx-state-tree'
1616

1717
import { attributesToRecords, stringifyAttributes } from '../util.js'
1818

19-
import { UndoMergeTranscriptsChange } from './UndoMergeTranscriptsChange.js'
20-
2119
interface SerializedMergeTranscriptsChangeBase extends SerializedFeatureChange {
2220
typeName: 'MergeTranscriptsChange'
2321
}
@@ -41,6 +39,29 @@ export type SerializedMergeTranscriptsChange =
4139
| SerializedMergeTranscriptsChangeSingle
4240
| SerializedMergeTranscriptsChangeMultiple
4341

42+
interface SerializedUndoMergeTranscriptsChangeBase
43+
extends SerializedFeatureChange {
44+
typeName: 'UndoMergeTranscriptsChange'
45+
}
46+
47+
export interface UndoMergeTranscriptsChangeDetails {
48+
transcriptsToRestore: AnnotationFeatureSnapshot[]
49+
parentFeatureId: string
50+
}
51+
52+
interface SerializedUndoMergeTranscriptsChangeSingle
53+
extends SerializedUndoMergeTranscriptsChangeBase,
54+
UndoMergeTranscriptsChangeDetails {}
55+
56+
interface SerializedUndoMergeTranscriptsChangeMultiple
57+
extends SerializedUndoMergeTranscriptsChangeBase {
58+
changes: UndoMergeTranscriptsChangeDetails[]
59+
}
60+
61+
export type SerializedUndoMergeTranscriptsChange =
62+
| SerializedUndoMergeTranscriptsChangeSingle
63+
| SerializedUndoMergeTranscriptsChangeMultiple
64+
4465
export class MergeTranscriptsChange extends FeatureChange {
4566
typeName = 'MergeTranscriptsChange' as const
4667
changes: MergeTranscriptsChangeDetails[]
@@ -328,3 +349,54 @@ export class MergeTranscriptsChange extends FeatureChange {
328349
)
329350
}
330351
}
352+
353+
export class UndoMergeTranscriptsChange extends FeatureChange {
354+
typeName = 'UndoMergeTranscriptsChange' as const
355+
changes: UndoMergeTranscriptsChangeDetails[]
356+
357+
constructor(
358+
json: SerializedUndoMergeTranscriptsChange,
359+
options?: ChangeOptions,
360+
) {
361+
super(json, options)
362+
this.changes = 'changes' in json ? json.changes : [json]
363+
}
364+
365+
toJSON(): SerializedUndoMergeTranscriptsChange {
366+
const { assembly, changedIds, changes, typeName } = this
367+
if (changes.length === 1) {
368+
const [{ transcriptsToRestore, parentFeatureId }] = changes
369+
370+
return {
371+
typeName,
372+
changedIds,
373+
assembly,
374+
transcriptsToRestore,
375+
parentFeatureId,
376+
}
377+
}
378+
return { typeName, changedIds, assembly, changes }
379+
}
380+
381+
getInverse() {
382+
const { assembly, changedIds, changes, logger } = this
383+
const inverseChangedIds = [...changedIds].reverse()
384+
const inverseChanges = [...changes]
385+
.reverse()
386+
.map((undoMergeTranscriptsChange) => ({
387+
firstTranscript: undoMergeTranscriptsChange.transcriptsToRestore[0],
388+
secondTranscript: undoMergeTranscriptsChange.transcriptsToRestore[1],
389+
parentFeatureId: undoMergeTranscriptsChange.parentFeatureId,
390+
}))
391+
392+
return new MergeTranscriptsChange(
393+
{
394+
changedIds: inverseChangedIds,
395+
typeName: 'MergeTranscriptsChange',
396+
changes: inverseChanges,
397+
assembly,
398+
},
399+
{ logger },
400+
)
401+
}
402+
}

0 commit comments

Comments
 (0)