Advertisement
Guest User

Bryntum Scheduler Big data set demo with filtering

a guest
Mar 6th, 2020
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { DateHelper, FunctionHelper, WidgetHelper, DataGenerator, Scheduler } from '../../build/scheduler.module.js?439592';
  2. import shared from '../_shared/shared.module.js?439592';
  3.  
  4.  
  5.  
  6. //<debug>
  7. // disable certain debugging code to make record generation faster
  8. window.bryntum.DISABLE_DEBUG = true;
  9. //</debug>
  10.  
  11. const [resourceCountField, , eventCountField] = WidgetHelper.append([
  12.     {
  13.         ref                  : 'resourceCountField',
  14.         type                 : 'number',
  15.         placeholder          : 'Number of resources',
  16.         label                : 'Resources',
  17.         tooltip              : 'Enter number of resource rows to generate and press [ENTER]',
  18.         value                : 1000,
  19.         width                : 200,
  20.         keyStrokeChangeDelay : 500,
  21.         changeOnSpin         : 500,
  22.         onChange             : () => generateResources()
  23.     }, {
  24.         type  : 'widget',
  25.         html  : 'X',
  26.         width : 30,
  27.         style : 'text-align: center'
  28.     }, {
  29.         ref                  : 'eventCountField',
  30.         type                 : 'number',
  31.         placeholder          : 'Number of events',
  32.         label                : 'Events',
  33.         tooltip              : 'Enter number of events per resource to generate and press [ENTER]',
  34.         style                : 'margin-right: 0',
  35.         min                  : 1,
  36.         max                  : 100,
  37.         value                : 5,
  38.         width                : 180,
  39.         keyStrokeChangeDelay : 500,
  40.         changeOnSpin         : 500,
  41.         onChange             : () => generateResources()
  42.     }, {
  43.         type        : 'button',
  44.         toggleable  : true,
  45.         color       : 'b-orange b-raised',
  46.         icon        : 'b-fa-filter',
  47.         pressedIcon : 'b-fa-filter',
  48.         text        : 'Filter',
  49.         onToggle({ pressed }) {
  50.             if (pressed) {
  51.                 scheduler.resourceStore.filterBy((resource) => resource.score === 12345);
  52.             } else {
  53.                 scheduler.resourceStore.clearFilters();
  54.             };
  55.         }
  56.     }
  57. ], {
  58.     insertFirst : document.getElementById('tools') || document.body,
  59.     cls         : 'b-bright'
  60. });
  61.  
  62. function generateResources() {
  63.     const
  64.         resourceCount = resourceCountField.value,
  65.         eventCount    = eventCountField.value,
  66.         today         = DateHelper.clearTime(new Date()),
  67.         mask          = WidgetHelper.mask(scheduler.element, 'Generating records'),
  68.         colors        = ['cyan', 'green', 'indigo'];
  69.  
  70.     let schedulerEndDate = today;
  71.  
  72.     // Timeout needed to allow mask time to show
  73.     setTimeout(() => {
  74.         const
  75.             resources    = [],
  76.             events       = [],
  77.             dependencies = [],
  78.             generator    = DataGenerator.generate(resourceCount),
  79.             generate     = () => {
  80.                 for (let i = 0; i < 1000; i++) {
  81.                     const res = generator.next();
  82.                     if (!res.done) {
  83.                         if (i === 0) { res.value.score = 12345; }
  84.                         resources.push(res.value);
  85.  
  86.                         for (let j = 0; j < eventCount; j++) {
  87.                             const
  88.                                 startDate = DateHelper.add(today, Math.round(Math.random() * (j + 1) * 20), 'days'),
  89.                                 duration  = Math.round(Math.random() * 9) + 2,
  90.                                 endDate   = DateHelper.add(startDate, duration, 'days'),
  91.                                 eventId = events.length + 1;
  92.  
  93.                             events.push({
  94.                                 id         : eventId,
  95.                                 name       : 'Task #' + (events.length + 1),
  96.                                 startDate,
  97.                                 duration,
  98.                                 endDate,
  99.                                 resourceId : res.value.id,
  100.                                 eventColor : colors[resources.length % 3]
  101.                             });
  102.  
  103.                             if (j > 0) {
  104.                                 dependencies.push({
  105.                                     id   : dependencies.length + 1,
  106.                                     from : eventId - 1,
  107.                                     to   : eventId
  108.                                 });
  109.                             }
  110.  
  111.                             if (endDate > schedulerEndDate) schedulerEndDate = endDate;
  112.                         }
  113.                     }
  114.                     else {
  115.                         console.timeEnd('generate');
  116.                         console.time('data');
  117.                         scheduler.endDate = schedulerEndDate;
  118.                         scheduler.eventStore.data = events;
  119.                         scheduler.resourceStore.data = resources;
  120.                         scheduler.dependencyStore.data = dependencies;
  121.                         console.timeEnd('data');
  122.                         mask.close();
  123.                         return;
  124.                     }
  125.                 }
  126.                 mask.text = `Generated ${resources.length * eventCount} of ${resourceCount * eventCount} records`;
  127.                 window.requestAnimationFrame(generate);
  128.             };
  129.         console.time('generate');
  130.         generate();
  131.     }, 10);
  132. }
  133.  
  134. let scheduler = new Scheduler({
  135.     adopt      : 'container',
  136.     minHeight  : '20em',
  137.     eventStyle : 'border',
  138.     rowHeight  : 50,
  139.  
  140.     columns : [
  141.         { type : 'rownumber' },
  142.         { text : 'Id', field : 'id', width : 50, hidden : true },
  143.         { text : 'First name', field : 'firstName', flex : 1 },
  144.         { text : 'Surname', field : 'surName', flex : 1 },
  145.         { text : 'Score', field : 'score', flex : 1 }
  146.     ],
  147.  
  148.     features : {
  149.         dependencies : {
  150.             disabled : true
  151.         }
  152.     }
  153. });
  154.  
  155. generateResources();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement