Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Tech Preview feature not working for Integration Editor #409

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a378e2a
Fix duplicate connection prop preventing tech preview check from work…
kahboom Jun 4, 2019
4ddb392
Rename to UIStepsWithToolbar and move to integrations module
kahboom Jun 4, 2019
4592d77
create EditorSteps and EditorStepsWithToolbar for reuse in integratio…
kahboom Jun 4, 2019
901cadb
Rework the typings for compatibility
kahboom Jun 4, 2019
9ed4aaa
remove deleteConnections, menu, notifications
kahboom Jun 5, 2019
d79d02d
rename connections to editorSteps
kahboom Jun 5, 2019
bee0d5d
Use getMetadataValue to check for metadata, rm map
kahboom Jun 6, 2019
ac3f257
Check for connection prop
kahboom Jun 6, 2019
336c44e
Update name for props, interface
kahboom Jun 7, 2019
fd07268
Refactor check for configurationRequired
kahboom Jun 10, 2019
8555271
Rm unnecessary default values obj
kahboom Jun 10, 2019
6cfa27a
Rm unused Connection model
kahboom Jun 10, 2019
6dc03e3
Create reusable check for tech preview flag
kahboom Jun 10, 2019
27d96cb
Refactor Connections.tsx to use helper functions
kahboom Jun 10, 2019
3581bc2
Rename check for techPreview
kahboom Jun 10, 2019
922cbd6
Rm if statements, add configRequired prop to useConnection
kahboom Jun 11, 2019
9477252
Pass connector directly to isTechPreview
kahboom Jun 11, 2019
214ce60
Rm reference to isConfigurationRequired from EditorSteps
kahboom Jun 11, 2019
abcdffc
Rm reference to helpers from EditorSteps
kahboom Jun 11, 2019
a745687
Add transformConnectorsResponse and other improvements
kahboom Jun 11, 2019
f3aa020
Add configRequired and isTechPreview props to utils and set to false …
kahboom Jun 11, 2019
8fd0c36
Make props for IConnectionOverview optional
kahboom Jun 11, 2019
c104c7f
Move IConnectionOverview to extra.d.ts and rm board prop
kahboom Jun 12, 2019
20c98c6
Add techPreview to useConnector
kahboom Jun 12, 2019
97df3bd
Refactor tech preview check in ConnectorsPage.tsx
kahboom Jun 12, 2019
f315a09
Refactor the bejesus out of Connection and ConnectionOverview
kahboom Jun 13, 2019
de5945f
stricter interfaces, upgrade to IConnectionOverview in Connections.ts…
kahboom Jun 14, 2019
539aea9
adapt utils toUIStep to accommodate for isTechPreview and configRequi…
kahboom Jun 14, 2019
c8cfc7e
Rename configRequired to isConfigRequired
kahboom Jun 14, 2019
b953e8d
Fix ConnectionCard test
kahboom Jun 14, 2019
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
18 changes: 9 additions & 9 deletions app/ui-react/packages/api/src/WithConnections.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ConnectionOverview } from '@syndesis/models';
import { IConnectionOverview } from '@syndesis/models';
import * as React from 'react';
import { IFetchState } from './Fetch';
import { ServerEventsContext } from './ServerEventsContext';
Expand All @@ -7,14 +7,14 @@ import { transformConnectionResponse } from './useConnection';
import { WithChangeListener } from './WithChangeListener';
import { IChangeEvent } from './WithServerEvents';

