Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/mean-suits-matter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@orchestrator-ui/orchestrator-ui-components": minor
---

702 Moves products and productsSummary to RTK
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export * from './productsQuery';
export * from './subscriptionsDropdownOptionsQuery';

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@ import {
} from '@/components';
import { WfoFirstPartUUID } from '@/components/WfoTable/WfoFirstPartUUID';
import { mapSortableAndFilterableValuesToTableColumnConfig } from '@/components/WfoTable/utils/mapSortableAndFilterableValuesToTableColumnConfig';
import { getProductsQuery } from '@/graphqlQueries';
import {
useDataDisplayParams,
useQueryWithGraphql,
useQueryWithGraphqlLazy,
useShowToastMessage,
useStoredTableConfig,
} from '@/hooks';
import { useGetProductsQuery, useLazyGetProductsQuery } from '@/rtk';
import type { GraphqlQueryVariables, ProductDefinition } from '@/types';
import { BadgeType, SortOrder } from '@/types';
import {
Expand Down Expand Up @@ -170,20 +168,17 @@ export const WfoProductsPage = () => {
sortBy: sortBy,
query: queryString || undefined,
};
const { data, isFetching, isError } = useQueryWithGraphql(
getProductsQuery(),
const { data, isFetching, isError } = useGetProductsQuery(
graphqlQueryVariables,
['products', 'listPage'],
);
const { getData: getProductsForExport, isFetching: isFetchingCsv } =
useQueryWithGraphqlLazy(
getProductsQuery(),
const [getProductsTrigger, { isFetching: isFetchingCsv }] =
useLazyGetProductsQuery();
const getProductsForExport = () =>
getProductsTrigger(
getQueryVariablesForExport(graphqlQueryVariables),
['products', 'export'],
);
).unwrap();

const { totalItems, sortFields, filterFields } =
data?.products?.pageInfo ?? {};
const { totalItems, sortFields, filterFields } = data?.pageInfo ?? {};

const pagination: Pagination = {
pageSize: pageSize,
Expand All @@ -200,7 +195,7 @@ export const WfoProductsPage = () => {
return (
<WfoMetadataPageLayout>
<WfoTableWithFilter<ProductDefinition>
data={data ? data.products.page : []}
data={data?.products ?? []}
tableColumns={mapSortableAndFilterableValuesToTableColumnConfig(
tableColumns,
sortFields,
Expand All @@ -224,8 +219,8 @@ export const WfoProductsPage = () => {
localStorageKey={METADATA_PRODUCT_TABLE_LOCAL_STORAGE_KEY}
onExportData={csvDownloadHandler(
getProductsForExport,
(data) => data.products.page,
(data) => data.products.pageInfo,
(data) => data?.products ?? [],
(data) => data?.pageInfo || {},
Object.keys(tableColumns),
getCsvFileNameWithDate('Products'),
showToastMessage,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@ import {
SummaryCardStatus,
WfoSummaryCards,
} from '@/components/WfoSummary/WfoSummaryCards';
import { getProductsSummaryQuery } from '@/graphqlQueries';
import { useQueryWithGraphql } from '@/hooks';
import { useGetProductsSummaryQuery } from '@/rtk';
import { useGetProcessListSummaryQuery } from '@/rtk';
import { useGetSubscriptionSummaryListQuery } from '@/rtk/endpoints/subscriptionListSummary';
import {
GraphqlQueryVariables,
Process,
ProductDefinition,
ProductsSummary,
SortOrder,
Subscription,
} from '@/types';
Expand Down Expand Up @@ -51,11 +50,7 @@ export const WfoStartPage = () => {
const {
data: productsSummaryResult,
isLoading: productsSummaryIsFetching,
} = useQueryWithGraphql(
getProductsSummaryQuery(),
productsSummaryQueryVariables,
'productSummary',
);
} = useGetProductsSummaryQuery(productsSummaryQueryVariables);

const latestActiveSubscriptionsSummaryCard: SummaryCard = {
headerTitle: t('activeSubscriptions.headerTitle'),
Expand Down Expand Up @@ -134,11 +129,11 @@ export const WfoStartPage = () => {

const productsSummaryCard: SummaryCard = {
headerTitle: t('products.headerTitle'),
headerValue: productsSummaryResult?.products.pageInfo.totalItems ?? 0,
headerValue: productsSummaryResult?.pageInfo.totalItems ?? 0,
headerStatus: SummaryCardStatus.Neutral,
listTitle: t('products.listTitle'),
listItems:
productsSummaryResult?.products.page
productsSummaryResult?.products
.sort(
(left, right) =>
(right.subscriptions.pageInfo.totalItems ?? 0) -
Expand Down Expand Up @@ -259,12 +254,11 @@ const taskListSummaryQueryVariables: GraphqlQueryVariables<Process> = {
],
};

const productsSummaryQueryVariables: GraphqlQueryVariables<ProductDefinition> =
{
first: 1000,
after: 0,
sortBy: {
field: 'name',
order: SortOrder.ASC,
},
};
const productsSummaryQueryVariables: GraphqlQueryVariables<ProductsSummary> = {
first: 1000,
after: 0,
sortBy: {
field: 'name',
order: SortOrder.ASC,
},
};
12 changes: 6 additions & 6 deletions packages/orchestrator-ui-components/src/rtk/endpoints/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
export * from './customers';
export * from './processList';
export * from './settings';
export * from './streamMessages';
export * from './inSync';
export * from './processSteps';
export * from './processListSummary';
export * from './metadata';
export * from './processList';
export * from './processListSummary';
export * from './processSteps';
export * from './products';
export * from './productsSummary';
export * from './relatedSubscriptions';
export * from './settings';
export * from './streamMessages';
export * from './subscriptionDetail';
export * from './relatedSubscriptions';
76 changes: 76 additions & 0 deletions packages/orchestrator-ui-components/src/rtk/endpoints/products.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { orchestratorApi } from '@/rtk';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
ProductDefinition,
ProductDefinitionsResult,
} from '@/types';

export const products = `
query MetadataProducts(
$first: Int!
$after: Int!
$sortBy: [GraphqlSort!]
$query: String
) {
products(first: $first, after: $after, sortBy: $sortBy, query: $query) {
page {
productId
name
description
tag
createdAt
productType
status
productBlocks {
name
}
fixedInputs {
name
value
}
endDate
}
pageInfo {
endCursor
hasNextPage
hasPreviousPage
startCursor
totalItems
sortFields
filterFields
}
}
}
`;

export type ProductsResponse = {
products: ProductDefinition[];
} & BaseGraphQlResult;

const productsApi = orchestratorApi.injectEndpoints({
endpoints: (builder) => ({
getProducts: builder.query<
ProductsResponse,
GraphqlQueryVariables<ProductDefinition>
>({
query: (variables) => ({
document: products,
variables,
}),
transformResponse: (
response: ProductDefinitionsResult,
): ProductsResponse => {
const products = response.products.page || [];
const pageInfo = response.products.pageInfo || {};

return {
products,
pageInfo,
};
},
}),
}),
});

export const { useGetProductsQuery, useLazyGetProductsQuery } = productsApi;
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { orchestratorApi } from '@/rtk';
import {
BaseGraphQlResult,
GraphqlQueryVariables,
ProductDefinitionsResult,
ProductsSummary,
} from '@/types';

export const productsSummary = `
query MetadataProducts(
$first: Int!
$after: Int!
$sortBy: [GraphqlSort!]
) {
products(first: $first, after: $after, sortBy: $sortBy) {
page {
name
subscriptions {
pageInfo {
totalItems
}
}
}
pageInfo {
totalItems
startCursor
endCursor
}
}
}
`;

export type ProductsSummaryResponse = {
products: ProductsSummary[];
} & BaseGraphQlResult;

const productsSummaryApi = orchestratorApi.injectEndpoints({
endpoints: (builder) => ({
getProductsSummary: builder.query<
ProductsSummaryResponse,
GraphqlQueryVariables<ProductsSummary>
>({
query: (variables) => ({
document: productsSummary,
variables,
}),
transformResponse: (
response: ProductDefinitionsResult<ProductsSummary>,
): ProductsSummaryResponse => {
const products = response.products.page || [];
const pageInfo = response.products.pageInfo || {};

return {
products,
pageInfo,
};
},
}),
}),
});

export const { useGetProductsSummaryQuery } = productsSummaryApi;
3 changes: 3 additions & 0 deletions packages/orchestrator-ui-components/src/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ export interface ProductDefinition {
fixedInputs: Pick<FixedInputDefinition, 'name' | 'value'>[];
}

export type ProductsSummary = Pick<ProductDefinition, 'name'> &
SubscriptionsResult<never>;

export enum WorkflowTarget {
CREATE = 'create',
MODIFY = 'modify',
Expand Down