import * as React from 'react'; import find from 'lodash/find'; import { useObservableState } from 'observable-hooks'; import Box from '@wcpos/components/src/box'; import { useTable } from '@wcpos/components/src/table'; import Text from '@wcpos/components/src/text'; import log from '@wcpos/utils/src/logger'; import PriceWithTax from './price'; interface Props { item: import('@wcpos/database').ProductDocument; column: import('@wcpos/components/src/table').ColumnProps< import('@wcpos/database').ProductDocument >; } /** * */ function getVariablePrices(metaData) { if (!metaData) { log.error('metaData is not defined'); return null; } const metaDataEntry = metaData.find((m) => m.key === '_woocommerce_pos_variable_prices'); if (!metaDataEntry) { log.error("No '_woocommerce_pos_variable_prices' key found in metaData"); return null; } try { const variablePrices = JSON.parse(metaDataEntry.value); return variablePrices; } catch (error) { log.error("Unable to parse '_woocommerce_pos_variable_prices' value into JSON:", error); return null; } } /** * */ const VariablePrice = ({ item: product, column }: Props) => { const taxStatus = useObservableState(product.tax_status$, product.tax_status); const taxClass = useObservableState(product.tax_class$, product.tax_class); const { display } = column; const context = useTable(); const metaData = useObservableState(product.meta_data$, product.meta_data); const variablePrices = getVariablePrices(metaData); /** * TODO - abstract this */ const show = React.useCallback( (key: string): boolean => { const d = find(display, { key }); return !!(d && d.show); }, [display] ); /** * No variable prices found?! */ if (variablePrices && !variablePrices[column.key]) { return null; } // min and max exist by are equal if (variablePrices[column.key].min === variablePrices[column.key].max) { return ( ); } // default, min and max are different return ( - ); }; export default VariablePrice;