From d175870385f1fa46c2339140eb40d40b7ec6b8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Mal=C3=BD?= <michal.maly@ibt.cas.cz> Date: Thu, 4 Aug 2022 09:51:50 +0200 Subject: [PATCH] ReDNATCO plugin stage 15 --- src/apps/rednatco/api-impl.ts | 4 ++-- src/apps/rednatco/api.ts | 17 ++++++++++++++--- src/apps/rednatco/index.tsx | 10 ++++------ src/apps/rednatco/viewer.ts | 4 ++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/apps/rednatco/api-impl.ts b/src/apps/rednatco/api-impl.ts index beb2689f2..b559ba13c 100644 --- a/src/apps/rednatco/api-impl.ts +++ b/src/apps/rednatco/api-impl.ts @@ -24,9 +24,9 @@ export class ReDNATCOMspApiImpl implements ReDNATCOMspApi.Object { this.onEvent(evt); } - init(elemId: string, onEvent?: (evt: ReDNATCOMspApi.Event) => void, onInited?: () => void) { + init(elemId: string, onEvent?: (evt: ReDNATCOMspApi.Event) => void) { this.onEvent = onEvent; - ReDNATCOMsp.init(elemId, onInited); + ReDNATCOMsp.init(elemId); return this; } diff --git a/src/apps/rednatco/api.ts b/src/apps/rednatco/api.ts index b6267aef5..d58ca246c 100644 --- a/src/apps/rednatco/api.ts +++ b/src/apps/rednatco/api.ts @@ -39,7 +39,12 @@ export namespace ReDNATCOMspApi { Commands.SwitchModel; export namespace Events { - export type Type = 'step-deselected'|'step-requested'|'step-selected'; + export type Type = 'ready'|'step-deselected'|'step-requested'|'step-selected'|'structure-loaded'; + + export type Ready = { type: 'ready' } + export function Ready(): Ready { + return { type: 'ready' }; + } export type StepDeselected = { type: 'step-deselected' } export function StepDeselected(): StepDeselected { @@ -59,11 +64,17 @@ export namespace ReDNATCOMspApi { return { type: 'step-selected', success: false, name: '' }; } + export type StructureLoaded = { type: 'structure-loaded' } + export function StructureLoaded(): StructureLoaded { + return { type: 'structure-loaded' }; + } } export type Event = + Events.Ready | Events.StepDeselected | Events.StepRequested | - Events.StepSelected; + Events.StepSelected | + Events.StructureLoaded; export namespace Queries { export type Type = 'selected-step'; @@ -78,7 +89,7 @@ export namespace ReDNATCOMspApi { export interface Object { command: (cmd: Command) => void; event: (evt: Event) => void; - init: (elemId: string, onEvent?: (evt: Event) => void, onInited?: () => void) => void; + init: (elemId: string, onEvent?: (evt: Event) => void) => void; isReady: () => boolean; loadStructure: (data: string, type: 'cif'|'pdb') => void; query: (type: Queries.Type) => Response; diff --git a/src/apps/rednatco/index.tsx b/src/apps/rednatco/index.tsx index c37fcbd2a..33acd2c2d 100644 --- a/src/apps/rednatco/index.tsx +++ b/src/apps/rednatco/index.tsx @@ -171,6 +171,7 @@ export class ReDNATCOMsp extends React.Component<ReDNATCOMsp.Props, State> { this.viewer.loadStructure(data, type, this.state.display).then(() => { this.presentConformers = this.viewer!.getPresentConformers(); this.forceUpdate(); + ReDNATCOMspApi.event(Api.Events.StructureLoaded()); }); } @@ -190,9 +191,7 @@ export class ReDNATCOMsp extends React.Component<ReDNATCOMsp.Props, State> { this.viewer = viewer; this.viewer.loadReferenceConformers().then(() => { ReDNATCOMspApi._bind(this); - - if (this.props.onInited) - this.props.onInited(); + ReDNATCOMspApi.event(Api.Events.Ready()); }); }); } @@ -413,15 +412,14 @@ export class ReDNATCOMsp extends React.Component<ReDNATCOMsp.Props, State> { export namespace ReDNATCOMsp { export interface Props { elemId: string; - onInited?: () => void; } - export function init(elemId: string, onInited?: () => void) { + export function init(elemId: string) { const elem = document.getElementById(elemId); if (!elem) throw new Error(`Element ${elemId} does not exist`); - ReactDOM.render(<ReDNATCOMsp elemId={elemId} onInited={onInited} />, elem); + ReactDOM.render(<ReDNATCOMsp elemId={elemId} />, elem); } } diff --git a/src/apps/rednatco/viewer.ts b/src/apps/rednatco/viewer.ts index b4f36c64d..bb758e8c4 100644 --- a/src/apps/rednatco/viewer.ts +++ b/src/apps/rednatco/viewer.ts @@ -853,7 +853,7 @@ export class ReDNATCOMspViewer { this.resetCameraRadius(); } - async actionSelectStep(stepName: string, stepNamePrev: string|undefined, stepNameNext: string|undefined, referenceNtc: string, references: ('sel'|'prev'|'next')[], display: Partial<Display>): Promise<{ rmsd: number }|undefined> { + async actionSelectStep(stepName: string, stepNamePrev: string|undefined, stepNameNext: string|undefined, referenceNtc: string, references: ('sel'|'prev'|'next')[], display: Display): Promise<{ rmsd: number }|undefined> { const stepCurrent = this.stepFromName(stepName); if (!stepCurrent) return void 0; @@ -923,7 +923,7 @@ export class ReDNATCOMspViewer { b.to(IDs.ID('structure', 'remainder-slice', BaseRef)) .apply( StateTransforms.Representation.StructureRepresentation3D, - this.substructureVisuals('cartoon'), + this.substructureVisuals(display.representation), { ref: IDs.ID('visual', 'remainder-slice', BaseRef) } ) .delete(IDs.ID('visual', 'nucleic', BaseRef)); -- GitLab