From 0aedb6c25760051bed220cf6ec620eae42022c7a Mon Sep 17 00:00:00 2001 From: GustavoAdrianGimenez Date: Fri, 7 Apr 2023 11:32:56 -0300 Subject: [PATCH 1/5] Add docs column to metadata table Signed-off-by: GustavoAdrianGimenez --- .../20230407142544_add_docs_to_metadata.js | 37 +++++++++++++++++++ .../src/service/DatabaseHandler.test.ts | 3 ++ .../src/service/DatabaseHandler.ts | 5 +++ 3 files changed, 45 insertions(+) create mode 100644 plugins/bazaar-backend/migrations/20230407142544_add_docs_to_metadata.js diff --git a/plugins/bazaar-backend/migrations/20230407142544_add_docs_to_metadata.js b/plugins/bazaar-backend/migrations/20230407142544_add_docs_to_metadata.js new file mode 100644 index 0000000000..de73308431 --- /dev/null +++ b/plugins/bazaar-backend/migrations/20230407142544_add_docs_to_metadata.js @@ -0,0 +1,37 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// @ts-check + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.up = async function up(knex) { + await knex.schema.alterTable('metadata', table => { + table.text('docs').comment('The link to the project docs (optional)'); + }); +}; + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.down = async function down(knex) { + await knex.schema.alterTable('metadata', table => { + table.dropColumn('docs'); + }); +}; diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts index 8978679ff4..0c78dbdd87 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.test.ts @@ -29,6 +29,7 @@ const bazaarProject: any = { endDate: null, size: 'small', responsible: 'r', + docs: '', }; jest.setTimeout(60_000); @@ -75,6 +76,7 @@ describe('DatabaseHandler', () => { end_date: bazaarProject.endDate, size: bazaarProject.size, responsible: bazaarProject.responsible, + docs: bazaarProject.docs, }); // Add a member to the project @@ -94,6 +96,7 @@ describe('DatabaseHandler', () => { expect(res[0].end_date).toEqual(null); expect(res[0].size).toEqual('small'); expect(res[0].responsible).toEqual('r'); + expect(res[0].docs).toEqual(''); expect( res[0].members_count === '1' || res[0].members_count === 1, ).toBeTruthy(); diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.ts index f75ea8b782..1d3c231409 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.ts @@ -61,6 +61,7 @@ export class DatabaseHandler { 'metadata.start_date', 'metadata.end_date', 'metadata.responsible', + 'metadata.docs', ]; async getMembers(id: string) { @@ -120,6 +121,7 @@ export class DatabaseHandler { entityRef, community, description, + docs, status, size, startDate, @@ -133,6 +135,7 @@ export class DatabaseHandler { entity_ref: entityRef, community, description, + docs, status, updated_at: new Date().toISOString(), size, @@ -150,6 +153,7 @@ export class DatabaseHandler { entityRef, community, description, + docs, status, size, startDate, @@ -162,6 +166,7 @@ export class DatabaseHandler { entity_ref: entityRef, description, community, + docs, status, updated_at: new Date().toISOString(), size, From 75c0edbfd4ab802978b1f13e917bebfcf12204e1 Mon Sep 17 00:00:00 2001 From: GustavoAdrianGimenez Date: Fri, 7 Apr 2023 12:10:10 -0300 Subject: [PATCH 2/5] Add docs input and link in bazaar plugin Signed-off-by: GustavoAdrianGimenez --- plugins/bazaar/README.md | 1 + .../components/AddProjectDialog/AddProjectDialog.tsx | 1 + .../EntityBazaarInfoContent.tsx | 7 +++++++ .../HomePageBazaarInfoCard.tsx | 8 ++++++++ .../bazaar/src/components/InputField/InputField.tsx | 2 +- .../src/components/ProjectDialog/ProjectDialog.tsx | 12 ++++++++++++ plugins/bazaar/src/types.ts | 2 ++ plugins/bazaar/src/util/parseMethods.ts | 1 + 8 files changed, 33 insertions(+), 1 deletion(-) diff --git a/plugins/bazaar/README.md b/plugins/bazaar/README.md index bd4589f2d3..9b5fb466df 100644 --- a/plugins/bazaar/README.md +++ b/plugins/bazaar/README.md @@ -127,6 +127,7 @@ The other fields are: - project - link Bazaar project to existing entity in the catalog - community link - link to where the project members can communicate, e.g. Teams or Discord link +- docs link - link to visit the documentation of the project - start date - end date diff --git a/plugins/bazaar/src/components/AddProjectDialog/AddProjectDialog.tsx b/plugins/bazaar/src/components/AddProjectDialog/AddProjectDialog.tsx index 45392206d9..c07ae0cfd1 100644 --- a/plugins/bazaar/src/components/AddProjectDialog/AddProjectDialog.tsx +++ b/plugins/bazaar/src/components/AddProjectDialog/AddProjectDialog.tsx @@ -45,6 +45,7 @@ export const AddProjectDialog = ({ title: '', community: '', description: '', + docs: '', status: 'proposed' as Status, size: 'medium' as Size, responsible: '', diff --git a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx index e0a3a9b881..0c7b0bb126 100644 --- a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx +++ b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx @@ -26,6 +26,7 @@ import ChatIcon from '@material-ui/icons/Chat'; import PersonAddIcon from '@material-ui/icons/PersonAdd'; import DashboardIcon from '@material-ui/icons/Dashboard'; import LinkOffIcon from '@material-ui/icons/LinkOff'; +import Description from '@material-ui/icons/Description'; import { EditProjectDialog } from '../EditProjectDialog'; import { useApi, identityApiRef } from '@backstage/core-plugin-api'; import { BazaarProject, Member } from '../../types'; @@ -128,6 +129,12 @@ export const EntityBazaarInfoContent = ({ href: bazaarProject?.community, disabled: bazaarProject?.community === '' || !isMember, }, + { + label: 'Docs', + icon: , + href: bazaarProject?.docs, + disabled: bazaarProject?.docs === null || bazaarProject?.docs === '', + }, ]; const handleEditClose = () => { diff --git a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx index 7c6491c8a5..782b7d3c67 100644 --- a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx +++ b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx @@ -34,6 +34,7 @@ import InsertLinkIcon from '@material-ui/icons/InsertLink'; import DashboardIcon from '@material-ui/icons/Dashboard'; import CloseIcon from '@material-ui/icons/Close'; import LinkOffIcon from '@material-ui/icons/LinkOff'; +import Description from '@material-ui/icons/Description'; import { EditProjectDialog } from '../EditProjectDialog'; import ExitToAppIcon from '@material-ui/icons/ExitToApp'; import { @@ -197,6 +198,13 @@ export const HomePageBazaarInfoCard = ({ href: bazaarProject.value?.community, disabled: !bazaarProject.value?.community || !isMember, }, + { + label: 'Docs', + icon: , + href: bazaarProject.value?.docs, + disabled: + bazaarProject.value?.docs === null || bazaarProject.value?.docs === '', + }, ]; const handleUnlinkSubmit = async () => { diff --git a/plugins/bazaar/src/components/InputField/InputField.tsx b/plugins/bazaar/src/components/InputField/InputField.tsx index a2c8ca4ac4..a926ac41ad 100644 --- a/plugins/bazaar/src/components/InputField/InputField.tsx +++ b/plugins/bazaar/src/components/InputField/InputField.tsx @@ -30,7 +30,7 @@ type Rules = { }; type Props = { - inputType: 'description' | 'community' | 'responsible' | 'title'; + inputType: 'description' | 'community' | 'responsible' | 'title' | 'docs'; error?: FieldError | undefined; control: Control; helperText?: string; diff --git a/plugins/bazaar/src/components/ProjectDialog/ProjectDialog.tsx b/plugins/bazaar/src/components/ProjectDialog/ProjectDialog.tsx index ec7312576d..3a0d156fd8 100644 --- a/plugins/bazaar/src/components/ProjectDialog/ProjectDialog.tsx +++ b/plugins/bazaar/src/components/ProjectDialog/ProjectDialog.tsx @@ -144,6 +144,18 @@ export const ProjectDialog = ({ placeholder="Community link to e.g. Teams or Discord" /> + + diff --git a/plugins/bazaar/src/types.ts b/plugins/bazaar/src/types.ts index 055ec2fcab..7ca8e07aad 100644 --- a/plugins/bazaar/src/types.ts +++ b/plugins/bazaar/src/types.ts @@ -39,6 +39,7 @@ export type BazaarProject = { startDate?: string | null; endDate?: string | null; responsible: string; + docs: string; }; export type FormValues = { @@ -50,4 +51,5 @@ export type FormValues = { startDate?: string | null; endDate?: string | null; responsible: string; + docs: string; }; diff --git a/plugins/bazaar/src/util/parseMethods.ts b/plugins/bazaar/src/util/parseMethods.ts index b93f70c9f1..3be2be2aa9 100644 --- a/plugins/bazaar/src/util/parseMethods.ts +++ b/plugins/bazaar/src/util/parseMethods.ts @@ -30,6 +30,7 @@ export const parseBazaarProject = (metadata: any): BazaarProject => { startDate: metadata.start_date, endDate: metadata.end_date, responsible: metadata.responsible, + docs: metadata.docs, } as BazaarProject; }; From 91b7bde16f91aff00da7092b639cf07893baba55 Mon Sep 17 00:00:00 2001 From: GustavoAdrianGimenez Date: Fri, 7 Apr 2023 12:14:55 -0300 Subject: [PATCH 3/5] Fix disabled docs link comparission Signed-off-by: GustavoAdrianGimenez --- .../EntityBazaarInfoContent/EntityBazaarInfoContent.tsx | 2 +- .../HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx index 0c7b0bb126..1a8229341b 100644 --- a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx +++ b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx @@ -133,7 +133,7 @@ export const EntityBazaarInfoContent = ({ label: 'Docs', icon: , href: bazaarProject?.docs, - disabled: bazaarProject?.docs === null || bazaarProject?.docs === '', + disabled: bazaarProject?.docs === undefined || bazaarProject?.docs === '', }, ]; diff --git a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx index 782b7d3c67..090fa44854 100644 --- a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx +++ b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx @@ -203,7 +203,8 @@ export const HomePageBazaarInfoCard = ({ icon: , href: bazaarProject.value?.docs, disabled: - bazaarProject.value?.docs === null || bazaarProject.value?.docs === '', + bazaarProject.value?.docs === undefined || + bazaarProject.value?.docs === '', }, ]; From ef155ba5e2261a88a2973a2b5a3d44128def968b Mon Sep 17 00:00:00 2001 From: GustavoAdrianGimenez Date: Sat, 8 Apr 2023 11:59:52 -0300 Subject: [PATCH 4/5] Fix docs disabled condition Signed-off-by: GustavoAdrianGimenez --- .../EntityBazaarInfoContent/EntityBazaarInfoContent.tsx | 2 +- .../HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx index 1a8229341b..0c7b0bb126 100644 --- a/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx +++ b/plugins/bazaar/src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx @@ -133,7 +133,7 @@ export const EntityBazaarInfoContent = ({ label: 'Docs', icon: , href: bazaarProject?.docs, - disabled: bazaarProject?.docs === undefined || bazaarProject?.docs === '', + disabled: bazaarProject?.docs === null || bazaarProject?.docs === '', }, ]; diff --git a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx index 090fa44854..782b7d3c67 100644 --- a/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx +++ b/plugins/bazaar/src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx @@ -203,8 +203,7 @@ export const HomePageBazaarInfoCard = ({ icon: , href: bazaarProject.value?.docs, disabled: - bazaarProject.value?.docs === undefined || - bazaarProject.value?.docs === '', + bazaarProject.value?.docs === null || bazaarProject.value?.docs === '', }, ]; From fbd6f36611a6bfdc8b18327b7075ff7a2af68234 Mon Sep 17 00:00:00 2001 From: GustavoAdrianGimenez Date: Sat, 8 Apr 2023 18:29:52 -0300 Subject: [PATCH 5/5] Changeset Signed-off-by: GustavoAdrianGimenez --- .changeset/clever-plums-decide.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/clever-plums-decide.md diff --git a/.changeset/clever-plums-decide.md b/.changeset/clever-plums-decide.md new file mode 100644 index 0000000000..7d01792f00 --- /dev/null +++ b/.changeset/clever-plums-decide.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-bazaar': patch +--- + +Added the `docs` parameter (optional) to link the project documentation