export function getConnectionsForDisplay(connections: ConnectionOverview[]) {
export function getConnectionsForDisplay(connections: IConnectionOverview[]) {
return connections.filter(
c => !c.metadata || !c.metadata['hide-from-connection-pages']
);
}

export function getConnectionsWithFromAction(
connections: ConnectionOverview[]
connections: IConnectionOverview[]
) {
return connections.filter(connection => {
if (!connection.connector) {
Expand All @@ -27,7 +27,7 @@ export function getConnectionsWithFromAction(
});
}

export function getConnectionsWithToAction(connections: ConnectionOverview[]) {
export function getConnectionsWithToAction(connections: IConnectionOverview[]) {
return connections.filter(connection => {
if (!connection.connector) {
// safety net
Expand All @@ -44,15 +44,15 @@ export function getConnectionsWithToAction(connections: ConnectionOverview[]) {
}

export interface IConnectionsFetchResponse {
readonly items: ConnectionOverview[];
readonly items: IConnectionOverview[];
readonly totalCount: number;
}

export interface IConnectionsResponse {
readonly connectionsForDisplay: ConnectionOverview[];
readonly connectionsWithToAction: ConnectionOverview[];
readonly connectionsWithFromAction: ConnectionOverview[];
readonly dangerouslyUnfilteredConnections: ConnectionOverview[];
readonly connectionsForDisplay: IConnectionOverview[];
readonly connectionsWithToAction: IConnectionOverview[];
readonly connectionsWithFromAction: IConnectionOverview[];
readonly dangerouslyUnfilteredConnections: IConnectionOverview[];
readonly totalCount: number;
}

Expand Down
9 changes: 5 additions & 4 deletions app/ui-react/packages/api/src/WithConnector.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
import { Connector } from '@syndesis/models';
import { IConnector } from '@syndesis/models';
import * as React from 'react';
import { IFetchState } from './Fetch';
import { SyndesisFetch } from './SyndesisFetch';

export interface IWithConnectorProps {
id: string;
initialValue?: Connector;
children(props: IFetchState<Connector>): any;
initialValue?: IConnector;
children(props: IFetchState<IConnector>): any;
}

export class WithConnector extends React.Component<IWithConnectorProps> {
public render() {
return (
<SyndesisFetch<Connector>
<SyndesisFetch<IConnector>
url={`/connectors/${this.props.id}`}
defaultValue={{
actions: [],
isTechPreview: false,
name: '',
}}
initialValue={this.props.initialValue}
Expand Down
17 changes: 10 additions & 7 deletions app/ui-react/packages/api/src/WithConnectors.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import { Connector } from '@syndesis/models';
import { IConnector } from '@syndesis/models';
import * as React from 'react';
import { IFetchState } from './Fetch';
import { ServerEventsContext } from './ServerEventsContext';
import { SyndesisFetch } from './SyndesisFetch';
import { transformConnectorResponse } from './useConnector';
import { WithChangeListener } from './WithChangeListener';
import { IChangeEvent } from './WithServerEvents';

export interface IConnectorsFetchResponse {
readonly items: Connector[];
readonly items: IConnector[];
readonly totalCount: number;
}

export interface IConnectorsResponse {
readonly connectorsForDisplay: Connector[];
readonly dangerouslyUnfilteredConnections: Connector[];
readonly connectorsForDisplay: IConnector[];
readonly dangerouslyUnfilteredConnections: IConnector[];
readonly totalCount: number;
}

Expand All @@ -22,7 +23,7 @@ export interface IWithConnectorsProps {
children(props: IFetchState<IConnectorsResponse>): any;
}

export function getConnectorsForDisplay(connectors: Connector[]) {
export function getConnectorsForDisplay(connectors: IConnector[]) {
return connectors.filter(
c => !c.metadata || !c.metadata['hide-from-connection-pages']
);
Expand All @@ -31,11 +32,13 @@ export function getConnectorsForDisplay(connectors: Connector[]) {
export function transformConnectorsResponse(
response: IFetchState<IConnectorsFetchResponse>
): IFetchState<IConnectorsResponse> {
const connectors = response.data.items.map(transformConnectorResponse);

return {
...response,
data: {
connectorsForDisplay: getConnectorsForDisplay(response.data.items),
dangerouslyUnfilteredConnections: response.data.items,
connectorsForDisplay: getConnectorsForDisplay(connectors),
dangerouslyUnfilteredConnections: connectors,
totalCount: response.data.totalCount,
},
};
Expand Down
33 changes: 28 additions & 5 deletions app/ui-react/packages/api/src/helpers/connectionFunctions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import {
ActionDescriptorStep,
ConfigurationProperty,
Connection,
ConnectionOverview,
Connector,
ConnectionBulletinBoard,
IConnectionOverview,
IConnector,
} from '@syndesis/models';
import { getMetadataValue } from './integrationFunctions';

export function getActionsWithFrom(actions: Action[] = []) {
return actions.filter(a => a.pattern === 'From');
Expand All @@ -25,15 +27,15 @@ export function getConnectionMetadataValue(
}

export function getConnectionConnector(
connection: ConnectionOverview
): Connector {
connection: IConnectionOverview
): IConnector {
if (!connection.connector) {
throw Error(`FATAL: Connection ${connection.id} doesn't have a connector`);
}
return connection.connector;
}

export function getConnectorActions(connector: Connector): Action[] {
export function getConnectorActions(connector: IConnector): Action[] {
return connector.actions;
}

Expand Down Expand Up @@ -82,6 +84,27 @@ export function getActionStepDefinition(
return step.properties;
}

/**
* Checks whether the ConnectionBulletinBoard provided
* @param board
*/
export function isConfigRequired(board: ConnectionBulletinBoard): boolean {
return (board.notices || board.warnings || board.errors)! > 0;
}

/**
* Checks whether or not the provided object is a technical preview.
* Accepts a Connector.
* Returns a boolean for whether or not the metadata `tech-preview` key
* returns a string value of 'true'
* @param connector
*/
export function isTechPreview(connector: IConnector): boolean {
return (
getMetadataValue<string>('tech-preview', connector.metadata) === 'true'
);
}

/**
* Return bool if a connection is derived, meaning that its configuration comes
* from an OAuth flow. This helper is to work around a bug in the swagger definition
Expand Down
34 changes: 23 additions & 11 deletions app/ui-react/packages/api/src/useConnection.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,38 @@
import { ConnectionOverview } from '@syndesis/models';
import { getActionsWithFrom, getActionsWithTo, isDerived } from './helpers';
import { IConnectionOverview } from '@syndesis/models';
import {
getActionsWithFrom,
getActionsWithTo,
isConfigRequired,
isDerived,
} from './helpers';
import { useApiResource } from './useApiResource';
import { transformConnectorResponse } from './useConnector';

export const transformConnectionResponse = (connection: ConnectionOverview) => {
export const transformConnectionResponse = (
connection: IConnectionOverview
) => {
const connector = connection.connector
? transformConnectorResponse(connection.connector)
: undefined;
return {
...connection,
actionsWithFrom: getActionsWithFrom(
connection.connector ? connection.connector.actions : []
),
actionsWithTo: getActionsWithTo(
connection.connector ? connection.connector.actions : []
),
actionsWithFrom: getActionsWithFrom(connector ? connector.actions : []),
actionsWithTo: getActionsWithTo(connector ? connector.actions : []),
connector,
derived: isDerived(connection),
isConfigRequired: isConfigRequired(connection),
isTechPreview: connector ? connector.isTechPreview : false,
};
};

export const useConnection = (
connectionId: string,
initialValue?: ConnectionOverview
initialValue?: IConnectionOverview
) => {
return useApiResource<ConnectionOverview>({
return useApiResource<IConnectionOverview>({
defaultValue: {
isConfigRequired: false,
isTechPreview: false,
name: '',
},
initialValue,
Expand Down
22 changes: 19 additions & 3 deletions app/ui-react/packages/api/src/useConnector.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
import { Connector } from '@syndesis/models';
import { IConnector } from '@syndesis/models';
import { isTechPreview } from './helpers';
import { useApiResource } from './useApiResource';

export const useConnector = (connectorId: string, initialValue?: Connector) => {
return useApiResource<Connector>({
export const transformConnectorResponse = (connector: IConnector) => {
return {
...connector,
isTechPreview: isTechPreview(connector),
};
};

export const useConnector = (
connectorId: string,
initialValue?: IConnector
) => {
return useApiResource<IConnector>({
defaultValue: {
actions: [],
isTechPreview: false,
name: '',
},
initialValue,
transformResponse: async response => {
const connector = await response.json();
return transformConnectorResponse(connector);
},
url: `/connectors/${connectorId}`,
});
};
17 changes: 17 additions & 0 deletions app/ui-react/packages/models/src/extra.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
import { Omit } from 'react-router';
import {
Connector,
ConnectionBulletinBoard,
ConnectionOverview,
} from '../dist';
import {
ConfigurationProperty,
Connection,
Expand Down Expand Up @@ -57,6 +63,17 @@ export interface IConfigurationProperty extends ConfigurationProperty {
[name: string]: any;
}

export interface IConnectionOverview
extends Omit<ConnectionOverview, 'connector'> {
connector?: IConnector;
isConfigRequired: boolean;
isTechPreview: boolean;
}

export interface IConnector extends Connector {
isTechPreview: boolean;
}

// Extended connection interface to add support for the 'iconFile' property
export interface IConnectionWithIconFile extends Connection {
icon?: any;
Expand Down
12 changes: 6 additions & 6 deletions app/ui-react/packages/ui/src/Connection/ConnectionCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,16 @@ export interface IConnectionCardMenuProps {
}

export interface IConnectionProps {
configurationRequired?: boolean;
description: string;
href: H.LocationDescriptor;
i18nCannotDelete?: string;
i18nConfigurationRequired?: string;
i18nConfigRequired?: string;
i18nTechPreview?: string;
icon: React.ReactNode;
isConfigRequired?: boolean;
isTechPreview?: boolean;
menuProps?: IConnectionCardMenuProps;
name: string;
techPreview?: boolean;
techPreviewPopoverHtml?: React.ReactNode;
}

Expand Down Expand Up @@ -131,7 +131,7 @@ export class ConnectionCard extends React.PureComponent<
matchHeight={true}
className={'connection-card'}
>
{this.props.techPreview && (
{this.props.isTechPreview && (
<div
className="connection-card__tech-preview"
data-testid={'connection-card-tech-preview-heading'}
Expand Down Expand Up @@ -242,15 +242,15 @@ export class ConnectionCard extends React.PureComponent<
</Text>
</div>
</Card.Body>
{this.props.configurationRequired && (
{this.props.isConfigRequired && (
<Card.Footer
className={
'connection-card__footer--config-required alert alert-warning'
}
data-testid={'connection-card-config-required-footer'}
>
<Icon type={'pf'} name={'warning-triangle-o'} size={'2x'} />
{this.props.i18nConfigurationRequired}
{this.props.i18nConfigRequired}
</Card.Footer>
)}
</Link>
Expand Down
Loading