Skip to content

Commit

Permalink
refactor: create main views per kind
Browse files Browse the repository at this point in the history
  • Loading branch information
targos committed Nov 16, 2022
1 parent 6898684 commit 82b31f3
Show file tree
Hide file tree
Showing 25 changed files with 286 additions and 202 deletions.
9 changes: 9 additions & 0 deletions playwright/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Test components</title>
<style>
html,
body,
#root {
margin: 0;
padding: 0;
height: 100%;
}
</style>
</head>
<body>
<div id="root"></div>
Expand Down
4 changes: 2 additions & 2 deletions src/app-data/state/appStateActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
MeasurementKindAndId,
Measurements,
} from './data/index';
import { MeasurementDisplay } from './view/index';
import { MeasurementViewState } from './view/index';

type ActionType<Action, Payload = void> = Payload extends void
? { type: Action }
Expand All @@ -19,6 +19,6 @@ export type AppStateAction =
'CHANGE_MEASUREMENT_DISPLAY',
{
measurement: MeasurementKindAndId;
display: Partial<MeasurementDisplay>;
display: Partial<MeasurementViewState>;
}
>;
15 changes: 10 additions & 5 deletions src/app-data/state/data/DataState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,24 @@ export interface DataState {
* If we have isotherm with gaz absorption / desorption this format should also be used.
* The 'info'for each 'Measurement' should be normalized.
*/

type UUID = string;

export interface MeasurementBase {
id: string;
id: UUID;
title?: string;
instrument?: Instrument;
filename?: string;
path?: string;
meta: Record<string, any>;
// Structured object
info: Record<string, any>;
data: {
meta?: Record<string, any>;
// Unstructured object
meta: Record<string, any>;
data: Array<{
info?: Record<string, any>;
meta?: Record<string, any>;
variables: Record<string, MeasurementVariable>;
}[];
}>;
}

export interface Measurements {
Expand Down
9 changes: 4 additions & 5 deletions src/app-data/state/data/data.helpers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { assert, assertNotNull } from '../../../utils/assert';
import { assertNotNull } from '../../../utils/assert';
import type { AppState } from '../index';

import type { MeasurementKind, Measurements } from './DataState';
Expand All @@ -22,7 +22,6 @@ export function getMeasurementOrFail(
) {
const result = getMeasurement(measurements, kind, selected);
assertNotNull(result);

return result;
}

Expand All @@ -39,11 +38,11 @@ export function getFirstMeasurementOrFail(
measurements: Measurements,
kind: MeasurementKind,
) {
const measurement = measurements[kind].entries[0] || null;
const measurement = measurements[kind].entries[0];
assertNotNull(measurement);

return { kind, measurement };
}

export function getCurrentMeasurement(state: AppState) {
const selectedMeasurement = getSelectedMeasurement(state);
if (!selectedMeasurement) return null;
Expand Down Expand Up @@ -97,7 +96,7 @@ export function getSelectedMeasurement(

export function getSelectedMeasurementOrFail(state: AppState) {
const selected = getSelectedMeasurement(state);
assert(selected);
assertNotNull(selected);
return selected;
}

Expand Down
1 change: 1 addition & 0 deletions src/app-data/state/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './data/index';
export * from './view/index';
export * from './appState';
22 changes: 19 additions & 3 deletions src/app-data/state/view/ViewState.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
import type { MeasurementKind } from '../index';

export interface ViewState {
selectedMeasurements: Partial<Record<MeasurementKind, Array<string>>>;
selectedKind?: MeasurementKind;
measurements: Record<string, MeasurementDisplay>;
selectedMeasurements: Partial<Record<MeasurementKind, Array<string>>>;
measurements: Record<string, MeasurementViewState>;
// TODO: implement this.
// plot: {
// [key in MeasurementKind]: PlotView;
// };
}

export interface MeasurementDisplay {
// export interface PlotView {
// zoom: {
// x: [number, number];
// y: [number, number];
// };
// }

export interface MeasurementViewState {
lineStroke: string;
// TODO: implement this.
// color: ColorConfig;
// visible: boolean;
}

// type ColorConfig = any;
32 changes: 32 additions & 0 deletions src/app/explorer/ExplorerMainView.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { getCurrentMeasurementData, useAppState } from '../../app-data/index';
import { assertNotNull } from '../../utils/assert';
import { IvMainView, MassMainView } from '../kinds/index';

import { MeasurementExplorer } from './MeasurementExplorer';

export function ExplorerMainView() {
const appState = useAppState();
const data = getCurrentMeasurementData(appState);
assertNotNull(data);
switch (data.kindAndId.kind) {
case 'mass':
return (
<MassMainView
measurement={data.data}
measurementDisplay={data.display}
/>
);
case 'iv':
return (
<IvMainView measurement={data.data} measurementDisplay={data.display} />
);
default: {
return (
<MeasurementExplorer
measurement={data.data}
measurementDisplay={data.display}
/>
);
}
}
}
Loading

0 comments on commit 82b31f3

Please sign in to comment.