diff --git a/.changeset/strong-experts-act.md b/.changeset/strong-experts-act.md
new file mode 100644
index 000000000..ecbda080f
--- /dev/null
+++ b/.changeset/strong-experts-act.md
@@ -0,0 +1,5 @@
+---
+"@orchestrator-ui/orchestrator-ui-components": patch
+---
+
+inline edit for description of metadata pages
diff --git a/.github/workflows/tag-example-ui.yml b/.github/workflows/tag-example-ui.yml
index 3a03a0e32..0e6d91456 100644
--- a/.github/workflows/tag-example-ui.yml
+++ b/.github/workflows/tag-example-ui.yml
@@ -4,63 +4,63 @@
name: Tag example-orchestrator-ui
on:
- push:
- tags:
- - "@orchestrator-ui/orchestrator-ui-components@[0-9]+.[0-9]+.[0-9]+"
- release:
- types:
- - published
- tags:
- - "@orchestrator-ui/orchestrator-ui-components@[0-9]+.[0-9]+.[0-9]+"
+ push:
+ tags:
+ - '@orchestrator-ui/orchestrator-ui-components@[0-9]+.[0-9]+.[0-9]+'
+ release:
+ types:
+ - published
+ tags:
+ - '@orchestrator-ui/orchestrator-ui-components@[0-9]+.[0-9]+.[0-9]+'
# The main branch of the following repository will be tagged
# with the version part (e.g. 0.3.1) of the tag trigger above.
env:
- REPO: "example-orchestrator-ui"
+ REPO: 'example-orchestrator-ui'
jobs:
- docker:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - name: Create GitHub app token
- uses: actions/create-github-app-token@v1
- id: app-token
- with:
- app-id: ${{ vars.RW_REPOSITORY_CONTENT_APP_ID }}
- private-key: ${{ secrets.RW_REPOSITORY_CONTENT_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- repositories: ${{ env.REPO }}
- - name: Get latest commit SHA
- id: sha
- uses: actions/github-script@v7
- with:
- result-encoding: string
- script: |
- const commit = await github.rest.repos.getCommit({
- owner: github.repository_owner,
- repo: env.REPO,
- ref: 'heads/main',
- })
- return commit.data.sha
- - name: Extract REF from ref_name
- run: |
- REF_NAME=${{ github.ref_name }}
- REF=${REF_NAME/@orchestrator-ui\/orchestrator-ui-components@/}
- echo REF=${REF} >> $GITHUB_ENV
- - name: Add tag to repository
- uses: actions/github-script@v7
- env:
- REF: ${{ format('refs/tags/{0}', env.REF) }}
- SHA: ${{ steps.sha.outputs.result }}
- with:
- github-token: ${{ steps.app-token.outputs.token }}
- script: |
- await github.rest.git.createRef({
- owner: github.repository_owner,
- repo: env.REPO,
- ref: process.env.REF,
- sha: process.env.SHA,
- })
+ docker:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - name: Create GitHub app token
+ uses: actions/create-github-app-token@v1
+ id: app-token
+ with:
+ app-id: ${{ vars.RW_REPOSITORY_CONTENT_APP_ID }}
+ private-key: ${{ secrets.RW_REPOSITORY_CONTENT_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ repositories: ${{ env.REPO }}
+ - name: Get latest commit SHA
+ id: sha
+ uses: actions/github-script@v7
+ with:
+ result-encoding: string
+ script: |
+ const commit = await github.rest.repos.getCommit({
+ owner: github.repository_owner,
+ repo: env.REPO,
+ ref: 'heads/main',
+ })
+ return commit.data.sha
+ - name: Extract REF from ref_name
+ run: |
+ REF_NAME=${{ github.ref_name }}
+ REF=${REF_NAME/@orchestrator-ui\/orchestrator-ui-components@/}
+ echo REF=${REF} >> $GITHUB_ENV
+ - name: Add tag to repository
+ uses: actions/github-script@v7
+ env:
+ REF: ${{ format('refs/tags/{0}', env.REF) }}
+ SHA: ${{ steps.sha.outputs.result }}
+ with:
+ github-token: ${{ steps.app-token.outputs.token }}
+ script: |
+ await github.rest.git.createRef({
+ owner: github.repository_owner,
+ repo: env.REPO,
+ ref: process.env.REF,
+ sha: process.env.SHA,
+ })
diff --git a/apps/storybook/src/index.css b/apps/storybook/src/index.css
index 6119ad9a8..279fff56b 100644
--- a/apps/storybook/src/index.css
+++ b/apps/storybook/src/index.css
@@ -1,68 +1,68 @@
:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
}
a:hover {
- color: #535bf2;
+ color: #535bf2;
}
body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
}
h1 {
- font-size: 3.2em;
- line-height: 1.1;
+ font-size: 3.2em;
+ line-height: 1.1;
}
button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
}
button:hover {
- border-color: #646cff;
+ border-color: #646cff;
}
button:focus,
button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
+ outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
}
diff --git a/packages/orchestrator-ui-components/src/components/WfoMetadata/WfoMetadataDescriptionField.tsx b/packages/orchestrator-ui-components/src/components/WfoMetadata/WfoMetadataDescriptionField.tsx
new file mode 100644
index 000000000..cf9753376
--- /dev/null
+++ b/packages/orchestrator-ui-components/src/components/WfoMetadata/WfoMetadataDescriptionField.tsx
@@ -0,0 +1,22 @@
+import React, { FC } from 'react';
+
+import { WfoInlineEdit } from '../WfoInlineEdit';
+
+interface WfoMetadataDescriptionFieldProps {
+ onSave: (updatedNote: string) => void;
+ description: string;
+}
+
+export const WfoMetadataDescriptionField: FC<
+ WfoMetadataDescriptionFieldProps
+> = ({ onSave, description }) => {
+ return (
+
+
+
+ );
+};
diff --git a/packages/orchestrator-ui-components/src/configuration/constants.ts b/packages/orchestrator-ui-components/src/configuration/constants.ts
index d67b686fd..05561adb7 100644
--- a/packages/orchestrator-ui-components/src/configuration/constants.ts
+++ b/packages/orchestrator-ui-components/src/configuration/constants.ts
@@ -27,3 +27,9 @@ export const IPAM_FREE_SUBNETS_ENDPOINT = `${IPAM_ENDPOINT}/free_subnets`;
export const SUBSCRIPTION_ACTIONS_ENDPOINT = 'subscriptions/workflows';
export const CUSTOMER_DESCRIPTION_ENDPOINT =
'/subscription_customer_descriptions';
+
+//metadata
+export const METADATA_PRODUCT_ENDPOINT = 'products';
+export const METADATA_PRODUCT_BLOCK_ENDPOINT = 'product_blocks';
+export const METADATA_RESOURCE_TYPE_ENDPOINT = 'resource_types';
+export const METADATA_WORKFLOWS_ENDPOINT = 'workflows';
diff --git a/packages/orchestrator-ui-components/src/pages/metadata/WfoProductBlocksPage.tsx b/packages/orchestrator-ui-components/src/pages/metadata/WfoProductBlocksPage.tsx
index 1e708c0b1..0d109ce03 100644
--- a/packages/orchestrator-ui-components/src/pages/metadata/WfoProductBlocksPage.tsx
+++ b/packages/orchestrator-ui-components/src/pages/metadata/WfoProductBlocksPage.tsx
@@ -21,6 +21,7 @@ import {
getPageSizeChangeHandler,
getQueryStringHandler,
} from '@/components';
+import { WfoMetadataDescriptionField } from '@/components/WfoMetadata/WfoMetadataDescriptionField';
import { WfoAdvancedTable } from '@/components/WfoTable/WfoAdvancedTable';
import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedTable/types';
import { ColumnType, Pagination } from '@/components/WfoTable/WfoTable';
@@ -30,7 +31,11 @@ import {
useShowToastMessage,
useStoredTableConfig,
} from '@/hooks';
-import { useGetProductBlocksQuery, useLazyGetProductBlocksQuery } from '@/rtk';
+import {
+ useGetProductBlocksQuery,
+ useLazyGetProductBlocksQuery,
+ useUpdateProductBlockMutation,
+} from '@/rtk';
import type { ProductBlocksResponse } from '@/rtk';
import { mapRtkErrorToWfoError } from '@/rtk/utils';
import {
@@ -72,6 +77,7 @@ export const WfoProductBlocksPage = () => {
const getStoredTableConfig = useStoredTableConfig(
METADATA_PRODUCT_BLOCKS_TABLE_LOCAL_STORAGE_KEY,
);
+ const [updateProductBlock] = useUpdateProductBlockMutation();
useEffect(() => {
const storedConfig = getStoredTableConfig();
@@ -121,7 +127,18 @@ export const WfoProductBlocksPage = () => {
description: {
columnType: ColumnType.DATA,
label: t('description'),
- width: '400px',
+ width: '700px',
+ renderData: (value, row) => (
+
+ updateProductBlock({
+ id: row.productBlockId,
+ description: updatedNote,
+ })
+ }
+ description={value}
+ />
+ ),
},
status: {
columnType: ColumnType.DATA,
diff --git a/packages/orchestrator-ui-components/src/pages/metadata/WfoProductsPage.tsx b/packages/orchestrator-ui-components/src/pages/metadata/WfoProductsPage.tsx
index b6d1cc082..494ace35f 100644
--- a/packages/orchestrator-ui-components/src/pages/metadata/WfoProductsPage.tsx
+++ b/packages/orchestrator-ui-components/src/pages/metadata/WfoProductsPage.tsx
@@ -19,6 +19,7 @@ import {
getDataSortHandler,
getQueryStringHandler,
} from '@/components';
+import { WfoMetadataDescriptionField } from '@/components/WfoMetadata/WfoMetadataDescriptionField';
import { WfoAdvancedTable } from '@/components/WfoTable/WfoAdvancedTable';
import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedTable/types';
import { WfoFirstPartUUID } from '@/components/WfoTable/WfoFirstPartUUID';
@@ -29,7 +30,11 @@ import {
useShowToastMessage,
useStoredTableConfig,
} from '@/hooks';
-import { useGetProductsQuery, useLazyGetProductsQuery } from '@/rtk';
+import {
+ useGetProductsQuery,
+ useLazyGetProductsQuery,
+ useUpdateProductMutation,
+} from '@/rtk';
import { ProductsResponse } from '@/rtk';
import { mapRtkErrorToWfoError } from '@/rtk/utils';
import type { GraphqlQueryVariables, ProductDefinition } from '@/types';
@@ -68,6 +73,7 @@ export const WfoProductsPage = () => {
const getStoredTableConfig = useStoredTableConfig(
METADATA_PRODUCT_TABLE_LOCAL_STORAGE_KEY,
);
+ const [updateProduct] = useUpdateProductMutation();
useEffect(() => {
const storedConfig = getStoredTableConfig();
@@ -122,8 +128,18 @@ export const WfoProductsPage = () => {
description: {
columnType: ColumnType.DATA,
label: t('description'),
- width: '400px',
- renderTooltip: (value) => value,
+ width: '700px',
+ renderData: (value, row) => (
+
+ updateProduct({
+ id: row.productId,
+ description: updatedNote,
+ })
+ }
+ description={value}
+ />
+ ),
},
productType: {
columnType: ColumnType.DATA,
@@ -188,6 +204,7 @@ export const WfoProductsPage = () => {
createdAt: {
columnType: ColumnType.DATA,
label: t('createdAt'),
+ width: '90px',
renderData: (date) => ,
renderDetails: parseIsoString(parseDateToLocaleDateTimeString),
clipboardText: parseIsoString(parseDateToLocaleDateTimeString),
diff --git a/packages/orchestrator-ui-components/src/pages/metadata/WfoResourceTypesPage.tsx b/packages/orchestrator-ui-components/src/pages/metadata/WfoResourceTypesPage.tsx
index e935e5e41..43d66e276 100644
--- a/packages/orchestrator-ui-components/src/pages/metadata/WfoResourceTypesPage.tsx
+++ b/packages/orchestrator-ui-components/src/pages/metadata/WfoResourceTypesPage.tsx
@@ -17,6 +17,7 @@ import {
} from '@/components';
import type { StoredTableConfig, WfoDataSorting } from '@/components';
import { WfoFirstPartUUID } from '@/components';
+import { WfoMetadataDescriptionField } from '@/components/WfoMetadata/WfoMetadataDescriptionField';
import { WfoAdvancedTable } from '@/components/WfoTable/WfoAdvancedTable';
import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedTable/types';
import { ColumnType, Pagination } from '@/components/WfoTable/WfoTable';
@@ -30,6 +31,7 @@ import {
ResourceTypesResponse,
useGetResourceTypesQuery,
useLazyGetResourceTypesQuery,
+ useUpdateResourceTypeMutation,
} from '@/rtk';
import { mapRtkErrorToWfoError } from '@/rtk/utils';
import {
@@ -67,6 +69,7 @@ export const WfoResourceTypesPage = () => {
const getStoredTableConfig = useStoredTableConfig(
METADATA_RESOURCE_TYPES_TABLE_LOCAL_STORAGE_KEY,
);
+ const [updateResourceType] = useUpdateResourceTypeMutation();
useEffect(() => {
const storedConfig = getStoredTableConfig();
@@ -112,6 +115,17 @@ export const WfoResourceTypesPage = () => {
columnType: ColumnType.DATA,
label: t('description'),
width: '700px',
+ renderData: (value, row) => (
+
+ updateResourceType({
+ id: row.resourceTypeId,
+ description: updatedNote,
+ })
+ }
+ description={value}
+ />
+ ),
},
productBlocks: {
columnType: ColumnType.DATA,
diff --git a/packages/orchestrator-ui-components/src/pages/metadata/WfoTasksPage.tsx b/packages/orchestrator-ui-components/src/pages/metadata/WfoTasksPage.tsx
index f89476074..deb40398a 100644
--- a/packages/orchestrator-ui-components/src/pages/metadata/WfoTasksPage.tsx
+++ b/packages/orchestrator-ui-components/src/pages/metadata/WfoTasksPage.tsx
@@ -21,6 +21,7 @@ import {
} from '@/components';
import { getDataSortHandler, getQueryStringHandler } from '@/components';
import { WfoDateTime } from '@/components/WfoDateTime/WfoDateTime';
+import { WfoMetadataDescriptionField } from '@/components/WfoMetadata/WfoMetadataDescriptionField';
import { WfoAdvancedTable } from '@/components/WfoTable/WfoAdvancedTable';
import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedTable/types';
import {
@@ -33,7 +34,12 @@ import {
useShowToastMessage,
useStoredTableConfig,
} from '@/hooks';
-import { TasksResponse, useGetTasksQuery, useLazyGetTasksQuery } from '@/rtk';
+import {
+ TasksResponse,
+ useGetTasksQuery,
+ useLazyGetTasksQuery,
+ useUpdateWorkflowMutation,
+} from '@/rtk';
import { mapRtkErrorToWfoError } from '@/rtk/utils';
import type { GraphqlQueryVariables, TaskDefinition } from '@/types';
import { BadgeType, SortOrder } from '@/types';
@@ -71,13 +77,12 @@ export const WfoTasksPage = () => {
const t = useTranslations('metadata.tasks');
const tError = useTranslations('errors');
const { showToastMessage } = useShowToastMessage();
-
const [tableDefaults, setTableDefaults] =
useState>();
-
const getStoredTableConfig = useStoredTableConfig(
METADATA_TASKS_TABLE_LOCAL_STORAGE_KEY,
);
+ const [updateWorkflow] = useUpdateWorkflowMutation();
useEffect(() => {
const storedConfig = getStoredTableConfig();
@@ -122,8 +127,34 @@ export const WfoTasksPage = () => {
description: {
columnType: ColumnType.DATA,
label: t('description'),
- width: '500px',
+ width: '700px',
+ renderData: (value, row) =>
+ value ? (
+
+ updateWorkflow({
+ id: row.workflowId,
+ description: updatedNote,
+ })
+ }
+ description={value}
+ />
+ ) : null,
},
+
+ // description: {
+ // columnType: ColumnType.DATA,
+ // label: t('description'),
+ // width: '450px',
+ // renderData: (value, row) =>
+ // value ? (
+ //
+ // ) : null,
+ // },
+
target: {
columnType: ColumnType.DATA,
label: t('target'),
diff --git a/packages/orchestrator-ui-components/src/pages/metadata/WfoWorkflowsPage.tsx b/packages/orchestrator-ui-components/src/pages/metadata/WfoWorkflowsPage.tsx
index afe98ac72..8fa490f36 100644
--- a/packages/orchestrator-ui-components/src/pages/metadata/WfoWorkflowsPage.tsx
+++ b/packages/orchestrator-ui-components/src/pages/metadata/WfoWorkflowsPage.tsx
@@ -22,6 +22,7 @@ import {
getDataSortHandler,
getQueryStringHandler,
} from '@/components';
+import { WfoMetadataDescriptionField } from '@/components/WfoMetadata/WfoMetadataDescriptionField';
import { WfoAdvancedTable } from '@/components/WfoTable/WfoAdvancedTable/WfoAdvancedTable';
import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedTable/types';
import {
@@ -38,6 +39,7 @@ import {
WorkflowsResponse,
useGetWorkflowsQuery,
useLazyGetWorkflowsQuery,
+ useUpdateWorkflowMutation,
} from '@/rtk';
import { mapRtkErrorToWfoError } from '@/rtk/utils';
import type { GraphqlQueryVariables, WorkflowDefinition } from '@/types';
@@ -83,6 +85,7 @@ export const WfoWorkflowsPage = () => {
const getStoredTableConfig = useStoredTableConfig(
METADATA_WORKFLOWS_TABLE_LOCAL_STORAGE_KEY,
);
+ const [updateWorkflow] = useUpdateWorkflowMutation();
useEffect(() => {
const storedConfig = getStoredTableConfig();
@@ -127,7 +130,19 @@ export const WfoWorkflowsPage = () => {
description: {
columnType: ColumnType.DATA,
label: t('description'),
- width: '450px',
+ width: '700px',
+ renderData: (value, row) =>
+ value ? (
+
+ updateWorkflow({
+ id: row.workflowId,
+ description: updatedNote,
+ })
+ }
+ description={value}
+ />
+ ) : null,
},
target: {
columnType: ColumnType.DATA,
diff --git a/packages/orchestrator-ui-components/src/rtk/endpoints/index.ts b/packages/orchestrator-ui-components/src/rtk/endpoints/index.ts
index dc8db17ca..d039f0c16 100644
--- a/packages/orchestrator-ui-components/src/rtk/endpoints/index.ts
+++ b/packages/orchestrator-ui-components/src/rtk/endpoints/index.ts
@@ -5,7 +5,7 @@ export * from './processDetail';
export * from './processList';
export * from './processListSummary';
export * from './processSteps';
-export * from './products';
+export * from './metadata/products';
export * from './productsSummary';
export * from './relatedSubscriptions';
export * from './settings';
diff --git a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/productBlocks.ts b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/productBlocks.ts
index fc901f2d3..3bcc40d32 100644
--- a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/productBlocks.ts
+++ b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/productBlocks.ts
@@ -1,4 +1,6 @@
-import { orchestratorApi } from '@/rtk';
+import { METADATA_PRODUCT_BLOCK_ENDPOINT } from '@/configuration';
+import { BaseQueryTypes, orchestratorApi } from '@/rtk';
+import { MetadataDescriptionParams } from '@/types';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
@@ -86,3 +88,25 @@ const productBlocksApi = orchestratorApi.injectEndpoints({
export const { useGetProductBlocksQuery, useLazyGetProductBlocksQuery } =
productBlocksApi;
+
+const productBlocksRestApi = orchestratorApi.injectEndpoints({
+ endpoints: (build) => ({
+ updateProductBlock: build.mutation({
+ query: (productBlock) => ({
+ url: `${METADATA_PRODUCT_BLOCK_ENDPOINT}/${productBlock.id}`,
+ method: 'PATCH',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: {
+ description: productBlock.description,
+ },
+ }),
+ extraOptions: {
+ baseQueryType: BaseQueryTypes.fetch,
+ },
+ }),
+ }),
+});
+
+export const { useUpdateProductBlockMutation } = productBlocksRestApi;
diff --git a/packages/orchestrator-ui-components/src/rtk/endpoints/products.ts b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/products.ts
similarity index 69%
rename from packages/orchestrator-ui-components/src/rtk/endpoints/products.ts
rename to packages/orchestrator-ui-components/src/rtk/endpoints/metadata/products.ts
index 936cba051..2313d4dcf 100644
--- a/packages/orchestrator-ui-components/src/rtk/endpoints/products.ts
+++ b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/products.ts
@@ -1,7 +1,9 @@
-import { orchestratorApi } from '@/rtk';
+import { METADATA_PRODUCT_ENDPOINT } from '@/configuration/constants';
+import { BaseQueryTypes, orchestratorApi } from '@/rtk';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
+ MetadataDescriptionParams,
ProductDefinition,
ProductDefinitionsResult,
} from '@/types';
@@ -74,3 +76,25 @@ const productsApi = orchestratorApi.injectEndpoints({
});
export const { useGetProductsQuery, useLazyGetProductsQuery } = productsApi;
+
+const productRestApi = orchestratorApi.injectEndpoints({
+ endpoints: (build) => ({
+ updateProduct: build.mutation({
+ query: (product) => ({
+ url: `${METADATA_PRODUCT_ENDPOINT}/${product.id}`,
+ method: 'PATCH',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: {
+ description: product.description,
+ },
+ }),
+ extraOptions: {
+ baseQueryType: BaseQueryTypes.fetch,
+ },
+ }),
+ }),
+});
+
+export const { useUpdateProductMutation } = productRestApi;
diff --git a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/resourceTypes.ts b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/resourceTypes.ts
index 3193fedd9..2b2035f0d 100644
--- a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/resourceTypes.ts
+++ b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/resourceTypes.ts
@@ -1,7 +1,9 @@
-import { orchestratorApi } from '@/rtk';
+import { METADATA_RESOURCE_TYPE_ENDPOINT } from '@/configuration';
+import { BaseQueryTypes, orchestratorApi } from '@/rtk';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
+ MetadataDescriptionParams,
ResourceTypeDefinition,
ResourceTypeDefinitionsResult,
} from '@/types';
@@ -76,3 +78,25 @@ const resourceTypesApi = orchestratorApi.injectEndpoints({
export const { useGetResourceTypesQuery, useLazyGetResourceTypesQuery } =
resourceTypesApi;
+
+const resourceTypesRestApi = orchestratorApi.injectEndpoints({
+ endpoints: (build) => ({
+ updateResourceType: build.mutation({
+ query: (resourceType) => ({
+ url: `${METADATA_RESOURCE_TYPE_ENDPOINT}/${resourceType.id}`,
+ method: 'PATCH',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: {
+ description: resourceType.description,
+ },
+ }),
+ extraOptions: {
+ baseQueryType: BaseQueryTypes.fetch,
+ },
+ }),
+ }),
+});
+
+export const { useUpdateResourceTypeMutation } = resourceTypesRestApi;
diff --git a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/workflows.ts b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/workflows.ts
index 87be97854..80bc62036 100644
--- a/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/workflows.ts
+++ b/packages/orchestrator-ui-components/src/rtk/endpoints/metadata/workflows.ts
@@ -1,7 +1,9 @@
-import { orchestratorApi } from '@/rtk';
+import { METADATA_WORKFLOWS_ENDPOINT } from '@/configuration';
+import { BaseQueryTypes, orchestratorApi } from '@/rtk';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
+ MetadataDescriptionParams,
WorkflowDefinition,
WorkflowDefinitionsResult,
} from '@/types';
@@ -134,3 +136,25 @@ export const {
useLazyGetWorkflowsQuery,
useGetDescriptionForWorkflowNameQuery,
} = workflowsApi;
+
+const workflowsRestApi = orchestratorApi.injectEndpoints({
+ endpoints: (build) => ({
+ updateWorkflow: build.mutation({
+ query: (workflow) => ({
+ url: `${METADATA_WORKFLOWS_ENDPOINT}/${workflow.id}`,
+ method: 'PATCH',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: {
+ description: workflow.description,
+ },
+ }),
+ extraOptions: {
+ baseQueryType: BaseQueryTypes.fetch,
+ },
+ }),
+ }),
+});
+
+export const { useUpdateWorkflowMutation } = workflowsRestApi;
diff --git a/packages/orchestrator-ui-components/src/stories/Button.jsx b/packages/orchestrator-ui-components/src/stories/Button.jsx
index ccb6aa07a..a4f86ea60 100644
--- a/packages/orchestrator-ui-components/src/stories/Button.jsx
+++ b/packages/orchestrator-ui-components/src/stories/Button.jsx
@@ -1,5 +1,7 @@
import React from 'react';
+
import PropTypes from 'prop-types';
+
import './button.css';
/**
diff --git a/packages/orchestrator-ui-components/src/stories/Configure.mdx b/packages/orchestrator-ui-components/src/stories/Configure.mdx
index 899b90117..8cb080473 100644
--- a/packages/orchestrator-ui-components/src/stories/Configure.mdx
+++ b/packages/orchestrator-ui-components/src/stories/Configure.mdx
@@ -1,20 +1,21 @@
-import { Meta } from '@storybook/blocks';
import Image from 'next/image';
-import Github from './assets/github.svg';
-import Discord from './assets/discord.svg';
-import Youtube from './assets/youtube.svg';
-import Tutorials from './assets/tutorials.svg';
-import Styling from './assets/styling.png';
-import Context from './assets/context.png';
+import { Meta } from '@storybook/blocks';
+
+import Accessibility from './assets/accessibility.png';
+import AddonLibrary from './assets/addon-library.png';
import Assets from './assets/assets.png';
+import Context from './assets/context.png';
+import Discord from './assets/discord.svg';
import Docs from './assets/docs.png';
-import Share from './assets/share.png';
import FigmaPlugin from './assets/figma-plugin.png';
+import Github from './assets/github.svg';
+import Share from './assets/share.png';
+import Styling from './assets/styling.png';
import Testing from './assets/testing.png';
-import Accessibility from './assets/accessibility.png';
import Theming from './assets/theming.png';
-import AddonLibrary from './assets/addon-library.png';
+import Tutorials from './assets/tutorials.svg';
+import Youtube from './assets/youtube.svg';
export const RightArrow = () => (