Skip to content

Commit 9e6e5c8

Browse files
authored
feat: added quickedit to publishing stations (#388)
1 parent 871aa89 commit 9e6e5c8

File tree

12 files changed

+206
-96
lines changed

12 files changed

+206
-96
lines changed
Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
import { FormStation, MessageBar } from '@axinom/mosaic-ui';
21
import React from 'react';
32
import { useParams } from 'react-router-dom';
4-
import { client } from '../../../apolloClient';
5-
import {
6-
PublishValidationStatus,
7-
useValidateChannelQuery,
8-
} from '../../../generated/graphql';
9-
import { ValidationResultsTable } from '../../../util/Publishing/ValidationResultsTable';
10-
import { useActions } from './ChannelPublishing.actions';
11-
import classes from './ChannelPublishing.module.scss';
12-
import { FormData } from './ChannelPublishing.types';
3+
import { ChannelPublishingForm } from './ChannelPublishingForm';
134

145
interface UrlParams {
156
channelId: string;
@@ -18,42 +9,5 @@ interface UrlParams {
189
export const ChannelPublishing: React.FC = () => {
1910
const { channelId } = useParams<UrlParams>();
2011

21-
const { loading, data, error } = useValidateChannelQuery({
22-
client,
23-
variables: { id: channelId },
24-
fetchPolicy: 'no-cache',
25-
});
26-
27-
const { actions } = useActions(
28-
channelId,
29-
data?.validateChannel?.validationStatus,
30-
data?.validateChannel?.publishHash,
31-
);
32-
33-
return (
34-
<FormStation<FormData>
35-
defaultTitle="Publishing"
36-
initialData={{
37-
loading,
38-
data: data?.validateChannel,
39-
error: error?.message,
40-
}}
41-
actions={actions}
42-
saveData={() => {
43-
// We don't need to save the data, since this station only displays the validation status.
44-
}}
45-
edgeToEdgeContent={true}
46-
>
47-
{data?.validateChannel?.validationStatus ===
48-
PublishValidationStatus.Errors && (
49-
<MessageBar
50-
type="info"
51-
title="Channel cannot be published. Please check validation errors and fix related data accordingly."
52-
/>
53-
)}
54-
<div className={classes.content}>
55-
<ValidationResultsTable />
56-
</div>
57-
</FormStation>
58-
);
12+
return <ChannelPublishingForm channelId={channelId} />;
5913
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { FormStation, MessageBar } from '@axinom/mosaic-ui';
2+
import React from 'react';
3+
import { client } from '../../../apolloClient';
4+
import {
5+
PublishValidationStatus,
6+
useValidateChannelQuery,
7+
} from '../../../generated/graphql';
8+
import { ValidationResultsTable } from '../../../util/Publishing/ValidationResultsTable';
9+
import { useActions } from './ChannelPublishing.actions';
10+
import classes from './ChannelPublishing.module.scss';
11+
import { FormData } from './ChannelPublishing.types';
12+
13+
interface ChannelPublishingFormProps {
14+
channelId: string;
15+
}
16+
17+
export const ChannelPublishingForm: React.FC<ChannelPublishingFormProps> = ({
18+
channelId,
19+
}) => {
20+
const { loading, data, error } = useValidateChannelQuery({
21+
client,
22+
variables: { id: channelId },
23+
fetchPolicy: 'no-cache',
24+
});
25+
26+
const { actions } = useActions(
27+
channelId,
28+
data?.validateChannel?.validationStatus,
29+
data?.validateChannel?.publishHash,
30+
);
31+
32+
return (
33+
<FormStation<FormData>
34+
defaultTitle="Publishing"
35+
initialData={{
36+
loading,
37+
data: data?.validateChannel,
38+
error: error?.message,
39+
}}
40+
actions={actions}
41+
saveData={() => {
42+
// We don't need to save the data, since this station only displays the validation status.
43+
}}
44+
edgeToEdgeContent={true}
45+
>
46+
{data?.validateChannel?.validationStatus ===
47+
PublishValidationStatus.Errors && (
48+
<MessageBar
49+
type="info"
50+
title="Channel cannot be published. Please check validation errors and fix related data accordingly."
51+
/>
52+
)}
53+
<div className={classes.content}>
54+
<ValidationResultsTable />
55+
</div>
56+
</FormStation>
57+
);
58+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { QuickEditContext, QuickEditContextType } from '@axinom/mosaic-ui';
2+
import React, { useContext } from 'react';
3+
import { ChannelsData } from '../ChannelsExplorer/Channels.types';
4+
import { ChannelPublishingForm } from './ChannelPublishingForm';
5+
6+
export const ChannelPublishingQuickEdit: React.FC = () => {
7+
const { selectedItem } =
8+
useContext<QuickEditContextType<ChannelsData>>(QuickEditContext);
9+
10+
return <ChannelPublishingForm channelId={selectedItem.id} />;
11+
};

services/channel/workflows/src/stations/Channels/ChannelsExplorer/Channels.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
import { publicationStateMap } from '../../../util/Publishing/publicationStateMap';
2323
import { ChannelDetailsQuickEdit } from '../ChannelDetails/ChannelDetailsQuickEdit';
2424
import { ChannelImageManagementQuickEdit } from '../ChannelImageManagement/ChannelImageManagementQuickEdit';
25+
import { ChannelPublishingQuickEdit } from '../ChannelPublishing/ChannelPublishingQuickEdit';
2526
import { ChannelVideoManagementQuickEdit } from '../ChannelVideoManagement/ChannelVideoManagementQuickEdit';
2627
import { routes } from '../routes';
2728
import { filterOptions, transformFilters } from './Channels.filters';
@@ -178,6 +179,12 @@ export const Channels: React.FC = () => {
178179
generateDetailsLink: (item) =>
179180
routes.generate(routes.channelVideos, { channelId: item.id }),
180181
},
182+
{
183+
component: <ChannelPublishingQuickEdit />,
184+
label: 'Publishing Validation',
185+
generateDetailsLink: (item) =>
186+
routes.generate(routes.channelPublishing, { channelId: item.id }),
187+
},
181188
]}
182189
/>
183190
);
Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
import { FormStation, MessageBar } from '@axinom/mosaic-ui';
21
import React from 'react';
32
import { useParams } from 'react-router-dom';
4-
import { client } from '../../../apolloClient';
5-
import {
6-
PublishValidationStatus,
7-
useValidatePlaylistQuery,
8-
} from '../../../generated/graphql';
9-
import { ValidationResultsTable } from '../../../util/Publishing/ValidationResultsTable';
10-
import { useActions } from './PlaylistPublishing.actions';
11-
import classes from './PlaylistPublishing.module.scss';
12-
import { FormData } from './PlaylistPublishing.types';
3+
import { PlaylistPublishingForm } from './PlaylistPublishingForm';
134

145
interface UrlParams {
156
playlistId: string;
@@ -18,42 +9,5 @@ interface UrlParams {
189
export const PlaylistPublishing: React.FC = () => {
1910
const { playlistId } = useParams<UrlParams>();
2011

21-
const { loading, data, error } = useValidatePlaylistQuery({
22-
client,
23-
variables: { id: playlistId },
24-
fetchPolicy: 'no-cache',
25-
});
26-
27-
const { actions } = useActions(
28-
playlistId,
29-
data?.validatePlaylist?.validationStatus,
30-
data?.validatePlaylist?.publishHash,
31-
);
32-
33-
return (
34-
<FormStation<FormData>
35-
defaultTitle="Publishing"
36-
initialData={{
37-
loading,
38-
data: data?.validatePlaylist,
39-
error: error?.message,
40-
}}
41-
actions={actions}
42-
saveData={() => {
43-
// We don't need to save the data, since this station only displays the validation status.
44-
}}
45-
edgeToEdgeContent={true}
46-
>
47-
{data?.validatePlaylist?.validationStatus ===
48-
PublishValidationStatus.Errors && (
49-
<MessageBar
50-
type="info"
51-
title="Playlist cannot be published. Please check validation errors and fix related data accordingly."
52-
/>
53-
)}
54-
<div className={classes.content}>
55-
<ValidationResultsTable />
56-
</div>
57-
</FormStation>
58-
);
12+
return <PlaylistPublishingForm playlistId={playlistId} />;
5913
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { FormStation, MessageBar } from '@axinom/mosaic-ui';
2+
import React from 'react';
3+
import { client } from '../../../apolloClient';
4+
import {
5+
PublishValidationStatus,
6+
useValidatePlaylistQuery,
7+
} from '../../../generated/graphql';
8+
import { ValidationResultsTable } from '../../../util/Publishing/ValidationResultsTable';
9+
import { useActions } from './PlaylistPublishing.actions';
10+
import classes from './PlaylistPublishing.module.scss';
11+
import { FormData } from './PlaylistPublishing.types';
12+
13+
export interface PlaylistPublishingFormProps {
14+
playlistId: string;
15+
}
16+
17+
export const PlaylistPublishingForm: React.FC<PlaylistPublishingFormProps> = ({
18+
playlistId,
19+
}) => {
20+
const { loading, data, error } = useValidatePlaylistQuery({
21+
client,
22+
variables: { id: playlistId },
23+
fetchPolicy: 'no-cache',
24+
});
25+
26+
const { actions } = useActions(
27+
playlistId,
28+
data?.validatePlaylist?.validationStatus,
29+
data?.validatePlaylist?.publishHash,
30+
);
31+
32+
return (
33+
<FormStation<FormData>
34+
defaultTitle="Publishing"
35+
initialData={{
36+
loading,
37+
data: data?.validatePlaylist,
38+
error: error?.message,
39+
}}
40+
actions={actions}
41+
saveData={() => {
42+
// We don't need to save the data, since this station only displays the validation status.
43+
}}
44+
edgeToEdgeContent={true}
45+
>
46+
{data?.validatePlaylist?.validationStatus ===
47+
PublishValidationStatus.Errors && (
48+
<MessageBar
49+
type="info"
50+
title="Playlist cannot be published. Please check validation errors and fix related data accordingly."
51+
/>
52+
)}
53+
<div className={classes.content}>
54+
<ValidationResultsTable />
55+
</div>
56+
</FormStation>
57+
);
58+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { QuickEditContext, QuickEditContextType } from '@axinom/mosaic-ui';
2+
import React, { useContext } from 'react';
3+
import { PlaylistsData } from '../PlaylistsExplorer/Playlists.types';
4+
import { PlaylistPublishingForm } from './PlaylistPublishingForm';
5+
6+
export const PlaylistPublishingQuickEdit: React.FC = () => {
7+
const { selectedItem } =
8+
useContext<QuickEditContextType<PlaylistsData>>(QuickEditContext);
9+
10+
return <PlaylistPublishingForm playlistId={selectedItem.id} />;
11+
};

services/channel/workflows/src/stations/Channels/PlaylistsExplorer/Playlists.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
} from '../../../generated/graphql';
2424
import { publicationStateMap } from '../../../util/Publishing/publicationStateMap';
2525
import { PlaylistDetailsQuickEdit } from '../PlaylistDetails/PlaylistDetailsQuickEdit';
26+
import { PlaylistPublishingQuickEdit } from '../PlaylistPublishing/PlaylistPublishingQuickEdit';
2627
import { ProgramManagementQuickEdit } from '../ProgramManagement/ProgramManagementQuickEdit';
2728
import { routes } from '../routes';
2829
import { filterOptions, transformFilters } from './Playlists.filters';
@@ -198,6 +199,15 @@ export const Playlists: React.FC = () => {
198199
playlistId: item.id,
199200
}),
200201
},
202+
{
203+
component: <PlaylistPublishingQuickEdit />,
204+
label: 'Publishing Validation',
205+
generateDetailsLink: (item) =>
206+
routes.generate(routes.playlistPublishing, {
207+
channelId,
208+
playlistId: item.id,
209+
}),
210+
},
201211
]}
202212
/>
203213
);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { QuickEditContext, QuickEditContextType } from '@axinom/mosaic-ui';
2+
import React, { useContext } from 'react';
3+
import { EntityType } from '../../../generated/graphql';
4+
import { SnapshotData } from '../PublishingSnapshotExplorer/PublishingSnapshotExplorer.types';
5+
import { PublishingSnapshotDetails } from './PublishingSnapshotDetails';
6+
7+
export interface PublishingSnapshotQuickEditProps {
8+
type: EntityType;
9+
}
10+
export const PublishingSnapshotQuickEdit: React.FC<
11+
PublishingSnapshotQuickEditProps
12+
> = ({ type }) => {
13+
const { selectedItem } =
14+
useContext<QuickEditContextType<SnapshotData>>(QuickEditContext);
15+
16+
return <PublishingSnapshotDetails snapshotId={selectedItem.id} type={type} />;
17+
};

