Main LWC HTML:
<template>
<c-product-code-entry onproductidchanged={passProductIdToDisplayPanel}></c-product-code-entry>
<c-stock-display-panel></c-stock-display-panel>
</template>
Main LWC JS:
import { LightningElement } from 'lwc';
export default class ProductStockDisplay extends LightningElement
{
passProductIdToDisplayPanel(event)
{
//call the method in the child display panel to fetch the record details
var inputProductCode = event.detail.prodId;
console.log('inputProductCode Received');
console.log(inputProductCode);
this.template.querySelector('c-stock-display-panel').fetchProductDetails(inputProductCode);
}
}
Event Firing Child LWC html:
<template>
<lightning-card title="Enter Product Code below">
<lightning-input label="Product Code" class="inputProductCode"></lightning-input>
<br/>
<lightning-button variant="brand" label="Fetch Product Details" title="Product Details" onclick={passProductCodeToParent} class="slds-m-left_x-small"></lightning-button>
</lightning-card>
</template>
Event firing Child LWC JS:
import { LightningElement,track } from 'lwc';
export default class ProductCodeEntry extends LightningElement
{
passProductCodeToParent(event)
{
var inputProductCode = this.template.querySelector('.inputProductCode').value
console.log('inputProductCode');
console.log(inputProductCode);
const productIdChanged = new CustomEvent('productidchanged',{detail:{prodId:inputProductCode}});
this.dispatchEvent(productIdChanged);
}
}
Second Child HTML:
<template>
<div class="mainDisplayPanel">
<lightning-card footer="Remaining Stock Display" title="Remaining stock display">
<template if:true={itemStatus.itemInStock}>
<!--<lightning-badge label="Product Name"></lightning-badge>-->
Item is in stock.
</template>
<template if:true={itemStatus.itemNotInStock}>
Item is out of stock.
</template>
</lightning-card>
</div>
</template>
Second Child JS:
import { api, LightningElement } from 'lwc';
export default class StockDisplayPanel extends LightningElement
{
@api itemStatus = {itemInStock : false,itemNotInStock : false};
@api
fetchProductDetails(inpProdCode)
{
console.log('In Peer Panel finally :: ');
console.log(inpProdCode);
if(inpProdCode == 'CN60K' || inpProdCode == 'CN30K')
{
try
{
console.log('Stock block');
console.log('itemStatus Before');
console.log(itemStatus);
this.itemStatus.itemInStock = true;
this.itemStatus.itemNotInStock = false;
console.log('itemStatus After');
console.log(itemStatus);
}
catch(err)
{
console.log('err');
console.log(err);
}
}
else
{
console.log('No Stock block');
this.itemStatus.itemInStock = false;
this.itemStatus.itemNotInStock = true;
}
}
}