Skip to content

Commit eb9aa39

Browse files
committed
fix: removing section based document rendering
1 parent 6f36a26 commit eb9aa39

14 files changed

Lines changed: 1028 additions & 816 deletions

File tree

apps/google-docs/package-lock.json

Lines changed: 573 additions & 341 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/google-docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"@ai-sdk/openai": "^2.0.56",
77
"@contentful/app-sdk": "^4.51.3",
88
"@contentful/f36-components": "^5.6.0",
9+
"@contentful/f36-icons": "^6.7.1",
910
"@contentful/f36-tokens": "^5.1.0",
1011
"@contentful/field-editor-json": "^3.3.38",
1112
"@contentful/node-apps-toolkit": "^3.13.0",

apps/google-docs/src/locations/Page/Page.tsx

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
import { useRef, useState } from 'react';
22
import { PageAppSDK } from '@contentful/app-sdk';
33
import { useSDK } from '@contentful/react-apps-toolkit';
4-
import { Layout } from '@contentful/f36-components';
4+
import { Button, Layout } from '@contentful/f36-components';
55
import {
66
ModalOrchestrator,
77
ModalOrchestratorHandle,
88
} from './components/mainpage/ModalOrchestrator';
99
import { MainPageView } from './components/mainpage/MainPageView';
10-
import { PreviewPageView } from './components/mainpage/PreviewPageView';
11-
import { MappingReviewSuspendPayload, PreviewPayload } from '@types';
12-
import { isMappingReviewSuspendPayload } from '../../utils/utils';
10+
import { MappingReviewPage } from './components/mainpage/MappingReviewPage';
1311
import fixtureReviewPayload from '../../fixtures/googleDocsReview/fixture.json';
12+
import type { MappingReviewSuspendPayload, PreviewPayload } from '@types';
1413

