@backstage-community/plugin-entity-feedback 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @backstage-community/plugin-entity-feedback
2
2
 
3
+ ## 0.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3e1695b: Backstage version bump to v1.44.0
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [3e1695b]
12
+ - @backstage-community/plugin-entity-feedback-common@0.10.0
13
+
14
+ ## 0.11.1
15
+
16
+ ### Patch Changes
17
+
18
+ - d5b74e9: Migrate the `entity-feedback` plugin to the new frontend system.
19
+
3
20
  ## 0.11.0
4
21
 
5
22
  ### Minor Changes
package/README.md CHANGED
@@ -139,6 +139,99 @@ const groupPage = (
139
139
 
140
140
  Note: For a full example of this you can look at [this EntityPage](../../packages/app/src/components/catalog/EntityPage.tsx).
141
141
 
142
+ ## New Frontend System
143
+
144
+ Follow these steps to detect and configure the Entity Feedback plugin if you'd like to use it in an application that supports the new Backstage frontend system.
145
+
146
+ ### Package detection
147
+
148
+ Once you install the `@backstage-community/plugin-entity-feedback` package using your preferred package manager, you have to choose how the package should be detected by the app. The package can be automatically discovered when the feature discovery config is set, or it can be manually enabled via code (for more granular package customization cases, such as extension overrides).
149
+
150
+ <table>
151
+ <tr>
152
+ <td>Via config</td>
153
+ <td>Via code</td>
154
+ </tr>
155
+ <tr>
156
+ <td>
157
+ <pre lang="yaml">
158
+ <code>
159
+ # app-config.yaml
160
+ app:
161
+ # Enable package discovery for all plugins
162
+ packages: 'all'
163
+ ---
164
+ app:
165
+ # Enable package discovery only for Entity Feedback
166
+ packages:
167
+ include:
168
+ - '@backstage-community/plugin-entity-feedback'
169
+ </code>
170
+ </pre>
171
+ </td>
172
+ <td>
173
+ <pre lang="javascript">
174
+ <code>
175
+ // packages/app/src/App.tsx
176
+ import { createApp } from '@backstage/frontend-defaults';
177
+ import entityFeedbackPlugin from '@backstage-community/plugin-entity-feedback/alpha';
178
+ //...
179
+ const app = createApp({
180
+ // ...
181
+ features: [
182
+ //...
183
+ entityFeedbackPlugin,
184
+ ],
185
+ });
186
+
187
+ //...
188
+ </code>
189
+
190
+ </pre>
191
+ </td>
192
+
193
+ </tr>
194
+ </table>
195
+
196
+ ## Extensions config
197
+
198
+ Currently, the plugin installs 4 extensions: 1 api, 2 entity cards (buttons and table ratings) and 1 entity page content (also known as entity page tab), see below examples of how to configure the available extensions.
199
+
200
+ ```yml
201
+ # app-config.yaml
202
+ app:
203
+ extensions:
204
+ # Example disabling the "buttons" rating entity card
205
+ - 'entity-card:entity-feedback/ratings-buttons': false
206
+ # Example customizing the "buttons" rating entity card
207
+ - 'entity-card:entity-feedback/ratings-buttons':
208
+ config:
209
+ variant: 'starred' # (Optional) defaults to "like-dislike"
210
+ title: 'Rating Buttons' # (Optional) defaults to "Rate this entity"
211
+ requireResponse: false # (Optional) defaults to "true"
212
+ dialogTitle: 'What could be better?' # (Optional) defaults to "Tell us what could be better"
213
+ dialogResponses: # (Optional) defaults to "Incorrect info, Missing info and Other"
214
+ - id: 'inaccurate'
215
+ label: 'Inaccurate'
216
+ - id: 'other'
217
+ label: 'Other'
218
+ # Example disabling the "table" rating entity card
219
+ - 'entity-card:entity-feedback/ratings-table': false
220
+ # Example customizing the "table" rating entity card
221
+ - 'entity-card:entity-feedback/ratings-table':
222
+ config:
223
+ variant: 'starred' # (Optional) defaults to "like-dislike"
224
+ title: 'Rating Table' # (Optional) defaults to "Entity Ratings"
225
+ allEntities: true # (Optional) defaults to "false"
226
+ # Example disabling the entity feedback content
227
+ - 'entity-content:entity-feedback': false
228
+ # Example customizing the entity feedback content
229
+ - 'entity-content:entity-feedback':
230
+ config:
231
+ path: '/feedbacks'
232
+ title: 'Feedbacks'
233
+ ```
234
+
142
235
  ## Local Development
143
236
 
144
237
  To start the mocked example you need to run the front and backend.
@@ -0,0 +1,17 @@
1
+ import { ApiBlueprint, discoveryApiRef, fetchApiRef } from '@backstage/frontend-plugin-api';
2
+ import { EntityFeedbackClient } from '../api/EntityFeedbackClient.esm.js';
3
+ import { entityFeedbackApiRef } from '../api/EntityFeedbackApi.esm.js';
4
+
5
+ const entityFeedbackApi = ApiBlueprint.make({
6
+ params: (definedParams) => definedParams({
7
+ api: entityFeedbackApiRef,
8
+ deps: {
9
+ discoveryApi: discoveryApiRef,
10
+ fetchApi: fetchApiRef
11
+ },
12
+ factory: ({ discoveryApi, fetchApi }) => new EntityFeedbackClient({ discoveryApi, fetchApi })
13
+ })
14
+ });
15
+
16
+ export { entityFeedbackApi };
17
+ //# sourceMappingURL=apis.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { EntityFeedbackClient } from '../api/EntityFeedbackClient';\nimport { entityFeedbackApiRef } from '../api/EntityFeedbackApi';\n\n/**\n * @alpha\n */\nexport const entityFeedbackApi = ApiBlueprint.make({\n params: definedParams =>\n definedParams({\n api: entityFeedbackApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new EntityFeedbackClient({ discoveryApi, fetchApi }),\n }),\n});\n"],"names":[],"mappings":";;;;AA2Ba,MAAA,iBAAA,GAAoB,aAAa,IAAK,CAAA;AAAA,EACjD,MAAA,EAAQ,mBACN,aAAc,CAAA;AAAA,IACZ,GAAK,EAAA,oBAAA;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,YAAc,EAAA,eAAA;AAAA,MACd,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,oBAAqB,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU;AAAA,GACtD;AACL,CAAC;;;;"}
@@ -0,0 +1,83 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { InfoCard } from '@backstage/core-components';
3
+ import { compatWrapper } from '@backstage/core-compat-api';
4
+ import { stringifyEntityRef } from '@backstage/catalog-model';
5
+ import { useAsyncEntity } from '@backstage/plugin-catalog-react';
6
+ import { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';
7
+ import { entityFeedbackAllPredicate, entityFeedbackOwnerPredicate } from './entityPredicates.esm.js';
8
+
9
+ const entityRatingsButtonsCard = EntityCardBlueprint.makeWithOverrides({
10
+ name: "ratings-buttons",
11
+ config: {
12
+ schema: {
13
+ title: (z) => z.string().default("Rate this entity"),
14
+ variant: (z) => z.enum(["like-dislike", "starred"]).default("like-dislike"),
15
+ requestResponse: (z) => z.boolean().optional(),
16
+ dialogTitle: (z) => z.string().optional(),
17
+ dialogResponses: (z) => z.array(
18
+ z.object({
19
+ id: z.string(),
20
+ label: z.string()
21
+ })
22
+ ).optional()
23
+ }
24
+ },
25
+ factory(originalFactory, { config }) {
26
+ const { variant, title, requestResponse, dialogTitle, dialogResponses } = config;
27
+ return originalFactory({
28
+ filter: entityFeedbackAllPredicate,
29
+ async loader() {
30
+ const { LikeDislikeButtons } = await import('../components/LikeDislikeButtons/index.esm.js');
31
+ const { StarredRatingButtons } = await import('../components/StarredRatingButtons/index.esm.js');
32
+ const Buttons = variant === "like-dislike" ? LikeDislikeButtons : StarredRatingButtons;
33
+ return compatWrapper(
34
+ /* @__PURE__ */ jsx(InfoCard, { title, children: /* @__PURE__ */ jsx(
35
+ Buttons,
36
+ {
37
+ requestResponse,
38
+ feedbackDialogTitle: dialogTitle,
39
+ feedbackDialogResponses: dialogResponses
40
+ }
41
+ ) })
42
+ );
43
+ }
44
+ });
45
+ }
46
+ });
47
+ const entityRatingsTableCard = EntityCardBlueprint.makeWithOverrides({
48
+ name: "ratings-table",
49
+ config: {
50
+ schema: {
51
+ title: (z) => z.string().optional(),
52
+ allEntities: (z) => z.boolean().optional(),
53
+ variant: (z) => z.enum(["like-dislike", "starred"]).default("like-dislike")
54
+ }
55
+ },
56
+ factory(originalFactory, { config }) {
57
+ const { variant, title, allEntities } = config;
58
+ return originalFactory({
59
+ filter: entityFeedbackOwnerPredicate,
60
+ async loader() {
61
+ const { LikeDislikeRatingsTable } = await import('../components/LikeDislikeRatingsTable/index.esm.js');
62
+ const { StarredRatingsTable } = await import('../components/StarredRatingsTable/index.esm.js');
63
+ const Table = variant === "like-dislike" ? LikeDislikeRatingsTable : StarredRatingsTable;
64
+ function Component() {
65
+ const { entity } = useAsyncEntity();
66
+ const ownerRef = entity ? stringifyEntityRef(entity) : "";
67
+ return /* @__PURE__ */ jsx(
68
+ Table,
69
+ {
70
+ title,
71
+ allEntities,
72
+ ownerRef
73
+ }
74
+ );
75
+ }
76
+ return compatWrapper(/* @__PURE__ */ jsx(Component, {}));
77
+ }
78
+ });
79
+ }
80
+ });
81
+
82
+ export { entityRatingsButtonsCard, entityRatingsTableCard };
83
+ //# sourceMappingURL=entityCards.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InfoCard } from '@backstage/core-components';\nimport { compatWrapper } from '@backstage/core-compat-api';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { useAsyncEntity } from '@backstage/plugin-catalog-react';\nimport { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport {\n entityFeedbackAllPredicate,\n entityFeedbackOwnerPredicate,\n} from './entityPredicates';\n\n/**\n * @alpha\n */\nexport const entityRatingsButtonsCard = EntityCardBlueprint.makeWithOverrides({\n name: 'ratings-buttons',\n config: {\n schema: {\n title: z => z.string().default('Rate this entity'),\n variant: z => z.enum(['like-dislike', 'starred']).default('like-dislike'),\n requestResponse: z => z.boolean().optional(),\n dialogTitle: z => z.string().optional(),\n dialogResponses: z =>\n z\n .array(\n z.object({\n id: z.string(),\n label: z.string(),\n }),\n )\n .optional(),\n },\n },\n factory(originalFactory, { config }) {\n const { variant, title, requestResponse, dialogTitle, dialogResponses } =\n config;\n return originalFactory({\n filter: entityFeedbackAllPredicate,\n async loader() {\n const { LikeDislikeButtons } = await import(\n '../components/LikeDislikeButtons'\n );\n const { StarredRatingButtons } = await import(\n '../components/StarredRatingButtons'\n );\n const Buttons =\n variant === 'like-dislike'\n ? LikeDislikeButtons\n : StarredRatingButtons;\n return compatWrapper(\n <InfoCard title={title}>\n <Buttons\n requestResponse={requestResponse}\n feedbackDialogTitle={dialogTitle}\n feedbackDialogResponses={dialogResponses}\n />\n </InfoCard>,\n );\n },\n });\n },\n});\n\n/**\n * @alpha\n */\nexport const entityRatingsTableCard = EntityCardBlueprint.makeWithOverrides({\n name: 'ratings-table',\n config: {\n schema: {\n title: z => z.string().optional(),\n allEntities: z => z.boolean().optional(),\n variant: z => z.enum(['like-dislike', 'starred']).default('like-dislike'),\n },\n },\n factory(originalFactory, { config }) {\n const { variant, title, allEntities } = config;\n return originalFactory({\n filter: entityFeedbackOwnerPredicate,\n async loader() {\n const { LikeDislikeRatingsTable } = await import(\n '../components/LikeDislikeRatingsTable'\n );\n const { StarredRatingsTable } = await import(\n '../components/StarredRatingsTable'\n );\n const Table =\n variant === 'like-dislike'\n ? LikeDislikeRatingsTable\n : StarredRatingsTable;\n function Component() {\n const { entity } = useAsyncEntity();\n const ownerRef = entity ? stringifyEntityRef(entity) : '';\n return (\n <Table\n title={title}\n allEntities={allEntities}\n ownerRef={ownerRef}\n />\n );\n }\n return compatWrapper(<Component />);\n },\n });\n },\n});\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { stringifyEntityRef } from '@backstage/catalog-model';
3
+ import { useAsyncEntity } from '@backstage/plugin-catalog-react';
4
+ import { convertLegacyRouteRef, compatWrapper } from '@backstage/core-compat-api';
5
+ import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
6
+ import { rootRouteRef } from '../routes.esm.js';
7
+ import { entityFeedbackAllPredicate } from './entityPredicates.esm.js';
8
+
9
+ const entityFeedbackEntityContent = EntityContentBlueprint.make({
10
+ params: {
11
+ path: "/feedback",
12
+ title: "Feedback",
13
+ routeRef: convertLegacyRouteRef(rootRouteRef),
14
+ filter: entityFeedbackAllPredicate,
15
+ async loader() {
16
+ const { FeedbackResponseTable } = await import('../components/FeedbackResponseTable/index.esm.js');
17
+ function Component() {
18
+ const { entity } = useAsyncEntity();
19
+ return /* @__PURE__ */ jsx(
20
+ FeedbackResponseTable,
21
+ {
22
+ entityRef: entity ? stringifyEntityRef(entity) : ""
23
+ }
24
+ );
25
+ }
26
+ return compatWrapper(/* @__PURE__ */ jsx(Component, {}));
27
+ }
28
+ }
29
+ });
30
+
31
+ export { entityFeedbackEntityContent };
32
+ //# sourceMappingURL=entityContents.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityContents.esm.js","sources":["../../src/alpha/entityContents.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { useAsyncEntity } from '@backstage/plugin-catalog-react';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { rootRouteRef } from '../routes';\nimport { entityFeedbackAllPredicate } from './entityPredicates';\n\n/**\n * @alpha\n */\nexport const entityFeedbackEntityContent = EntityContentBlueprint.make({\n params: {\n path: '/feedback',\n title: 'Feedback',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n filter: entityFeedbackAllPredicate,\n async loader() {\n const { FeedbackResponseTable } = await import(\n '../components/FeedbackResponseTable'\n );\n function Component() {\n const { entity } = useAsyncEntity();\n return (\n <FeedbackResponseTable\n entityRef={entity ? stringifyEntityRef(entity) : ''}\n />\n );\n }\n return compatWrapper(<Component />);\n },\n },\n});\n"],"names":[],"mappings":";;;;;;;;AA6Ba,MAAA,2BAAA,GAA8B,uBAAuB,IAAK,CAAA;AAAA,EACrE,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA,UAAA;AAAA,IACP,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,MAAQ,EAAA,0BAAA;AAAA,IACR,MAAM,MAAS,GAAA;AACb,MAAA,MAAM,EAAE,qBAAA,EAA0B,GAAA,MAAM,OACtC,kDACF,CAAA;AACA,MAAA,SAAS,SAAY,GAAA;AACnB,QAAM,MAAA,EAAE,MAAO,EAAA,GAAI,cAAe,EAAA;AAClC,QACE,uBAAA,GAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAA,MAAA,GAAS,kBAAmB,CAAA,MAAM,CAAI,GAAA;AAAA;AAAA,SACnD;AAAA;AAGJ,MAAO,OAAA,aAAA,iBAAe,GAAA,CAAA,SAAA,EAAA,EAAU,CAAE,CAAA;AAAA;AACpC;AAEJ,CAAC;;;;"}
@@ -0,0 +1,32 @@
1
+ const entityFeedbackAllPredicate = {
2
+ $all: [
3
+ {
4
+ $not: {
5
+ kind: "location"
6
+ }
7
+ },
8
+ {
9
+ $not: {
10
+ kind: "user"
11
+ }
12
+ },
13
+ {
14
+ $not: {
15
+ kind: "group"
16
+ }
17
+ }
18
+ ]
19
+ };
20
+ const entityFeedbackOwnerPredicate = {
21
+ $any: [
22
+ {
23
+ kind: "user"
24
+ },
25
+ {
26
+ kind: "group"
27
+ }
28
+ ]
29
+ };
30
+
31
+ export { entityFeedbackAllPredicate, entityFeedbackOwnerPredicate };
32
+ //# sourceMappingURL=entityPredicates.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityPredicates.esm.js","sources":["../../src/alpha/entityPredicates.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityPredicate } from '@backstage/plugin-catalog-react/alpha';\n\n/**\n * @alpha\n */\nexport const entityFeedbackAllPredicate: EntityPredicate = {\n $all: [\n {\n $not: {\n kind: 'location',\n },\n },\n {\n $not: {\n kind: 'user',\n },\n },\n {\n $not: {\n kind: 'group',\n },\n },\n ],\n};\n\nexport const entityFeedbackOwnerPredicate: EntityPredicate = {\n $any: [\n {\n kind: 'user',\n },\n {\n kind: 'group',\n },\n ],\n};\n"],"names":[],"mappings":"AAqBO,MAAM,0BAA8C,GAAA;AAAA,EACzD,IAAM,EAAA;AAAA,IACJ;AAAA,MACE,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA;AAAA;AACR,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA;AAAA;AACR,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA;AAAA;AACR;AACF;AAEJ;AAEO,MAAM,4BAAgD,GAAA;AAAA,EAC3D,IAAM,EAAA;AAAA,IACJ;AAAA,MACE,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAM,EAAA;AAAA;AACR;AAEJ;;;;"}
@@ -0,0 +1,23 @@
1
+ import { convertLegacyRouteRefs } from '@backstage/core-compat-api';
2
+ import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
+ import { entityFeedbackApi } from './apis.esm.js';
4
+ import { entityRatingsButtonsCard, entityRatingsTableCard } from './entityCards.esm.js';
5
+ import { entityFeedbackEntityContent } from './entityContents.esm.js';
6
+ import { rootRouteRef } from '../routes.esm.js';
7
+
8
+ const entityFeedbackPlugin = createFrontendPlugin({
9
+ pluginId: "entity-feedback",
10
+ info: { packageJson: () => import('../package.json.esm.js') },
11
+ extensions: [
12
+ entityFeedbackApi,
13
+ entityRatingsButtonsCard,
14
+ entityRatingsTableCard,
15
+ entityFeedbackEntityContent
16
+ ],
17
+ routes: convertLegacyRouteRefs({
18
+ root: rootRouteRef
19
+ })
20
+ });
21
+
22
+ export { entityFeedbackPlugin };
23
+ //# sourceMappingURL=plugin.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.esm.js","sources":["../../src/alpha/plugin.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { createFrontendPlugin } from '@backstage/frontend-plugin-api';\nimport { entityFeedbackApi } from './apis';\nimport {\n entityRatingsButtonsCard,\n entityRatingsTableCard,\n} from './entityCards';\nimport { entityFeedbackEntityContent } from './entityContents';\nimport { rootRouteRef } from '../routes';\n\n/**\n * @alpha\n */\nexport const entityFeedbackPlugin = createFrontendPlugin({\n pluginId: 'entity-feedback',\n info: { packageJson: () => import('../../package.json') },\n extensions: [\n entityFeedbackApi,\n entityRatingsButtonsCard,\n entityRatingsTableCard,\n entityFeedbackEntityContent,\n ],\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n }),\n});\n"],"names":[],"mappings":";;;;;;;AA6BO,MAAM,uBAAuB,oBAAqB,CAAA;AAAA,EACvD,QAAU,EAAA,iBAAA;AAAA,EACV,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,wBAAoB,CAAE,EAAA;AAAA,EACxD,UAAY,EAAA;AAAA,IACV,iBAAA;AAAA,IACA,wBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,IAAM,EAAA;AAAA,GACP;AACH,CAAC;;;;"}
@@ -0,0 +1,154 @@
1
+ /// <reference types="react" />
2
+ import * as _backstage_catalog_model from '@backstage/catalog-model';
3
+ import * as react from 'react';
4
+ import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
5
+ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
6
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
7
+
8
+ /**
9
+ * @alpha
10
+ */
11
+ declare const entityFeedbackPlugin: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
12
+ root: _backstage_frontend_plugin_api.RouteRef<undefined>;
13
+ }, {}, {
14
+ "api:entity-feedback": _backstage_frontend_plugin_api.ExtensionDefinition<{
15
+ kind: "api";
16
+ name: undefined;
17
+ config: {};
18
+ configInput: {};
19
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
20
+ inputs: {};
21
+ params: <TApi, TImpl extends TApi, TDeps extends {
22
+ [x: string]: unknown;
23
+ }>(params: _backstage_core_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_core_plugin_api.AnyApiFactory>;
24
+ }>;
25
+ "entity-card:entity-feedback/ratings-buttons": _backstage_frontend_plugin_api.ExtensionDefinition<{
26
+ config: {
27
+ title: string;
28
+ variant: "starred" | "like-dislike";
29
+ requestResponse: boolean | undefined;
30
+ dialogTitle: string | undefined;
31
+ dialogResponses: {
32
+ id: string;
33
+ label: string;
34
+ }[] | undefined;
35
+ } & {
36
+ filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
37
+ type: "content" | "summary" | "info" | undefined;
38
+ };
39
+ configInput: {
40
+ title?: string | undefined;
41
+ variant?: "starred" | "like-dislike" | undefined;
42
+ requestResponse?: boolean | undefined;
43
+ dialogTitle?: string | undefined;
44
+ dialogResponses?: {
45
+ id: string;
46
+ label: string;
47
+ }[] | undefined;
48
+ } & {
49
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
50
+ type?: "content" | "summary" | "info" | undefined;
51
+ };
52
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
53
+ optional: true;
54
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
55
+ optional: true;
56
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
57
+ optional: true;
58
+ }>;
59
+ inputs: {
60
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ExtensionDataRef<unknown, string, {
61
+ optional?: true | undefined;
62
+ }>, {
63
+ optional: boolean;
64
+ singleton: boolean;
65
+ }>;
66
+ };
67
+ kind: "entity-card";
68
+ name: "ratings-buttons";
69
+ params: {
70
+ loader: () => Promise<JSX.Element>;
71
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean) | undefined;
72
+ type?: _backstage_plugin_catalog_react_alpha.EntityCardType | undefined;
73
+ };
74
+ }>;
75
+ "entity-card:entity-feedback/ratings-table": _backstage_frontend_plugin_api.ExtensionDefinition<{
76
+ config: {
77
+ title: string | undefined;
78
+ allEntities: boolean | undefined;
79
+ variant: "starred" | "like-dislike";
80
+ } & {
81
+ filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
82
+ type: "content" | "summary" | "info" | undefined;
83
+ };
84
+ configInput: {
85
+ title?: string | undefined;
86
+ allEntities?: boolean | undefined;
87
+ variant?: "starred" | "like-dislike" | undefined;
88
+ } & {
89
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
90
+ type?: "content" | "summary" | "info" | undefined;
91
+ };
92
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
93
+ optional: true;
94
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
95
+ optional: true;
96
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
97
+ optional: true;
98
+ }>;
99
+ inputs: {
100
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ExtensionDataRef<unknown, string, {
101
+ optional?: true | undefined;
102
+ }>, {
103
+ optional: boolean;
104
+ singleton: boolean;
105
+ }>;
106
+ };
107
+ kind: "entity-card";
108
+ name: "ratings-table";
109
+ params: {
110
+ loader: () => Promise<JSX.Element>;
111
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean) | undefined;
112
+ type?: _backstage_plugin_catalog_react_alpha.EntityCardType | undefined;
113
+ };
114
+ }>;
115
+ "entity-content:entity-feedback": _backstage_frontend_plugin_api.ExtensionDefinition<{
116
+ kind: "entity-content";
117
+ name: undefined;
118
+ config: {
119
+ path: string | undefined;
120
+ title: string | undefined;
121
+ filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
122
+ group: string | false | undefined;
123
+ };
124
+ configInput: {
125
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
126
+ title?: string | undefined;
127
+ path?: string | undefined;
128
+ group?: string | false | undefined;
129
+ };
130
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
131
+ optional: true;
132
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
133
+ optional: true;
134
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
135
+ optional: true;
136
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
137
+ optional: true;
138
+ }>;
139
+ inputs: {};
140
+ params: {
141
+ defaultPath?: [Error: "Use the 'path' param instead"] | undefined;
142
+ path: string;
143
+ defaultTitle?: [Error: "Use the 'title' param instead"] | undefined;
144
+ title: string;
145
+ defaultGroup?: [Error: "Use the 'group' param instead"] | undefined;
146
+ group?: (string & {}) | "development" | "deployment" | "overview" | "documentation" | "operation" | "observability" | undefined;
147
+ loader: () => Promise<JSX.Element>;
148
+ routeRef?: _backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams> | undefined;
149
+ filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean) | undefined;
150
+ };
151
+ }>;
152
+ }>;
153
+
154
+ export { entityFeedbackPlugin as default };
@@ -0,0 +1,2 @@
1
+ export { entityFeedbackPlugin as default } from './alpha/plugin.esm.js';
2
+ //# sourceMappingURL=alpha.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpha.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ var name = "@backstage-community/plugin-entity-feedback";
2
+ var version = "0.12.0";
3
+ var backstage = {
4
+ role: "frontend-plugin",
5
+ pluginId: "entity-feedback",
6
+ pluginPackages: [
7
+ "@backstage-community/plugin-entity-feedback",
8
+ "@backstage-community/plugin-entity-feedback-backend",
9
+ "@backstage-community/plugin-entity-feedback-common"
10
+ ]
11
+ };
12
+ var publishConfig = {
13
+ access: "public"
14
+ };
15
+ var exports = {
16
+ ".": "./src/index.ts",
17
+ "./alpha": "./src/alpha/index.ts",
18
+ "./package.json": "./package.json"
19
+ };
20
+ var typesVersions = {
21
+ "*": {
22
+ alpha: [
23
+ "src/alpha/index.ts"
24
+ ],
25
+ "package.json": [
26
+ "package.json"
27
+ ]
28
+ }
29
+ };
30
+ var homepage = "https://backstage.io";
31
+ var repository = {
32
+ type: "git",
33
+ url: "https://github.com/backstage/community-plugins",
34
+ directory: "workspaces/entity-feedback/plugins/entity-feedback"
35
+ };
36
+ var license = "Apache-2.0";
37
+ var sideEffects = false;
38
+ var main = "src/index.ts";
39
+ var types = "src/index.ts";
40
+ var files = [
41
+ "dist"
42
+ ];
43
+ var scripts = {
44
+ build: "backstage-cli package build",
45
+ clean: "backstage-cli package clean",
46
+ lint: "backstage-cli package lint",
47
+ prepack: "backstage-cli package prepack",
48
+ postpack: "backstage-cli package postpack",
49
+ start: "backstage-cli package start",
50
+ "start:alpha": "backstage-cli package start --entry-dir dev/alpha --config dev/alpha/app-config.yaml",
51
+ test: "backstage-cli package test"
52
+ };
53
+ var dependencies = {
54
+ "@backstage-community/plugin-entity-feedback-common": "workspace:^",
55
+ "@backstage/catalog-model": "^1.7.5",
56
+ "@backstage/core-compat-api": "^0.5.3",
57
+ "@backstage/core-components": "^0.18.2",
58
+ "@backstage/core-plugin-api": "^1.11.1",
59
+ "@backstage/errors": "^1.2.7",
60
+ "@backstage/frontend-plugin-api": "^0.12.1",
61
+ "@backstage/plugin-catalog-react": "^1.21.2",
62
+ "@material-ui/core": "^4.9.13",
63
+ "@material-ui/icons": "^4.9.1",
64
+ "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
65
+ "react-use": "^17.2.4"
66
+ };
67
+ var devDependencies = {
68
+ "@backstage/cli": "^0.34.4",
69
+ "@backstage/dev-utils": "^1.1.15",
70
+ "@backstage/frontend-defaults": "^0.3.2",
71
+ "@backstage/plugin-catalog": "^1.31.4",
72
+ "@backstage/test-utils": "^1.7.12",
73
+ "@testing-library/dom": "^10.0.0",
74
+ "@testing-library/jest-dom": "^6.0.0",
75
+ "@testing-library/react": "^15.0.0",
76
+ "@testing-library/user-event": "^14.0.0",
77
+ "@types/react-dom": "^18.2.19",
78
+ msw: "^1.0.0",
79
+ react: "^16.13.1 || ^17.0.0 || ^18.0.0",
80
+ "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
81
+ "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
82
+ };
83
+ var peerDependencies = {
84
+ react: "^16.13.1 || ^17.0.0 || ^18.0.0",
85
+ "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
86
+ "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
87
+ };
88
+ var _package = {
89
+ name: name,
90
+ version: version,
91
+ backstage: backstage,
92
+ publishConfig: publishConfig,
93
+ exports: exports,
94
+ typesVersions: typesVersions,
95
+ homepage: homepage,
96
+ repository: repository,
97
+ license: license,
98
+ sideEffects: sideEffects,
99
+ main: main,
100
+ types: types,
101
+ files: files,
102
+ scripts: scripts,
103
+ dependencies: dependencies,
104
+ devDependencies: devDependencies,
105
+ peerDependencies: peerDependencies
106
+ };
107
+
108
+ export { backstage, _package as default, dependencies, devDependencies, exports, files, homepage, license, main, name, peerDependencies, publishConfig, repository, scripts, sideEffects, types, typesVersions, version };
109
+ //# sourceMappingURL=package.json.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-entity-feedback",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "backstage": {
5
5
  "role": "frontend-plugin",
