From c20d46ca56feb9dfa56d485e2f473aab1a766de7 Mon Sep 17 00:00:00 2001 From: devadula-nandan <47176249+devadula-nandan@users.noreply.github.com> Date: Fri, 12 Apr 2024 18:25:22 +0530 Subject: [PATCH] refactor(NotFoundEmptyState): added TS types to the component --- .../NotFoundEmptyState/NotFoundEmptyState.tsx | 70 +++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/packages/ibm-products/src/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.tsx b/packages/ibm-products/src/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.tsx index 28060fd0b6..b7cadccc1d 100644 --- a/packages/ibm-products/src/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.tsx +++ b/packages/ibm-products/src/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.tsx @@ -1,12 +1,12 @@ /** - * Copyright IBM Corp. 2020, 2021 + * Copyright IBM Corp. 2020, 2024 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ // Import portions of React that are needed. -import React from 'react'; +import React, { ReactNode } from 'react'; // Other standard imports. import PropTypes from 'prop-types'; @@ -19,15 +19,77 @@ import { pkg } from '../../../settings'; import { EmptyStateContent } from '../EmptyStateContent'; import NotFoundIllustration from '../assets/NotFoundIllustration'; import { defaults } from '../EmptyState'; +import { ButtonProps } from '@carbon/react'; +import { CarbonIconType } from '@carbon/icons-react/lib/CarbonIcon'; // The block part of our conventional BEM class names (blockClass__E--M). const blockClass = `${pkg.prefix}--empty-state`; const componentName = 'NotFoundEmptyState'; +interface NotFoundEmptyStateProps { + /** + * Empty state action button + */ + action?: { + kind?: 'primary' | 'secondary' | 'tertiary'; + renderIcon?: CarbonIconType; + onClick?: ButtonProps['onClick']; + text?: string; + }; + + /** + * Provide an optional class to be applied to the containing node. + */ + className?: string; + + /** + * The alt text for empty state svg images. If not provided , title will be used. + */ + illustrationDescription?: string; + /** + * Designates the position of the illustration relative to the content + */ + illustrationPosition?: 'top' | 'right' | 'bottom' | 'left'; + + /** + * Empty state illustration theme variations. + * To ensure you use the correct themed illustrations, you can conditionally specify light or dark + * based on your app's current theme value. Example: + * `illustrationTheme={appTheme === ('carbon--g100' || 'carbon--g90') ? 'dark' : 'light'}` + */ + illustrationTheme?: 'light' | 'dark'; + + /** + * Empty state link object + */ + link?: { + text?: string | ReactNode; + href?: string; + }; + + /** + * Empty state size + */ + size?: 'lg' | 'sm'; + + /** + * Empty state subtitle + */ + subtitle: string | ReactNode; + + /** + * Empty state title + */ + title: string | ReactNode; +} + /** * The `EmptyState` component follows the Carbon guidelines for empty states with some added specifications around illustration usage. For additional usage guidelines and documentation please refer to the links above. */ -export let NotFoundEmptyState = React.forwardRef( +export let NotFoundEmptyState = React.forwardRef< + HTMLDivElement, + NotFoundEmptyStateProps +>( ( { // The component props, in alphabetical order (for consistency). @@ -72,7 +134,7 @@ export let NotFoundEmptyState = React.forwardRef( link={link} size={size} subtitle={subtitle} - title={title} + title={title || ''} /> );