1514
const Page = () => {
1615
const sdk = useSDK<PageAppSDK>();
1716
const modalOrchestratorRef = useRef<ModalOrchestratorHandle>(null);
1817
const [oauthToken, setOauthToken] = useState<string>('');
1918
const [isOAuthConnected, setIsOAuthConnected] = useState(false);
2019
const [isOAuthLoading, setIsOAuthLoading] = useState(true);
21-
const [previewPayload, setPreviewPayload] = useState<
22-
PreviewPayload | MappingReviewSuspendPayload | null
23-
>(null);
20+
const [previewPayload, setPreviewPayload] = useState<PreviewPayload | null>(null);
21+
const [mappingReviewPayload, setMappingReviewPayload] =
22+
useState<MappingReviewSuspendPayload | null>(null);
2423

2524
const handleOauthTokenChange = (token: string) => {
2625
setOauthToken(token);
@@ -43,50 +42,53 @@ const Page = () => {
4342
};
4443

4544
const handleMappingReviewReady = (payload: MappingReviewSuspendPayload) => {
46-
setPreviewPayload(payload);
45+
setMappingReviewPayload(payload);
4746
};
4847

4948
const handleReturnToMainPage = () => {
5049
setPreviewPayload(null);
50+
setMappingReviewPayload(null);
5151
};
5252

5353
const handleResumeMappingReview = async () => {
54-
if (!previewPayload || !isMappingReviewSuspendPayload(previewPayload)) {
54+
if (!mappingReviewPayload) {
5555
return;
5656
}
5757

58-
try {
59-
await modalOrchestratorRef.current?.resumeMappingReview(previewPayload);
60-
} catch (error) {
61-
console.error('Failed to resume mapping review:', error);
62-
sdk.notifier.error('Unable to resume preview. Please try again.');
63-
}
58+
await modalOrchestratorRef.current?.resumeMappingReview(mappingReviewPayload);
6459
};
6560

61+
const activePreviewPayload = mappingReviewPayload ?? previewPayload;
62+
6663
return (
6764
<>
6865
<Layout withBoxShadow={true} offsetTop={10}>
69-
{previewPayload ? (
70-
<PreviewPageView
71-
payload={previewPayload}
66+
{activePreviewPayload ? (
67+
<MappingReviewPage
68+
payload={activePreviewPayload}
7269
oauthToken={oauthToken}
73-
onLeavePreview={handleReturnToMainPage}
70+
onLeaveReview={handleReturnToMainPage}
7471
onResumeMappingReview={handleResumeMappingReview}
7572
/>
7673
) : (
77-
<MainPageView
78-
oauthToken={oauthToken}
79-
isOAuthConnected={isOAuthConnected}
80-
isOAuthLoading={isOAuthLoading}
81-
onOAuthConnectedChange={handleOAuthConnectedChange}
82-
onOauthTokenChange={handleOauthTokenChange}
83-
onLoadingStateChange={handleOAuthLoadingStateChange}
84-
onSelectFile={handleSelectFile}
85-
onUseFixturePreview={() =>
86-
setPreviewPayload(fixtureReviewPayload as MappingReviewSuspendPayload)
87-
}
88-
sdk={sdk}
89-
/>
74+
<>
75+
<Button
76+
onClick={() =>
77+
setMappingReviewPayload(fixtureReviewPayload as MappingReviewSuspendPayload)
78+
}>
79+
Mock from fixture
80+
</Button>
81+
<MainPageView
82+
oauthToken={oauthToken}
83+
isOAuthConnected={isOAuthConnected}
84+
isOAuthLoading={isOAuthLoading}
85+
onOAuthConnectedChange={handleOAuthConnectedChange}
86+
onOauthTokenChange={handleOauthTokenChange}
87+
onLoadingStateChange={handleOAuthLoadingStateChange}
88+
onSelectFile={handleSelectFile}
89+
sdk={sdk}
90+
/>
91+
</>
9092
)}
9193
</Layout>
9294

apps/google-docs/src/locations/Page/components/mainpage/MainPageView.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { OAuthConnector } from './OAuthConnector';
55
import { createEntriesFromPreviewPayload } from '../../../../services/entryService';
66
import { creationPayloadMock } from '../../../../mocks/previewPayloadSample';
77
import { PageAppSDK } from '@contentful/app-sdk';
8-
98
const enableMockEntryCreation = import.meta.env.VITE_ENABLE_MOCK_ENTRY_CREATION === 'true';
109

1110
interface MainPageViewProps {
@@ -16,7 +15,6 @@ interface MainPageViewProps {
1615
onOauthTokenChange: (token: string) => void;
1716
onLoadingStateChange: (isLoading: boolean) => void;
1817
onSelectFile: () => void;
19-
onUseFixturePreview: () => void;
2018
sdk: PageAppSDK;
2119
}
2220

@@ -28,7 +26,6 @@ export const MainPageView = ({
2826
onOauthTokenChange,
2927
onLoadingStateChange,
3028
onSelectFile,
31-
onUseFixturePreview,
3229
sdk,
3330
}: MainPageViewProps) => {
3431
return (
@@ -75,9 +72,7 @@ export const MainPageView = ({
7572
endIcon={<ArrowRightIcon />}>
7673
Select your file
7774
</Button>
78-
<Button variant="secondary" onClick={onUseFixturePreview}>
79-
Mock from fixture
80-
</Button>
75+
8176
{enableMockEntryCreation ? (
8277
<Button
8378
variant="secondary"

apps/google-docs/src/locations/Page/components/mainpage/PreviewPageView.tsx renamed to apps/google-docs/src/locations/Page/components/mainpage/MappingReviewPage.tsx

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@ import { ConfirmCancelModal } from '../modals/ConfirmCancelModal';
66
import { DocumentOutline } from '../review/DocumentOutline';
77
import { isMappingReviewSuspendPayload } from '../../../../utils/utils';
88

9-
interface PreviewPageViewProps {
10-
payload: PreviewPayload | MappingReviewSuspendPayload;
9+
interface MappingReviewPageProps {
10+
payload: MappingReviewSuspendPayload | PreviewPayload;
1111
oauthToken: string;
12-
onLeavePreview: () => void;
12+
onLeaveReview: () => void;
1313
onResumeMappingReview?: () => Promise<void>;
1414
}
1515

16-
function hasEntryBlockGraph(
17-
payload: PreviewPayload | MappingReviewSuspendPayload
18-
): payload is
19-
| MappingReviewSuspendPayload
20-
| (PreviewPayload & { entryBlockGraph: NonNullable<PreviewPayload['entryBlockGraph']> }) {
21-
return Boolean(payload.entryBlockGraph);
22-
}
23-
24-
export const PreviewPageView = ({ payload, onLeavePreview }: PreviewPageViewProps) => {
16+
export const MappingReviewPage = ({
17+
payload,
18+
onLeaveReview: onLeavePreview,
19+
}: MappingReviewPageProps) => {
2520
const [isConfirmCancelModalOpen, setIsConfirmCancelModalOpen] = useState(false);
26-
const isMappingReviewMode = isMappingReviewSuspendPayload(payload);
2721

28-
const title = `Create from document "${payload.normalizedDocument.title ?? 'Selected document'}"`;
22+
const isMappingReview = isMappingReviewSuspendPayload(payload);
23+
const documentTitle = isMappingReview
24+
? payload.documentTitle ?? payload.normalizedDocument.title
25+
: payload.normalizedDocument.title;
26+
const title = `${isMappingReview ? 'Review' : 'Create from'} document "${
27+
documentTitle ?? 'Selected document'
28+
}"`;
2929

3030
return (
3131
<>
@@ -43,13 +43,11 @@ export const PreviewPageView = ({ payload, onLeavePreview }: PreviewPageViewProp
4343
</Layout.Header>
4444
<Splitter marginTop="spacingS" />
4545
<Layout.Body>
46-
{/* TODO: Restore OverviewSection once it is compatible with EntryBlockGraph-based preview payloads. */}
47-
{hasEntryBlockGraph(payload) ? (
48-
<DocumentOutline payload={payload} showChrome={false} />
46+
{isMappingReview ? (
47+
<DocumentOutline payload={payload} />
4948
) : (
5049
<Paragraph marginBottom="none">
51-
Preview overview is temporarily unavailable until the preview payload is compatible with
52-
EntryBlockGraph.
50+
Standard preview is not available in this context.
5351
</Paragraph>
5452
)}
5553
</Layout.Body>

apps/google-docs/src/locations/Page/components/mainpage/ModalOrchestrator.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import { SelectTabsModal } from '../modals/step_3/SelectTabsModal';
1212
import {
1313
DocumentTabProps,
1414
MappingReviewSuspendPayload,
15+
PreviewPayload,
1516
ResumePayload,
1617
TabsImagesSuspendPayload,
17-
PreviewPayload,
1818
RunStatus,
1919
WorkflowRunResult,
2020
} from '@types';
@@ -24,8 +24,8 @@ import { useWorkflowAgent } from '@hooks/useWorkflowAgent';
2424

2525
export interface ModalOrchestratorHandle {
2626
startFlow: () => void;
27-
/** Clears in-progress flow state without calling `onResetToMain` (parent clears preview separately). */
28-
resetFlowState: () => void;
27+
/** Clears in-progress flow state and returns the page to the main state. */
28+
resetFlowFromPreviewCancel: () => void;
2929
resumeMappingReview: (payload: MappingReviewSuspendPayload) => Promise<void>;
3030
}
3131

@@ -68,7 +68,7 @@ export const ModalOrchestrator = forwardRef<ModalOrchestratorHandle, ModalOrches
6868

6969
useImperativeHandle(ref, () => ({
7070
startFlow: () => setIsUploadModalOpen(true),
71-
resetFlowState: () => {
71+
resetFlowFromPreviewCancel: () => {
7272
resetProgress();
7373
onResetToMain();
7474
},
@@ -173,7 +173,6 @@ export const ModalOrchestrator = forwardRef<ModalOrchestratorHandle, ModalOrches
173173
}
174174

175175
onPreviewReady(workflowRun.googleDocPayload);
176-
setFlowStep(null);
177176
};
178177

179178
const continueWorkflow = async (resumePayloadOverrides?: Partial<ResumePayload>) => {

0 commit comments

Comments
 (0)