services/media/workflows/src/Stations/Publishing/PublishingSnapshotExplorer/PublishingSnapshotExplorer.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
} from '../../../generated/graphql';
2323
import { ValidationResultsRenderer } from '../../../Util/PublishingSnapshots/ValidationResultsRenderer/ValidationResultsRenderer';
2424
import { StringEnumRenderer } from '../../../Util/StringEnumRenderer/StringEnumRenderer';
25+
import { PublishingSnapshotQuickEdit } from '../PublishingSnapshotDetails/PublishingSnapshotQuickEdit';
2526
import { usePublishingSnapshotActions } from './PublishingSnapshotExplorer.actions';
2627
import { usePublishingSnapshotFilters } from './PublishingSnapshotExplorer.filter';
2728
import {
@@ -170,6 +171,12 @@ export const PublishingSnapshotExplorer: React.FC<
170171
dataProvider={dataProvider}
171172
defaultSortOrder={{ column: 'createdDate', direction: 'desc' }}
172173
inlineMenuActions={generateInlineMenuActions}
174+
quickEditRegistrations={[
175+
{
176+
component: <PublishingSnapshotQuickEdit type={entityType} />,
177+
label: 'Publishing Validation',
178+
},
179+
]}
173180
/>
174181
);
175182
};

0 commit comments

Comments
 (0)