@eventcatalog/core 2.65.0 → 3.0.0-beta.0

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.
Files changed (130) hide show
  1. package/README.md +1 -26
  2. package/dist/analytics/analytics.cjs +1 -1
  3. package/dist/analytics/analytics.js +2 -2
  4. package/dist/analytics/log-build.cjs +1 -1
  5. package/dist/analytics/log-build.js +3 -3
  6. package/dist/{chunk-NK6OYMRD.js → chunk-JB4YT5JY.js} +1 -1
  7. package/dist/{chunk-BMDTX5IN.js → chunk-TQ4HZREX.js} +1 -1
  8. package/dist/{chunk-IJRFYF4B.js → chunk-X4W4YC3U.js} +1 -1
  9. package/dist/constants.cjs +1 -1
  10. package/dist/constants.js +1 -1
  11. package/dist/eventcatalog.cjs +1 -21
  12. package/dist/eventcatalog.config.d.cts +10 -0
  13. package/dist/eventcatalog.config.d.ts +10 -0
  14. package/dist/eventcatalog.js +3 -20
  15. package/eventcatalog/src/components/CopyAsMarkdown.tsx +19 -1
  16. package/eventcatalog/src/components/FavoriteButton.tsx +54 -0
  17. package/eventcatalog/src/components/Grids/DomainGrid.tsx +386 -362
  18. package/eventcatalog/src/components/Grids/MessageGrid.tsx +166 -518
  19. package/eventcatalog/src/components/Header.astro +48 -23
  20. package/eventcatalog/src/components/Lists/VersionList.astro +2 -2
  21. package/eventcatalog/src/components/MDX/Design/Design.astro +4 -1
  22. package/eventcatalog/src/components/MDX/Flow/Flow.astro +2 -1
  23. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +3 -3
  24. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +8 -2
  25. package/eventcatalog/src/components/SchemaExplorer/SchemaPageViewer.tsx +37 -0
  26. package/eventcatalog/src/components/Search/Search.astro +48 -28
  27. package/eventcatalog/src/components/Search/SearchModal.tsx +393 -702
  28. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +298 -0
  29. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/container.ts +66 -0
  30. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/domain.ts +101 -0
  31. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/flow.ts +29 -0
  32. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/message.ts +84 -0
  33. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/service.ts +147 -0
  34. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/shared.ts +146 -0
  35. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +1073 -0
  36. package/eventcatalog/src/components/SideNav/NestedSideBar/sidebar-builder.ts +365 -0
  37. package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +90 -0
  38. package/eventcatalog/src/components/SideNav/SideNav.astro +18 -28
  39. package/eventcatalog/src/content.config.ts +2 -0
  40. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +10 -4
  41. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/chat/index.astro +3 -3
  42. package/eventcatalog/src/layouts/DirectoryLayout.astro +2 -2
  43. package/eventcatalog/src/layouts/DiscoverLayout.astro +3 -3
  44. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +85 -63
  45. package/eventcatalog/src/layouts/VisualiserLayout.astro +3 -3
  46. package/eventcatalog/src/pages/_index.astro +530 -110
  47. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +64 -0
  48. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +29 -0
  49. package/eventcatalog/src/pages/directory/[type]/_index.data.ts +4 -4
  50. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +1 -4
  51. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +3 -3
  52. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -5
  53. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +362 -190
  54. package/eventcatalog/src/pages/docs/[type]/[id]/[version].md.ts +1 -1
  55. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +4 -4
  56. package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +1 -4
  57. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +3 -27
  58. package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +2 -2
  59. package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +2 -2
  60. package/eventcatalog/src/pages/index.astro +14 -5
  61. package/eventcatalog/src/pages/nav-index.json.ts +30 -0
  62. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +77 -0
  63. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +90 -0
  64. package/eventcatalog/src/pages/schemas/{index.astro → explorer/index.astro} +3 -3
  65. package/eventcatalog/src/pages/studio.astro +3 -3
  66. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +4 -3
  67. package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +2 -2
  68. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +4 -3
  69. package/eventcatalog/src/stores/favorites-store.ts +83 -0
  70. package/eventcatalog/src/stores/sidebar-store.ts +8 -0
  71. package/eventcatalog/src/utils/collections/changelogs.ts +7 -4
  72. package/eventcatalog/src/utils/{channels.ts → collections/channels.ts} +81 -31
  73. package/eventcatalog/src/utils/collections/commands.ts +134 -0
  74. package/eventcatalog/src/utils/collections/containers.ts +44 -33
  75. package/eventcatalog/src/utils/collections/domains.ts +204 -62
  76. package/eventcatalog/src/utils/{entities.ts → collections/entities.ts} +44 -24
  77. package/eventcatalog/src/utils/collections/events.ts +136 -0
  78. package/eventcatalog/src/utils/collections/flows.ts +59 -25
  79. package/eventcatalog/src/utils/{messages.ts → collections/messages.ts} +13 -4
  80. package/eventcatalog/src/utils/{queries.ts → collections/queries.ts} +49 -28
  81. package/eventcatalog/src/utils/collections/services.ts +100 -68
  82. package/eventcatalog/src/utils/collections/teams.ts +94 -0
  83. package/eventcatalog/src/utils/collections/users.ts +122 -0
  84. package/eventcatalog/src/utils/collections/util.ts +57 -1
  85. package/eventcatalog/src/utils/feature.ts +3 -1
  86. package/eventcatalog/src/utils/{collections/file-diffs.ts → file-diffs.ts} +1 -1
  87. package/eventcatalog/src/utils/node-graphs/container-node-graph.ts +2 -0
  88. package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +16 -6
  89. package/eventcatalog/src/utils/node-graphs/domains-canvas.ts +14 -10
  90. package/eventcatalog/src/utils/node-graphs/domains-node-graph.ts +36 -64
  91. package/eventcatalog/src/utils/node-graphs/flows-node-graph.ts +23 -19
  92. package/eventcatalog/src/utils/node-graphs/message-node-graph.ts +36 -49
  93. package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +22 -18
  94. package/eventcatalog/src/utils/page-loaders/page-data-loader.ts +4 -4
  95. package/eventcatalog/tailwind.config.mjs +14 -0
  96. package/eventcatalog/tsconfig.json +2 -1
  97. package/package.json +7 -4
  98. package/eventcatalog/public/logo_old.png +0 -0
  99. package/eventcatalog/src/components/DiscoverInsight.astro +0 -61
  100. package/eventcatalog/src/components/Grids/ServiceGrid.tsx +0 -534
  101. package/eventcatalog/src/components/Lists/CustomSideBarSectionList.astro +0 -55
  102. package/eventcatalog/src/components/Lists/ProtocolList.tsx +0 -74
  103. package/eventcatalog/src/components/Lists/RepositoryList.astro +0 -37
  104. package/eventcatalog/src/components/Lists/SpecificationsList.astro +0 -67
  105. package/eventcatalog/src/components/SideBars/ChannelSideBar.astro +0 -204
  106. package/eventcatalog/src/components/SideBars/ContainerSideBar.astro +0 -180
  107. package/eventcatalog/src/components/SideBars/DomainSideBar.astro +0 -273
  108. package/eventcatalog/src/components/SideBars/EntitySideBar.astro +0 -139
  109. package/eventcatalog/src/components/SideBars/FlowSideBar.astro +0 -128
  110. package/eventcatalog/src/components/SideBars/MessageSideBar.astro +0 -248
  111. package/eventcatalog/src/components/SideBars/ServiceSideBar.astro +0 -294
  112. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/CollapsibleGroup.tsx +0 -46
  113. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/MessageList.tsx +0 -78
  114. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/SpecificationList.tsx +0 -83
  115. package/eventcatalog/src/components/SideNav/ListViewSideBar/index.tsx +0 -1250
  116. package/eventcatalog/src/components/SideNav/ListViewSideBar/types.ts +0 -91
  117. package/eventcatalog/src/components/SideNav/ListViewSideBar/utils.ts +0 -201
  118. package/eventcatalog/src/components/SideNav/TreeView/getTreeView.ts +0 -190
  119. package/eventcatalog/src/components/SideNav/TreeView/index.tsx +0 -94
  120. package/eventcatalog/src/components/TreeView/index.tsx +0 -328
  121. package/eventcatalog/src/components/TreeView/styles.module.css +0 -264
  122. package/eventcatalog/src/components/TreeView/useSlots.ts +0 -95
  123. package/eventcatalog/src/pages/architecture/[type]/index.astro +0 -14
  124. package/eventcatalog/src/pages/architecture/architecture.astro +0 -101
  125. package/eventcatalog/src/pages/architecture/docs/[type]/index.astro +0 -14
  126. package/eventcatalog/src/utils/commands.ts +0 -112
  127. package/eventcatalog/src/utils/events.ts +0 -108
  128. package/eventcatalog/src/utils/generators/index.ts +0 -10
  129. package/eventcatalog/src/utils/teams.ts +0 -72
  130. package/eventcatalog/src/utils/users.ts +0 -72
