@molgenis/vip-report-template 3.1.0 → 3.1.3

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molgenis/vip-report-template",
3
- "version": "3.1.0",
3
+ "version": "3.1.3",
4
4
  "description": "Report Template for Variant Call Format (VCF) Report Generator",
5
5
  "scripts": {
6
6
  "build": "vite build",
@@ -15,32 +15,32 @@
15
15
  },
16
16
  "license": "LGPL-3.0",
17
17
  "devDependencies": {
18
- "@molgenis/vite-plugin-inline": "^1.0.7",
19
- "@typescript-eslint/eslint-plugin": "^5.28.0",
20
- "@typescript-eslint/parser": "^5.28.0",
18
+ "@molgenis/vite-plugin-inline": "^1.0.8",
19
+ "@typescript-eslint/eslint-plugin": "^5.35.1",
20
+ "@typescript-eslint/parser": "^5.35.1",
21
+ "@vitest/coverage-c8": "^0.22.1",
21
22
  "bulma": "^0.9.4",
22
- "c8": "^7.11.3",
23
- "eslint": "^8.17.0",
23
+ "eslint": "^8.22.0",
24
24
  "eslint-config-prettier": "^8.5.0",
25
- "eslint-plugin-prettier": "^4.0.0",
26
- "eslint-plugin-solid": "^0.7.0",
25
+ "eslint-plugin-prettier": "^4.2.1",
26
+ "eslint-plugin-solid": "^0.7.1",
27
27
  "husky": "^8.0.1",
28
- "prettier": "^2.7.0",
29
- "sass": "^1.52.3",
30
- "typescript": "^4.7.3",
31
- "vite": "^2.9.12",
32
- "vite-plugin-solid": "^2.2.6",
33
- "vitest": "^0.14.2"
28
+ "prettier": "^2.7.1",
29
+ "sass": "^1.54.5",
30
+ "typescript": "^4.7.4",
31
+ "vite": "^3.0.9",
32
+ "vite-plugin-solid": "^2.3.0",
33
+ "vitest": "^0.22.1"
34
34
  },
35
35
  "dependencies": {
36
- "@fortawesome/fontawesome-svg-core": "^6.1.1",
37
- "@fortawesome/free-solid-svg-icons": "^6.1.1",
38
- "@molgenis/vip-report-api": "^3.5.2",
39
- "@molgenis/vip-report-vcf": "^1.2.2",
36
+ "@fortawesome/fontawesome-svg-core": "^6.1.2",
37
+ "@fortawesome/free-solid-svg-icons": "^6.1.2",
38
+ "@molgenis/vip-report-api": "^3.5.4",
39
+ "@molgenis/vip-report-vcf": "^1.2.3",
40
40
  "base64-js": "^1.5.1",
41
- "igv": "^2.12.6",
42
- "solid-app-router": "^0.3.3",
43
- "solid-js": "^1.4.4"
41
+ "igv": "^2.13.1",
42
+ "solid-app-router": "^0.4.2",
43
+ "solid-js": "^1.4.8"
44
44
  },
