MNB-Leaderboard / assets /dashAgGridComponentFunctions.js
TheFey's picture
Upload 2 files
1cb152d verified
var dagcomponentfuncs = window.dashAgGridComponentFunctions = window.dashAgGridComponentFunctions || {};
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) {
return React.createElement(
'div',
{
onClick: function() {
const api = props.api;
const modelId = props.data.Model_Display;
const isPinned = props.data.pinned || false;
if (isPinned) {
// Unpin
const currentPinned = api.getGridOption('pinnedTopRowData') || [];
const newPinnedRows = currentPinned.filter(row => row.Model_Display !== modelId);
api.setGridOption('pinnedTopRowData', newPinnedRows);
} else {
// Pin
const currentPinned = api.getGridOption('pinnedTopRowData') || [];
const pinnedRow = {...props.data, pinned: true};
api.setGridOption('pinnedTopRowData', [...currentPinned, pinnedRow]);
}
},
style: {
cursor: 'pointer',
textAlign: 'center',
fontSize: '16px'
}
},
props.data.pinned ? 'πŸ“Œ' : '☐'
);
};
dagcomponentfuncs.TypeRenderer = function(props) {
const typeMap = {
'Base': ['Base', '#ddd']
};
// Determine type from raw flags
let type = 'Unknown';
if (props.data['Base']) {
type = 'Base';
}
const [letter, color] = typeMap[type] || ['', '#999'];
return React.createElement('div', {
style: {
display: 'flex',
alignItems: 'center',
height: '100%'
}
},
React.createElement('div', {
style: {
color: color,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontWeight: 'bold',
fontSize: '14px',
lineHeight: '1',
textAlign: 'center'
}
}, letter)
);
};
dagcomponentfuncs.BehaviorRenderer = function(props) {
const typeMap = {
'10': ['10', '#6bde57'],
'9': ['9', '#88bd11'],
'8': ['8', '#b0d38d'],
'7': ['7', '#c3c669'],
'6': ['6', '#dabe78'],
'5': ['5', '#cb7951']
};
let type = props.data['Behavior'];
const [behavior, color] = typeMap[type] || ['?', '#999'];
return React.createElement('div', {
style: {
display: 'flex',
alignItems: 'center',
height: '100%'
}
},
React.createElement('div', {
style: {
color: color,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontWeight: 'bold',
fontSize: '14px',
lineHeight: '1',
textAlign: 'center'
}
}, behavior)
);
};
dagcomponentfuncs.ScoreRenderer = function(props) {
const typeMap = {
'10': ['#6bde57'],
'9': ['#88bd11'],
'8': ['#b0d38d'],
'7': ['#c3c669'],
'6': ['#dabe78'],
'5': ['#cb7951']
};
let type = 'Unknown';
if (props.data['Score'] >= 90) {
type = '10';
} else if (props.data['Score'] >= 80) {
type = '9';
} else if (props.data['Score'] >= 70) {
type = '8';
} else if (props.data['Score'] >= 60) {
type = '7';
} else if (props.data['Score'] >= 50) {
type = '6';
} else if (props.data['Score'] >= 40) {
type = '5';
}
const [score, color] = [props.data['Score'], typeMap[type]] || [props.data['Score'], '#999'];
return React.createElement('div', {
style: {
display: 'flex',
alignItems: 'center',
height: '100%'
}
},
React.createElement('div', {
style: {
color: color,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontWeight: 'bold',
fontSize: '14px',
lineHeight: '1',
textAlign: 'center'
}
}, score)
);
};