@@ -1,273 +0,0 @@
1
- ---
2
- import OwnersList from '@components/Lists/OwnersList';
3
- import PillListFlat from '@components/Lists/PillListFlat';
4
- import RepositoryList from '@components/Lists/RepositoryList.astro';
5
- import VersionList from '@components/Lists/VersionList.astro';
6
- import { getUbiquitousLanguage, getMessagesForDomain, getParentDomains } from '@utils/collections/domains';
7
- import CustomSideBarSectionList from '@components/Lists/CustomSideBarSectionList.astro';
8
- import { getOwner } from '@utils/collections/owners';
9
- import { buildUrl } from '@utils/url-builder';
10
- import type { CollectionEntry } from 'astro:content';
11
- import { ScrollText, Workflow } from 'lucide-react';
12
- import { isChangelogEnabled } from '@utils/feature';
13
-
14
- interface Props {
15
- domain: CollectionEntry<'domains'>;
16
- }
17
-
18
- const { domain } = Astro.props;
19
-
20
- // @ts-ignore
21
- const services = (domain.data.services as CollectionEntry<'services'>[]) || [];
22
- // @ts-ignore
23
- const subDomains = (domain.data.domains as CollectionEntry<'domains'>[]) || [];
24
-
25
- // @ts-ignore
26
- const entities = (domain.data.entities as CollectionEntry<'entities'>[]) || [];
27
-
28
- const attachments = domain.data.attachments || [];
29
-
30
- const ubiquitousLanguage = await getUbiquitousLanguage(domain);
31
- const hasUbiquitousLanguage = ubiquitousLanguage.length > 0;
32
- const ubiquitousLanguageDictionary = hasUbiquitousLanguage ? ubiquitousLanguage[0].data.dictionary : [];
33
-
34
- const ownersRaw = domain.data?.owners || [];
35
- const owners = await Promise.all<ReturnType<typeof getOwner>>(ownersRaw.map(getOwner));
36
- const filteredOwners = owners.filter((o) => o !== undefined);
37
-
38
- const messagesForDomain = await getMessagesForDomain(domain);
39
-
40
- const resourceGroups = domain.data?.resourceGroups || [];
41
-
42
- const parentDomains = await getParentDomains(domain);
43
-
44
- const serviceList = services.map((p) => ({
45
- label: p.data.name,
46
- badge: p.collection,
47
- tag: `v${p.data.version}`,
48
- collection: p.collection,
49
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
50
- }));
51
-
52
- const subDomainList = subDomains.map((p) => ({
53
- label: p.data.name,
54
- badge: p.collection,
55
- tag: `v${p.data.version}`,
56
- collection: p.collection,
57
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
58
- }));
59
-
60
- const parentDomainList = parentDomains.map((p) => ({
61
- label: p.data.name,
62
- badge: p.collection,
63
- tag: `v${p.data.version}`,
64
- collection: p.collection,
65
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
66
- }));
67
-
68
- const sendsList = messagesForDomain.sends
69
- .sort((a, b) => a.collection.localeCompare(b.collection))
70
- .map((p) => ({
71
- label: p.data.name,
72
- badge: p.collection,
73
- tag: `v${p.data.version}`,
74
- collection: p.collection,
75
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
76
- }));
77
-
78
- const receivesList = messagesForDomain.receives
79
- .sort((a, b) => a.collection.localeCompare(b.collection))
80
- .map((p) => ({
81
- label: p.data.name,
82
- badge: p.collection,
83
- tag: `v${p.data.version}`,
84
- collection: p.collection,
85
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
86
- }));
87
-
88
- const ubiquitousLanguageList = ubiquitousLanguageDictionary?.map((l) => ({
89
- label: l.name,
90
- badge: 'Ubiquitous Language',
91
- collection: 'ubiquitousLanguages',
92
- href: buildUrl(`/docs/${domain.collection}/${domain.data.id}/language?id=${l.id}`),
93
- }));
94
-
95
- const entityList = entities.map((p) => ({
96
- label: p.data.name,
97
- badge: p.collection,
98
- tag: `v${p.data.version}`,
99
- collection: p.collection,
100
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
101
- }));
102
-
103
- const ownersList = filteredOwners.map((o) => ({
104
- label: o.data.name,
105
- type: o.collection,
106
- badge: o.collection === 'users' ? o.data.role : 'Team',
107
- avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
108
- href: buildUrl(`/docs/${o.collection}/${o.data.id}`),
109
- }));
110
-
111
- const attachmentsList = attachments.map((a) => {
112
- const attachmentIsURL = typeof a === 'string';
113
-
114
- return {
115
- label: attachmentIsURL ? a : (a.title ?? a.url),
116
- href: attachmentIsURL ? a : a.url,
117
- icon: attachmentIsURL ? 'ExternalLinkIcon' : (a.icon ?? 'ExternalLinkIcon'),
118
- target: '_blank' as const,
119
- subgroup: attachmentIsURL ? undefined : (a.type ?? ''),
120
- };
121
- });
122
-
123
- const shouldRenderSideBarSection = (section: string) => {
124
- if (!domain.data.detailsPanel) {
125
- return true;
126
- }
127
- // @ts-ignore
128
- return domain.data.detailsPanel[section]?.visible ?? true;
129
- };
130
- ---
131
-
132
- <aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto py-4">
133
- <div>
134
- {
135
- parentDomains.length > 0 && shouldRenderSideBarSection('parentDomains') && (
136
- <PillListFlat
137
- title={`Parent domains (${parentDomains.length})`}
138
- pills={parentDomainList}
139
- emptyMessage={`This domain does not have any parent domains.`}
140
- color="pink"
141
- icon="ServerIcon"
142
- client:load
143
- />
144
- )
145
- }
146
-
147
- {
148
- subDomains.length > 0 && shouldRenderSideBarSection('subdomains') && (
149
- <PillListFlat
150
- title={`Subdomains (${subDomains.length})`}
151
- pills={subDomainList}
152
- emptyMessage={`This domain does not contain any subdomains.`}
153
- color="pink"
154
- icon="ServerIcon"
155
- client:load
156
- />
157
- )
158
- }
159
- {
160
- resourceGroups
161
- .filter((section) => section.items.length > 0 && section.sidebar)
162
- .map((section) => <CustomSideBarSectionList section={section} />)
163
- }
164
- {
165
- shouldRenderSideBarSection('services') && (
166
- <PillListFlat
167
- title={`Services (${services.length})`}
168
- pills={serviceList}
169
- emptyMessage={`This domain does not contain any services.`}
170
- color="pink"
171
- client:load
172
- />
173
- )
174
- }
175
- {
176
- shouldRenderSideBarSection('messages') && (
177
- <PillListFlat
178
- title={`Sends messages (${sendsList.length})`}
179
- pills={sendsList}
180
- emptyMessage={`This domain does not send any messages.`}
181
- color="orange"
182
- client:load
183
- />
184
- )
185
- }
186
- {
187
- shouldRenderSideBarSection('messages') && (
188
- <PillListFlat
189
- title={`Receives messages (${receivesList.length})`}
190
- pills={receivesList}
191
- emptyMessage={`This domain does not receive any messages.`}
192
- color="orange"
193
- client:load
194
- />
195
- )
196
- }
197
- {
198
- ubiquitousLanguageList && hasUbiquitousLanguage && shouldRenderSideBarSection('ubiquitousLanguage') && (
199
- <PillListFlat
200
- title={`Ubiquitous Language Dictionary (${ubiquitousLanguageDictionary?.length})`}
201
- pills={ubiquitousLanguageList}
202
- color="pink"
203
- limit={4}
204
- emptyMessage={`This domain does not have any documented ubiquitous language.`}
205
- client:load
206
- />
207
- )
208
- }
209
- {
210
- entities.length > 0 && shouldRenderSideBarSection('entities') && (
211
- <PillListFlat
212
- title={`Entities (${entities.length})`}
213
- pills={entityList}
214
- emptyMessage={`This domain does not contain any entities.`}
215
- color="pink"
216
- client:load
217
- />
218
- )
219
- }
220
- {
221
- domain.data.versions && shouldRenderSideBarSection('versions') && (
222
- <VersionList versions={domain.data.versions} collectionItem={domain} />
223
- )
224
- }
225
- {
226
- domain.data.attachments && shouldRenderSideBarSection('attachments') && (
227
- <PillListFlat
228
- title={`Attachments (${attachmentsList.length})`}
229
- pills={attachmentsList}
230
- emptyMessage={`This domain does not have any attachments.`}
231
- color="pink"
232
- client:load
233
- />
234
- )
235
- }
236
- {
237
- domain.data.repository && shouldRenderSideBarSection('repository') && (
238
- <RepositoryList repository={domain.data.repository?.url} language={domain.data.repository?.language} />
239
- )
240
- }
241
- {
242
- shouldRenderSideBarSection('owners') && (
243
- <OwnersList
244
- title={`Owners (${ownersList.length})`}
245
- owners={ownersList}
246
- emptyMessage={`This domain does not have any documented owners.`}
247
- client:load
248
- />
249
- )
250
- }
251
-
252
- <div class="space-y-2">
253
- <a
254
- href={buildUrl(`/visualiser/${domain.collection}/${domain.data.id}/${domain.data.version}`)}
255
- class="flex items-center justify-center space-x-2 text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-primary"
256
- >
257
- <Workflow strokeWidth={2} size={16} />
258
- <span class="block">View in visualiser</span>
259
- </a>
260
- {
261
- isChangelogEnabled() && shouldRenderSideBarSection('changelog') && (
262
- <a
263
- href={buildUrl(`/docs/${domain.collection}/${domain.data.id}/${domain.data.latestVersion}/changelog`)}
264
- class="flex items-center space-x-2 justify-center text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-primary"
265
- >
266
- <ScrollText strokeWidth={2} size={16} />
267
- <span class="block">Read changelog</span>
268
- </a>
269
- )
270
- }
271
- </div>
272
- </div>
273
- </aside>
@@ -1,139 +0,0 @@
1
- ---
2
- import type { CollectionEntry } from 'astro:content';
3
- import PillListFlat from '@components/Lists/PillListFlat';
4
- import OwnersList from '@components/Lists/OwnersList';
5
- import VersionList from '@components/Lists/VersionList.astro';
6
- import { buildUrl } from '@utils/url-builder';
7
- import { ScrollText } from 'lucide-react';
8
- import { getOwner } from '@utils/collections/owners';
9
- import { isChangelogEnabled } from '@utils/feature';
10
-
11
- interface Props {
12
- entity: CollectionEntry<'entities'>;
13
- }
14
-
15
- const { entity } = Astro.props;
16
-
17
- const ownersRaw = entity.data?.owners || [];
18
- const owners = await Promise.all<ReturnType<typeof getOwner>>(ownersRaw.map(getOwner));
19
- const filteredOwners = owners.filter((o) => o !== undefined);
20
-
21
- // @ts-ignore
22
- const services = (entity.data.services as CollectionEntry<'services'>[]) || [];
23
- // @ts-ignore
24
- const domains = (entity.data.domains as CollectionEntry<'domains'>[]) || [];
25
-
26
- const attachments = entity.data.attachments || [];
27
-
28
- const attachmentsList = attachments.map((a) => {
29
- const attachmentIsURL = typeof a === 'string';
30
- return {
31
- label: attachmentIsURL ? a : (a.title ?? a.url),
32
- href: attachmentIsURL ? a : a.url,
33
- icon: attachmentIsURL ? 'ExternalLinkIcon' : (a.icon ?? 'ExternalLinkIcon'),
34
- target: '_blank' as const,
35
- subgroup: attachmentIsURL ? undefined : (a.type ?? ''),
36
- };
37
- });
38
-
39
- const ownersList = filteredOwners.map((o) => ({
40
- label: o.data.name,
41
- type: o.collection,
42
- badge: o.collection === 'users' ? o.data.role : 'Team',
43
- avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
44
- href: buildUrl(`/docs/${o.collection}/${o.data.id}`),
45
- }));
46
-
47
- const servicesList = services.map((p) => ({
48
- label: p.data.name,
49
- badge: p.collection,
50
- color: 'pink',
51
- collection: p.collection,
52
- tag: `v${p.data.version}`,
53
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
54
- }));
55
-
56
- const domainsList = domains.map((p) => ({
57
- label: p.data.name,
58
- badge: p.collection,
59
- color: 'blue',
60
- collection: p.collection,
61
- tag: `v${p.data.version}`,
62
- href: buildUrl(`/docs/${p.collection}/${p.data.id}/${p.data.version}`),
63
- }));
64
-
65
- const shouldRenderSideBarSection = (section: string) => {
66
- if (!entity.data.detailsPanel) {
67
- return true;
68
- }
69
- // @ts-ignore
70
- return entity.data.detailsPanel[section]?.visible ?? true;
71
- };
72
- ---
73
-
74
- <aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto py-4">
75
- <div class="">
76
- {
77
- shouldRenderSideBarSection('domains') && (
78
- <PillListFlat
79
- title={`Domains (${domainsList.length})`}
80
- pills={domainsList}
81
- emptyMessage={`This entity is not used in any domains.`}
82
- color="blue"
83
- client:load
84
- />
85
- )
86
- }
87
- {
88
- servicesList.length > 0 && shouldRenderSideBarSection('services') && (
89
- <PillListFlat
90
- title={`Services (${servicesList.length})`}
91
- pills={servicesList}
92
- emptyMessage={`This entity is not used in any services.`}
93
- color="pink"
94
- client:load
95
- />
96
- )
97
- }
98
- {
99
- entity.data.versions && shouldRenderSideBarSection('versions') && (
100
- <VersionList versions={entity.data.versions} collectionItem={entity} />
101
- )
102
- }
103
- {
104
- entity.data.attachments && shouldRenderSideBarSection('attachments') && (
105
- <PillListFlat
106
- title={`Attachments (${attachmentsList.length})`}
107
- pills={attachmentsList}
108
- emptyMessage={`This entity does not have any attachments.`}
109
- color="pink"
110
- client:load
111
- />
112
- )
113
- }
114
- {
115
- filteredOwners.length > 0 && shouldRenderSideBarSection('owners') && (
116
- <OwnersList
117
- title={`Owners (${filteredOwners.length})`}
118
- owners={ownersList}
119
- emptyMessage={`This entity does not have any documented owners.`}
120
- client:load
121
- />
122
- )
123
- }
124
-
125
- {
126
- isChangelogEnabled() && shouldRenderSideBarSection('changelog') && (
127
- <div class="space-y-2">
128
- <a
129
- href={buildUrl(`/docs/${entity.collection}/${entity.data.id}/${entity.data.latestVersion}/changelog`)}
130
- class="flex items-center space-x-2 justify-center text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-primary"
131
- >
132
- <ScrollText strokeWidth={2} size={16} />
133
- <span class="block">Read changelog</span>
134
- </a>
135
- </div>
136
- )
137
- }
138
- </div>
139
- </aside>
@@ -1,128 +0,0 @@
1
- ---
2
- import OwnersList from '@components/Lists/OwnersList';
3
- import VersionList from '@components/Lists/VersionList.astro';
4
- import PillListFlat from '@components/Lists/PillListFlat';
5
- import { buildUrl } from '@utils/url-builder';
6
- import { getOwner } from '@utils/collections/owners';
7
- import type { CollectionEntry } from 'astro:content';
8
- import { ScrollText, Workflow, RssIcon } from 'lucide-react';
9
- import config from '@config';
10
- import { isChangelogEnabled } from '@utils/feature';
11
- import CustomSideBarSectionList from '@components/Lists/CustomSideBarSectionList.astro';
12
- interface Props {
13
- flow: CollectionEntry<'flows'>;
14
- }
15
-
16
- const { flow } = Astro.props;
17
-
18
- const ownersRaw = flow.data?.owners || [];
19
- const owners = await Promise.all<ReturnType<typeof getOwner>>(ownersRaw.map(getOwner));
20
- const filteredOwners = owners.filter((o) => o !== undefined);
21
-
22
- const resourceGroups = flow.data?.resourceGroups || [];
23
-
24
- const ownersList = filteredOwners.map((o) => ({
25
- label: o.data.name,
26
- type: o.collection,
27
- badge: o.collection === 'users' ? o.data.role : 'Team',
28
- avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
29
- href: buildUrl(`/docs/${o.collection}/${o.data.id}`),
30
- }));
31
-
32
- const isRSSEnabled = config.rss?.enabled;
33
-
34
- const attachments = flow.data.attachments || [];
35
-
36
- const attachmentsList = attachments.map((a) => {
37
- const attachmentIsURL = typeof a === 'string';
38
- return {
39
- label: attachmentIsURL ? a : (a.title ?? a.url),
40
- href: attachmentIsURL ? a : a.url,
41
- icon: attachmentIsURL ? 'ExternalLinkIcon' : (a.icon ?? 'ExternalLinkIcon'),
42
- target: '_blank' as const,
43
- subgroup: attachmentIsURL ? undefined : (a.type ?? ''),
44
- };
45
- });
46
-
47
- const shouldRenderSideBarSection = (section: string) => {
48
- if (!flow.data.detailsPanel) {
49
- return true;
50
- }
51
- // @ts-ignore
52
- return flow.data.detailsPanel[section]?.visible ?? true;
53
- };
54
- ---
55
-
56
- <aside class="sticky top-28 left-0 h-full overflow-y-auto pr-6 py-4">
57
- <div id="sidebar-cta-portal" class="">
58
- {
59
- resourceGroups
60
- .filter((section) => section.items.length > 0 && section.sidebar)
61
- .map((section) => <CustomSideBarSectionList section={section} />)
62
- }
63
- {
64
- flow.data.versions && shouldRenderSideBarSection('versions') && (
65
- <VersionList versions={flow.data.versions} collectionItem={flow} />
66
- )
67
- }
68
- {
69
- flow.data.attachments && shouldRenderSideBarSection('attachments') && (
70
- <PillListFlat
71
- title={`Attachments (${attachmentsList.length})`}
72
- pills={attachmentsList}
73
- emptyMessage={`This flow does not have any attachments.`}
74
- color="pink"
75
- client:load
76
- />
77
- )
78
- }
79
-
80
- {
81
- shouldRenderSideBarSection('owners') && (
82
- <OwnersList
83
- title={`Owners (${ownersList.length})`}
84
- owners={ownersList}
85
- emptyMessage={`This flow does not have any documented owners.`}
86
- client:load
87
- />
88
- )
89
- }
90
-
91
- {
92
- isRSSEnabled && (
93
- <div class="mx-auto pb-4 w-full max-w-lg divide-y divide-white/5 rounded-xl bg-white/5 border-b border-gray-100 mb-4">
94
- <span class="text-sm text-black font-semibold group-data-[hover]:text-black/80 capitalize">Flow RSS Feed</span>
95
- <ul role="list" class="space-y-2 mt-2">
96
- <li class="has-tooltip rounded-md text-gray-600 group px-1 w-full hover:bg-gradient-to-l hover:from-purple-500 hover:to-purple-700 hover:text-white hover:font-normal ">
97
- <a class={`flex items-center space-x-2`} target="_blank" href={buildUrl(`/rss/flows/rss.xml`)}>
98
- <RssIcon className="h-4 w-4 text-gray-800 group-hover:text-white" strokeWidth={1} />
99
- <span class="font-light text-sm truncate">RSS</span>
100
- </a>
101
- </li>
102
- </ul>
103
- </div>
104
- )
105
- }
106
-
107
- <div class="space-y-2">
108
- <a
109
- href={buildUrl(`/visualiser/${flow.collection}/${flow.data.id}/${flow.data.version}`)}
110
- class="flex items-center justify-center space-x-2 text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-primary"
111
- >
112
- <Workflow strokeWidth={2} size={16} />
113
- <span class="block">View in visualiser</span>
114
- </a>
115
- {
116
- isChangelogEnabled() && shouldRenderSideBarSection('changelog') && (
117
- <a
118
- href={buildUrl(`/docs/${flow.collection}/${flow.data.id}/${flow.data.latestVersion}/changelog`)}
119
- class="flex items-center space-x-2 justify-center text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-primary"
120
- >
121
- <ScrollText strokeWidth={2} size={16} />
122
- <span class="block">Read changelog</span>
123
- </a>
124
- )
125
- }
126
- </div>
127
- </div>
128
- </aside>