45
45
  "lint-staged": {
46
46
  "src/**/*.{tsx,ts}": [
@@ -4,6 +4,7 @@ import { Metadata } from "@molgenis/vip-report-vcf/src/Vcf";
4
4
  import { FilterQueries } from "../store";
5
5
  import {
6
6
  createQuery,
7
+ createSampleQuery,
7
8
  infoFieldKey,
8
9
  infoSelector,
9
10
  infoSortPath,
@@ -11,7 +12,7 @@ import {
11
12
  sampleSelector,
12
13
  selectorKey,
13
14
  } from "../utils/query";
14
- import { Person, QueryClause } from "@molgenis/vip-report-api/src/Api";
15
+ import { Item, Person, Query, QueryClause, Sample } from "@molgenis/vip-report-api/src/Api";
15
16
 
16
17
  describe("query utilities", () => {
17
18
  let fieldMetaCsq: FieldMetadata = {
@@ -52,6 +53,37 @@ describe("query utilities", () => {
52
53
 
53
54
  const meta: Metadata = { info: { CSQ: fieldMetaCsq } } as unknown as Metadata;
54
55
 
56
+ test("create sample query - filters", () => {
57
+ const sample = { data: { index: 1 } } as Item<Sample>;
58
+ const queryClause: Query = {
59
+ operator: "and",
60
+ args: [
61
+ { selector: ["s", 1, "GT", "t"], operator: "!=", args: "hom_r" },
62
+ { selector: ["s", 1, "GT", "t"], operator: "!=", args: "miss" },
63
+ ],
64
+ };
65
+ const filterQueryClause: QueryClause = { selector: ["n", "CSQ", "*", 0], operator: "==", args: [0] };
66
+ const filterQueries: FilterQueries = {
67
+ "CSQ/field1": filterQueryClause,
68
+ };
69
+ expect(createSampleQuery(sample, undefined, filterQueries, meta)).toStrictEqual({
70
+ operator: "and",
71
+ args: [queryClause, filterQueryClause],
72
+ });
73
+ });
74
+
75
+ test("create sample query - undefined search and undefined filters", () => {
76
+ const sample = { data: { index: 1 } } as Item<Sample>;
77
+ const queryClause: Query = {
78
+ operator: "and",
79
+ args: [
80
+ { selector: ["s", 1, "GT", "t"], operator: "!=", args: "hom_r" },
81
+ { selector: ["s", 1, "GT", "t"], operator: "!=", args: "miss" },
82
+ ],
83
+ };
84
+ expect(createSampleQuery(sample, undefined, undefined, meta)).toStrictEqual(queryClause);
85
+ });
86
+
55
87
  test("create query", () => {
56
88
  const searchText = "my search text";
57
89
  const filterQueries: FilterQueries = {
@@ -22,7 +22,8 @@ export const InfoCollapsablePane: Component<{
22
22
  const values = createMemo((): FieldValue[][] =>
23
23
  props.fields.map((field) => {
24
24
  if (field.parent) {
25
- return (props.record.data.n[field.parent.id] as ValueArray).map((nestedValues) => {
25
+ const values = (props.record.data.n[field.parent.id] || []) as ValueArray;
26
+ return values.map((nestedValues) => {
26
27
  const value =
27
28
  field.parent && field.parent.nested
28
29
  ? (nestedValues as ValueArray)[
@@ -56,9 +56,12 @@ export const VariantsTable: Component<{
56
56
  <tr>
57
57
  <For each={infoFieldsNested()}>
58
58
  {(infoField) => (
59
- <For each={infoField.nested?.items}>
60
- {(nestedInfoField) => <FieldHeader field={nestedInfoField} />}
61
- </For>
59
+ <>
60
+ {infoField.number.count !== 1 && <th />}
61
+ <For each={infoField.nested?.items}>
62
+ {(nestedInfoField) => <FieldHeader field={nestedInfoField} />}
63
+ </For>
64
+ </>
62
65
  )}
63
66
  </For>
64
67
  </tr>
@@ -1,13 +1,18 @@
1
1
  import { Component } from "solid-js";
2
- import { Query, Sample } from "@molgenis/vip-report-api/src/Api";
2
+ import { HtsFileMetadata, Query, Sample } from "@molgenis/vip-report-api/src/Api";
3
3
  import { Metadata } from "@molgenis/vip-report-vcf/src/Vcf";
4
4
  import api from "../../Api";
5
5
  import { Filter, writeVcf } from "@molgenis/vip-report-vcf/src/VcfWriter";
6
6
 
7
+ const DOWNLOAD_POSTFIX = "_report.vcf";
7
8
  export const RecordDownload: Component<{ recordsMetadata: Metadata; query?: Query; samples?: Sample[] }> = (props) => {
8
9
  const filter = (): Filter | undefined =>
9
10
  props.samples ? { samples: props.samples.map((sample) => sample.person.individualId) } : undefined;
10
11
 
12
+ function parseFilename(htsFile: HtsFileMetadata) {
13
+ return htsFile.uri.split("\\").pop()?.split("/").pop()?.split(".").shift();
14
+ }
15
+
11
16
  function onClick() {
12
17
  const handler = async () => {
13
18
  const records = await api.getRecords({ query: props.query, size: Number.MAX_SAFE_INTEGER });
@@ -16,7 +21,9 @@ export const RecordDownload: Component<{ recordsMetadata: Metadata; query?: Quer
16
21
  const url = window.URL.createObjectURL(new Blob([vcf]));
17
22
  const link = document.createElement("a");
18
23
  link.href = url;
19
- link.setAttribute("download", "data.vcf");
24
+ const htsFile = await api.getHtsFileMetadata();
25
+ const filename = parseFilename(htsFile) as string;
26
+ link.setAttribute("download", filename + DOWNLOAD_POSTFIX);
20
27
  document.body.appendChild(link);
21
28
  link.click();
22
29
  document.body.removeChild(link);
@@ -26,7 +33,11 @@ export const RecordDownload: Component<{ recordsMetadata: Metadata; query?: Quer
26
33
 
27
34
  return (
28
35
  <div class="control">
29
- <button class="button is-info" onClick={onClick}>
36
+ <button
37
+ class="button is-info"
38
+ onClick={onClick}
39
+ title="Download vcf file with records matching filters and search queries"
40
+ >
30
41
  <span class="icon is-small">
31
42
  <i class="fas fa-download" />
32
43
  </span>
@@ -45,9 +45,9 @@ export const Gene: Component<FieldProps> = (props) => {
45
45
  <span>{symbol}</span>
46
46
  </Anchor>
47
47
  {incompletePenetrance() && (
48
- <sup class="ml-1">
48
+ <span class="ml-1">
49
49
  <Abbr title="gene is known for incomplete penetrance" value="IP" />
50
- </sup>
50
+ </span>
51
51
  )}
52
52
  </>
53
53
  )}
@@ -11,7 +11,7 @@ function abbreviate(notation: string): string {
11
11
  } else {
12
12
  abbreviated = notation;
13
13
  }
14
- return abbreviated;
14
+ return abbreviated.length > 20 ? abbreviated.slice(0, 18) + "\u2026" : abbreviated;
15
15
  }
16
16
 
17
17
  export const Hgvs: Component<FieldProps> = (props) => {
@@ -76,12 +76,12 @@
76
76
  ##contig=<ID=MT,length=16569,assembly=b37>
77
77
  ##fileDate=20200320
78
78
  #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Patient Father Mother Sister Nephew Unrelated
79
- 1 10042538 . C T . PASS CSQ=T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_001297778.1|protein_coding|5/5||NM_001297778.1:c.619C>T|NP_001284707.1:p.Arg207Trp|778/3796|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1||1|EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.16572298|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|downstream_gene_variant|MODIFIER|NMNAT1|64802|Transcript|NM_001297779.2|protein_coding||||||||||rs142968179&CM127756|1|714|1|||EntrezGene||||||||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.033541594|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_022787.4|protein_coding|5/5||NM_022787.4:c.619C>T|NP_073624.2:p.Arg207Trp|716/3734|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1|||EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.14321531|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
79
+ 1 10042538 . C T . PASS CSQ=T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_001297778.1|protein_coding|5/5||NM_001297778.1:c.619C>Tblablablablablabla|NP_001284707.1:p.Arg207Trp|778/3796|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1||1|EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.16572298|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|downstream_gene_variant|MODIFIER|NMNAT1|64802|Transcript|NM_001297779.2|protein_coding||||||||||rs142968179&CM127756|1|714|1|||EntrezGene||||||||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.033541594|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_022787.4|protein_coding|5/5||NM_022787.4:c.619C>T|NP_073624.2:p.Arg207Trp|716/3734|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1|||EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.14321531|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
80
80
  1 16375583 . GA G . PASS CSQ=-|intron_variant|MODIFIER|CLCNKB|1188|Transcript|NM_000085.5|protein_coding||7/19|NM_000085.5:c.656-31del|||||||rs751608665|1||1||1|EntrezGene||||||||uncertain_significance&pathogenic||1||||||||20|45|-14|-45|0.05|0.00|0.00|0.00|CLCNKB|VUS|0.032507|HP:0000951||AR|LP||||1:16375584-16375585|0.000548455|0|638508|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|CLCNKB|1188|Transcript|NM_001165945.2|protein_coding|1/13||NM_001165945.2:c.118del|NP_001159417.2:p.Arg40GlyfsTer4|328/2174|118/1554|40/517|R/X|Agg/gg|rs751608665|1||1|||EntrezGene||||||||uncertain_significance&pathogenic||1||||||||20|45|-14|-45|0.05|0.00|0.00|0.00|CLCNKB|VUS|0.9770811|HP:0000951||AR|LP||||1:16375584-16375585|0.000548455|0|638508|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:25,25:50:AR:1_16376412_G_A,1_16376412_G_N:0:1188:1:AR_C 1|0:25,25:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
81
81
  1 16376412 n_alt G N . PASS CSQ=N|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_000085.5|protein_coding||10/19||||||||CS1211892&CS971662|1||1||1|EntrezGene||||||||||1&1|||||||||||||||||VUS|0.373989|HP:0000951||AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,N|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_001165945.2|protein_coding||3/12||||||||CS1211892&CS971662|1||1|||EntrezGene||||||||||1&1|||||||||||||||||VUS|0.373989|HP:0000951||AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:5,45:50:AR,AD:1_16376412_G_A,1_16375583_GA_G:1:1188:1:AR_C 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
82
82
  1 16376412 . G A . PASS CSQ=A|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_000085.5|protein_coding||10/19|NM_000085.5:c.968+1G>A|||||||rs201204502&CS1211892&CS971662|1||1||1|EntrezGene||||||||||0&1&1||||||||17|-36|-28|-1|0.00|0.00|0.03|0.97|CLCNKB|VUS|0.9855972|HP:0000951||AR|LP||||1:16376412-16376412|6.38086e-05|0|1285112|Pathogenic/Likely_pathogenic||no_assertion_criteria_provided|LP|filter&vkgl&exit_lp|,A|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_001165945.2|protein_coding||3/12|NM_001165945.2:c.461+1G>A|||||||rs201204502&CS1211892&CS971662|1||1|||EntrezGene||||||||||0&1&1||||||||17|-36|-28|-1|0.00|0.00|0.03|0.97|CLCNKB|VUS|0.9855972|HP:0000951||AR|LP||||1:16376412-16376412|6.38086e-05|0|1285112|Pathogenic/Likely_pathogenic||no_assertion_criteria_provided|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 0|1:50:50:AR:1_16375583_GA_G,1_16376412_G_N:0:1188:1:AR_C 0|0:50,0:50:.:.:.:.:.:. 1|0:25,25:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
83
- 1 17349219 g_ref G A . PASS CSQ=A|missense_variant|MODERATE|SDHB|6390|Transcript|NM_003000.3|protein_coding|7/8||NM_003000.3:c.649C>T|NP_002991.2:p.Arg217Cys|662/1015|649/843|217/280|R/C|Cgc/Tgc|rs200245469&CM094752&CM1210440&COSV64965760|1||-1||1|EntrezGene|||||0|1||likely_pathogenic|0&0&0&1|1&1&1&1||||||||28|6|6|5|0.00|0.00|0.00|0.00|SDHB|VUS|0.89070946|HP:0000951||AD&AR|LP|||||||183735|Pathogenic/Likely_pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:6390:1 1|0:45,5:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
84
- 1 17355094 . C T . PASS CSQ=T|splice_donor_variant|HIGH|SDHB|6390|Transcript|NM_003000.3|protein_coding||4/7|NM_003000.3:c.423+1G>A|||||||rs398122805&CS056774&CS062098&COSV64965540|1||-1||1|EntrezGene||||||||pathogenic|0&0&0&1|1&1&1&1|21348866&17667967&17804857&16405730&21565294&15383933|||||||-49|12|26|1|0.00|0.00|0.14|0.97|SDHB|VUS|0.9641474|HP:0000951||AD&AR|LP||||1:17355094-17355094|1.19344e-05|0|29896|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|0:5,45:50:AD:.:1:6390:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
83
+ 1 17349219 g_ref G A . PASS CSQ=A|missense_variant|MODERATE|SDHB|6390|Transcript|NM_003000.3|protein_coding|7/8||NM_003000.3:c.649C>T|NP_002991.2:p.Arg217Cys|662/1015|649/843|217/280|R/C|Cgc/Tgc|rs200245469&CM094752&CM1210440&COSV64965760|1||-1||1|EntrezGene|||||0|1||likely_pathogenic|0&0&0&1|1&1&1&1||||||||28|6|6|5|0.00|0.00|0.00|0.00|SDHB|VUS|0.89070946|HP:0000951&HP:0003124||AD&AR|LP|||||||183735|Pathogenic/Likely_pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:6390:1 1|0:45,5:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
84
+ 1 17355094 . C T . PASS CSQ=T|splice_donor_variant|HIGH|SDHB|6390|Transcript|NM_003000.3|protein_coding||4/7|NM_003000.3:c.423+1G>A|||||||rs398122805&CS056774&CS062098&COSV64965540|1||-1||1|EntrezGene||||||||pathogenic|0&0&0&1|1&1&1&1|21348866&17667967&17804857&16405730&21565294&15383933|||||||-49|12|26|1|0.00|0.00|0.14|0.97|SDHB|VUS|0.9641474|HP:0003124||AD&AR|LP||||1:17355094-17355094|1.19344e-05|0|29896|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|0:5,45:50:AD:.:1:6390:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
85
85
  1 152520788 symbolic1 A <DEL> . PASS CSQ=deletion|transcript_ablation|HIGH|LCE3D|84648|Transcript|NM_032563.2|protein_coding|||||||||||1||-1||1|EntrezGene|||||||||||||||||||||||||||||||||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,deletion|transcript_ablation|HIGH|LCE3E|353145|Transcript|NM_178435.4|protein_coding|||||||||||1||-1|||EntrezGene|||||||||||||||||||||||||||||||||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00701519957||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00905971885||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00522719201||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|;SVLEN=-49314;SVTYPE=DEL GT:AD:DP:VI:VIC:VID:VIM 1|1:0,50:50:AR:.:1:0 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 1|0:25,25:50:.:.:.:.
86
86
  4 106320294 . G A . PASS CSQ=A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_006903.4|protein_coding|7/11||NM_006903.4:c.596C>T|NP_008834.3:p.Pro199Leu|616/1586|596/918|199/305|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.985||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.8097311|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176866.2|protein_coding|4/8||NM_176866.2:c.377C>T|NP_789842.2:p.Pro126Leu|397/1367|377/699|126/232|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.992||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.7550335|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176867.3|protein_coding|2/6||NM_176867.3:c.185C>T|NP_789843.2:p.Pro62Leu|205/1175|185/507|62/168|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.995||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.8145551|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176869.3|protein_coding|8/12||NM_176869.3:c.683C>T|NP_789845.1:p.Pro228Leu|695/1665|683/1005|228/334|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1||1|EntrezGene|||||0|0.993||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.76490384|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|regulatory_region_variant|MODIFIER|||RegulatoryFeature|ENSR00001994744|promoter_flanking_region||||||||||rs138215926&CM1610192&COSV58994362|1|||||||||||||pathogenic|0&0&1|1&1&1|27523597|||||||||||||||||||||||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&clinVar&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:27068:1 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 1|1:0,50:50:.:.:.:.:.
87
87
  9 107546633 . AAAGAT A . PASS CSQ=-|frameshift_variant|HIGH|ABCA1|19|Transcript|NM_005502.4|protein_coding|50/50||NM_005502.4:c.6744_6748del|NP_005493.2:p.Phe2250ThrfsTer3|7057-7061/10408|6744-6748/6786|2248-2250/2261|TSF/TX|acATCTTtt/actt||1||-1||1|EntrezGene|||||||||||||||||||||||||||VUS|0.9823047|HP:0000951||AD&AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,10:10:AR:.:0:19:1 0|1:1,49:50:.:.:.:.:. 1|0:0,50:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
@@ -95,9 +95,9 @@
95
95
  17 29556064 . AC A . PASS CSQ=-|frameshift_variant|HIGH|NF1|4763|Transcript|NM_000267.3|protein_coding|21/57||NM_000267.3:c.2433del|NP_000258.1:p.Ile812LeufsTer9|2816/12362|2433/8457|811/2818|T/X|acC/ac||1||1|||EntrezGene|||||||1|||||||||||-22|-11|12|25|0.00|0.00|0.00|0.00|NF1|VUS|0.9913782|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|NF1|4763|Transcript|NM_001042492.3|protein_coding|21/58||NM_001042492.3:c.2433del|NP_001035957.1:p.Ile812LeufsTer9|2766/12373|2433/8520|811/2839|T/X|acC/ac||1||1||1|EntrezGene|||||||1|||||||||||-22|-11|12|25|0.00|0.00|0.00|0.00|NF1|VUS|0.9913782|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VIC:VID:VIM 1|1:0,50:50:.:1:0 1|1:0,50:50:.:.:. 0|0:50,0:50:.:.:. 1|0:25,25:50:.:.:. 0|0:50,0:50:.:.:. 1|0:25,25:50:.:.:.
96
96
  17 29585422 . A G . PASS CSQ=G|missense_variant|MODERATE|NF1|4763|Transcript|NM_000267.3|protein_coding|31/57||NM_000267.3:c.4171A>G|NP_000258.1:p.Arg1391Gly|4554/12362|4171/8457|1391/2818|R/G|Aga/Gga|rs1555618515&CM1211610|1||1|||EntrezGene|||||0|0.962||pathogenic||1&1||||||||-48|2|28|-27|0.00|0.00|0.01|0.00|NF1|VUS|0.6458939|HP:0000951|1|AD|LP|||||||457686|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,G|missense_variant|MODERATE|NF1|4763|Transcript|NM_001042492.3|protein_coding|32/58||NM_001042492.3:c.4234A>G|NP_001035957.1:p.Arg1412Gly|4567/12373|4234/8520|1412/2839|R/G|Aga/Gga|rs1555618515&CM1211610|1||1||1|EntrezGene|||||0|0.988||pathogenic||1&1||||||||-48|2|28|-27|0.00|0.00|0.01|0.00|NF1|VUS|0.7539552|HP:0000951|1|AD|LP|||||||457686|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIM 1|1:0,50:50:AR:.:1:0 0|1:.:10:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:.
97
97
  17 29663879 . T G . PASS CSQ=G|missense_variant|MODERATE|NF1|4763|Transcript|NM_000267.3|protein_coding|41/57||NM_000267.3:c.6311T>G|NP_000258.1:p.Leu2104Arg|6694/12362|6311/8457|2104/2818|L/R|cTg/cGg|CM141499&CM143458|1||1|||EntrezGene|||||0|0.994||||1&1||||||||-42|41|-34|8|0.00|0.00|0.00|0.00|NF1|VUS|0.8564539|HP:0000951|1|AD|LP|||||||996527|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,G|missense_variant|MODERATE|NF1|4763|Transcript|NM_001042492.3|protein_coding|42/58||NM_001042492.3:c.6374T>G|NP_001035957.1:p.Leu2125Arg|6707/12373|6374/8520|2125/2839|L/R|cTg/cGg|CM141499&CM143458|1||1||1|EntrezGene|||||0|0.993||||1&1||||||||-42|41|-34|8|0.00|0.00|0.00|0.00|NF1|VUS|0.8564539|HP:0000951|1|AD|LP|||||||996527|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:25,25:50:AR,AD:17_29683983_C_T:0:4763:1:AD_IP,AR_C 0|0:50,0:50:.:.:.:.:.:. 1|0:25,25:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
98
- 17 29683983 . C T . PASS CSQ=T|stop_gained|HIGH|NF1|4763|Transcript|NM_000267.3|protein_coding|52/57||NM_000267.3:c.7681C>T|NP_000258.1:p.Gln2561Ter|8064/12362|7681/8457|2561/2818|Q/*|Cag/Tag|CM143479|1||1|||EntrezGene||||||||||1||||||||24|-5|24|36|0.02|0.00|0.00|0.00|NF1|VUS|0.99177766|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp|,T|stop_gained|HIGH|NF1|4763|Transcript|NM_001042492.3|protein_coding|53/58||NM_001042492.3:c.7744C>T|NP_001035957.1:p.Gln2582Ter|8077/12373|7744/8520|2582/2839|Q/*|Cag/Tag|CM143479|1||1||1|EntrezGene||||||||||1||||||||24|-5|24|36|0.02|0.00|0.00|0.00|NF1|VUS|0.9919058|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:25,25:50:AR,AD:17_29663879_T_G:1:4763:1:AR_C 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
98
+ 17 29683983 . C T . PASS CSQ=T|stop_gained|HIGH|NF1|4763|Transcript|NM_000267.3|protein_coding|52/57||NM_000267.3:c.7681C>T|NP_000258.1:p.Gln2561Ter|8064/12362|7681/8457|2561/2818|Q/*|Cag/Tag|CM143479|1||1|||EntrezGene||||||||||1||||||||24|-5|24|36|0.02|0.00|0.00|0.00|NF1|VUS|0.99177766|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp|,T|stop_gained|HIGH|NF1|4763|Transcript|NM_001042492.3|protein_coding|53/58||NM_001042492.3:c.7744C>T|NP_001035957.1:p.Gln2582Ter|8077/12373|7744/8520|2582/2839|Q/*|Cag/Tag|CM143479|1||1||1|EntrezGene||||||||||1||||||||24|-5|24|36|0.02|0.00|0.00|0.00|NF1|VUS|0.9919058|HP:0000951|1|AD|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS .|.:25,25:50:AR,AD:17_29663879_T_G:1:4763:1:AR_C 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
99
99
  19 11224051 . C CGTGGTCGCTCTGGACACGGAG . PASS CSQ=TCGCTCTGGACACGGAGGTGG|inframe_insertion|MODERATE|LDLR|3949|Transcript|NM_000527.5|protein_coding|9/18||NM_000527.5:c.1289_1309dup|NP_000518.1:p.Val430_Val436dup|1395-1396/5173|1309-1310/2583|437/860|A/VALDTEVA|gcc/gTCGCTCTGGACACGGAGGTGGcc||1||1||1|EntrezGene|||||||25||||||||||||||||||||VUS|0.27201134|HP:0000951&HP:0003124||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp|,TCGCTCTGGACACGGAGGTGG|inframe_insertion|MODERATE|LDLR|3949|Transcript|NM_001195798.2|protein_coding|9/18||NM_001195798.2:c.1289_1309dup|NP_001182727.1:p.Val430_Val436dup|1395-1396/5167|1309-1310/2577|437/858|A/VALDTEVA|gcc/gTCGCTCTGGACACGGAGGTGGcc||1||1|||EntrezGene|||||||25||||||||||||||||||||VUS|0.27201134|HP:0000951&HP:0003124||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp|,TCGCTCTGGACACGGAGGTGG|inframe_insertion|MODERATE|LDLR|3949|Transcript|NM_001195799.2|protein_coding|8/17||NM_001195799.2:c.1166_1186dup|NP_001182728.1:p.Val389_Val395dup|1272-1273/5050|1186-1187/2460|396/819|A/VALDTEVA|gcc/gTCGCTCTGGACACGGAGGTGGcc||1||1|||EntrezGene|||||||25||||||||||||||||||||VUS|0.26963568|HP:0000951&HP:0003124||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp|,TCGCTCTGGACACGGAGGTGG|inframe_insertion|MODERATE|LDLR|3949|Transcript|NM_001195800.2|protein_coding|7/16||NM_001195800.2:c.785_805dup|NP_001182729.1:p.Val262_Val268dup|891-892/4669|805-806/2079|269/692|A/VALDTEVA|gcc/gTCGCTCTGGACACGGAGGTGGcc||1||1|||EntrezGene|||||||25||||||||||||||||||||VUS|0.3952981|HP:0000951&HP:0003124||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp|,TCGCTCTGGACACGGAGGTGG|inframe_insertion|MODERATE|LDLR|3949|Transcript|NM_001195803.2|protein_coding|8/16||NM_001195803.2:c.908_928dup|NP_001182732.1:p.Val303_Val309dup|1014-1015/4639|928-929/2049|310/682|A/VALDTEVA|gcc/gTCGCTCTGGACACGGAGGTGGcc||1||1|||EntrezGene|||||||25||||||||||||||||||||VUS|0.30903387|HP:0000951&HP:0003124||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:.:10:AR:.:0:3949:1 0|1:.:10:.:.:.:.:. 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
100
- 19 17449399 . C T . PASS CSQ=T|missense_variant|MODERATE|GTPBP3|84705|Transcript|NM_001128855.3|protein_coding|4/9||NM_001128855.3:c.440C>T|NP_001122327.1:p.Ala147Val|499/2503|440/1416|147/471|A/V|gCg/gTg|rs774708853&COSV50176281|1||1|||EntrezGene|||||0|0.999||likely_pathogenic|0&1|1&1||||||||-39|-47|-19|31|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.8068815|HP:0000951||AR|LP||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,T|missense_variant|MODERATE|GTPBP3|84705|Transcript|NM_001195422.1|protein_coding|4/9||NM_001195422.1:c.506C>T|NP_001182351.1:p.Ala169Val|528/2595|506/1545|169/514|A/V|gCg/gTg|rs774708853&COSV50176281|1||1|||EntrezGene|||||0|0.997||likely_pathogenic|0&1|1&1||||||||-39|-47|-19|31|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.75153595|HP:0000951||AR|LP||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,T|upstream_gene_variant|MODIFIER|ANO8|57719|Transcript|NM_020959.3|protein_coding||||||||||rs774708853&COSV50176281|1|3735|-1|||EntrezGene||||||||likely_pathogenic|0&1|1&1||||||||-39|-47|-19|31|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.0217757||||||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&clinVar&exit_lp|,T|missense_variant|MODERATE|GTPBP3|84705|Transcript|NM_032620.4|protein_coding|4/9||NM_032620.4:c.440C>T|NP_116009.2:p.Ala147Val|499/2566|440/1479|147/492|A/V|gCg/gTg|rs774708853&COSV50176281|1||1|||EntrezGene|||||0|0.999||likely_pathogenic|0&1|1&1||||||||-39|-47|-19|31|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.8068815|HP:0000951||AR|LP||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,T|missense_variant|MODERATE|GTPBP3|84705|Transcript|NM_133644.4|protein_coding|4/8||NM_133644.4:c.440C>T|NP_598399.2:p.Ala147Val|499/2662|440/1575|147/524|A/V|gCg/gTg|rs774708853&COSV50176281|1||1||1|EntrezGene|||||0|0.999||likely_pathogenic|0&1|1&1||||||||-39|-47|-19|31|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.8068815|HP:0000951||AR|LP||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,T|regulatory_region_variant|MODIFIER|||RegulatoryFeature|ENSR00000107883|promoter||||||||||rs774708853&COSV50176281|1|||||||||||||likely_pathogenic|0&1|1&1||||||||||||||||||||||||||19:17449399-17449399|7.96883e-06|0|488525|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&clinVar&exit_lp| GT:AD:DP:VI:VIC:VID:VIM 1|0:25,25:50:AD:.:1:0 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:.
100
+ 19 17449399 . C T . PASS . GT:AD:DP:VI:VIC:VID:VIM 1|0:25,25:50:AD:.:1:0 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:.
101
101
  19 17451997 . GA G . PASS CSQ=-|frameshift_variant|HIGH|GTPBP3|84705|Transcript|NM_001128855.3|protein_coding|8/9||NM_001128855.3:c.1058del|NP_001122327.1:p.Asn353ThrfsTer26|1117/2503|1058/1416|353/471|N/X|aAc/ac||1||1|||EntrezGene|||||||1|||||||||||34|33|-7|33|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.9804278|HP:0000951||AR|LP|||||||||||LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|GTPBP3|84705|Transcript|NM_001195422.1|protein_coding|8/9||NM_001195422.1:c.1187del|NP_001182351.1:p.Asn396ThrfsTer26|1209/2595|1187/1545|396/514|N/X|aAc/ac||1||1|||EntrezGene|||||||1|||||||||||34|33|-7|33|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.98119754|HP:0000951||AR|LP|||||||||||LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|GTPBP3|84705|Transcript|NM_032620.4|protein_coding|8/9||NM_032620.4:c.1121del|NP_116009.2:p.Asn374ThrfsTer26|1180/2566|1121/1479|374/492|N/X|aAc/ac||1||1|||EntrezGene|||||||1|||||||||||34|33|-7|33|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.98185974|HP:0000951||AR|LP|||||||||||LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|GTPBP3|84705|Transcript|NM_133644.4|protein_coding|7/8||NM_133644.4:c.1217del|NP_598399.2:p.Asn406ThrfsTer26|1276/2662|1217/1575|406/524|N/X|aAc/ac||1||1||1|EntrezGene|||||||1|||||||||||34|33|-7|33|0.01|0.00|0.00|0.00|GTPBP3|VUS|0.97986597|HP:0000951||AR|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VIC:VID:VIM 1|1:0,50:50:.:1:0 0|0:10,0:10:.:.:. 0|0:50,0:50:.:.:. 1|0:25,25:50:.:.:. 1|1:0,50:50:.:.:. 1|1:0,50:50:.:.:.
102
102
  22 50721546 . C T . PASS CSQ=T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376864.1|protein_coding|17/37||NM_001376864.1:c.2749G>A|NP_001363793.1:p.Gly917Ser|2881/6611|2749/5754|917/1917|G/S|Ggc/Agc|rs1377653283|1||-1||1|EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376865.1|protein_coding|18/38||NM_001376865.1:c.2818G>A|NP_001363794.1:p.Gly940Ser|2898/6391|2818/5586|940/1861|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376866.1|protein_coding|17/37||NM_001376866.1:c.2749G>A|NP_001363795.1:p.Gly917Ser|2909/6402|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376867.1|protein_coding|18/38||NM_001376867.1:c.2749G>A|NP_001363796.1:p.Gly917Ser|2969/6462|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376868.1|protein_coding|18/38||NM_001376868.1:c.2749G>A|NP_001363797.1:p.Gly917Ser|2962/6455|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376869.1|protein_coding|16/36||NM_001376869.1:c.2749G>A|NP_001363798.1:p.Gly917Ser|2856/6349|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376870.1|protein_coding|17/37||NM_001376870.1:c.2749G>A|NP_001363799.1:p.Gly917Ser|2881/6374|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376871.1|protein_coding|17/37||NM_001376871.1:c.2749G>A|NP_001363800.1:p.Gly917Ser|2874/6367|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376872.1|protein_coding|19/39||NM_001376872.1:c.2749G>A|NP_001363801.1:p.Gly917Ser|3066/6559|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376873.1|protein_coding|18/38||NM_001376873.1:c.2749G>A|NP_001363802.1:p.Gly917Ser|3218/6711|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376874.1|protein_coding|18/38||NM_001376874.1:c.2749G>A|NP_001363803.1:p.Gly917Ser|2934/6427|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376875.1|protein_coding|16/36||NM_001376875.1:c.2749G>A|NP_001363804.1:p.Gly917Ser|2933/6426|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376876.1|protein_coding|18/38||NM_001376876.1:c.2749G>A|NP_001363805.1:p.Gly917Ser|2927/6420|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376877.1|protein_coding|18/38||NM_001376877.1:c.2749G>A|NP_001363806.1:p.Gly917Ser|3198/6691|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376878.1|protein_coding|16/36||NM_001376878.1:c.2749G>A|NP_001363807.1:p.Gly917Ser|2821/6314|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376879.1|protein_coding|19/39||NM_001376879.1:c.2749G>A|NP_001363808.1:p.Gly917Ser|3101/6594|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376880.1|protein_coding|17/37||NM_001376880.1:c.2749G>A|NP_001363809.1:p.Gly917Ser|2991/6484|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376881.1|protein_coding|18/38||NM_001376881.1:c.2749G>A|NP_001363810.1:p.Gly917Ser|3046/6539|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376882.1|protein_coding|17/37||NM_001376882.1:c.2749G>A|NP_001363811.1:p.Gly917Ser|3165/6658|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376883.1|protein_coding|17/37||NM_001376883.1:c.2749G>A|NP_001363812.1:p.Gly917Ser|2881/6350|2749/5493|917/1830|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376884.1|protein_coding|16/36||NM_001376884.1:c.2749G>A|NP_001363813.1:p.Gly917Ser|2821/6236|2749/5439|917/1812|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376885.1|protein_coding|17/37||NM_001376885.1:c.2749G>A|NP_001363814.1:p.Gly917Ser|2909/6324|2749/5439|917/1812|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_001376886.1|protein_coding|17/37||NM_001376886.1:c.2656G>A|NP_001363815.1:p.Gly886Ser|2876/6369|2656/5424|886/1807|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene||||||||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.14842245||||||||22:50721546-50721546|4.49665e-06|0|||||VUS|filter&vkgl&clinVar&gnomad&effect&sift&polyphen&impact&exit_vus|,T|missense_variant|MODERATE|PLXNB2|23654|Transcript|NM_012401.4|protein_coding|17/37||NM_012401.4:c.2749G>A|NP_036533.2:p.Gly917Ser|2916/6409|2749/5517|917/1838|G/S|Ggc/Agc|rs1377653283|1||-1|||EntrezGene|||||0|1||||||||||||-2|36|-32|-38|0.05|0.00|0.00|0.00|PLXNB2|VUS|0.92206705||||||||22:50721546-50721546|4.49665e-06|0|||||LP|filter&vkgl&clinVar&gnomad&effect&sift&exit_lp| GT:AD:DP:VI:VIC:VID:VIM 1|1:0,50:50:AR:.:1:0 0|0:10,0:10:.:.:.:. 1|0:25,25:50:.:.:.:. 0|0:50,0:50:.:.:.:. 1|0:25,25:50:.:.:.:. 0|0:50,0:50:.:.:.:.
103
103
  X 48933021 x_chrom A T . PASS CSQ=T|splice_donor_variant|HIGH|WDR45|11152|Transcript|NM_001029896.2|protein_coding||9/10|NM_001029896.2:c.827+2T>A|||||||CS135341|1||-1|||EntrezGene||||||||||1||||||||27|28|-2|2|0.02|0.00|0.01|0.99|WDR45|VUS|0.9700852|HP:0000951||XL|LP|||||||||||LP|filter&vkgl&exit_lp|,T|splice_donor_variant|HIGH|WDR45|11152|Transcript|NM_007075.4|protein_coding||10/11|NM_007075.4:c.830+2T>A|||||||CS135341|1||-1||1|EntrezGene||||||||||1||||||||27|28|-2|2|0.02|0.00|0.01|0.99|WDR45|VUS|0.9700852|HP:0000951||XL|LP|||||||||||LP|filter&vkgl&exit_lp|,T|upstream_gene_variant|MODIFIER|PRAF2|11230|Transcript|NM_007213.3|protein_coding||||||||||CS135341|1|1360|-1|||EntrezGene||||||||||1||||||||27|28|-2|2|0.02|0.00|0.01|0.99|WDR45|VUS|0.0149048455|||||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&exit_lp| GT:AD:DP:VIC:VID:VIM 1|0:25,25:50:.:1:0 1|0:25,25:50:.:.:. 0|0:50,0:50:.:.:. 1|1:0,50:50:.:.:. 0|0:50,0:50:.:.:. 1|1:0,50:50:.:.:.
@@ -9,7 +9,7 @@
9
9
  ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
10
10
  ##HPO=List of HPO terms for the gene
11
11
  ##INFO=<ID=BND_DEPTH,Number=1,Type=Integer,Description="Read depth at local translocation breakend">
12
- ##INFO=<ID=CSQ,Number=.,Type=String,Description="Consequence annotations from Ensembl VEP. Format: Allele|Consequence|IMPACT|SYMBOL|Gene|Feature_type|Feature|BIOTYPE|EXON|INTRON|HGVSc|HGVSp|cDNA_position|CDS_position|Protein_position|Amino_acids|Codons|Existing_variation|ALLELE_NUM|DISTANCE|STRAND|FLAGS|PICK|SYMBOL_SOURCE|HGNC_ID|REFSEQ_MATCH|REFSEQ_OFFSET|SOURCE|SIFT|PolyPhen|HGVS_OFFSET|CLIN_SIG|SOMATIC|PHENO|PUBMED|CHECK_REF|MOTIF_NAME|MOTIF_POS|HIGH_INF_POS|MOTIF_SCORE_CHANGE|TRANSCRIPTION_FACTORS|SpliceAI_pred_DP_AG|SpliceAI_pred_DP_AL|SpliceAI_pred_DP_DG|SpliceAI_pred_DP_DL|SpliceAI_pred_DS_AG|SpliceAI_pred_DS_AL|SpliceAI_pred_DS_DG|SpliceAI_pred_DS_DL|SpliceAI_pred_SYMBOL|CAPICE_CL|CAPICE_SC|HPO|IncompletePenetrance|InheritanceModesGene|VKGL_CL|ASV_ACMG_class|ASV_AnnotSV_ranking_criteria|ASV_AnnotSV_ranking_score|gnomAD|gnomAD_AF|gnomAD_HN|VIPC|VIPP|VIPL">
12
+ ##INFO=<ID=CSQ,Number=.,Type=String,Description="Consequence annotations from Ensembl VEP. Format: Allele|Consequence|IMPACT|SYMBOL|Gene|Feature_type|Feature|BIOTYPE|EXON|INTRON|HGVSc|HGVSp|cDNA_position|CDS_position|Protein_position|Amino_acids|Codons|Existing_variation|ALLELE_NUM|DISTANCE|STRAND|FLAGS|PICK|SYMBOL_SOURCE|HGNC_ID|REFSEQ_MATCH|REFSEQ_OFFSET|SOURCE|SIFT|PolyPhen|HGVS_OFFSET|CLIN_SIG|SOMATIC|PHENO|PUBMED|CHECK_REF|MOTIF_NAME|MOTIF_POS|HIGH_INF_POS|MOTIF_SCORE_CHANGE|TRANSCRIPTION_FACTORS|SpliceAI_pred_DP_AG|SpliceAI_pred_DP_AL|SpliceAI_pred_DP_DG|SpliceAI_pred_DP_DL|SpliceAI_pred_DS_AG|SpliceAI_pred_DS_AL|SpliceAI_pred_DS_DG|SpliceAI_pred_DS_DL|SpliceAI_pred_SYMBOL|CAPICE_CL|CAPICE_SC|HPO|IncompletePenetrance|InheritanceModesGene|VKGL_CL|ASV_ACMG_class|ASV_AnnotSV_ranking_criteria|ASV_AnnotSV_ranking_score|gnomAD|gnomAD_AF|gnomAD_HN|VIPC|VIPP_renamed|VIPL_renamed">
13
13
  ##INFO=<ID=MATEID,Number=.,Type=String,Description="ID of mate breakend">
14
14
  ##INFO=<ID=MATE_BND_DEPTH,Number=1,Type=Integer,Description="Read depth at remote translocation mate breakend">
15
15
  ##INFO=<ID=SVLEN,Number=.,Type=Integer,Description="Difference in length between REF and ALT alleles">
@@ -120,7 +120,7 @@ export class MockApiClient implements Api {
120
120
  args: "-i testdata_b37_vip.vcf -t /Users/user/vip-report-template/dist/vip-report-template.html -f",
121
121
  },
122
122
  htsFile: {
123
- uri: "testdata_b37_vip.vcf",
123
+ uri: "/path/to/testdata_b37_vip.vcf",
124
124
  htsFormat: "VCF",
125
125
  genomeAssembly: "GRCh37",
126
126
  },
@@ -14,11 +14,18 @@ type AppStateVariants = {
14
14
  sort?: SortOrder | null; // null: do not sort. undefined: sort undefined
15
15
  };
16
16
 
17
+ type AppStateSamples = {
18
+ page?: number;
19
+ searchQuery?: string;
20
+ probandFilterValue?: boolean;
21
+ };
22
+
17
23
  export type AppState = {
18
24
  variants?: AppStateVariants;
19
- samples?: {
25
+ sampleVariants?: {
20
26
  [key: number]: { variants: AppStateVariants };
21
27
  };
28
+ samples?: AppStateSamples;
22
29
  };
23
30
 
24
31
  export type AppActions = {
@@ -26,22 +33,23 @@ export type AppActions = {
26
33
  setVariantsPage(page: number): void;
27
34
  setVariantsPageSize(pageSize: number): void;
28
35
  setVariantsSearchQuery(searchQuery: string): void;
29
- clearVariantsSearchQuery(): void;
30
36
  setVariantsFilterQuery(query: QueryClause): void;
31
37
  clearVariantsFilterQuery(selector: Selector): void;
32
38
  setVariantsSort(sort: SortOrder | null): void;
33
39
  setSampleVariantsPage(sample: Item<Sample>, page: number): void;
34
40
  setSampleVariantsPageSize(sample: Item<Sample>, pageSize: number): void;
35
41
  setSampleVariantsSearchQuery(sample: Item<Sample>, searchQuery: string): void;
36
- clearSampleVariantsSearchQuery(sample: Item<Sample>): void;
37
42
  setSampleVariantsFilterQuery(sample: Item<Sample>, query: QueryClause): void;
38
43
  clearSampleVariantsFilterQuery(sample: Item<Sample>, selector: Selector): void;
39
44
  setSampleVariantsSort(sample: Item<Sample>, sort: SortOrder | null): void;
45
+ setSamplePage(page: number): void;
46
+ setSampleSearchQuery(searchQuery: string): void;
47
+ setSampleProbandFilterValue(probandFilterValue: boolean): void;
40
48
  };
41
49
 
42
50
  export type AppStore = [state: AppState, actions: AppActions];
43
51
 
44
- const defaultState: AppState = { variants: {}, samples: {} };
52
+ const defaultState: AppState = { variants: {}, sampleVariants: {} };
45
53
 
46
54
  const StoreContext = createContext<AppStore>() as Context<AppStore>;
47
55
 
@@ -49,12 +57,12 @@ export const Provider: ParentComponent = (props) => {
49
57
  const [state, setState] = createStore(defaultState);
50
58
 
51
59
  function getVariants(sample: Item<Sample>) {
52
- return state.samples ? state.samples[sample.id]?.variants || {} : {};
60
+ return state.sampleVariants ? state.sampleVariants[sample.id]?.variants || {} : {};
53
61
  }
54
62
 
55
63
  const actions: AppActions = {
56
64
  reset() {
57
- setState({ variants: undefined, samples: undefined });
65
+ setState({ variants: undefined, sampleVariants: undefined, samples: undefined });
58
66
  },
59
67
  setVariantsPage(page: number) {
60
68
  setState({ variants: { ...(state.variants || {}), page } });
@@ -65,9 +73,6 @@ export const Provider: ParentComponent = (props) => {
65
73
  setVariantsSearchQuery(searchQuery: string) {
66
74
  setState({ variants: { ...(state.variants || {}), searchQuery } });
67
75
  },
68
- clearVariantsSearchQuery() {
69
- setState({ variants: { ...(state.variants || {}), searchQuery: undefined } });
70
- },
71
76
  setVariantsFilterQuery(query: QueryClause) {
72
77
  setState({
73
78
  variants: {
@@ -93,37 +98,34 @@ export const Provider: ParentComponent = (props) => {
93
98
  });
94
99
  },
95
100
  setSampleVariantsPage(sample: Item<Sample>, page: number) {
96
- setState({ samples: { ...(state.samples || {}), [sample.id]: { variants: { ...getVariants(sample), page } } } });
101
+ setState({
102
+ sampleVariants: {
103
+ ...(state.sampleVariants || {}),
104
+ [sample.id]: { variants: { ...getVariants(sample), page } },
105
+ },
106
+ });
97
107
  },
98
108
  setSampleVariantsPageSize(sample: Item<Sample>, pageSize: number) {
99
109
  setState({
100
- samples: {
101
- ...(state.samples || {}),
110
+ sampleVariants: {
111
+ ...(state.sampleVariants || {}),
102
112
  [sample.id]: { variants: { ...getVariants(sample), pageSize, page: undefined } },
103
113
  },
104
114
  });
105
115
  },
106
116
  setSampleVariantsSearchQuery(sample: Item<Sample>, searchQuery: string) {
107
117
  setState({
108
- samples: {
109
- ...(state.samples || {}),
118
+ sampleVariants: {
119
+ ...(state.sampleVariants || {}),
110
120
  [sample.id]: { variants: { ...getVariants(sample), searchQuery, page: undefined } },
111
121
  },
112
122
  });
113
123
  },
114
- clearSampleVariantsSearchQuery(sample: Item<Sample>) {
115
- setState({
116
- samples: {
117
- ...(state.samples || {}),
118
- [sample.id]: { variants: { ...getVariants(sample), searchQuery: undefined, page: undefined } },
119
- },
120
- });
121
- },
122
124
  setSampleVariantsFilterQuery(sample: Item<Sample>, query: QueryClause) {
123
125
  const variants = getVariants(sample);
124
126
  setState({
125
- samples: {
126
- ...(state.samples || {}),
127
+ sampleVariants: {
128
+ ...(state.sampleVariants || {}),
127
129
  [sample.id]: {
128
130
  variants: {
129
131
  ...variants,
@@ -137,8 +139,8 @@ export const Provider: ParentComponent = (props) => {
137
139
  clearSampleVariantsFilterQuery(sample: Item<Sample>, selector: Selector) {
138
140
  const variants = getVariants(sample);
139
141
  setState({
140
- samples: {
141
- ...(state.samples || {}),
142
+ sampleVariants: {
143
+ ...(state.sampleVariants || {}),
142
144
  [sample.id]: {
143
145
  variants: {
144
146
  ...getVariants(sample),
@@ -151,9 +153,21 @@ export const Provider: ParentComponent = (props) => {
151
153
  },
152
154
  setSampleVariantsSort(sample: Item<Sample>, sort: SortOrder | null) {
153
155
  setState({
154
- samples: { ...(state.samples || {}), [sample.id]: { variants: { ...getVariants(sample), sort } } },
156
+ sampleVariants: {
157
+ ...(state.sampleVariants || {}),
158
+ [sample.id]: { variants: { ...getVariants(sample), sort } },
159
+ },
155
160
  });
156
161
  },
162
+ setSamplePage(page: number) {
163
+ setState({ samples: { ...(state.samples || {}), page } });
164
+ },
165
+ setSampleSearchQuery(searchQuery: string) {
166
+ setState({ samples: { ...(state.samples || {}), searchQuery } });
167
+ },
168
+ setSampleProbandFilterValue(probandFilterValue: boolean) {
169
+ setState({ samples: { ...(state.samples || {}), probandFilterValue } });
170
+ },
157
171
  };
158
172
  const store: AppStore = [state, actions];
159
173
 
@@ -132,15 +132,16 @@ export async function fetchRecords(params: Params) {
132
132
  const pickIndex = fieldMetas.findIndex((item) => item.id === "PICK");
133
133
 
134
134
  for (const record of records.items) {
135
- const csqArray = record.data.n.CSQ as Value[][];
136
-
137
- csqArray.sort((aValue, bValue) => {
138
- for (const order of orders) {
139
- const compareValue = compareCsq(aValue, bValue, order.field, order.direction);
140
- if (compareValue !== 0) return compareValue;
141
- }
142
- return compareCsqDefault(aValue, bValue, pickIndex, consequenceIndex);
143
- });
135
+ const csqArray = record.data.n.CSQ as Value[][] | undefined;
136
+ if (csqArray) {
137
+ csqArray.sort((aValue, bValue) => {
138
+ for (const order of orders) {
139
+ const compareValue = compareCsq(aValue, bValue, order.field, order.direction);
140
+ if (compareValue !== 0) return compareValue;
141
+ }
142
+ return compareCsqDefault(aValue, bValue, pickIndex, consequenceIndex);
143
+ });
144
+ }
144
145
  }
145
146
  return records;
146
147
  }
@@ -12,6 +12,26 @@ import { Metadata } from "@molgenis/vip-report-vcf/src/Vcf";
12
12
  import { FieldMetadata, InfoMetadata } from "@molgenis/vip-report-vcf/src/MetadataParser";
13
13
  import { FilterQueries } from "../store";
14
14
 
15
+ export function createSampleQuery(
16
+ sample: Item<Sample>,
17
+ search: string | undefined,
18
+ filters: FilterQueries | undefined,
19
+ metadata: Metadata
20
+ ): Query | null {
21
+ const genotypeSelector: Selector = ["s", sample.data.index, "GT", "t"];
22
+ const sampleQuery: Query = {
23
+ operator: "and",
24
+ args: [
25
+ { selector: genotypeSelector, operator: "!=", args: "hom_r" },
26
+ { selector: genotypeSelector, operator: "!=", args: "miss" },
27
+ ],
28
+ };
29
+ const searchFilterQuery = createQuery(search, filters, metadata);
30
+ const query: Query =
31
+ searchFilterQuery !== null ? { operator: "and", args: [sampleQuery, searchFilterQuery] } : sampleQuery;
32
+ return query;
33
+ }
34
+
15
35
  export function createQuery(
16
36
  search: string | undefined,
17
37
  filters: FilterQueries | undefined,
@@ -63,6 +63,9 @@ export const SampleVariantConsequence: Component<{
63
63
  consequenceId: number;
64
64
  decisionTree: DecisionTree | null;
65
65
  }> = (props) => {
66
+ const hasDecisionTreePathMeta = () =>
67
+ (props.recordsMeta.info.CSQ?.nested?.items || []).findIndex((csq) => csq.id === "VIPP") !== -1;
68
+
66
69
  return (
67
70
  <>
68
71
  <div class="columns">
@@ -74,7 +77,7 @@ export const SampleVariantConsequence: Component<{
74
77
  record={props.variant}
75
78
  />
76
79
  </div>
77
- {props.decisionTree !== null && (
80
+ {props.decisionTree !== null && hasDecisionTreePathMeta() && (
78
81
  <div class="column">
79
82
  <h1 class="title is-5">Classification tree path</h1>
80
83
  <DecisionTreePath
@@ -6,7 +6,7 @@ import { SearchBox } from "../components/SearchBox";
6
6
  import { Sort, SortEvent } from "../components/Sort";
7
7
  import { Pager } from "../components/record/Pager";
8
8
  import { RecordDownload } from "../components/record/RecordDownload";
9
- import { createQuery, infoSelector, infoSortPath, sampleSelector } from "../utils/query";
9
+ import { createSampleQuery, infoSelector, infoSortPath, sampleSelector } from "../utils/query";
10
10
  import { VariantsSampleTable } from "../components/VariantsSampleTable";
11
11
  import {
12
12
  fetchHtsFileMetadata,
@@ -66,7 +66,7 @@ export const SampleVariants: Component<{
66
66
  const [state, actions] = useStore();
67
67
 
68
68
  function getStateVariants() {
69
- return state.samples ? state.samples[props.sample.id]?.variants : undefined;
69
+ return state.sampleVariants ? state.sampleVariants[props.sample.id]?.variants : undefined;
70
70
  }
71
71
 
72
72
  // state initialization - start
@@ -165,7 +165,7 @@ export const SampleVariants: Component<{
165
165
 
166
166
  const params = (): Params => {
167
167
  return {
168
- query: createQuery(searchQuery(), filterQueries(), props.recordsMeta) || undefined,
168
+ query: createSampleQuery(props.sample, searchQuery(), filterQueries(), props.recordsMeta) || undefined,
169
169
  sort: sort() || undefined,
170
170
  page: page() || undefined,
171
171
  size: pageSize() || undefined,
@@ -1,57 +1,116 @@
1
- import { Component, createResource, createSignal } from "solid-js";
1
+ import { Component, createResource, Show } from "solid-js";
2
2
  import { SampleTable } from "../components/SampleTable";
3
3
  import { Pager } from "../components/record/Pager";
4
4
  import { SearchBox } from "../components/SearchBox";
5
5
  import { Checkbox, CheckboxEvent } from "../components/Checkbox";
6
6
  import { Breadcrumb } from "../components/Breadcrumb";
7
- import { EMPTY_PARAMS, EMPTY_PHENOTYPES, EMPTY_SAMPLES_PAGE, fetchPhenotypes, fetchSamples } from "../utils/ApiUtils";
7
+ import { EMPTY_PARAMS, EMPTY_PHENOTYPES, fetchPhenotypes, fetchSamples } from "../utils/ApiUtils";
8
+ import { useStore } from "../store";
9
+ import { Params, Query, QueryClause } from "@molgenis/vip-report-api/src/Api";
10
+ import { Loader } from "../components/Loader";
8
11
 
9
12
  export const Samples: Component = () => {
10
- const [params, setParams] = createSignal(EMPTY_PARAMS);
11
- const [samples] = createResource(params, fetchSamples, { initialValue: EMPTY_SAMPLES_PAGE });
13
+ const [state, actions] = useStore();
12
14
  const [phenotypes] = createResource(EMPTY_PARAMS, fetchPhenotypes, { initialValue: EMPTY_PHENOTYPES });
13
15
 
14
- const onPageChange = (page: number) => setParams({ page });
15
- const onSearchChange = (search: string) =>
16
- setParams({
17
- page: 0,
18
- query: search !== "" ? { selector: ["person", "individualId"], operator: "~=", args: search } : undefined,
19
- });
16
+ function getStateSamples() {
17
+ return state.samples ? state.samples : undefined;
18
+ }
19
+
20
+ if (getStateSamples()?.page === undefined) {
21
+ actions.setSamplePage(0);
22
+ }
23
+
24
+ const onPageChange = (page: number) => actions.setSamplePage(page);
25
+ const onSearchChange = (search: string) => {
26
+ actions.setSampleSearchQuery(search);
27
+ actions.setSamplePage(0);
28
+ };
20
29
  const onProbandFilterChange = (event: CheckboxEvent) => {
21
- setParams({
22
- page: 0,
23
- query: event.checked ? { selector: ["proband"], operator: "==", args: event.checked } : undefined,
24
- });
30
+ actions.setSampleProbandFilterValue(event.checked);
31
+ actions.setSamplePage(0);
32
+ };
33
+
34
+ function createQuery(search: string | undefined, probandFilterValue: boolean | undefined): Query | null {
35
+ const searchQuery: QueryClause | undefined =
36
+ search !== undefined && search !== ""
37
+ ? { selector: ["person", "individualId"], operator: "~=", args: search }
38
+ : undefined;
39
+ const probandQuery: QueryClause | undefined =
40
+ probandFilterValue !== undefined && probandFilterValue
41
+ ? { selector: ["proband"], operator: "==", args: probandFilterValue }
42
+ : undefined;
43
+ if (searchQuery !== undefined || probandQuery != undefined) {
44
+ const args: QueryClause[] = [];
45
+ if (searchQuery !== undefined) {
46
+ args.push(searchQuery);
47
+ }
48
+ if (probandQuery !== undefined) {
49
+ args.push(probandQuery);
50
+ }
51
+ if (args.length > 0) {
52
+ const query: Query = {
53
+ operator: "and",
54
+ args: args,
55
+ };
56
+ return query;
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+
62
+ const params = (): Params => {
63
+ return {
64
+ query: createQuery(searchQuery(), probandFilterValue()) || undefined,
65
+ page: page() || undefined,
66
+ };
25
67
  };
26
68
 
69
+ const page = () => getStateSamples()?.page;
70
+ const searchQuery = () => getStateSamples()?.searchQuery;
71
+ const probandFilterValue = () => getStateSamples()?.probandFilterValue;
72
+
73
+ const [samples] = createResource(params, fetchSamples);
74
+
27
75
  return (
28
76
  <>
29
77
  <Breadcrumb items={[{ text: "Samples" }]} />
30
- <div class="columns">
31
- <div class="column is-4 is-offset-3">
32
- {!samples.loading && <Pager page={samples().page} onPageChange={onPageChange} />}
33
- </div>
34
- <div class="column is-2 is-offset-1">
35
- {!samples.loading && <span class="is-pulled-right">{samples().page.totalElements} records</span>}
36
- </div>
37
- </div>
38
-
39
- <div class="columns">
40
- <div class="column is-1-fullhd is-2">
41
- <SearchBox onInput={onSearchChange} />
42
- <p class="has-text-weight-semibold">Proband</p>
43
- <div class="field">
44
- <div class="control">
45
- <Checkbox value={"proband"} label="" onChange={onProbandFilterChange} />
78
+ <Show when={samples()} fallback={<Loader />}>
79
+ {(samples) => (
80
+ <>
81
+ <div class="columns">
82
+ <div class="column is-4 is-offset-3">{<Pager page={samples.page} onPageChange={onPageChange} />}</div>
83
+ <div class="column is-2 is-offset-1">
84
+ {<span class="is-pulled-right">{samples.page.totalElements} records</span>}
85
+ </div>
86
+ </div>
87
+
88
+ <div class="columns">
89
+ <div class="column is-1-fullhd is-2">
90
+ <SearchBox onInput={onSearchChange} value={state.samples?.searchQuery} />
91
+ <p class="has-text-weight-semibold">Proband</p>
92
+ <div class="field">
93
+ <div class="control">
94
+ <Checkbox
95
+ value={"proband"}
96
+ label=""
97
+ onChange={onProbandFilterChange}
98
+ checked={state.samples?.probandFilterValue}
99
+ />
100
+ </div>
101
+ </div>
102
+ </div>
103
+ <div class="column">
104
+ <span class="is-italic">
105
+ Click on an individual id for detailed information for this sample. In this screen a link to the
106
+ variants for this sample is available.
107
+ </span>
108
+ {!phenotypes.loading && <SampleTable samples={samples.items} phenotypes={phenotypes().items} />}
109
+ </div>
46
110
  </div>
47
- </div>
48
- </div>
49
- <div class="column">
50
- {!samples.loading && !phenotypes.loading && (
51
- <SampleTable samples={samples().items} phenotypes={phenotypes().items} />
52
- )}
53
- </div>
54
- </div>
111
+ </>
112
+ )}
113
+ </Show>
55
114
  </>
56
115
  );
57
116
  };
@@ -28,6 +28,8 @@ export const VariantConsequence: Component = () => {
28
28
 
29
29
  const csqFields = (): FieldMetadata[] => recordsMetadata().info.CSQ?.nested?.items || [];
30
30
  const csqValues = (): ValueArray => getSpecificConsequence(variant().data.n.CSQ as ValueArray, consequenceId);
31
+
32
+ const hasDecisionTreePathMeta = () => csqFields().findIndex((csq) => csq.id === "VIPP") !== -1;
31
33
  return (
32
34
  <Show when={!variant.loading} fallback={<Loader />}>
33
35
  <Breadcrumb
@@ -42,17 +44,19 @@ export const VariantConsequence: Component = () => {
42
44
  <h1 class="title is-5">Consequence</h1>
43
45
  <ConsequenceTable csqMetadata={csqFields()} csqValues={csqValues()} record={variant()} />
44
46
  </div>
45
- <Show when={!recordsMetadata.loading && !decisionTree.loading && (decisionTree() as DecisionTree)}>
46
- {(decisionTree) => (
47
- <div class="column">
48
- <h1 class="title is-5">Classification tree path</h1>
49
- <DecisionTreePath
50
- decisionTree={decisionTree}
51
- path={getDecisionTreePath(recordsMetadata(), variant(), consequenceId)}
52
- />
53
- </div>
54
- )}
55
- </Show>
47
+ {hasDecisionTreePathMeta() && (
48
+ <Show when={!recordsMetadata.loading && !decisionTree.loading && (decisionTree() as DecisionTree)}>
49
+ {(decisionTree) => (
50
+ <div class="column">
51
+ <h1 class="title is-5">Classification tree path</h1>
52
+ <DecisionTreePath
53
+ decisionTree={decisionTree}
54
+ path={getDecisionTreePath(recordsMetadata(), variant(), consequenceId)}
55
+ />
56
+ </div>
57
+ )}
58
+ </Show>
59
+ )}
56
60
  </div>
57
61
  <div class="columns">
58
62
  <div class="column is-6">