UGI-Leaderboard / assets /dashAgGridComponentFunctions.js
DontPlanToEnd's picture
Create assets/dashAgGridComponentFunctions.js
2252f98 verified
raw
history blame
2.24 kB
var dagcomponentfuncs = window.dashAgGridComponentFunctions = window.dashAgGridComponentFunctions || {};
// Store original data globally
window.gridOriginalData = null;
dagcomponentfuncs.ModelLink = function(props) {
if (!props.data.Model_Link) {
return props.value; // Just return text if no link
}
return React.createElement(
'a',
{
href: props.data.Model_Link,
target: '_blank',
style: {
color: '#007bff',
textDecoration: 'none'
}
},
props.value
);
};
dagcomponentfuncs.PinRenderer = function(props) {
// Store original data when component first renders
if (!window.gridOriginalData) {
const allRows = [];
props.api.forEachNode(node => {
allRows.push({...node.data});
});
window.gridOriginalData = allRows;
}
return React.createElement(
'div',
{
onClick: function() {
const api = props.api;
const newValue = !props.value;
// Create a copy of the original data and update pin state for clicked row only
const allRows = window.gridOriginalData.map(row => ({
...row,
// Preserve existing pin states and only update the clicked row
pinned: row.Model_Display === props.data.Model_Display ? newValue :
(row.pinned || false)
}));
// Update window.gridOriginalData to maintain pin states
window.gridOriginalData = allRows;
// Separate rows
const pinnedRows = allRows.filter(row => row.pinned);
const unpinnedRows = allRows.filter(row => !row.pinned);
// Update both sections
api.setPinnedTopRowData(pinnedRows);
api.setRowData(unpinnedRows);
},
style: {
cursor: 'pointer',
textAlign: 'center',
fontSize: '16px'
}
},
props.value ? 'πŸ“Œ' : '☐'
);
};