File: /var/www/vhosts/uyarreklam.com.tr/httpdocs/item.tar
index.tsx 0000644 00000003053 15156212647 0006425 0 ustar 00 /**
* External dependencies
*/
import classnames from 'classnames';
import { isValidElement } from '@wordpress/element';
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
import type { ReactElement, ReactNode } from 'react';
import type { Currency } from '@woocommerce/price-format';
/**
* Internal dependencies
*/
import './style.scss';
export interface TotalsItemProps {
className?: string;
currency: Currency;
label: string;
// Value may be a number, or react node. Numbers are passed to FormattedMonetaryAmount.
value: number | ReactNode;
description?: ReactNode;
}
const TotalsItemValue = ( {
value,
currency,
}: Partial< TotalsItemProps > ): ReactElement | null => {
if ( isValidElement( value ) ) {
return (
<div className="wc-block-components-totals-item__value">
{ value }
</div>
);
}
return Number.isFinite( value ) ? (
<FormattedMonetaryAmount
className="wc-block-components-totals-item__value"
currency={ currency || {} }
value={ value as number }
/>
) : null;
};
const TotalsItem = ( {
className,
currency,
label,
value,
description,
}: TotalsItemProps ): ReactElement => {
return (
<div
className={ classnames(
'wc-block-components-totals-item',
className
) }
>
<span className="wc-block-components-totals-item__label">
{ label }
</span>
<TotalsItemValue value={ value } currency={ currency } />
<div className="wc-block-components-totals-item__description">
{ description }
</div>
</div>
);
};
export default TotalsItem;
stories/index.tsx 0000644 00000001411 15156212650 0010103 0 ustar 00 /**
* External dependencies
*/
import type { Story, Meta } from '@storybook/react';
import { currencies, currencyControl } from '@woocommerce/storybook-controls';
/**
* Internal dependencies
*/
import Item, { TotalsItemProps } from '..';
export default {
title: 'WooCommerce Blocks/Checkout Blocks/totals/Item',
component: Item,
argTypes: {
currency: currencyControl,
description: { control: { type: 'text' } },
},
args: {
description: 'This item is so interesting',
label: 'Interesting item',
value: 2000,
},
} as Meta< TotalsItemProps >;
const Template: Story< TotalsItemProps > = ( args ) => <Item { ...args } />;
export const Default = Template.bind( {} );
Default.args = {
currency: currencies.USD,
description: 'This item is so interesting',
};
style.scss 0000644 00000000536 15156212650 0006610 0 ustar 00 .wc-block-components-totals-item {
display: flex;
flex-wrap: wrap;
width: 100%;
box-sizing: border-box;
}
.wc-block-components-totals-item__label {
flex-grow: 1;
}
.wc-block-components-totals-item__value {
font-weight: bold;
white-space: nowrap;
}
.wc-block-components-totals-item__description {
@include font-size(small);
width: 100%;
}