Skip to content
🚀 Rapid Application Development with the App Builder

Custom Detail Panel

By default, the custom detail panel shows all columns. The renderDetailPanel can be used to overwrite this behavior.

The renderDetailPanel default code is available here.

✨ Example Tony

The code snippet below renders the detail panel for selected columns only. Thanks to one of our customers, Tony, for letting us publish this example!

js
((columnValues, table) => {

	// Define the exact LABELS you want to include
	const includeLabels = ["Book Title", "Book Author"];

	// Filter column keys based on their label values
	const MyColumns = Object.keys(columnValues).filter(columnName =>
		includeLabels.includes(columnValues[columnName].label)
	);

	const columnElements = MyColumns.map(columnName =>
		`<div class="panel-column">
			<div class="label">${columnValues[columnName].label}</div>
			<div class="content">${columnValues[columnName].renderedValue}</div>
		</div>`
	);

	return `
		<div class="my-custom-detail-panel">
			${columnElements.join("")}
		</div>

		<style>
		.my-custom-detail-panel {
			margin: 0;
			padding: 2rem;
			display: grid;
			grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
			gap: 0.25rem;
		}
		.my-custom-detail-panel .panel-column {
			display: grid;
			grid-template-columns: 2fr 4fr;
			align-items: start;
			gap: 0.5rem;
		}
		.my-custom-detail-panel .panel-column .label {
			text-align: right;
			white-space: nowrap;
			overflow: visible;
			direction: rtl;
		}
		.my-custom-detail-panel .panel-column .content {
			font-weight: bold;
		}
		</style>	
	`

})

Defining the final list of columns to display uses the filter() array method. To learn more about the filter() method, please visit: Array.prototype.filter() – JavaScript

✨ Example rendering only Two Columns

js
((columnValues, table) => {

	// Define the list of columns to display
	const MyColumns = Object.keys(columnValues).splice(12, 2);

	// Create an array of HTML elements (an HTML elements is created for each column)
	const columnElements = MyColumns.map(columnName => 
		`<div class="panel-column">
			<div class="label">${columnValues[columnName].label}</div>
			<div class="content">${columnValues[columnName].renderedValue}</div>
		</div>`
	)

	// Add elements to template
	return `
		<div class="my-custom-detail-panel">
			${columnElements.join("")}
		</div>

		<style>
			.my-custom-detail-panel {
			margin: 0;
			padding: 2rem;
			display: grid;
			grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
			gap: 0.25rem;
			}

			.my-custom-detail-panel .panel-column {
			display: grid;
			grid-template-columns: 2fr 4fr;
			align-items: start;
			gap: 0.5rem;
			}
			
			.my-custom-detail-panel .panel-column .label {
			text-align: right;
			white-space: no-wrap;
			overflow: visible;
			direction: rtl;
			}

			.my-custom-detail-panel .panel-column .content {
			font-weight: bold;
			}
		</style>
	`

})