6
6
  "pluginId": "entity-feedback",
@@ -8,12 +8,37 @@
8
8
  "@backstage-community/plugin-entity-feedback",
9
9
  "@backstage-community/plugin-entity-feedback-backend",
10
10
  "@backstage-community/plugin-entity-feedback-common"
11
- ]
11
+ ],
12
+ "features": {
13
+ "./alpha": "@backstage/FrontendPlugin"
14
+ }
12
15
  },
13
16
  "publishConfig": {
14
- "access": "public",
15
- "main": "dist/index.esm.js",
16
- "types": "dist/index.d.ts"
17
+ "access": "public"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.esm.js",
22
+ "types": "./dist/index.d.ts",
23
+ "default": "./dist/index.esm.js"
24
+ },
25
+ "./alpha": {
26
+ "backstage": "@backstage/FrontendPlugin",
27
+ "import": "./dist/alpha.esm.js",
28
+ "types": "./dist/alpha.d.ts",
29
+ "default": "./dist/alpha.esm.js"
30
+ },
31
+ "./package.json": "./package.json"
32
+ },
33
+ "typesVersions": {
34
+ "*": {
35
+ "alpha": [
36
+ "dist/alpha.d.ts"
37
+ ],
38
+ "package.json": [
39
+ "package.json"
40
+ ]
41
+ }
17
42
  },
