UNPKG

@orchestrator-ui/orchestrator-ui-components

Version:

Library of UI Components used to display the workflow orchestrator frontend

63 lines (58 loc) 2.08 kB
import { RelatedSubscriptionListItem } from '@/components'; import { RelatedSubscriptionsResponse } from '@/rtk'; import { GraphQLSort, GraphqlFilter, RelatedSubscription } from '@/types'; import { parseDate } from '@/utils'; export const mapRelatedSubscriptionsResponseToRelatedSubscriptionsListItems = ( input?: RelatedSubscriptionsResponse, ): RelatedSubscriptionListItem[] => input?.relatedSubscriptions.map( ({ subscriptionId, description, status, insync, customer, product, startDate, }) => ({ subscriptionId, description, status, insync, customerFullname: customer.fullname, tag: product.tag, startDate: parseDate(startDate), }), ) ?? []; // Some fields are not a key of Process, however backend still supports them // Backend concatenates object name with the key, e.g. product.name becomes productName // Todo: typecast is needed until ticket is implemented: // https://github.com/workfloworchestrator/orchestrator-ui/issues/290 const relatedSubscriptionsFieldMapper = ( field: keyof RelatedSubscriptionListItem, ): keyof RelatedSubscription => { switch (field) { case 'customerFullname': return 'customer' as keyof RelatedSubscription; case 'tag': return 'product' as keyof RelatedSubscription; default: return field; } }; export const graphQlRelatedSubscriptionsSortMapper = ({ field, order, }: GraphQLSort<RelatedSubscriptionListItem>): GraphQLSort<RelatedSubscription> => ({ field: relatedSubscriptionsFieldMapper(field), order, }); export const graphQlRelatedSubscriptionsTerminatedSubscriptionsFilterMapper = ( data?: GraphqlFilter<RelatedSubscriptionListItem>, ): GraphqlFilter<RelatedSubscription> | undefined => data ? { field: relatedSubscriptionsFieldMapper(data?.field), value: data?.value, } : undefined;