Resource Data

This sample defines scheduler resources with SchedulerResourceDescriptor objects, including value, display, background-color, and foreground-color field mappings.

FlexScheduler API Reference | SchedulerDefinition API Reference

import 'bootstrap.css'; import '@mescius/wijmo.styles/wijmo.css'; import './styles.css'; // import * as wjcCore from '@mescius/wijmo'; import * as wjcScheduler from '@mescius/wijmo.scheduler'; import { getDisplayDate, getMeetings, getRooms } from './data'; // document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init(); function init() { const rooms = getRooms(); renderResourceLegend(rooms); new wjcScheduler.FlexScheduler('#theScheduler', { itemsSource: new wjcCore.CollectionView(getMeetings()), resources: [ { fieldExpr: 'roomCode', label: 'Room', dataSource: rooms, valueExpr: 'code', displayExpr: 'roomName', backgroundColorExpr: 'fill', foreColorExpr: 'textColor', }, ], definition: getWeekDefinition(), displayDate: getDisplayDate(), toolbarViewItems: [{ name: 'Week', key: wjcScheduler.SchedulerBuiltInViewItem.Week }], }); } function getWeekDefinition() { const definition = wjcScheduler.createSchedulerDefinitionPreset(wjcScheduler.SchedulerBuiltInViewItem.Week); return Object.assign(Object.assign({}, definition), { rows: { bindings: [ { type: wjcScheduler.SchedulerAxisBindingType.Time, unit: wjcScheduler.SchedulerTimeUnit.Hour, visible: (args) => args.hour >= 8 && args.hour < 17, }, ], } }); } function renderResourceLegend(rooms) { const legend = document.querySelector('#resourceLegend'); rooms.forEach((room) => { const item = document.createElement('li'); const swatch = document.createElement('span'); swatch.className = 'resource-swatch'; swatch.style.backgroundColor = room.fill; item.appendChild(swatch); item.appendChild(document.createTextNode(room.roomName)); legend.appendChild(item); }); }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MESCIUS Wijmo Scheduler Resource Data</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet"> <!-- SystemJS --> <script src="https://cdn.jsdelivr.net/npm/systemjs@0.21.5/dist/system.src.js" integrity="sha512-skZbMyvYdNoZfLmiGn5ii6KmklM82rYX2uWctBhzaXPxJgiv4XBwJnFGr5k8s+6tE1pcR1nuTKghozJHyzMcoA==" crossorigin="anonymous"></script> <script src="systemjs.config.js"></script> <script> System.import('./src/app'); </script> </head> <body> <main class="container-fluid"> <div class="resource-toolbar"> <strong><i class="bi bi-building" aria-hidden="true"></i> Rooms</strong> <span>Colors come from resource data</span> <ul id="resourceLegend" class="resource-legend" aria-label="Meeting rooms"></ul> </div> <div id="theScheduler"></div> </main> </body> </html>
function createDate(day, hour, minute = 0) { return new Date(2026, 4, day, hour, minute); } export function getDisplayDate() { return createDate(13, 9); } export function getRooms() { return [ { code: 'atlas', roomName: 'Atlas', fill: '#1d4ed8', textColor: '#ffffff' }, { code: 'cedar', roomName: 'Cedar', fill: '#0f766e', textColor: '#ffffff' }, { code: 'studio', roomName: 'Design Studio', fill: '#7e22ce', textColor: '#ffffff' }, { code: 'summit', roomName: 'Summit', fill: '#92400e', textColor: '#ffffff' }, ]; } export function getMeetings() { return [ { id: 1, subject: 'Quarterly Planning', start: createDate(11, 9), end: createDate(11, 10, 30), roomCode: 'atlas', }, { id: 2, subject: 'Design Review', start: createDate(11, 11), end: createDate(11, 12), roomCode: 'studio' }, { id: 3, subject: 'Customer Workshop', start: createDate(12, 9, 30), end: createDate(12, 11), roomCode: 'summit', }, { id: 4, subject: 'Hiring Panel', start: createDate(12, 13), end: createDate(12, 14, 30), roomCode: 'cedar' }, { id: 5, subject: 'Product Sync', start: createDate(13, 9), end: createDate(13, 10), roomCode: 'atlas' }, { id: 6, subject: 'Prototype Testing', start: createDate(13, 11), end: createDate(13, 12, 30), roomCode: 'studio', }, { id: 7, subject: 'Partner Briefing', start: createDate(14, 10), end: createDate(14, 11, 30), roomCode: 'summit', }, { id: 8, subject: 'Engineering Retro', start: createDate(14, 14), end: createDate(14, 15), roomCode: 'cedar' }, { id: 9, subject: 'Release Readiness', start: createDate(15, 9, 30), end: createDate(15, 11), roomCode: 'atlas', }, { id: 10, subject: 'Brand Review', start: createDate(15, 13), end: createDate(15, 14), roomCode: 'studio' }, ]; }
body { color: #1f2937; font-size: 15px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; user-select: none; margin: 0; } .container-fluid { box-sizing: border-box; margin: 0; padding: 5px; } .resource-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; min-height: 46px; margin-bottom: 6px; padding: 5px 9px; border: 1px solid #dbe2ea; background: #f8fafc; } .resource-toolbar > span { color: #526170; font-size: 13px; } .resource-legend { display: flex; flex: 1 1 auto; flex-wrap: wrap; gap: 6px 18px; margin: 0; padding: 0; color: #334155; list-style: none; } .resource-legend li { display: inline-flex; align-items: center; min-width: 0; } .resource-swatch { width: 12px; height: 12px; margin-right: 6px; border: 1px solid rgba(0, 0, 0, 0.18); border-radius: 2px; flex: 0 0 auto; } #theScheduler { height: 700px; min-height: 520px; } @media (max-width: 768px) { .resource-legend { gap: 6px 14px; flex-basis: 100%; } #theScheduler { height: 680px; min-height: 680px; } } input, textarea, [contenteditable="true"] { user-select: text; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, }, meta: { '*.css': { loader: 'css' }, }, paths: { // paths serve as alias 'npm:': 'node_modules/', 'cdn:': 'https://cdn.mescius.io/demoapps/packages/wijmojs/5.20262.60-rc/', 'pcdn:': 'https://cdn.jsdelivr.net/npm/', }, // map tells the System loader where to look for things map: { '@mescius/wijmo': 'cdn:@mescius/wijmo/index.js', '@mescius/wijmo.input': 'cdn:@mescius/wijmo.input/index.js', '@mescius/wijmo.scheduler': 'cdn:@mescius/wijmo.scheduler/index.js', '@mescius/wijmo.styles': 'cdn:@mescius/wijmo.styles', '@mescius/wijmo.cultures': 'cdn:@mescius/wijmo.cultures', jszip: 'pcdn:jszip@3.8.0/dist/jszip.js', 'bootstrap.css': 'pcdn:bootstrap@5.3.8/dist/css/bootstrap.min.css', css: 'pcdn:systemjs-plugin-css@0.1.37/css.js', 'plugin-babel': 'pcdn:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'pcdn:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', }, packages: { src: { defaultExtension: 'js', }, node_modules: { defaultExtension: 'js', }, }, }); })(this);