Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Support Regulatory Fusions #1176

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ export class CvcFeatureSelectField
nzContent: CvcFusionSelectForm,
nzData: {},
nzFooter: null,
nzWidth: '60%',
}
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
mutation SelectOrCreateFusion($organizationId: Int, $fivePrimeGeneId: Int, $fivePrimePartnerStatus: FusionPartnerStatus!, $threePrimeGeneId: Int, $threePrimePartnerStatus: FusionPartnerStatus! ) {
mutation SelectOrCreateFusion($organizationId: Int, $fivePrimeGeneId: Int, $fivePrimeRegulatoryFusionType: RegulatoryFusionType, $fivePrimePartnerStatus: FusionPartnerStatus!, $threePrimeGeneId: Int, $threePrimeRegulatoryFusionType: RegulatoryFusionType, $threePrimePartnerStatus: FusionPartnerStatus!) {
createFusionFeature(input: {
organizationId: $organizationId
fivePrimeGene: {
geneId: $fivePrimeGeneId,
partnerStatus: $fivePrimePartnerStatus
regulatoryFusionType: $fivePrimeRegulatoryFusionType
},
threePrimeGene: {
geneId: $threePrimeGeneId,
partnerStatus: $threePrimePartnerStatus
partnerStatus: $threePrimePartnerStatus,
regulatoryFusionType: $threePrimeRegulatoryFusionType
}

}) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
FeatureInstanceTypes,
FusionPartnerStatus,
Maybe,
RegulatoryFusionType,
SelectOrCreateFusionGQL,
SelectOrCreateFusionMutation,
SelectOrCreateFusionMutationVariables,
Expand All @@ -28,7 +29,6 @@ import { CommonModule } from '@angular/common'
import { NzFormModule } from 'ng-zorro-antd/form'
import { NzButtonModule } from 'ng-zorro-antd/button'
import { RouterModule } from '@angular/router'
import { LetDirective, PushPipe } from '@ngrx/component'
import { NzAlertModule } from 'ng-zorro-antd/alert'
import { UntilDestroy } from '@ngneat/until-destroy'
import {
Expand All @@ -41,8 +41,10 @@ import { NZ_MODAL_DATA, NzModalModule, NzModalRef } from 'ng-zorro-antd/modal'
type FusionSelectModel = {
fivePrimeGeneId?: number
fivePrimePartnerStatus: FusionPartnerStatus
fivePrimRegulatoryFusionType?: RegulatoryFusionType
threePrimeGeneId?: number
threePrimePartnerStatus: FusionPartnerStatus
threePrimRegulatoryFusionType?: RegulatoryFusionType
}

export interface FusionSelectModalData {
Expand All @@ -58,9 +60,7 @@ export interface FusionSelectModalData {
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
CommonModule,
PushPipe,
ReactiveFormsModule,
LetDirective,
NzFormModule,
NzButtonModule,
NzAlertModule,
Expand Down Expand Up @@ -92,7 +92,7 @@ export class CvcFusionSelectForm {

constructor(
private query: SelectOrCreateFusionGQL,
private errors: NetworkErrorsService
errors: NetworkErrorsService
) {
this.selectOrCreateFusionMutator = new MutatorWithState(errors)

Expand All @@ -103,6 +103,8 @@ export class CvcFusionSelectForm {
threePrimeGeneId: undefined,
fivePrimePartnerStatus: FusionPartnerStatus.Known,
threePrimePartnerStatus: FusionPartnerStatus.Known,
fivePrimRegulatoryFusionType: undefined,
threePrimRegulatoryFusionType: undefined,
}
this.options = {}

Expand All @@ -119,8 +121,27 @@ export class CvcFusionSelectForm {
label: 'Multiple',
value: FusionPartnerStatus.Multiple,
},
{
label: 'Regulatory',
value: FusionPartnerStatus.Regulatory,
},
]

const regulatoryOptions = Object.keys(RegulatoryFusionType)
.map((x) => {
const val = RegulatoryFusionType[x as keyof typeof RegulatoryFusionType]
return { label: val.toLowerCase(), value: val }
})
.sort((a, b) => {
if (a.label == 'reg_e') {
return -1
} else if (a.label == 'reg_p') {
return -1
} else {
return a.label.localeCompare(b.label)
}
})

this.config = [
{
wrappers: ['form-layout'],
Expand All @@ -129,13 +150,18 @@ export class CvcFusionSelectForm {
},
validators: {
partnerStatus: {
message: "At least one of 5' or 3' partner status must be Known",
message:
"At least one of 5' or 3' partner status must be Known or Regulatory",
expression: (x: AbstractControl) => {
const model = x.value
if (model) {
if (
model.fivePrimePartnerStatus == FusionPartnerStatus.Known ||
model.threePrimePartnerStatus == FusionPartnerStatus.Known
model.fivePrimePartnerStatus ==
FusionPartnerStatus.Regulatory ||
model.threePrimePartnerStatus == FusionPartnerStatus.Known ||
model.threePrimePartnerStatus ==
FusionPartnerStatus.Regulatory
) {
return true
}
Expand All @@ -144,6 +170,24 @@ export class CvcFusionSelectForm {
},
errorPath: 'fivePrimePartnerStatus',
},
regulatoryStatus: {
message: "At most one of 5' or 3' partner status can be Regulatory",
expression: (x: AbstractControl) => {
const model = x.value
if (model) {
if (
model.fivePrimePartnerStatus ==
FusionPartnerStatus.Regulatory &&
model.threePrimePartnerStatus ==
FusionPartnerStatus.Regulatory
) {
return false
}
}
return true
},
errorPath: 'fivePrimePartnerStatus',
},
sameGene: {
message: "5' and 3' Genes must be different",
expression: (x: AbstractControl) => {
Expand Down Expand Up @@ -171,7 +215,7 @@ export class CvcFusionSelectForm {
wrappers: ['form-row'],
props: {
formRowOptions: {
span: 12,
span: 8,
},
},
fieldGroup: [
Expand All @@ -181,13 +225,33 @@ export class CvcFusionSelectForm {
props: {
label: "5' Partner Status",
tooltip:
"Select Known if the specific 5' Gene partner is known, Unknown if not. Select Multiple if there are multiple potential 5' Gene partners",
"Select Known if the specific 5' Gene partner is known, Unknown if not. Select Multiple if there are multiple potential 5' Gene partners. Select Regulatory if this partner is a Regulatory fusion partner.",
required: true,
placeholder: "5' Partner Status",
options: selectOptions,
multiple: false,
},
},
{
key: 'fivePrimeRegulatoryFusionType',
type: 'base-select',
props: {
label: "5' Regulatory Element Type",
tooltip: '',
required: true,
placeholder: "5' Regulatory Element",
options: regulatoryOptions,
multiple: false,
},
expressions: {
'props.required': (field) =>
field.model.fivePrimePartnerStatus ==
FusionPartnerStatus.Regulatory,
'props.disabled': (field) =>
field.model.fivePrimePartnerStatus !=
FusionPartnerStatus.Regulatory,
},
},
{
key: 'fivePrimeGeneId',
type: 'feature-select',
Expand All @@ -202,10 +266,14 @@ export class CvcFusionSelectForm {
expressions: {
'props.disabled': (field) =>
field.model.fivePrimePartnerStatus !=
FusionPartnerStatus.Known,
FusionPartnerStatus.Known &&
field.model.fivePrimePartnerStatus !=
FusionPartnerStatus.Regulatory,
'props.required': (field) =>
field.model.fivePrimePartnerStatus ==
FusionPartnerStatus.Known,
FusionPartnerStatus.Known ||
field.model.fivePrimePartnerStatus ==
FusionPartnerStatus.Regulatory,
},
},
],
Expand All @@ -214,7 +282,7 @@ export class CvcFusionSelectForm {
wrappers: ['form-row'],
props: {
formRowOptions: {
span: 12,
span: 8,
},
},
fieldGroup: [
Expand All @@ -226,11 +294,31 @@ export class CvcFusionSelectForm {
placeholder: "3' Partner Status",
label: "3' Partner Status",
tooltip:
"Select Known if the specific 3' Gene partner is known, Unknown if not. Select Multiple if there are multiple potential 3' Gene partners",
"Select Known if the specific 3' Gene partner is known, Unknown if not. Select Multiple if there are multiple potential 3' Gene partners. Select Regulatory if this partner is a Regulatory fusion partner.",
options: selectOptions,
multiple: false,
},
},
{
key: 'threePrimeRegulatoryFusionType',
type: 'base-select',
props: {
label: "3' Regulatory Element Type",
tooltip: '',
required: true,
placeholder: "3' Regulatory Element",
options: regulatoryOptions,
multiple: false,
},
expressions: {
'props.required': (field) =>
field.model.threePrimePartnerStatus ==
FusionPartnerStatus.Regulatory,
'props.disabled': (field) =>
field.model.threePrimePartnerStatus !=
FusionPartnerStatus.Regulatory,
},
},
{
key: 'threePrimeGeneId',
type: 'feature-select',
Expand All @@ -245,10 +333,14 @@ export class CvcFusionSelectForm {
expressions: {
'props.disabled': (field) =>
field.model.threePrimePartnerStatus !=
FusionPartnerStatus.Known,
FusionPartnerStatus.Known &&
field.model.threePrimePartnerStatus !=
FusionPartnerStatus.Regulatory,
'props.required': (field) =>
field.model.threePrimePartnerStatus ==
FusionPartnerStatus.Known,
FusionPartnerStatus.Known ||
field.model.threePrimePartnerStatus ==
FusionPartnerStatus.Regulatory,
},
},
],
Expand Down Expand Up @@ -280,13 +372,19 @@ export class CvcFusionSelectForm {

modelChange(model: Maybe<FusionSelectModel>) {
if (model) {
if (this.model.fivePrimePartnerStatus != FusionPartnerStatus.Known) {
if (
this.model.fivePrimePartnerStatus != FusionPartnerStatus.Known &&
this.model.fivePrimePartnerStatus != FusionPartnerStatus.Regulatory
) {
this.model = {
...this.model,
fivePrimeGeneId: undefined,
}
}
if (this.model.threePrimePartnerStatus != FusionPartnerStatus.Known) {
if (
this.model.threePrimePartnerStatus != FusionPartnerStatus.Known &&
this.model.threePrimePartnerStatus != FusionPartnerStatus.Regulatory
) {
this.model = {
...this.model,
threePrimeGeneId: undefined,
Expand Down
3 changes: 2 additions & 1 deletion client/src/app/generated/civic.apollo-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1185,7 +1185,7 @@ export type FlaggableFieldPolicy = {
link?: FieldPolicy<any> | FieldReadFunction<any>,
name?: FieldPolicy<any> | FieldReadFunction<any>
};
export type FusionKeySpecifier = ('comments' | 'creationActivity' | 'deprecated' | 'deprecationActivity' | 'deprecationReason' | 'description' | 'events' | 'featureAliases' | 'featureInstance' | 'featureType' | 'fivePrimeGene' | 'fivePrimePartnerStatus' | 'flagged' | 'flags' | 'fullName' | 'id' | 'lastAcceptedRevisionEvent' | 'lastCommentEvent' | 'lastSubmittedRevisionEvent' | 'link' | 'name' | 'openRevisionCount' | 'revisions' | 'sources' | 'threePrimeGene' | 'threePrimePartnerStatus' | 'variants' | FusionKeySpecifier)[];
export type FusionKeySpecifier = ('comments' | 'creationActivity' | 'deprecated' | 'deprecationActivity' | 'deprecationReason' | 'description' | 'events' | 'featureAliases' | 'featureInstance' | 'featureType' | 'fivePrimeGene' | 'fivePrimePartnerStatus' | 'flagged' | 'flags' | 'fullName' | 'id' | 'lastAcceptedRevisionEvent' | 'lastCommentEvent' | 'lastSubmittedRevisionEvent' | 'link' | 'name' | 'openRevisionCount' | 'regulatoryFusionType' | 'revisions' | 'sources' | 'threePrimeGene' | 'threePrimePartnerStatus' | 'variants' | FusionKeySpecifier)[];
export type FusionFieldPolicy = {
comments?: FieldPolicy<any> | FieldReadFunction<any>,
creationActivity?: FieldPolicy<any> | FieldReadFunction<any>,
Expand All @@ -1209,6 +1209,7 @@ export type FusionFieldPolicy = {
link?: FieldPolicy<any> | FieldReadFunction<any>,
name?: FieldPolicy<any> | FieldReadFunction<any>,
openRevisionCount?: FieldPolicy<any> | FieldReadFunction<any>,
regulatoryFusionType?: FieldPolicy<any> | FieldReadFunction<any>,
revisions?: FieldPolicy<any> | FieldReadFunction<any>,
sources?: FieldPolicy<any> | FieldReadFunction<any>,
threePrimeGene?: FieldPolicy<any> | FieldReadFunction<any>,
Expand Down
Loading
Loading