Skip to content

Commit

Permalink
feat(navigation): pass the PageConstructor's navigation prop
Browse files Browse the repository at this point in the history
  • Loading branch information
DC-RomanKarpov committed Feb 16, 2023
1 parent 35f367b commit cb875ff
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 21 deletions.
101 changes: 101 additions & 0 deletions .mocks/navigation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"logo": {
"icon": "https://storage.yandexcloud.net/cloud-www-assets/constructor/storybook/images/icon_1_light.svg",
"text": "Logo",
"dark": {
"text": "Logo Dark",
"icon": "https://storage.yandexcloud.net/cloud-www-assets/constructor/storybook/images/icon_1_dark.svg"
},
"light": {
"text": "Logo Light"
}
},
"header": {
"leftItems": [
{
"text": "Dropdown 1",
"type": "dropdown",
"items": [
{
"text": "Lorem ipsum",
"url": "https://example.com",
"type": "link"
},
{
"text": "Dolor sit amet",
"url": "https://example.com",
"type": "link"
},
{
"text": "Consectetur adipiscing",
"url": "https://example.com",
"type": "link"
},
{
"text": "Ut enim ad minim ",
"url": "https://example.com",
"type": "link"
}
]
},
{
"text": "Dropdown2",
"type": "dropdown",
"items": [
{
"text": "Lorem ipsum ",
"url": "https://example.com"
},
{
"text": "Dolor sit amet",
"url": "https://example.com"
},
{
"text": "Consectetur adipiscing",
"url": "https://example.com"
},
{
"text": "Ut enim ad minim ",
"url": "https://example.com"
}
]
},
{
"type": "link",
"text": "Link with spaces",
"url": "https://example.com",
"icon": "https://storage.yandexcloud.net/cloud-www-assets/constructor/storybook/images/icon_3_light.svg"
},
{
"type": "link",
"text": "Link with arrow",
"url": "https://example.com",
"arrow": true
},
{
"type": "link",
"text": "Link3",
"url": "https://example.com"
},
{
"type": "link",
"text": "Link4",
"url": "https://example.com"
}
],
"rightItems": [
{
"type": "link",
"text": "Link",
"url": "https://example.com",
"icon": "https://storage.yandexcloud.net/cloud-www-assets/constructor/storybook/images/icon_2_light.svg"
},
{
"type": "button",
"text": "Button",
"url": "https://example.com",
"theme": "pseudo"
}
]
}
}
9 changes: 8 additions & 1 deletion src/containers/BlogPage/BlogPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
PageContent,
PageConstructorProvider,
PageConstructorProviderProps,
NavigationData,
} from '@gravity-ui/page-constructor';

import {FeedContext} from '../../contexts/FeedContext';
Expand All @@ -31,6 +32,7 @@ export type BlogPageProps = {
posts: PostsProps;
tags: Tag[];
services?: Service[];
navigation?: NavigationData;
getPosts: GetPostsType;
toggleLike?: ToggleLikeCallbackType;
metaData?: MetaProps;
Expand All @@ -47,6 +49,7 @@ export const BlogPage = ({
getPosts,
metaData,
toggleLike,
navigation,
settings,
pageCountForShowSupportButtons,
}: BlogPageProps) => (
Expand All @@ -70,7 +73,11 @@ export const BlogPage = ({
>
<PageConstructorProvider {...settings}>
{metaData ? <MetaWrapper {...metaData} /> : null}
<PageConstructor content={content} custom={componentMap} />
<PageConstructor
content={content}
custom={componentMap}
navigation={navigation}
/>
</PageConstructorProvider>
</FeedContext.Provider>
</LikesContext.Provider>
Expand Down
36 changes: 19 additions & 17 deletions src/containers/BlogPage/__stories__/BlogPage.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,37 @@ import page from '../../../../.mocks/blogPage.json';
import services from '../../../../.mocks/services.json';
import tags from '../../../../.mocks/tags.json';
import posts from '../../../../.mocks/posts.json';
import navigation from '../../../../.mocks/navigation.json';

import {BlogPage, BlogPageProps} from '../BlogPage';

const mockMetaComponent = <title>Blog page</title>;

export default {
title: `${CONTAINERS}/BlogPage`,
component: BlogPage,
args: {
theme: 'light',
content: page.content,
posts,
services,
tags,
metaData: {
needHelmetWrapper: true,
metaComponent: mockMetaComponent,
},
getPosts: (props) => {
// eslint-disable-next-line no-console
console.log('get posts', props);
},
toggleLike: null,
},
} as Meta;

const DefaultTemplate: Story<BlogPageProps> = (args) => <BlogPage {...args} />;

export const Default = DefaultTemplate.bind({});

const mockMetaComponent = <title>Blog page</title>;

Default.args = {
content: page.content,
posts,
services,
tags,
metaData: {
needHelmetWrapper: true,
metaComponent: mockMetaComponent,
},
getPosts: (props) => {
// eslint-disable-next-line no-console
console.log('get posts', props);
},
toggleLike: null,
export const WithNavigation = DefaultTemplate.bind({});
WithNavigation.args = {
navigation,
};
9 changes: 8 additions & 1 deletion src/containers/BlogPostPage/BlogPostPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
PageContent,
PageConstructorProvider,
PageConstructorProviderProps,
NavigationData,
} from '@gravity-ui/page-constructor';
import {ShareOptions} from '@gravity-ui/uikit';

Expand Down Expand Up @@ -32,6 +33,7 @@ export interface BlogPostPageProps {
content: PageContent;
post: PostData;
settings?: PageConstructorProviderProps;
navigation?: NavigationData;
shareOptions?: ShareOptions[];
}

Expand All @@ -42,6 +44,7 @@ export const BlogPostPage: React.FC<BlogPostPageProps> = ({
content,
post,
settings,
navigation,
shareOptions,
}) => {
const {hasUserLike, likesCount, handleLike} = useLikes({
Expand Down Expand Up @@ -75,7 +78,11 @@ export const BlogPostPage: React.FC<BlogPostPageProps> = ({
>
<PageConstructorProvider {...settings}>
{metaData ? <MetaWrapper {...metaData} /> : null}
<PageConstructor content={content} custom={componentMap} />
<PageConstructor
content={content}
custom={componentMap}
navigation={navigation}
/>
</PageConstructorProvider>
</PostPageContext.Provider>
</LikesContext.Provider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {Meta, Story} from '@storybook/react/types-6-0';
import {CONTAINERS} from '../../../demo/constants';

import {generatePostPageData} from '../../../../.mocks/utils';
import navigation from '../../../../.mocks/navigation.json';

import {BlogPostPage, BlogPostPageProps} from '../BlogPostPage';

Expand All @@ -13,13 +14,15 @@ export default {
component: BlogPostPage,
args: {
theme: 'light',
...generatePostPageData(),
},
} as Meta;

const DefaultTemplate: Story<BlogPostPageProps> = (args) => <BlogPostPage {...args} />;

export const Default = DefaultTemplate.bind({});

Default.args = {
...generatePostPageData(),
export const WithNavigation = DefaultTemplate.bind({});
WithNavigation.args = {
navigation,
};

0 comments on commit cb875ff

Please sign in to comment.