18
43
  "homepage": "https://backstage.io",
19
44
  "repository": {
@@ -23,8 +48,8 @@
23
48
  },
24
49
  "license": "Apache-2.0",
25
50
  "sideEffects": false,
26
- "main": "dist/index.esm.js",
27
- "types": "dist/index.d.ts",
51
+ "main": "./dist/index.esm.js",
52
+ "types": "./dist/index.d.ts",
28
53
  "files": [
29
54
  "dist"
30
55
  ],
@@ -35,25 +60,29 @@
35
60
  "prepack": "backstage-cli package prepack",
36
61
  "postpack": "backstage-cli package postpack",
37
62
  "start": "backstage-cli package start",
63
+ "start:alpha": "backstage-cli package start --entry-dir dev/alpha --config dev/alpha/app-config.yaml",
38
64
  "test": "backstage-cli package test"
39
65
  },
40
66
  "dependencies": {
41
- "@backstage-community/plugin-entity-feedback-common": "^0.9.0",
67
+ "@backstage-community/plugin-entity-feedback-common": "^0.10.0",
42
68
  "@backstage/catalog-model": "^1.7.5",
43
- "@backstage/core-components": "^0.18.1",
44
- "@backstage/core-plugin-api": "^1.11.0",
69
+ "@backstage/core-compat-api": "^0.5.3",
70
+ "@backstage/core-components": "^0.18.2",
71
+ "@backstage/core-plugin-api": "^1.11.1",
45
72
  "@backstage/errors": "^1.2.7",
46
- "@backstage/plugin-catalog-react": "^1.21.1",
73
+ "@backstage/frontend-plugin-api": "^0.12.1",
74
+ "@backstage/plugin-catalog-react": "^1.21.2",
47
75
  "@material-ui/core": "^4.9.13",
48
76
  "@material-ui/icons": "^4.9.1",
49
77
  "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
50
78
  "react-use": "^17.2.4"
51
79
  },
52
80
  "devDependencies": {
53
- "@backstage/cli": "^0.34.3",
54
- "@backstage/dev-utils": "^1.1.14",
55
- "@backstage/plugin-catalog": "^1.31.3",
56
- "@backstage/test-utils": "^1.7.11",
81
+ "@backstage/cli": "^0.34.4",
82
+ "@backstage/dev-utils": "^1.1.15",
83
+ "@backstage/frontend-defaults": "^0.3.2",
84
+ "@backstage/plugin-catalog": "^1.31.4",
85
+ "@backstage/test-utils": "^1.7.12",
57
86
  "@testing-library/dom": "^10.0.0",
58
87
  "@testing-library/jest-dom": "^6.0.0",
59
88
  "@testing-library/react": "^15.0.0",
@@ -69,12 +98,5 @@
69
98
  "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
70
99
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
71
100
  },
72
- "typesVersions": {
73
- "*": {
74
- "package.json": [
75
- "package.json"
76
- ]
77
- }
78
- },
79
101
  "module": "./dist/index.esm.js"
80
102
  }