Skip to content

Commit ec5ef46

Browse files
feat: pass correct params to show release status [TOL-3103] (#1878)
* feat: pass correct params to show release status * fix: rerender sdk when release params change * fix: return defaults for parsing release params
1 parent 07bbbf6 commit ec5ef46

File tree

4 files changed

+49
-8
lines changed

4 files changed

+49
-8
lines changed

packages/_shared/src/hooks/useActiveReleaseLocalesStatuses.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ export const useActiveReleaseLocalesStatuses = ({
1818
entryId: string;
1919
releaseVersionMap: Map<string, Map<string, ReleaseAction>>;
2020
locales: LocaleProps[];
21-
activeRelease: ReleaseV2Props;
22-
releases: CollectionProp<ReleaseV2Props>;
21+
activeRelease: ReleaseV2Props | undefined;
22+
releases: CollectionProp<ReleaseV2Props> | undefined;
2323
}) => {
2424
const previousReleaseEntity = useMemo(
2525
() =>

packages/_shared/src/utils/parseReleaseParameters.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import type { ReleaseAction } from '../types';
66
export type ParsedReleaseParams = {
77
releaseVersionMap: Map<string, Map<string, ReleaseAction>>;
88
locales: LocaleProps[];
9-
activeRelease: ReleaseV2Props;
9+
activeRelease: ReleaseV2Props | undefined;
1010
isActiveReleaseLoading: boolean;
11-
releases: CollectionProp<ReleaseV2Props>;
11+
releases: CollectionProp<ReleaseV2Props> | undefined;
1212
};
1313

1414
type RawReleaseParams = {
@@ -19,8 +19,19 @@ type RawReleaseParams = {
1919
releases: CollectionProp<ReleaseV2Props>;
2020
};
2121

22-
export function parseReleaseParams(raw: string): ParsedReleaseParams {
22+
export function parseReleaseParams(raw: string | undefined): ParsedReleaseParams {
2323
let parsedRaw: RawReleaseParams;
24+
25+
if (!raw) {
26+
return {
27+
releaseVersionMap: new Map(),
28+
locales: [],
29+
activeRelease: undefined,
30+
isActiveReleaseLoading: false,
31+
releases: undefined,
32+
};
33+
}
34+
2435
try {
2536
parsedRaw = JSON.parse(raw) as RawReleaseParams;
2637
} catch (e) {

packages/rich-text/src/SdkProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ interface SdkProviderProps {
88
}
99

1010
function useSdk({ sdk }: SdkProviderProps) {
11-
const sdkMemo = React.useMemo<FieldAppSDK>(() => sdk, []); // eslint-disable-line -- TODO: explain this disable
11+
const sdkMemo = React.useMemo<FieldAppSDK>(() => sdk, [sdk.parameters.instance.release]); // eslint-disable-line -- TODO: explain this disable
1212

1313
return sdkMemo;
1414
}

packages/rich-text/src/plugins/shared/FetchingWrappedEntryCard.tsx

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import {
1313
LocalePublishStatusMap,
1414
useLocalePublishStatus,
1515
useActiveLocales,
16+
parseReleaseParams,
17+
useActiveReleaseLocalesStatuses,
18+
type ReleaseLocalesStatusMap,
19+
type ReleaseV2Props,
1620
} from '@contentful/field-editor-shared';
1721
import areEqual from 'fast-deep-equal';
1822

@@ -26,10 +30,20 @@ interface InternalEntryCard {
2630
onEdit?: VoidFunction;
2731
onRemove?: VoidFunction;
2832
localesStatusMap?: LocalePublishStatusMap;
33+
releaseLocalesStatusMap?: ReleaseLocalesStatusMap;
34+
isActiveReleaseLoading?: boolean;
35+
activeRelease?: ReleaseV2Props;
2936
}
3037

3138
const InternalEntryCard = React.memo((props: InternalEntryCard) => {
32-
const { entry, sdk, loadEntityScheduledActions } = props;
39+
const {
40+
entry,
41+
sdk,
42+
loadEntityScheduledActions,
43+
releaseLocalesStatusMap,
44+
isActiveReleaseLoading,
45+
activeRelease,
46+
} = props;
3347

3448
const contentType = sdk.space
3549
.getCachedContentTypes()
@@ -58,6 +72,9 @@ const InternalEntryCard = React.memo((props: InternalEntryCard) => {
5872
? (dragHandleProps) => <DragHandle label="drag embedded entry" {...dragHandleProps} />
5973
: undefined
6074
}
75+
releaseLocalesStatusMap={releaseLocalesStatusMap}
76+
isReleasesLoading={isActiveReleaseLoading}
77+
activeRelease={activeRelease}
6178
/>
6279
);
6380
}, areEqual);
@@ -81,9 +98,19 @@ export const FetchingWrappedEntryCard = (props: FetchingWrappedEntryCardProps) =
8198
const { getEntityScheduledActions } = useEntityLoader();
8299
const loadEntityScheduledActions = React.useCallback(
83100
() => getEntityScheduledActions('Entry', entryId),
84-
[getEntityScheduledActions, entryId]
101+
[getEntityScheduledActions, entryId],
85102
);
86103
const localesStatusMap = useLocalePublishStatus(entry, props.sdk.locales);
104+
const { releaseVersionMap, locales, activeRelease, releases, isActiveReleaseLoading } =
105+
parseReleaseParams(props.sdk.parameters.instance.release);
106+
const { releaseLocalesStatusMap } = useActiveReleaseLocalesStatuses({
107+
currentEntryDraft: entry,
108+
entryId: props.entryId,
109+
releaseVersionMap,
110+
locales,
111+
activeRelease,
112+
releases,
113+
});
87114

88115
React.useEffect(() => {
89116
if (status === 'success') {
@@ -116,6 +143,9 @@ export const FetchingWrappedEntryCard = (props: FetchingWrappedEntryCardProps) =
116143
onRemove={props.onRemove}
117144
loadEntityScheduledActions={loadEntityScheduledActions}
118145
localesStatusMap={localesStatusMap}
146+
releaseLocalesStatusMap={releaseLocalesStatusMap}
147+
isActiveReleaseLoading={isActiveReleaseLoading}
148+
activeRelease={activeRelease}
119149
/>
120150
);
121151
};

0 commit comments

Comments
 (0)