import { action } from '@storybook/addon-actions'; import { ASSETS_URL } from '../../../../consts/common'; import { TextWithBG } from '../../../text-with-bg'; import { _palette } from '../../../@styles/theme-provider'; import type { RenderButtonCellProps, RenderLinkCellProps, RenderSwitchCellProps, RenderTextGroupCellProps } from '../column-types'; import type { CardGridActionIcon, CardGridProps, CardGridColDef, CardGridRowDef } from '../types'; const actionIntegrateHandler = action('integrate button clicked'); const generateActionButtons = (onClick: CardGridActionIcon['onClick']) => [ { icon: { src: `${ASSETS_URL}/icons2/icon_trash.svg` }, value: 'delete', onClick, title: 'Delete' }, { icon: { src: `${ASSETS_URL}/icons2/icon_edit.svg` }, value: 'edit', onClick, title: 'Edit' } ] as CardGridColDef['actions']; interface IntegrationsCardsRowDef extends CardGridRowDef { _data: { enabled?: boolean; // is integration enabled? }; integrationName: RenderTextGroupCellProps['cell']; events: RenderLinkCellProps['cell']; status: RenderSwitchCellProps['cell']; integrate: RenderButtonCellProps['cell']; // hidden if enabled === true } const integrateButtonProps: IntegrationsCardsRowDef['integrate'] = { children: 'Integrate', onClick: actionIntegrateHandler }; export const mockIntegrationsCards = ({ onActionClick }: { onActionClick?: CardGridActionIcon['onClick']; }) => ({ cols: [ { field: 'integrationName', headerName: 'Integration Name', type: 'textGroup', maxWidth: 'none' }, { field: 'events', headerName: 'Events', description: 'Integration Events', type: 'link', align: 'center', width: 96, hideDivider: true }, { field: 'status', headerName: 'Status', description: 'Integration Status', type: 'switch' }, { field: 'integrate', headerName: '', type: 'button', align: 'end', width: 'auto', hideColumn: true, hideDivider: true }, { field: 'actionButtons', type: 'actionButtons', actions: generateActionButtons(onActionClick) } ], rows: [ { id: 'SPLUNK', integrationName: { title: 'Splunk', afterTitle: Healthy, subtitle: 'Forward Perimeter 81 events to your Splunk instance.', avatarProps: { src: `${ASSETS_URL}/images/providers/icon_splunk.svg` } }, events: { children: 'View Events', href: '#integrations/splunk' }, status: { checked: true }, integrate: integrateButtonProps, _data: { enabled: true } }, { id: 'AZURE_SENTINEL', integrationName: { title: 'Microsoft Sentinel', afterTitle: ( Degraded ), subtitle: 'Forward Perimeter 81 events to Microsoft Sentinel.', avatarProps: { src: `${ASSETS_URL}/images/providers/icon_azureSentinel.svg` } }, events: { children: 'View Events', href: '#integrations/azureSentinel' }, status: { checked: true }, integrate: integrateButtonProps, _data: { enabled: true } }, { id: 'AMAZON_S3', integrationName: { title: 'Amazon S3', afterTitle: Tag, subtitle: 'Forward Perimeter 81 event batches to Amazon S3.', avatarProps: { src: `${ASSETS_URL}/images/providers/icon_amazonS3.svg` } }, events: { children: 'View Batches', href: '#integrations/amazonS3' }, status: { checked: false }, integrate: integrateButtonProps, _data: { enabled: true } }, { id: 'CONNECT_WISE', integrationName: { title: 'Connectwise PSA', subtitle: 'Forward Perimeter 81 event batches to Connectwise PSA.', avatarProps: { src: `${ASSETS_URL}/images/providers/icon_connectwisePSA.svg` } }, integrate: integrateButtonProps, _data: { enabled: false }, _props: { // for demo purposes disabled: true, disableInteractive: true, indicator: true } } ] as IntegrationsCardsRowDef[], // example of implementation getCardGridRowProps: props => { const { cols = [], row, rowIndex } = props; const { enabled } = (row._data as IntegrationsCardsRowDef['_data']) || {}; // toggle hidden columns let newCols = cols.map(colDef => typeof colDef.hideColumn !== 'undefined' ? { ...colDef, hideColumn: enabled } : { ...colDef } ); if (!enabled) { newCols = newCols.filter( (colDef, index) => index === 0 || typeof colDef.hideColumn !== 'undefined' ); } return { cols: newCols, row, rowIndex }; } } as CardGridProps);