@vtex/faststore-plugin-buyer-portal 1.1.13 → 1.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ [![JIRA Issue](https://img.shields.io/badge/issue-JIRA-blue.svg)]()
2
+
3
+ ## 📌 What does this PR do?
4
+
5
+ <!-- Provide a clear and concise description of the changes -->
6
+
7
+ -
8
+
9
+ ## 🛠️ What problem does this solve?
10
+
11
+ <!-- Explain the issue or need addressed by this PR -->
12
+
13
+ -
14
+
15
+ ## 📝 Summary of changes
16
+
17
+ <!-- List key changes in this PR -->
18
+
19
+ -
20
+ -
21
+ -
22
+
23
+ ## ✅ How to test this PR?
24
+
25
+ <!-- Provide instructions so reviewers can test or validate the changes (e.g., include a preview link if available) -->
26
+
27
+ -
28
+ -
29
+
30
+ ## 🔍 Screenshots / GIFs (if applicable)
31
+
32
+ <!-- Add images or GIFs to help visualize the change -->
33
+
34
+ | Before | After |
35
+ | ------ | ----- |
36
+ | | |
37
+
38
+ ## 🚩 Checklist
39
+
40
+ - [ ] I have updated the CHANGELOG (if applicable)
41
+ - [ ] I have checked if my PR requires new documentation, and included it if necessary
42
+ - [ ] I have tested my changes locally
43
+ - [ ] I have added tests that prove my fix is effective or my feature works
44
+ - [ ] I have added or updated documentation (if needed)
45
+ - [ ] I have linted and formatted my code
46
+ - [ ] I have added the 'run-tests' label when the PR is ready for review
47
+
48
+ ## 📎 Related issues
49
+
50
+ <!-- Link related issues, e.g., Fixes #123, Closes #456 -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtex/faststore-plugin-buyer-portal",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "description": "A plugin for faststore with buyer portal",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -206,6 +206,17 @@
206
206
  d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z" />
207
207
  </symbol>
208
208
 
209
+
210
+ <symbol
211
+ id="MoreHorz"
212
+ xmlns="http://www.w3.org/2000/svg"
213
+ viewBox="0 0 24 24"
214
+ fill="currentColor"
215
+ >
216
+ <path d="M4 12C4 11.45 4.19583 10.9792 4.5875 10.5875C4.97917 10.1958 5.45 10 6 10C6.55 10 7.02083 10.1958 7.4125 10.5875C7.80417 10.9792 8 11.45 8 12C8 12.55 7.80417 13.0208 7.4125 13.4125C7.02083 13.8042 6.55 14 6 14C5.45 14 4.97917 13.8042 4.5875 13.4125C4.19583 13.0208 4 12.55 4 12ZM10 12C10 11.45 10.1958 10.9792 10.5875 10.5875C10.9792 10.1958 11.45 10 12 10C12.55 10 13.0208 10.1958 13.4125 10.5875C13.8042 10.9792 14 11.45 14 12C14 12.55 13.8042 13.0208 13.4125 13.4125C13.0208 13.8042 12.55 14 12 14C11.45 14 10.9792 13.8042 10.5875 13.4125C10.1958 13.0208 10 12.55 10 12ZM16 12C16 11.45 16.1958 10.9792 16.5875 10.5875C16.9792 10.1958 17.45 10 18 10C18.55 10 19.0208 10.1958 19.4125 10.5875C19.8042 10.9792 20 11.45 20 12C20 12.55 19.8042 13.0208 19.4125 13.4125C19.0208 13.8042 18.55 14 18 14C17.45 14 16.9792 13.8042 16.5875 13.4125C16.1958 13.0208 16 12.55 16 12Z" />
217
+ </symbol>
218
+
219
+
209
220
  <symbol
210
221
  id="Close"
211
222
  xmlns="http://www.w3.org/2000/svg"
@@ -377,4 +388,7 @@
377
388
  fill="currentColor" />
378
389
  </symbol>
379
390
 
391
+ <symbol id="ChevronRight" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
392
+ <path d="M12.6 12L8 7.4L9.4 6L15.4 12L9.4 18L8 16.6L12.6 12Z" fill="currentColor"/>
393
+ </symbol>
380
394
  </svg>
@@ -0,0 +1,28 @@
1
+ import { Icon } from "../../../shared/components";
2
+ import { OrgUnitBreadcrumbProps } from "../../types";
3
+
4
+ import { OrgUnitBreadcrumbDropdown } from "./OrgUnitBreadcrumbDropdown";
5
+ import { OrgUnitBreadcrumbPath } from "./OrgUnitBreadcrumbPath";
6
+
7
+ export const OrgUnitBreadcrumb = ({ items }: OrgUnitBreadcrumbProps) => {
8
+ const sortedByPosition = [...items].sort((a, b) => a.position - b.position);
9
+ const divider = (
10
+ <Icon
11
+ data-fs-bp-breadcrumb-divider
12
+ name="ChevronRight"
13
+ width={24}
14
+ height={24}
15
+ />
16
+ );
17
+
18
+ return (
19
+ <nav data-fs-bp-breadcrumb-nav>
20
+ <OrgUnitBreadcrumbDropdown items={sortedByPosition.slice(0, -2)} />
21
+ {items.length > 2 && divider}
22
+ <OrgUnitBreadcrumbPath
23
+ items={sortedByPosition.slice(-2)}
24
+ divider={divider}
25
+ />
26
+ </nav>
27
+ );
28
+ };
@@ -0,0 +1,30 @@
1
+ import { useRouter } from "next/router";
2
+
3
+ import { Dropdown, DropdownItem } from "@faststore/ui";
4
+
5
+ import { BasicDropdownMenu, Icon } from "../../../shared/components";
6
+ import { OrgUnitBreadcrumbProps } from "../../types";
7
+
8
+ export const OrgUnitBreadcrumbDropdown = ({
9
+ items,
10
+ }: OrgUnitBreadcrumbProps) => {
11
+ const { push } = useRouter();
12
+
13
+ const dropdownItems = items.map((item) => (
14
+ <DropdownItem onClick={() => push(item.item)} key={item.item}>
15
+ <Icon name="Folder" width={20} height={20} />
16
+ {item.name}
17
+ </DropdownItem>
18
+ ));
19
+
20
+ return (
21
+ items.length > 0 && (
22
+ <>
23
+ <Dropdown>
24
+ <BasicDropdownMenu.Trigger iconName="MoreHorz" />
25
+ <BasicDropdownMenu align="left">{dropdownItems}</BasicDropdownMenu>
26
+ </Dropdown>
27
+ </>
28
+ )
29
+ );
30
+ };
@@ -0,0 +1,52 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+
3
+ import Link from "next/link";
4
+
5
+ import { Tooltip } from "@faststore/ui";
6
+
7
+ import { OrgUnitBreadcrumbItemProps } from "../../types";
8
+
9
+ export const OrgUnitBreadcrumbLink = ({
10
+ name,
11
+ item,
12
+ isLast,
13
+ }: OrgUnitBreadcrumbItemProps) => {
14
+ const [truncate, setTruncate] = useState(false);
15
+ const linkRef = useRef<HTMLParagraphElement | HTMLAnchorElement>(null);
16
+
17
+ useEffect(() => {
18
+ setTruncate(
19
+ linkRef.current
20
+ ? linkRef.current.scrollWidth > linkRef.current?.clientWidth
21
+ : false
22
+ );
23
+ }, []);
24
+
25
+ const linkContent = (
26
+ <div data-fs-bp-breadcrumb-link>
27
+ {isLast ? (
28
+ <p
29
+ ref={linkRef as React.RefObject<HTMLParagraphElement>}
30
+ data-fs-bp-breadcrumb-text
31
+ data-fs-bp-breadcrumb-current
32
+ >
33
+ {name}
34
+ </p>
35
+ ) : (
36
+ <Link
37
+ ref={linkRef as React.RefObject<HTMLAnchorElement>}
38
+ data-fs-bp-breadcrumb-text
39
+ href={item}
40
+ >
41
+ {name}
42
+ </Link>
43
+ )}
44
+ </div>
45
+ );
46
+
47
+ return truncate ? (
48
+ <Tooltip content={name}>{linkContent}</Tooltip>
49
+ ) : (
50
+ linkContent
51
+ );
52
+ };
@@ -0,0 +1,27 @@
1
+ import { Fragment } from "react";
2
+
3
+ import { OrgUnitBreadcrumbPathProps } from "../../types";
4
+
5
+ import { OrgUnitBreadcrumbLink } from "./OrgUnitBreadcrumbLink";
6
+
7
+ export const OrgUnitBreadcrumbPath = ({
8
+ items,
9
+ divider,
10
+ }: OrgUnitBreadcrumbPathProps) =>
11
+ items.flatMap((item, index) => {
12
+ const isLast = index === items.length - 1;
13
+ const link = [
14
+ <OrgUnitBreadcrumbLink
15
+ key={item.item}
16
+ item={item.item}
17
+ name={item.name}
18
+ isLast={isLast}
19
+ />,
20
+ ];
21
+
22
+ if (!isLast && divider) {
23
+ link.push(<Fragment key={index}>{divider}</Fragment>);
24
+ }
25
+
26
+ return link;
27
+ });
@@ -0,0 +1,50 @@
1
+ @import '@faststore/ui/src/components/molecules/Dropdown/styles.scss';
2
+ @import '@faststore/ui/src/components/molecules/Tooltip/styles.scss';
3
+
4
+ [data-fs-bp-breadcrumb-nav] {
5
+ flex: 1;
6
+ display: flex;
7
+ align-items: center;
8
+ flex-wrap: wrap;
9
+ gap: var(--fs-spacing-1);
10
+
11
+ [data-fs-tooltip] {
12
+ --fs-tooltip-background: #1F1F1F;
13
+ --fs-tooltip-border-radius: .25rem;
14
+ }
15
+ }
16
+
17
+ [data-fs-bp-breadcrumb-link] {
18
+ flex: 0 0 max-content;
19
+ max-width: 28.125rem; // 450px
20
+
21
+ p, a {
22
+ font-size: var(--fs-text-size-4);
23
+ line-height: var(--fs-text-size-6);
24
+ font-weight: var(--fs-text-weight-semibold);
25
+ color: #5C5C5C;
26
+ text-decoration: none;
27
+ cursor: pointer;
28
+ transition: all 0.2s;
29
+ letter-spacing: -0.04em;
30
+ display: block;
31
+
32
+ white-space: nowrap;
33
+ overflow: hidden;
34
+ text-overflow: ellipsis;
35
+ }
36
+
37
+ [data-fs-bp-breadcrumb-current] {
38
+ color: #000;
39
+ cursor: inherit;
40
+ }
41
+
42
+ a:hover {
43
+ color: #565656;
44
+ }
45
+ }
46
+
47
+ [data-fs-bp-breadcrumb-divider] {
48
+ color: #858585;
49
+ flex: 0 0 auto;
50
+ }
@@ -27,3 +27,4 @@ export {
27
27
  OrgUnitDetailsNavbar,
28
28
  type OrgUnitDetailsNavbarProps,
29
29
  } from "./OrgUnitDetailsNavbar/OrgUnitDetailsNavbar";
30
+ export { OrgUnitBreadcrumb } from "./OrgUnitBreadcrumb/OrgUnitBreadcrumb";
@@ -19,6 +19,7 @@ import {
19
19
  OrgUnitsDropdownMenu,
20
20
  AddAllToOrgUnitDropdown,
21
21
  OrgUnitDetailsNavbar,
22
+ OrgUnitBreadcrumb,
22
23
  } from "../../components";
23
24
 
24
25
  import type { ContractData } from "../../../contracts/types";
@@ -37,6 +38,15 @@ export const OrgUnitsDetailsLayout = ({
37
38
  data: { orgUnit, contracts, user },
38
39
  }: OrgUnitsDetailsLayoutProps) => {
39
40
  const isSingleContract = contracts.length === 1;
41
+ const breadcrumbList = orgUnit.path.ids
42
+ .split("/")
43
+ .slice(1)
44
+ .map((orgUnitId, index) => ({
45
+ item: buyerPortalRoutes.orgUnitDetails({ orgUnitId }),
46
+ name: orgUnit.path.names.split("/")[index],
47
+ position: index + 1,
48
+ }));
49
+
40
50
  return (
41
51
  <GlobalLayout>
42
52
  {/* TODO: Add person here */}
@@ -45,7 +55,8 @@ export const OrgUnitsDetailsLayout = ({
45
55
  person={{ name: user?.name ?? "", role: user?.roles?.[0] }}
46
56
  />
47
57
  <section data-fs-org-units-details-section>
48
- <HeaderInside title={orgUnit.name}>
58
+ <HeaderInside>
59
+ <OrgUnitBreadcrumb items={breadcrumbList} />
49
60
  <Dropdown>
50
61
  <BasicDropdownMenu.Trigger />
51
62
  <OrgUnitsDropdownMenu
@@ -54,113 +65,111 @@ export const OrgUnitsDetailsLayout = ({
54
65
  name={orgUnit.name}
55
66
  />
56
67
  </Dropdown>
57
- <Dropdown>
58
- <DropdownButton asChild>
59
- <HeaderInside.Button />
60
- </DropdownButton>
61
- <AddAllToOrgUnitDropdown
62
- isSingleContract={isSingleContract}
63
- contractId={contracts[0].id}
64
- unitId={orgUnit.id}
65
- />
66
- </Dropdown>
68
+ {contracts.length > 0 && (
69
+ <Dropdown>
70
+ <DropdownButton asChild>
71
+ <HeaderInside.Button />
72
+ </DropdownButton>
73
+ <AddAllToOrgUnitDropdown
74
+ isSingleContract={isSingleContract}
75
+ contractId={contracts[0].id}
76
+ unitId={orgUnit.id}
77
+ />
78
+ </Dropdown>
79
+ )}
67
80
  </HeaderInside>
68
81
  <div data-fs-org-units-details-grid>
69
- <div data-fs-org-units-details-grid-column>
70
- {isSingleContract ? (
71
- <BasicCard
72
- data-fs-bp-contracts-settings-card
73
- footerMessage="Manage contract settings"
74
- footerLink={buyerPortalRoutes.profileDetails({
75
- orgUnitId: orgUnit.id,
76
- contractId: contracts[0]?.id ?? "",
77
- })}
78
- enableFooter
79
- >
80
- <LetterHighlight letter={orgUnit.name[0]} />
81
- <VerticalNav.Menu title={orgUnit.name}>
82
- {getContractSettingsLinks({
83
- orgUnitId: orgUnit.id,
84
- contractId: contracts[0]?.id ?? "",
85
- }).map(({ name, link }) => (
86
- <VerticalNav.Link key={name} link={link}>
87
- {name}
88
- </VerticalNav.Link>
89
- ))}
90
- </VerticalNav.Menu>
91
- </BasicCard>
92
- ) : (
93
- <BasicCard
94
- enableHeader
95
- title="Contracts"
96
- subTitle={contracts.length}
97
- data-fs-bp-contracts-list-card
98
- >
99
- {contracts.map((contract) => (
100
- <BasicCard.Line
101
- key={contract.id}
102
- title={contract.name ?? ""}
103
- icon={
104
- <LetterHighlight
105
- size="small"
106
- letter={contract.name ?? ""}
107
- />
108
- }
109
- href={buyerPortalRoutes.profileDetails({
110
- orgUnitId: orgUnit.id,
111
- contractId: contract.id,
112
- })}
113
- menu={
114
- <BasicDropdownMenu>
115
- <DropdownItem>
116
- <Icon name="Edit" width={20} height={20} />
117
- Edit
118
- </DropdownItem>
119
- </BasicDropdownMenu>
120
- }
121
- />
122
- ))}
123
- </BasicCard>
124
- )}
125
- </div>
126
- <div data-fs-org-units-details-grid-column>
82
+ {isSingleContract ? (
127
83
  <BasicCard
128
- data-fs-bp-organizations-settings-card
129
- footerMessage="Manage organization settings"
130
- footerLink={buyerPortalRoutes.users({
84
+ data-fs-bp-contracts-settings-card
85
+ footerMessage="Manage contract settings"
86
+ footerLink={buyerPortalRoutes.profileDetails({
131
87
  orgUnitId: orgUnit.id,
88
+ contractId: contracts[0]?.id ?? "",
132
89
  })}
133
90
  enableFooter
134
91
  >
135
- <VerticalNav.Menu title="Organization">
136
- {getOrganizationSettingsLinks(orgUnit.id).map((option) => (
137
- <VerticalNav.Link key={option.name} link={option.link}>
138
- {option.name}
92
+ <LetterHighlight letter={orgUnit.name[0]} />
93
+ <VerticalNav.Menu title={orgUnit.name}>
94
+ {getContractSettingsLinks({
95
+ orgUnitId: orgUnit.id,
96
+ contractId: contracts[0]?.id ?? "",
97
+ }).map(({ name, link }) => (
98
+ <VerticalNav.Link key={name} link={link}>
99
+ {name}
139
100
  </VerticalNav.Link>
140
101
  ))}
141
102
  </VerticalNav.Menu>
142
103
  </BasicCard>
104
+ ) : (
143
105
  <BasicCard
144
- data-fs-bp-compliance-settings-card
145
- footerMessage="Manage finance and compliance settings"
146
- footerLink={buyerPortalRoutes.buyingPolicies({
147
- orgUnitId: orgUnit.id,
148
- contractId: contracts[0]?.id,
149
- })}
150
- enableFooter
106
+ enableHeader
107
+ title="Contracts"
108
+ subTitle={contracts.length}
109
+ data-fs-bp-contracts-list-card
151
110
  >
152
- <VerticalNav.Menu title="Finance and Compliance">
153
- {getFinanceSettingsLinks({
154
- orgUnitId: orgUnit.id,
155
- contractId: contracts[0]?.id ?? "",
156
- }).map((option) => (
157
- <VerticalNav.Link key={option.name} link={option.link}>
158
- {option.name}
159
- </VerticalNav.Link>
160
- ))}
161
- </VerticalNav.Menu>
111
+ {contracts.map((contract) => (
112
+ <BasicCard.Line
113
+ key={contract.id}
114
+ title={contract.name ?? ""}
115
+ icon={
116
+ <LetterHighlight
117
+ size="small"
118
+ letter={contract.name ?? ""}
119
+ />
120
+ }
121
+ href={buyerPortalRoutes.profileDetails({
122
+ orgUnitId: orgUnit.id,
123
+ contractId: contract.id,
124
+ })}
125
+ menu={
126
+ <BasicDropdownMenu>
127
+ <DropdownItem>
128
+ <Icon name="Edit" width={20} height={20} />
129
+ Edit
130
+ </DropdownItem>
131
+ </BasicDropdownMenu>
132
+ }
133
+ />
134
+ ))}
162
135
  </BasicCard>
163
- </div>
136
+ )}
137
+ <BasicCard
138
+ data-fs-bp-organizations-settings-card
139
+ footerMessage="Manage organization settings"
140
+ footerLink={buyerPortalRoutes.users({
141
+ orgUnitId: orgUnit.id,
142
+ })}
143
+ enableFooter
144
+ >
145
+ <VerticalNav.Menu title="Organization">
146
+ {getOrganizationSettingsLinks(orgUnit.id).map((option) => (
147
+ <VerticalNav.Link key={option.name} link={option.link}>
148
+ {option.name}
149
+ </VerticalNav.Link>
150
+ ))}
151
+ </VerticalNav.Menu>
152
+ </BasicCard>
153
+ <BasicCard
154
+ data-fs-bp-compliance-settings-card
155
+ footerMessage="Manage finance and compliance settings"
156
+ footerLink={buyerPortalRoutes.buyingPolicies({
157
+ orgUnitId: orgUnit.id,
158
+ contractId: contracts[0]?.id,
159
+ })}
160
+ enableFooter
161
+ >
162
+ <VerticalNav.Menu title="Finance and Compliance">
163
+ {getFinanceSettingsLinks({
164
+ orgUnitId: orgUnit.id,
165
+ contractId: contracts[0]?.id ?? "",
166
+ }).map((option) => (
167
+ <VerticalNav.Link key={option.name} link={option.link}>
168
+ {option.name}
169
+ </VerticalNav.Link>
170
+ ))}
171
+ </VerticalNav.Menu>
172
+ </BasicCard>
164
173
  </div>
165
174
  </section>
166
175
  </GlobalLayout>
@@ -1,7 +1,9 @@
1
1
  @import "@faststore/ui/src/components/molecules/Dropdown/styles.scss";
2
+ @import '@faststore/ui/src/components/molecules/Breadcrumb/styles.scss';
2
3
  @import "../../../shared/components/BasicDropdownMenu/basic-dropdown-menu.scss";
3
4
  @import "../../components/OrgUnitDetailsNavbar/org-unit-details-navbar.scss";
4
5
  @import "../../../credit-cards/components/CreateCreditCardDrawer/create-credit-card-drawer.scss";
6
+ @import "../../components/OrgUnitBreadcrumb/org-unit-breadcrumb.scss";
5
7
 
6
8
  [data-fs-org-units-details-section] {
7
9
  @import "../../../shared/components/BasicCard/basic-card.scss";
@@ -17,9 +19,11 @@
17
19
  flex-direction: column;
18
20
 
19
21
  [data-fs-org-units-details-grid] {
20
- display: flex;
22
+ display: grid;
21
23
  flex: 1;
22
24
  gap: var(--fs-spacing-3);
25
+ grid-template-columns: repeat(2, 1fr);
26
+ grid-auto-rows: 1fr;
23
27
  }
24
28
 
25
29
  [data-fs-card-row-dropdown-button] {
@@ -35,10 +39,6 @@
35
39
  }
36
40
 
37
41
  [data-fs-org-units-details-grid] {
38
- display: flex;
39
- min-height: 100%;
40
- flex-wrap: wrap;
41
-
42
42
  [data-fs-org-units-details-grid-column] {
43
43
  flex: 1;
44
44
  display: flex;
@@ -99,6 +99,11 @@
99
99
  }
100
100
  }
101
101
 
102
+ [data-fs-bp-contracts-settings-card],[data-fs-bp-contracts-list-card] {
103
+ flex: 1;
104
+ grid-row: 1 / span 2;
105
+ }
106
+
102
107
  [data-fs-bp-contracts-list-card] {
103
108
  [data-fs-card-body] {
104
109
  max-height: 60vh;
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export type OrgUnitBreadcrumbItem = {
4
+ item: string;
5
+ name: string;
6
+ position: number;
7
+ };
8
+
9
+ export type OrgUnitBreadcrumbProps = {
10
+ items: OrgUnitBreadcrumbItem[];
11
+ };
12
+
13
+ export interface OrgUnitBreadcrumbItemProps
14
+ extends Omit<OrgUnitBreadcrumbItem, "position"> {
15
+ isLast?: boolean;
16
+ }
17
+
18
+ export interface OrgUnitBreadcrumbPathProps extends OrgUnitBreadcrumbProps {
19
+ divider: ReactNode;
20
+ }
@@ -4,3 +4,9 @@ export type {
4
4
  } from "./OrgUnitSummaryData";
5
5
  export type { OrgUnitData, OrgUnitHierarchyData } from "./OrgUnitsData";
6
6
  export type { OrganizationData } from "./OrganizationData";
7
+ export type {
8
+ OrgUnitBreadcrumbItem,
9
+ OrgUnitBreadcrumbProps,
10
+ OrgUnitBreadcrumbItemProps,
11
+ OrgUnitBreadcrumbPathProps,
12
+ } from "./OrgUnitBreadcrumbTypes";
@@ -7,7 +7,7 @@ import { Icon } from "../Icon";
7
7
  import { HeaderInsideButton } from "./HeaderInsideButton";
8
8
 
9
9
  export type HeaderInsideProps = {
10
- title: string;
10
+ title?: string;
11
11
  backLink?: string;
12
12
  children?: ReactNode;
13
13
  };
@@ -25,7 +25,7 @@ export const HeaderInside = ({
25
25
  <Icon name="Back" />
26
26
  </Link>
27
27
  )}
28
- <h1 data-fs-bp-header-inside-title>{title}</h1>
28
+ {title && <h1 data-fs-bp-header-inside-title>{title}</h1>}
29
29
  {children}
30
30
  </header>
31
31
  );