Skip to content

Commit f8ee831

Browse files
committed
Use one panel for both story panels
1 parent a309405 commit f8ee831

File tree

4 files changed

+65
-19
lines changed

4 files changed

+65
-19
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Button } from '@jupyter/react-components';
2+
import React from 'react';
3+
4+
import {
5+
BaseForm,
6+
IBaseFormProps,
7+
} from '@/src/formbuilder/objectform/baseform';
8+
9+
interface IStoryFormProps extends IBaseFormProps {
10+
togglePreview: () => void;
11+
}
12+
13+
export class StoryEditorForm extends BaseForm {
14+
props: IStoryFormProps;
15+
16+
constructor(props: IStoryFormProps) {
17+
super(props);
18+
}
19+
20+
render(): React.ReactNode {
21+
return (
22+
<>
23+
<BaseForm
24+
formContext="update"
25+
sourceData={this.props.sourceData}
26+
model={this.props.model}
27+
schema={this.props.schema}
28+
syncData={this.props.syncData}
29+
filePath={this.props.model.filePath}
30+
/>
31+
<Button onClick={this.props.togglePreview}>Preview</Button>
32+
</>
33+
);
34+
}
35+
}

packages/base/src/panelview/components/story-maps/StoryEditorPanel.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { IJGISStoryMap, IJupyterGISModel } from '@jupytergis/schema';
22
import React, { useCallback, useEffect, useMemo, useState } from 'react';
33

4-
import { BaseForm } from '@/src/formbuilder/objectform/baseform';
4+
import { StoryEditorForm } from '@/src/formbuilder/objectform/StoryForm';
55
import { deepCopy } from '@/src/tools';
66
import { IDict } from '@/src/types';
77

88
interface IStoryPanelProps {
99
model: IJupyterGISModel;
10+
togglePreview: () => void;
1011
}
1112

12-
export function StoryEditorPanel({ model }: IStoryPanelProps) {
13+
export function StoryEditorPanel({ model, togglePreview }: IStoryPanelProps) {
1314
const [schema, setSchema] = useState<IDict | undefined>(undefined);
1415
const [storyData, setStoryData] = useState<IJGISStoryMap | null>(null);
1516

@@ -73,13 +74,14 @@ export function StoryEditorPanel({ model }: IStoryPanelProps) {
7374
return (
7475
<div style={{ padding: '10px' }}>
7576
<h3>Story Map Properties</h3>
76-
<BaseForm
77+
<StoryEditorForm
7778
formContext="update"
7879
sourceData={storyData}
7980
model={model}
8081
schema={schema}
8182
syncData={syncStoryData}
8283
filePath={model.filePath}
84+
togglePreview={togglePreview}
8385
/>
8486
</div>
8587
);

packages/base/src/panelview/components/story-maps/StoryViewerPanel.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Button } from '@jupyter/react-components';
12
import {
23
IJGISLayer,
34
IJGISStoryMap,
@@ -11,9 +12,10 @@ import StoryNavBar from './StoryNavBar';
1112

1213
interface IStoryViewerPanelProps {
1314
model: IJupyterGISModel;
15+
togglePreview: () => void;
1416
}
1517

16-
function StoryViewerPanel({ model }: IStoryViewerPanelProps) {
18+
function StoryViewerPanel({ model, togglePreview }: IStoryViewerPanelProps) {
1719
// ! TODO change name and remove rank from schema
1820
const [currentRankDisplayed, setCurrentRankDisplayed] = useState(0);
1921
const [storyData, setStoryData] = useState<IJGISStoryMap | null>(null);
@@ -198,6 +200,7 @@ function StoryViewerPanel({ model }: IStoryViewerPanelProps) {
198200
hasNext={currentRankDisplayed < landmarks.length - 1}
199201
/>
200202
)}
203+
<Button onClick={togglePreview}>Edit Story</Button>
201204
</div>
202205
);
203206
}

packages/base/src/panelview/rightpanel.tsx

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ interface IRightPanelProps {
2525
}
2626

2727
export const RightPanel: React.FC<IRightPanelProps> = props => {
28+
const [displayPreview, setDisplayPreview] = React.useState(false);
2829
const [settings, setSettings] = React.useState(props.model.jgisSettings);
2930
const tabInfo = [
3031
!settings.objectPropertiesDisabled
3132
? { name: 'objectProperties', title: 'Object Properties' }
3233
: false,
33-
{ name: 'storyEditorPanel', title: 'S Editor' },
34-
{ name: 'storyViewerPanel', title: 'S Viewer' },
34+
{
35+
name: 'storyPanel',
36+
title: displayPreview ? 'Story Map' : 'Story Editor',
37+
},
3538
!settings.annotationsDisabled
3639
? { name: 'annotations', title: 'Annotations' }
3740
: false,
@@ -86,6 +89,10 @@ export const RightPanel: React.FC<IRightPanelProps> = props => {
8689
const [selectedObjectProperties, setSelectedObjectProperties] =
8790
React.useState(undefined);
8891

92+
const togglePreview = () => {
93+
setDisplayPreview(!displayPreview);
94+
};
95+
8996
return (
9097
<div
9198
className="jgis-right-panel-container"
@@ -125,19 +132,18 @@ export const RightPanel: React.FC<IRightPanelProps> = props => {
125132
</TabsContent>
126133
)}
127134

128-
<TabsContent
129-
value="storyEditorPanel"
130-
className="jgis-panel-tab-content"
131-
>
132-
{/* switch to this panel when clicking create story */}
133-
<StoryEditorPanel model={props.model}></StoryEditorPanel>
134-
</TabsContent>
135-
136-
<TabsContent
137-
value="storyViewerPanel"
138-
className="jgis-panel-tab-content"
139-
>
140-
<StoryViewerPanel model={props.model}></StoryViewerPanel>
135+
<TabsContent value="storyPanel" className="jgis-panel-tab-content">
136+
{displayPreview ? (
137+
<StoryViewerPanel
138+
model={props.model}
139+
togglePreview={togglePreview}
140+
/>
141+
) : (
142+
<StoryEditorPanel
143+
model={props.model}
144+
togglePreview={togglePreview}
145+
/>
146+
)}
141147
</TabsContent>
142148

143149
{!settings.annotationsDisabled && (

0 commit comments

Comments
 (0)