@drodil/backstage-plugin-qeta 3.59.2 → 3.59.6
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.
- package/dist/alpha.d.ts +2 -3
- package/dist/alpha.esm.js +2 -2
- package/dist/alpha.esm.js.map +1 -1
- package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
- package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -1
- package/dist/components/AskPage/AskPage.esm.js.map +1 -1
- package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -1
- package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
- package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -1
- package/dist/components/ContentHealthCard/ContentHealthCard.esm.js.map +1 -1
- package/dist/components/ContentHealthCard/ReviewList.esm.js.map +1 -1
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -1
- package/dist/components/EntityCards/EntityPostsContainerCard.esm.js.map +1 -1
- package/dist/components/EntityCards/EntityPostsGridCard.esm.js.map +1 -1
- package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
- package/dist/components/EntityPostsContent/EntityPostsContent.esm.js.map +1 -1
- package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +1 -1
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/HomeTimeline/HomeTimeline.esm.js.map +1 -1
- package/dist/components/HomeTimeline/index.esm.js +5 -1
- package/dist/components/HomeTimeline/index.esm.js.map +1 -1
- package/dist/components/LinkPage/LinkPage.esm.js +1 -1
- package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
- package/dist/components/LinksPage/LinksPage.esm.js.map +1 -1
- package/dist/components/ModeratorPage/ModeratorPage.esm.js.map +1 -1
- package/dist/components/PostsTableCard/Content.esm.js.map +1 -1
- package/dist/components/PostsTableCard/index.esm.js +5 -1
- package/dist/components/PostsTableCard/index.esm.js.map +1 -1
- package/dist/components/QetaPage/QetaPage.esm.js +1 -1
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
- package/dist/components/QetaPage/index.esm.js +5 -1
- package/dist/components/QetaPage/index.esm.js.map +1 -1
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js +2 -2
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js.map +1 -1
- package/dist/components/QetaSearchResultListItem/index.esm.js +5 -1
- package/dist/components/QetaSearchResultListItem/index.esm.js.map +1 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js +1 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
- package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
- package/dist/components/ReviewPage/ReviewPage.esm.js.map +1 -1
- package/dist/components/ReviewPage/index.esm.js +5 -1
- package/dist/components/ReviewPage/index.esm.js.map +1 -1
- package/dist/components/RightContent/ArticlesRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/AskRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/CollectionsRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/DefaultRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/EntitiesRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/EntityRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/FavoriteRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/HomeRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/LinkedPosts.esm.js.map +1 -1
- package/dist/components/RightContent/LinksRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/PostRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/QuestionsRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/RightContent.esm.js +1 -1
- package/dist/components/RightContent/RightContent.esm.js.map +1 -1
- package/dist/components/RightContent/SimilarPosts.esm.js.map +1 -1
- package/dist/components/RightContent/SimilarQuestions.esm.js.map +1 -1
- package/dist/components/RightContent/TagRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/TagsRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/UsersRightContent.esm.js.map +1 -1
- package/dist/components/SettingsPage/SettingsPage.esm.js +1 -1
- package/dist/components/SettingsPage/SettingsPage.esm.js.map +1 -1
- package/dist/components/Statistics/GlobalStatsContent.esm.js.map +1 -1
- package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +1 -1
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
- package/dist/components/UsersPage/UsersPage.esm.js.map +1 -1
- package/dist/components/WritePage/WritePage.esm.js.map +1 -1
- package/dist/hooks/useSidebarSettings.esm.js.map +1 -1
- package/dist/package.json.esm.js +5 -5
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/package.json +26 -26
package/dist/alpha.d.ts
CHANGED
|
@@ -109,9 +109,9 @@ declare const qetaPlugin: _backstage_frontend_plugin_api.OverridableFrontendPlug
|
|
|
109
109
|
showLinkButton?: boolean | undefined;
|
|
110
110
|
showNoQuestionsBtn?: boolean | undefined;
|
|
111
111
|
initialPageSize?: number | undefined;
|
|
112
|
-
filter?: _backstage_filter_predicates.FilterPredicate | undefined;
|
|
113
|
-
title?: string | undefined | undefined;
|
|
114
112
|
path?: string | undefined | undefined;
|
|
113
|
+
title?: string | undefined | undefined;
|
|
114
|
+
filter?: _backstage_filter_predicates.FilterPredicate | undefined;
|
|
115
115
|
group?: string | false | undefined | undefined;
|
|
116
116
|
icon?: string | undefined | undefined;
|
|
117
117
|
};
|
|
@@ -229,7 +229,6 @@ declare const qetaPlugin: _backstage_frontend_plugin_api.OverridableFrontendPlug
|
|
|
229
229
|
kind: "page";
|
|
230
230
|
name: undefined;
|
|
231
231
|
params: {
|
|
232
|
-
defaultPath?: [Error: `Use the 'path' param instead`];
|
|
233
232
|
path: string;
|
|
234
233
|
title?: string;
|
|
235
234
|
icon?: _backstage_frontend_plugin_api.IconElement;
|
package/dist/alpha.esm.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { ApiBlueprint, createExtensionInput, PageBlueprint, coreExtensionData, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
|
|
3
|
-
import {
|
|
3
|
+
import { compatWrapper, convertLegacyRouteRef, convertLegacyRouteRefs } from '@backstage/core-compat-api';
|
|
4
4
|
import { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
5
5
|
export { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';
|
|
6
|
-
import { createApiRef,
|
|
6
|
+
import { createApiRef, fetchApiRef, discoveryApiRef, configApiRef } from '@backstage/core-plugin-api';
|
|
7
7
|
import { QetaClient, getSupportedEntityKinds } from '@drodil/backstage-plugin-qeta-common';
|
|
8
8
|
import ContactSupportIcon from '@material-ui/icons/ContactSupport';
|
|
9
9
|
import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
|
package/dist/alpha.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\n createExtensionInput,\n createFrontendPlugin,\n NavItemBlueprint,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport {\n configApiRef,\n createApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n getSupportedEntityKinds,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { TechDocsAddonLocations } from '@backstage/plugin-techdocs-react';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAskQuestionAddon } from './components/TechDocsAskQuestionAddon';\nimport { Pluggable } from 'unified';\nimport { markdownPlugin } from '@drodil/backstage-plugin-qeta-react/alpha';\nimport { HomePageWidgetBlueprint } from '@backstage/plugin-home-react/alpha';\n\ninterface QetaMarkdownPluginsApi {\n getRehypePlugins(): Pluggable[];\n getRemarkPlugins(): Pluggable[];\n}\n\nexport const qetaMarkdownPluginsApiRef = createApiRef<QetaMarkdownPluginsApi>({\n id: 'plugin.qeta.addons',\n});\n\nexport const qetaMarkdownPluginsApiExtension = ApiBlueprint.makeWithOverrides({\n name: 'addons',\n inputs: {\n rehypePlugins: createExtensionInput([markdownPlugin]),\n remarkPlugins: createExtensionInput([markdownPlugin]),\n },\n factory(originalFactory, { inputs }) {\n const rehypePlugins = inputs.rehypePlugins.map(output =>\n output.get(markdownPlugin),\n );\n const remarkPlugins = inputs.remarkPlugins.map(output =>\n output.get(markdownPlugin),\n );\n return originalFactory(defineParams =>\n defineParams({\n api: qetaMarkdownPluginsApiRef,\n deps: {},\n factory: () => ({\n getRehypePlugins: () => rehypePlugins,\n getRemarkPlugins: () => remarkPlugins,\n }),\n }),\n );\n },\n});\n\nconst qetaApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: qetaApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory({ discoveryApi, fetchApi }) {\n return new QetaClient({ discoveryApi, fetchApi });\n },\n }),\n});\n\nconst qetaPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n subtitle: z => z.string().optional(),\n themeId: z => z.string().optional(),\n headerTooltip: z => z.string().optional(),\n headerType: z => z.string().optional(),\n headerTypeLink: z => z.string().optional(),\n },\n },\n inputs: {\n introElement: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n headerElements: createExtensionInput([coreExtensionData.reactElement], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, inputs, apis }) => {\n const introElement = inputs.introElement?.get(\n coreExtensionData.reactElement,\n );\n const headerElements = inputs.headerElements.map(e =>\n e.get(coreExtensionData.reactElement),\n );\n const pluginsApi = apis.get(qetaMarkdownPluginsApiRef);\n const remarkPlugins = pluginsApi?.getRemarkPlugins();\n const rehypePlugins = pluginsApi?.getRehypePlugins();\n return originalFactory({\n path: config.path ?? '/qeta',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n loader: () =>\n import('./components/QetaPage').then(m =>\n compatWrapper(\n <m.QetaPage\n {...config}\n introElement={introElement}\n headerElements={headerElements}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n ),\n });\n },\n});\n\nconst EntityPostsContent = EntityContentBlueprint.makeWithOverrides({\n name: 'entity-posts-content',\n config: {\n schema: {\n showFilters: z => z.boolean().optional(),\n showTitle: z => z.boolean().optional(),\n showAskButton: z => z.boolean().optional(),\n showWriteButton: z => z.boolean().optional(),\n showLinkButton: z => z.boolean().optional(),\n showNoQuestionsBtn: z => z.boolean().optional(),\n initialPageSize: z => z.number().optional(),\n type: z => z.enum(['question', 'article', 'link']).optional(),\n view: z => z.enum(['list', 'grid']).optional(),\n relations: z => z.array(z.string()).optional(),\n },\n },\n inputs: {},\n factory: (originalFactory, { config, apis }) => {\n return originalFactory({\n path: config.path ?? '/qeta',\n title: config.title ?? 'Q&A',\n filter: (entity: Entity) => {\n const configApi = apis.get(configApiRef);\n const supportedKinds = getSupportedEntityKinds(configApi);\n const entityKind = entity.kind.toLowerCase();\n return supportedKinds?.includes(entityKind);\n },\n loader: async () => {\n const pluginsApi = apis.get(qetaMarkdownPluginsApiRef);\n const remarkPlugins = pluginsApi?.getRemarkPlugins();\n const rehypePlugins = pluginsApi?.getRehypePlugins();\n return import('./components/EntityPostsContent/EntityPostsContent.tsx').then(\n m =>\n compatWrapper(\n <m.EntityPostsContent\n {...config}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n );\n },\n });\n },\n});\n\nconst qetaNavItem = NavItemBlueprint.make({\n params: {\n title: 'Q&A',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n icon: ContactSupportIcon,\n },\n});\n\nconst qetaSearchResultItem = SearchResultListItemBlueprint.make({\n params: {\n predicate: result => result.type === 'qeta',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n },\n});\n\nconst qetaPostSearchFilterType = SearchFilterResultTypeBlueprint.make({\n name: 'qeta',\n params: {\n value: 'qeta',\n name: 'Q&A',\n icon: <ContactSupportIcon />,\n },\n});\n\nconst techDocsAskQuestionAddon = AddonBlueprint.make({\n name: 'ask-question',\n params: {\n name: 'AskQuestion',\n location: TechDocsAddonLocations.Content,\n component: TechDocsAskQuestionAddon,\n },\n});\n\nconst homePageTable = HomePageWidgetBlueprint.make({\n name: 'home-posts-table',\n params: {\n title: 'Q&A posts',\n description: 'Shows latest Q&A posts',\n components: () =>\n import('../src/components/PostsTableCard').then(m => ({\n Content: m.Content,\n })),\n settings: {\n schema: {\n title: 'Post settings',\n type: 'object',\n properties: {\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n },\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['all', 'question', 'article', 'link'],\n },\n },\n },\n },\n },\n});\n\nconst homeTimeline = HomePageWidgetBlueprint.make({\n name: 'home-posts-timeline',\n params: {\n title: 'Q&A timeline',\n description: 'Shows Q&A latest events',\n components: () =>\n import('../src/components/HomeTimeline').then(m => ({\n Content: m.HomeTimeline,\n })),\n },\n});\n\n/**\n * Backstage frontend plugin.\n *\n * @alpha\n */\nconst qetaPlugin = createFrontendPlugin({\n pluginId: 'qeta',\n info: { packageJson: () => import('../package.json') },\n routes: convertLegacyRouteRefs({\n root: qetaRouteRef,\n }),\n extensions: [\n qetaApi,\n qetaPage,\n EntityPostsContent,\n qetaNavItem,\n qetaSearchResultItem,\n qetaPostSearchFilterType,\n techDocsAskQuestionAddon,\n qetaMarkdownPluginsApiExtension,\n homePageTable,\n homeTimeline,\n ],\n});\n\nexport default qetaPlugin;\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n\n// TODO: To be removed in favor of direct imports from `@drodil/backstage-plugin-qeta-react/alpha` in the next major release, after the deprecation period has ended.\nexport {\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaMarkdownRehypePluginBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaPageIntroElementBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaPageHeaderElementBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaMarkdownRemarkPluginBlueprint,\n} from '@drodil/backstage-plugin-qeta-react/alpha';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\n createExtensionInput,\n createFrontendPlugin,\n NavItemBlueprint,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport {\n configApiRef,\n createApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n getSupportedEntityKinds,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { TechDocsAddonLocations } from '@backstage/plugin-techdocs-react';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAskQuestionAddon } from './components/TechDocsAskQuestionAddon';\nimport { Pluggable } from 'unified';\nimport { markdownPlugin } from '@drodil/backstage-plugin-qeta-react/alpha';\nimport { HomePageWidgetBlueprint } from '@backstage/plugin-home-react/alpha';\n\ninterface QetaMarkdownPluginsApi {\n getRehypePlugins(): Pluggable[];\n getRemarkPlugins(): Pluggable[];\n}\n\nexport const qetaMarkdownPluginsApiRef = createApiRef<QetaMarkdownPluginsApi>({\n id: 'plugin.qeta.addons',\n});\n\nexport const qetaMarkdownPluginsApiExtension = ApiBlueprint.makeWithOverrides({\n name: 'addons',\n inputs: {\n rehypePlugins: createExtensionInput([markdownPlugin]),\n remarkPlugins: createExtensionInput([markdownPlugin]),\n },\n factory(originalFactory, { inputs }) {\n const rehypePlugins = inputs.rehypePlugins.map(output =>\n output.get(markdownPlugin),\n );\n const remarkPlugins = inputs.remarkPlugins.map(output =>\n output.get(markdownPlugin),\n );\n return originalFactory(defineParams =>\n defineParams({\n api: qetaMarkdownPluginsApiRef,\n deps: {},\n factory: () => ({\n getRehypePlugins: () => rehypePlugins,\n getRemarkPlugins: () => remarkPlugins,\n }),\n }),\n );\n },\n});\n\nconst qetaApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: qetaApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory({ discoveryApi, fetchApi }) {\n return new QetaClient({ discoveryApi, fetchApi });\n },\n }),\n});\n\nconst qetaPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n subtitle: z => z.string().optional(),\n themeId: z => z.string().optional(),\n headerTooltip: z => z.string().optional(),\n headerType: z => z.string().optional(),\n headerTypeLink: z => z.string().optional(),\n },\n },\n inputs: {\n introElement: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n headerElements: createExtensionInput([coreExtensionData.reactElement], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, inputs, apis }) => {\n const introElement = inputs.introElement?.get(\n coreExtensionData.reactElement,\n );\n const headerElements = inputs.headerElements.map(e =>\n e.get(coreExtensionData.reactElement),\n );\n const pluginsApi = apis.get(qetaMarkdownPluginsApiRef);\n const remarkPlugins = pluginsApi?.getRemarkPlugins();\n const rehypePlugins = pluginsApi?.getRehypePlugins();\n return originalFactory({\n path: config.path ?? '/qeta',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n loader: () =>\n import('./components/QetaPage').then(m =>\n compatWrapper(\n <m.QetaPage\n {...config}\n introElement={introElement}\n headerElements={headerElements}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n ),\n });\n },\n});\n\nconst EntityPostsContent = EntityContentBlueprint.makeWithOverrides({\n name: 'entity-posts-content',\n config: {\n schema: {\n showFilters: z => z.boolean().optional(),\n showTitle: z => z.boolean().optional(),\n showAskButton: z => z.boolean().optional(),\n showWriteButton: z => z.boolean().optional(),\n showLinkButton: z => z.boolean().optional(),\n showNoQuestionsBtn: z => z.boolean().optional(),\n initialPageSize: z => z.number().optional(),\n type: z => z.enum(['question', 'article', 'link']).optional(),\n view: z => z.enum(['list', 'grid']).optional(),\n relations: z => z.array(z.string()).optional(),\n },\n },\n inputs: {},\n factory: (originalFactory, { config, apis }) => {\n return originalFactory({\n path: config.path ?? '/qeta',\n title: config.title ?? 'Q&A',\n filter: (entity: Entity) => {\n const configApi = apis.get(configApiRef);\n const supportedKinds = getSupportedEntityKinds(configApi);\n const entityKind = entity.kind.toLowerCase();\n return supportedKinds?.includes(entityKind);\n },\n loader: async () => {\n const pluginsApi = apis.get(qetaMarkdownPluginsApiRef);\n const remarkPlugins = pluginsApi?.getRemarkPlugins();\n const rehypePlugins = pluginsApi?.getRehypePlugins();\n return import('./components/EntityPostsContent/EntityPostsContent.tsx').then(\n m =>\n compatWrapper(\n <m.EntityPostsContent\n {...config}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n );\n },\n });\n },\n});\n\nconst qetaNavItem = NavItemBlueprint.make({\n params: {\n title: 'Q&A',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n icon: ContactSupportIcon,\n },\n});\n\nconst qetaSearchResultItem = SearchResultListItemBlueprint.make({\n params: {\n predicate: result => result.type === 'qeta',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n },\n});\n\nconst qetaPostSearchFilterType = SearchFilterResultTypeBlueprint.make({\n name: 'qeta',\n params: {\n value: 'qeta',\n name: 'Q&A',\n icon: <ContactSupportIcon />,\n },\n});\n\nconst techDocsAskQuestionAddon = AddonBlueprint.make({\n name: 'ask-question',\n params: {\n name: 'AskQuestion',\n location: TechDocsAddonLocations.Content,\n component: TechDocsAskQuestionAddon,\n },\n});\n\nconst homePageTable = HomePageWidgetBlueprint.make({\n name: 'home-posts-table',\n params: {\n title: 'Q&A posts',\n description: 'Shows latest Q&A posts',\n components: () =>\n import('../src/components/PostsTableCard').then(m => ({\n Content: m.Content,\n })),\n settings: {\n schema: {\n title: 'Post settings',\n type: 'object',\n properties: {\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n },\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['all', 'question', 'article', 'link'],\n },\n },\n },\n },\n },\n});\n\nconst homeTimeline = HomePageWidgetBlueprint.make({\n name: 'home-posts-timeline',\n params: {\n title: 'Q&A timeline',\n description: 'Shows Q&A latest events',\n components: () =>\n import('../src/components/HomeTimeline').then(m => ({\n Content: m.HomeTimeline,\n })),\n },\n});\n\n/**\n * Backstage frontend plugin.\n *\n * @alpha\n */\nconst qetaPlugin = createFrontendPlugin({\n pluginId: 'qeta',\n info: { packageJson: () => import('../package.json') },\n routes: convertLegacyRouteRefs({\n root: qetaRouteRef,\n }),\n extensions: [\n qetaApi,\n qetaPage,\n EntityPostsContent,\n qetaNavItem,\n qetaSearchResultItem,\n qetaPostSearchFilterType,\n techDocsAskQuestionAddon,\n qetaMarkdownPluginsApiExtension,\n homePageTable,\n homeTimeline,\n ],\n});\n\nexport default qetaPlugin;\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n\n// TODO: To be removed in favor of direct imports from `@drodil/backstage-plugin-qeta-react/alpha` in the next major release, after the deprecation period has ended.\nexport {\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaMarkdownRehypePluginBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaPageIntroElementBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaPageHeaderElementBlueprint,\n /** @deprecated Use blueprints from `@drodil/backstage-plugin-qeta-react/alpha` instead. */\n QetaMarkdownRemarkPluginBlueprint,\n} from '@drodil/backstage-plugin-qeta-react/alpha';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArticlePage.esm.js","sources":["../../../src/components/ArticlePage/ArticlePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Article, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n ArticleContent,\n ContentHeader,\n PostHistoryButton,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n FollowPostButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Container } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\n\nexport const ArticlePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n retry,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setViews(post.views);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('articlePage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'article') {\n return (\n <WarningPanel title=\"Not found\" message={t('articlePage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={post.title}\n titleIcon={<LibraryBooksOutlined fontSize=\"large\" />}\n >\n <PostHistoryButton post={post} onRestore={retry} />\n <FollowPostButton post={post} />\n <WriteArticleButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n <Container maxWidth={false}>\n <AIAnswerCard\n article={post as Article}\n style={{ marginBottom: '2em' }}\n />\n <ArticleContent post={post} views={views} />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAqBO,MAAM,cAAc,MAAM;AAC/B,
|
|
1
|
+
{"version":3,"file":"ArticlePage.esm.js","sources":["../../../src/components/ArticlePage/ArticlePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Article, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n ArticleContent,\n ContentHeader,\n PostHistoryButton,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n FollowPostButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Container } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\n\nexport const ArticlePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n retry,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setViews(post.views);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('articlePage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'article') {\n return (\n <WarningPanel title=\"Not found\" message={t('articlePage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={post.title}\n titleIcon={<LibraryBooksOutlined fontSize=\"large\" />}\n >\n <PostHistoryButton post={post} onRestore={retry} />\n <FollowPostButton post={post} />\n <WriteArticleButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n <Container maxWidth={false}>\n <AIAnswerCard\n article={post as Article}\n style={{ marginBottom: '2em' }}\n />\n <ArticleContent post={post} views={views} />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAqBO,MAAM,cAAc,MAAM;AAC/B,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,SAAA,CAAsB,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AAE9D,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,IAAA;AAAA,IACP,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAA,GAAA,KAAO,GAAA,CAAI,QAAQ,EAAE,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,EAAY,SAAS,YAAA,EAAc;AACrC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAQ,GAAA,EAAK,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,KAAA,IAAS,SAAS,MAAA,EAAW;AAC/B,IAAA,uBACE,GAAA,CAAC,gBAAa,QAAA,EAAS,OAAA,EAAQ,OAAO,CAAA,CAAE,0BAA0B,CAAA,EAC/D,QAAA,EAAA,KAAA,EAAO,OAAA,EACV,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA,2BACG,YAAA,EAAA,EAAa,KAAA,EAAM,aAAY,OAAA,EAAS,CAAA,CAAE,sBAAsB,CAAA,EAAG,CAAA;AAAA,EAExE;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,SAAA,kBAAW,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAElD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAY,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,0BACjD,GAAA,CAAC,oBAAiB,IAAA,EAAY,CAAA;AAAA,8BAC7B,kBAAA,EAAA,EAAmB,CAAA;AAAA,0BACpB,GAAA,CAAC,yBAAsB,IAAA,EAAY;AAAA;AAAA;AAAA,KACrC;AAAA,oBACA,IAAA,CAAC,SAAA,EAAA,EAAU,QAAA,EAAU,KAAA,EACnB,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAO,EAAE,YAAA,EAAc,KAAA;AAAM;AAAA,OAC/B;AAAA,sBACA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,KAAA,EAAc;AAAA,KAAA,EAC5C;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArticlesPage.esm.js","sources":["../../../src/components/ArticlesPage/ArticlesPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport {\n ContentHeader,\n PostsContainer,\n qetaTranslationRef,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\nimport { Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const ArticlesPage = () => {\n const [searchParams] = useSearchParams();\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const { t } = useTranslationRef(qetaTranslationRef);\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n setTags(filterTags(searchParams.get('tags')));\n }, [searchParams, setEntityRef]);\n\n return (\n <>\n <ContentHeader\n titleComponent={\n <Typography\n variant=\"h4\"\n style={{ display: 'flex', alignItems: 'center' }}\n >\n <LibraryBooksOutlined\n fontSize=\"large\"\n style={{ marginRight: '8px' }}\n />\n {t('articlesPage.title')}\n </Typography>\n }\n >\n <WriteArticleButton entity={entityRef} tags={tags} />\n </ContentHeader>\n <PostsContainer type=\"article\" defaultView=\"grid\" />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaO,MAAM,eAAe,MAAM;AAChC,
|
|
1
|
+
{"version":3,"file":"ArticlesPage.esm.js","sources":["../../../src/components/ArticlesPage/ArticlesPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport {\n ContentHeader,\n PostsContainer,\n qetaTranslationRef,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\nimport { Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const ArticlesPage = () => {\n const [searchParams] = useSearchParams();\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const { t } = useTranslationRef(qetaTranslationRef);\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n setTags(filterTags(searchParams.get('tags')));\n }, [searchParams, setEntityRef]);\n\n return (\n <>\n <ContentHeader\n titleComponent={\n <Typography\n variant=\"h4\"\n style={{ display: 'flex', alignItems: 'center' }}\n >\n <LibraryBooksOutlined\n fontSize=\"large\"\n style={{ marginRight: '8px' }}\n />\n {t('articlesPage.title')}\n </Typography>\n }\n >\n <WriteArticleButton entity={entityRef} tags={tags} />\n </ContentHeader>\n <PostsContainer type=\"article\" defaultView=\"grid\" />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AAEvC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA+B,MAAS,CAAA;AAChE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAS,CAAA;AACpD,IAAA,OAAA,CAAQ,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,cAAA,kBACE,IAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAS;AAAA,YAE/C,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,oBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAS,OAAA;AAAA,kBACT,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA;AAAM;AAAA,eAC9B;AAAA,cACC,EAAE,oBAAoB;AAAA;AAAA;AAAA,SACzB;AAAA,QAGF,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAY;AAAA;AAAA,KACrD;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,SAAA,EAAU,aAAY,MAAA,EAAO;AAAA,GAAA,EACpD,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import { InfoCard, Progress } from '@backstage/core-components';\nimport { useEffect, useState } from 'react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AIAnswerCard,\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n QuestionFormValues,\n SelectTemplateList,\n useAI,\n useQetaApi,\n useQetaContext,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { filterTags, Template } from '@drodil/backstage-plugin-qeta-common';\nimport { Box, Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const AskPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const { isNewQuestionsEnabled } = useAI();\n const { value, loading } = useQetaApi(api => api.getTemplates());\n const [draft, setDraft] = useState<\n { title: string; content: string } | undefined\n >(undefined);\n const { setDraftQuestion } = useQetaContext();\n\n useEffect(() => {\n return () => {\n setDraftQuestion?.(undefined);\n };\n }, [setDraftQuestion]);\n\n const [template, setTemplate] = useState<Template | null | undefined>(\n undefined,\n );\n\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const questionTitle = searchParams.get('title') ?? undefined;\n const content = searchParams.get('content') ?? undefined;\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('askPage.title.existingQuestion');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('askPage.title.entityQuestion', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('askPage.title.newQuestion');\n }\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Progress />\n </Box>\n );\n }\n\n if (\n !id &&\n value &&\n value.templates &&\n value.total > 0 &&\n template === undefined\n ) {\n return (\n <Box role=\"region\" aria-label={t('askPage.templateSelection')}>\n <SelectTemplateList\n templates={value}\n onTemplateSelect={temp => setTemplate(temp)}\n aria-label={t('askPage.selectTemplate')}\n />\n </Box>\n );\n }\n\n const handleFormChange = (data: QuestionFormValues) => {\n if (setDraftQuestion) {\n setDraftQuestion({\n title: data.title,\n content: data.content,\n tags: data.tags,\n entities: data.entities?.map(stringifyEntityRef),\n });\n }\n if (!isNewQuestionsEnabled) {\n return;\n }\n setDraft({\n title: data.title,\n content: data.content,\n });\n };\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item style={{ width: '100%' }}>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"question\"\n template={template}\n onFormChange={handleFormChange}\n aria-label={t('askPage.questionForm')}\n title={questionTitle}\n content={content}\n />\n <AIAnswerCard draft={draft} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoBO,MAAM,UAAU,MAAM;AAC3B,
|
|
1
|
+
{"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import { InfoCard, Progress } from '@backstage/core-components';\nimport { useEffect, useState } from 'react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AIAnswerCard,\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n QuestionFormValues,\n SelectTemplateList,\n useAI,\n useQetaApi,\n useQetaContext,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { filterTags, Template } from '@drodil/backstage-plugin-qeta-common';\nimport { Box, Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const AskPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const { isNewQuestionsEnabled } = useAI();\n const { value, loading } = useQetaApi(api => api.getTemplates());\n const [draft, setDraft] = useState<\n { title: string; content: string } | undefined\n >(undefined);\n const { setDraftQuestion } = useQetaContext();\n\n useEffect(() => {\n return () => {\n setDraftQuestion?.(undefined);\n };\n }, [setDraftQuestion]);\n\n const [template, setTemplate] = useState<Template | null | undefined>(\n undefined,\n );\n\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const questionTitle = searchParams.get('title') ?? undefined;\n const content = searchParams.get('content') ?? undefined;\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('askPage.title.existingQuestion');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('askPage.title.entityQuestion', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('askPage.title.newQuestion');\n }\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Progress />\n </Box>\n );\n }\n\n if (\n !id &&\n value &&\n value.templates &&\n value.total > 0 &&\n template === undefined\n ) {\n return (\n <Box role=\"region\" aria-label={t('askPage.templateSelection')}>\n <SelectTemplateList\n templates={value}\n onTemplateSelect={temp => setTemplate(temp)}\n aria-label={t('askPage.selectTemplate')}\n />\n </Box>\n );\n }\n\n const handleFormChange = (data: QuestionFormValues) => {\n if (setDraftQuestion) {\n setDraftQuestion({\n title: data.title,\n content: data.content,\n tags: data.tags,\n entities: data.entities?.map(stringifyEntityRef),\n });\n }\n if (!isNewQuestionsEnabled) {\n return;\n }\n setDraft({\n title: data.title,\n content: data.content,\n });\n };\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item style={{ width: '100%' }}>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"question\"\n template={template}\n onFormChange={handleFormChange}\n aria-label={t('askPage.questionForm')}\n title={questionTitle}\n content={content}\n />\n <AIAnswerCard draft={draft} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionCreatePage.esm.js","sources":["../../../src/components/CollectionCreatePage/CollectionCreatePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ContentHeader, InfoCard } from '@backstage/core-components';\nimport {\n CollectionForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CollectionCreatePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n let title;\n if (id) {\n title = t('collectionCreatePage.title.existingCollection');\n } else {\n title = t('collectionCreatePage.title.newCollection');\n }\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <CollectionForm id={id} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AASO,MAAM,uBAAuB,MAAM;AACxC,
|
|
1
|
+
{"version":3,"file":"CollectionCreatePage.esm.js","sources":["../../../src/components/CollectionCreatePage/CollectionCreatePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ContentHeader, InfoCard } from '@backstage/core-components';\nimport {\n CollectionForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CollectionCreatePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n let title;\n if (id) {\n title = t('collectionCreatePage.title.existingCollection');\n } else {\n title = t('collectionCreatePage.title.newCollection');\n }\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <CollectionForm id={id} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AASO,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,KAAA,GAAQ,EAAE,+CAA+C,CAAA;AAAA,EAC3D,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,EAAE,0CAA0C,CAAA;AAAA,EACtD;AACA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAA,EAAc,CAAA;AAAA,wBAC5B,IAAA,EAAA,EAAK,SAAA,EAAS,MAAC,OAAA,EAAS,CAAA,EAAG,WAAU,QAAA,EACpC,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EACR,8BAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,kBAAe,EAAA,EAAQ,CAAA,EAC1B,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionPage.esm.js","sources":["../../../src/components/CollectionPage/CollectionPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n CollectionFollowButton,\n ContentHeader,\n DeleteModal,\n collectionEditRouteRef,\n qetaTranslationRef,\n useQetaApi,\n PostsContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Button, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useState } from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useNavigate } from 'react-router-dom';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\n\nexport const CollectionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const navigate = useNavigate();\n const editCollectionRoute = useRouteRef(collectionEditRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n\n const {\n value: collection,\n loading,\n error,\n } = useQetaApi(api => api.getCollection(id), [id]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || collection === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading', {})}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <PlaylistPlayIcon fontSize=\"large\" style={{ marginRight: '8px' }} />\n <Typography variant=\"h5\" component=\"h2\">\n {collection.title}\n </Typography>\n </div>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n <CollectionFollowButton collection={collection} />\n {collection.canEdit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<EditIcon />}\n onClick={() =>\n editCollectionRoute &&\n navigate(\n editCollectionRoute({\n id: collection.id.toString(10),\n }),\n )\n }\n >\n {t('templateList.editButton', {})}\n </Button>\n )}\n {collection.canDelete && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={handleDeleteModalOpen}\n >\n {t('templateList.deleteButton', {})}\n </Button>\n )}\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <ContentHeaderCard\n description={collection.description}\n image={collection.headerImage}\n imageIcon={<PlaylistPlayIcon style={{ fontSize: 80 }} />}\n tagsAndEntities={{ entity: collection }}\n stats={[\n {\n label: t('common.postsLabel', {\n count: collection.postsCount,\n itemType: 'post',\n }),\n value: collection.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', {\n count: collection.followers,\n }),\n value: collection.followers,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n </Grid>\n <Grid item xs={12}>\n <PostsContainer\n collectionId={collection.id}\n orderBy=\"rank\"\n allowRanking={collection.canEdit}\n defaultView=\"grid\"\n prefix=\"collection-posts\"\n />\n </Grid>\n </Grid>\n {collection.canDelete && (\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={collection}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAwBO,MAAM,iBAAiB,MAAM;AAClC,
|
|
1
|
+
{"version":3,"file":"CollectionPage.esm.js","sources":["../../../src/components/CollectionPage/CollectionPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n CollectionFollowButton,\n ContentHeader,\n DeleteModal,\n collectionEditRouteRef,\n qetaTranslationRef,\n useQetaApi,\n PostsContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Button, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useState } from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useNavigate } from 'react-router-dom';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\n\nexport const CollectionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const navigate = useNavigate();\n const editCollectionRoute = useRouteRef(collectionEditRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n\n const {\n value: collection,\n loading,\n error,\n } = useQetaApi(api => api.getCollection(id), [id]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || collection === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading', {})}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <PlaylistPlayIcon fontSize=\"large\" style={{ marginRight: '8px' }} />\n <Typography variant=\"h5\" component=\"h2\">\n {collection.title}\n </Typography>\n </div>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n <CollectionFollowButton collection={collection} />\n {collection.canEdit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<EditIcon />}\n onClick={() =>\n editCollectionRoute &&\n navigate(\n editCollectionRoute({\n id: collection.id.toString(10),\n }),\n )\n }\n >\n {t('templateList.editButton', {})}\n </Button>\n )}\n {collection.canDelete && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={handleDeleteModalOpen}\n >\n {t('templateList.deleteButton', {})}\n </Button>\n )}\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <ContentHeaderCard\n description={collection.description}\n image={collection.headerImage}\n imageIcon={<PlaylistPlayIcon style={{ fontSize: 80 }} />}\n tagsAndEntities={{ entity: collection }}\n stats={[\n {\n label: t('common.postsLabel', {\n count: collection.postsCount,\n itemType: 'post',\n }),\n value: collection.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', {\n count: collection.followers,\n }),\n value: collection.followers,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n </Grid>\n <Grid item xs={12}>\n <PostsContainer\n collectionId={collection.id}\n orderBy=\"rank\"\n allowRanking={collection.canEdit}\n defaultView=\"grid\"\n prefix=\"collection-posts\"\n />\n </Grid>\n </Grid>\n {collection.canDelete && (\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={collection}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionsPage.esm.js","sources":["../../../src/components/CollectionsPage/CollectionsPage.tsx"],"sourcesContent":["import {\n CollectionsContainer,\n ContentHeader,\n CreateCollectionButton,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CollectionsPage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('collectionsPage.title')}\n titleIcon={<PlaylistPlayOutlined fontSize=\"large\" />}\n >\n <CreateCollectionButton />\n </ContentHeader>\n <CollectionsContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AASO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,CAAA,
|
|
1
|
+
{"version":3,"file":"CollectionsPage.esm.js","sources":["../../../src/components/CollectionsPage/CollectionsPage.tsx"],"sourcesContent":["import {\n CollectionsContainer,\n ContentHeader,\n CreateCollectionButton,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CollectionsPage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('collectionsPage.title')}\n titleIcon={<PlaylistPlayOutlined fontSize=\"large\" />}\n >\n <CreateCollectionButton />\n </ContentHeader>\n <CollectionsContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AASO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,QAChC,SAAA,kBAAW,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAElD,8BAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA,KAC1B;AAAA,wBACC,oBAAA,EAAA,EAAqB;AAAA,GAAA,EACxB,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentHealthCard.esm.js","sources":["../../../src/components/ContentHealthCard/ContentHealthCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n Divider,\n LinearProgress,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n ObsoleteModal,\n qetaTranslationRef,\n useCanReview,\n useQetaApi,\n ValidReviewModal,\n} from '@drodil/backstage-plugin-qeta-react';\nimport CheckIcon from '@material-ui/icons/Check';\nimport BlockIcon from '@material-ui/icons/Block';\nimport { Alert } from '@material-ui/lab';\nimport { ReviewList } from './ReviewList';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n marginBottom: theme.spacing(2),\n },\n cardHeader: {\n paddingBottom: 0,\n },\n scoreContainer: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(1),\n },\n scoreLabel: {\n flexGrow: 1,\n marginRight: theme.spacing(2),\n },\n progressBar: {\n flexGrow: 2,\n height: 10,\n borderRadius: 5,\n },\n actions: {\n marginTop: theme.spacing(2),\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n obsoleteAlert: {\n marginTop: theme.spacing(1),\n },\n divider: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const ContentHealthCard = ({ post }: { post: Post }) => {\n const classes = useStyles();\n const { canReview, canRead } = useCanReview();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { value: reviews } = useQetaApi(\n api => api.getPostReviews(post.id),\n [post.id],\n );\n\n const [openObsoleteModal, setOpenObsoleteModal] = useState(false);\n const [openValidModal, setOpenValidModal] = useState(false);\n\n const handleRefresh = () => {\n window.location.reload();\n };\n\n if (!canRead && !canReview) {\n return null;\n }\n\n const getProgressColor = (score: number) => {\n if (score > 70) return 'primary';\n if (score > 40) return 'secondary';\n return 'secondary';\n };\n\n return (\n <Card className={classes.card}>\n <CardHeader\n title={t('contentHealth.cardTitle')}\n titleTypographyProps={{ variant: 'h6' }}\n className={classes.cardHeader}\n />\n <CardContent>\n {post.status !== 'obsolete' && post.needsReview && (\n <Typography variant=\"body2\" paragraph>\n {t('contentHealth.description')}\n </Typography>\n )}\n <div className={classes.scoreContainer}>\n <Typography variant=\"body1\" className={classes.scoreLabel}>\n {t('contentHealth.healthScore', {\n score: String(post.healthScore),\n })}\n </Typography>\n </div>\n <LinearProgress\n variant=\"determinate\"\n value={post.healthScore ?? 0}\n className={classes.progressBar}\n color={getProgressColor(post.healthScore ?? 0)}\n />\n\n {post.status === 'obsolete' && (\n <Alert severity=\"warning\" className={classes.obsoleteAlert}>\n {t('contentHealth.obsoleteWarning')}\n </Alert>\n )}\n\n {canReview && (post.needsReview || post.status === 'obsolete') && (\n <div className={classes.actions}>\n <Tooltip title={t('contentHealth.markValid')}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n startIcon={<CheckIcon />}\n onClick={() => setOpenValidModal(true)}\n >\n {t('contentHealth.valid')}\n </Button>\n </Tooltip>\n <Tooltip title={t('contentHealth.markObsolete')}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n startIcon={<BlockIcon />}\n onClick={() => setOpenObsoleteModal(true)}\n >\n {t('contentHealth.obsolete')}\n </Button>\n </Tooltip>\n </div>\n )}\n\n <ObsoleteModal\n open={openObsoleteModal}\n onClose={() => setOpenObsoleteModal(false)}\n post={post}\n onConfirm={handleRefresh}\n />\n <ValidReviewModal\n open={openValidModal}\n onClose={() => setOpenValidModal(false)}\n post={post}\n onConfirm={handleRefresh}\n />\n\n {reviews && reviews.length > 0 && (\n <>\n <Divider className={classes.divider} />\n <ReviewList reviews={reviews} />\n </>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA0BA,MAAM,SAAA,GAAY,WAAW,
|
|
1
|
+
{"version":3,"file":"ContentHealthCard.esm.js","sources":["../../../src/components/ContentHealthCard/ContentHealthCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n Divider,\n LinearProgress,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n ObsoleteModal,\n qetaTranslationRef,\n useCanReview,\n useQetaApi,\n ValidReviewModal,\n} from '@drodil/backstage-plugin-qeta-react';\nimport CheckIcon from '@material-ui/icons/Check';\nimport BlockIcon from '@material-ui/icons/Block';\nimport { Alert } from '@material-ui/lab';\nimport { ReviewList } from './ReviewList';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n marginBottom: theme.spacing(2),\n },\n cardHeader: {\n paddingBottom: 0,\n },\n scoreContainer: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(1),\n },\n scoreLabel: {\n flexGrow: 1,\n marginRight: theme.spacing(2),\n },\n progressBar: {\n flexGrow: 2,\n height: 10,\n borderRadius: 5,\n },\n actions: {\n marginTop: theme.spacing(2),\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n obsoleteAlert: {\n marginTop: theme.spacing(1),\n },\n divider: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const ContentHealthCard = ({ post }: { post: Post }) => {\n const classes = useStyles();\n const { canReview, canRead } = useCanReview();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { value: reviews } = useQetaApi(\n api => api.getPostReviews(post.id),\n [post.id],\n );\n\n const [openObsoleteModal, setOpenObsoleteModal] = useState(false);\n const [openValidModal, setOpenValidModal] = useState(false);\n\n const handleRefresh = () => {\n window.location.reload();\n };\n\n if (!canRead && !canReview) {\n return null;\n }\n\n const getProgressColor = (score: number) => {\n if (score > 70) return 'primary';\n if (score > 40) return 'secondary';\n return 'secondary';\n };\n\n return (\n <Card className={classes.card}>\n <CardHeader\n title={t('contentHealth.cardTitle')}\n titleTypographyProps={{ variant: 'h6' }}\n className={classes.cardHeader}\n />\n <CardContent>\n {post.status !== 'obsolete' && post.needsReview && (\n <Typography variant=\"body2\" paragraph>\n {t('contentHealth.description')}\n </Typography>\n )}\n <div className={classes.scoreContainer}>\n <Typography variant=\"body1\" className={classes.scoreLabel}>\n {t('contentHealth.healthScore', {\n score: String(post.healthScore),\n })}\n </Typography>\n </div>\n <LinearProgress\n variant=\"determinate\"\n value={post.healthScore ?? 0}\n className={classes.progressBar}\n color={getProgressColor(post.healthScore ?? 0)}\n />\n\n {post.status === 'obsolete' && (\n <Alert severity=\"warning\" className={classes.obsoleteAlert}>\n {t('contentHealth.obsoleteWarning')}\n </Alert>\n )}\n\n {canReview && (post.needsReview || post.status === 'obsolete') && (\n <div className={classes.actions}>\n <Tooltip title={t('contentHealth.markValid')}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n startIcon={<CheckIcon />}\n onClick={() => setOpenValidModal(true)}\n >\n {t('contentHealth.valid')}\n </Button>\n </Tooltip>\n <Tooltip title={t('contentHealth.markObsolete')}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n startIcon={<BlockIcon />}\n onClick={() => setOpenObsoleteModal(true)}\n >\n {t('contentHealth.obsolete')}\n </Button>\n </Tooltip>\n </div>\n )}\n\n <ObsoleteModal\n open={openObsoleteModal}\n onClose={() => setOpenObsoleteModal(false)}\n post={post}\n onConfirm={handleRefresh}\n />\n <ValidReviewModal\n open={openValidModal}\n onClose={() => setOpenValidModal(false)}\n post={post}\n onConfirm={handleRefresh}\n />\n\n {reviews && reviews.length > 0 && (\n <>\n <Divider className={classes.divider} />\n <ReviewList reviews={reviews} />\n </>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewList.esm.js","sources":["../../../src/components/ContentHealthCard/ReviewList.tsx"],"sourcesContent":["import { PostReview } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Typography,\n makeStyles,\n List,\n ListItem,\n ListItemText,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n qetaTranslationRef,\n UserLink,\n RelativeTimeWithTooltip,\n} from '@drodil/backstage-plugin-qeta-react';\n\nconst useStyles = makeStyles(theme => ({\n reviewList: {\n padding: 0,\n marginTop: theme.spacing(1),\n },\n reviewItem: {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n reviewMeta: {\n display: 'flex',\n alignItems: 'baseline',\n gap: theme.spacing(0.5),\n flexWrap: 'wrap',\n },\n reviewUserLink: {\n fontSize: '0.75rem',\n },\n reviewStatus: {\n fontWeight: 500,\n },\n reviewComment: {\n marginTop: theme.spacing(0.25),\n fontSize: '0.8rem',\n },\n}));\n\nexport const ReviewList = ({ reviews }: { reviews: PostReview[] }) => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (!reviews || reviews.length === 0) {\n return null;\n }\n\n return (\n <>\n <Typography variant=\"subtitle2\">\n {t('contentHealth.reviewHistory', {})}\n </Typography>\n <List className={classes.reviewList}>\n {reviews.map(review => (\n <ListItem key={review.id} className={classes.reviewItem} dense>\n <ListItemText\n primary={\n <div className={classes.reviewMeta}>\n <span className={classes.reviewUserLink}>\n <UserLink entityRef={review.reviewer} />\n </span>\n <Typography\n variant=\"caption\"\n className={classes.reviewStatus}\n color={review.status === 'valid' ? 'primary' : 'secondary'}\n >\n {review.status === 'valid'\n ? t('contentHealth.valid')\n : t('contentHealth.obsolete')}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n <RelativeTimeWithTooltip value={review.created} />\n </Typography>\n </div>\n }\n secondary={\n review.comment ? (\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.reviewComment}\n >\n {review.comment}\n </Typography>\n ) : null\n }\n />\n </ListItem>\n ))}\n </List>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAeA,MAAM,SAAA,GAAY,WAAW,
|
|
1
|
+
{"version":3,"file":"ReviewList.esm.js","sources":["../../../src/components/ContentHealthCard/ReviewList.tsx"],"sourcesContent":["import { PostReview } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Typography,\n makeStyles,\n List,\n ListItem,\n ListItemText,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n qetaTranslationRef,\n UserLink,\n RelativeTimeWithTooltip,\n} from '@drodil/backstage-plugin-qeta-react';\n\nconst useStyles = makeStyles(theme => ({\n reviewList: {\n padding: 0,\n marginTop: theme.spacing(1),\n },\n reviewItem: {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n reviewMeta: {\n display: 'flex',\n alignItems: 'baseline',\n gap: theme.spacing(0.5),\n flexWrap: 'wrap',\n },\n reviewUserLink: {\n fontSize: '0.75rem',\n },\n reviewStatus: {\n fontWeight: 500,\n },\n reviewComment: {\n marginTop: theme.spacing(0.25),\n fontSize: '0.8rem',\n },\n}));\n\nexport const ReviewList = ({ reviews }: { reviews: PostReview[] }) => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (!reviews || reviews.length === 0) {\n return null;\n }\n\n return (\n <>\n <Typography variant=\"subtitle2\">\n {t('contentHealth.reviewHistory', {})}\n </Typography>\n <List className={classes.reviewList}>\n {reviews.map(review => (\n <ListItem key={review.id} className={classes.reviewItem} dense>\n <ListItemText\n primary={\n <div className={classes.reviewMeta}>\n <span className={classes.reviewUserLink}>\n <UserLink entityRef={review.reviewer} />\n </span>\n <Typography\n variant=\"caption\"\n className={classes.reviewStatus}\n color={review.status === 'valid' ? 'primary' : 'secondary'}\n >\n {review.status === 'valid'\n ? t('contentHealth.valid')\n : t('contentHealth.obsolete')}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n <RelativeTimeWithTooltip value={review.created} />\n </Typography>\n </div>\n }\n secondary={\n review.comment ? (\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.reviewComment}\n >\n {review.comment}\n </Typography>\n ) : null\n }\n />\n </ListItem>\n ))}\n </List>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateLinkPage.esm.js","sources":["../../../src/components/CreateLinkPage/CreateLinkPage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CreateLinkPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('createLinkPage.title.existingLink');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('createLinkPage.title.entityLink', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('createLinkPage.title.newLink');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"link\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,iBAAiB,MAAM;AAClC,
|
|
1
|
+
{"version":3,"file":"CreateLinkPage.esm.js","sources":["../../../src/components/CreateLinkPage/CreateLinkPage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CreateLinkPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('createLinkPage.title.existingLink');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('createLinkPage.title.entityLink', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('createLinkPage.title.newLink');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"link\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA,KAAM,MAAA;AACtD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,KAAA,GAAQ,EAAE,mCAAmC,CAAA;AAAA,EAC/C,WAAW,MAAA,EAAQ;AAEjB,IAAA,MAAM,cAAA,GAAiB,sBAAsB,MAAM,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,iCAAA,EAAmC;AAAA,MAC3C,QAAQ,cAAA,CAAe;AAAA,KACxB,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,EAAE,8BAA8B,CAAA;AAAA,EAC1C;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAA,EAAc,CAAA;AAAA,oBAC7B,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,CAAA,EAAG,SAAA,EAAU,QAAA,EACpC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,8BAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA,EAAK;AAAA;AAAA,KACP,EACF,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPostsContainerCard.esm.js","sources":["../../../src/components/EntityCards/EntityPostsContainerCard.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n PostsContainer,\n PostsContainerProps,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { InfoCard } from '@backstage/core-components';\n\nexport const EntityPostsContainerCard = (props: PostsContainerProps) => {\n const { entity } = useEntity();\n\n return (\n <InfoCard>\n <PostsContainer {...props} entity={stringifyEntityRef(entity)} />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"EntityPostsContainerCard.esm.js","sources":["../../../src/components/EntityCards/EntityPostsContainerCard.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n PostsContainer,\n PostsContainerProps,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { InfoCard } from '@backstage/core-components';\n\nexport const EntityPostsContainerCard = (props: PostsContainerProps) => {\n const { entity } = useEntity();\n\n return (\n <InfoCard>\n <PostsContainer {...props} entity={stringifyEntityRef(entity)} />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAA+B;AACtE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAE7B,EAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,OAAO,MAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAA,EAAG,CAAA,EACjE,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPostsGridCard.esm.js","sources":["../../../src/components/EntityCards/EntityPostsGridCard.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n PostsContainer,\n PostsContainerProps,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { InfoCard } from '@backstage/core-components';\n\nexport const EntityPostsGridCard = (props: PostsContainerProps) => {\n const { entity } = useEntity();\n\n return (\n <InfoCard>\n <PostsContainer\n defaultView=\"grid\"\n {...props}\n entity={stringifyEntityRef(entity)}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"EntityPostsGridCard.esm.js","sources":["../../../src/components/EntityCards/EntityPostsGridCard.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n PostsContainer,\n PostsContainerProps,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { InfoCard } from '@backstage/core-components';\n\nexport const EntityPostsGridCard = (props: PostsContainerProps) => {\n const { entity } = useEntity();\n\n return (\n <InfoCard>\n <PostsContainer\n defaultView=\"grid\"\n {...props}\n entity={stringifyEntityRef(entity)}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAA+B;AACjE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAE7B,EAAA,2BACG,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAY,MAAA;AAAA,MACX,GAAG,KAAA;AAAA,MACJ,MAAA,EAAQ,mBAAmB,MAAM;AAAA;AAAA,GACnC,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n AskQuestionButton,\n CreateLinkButton,\n EntitiesContainer,\n EntityFollowButton,\n PostsContainer,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n ContentHeaderCard,\n ContentHeader,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n EntityRefLink,\n useEntityPresentation,\n catalogApiRef,\n} from '@backstage/plugin-catalog-react';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\n\nconst SingleEntityPage = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entity, setEntity] = useState<Entity | undefined>(undefined);\n const { Icon } = useEntityPresentation(entityRef);\n const catalogApi = useApi(catalogApiRef);\n\n useEffect(() => {\n catalogApi.getEntityByRef(entityRef).then(e => setEntity(e));\n }, [catalogApi, entityRef]);\n\n const {\n value: resp,\n loading,\n error,\n } = useQetaApi(api => api.getEntity(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || !resp) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <EntityRefLink\n entityRef={resp.entityRef}\n defaultKind=\"Component\"\n hideIcon\n />\n </div>\n );\n\n const description = `${entity?.kind} ${\n entity?.spec?.type ? `(${entity?.spec?.type})` : ''\n }`;\n\n return (\n <>\n <ContentHeader\n title={title}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n description={description}\n >\n <EntityFollowButton entityRef={resp.entityRef} />\n <AskQuestionButton entity={resp.entityRef} />\n <WriteArticleButton entity={resp.entityRef} />\n <CreateLinkButton entity={resp.entityRef} />\n </ContentHeader>\n {resp && (\n <ContentHeaderCard\n description={entity?.metadata?.description}\n imageIcon={\n Icon ? (\n <div style={{ fontSize: '80px', display: 'flex' }}>\n <Icon fontSize=\"inherit\" />\n </div>\n ) : (\n <CategoryOutlined style={{ fontSize: 80 }} />\n )\n }\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n )}\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n defaultView=\"list\"\n showTypeLabel\n />\n </>\n );\n};\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (entityRef) {\n return <SingleEntityPage entityRef={entityRef} />;\n }\n\n return (\n <>\n <ContentHeader\n title={t('entitiesPage.defaultTitle')}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <EntitiesContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AA4BA,MAAM,
|
|
1
|
+
{"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n AskQuestionButton,\n CreateLinkButton,\n EntitiesContainer,\n EntityFollowButton,\n PostsContainer,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n ContentHeaderCard,\n ContentHeader,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n EntityRefLink,\n useEntityPresentation,\n catalogApiRef,\n} from '@backstage/plugin-catalog-react';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\n\nconst SingleEntityPage = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entity, setEntity] = useState<Entity | undefined>(undefined);\n const { Icon } = useEntityPresentation(entityRef);\n const catalogApi = useApi(catalogApiRef);\n\n useEffect(() => {\n catalogApi.getEntityByRef(entityRef).then(e => setEntity(e));\n }, [catalogApi, entityRef]);\n\n const {\n value: resp,\n loading,\n error,\n } = useQetaApi(api => api.getEntity(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || !resp) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <EntityRefLink\n entityRef={resp.entityRef}\n defaultKind=\"Component\"\n hideIcon\n />\n </div>\n );\n\n const description = `${entity?.kind} ${\n entity?.spec?.type ? `(${entity?.spec?.type})` : ''\n }`;\n\n return (\n <>\n <ContentHeader\n title={title}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n description={description}\n >\n <EntityFollowButton entityRef={resp.entityRef} />\n <AskQuestionButton entity={resp.entityRef} />\n <WriteArticleButton entity={resp.entityRef} />\n <CreateLinkButton entity={resp.entityRef} />\n </ContentHeader>\n {resp && (\n <ContentHeaderCard\n description={entity?.metadata?.description}\n imageIcon={\n Icon ? (\n <div style={{ fontSize: '80px', display: 'flex' }}>\n <Icon fontSize=\"inherit\" />\n </div>\n ) : (\n <CategoryOutlined style={{ fontSize: 80 }} />\n )\n }\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n )}\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n defaultView=\"list\"\n showTypeLabel\n />\n </>\n );\n};\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (entityRef) {\n return <SingleEntityPage entityRef={entityRef} />;\n }\n\n return (\n <>\n <ContentHeader\n title={t('entitiesPage.defaultTitle')}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <EntitiesContainer />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPostsContent.esm.js","sources":["../../../src/components/EntityPostsContent/EntityPostsContent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n PostsContainer,\n PostsContainerProps,\n QetaProvider,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Content } from '@backstage/core-components';\nimport { isUserEntity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';\nimport { Container } from '@material-ui/core';\nimport { PluggableList } from 'unified';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Skeleton } from '@material-ui/lab';\n\nexport type EntityPostsContentProps = PostsContainerProps & {\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n /**\n * Relation names of the current entity to show posts too.\n * For example for a system, you can also show all posts from components\n * related to the system by passing `partOf` relation.\n */\n relations?: string[];\n};\n\nexport const EntityPostsContent = (props: EntityPostsContentProps) => {\n const [view, setView] = useState<ViewType>(props.view ?? 'list');\n const { entity } = useEntity();\n const catalog = useApi(catalogApiRef);\n const [additionalProps, setAdditionalProps] = useState<PostsContainerProps>(\n () => {\n if (isUserEntity(entity)) {\n return { author: stringifyEntityRef(entity) };\n }\n return { entity: props.entity ?? stringifyEntityRef(entity) };\n },\n );\n\n const [loading, setLoading] = useState<boolean>(true);\n useEffect(() => {\n if (!props.relations?.length) {\n setLoading(false);\n return;\n }\n const filters = props.relations.map(relation => {\n return { [`relations.${relation}`]: stringifyEntityRef(entity) };\n });\n catalog\n .getEntities({\n filter: filters,\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(entities => {\n setAdditionalProps(prev => ({\n ...prev,\n entities: entities.items.map(stringifyEntityRef),\n entitiesRelation: 'or',\n }));\n setLoading(false);\n })\n .catch(() => {\n setLoading(false);\n });\n }, [catalog, entity, props.relations]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n return (\n <QetaProvider\n remarkPlugins={props.remarkPlugins}\n rehypePlugins={props.rehypePlugins}\n >\n <Content>\n <Container>\n <PostsContainer\n {...props}\n {...additionalProps}\n view={view}\n onViewChange={setView}\n />\n </Container>\n </Content>\n </QetaProvider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"EntityPostsContent.esm.js","sources":["../../../src/components/EntityPostsContent/EntityPostsContent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n PostsContainer,\n PostsContainerProps,\n QetaProvider,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Content } from '@backstage/core-components';\nimport { isUserEntity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';\nimport { Container } from '@material-ui/core';\nimport { PluggableList } from 'unified';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Skeleton } from '@material-ui/lab';\n\nexport type EntityPostsContentProps = PostsContainerProps & {\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n /**\n * Relation names of the current entity to show posts too.\n * For example for a system, you can also show all posts from components\n * related to the system by passing `partOf` relation.\n */\n relations?: string[];\n};\n\nexport const EntityPostsContent = (props: EntityPostsContentProps) => {\n const [view, setView] = useState<ViewType>(props.view ?? 'list');\n const { entity } = useEntity();\n const catalog = useApi(catalogApiRef);\n const [additionalProps, setAdditionalProps] = useState<PostsContainerProps>(\n () => {\n if (isUserEntity(entity)) {\n return { author: stringifyEntityRef(entity) };\n }\n return { entity: props.entity ?? stringifyEntityRef(entity) };\n },\n );\n\n const [loading, setLoading] = useState<boolean>(true);\n useEffect(() => {\n if (!props.relations?.length) {\n setLoading(false);\n return;\n }\n const filters = props.relations.map(relation => {\n return { [`relations.${relation}`]: stringifyEntityRef(entity) };\n });\n catalog\n .getEntities({\n filter: filters,\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(entities => {\n setAdditionalProps(prev => ({\n ...prev,\n entities: entities.items.map(stringifyEntityRef),\n entitiesRelation: 'or',\n }));\n setLoading(false);\n })\n .catch(() => {\n setLoading(false);\n });\n }, [catalog, entity, props.relations]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n return (\n <QetaProvider\n remarkPlugins={props.remarkPlugins}\n rehypePlugins={props.rehypePlugins}\n >\n <Content>\n <Container>\n <PostsContainer\n {...props}\n {...additionalProps}\n view={view}\n onViewChange={setView}\n />\n </Container>\n </Content>\n </QetaProvider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA0BO,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAmC;AACpE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAI,QAAA,CAAmB,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC/D,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,OAAA,GAAU,OAAO,aAAa,CAAA;AACpC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C,MAAM;AACJ,MAAA,IAAI,YAAA,CAAa,MAAM,CAAA,EAAG;AACxB,QAAA,OAAO,EAAE,MAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAA,EAAE;AAAA,MAC9C;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,kBAAA,CAAmB,MAAM,CAAA,EAAE;AAAA,IAC9D;AAAA,GACF;AAEA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,IAAI,CAAA;AACpD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,EAAW,MAAA,EAAQ;AAC5B,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAY;AAC9C,MAAA,OAAO,EAAE,CAAC,CAAA,UAAA,EAAa,QAAQ,EAAE,GAAG,kBAAA,CAAmB,MAAM,CAAA,EAAE;AAAA,IACjE,CAAC,CAAA;AACD,IAAA,OAAA,CACG,WAAA,CAAY;AAAA,MACX,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,oBAAoB;AAAA,KACvD,CAAA,CACA,IAAA,CAAK,CAAA,QAAA,KAAY;AAChB,MAAA,kBAAA,CAAmB,CAAA,IAAA,MAAS;AAAA,QAC1B,GAAG,IAAA;AAAA,QACH,QAAA,EAAU,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,kBAAkB,CAAA;AAAA,QAC/C,gBAAA,EAAkB;AAAA,OACpB,CAAE,CAAA;AACF,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,GAAG,CAAC,OAAA,EAAS,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAErC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAQ,GAAA,EAAK,CAAA;AAAA,EAC/C;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,eAAe,KAAA,CAAM,aAAA;AAAA,MAErB,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,GAAG,eAAA;AAAA,UACJ,IAAA;AAAA,UACA,YAAA,EAAc;AAAA;AAAA,SAElB,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const FavoritePage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('favoritePage.title')}\n titleIcon={<StarBorder fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <PostsContainer\n favorite\n showNoQuestionsBtn={false}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"favorites\"\n />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAWO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,EAAE,CAAA,
|
|
1
|
+
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const FavoritePage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('favoritePage.title')}\n titleIcon={<StarBorder fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <PostsContainer\n favorite\n showNoQuestionsBtn={false}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"favorites\"\n />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAWO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,oBAAoB,CAAA;AAAA,QAC7B,SAAA,kBAAW,GAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAExC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BAClB,kBAAA,EAAA,EAAmB,CAAA;AAAA,8BACnB,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAAA,KACpB;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,kBAAA,EAAoB,KAAA;AAAA,QACpB,aAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAY,MAAA;AAAA,QACZ,MAAA,EAAO;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { qetaTranslationRef, ContentHeader, AskQuestionButton, WriteArticleButton, CreateLinkButton, SuggestionsCard, FollowedItemsCard, ImpactCard, CommunityActivityCard, Timeline } from '@drodil/backstage-plugin-qeta-react';
|
|
3
|
-
import {
|
|
3
|
+
import { Box, makeStyles } from '@material-ui/core';
|
|
4
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
5
|
import HomeOutlined from '@material-ui/icons/HomeOutlined';
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n ImpactCard,\n qetaTranslationRef,\n SuggestionsCard,\n WriteArticleButton,\n Timeline,\n CommunityActivityCard,\n FollowedItemsCard,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Box, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\n\nconst useStyles = makeStyles(theme => ({\n flexRow: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n width: '100%',\n marginBottom: theme.spacing(2),\n alignItems: 'stretch',\n },\n suggestionColumn: {\n flex: '3 1 350px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n followedColumn: {\n flex: '1 1 250px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n equalColumn: {\n flex: '1 1 395px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n timelineWrapper: {\n width: '100%',\n marginTop: theme.spacing(2),\n },\n}));\n\nexport const HomePage = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('homePage.title')}\n titleIcon={<HomeOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n\n <Box className={classes.flexRow}>\n <Box className={classes.suggestionColumn}>\n <SuggestionsCard />\n </Box>\n <Box className={classes.followedColumn}>\n <FollowedItemsCard />\n </Box>\n </Box>\n\n <Box className={classes.flexRow}>\n <Box className={classes.equalColumn}>\n <ImpactCard />\n </Box>\n <Box className={classes.equalColumn}>\n <CommunityActivityCard />\n </Box>\n </Box>\n\n <Box className={classes.timelineWrapper}>\n <Timeline />\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AAgBA,MAAM,SAAA,GAAY,WAAW,
|
|
1
|
+
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n ImpactCard,\n qetaTranslationRef,\n SuggestionsCard,\n WriteArticleButton,\n Timeline,\n CommunityActivityCard,\n FollowedItemsCard,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Box, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\n\nconst useStyles = makeStyles(theme => ({\n flexRow: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n width: '100%',\n marginBottom: theme.spacing(2),\n alignItems: 'stretch',\n },\n suggestionColumn: {\n flex: '3 1 350px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n followedColumn: {\n flex: '1 1 250px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n equalColumn: {\n flex: '1 1 395px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n timelineWrapper: {\n width: '100%',\n marginTop: theme.spacing(2),\n },\n}));\n\nexport const HomePage = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('homePage.title')}\n titleIcon={<HomeOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n\n <Box className={classes.flexRow}>\n <Box className={classes.suggestionColumn}>\n <SuggestionsCard />\n </Box>\n <Box className={classes.followedColumn}>\n <FollowedItemsCard />\n </Box>\n </Box>\n\n <Box className={classes.flexRow}>\n <Box className={classes.equalColumn}>\n <ImpactCard />\n </Box>\n <Box className={classes.equalColumn}>\n <CommunityActivityCard />\n </Box>\n </Box>\n\n <Box className={classes.timelineWrapper}>\n <Timeline />\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeTimeline.esm.js","sources":["../../../src/components/HomeTimeline/HomeTimeline.tsx"],"sourcesContent":["import { Timeline } from '@drodil/backstage-plugin-qeta-react';\n\nexport const HomeTimeline = () => {\n return <Timeline />;\n};\n"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,MAAM;AAChC,EAAA,2BAAQ,
|
|
1
|
+
{"version":3,"file":"HomeTimeline.esm.js","sources":["../../../src/components/HomeTimeline/HomeTimeline.tsx"],"sourcesContent":["import { Timeline } from '@drodil/backstage-plugin-qeta-react';\n\nexport const HomeTimeline = () => {\n return <Timeline />;\n};\n"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,MAAM;AAChC,EAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AACnB;;;;"}
|