{"id":12027,"date":"2024-01-17T13:20:32","date_gmt":"2024-01-17T10:20:32","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=12027"},"modified":"2025-05-19T14:13:18","modified_gmt":"2025-05-19T11:13:18","slug":"connect-dhtmlx-scheduler-suites-list-control","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/connect-dhtmlx-scheduler-suites-list-control\/","title":{"rendered":"How to Connect DHTMLX Scheduler with Suite&#8217;s List Control"},"content":{"rendered":"<p>DHTMLX Scheduler is a highly demanded <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/\" rel=\"noopener\" target=\"_blank\">JavaScript scheduling tool<\/a> from our product portfolio used by many development teams in their project management apps. Therefore, we often receive requests and various ideas from our customers on improving the efficiency of this JavaScript component. Some of them revolve around the idea of using our Scheduler with various UI widgets and controls within a single project. <\/p>\n<p>In this blog post, you will learn how to connect the DHTMLX Scheduler to the <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxList\/\" rel=\"noopener\" target=\"_blank\">JavaScript List<\/a> (or ListView) control from the latest version of our Suite UI library, thereby enabling end-users to move items (events) between them with drag-and-drop.<\/p>\n<h5>Guide on Connecting DHTMLX Scheduler with Suite&#8217;s List Control<\/h5>\n<p>High interoperability of DHTMLX products is a strong argument for using our Suite library when adding popular UI elements to your web project based on the Scheduler component. Instead of using some other third-party UI widgets that may have some hidden pitfalls, you can take advantage of any Suite widget or control, which can be easily integrated with our JavaScript Scheduler.<\/p>\n<p>For instance, you can implement an additional event management option by connecting the Scheduler component to the List control just like in our demo below. In this sample, you can move items from the List to the Scheduler&#8217;s timeline and vice versa using drag-and-drop operations.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/01\/image1.gif\" alt=\"Scheduler + List Control\" width=\"925\" height=\"503\" class=\"alignnone size-full wp-image-12041\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/w9yhhw32?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Here is a step-by-step guide on how to do this in your web project.<\/p>\n<h6>1. Initializing Scheduler with the Timeline view<\/h6>\n<p>First of all, you need to initialize DHTMLX Scheduler on a web page. You can do it using the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_header_config.html\" rel=\"noopener\" target=\"_blank\">header<\/a><\/strong> configuration property or via the Scheduler&#8217;s markup like in our demo. You can find detailed information on these initialization options in the <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/initialization.html\" rel=\"noopener\" target=\"_blank\">documentation<\/a>. <\/p>\n<p>In our demo, we used the most popular Scheduler view &#8211; <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/timeline_view.html\" rel=\"noopener\" target=\"_blank\">Timeline<\/a>. You can also use other views supporting drag-and-drop such as Day\/Week\/Unit. The Timeline view is added with the corresponding plugin and the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_createtimelineview.html\" rel=\"noopener\" target=\"_blank\">createTimelineView()<\/a><\/strong> method:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">plugins<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; timeline<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; drag_between<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nscheduler.<span class=\"me1\">locale<\/span>.<span class=\"me1\">labels<\/span>.<span class=\"me1\">timeline_tab<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;Timeline&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\nscheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">start_on_monday<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span> sections <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> key<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Reading room 1&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> key<span class=\"sy0\">:<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span> label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Reading room 2&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> key<span class=\"sy0\">:<\/span> <span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span> label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Reading room 3&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> key<span class=\"sy0\">:<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">,<\/span> label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Reading room 4&quot;<\/span> <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nscheduler.<span class=\"me1\">createTimelineView<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;hour&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_date<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;%H:%i&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_step<span class=\"sy0\">:<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_size<span class=\"sy0\">:<\/span> <span class=\"nu0\">24<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_start<span class=\"sy0\">:<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; x_length<span class=\"sy0\">:<\/span> <span class=\"nu0\">24<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; y_unit<span class=\"sy0\">:<\/span> sections<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; y_property<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;section_id&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; render<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;bar&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; second_scale<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; x_unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;day&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; x_date<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;%F %d&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nscheduler.<span class=\"me1\">init<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;scheduler_here&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">new<\/span> <span class=\"kw4\">Date<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2024<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">5<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">29<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>As you can see from the above, the Scheduler configuration also includes the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/dhtmlx_components_integration.html#draganddropbetweenschedulers\" rel=\"noopener\" target=\"_blank\">drag_between<\/a><\/strong> extension that allows moving events (items) outside the Scheduler. Here is the full guide to the <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/timeline_view.html#initialization\" rel=\"noopener\" target=\"_blank\">Timeline view initialization<\/a>.<\/p>\n<h6>2. Initializing List<\/h6>\n<p>Now you can proceed to initialize the DHTMLX List control using the <strong>dhx.List<\/strong> object constructor:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> list <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">List<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;list_both&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;dragMode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;both&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ the list both takes items from other lists and allows dragging its items out as well<\/span><br \/>\n&nbsp; &nbsp;css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dhx_widget--bordered&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;multiselection<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ the possibility of dragging several items between lists<\/span><br \/>\n&nbsp; &nbsp;template<span class=\"sy0\">:<\/span> template<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nlist.<span class=\"me1\">data<\/span>.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>data<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>All steps of this process are fully described in this <a href=\"https:\/\/docs.dhtmlx.com\/suite\/list\/initialization\/\" rel=\"noopener\" target=\"_blank\">section<\/a> of the documentation. <\/p>\n<p>Then, you should also define a template for displaying data in the List:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">function<\/span> template<span class=\"br0\">&#40;<\/span>item<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; let template <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&lt;div class='list_item'&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> <span class=\"st0\">&quot;&lt;div class='item_name'&gt;&quot;<\/span> <span class=\"sy0\">+<\/span> item.<span class=\"me1\">title<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> <span class=\"st0\">&quot;&lt;\/div&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> <span class=\"st0\">&quot;&lt;div class='item_author'&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> item.<span class=\"me1\">authors<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">&quot;, &quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> item.<span class=\"me1\">publication_date<\/span>.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;\/&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">&quot;&lt;\/div&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; template <span class=\"sy0\">+=<\/span> <span class=\"st0\">&quot;&lt;\/div&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> template<span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Just like in the Scheduler component, you also have to enable the capability to drag items to and from the List by adding the <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/list\/api\/list_dragmode_config\/\" rel=\"noopener\" target=\"_blank\">dragMode<\/a><\/strong> property with the &#8220;both&#8221; value. <\/p>\n<p>At this point, you&#8217;ll have basic settings of both components, allowing end-users to drag events (items) only within the Scheduler and the List. Now you need to connect these components to make it possible to drag elements between them.<\/p>\n<h6>3. Dragging List Items to Scheduler<\/h6>\n<p>If you want to drag list items to the Scheduler, it is necessary to use the List&#8217;s <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/list\/api\/list_afterdrag_event\/\" rel=\"noopener\" target=\"_blank\">afterDrag<\/a><\/strong> event that fires after the dragging of an item is finished.<\/p>\n<p>You need to add an event listener to the Scheduler. To do that, you should get access to the Scheduler data area using the <strong>querySelector<\/strong> function:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">let schedEl <span class=\"sy0\">=<\/span> document.<span class=\"me1\">querySelector<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;.dhx_cal_data&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><em><strong>Note:<\/strong> the necessary work with the List data is carried out via the dataCollection API (one of numerous Suite helpers), therefore you should look for the methods aimed at working with data in the corresponding <a href=\"https:\/\/docs.dhtmlx.com\/suite\/category\/datacollection-methods\/\" rel=\"noopener\" target=\"_blank\">documentation section<\/a>.<\/em><\/p>\n<p>In the <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/list\/api\/list_afterdrag_event\/\" rel=\"noopener\" target=\"_blank\">afterDrag<\/a><\/strong> event, you get the List item data (itemData) using the <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/data_collection\/api\/datacollection_getitem_method\/\" rel=\"noopener\" target=\"_blank\">getItem()<\/a><\/strong> method:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">let itemData <span class=\"sy0\">=<\/span> list.<span class=\"me1\">data<\/span>.<span class=\"me1\">getItem<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>The next step is to get the position in the Scheduler timeline, where the dragged element will be dropped. To do that, use the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_getactiondata.html\" rel=\"noopener\" target=\"_blank\">getActionData()<\/a><\/strong> method, where the <strong>event<\/strong> parameter should be passed:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">let actionData <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>event<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>After you get the position for dropping the item in the Scheduler timeline, you need to dedicate some time to working with data. Specifically, you should do three things:<\/p>\n<p>1. In Scheduler, use the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_addevent.html\" rel=\"noopener\" target=\"_blank\">addEvent()<\/a><\/strong> method to create an event that will contain the data of the dragged element. Take data from the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_getactiondata.html\" rel=\"noopener\" target=\"_blank\">getActionData()<\/a><\/strong> method (see above):<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp;<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>schedEl.<span class=\"me1\">contains<\/span><span class=\"br0\">&#40;<\/span>event.<span class=\"me1\">target<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;scheduler.<span class=\"me1\">addEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;start_date<span class=\"sy0\">:<\/span> adctionData.<span class=\"me1\">date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end_date<span class=\"sy0\">:<\/span> scheduler.<span class=\"me1\">date<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span>actionData.<span class=\"me1\">date<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;day&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">title<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;authors<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">authors<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;publication_date<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">publication_date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;section_id<span class=\"sy0\">:<\/span> adctionData.<span class=\"me1\">section<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;list.<span class=\"me1\">data<\/span>.<span class=\"me1\">remove<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;scheduler.<span class=\"me1\">updateView<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>2. Delete the item dragged to the Scheduler timeline from the List data:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">list.<span class=\"me1\">data<\/span>.<span class=\"me1\">remove<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>3. Make use of the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_updateview.html\" rel=\"noopener\" target=\"_blank\">updateView()<\/a><\/strong> method to repaint the Scheduler and display the event added with the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_addevent.html\" rel=\"noopener\" target=\"_blank\">addEvent()<\/a><\/strong> method:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">list.<span class=\"me1\">data<\/span>.<span class=\"me1\">remove<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nscheduler.<span class=\"me1\">updateView<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>Here is what you should get in the end:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">list.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;afterDrag&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>data<span class=\"sy0\">,<\/span> event<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;let itemData <span class=\"sy0\">=<\/span> list.<span class=\"me1\">data<\/span>.<span class=\"me1\">getItem<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;let actionData <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>event<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>schedEl.<span class=\"me1\">contains<\/span><span class=\"br0\">&#40;<\/span>event.<span class=\"me1\">target<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;scheduler.<span class=\"me1\">addEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;start_date<span class=\"sy0\">:<\/span> adctionData.<span class=\"me1\">date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end_date<span class=\"sy0\">:<\/span> scheduler.<span class=\"me1\">date<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span>actionData.<span class=\"me1\">date<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;day&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">title<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;authors<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">authors<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;publication_date<span class=\"sy0\">:<\/span> itemData.<span class=\"me1\">publication_date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;section_id<span class=\"sy0\">:<\/span> adctionData.<span class=\"me1\">section<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;list.<span class=\"me1\">data<\/span>.<span class=\"me1\">remove<\/span><span class=\"br0\">&#40;<\/span>data.<span class=\"me1\">start<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;scheduler.<span class=\"me1\">updateView<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Now items can be dragged from the List and dropped in the Scheduler timeline, but you still cannot do the same with Scheduler events.<\/p>\n<p>4. Dragging Scheduler Events to the List<br \/>\nTo implement this final part, you will need to attach an event listener to the List container using its ID to determine the dropping of the Scheduler event.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">let listEl <span class=\"sy0\">=<\/span> document.<span class=\"me1\">querySelector<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#list_both&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>After that, you should use the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_oneventdropout_event.html\" rel=\"noopener\" target=\"_blank\">onEventDropOut<\/a><\/strong> event that fires when a dragged item is dropped to the area outside the Scheduler. Using the IF condition, you can determine if the element being moved is eventually dropped in the List\/Scheduler. In the latter case, the drag operation will be canceled.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventDropOut&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> ev<span class=\"sy0\">,<\/span> to<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>listEl.<span class=\"me1\">contains<\/span><span class=\"br0\">&#40;<\/span>e.<span class=\"me1\">target<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; list.<span class=\"me1\">data<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">text<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authors<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">authors<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; average_rating<span class=\"sy0\">:<\/span> <span class=\"nu0\">4.59<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publication_date<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">publication_date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; in_store<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isbn13<span class=\"sy0\">:<\/span> <span class=\"nu0\">9780345538376<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; language_code<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;eng&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num_pages<span class=\"sy0\">:<\/span> <span class=\"nu0\">1728<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ratings_count<span class=\"sy0\">:<\/span> <span class=\"nu0\">101233<\/span><span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text_reviews_count<span class=\"sy0\">:<\/span> <span class=\"nu0\">1550<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publisher<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Ballantine Books&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><\/div><\/div>\n<p>All that remains is to find a particular position for the scheduler event in the list. You can do it by using the <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/data_collection\/api\/datacollection_getindex_method\/\" rel=\"noopener\" target=\"_blank\">getIndex()<\/a><\/strong>. Knowing the element&#8217;s index under the cursor, it is possible to place the element above or below it.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">list.<span class=\"me1\">data<\/span>.<span class=\"me1\">getIndex<\/span><span class=\"br0\">&#40;<\/span>e.<span class=\"me1\">target<\/span>.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;data-dhx-id&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">target<\/span>.<span class=\"me1\">closest<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;[data-dhx-id]&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;data-dhx-id&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>After adding the Scheduler event to the List, you need to remove it from the Scheduler timeline using the <strong><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/api__scheduler_deleteevent.html\" rel=\"noopener\" target=\"_blank\">deleteEvent()<\/a><\/strong> method. Here, you should also use the Suite&#8217;s <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/helpers\/await_redraw\/\" rel=\"noopener\" target=\"_blank\">dhx.awaitRedraw()<\/a><\/strong> helper to ensure that the event is deleted only after it is rendered in the List.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">dhx.<span class=\"me1\">awaitRedraw<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">deleteEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>Here is the final piece of code dedicated to moving Scheduler events to the List:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventDropOut&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> ev<span class=\"sy0\">,<\/span> to<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>listEl.<span class=\"me1\">contains<\/span><span class=\"br0\">&#40;<\/span>e.<span class=\"me1\">target<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; list.<span class=\"me1\">data<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">text<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authors<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">authors<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; average_rating<span class=\"sy0\">:<\/span> <span class=\"nu0\">4.59<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publication_date<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">publication_date<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; in_store<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isbn13<span class=\"sy0\">:<\/span> <span class=\"nu0\">9780345538376<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; language_code<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;eng&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num_pages<span class=\"sy0\">:<\/span> <span class=\"nu0\">1728<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ratings_count<span class=\"sy0\">:<\/span> <span class=\"nu0\">101233<\/span><span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text_reviews_count<span class=\"sy0\">:<\/span> <span class=\"nu0\">1550<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publisher<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Ballantine Books&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> list.<span class=\"me1\">data<\/span>.<span class=\"me1\">getIndex<\/span><span class=\"br0\">&#40;<\/span>e.<span class=\"me1\">target<\/span>.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;data-dhx-id&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">target<\/span>.<span class=\"me1\">closest<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;[data-dhx-id]&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;data-dhx-id&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.<span class=\"me1\">awaitRedraw<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">deleteEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>That&#8217;s it. Following these instructions, you can add both DHTMLX Scheduler and Suite&#8217;s List to a web page and move items (events) between them with drag-and-drop as in our <a href=\"https:\/\/snippet.dhtmlx.com\/w9yhhw32?mode=wide\" rel=\"noopener\" target=\"_blank\">sample<\/a>.<\/p>\n<h5>Conclusion<\/h5>\n<p>The tutorial vividly demonstrates the possibility of smoothly combining our JavaScript Scheduler component with the List control. The same approach will work well for integrating DHTMLX Scheduler with any other Suite UI widget supporting the drag-and-drop functionality. If you want to verify this claim, download free 30-day trial versions of DHTMLX <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/download.shtml\" rel=\"noopener\" target=\"_blank\">Scheduler<\/a> and <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/download.shtml\" rel=\"noopener\" target=\"_blank\">Suite<\/a> and get down to it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DHTMLX Scheduler is a highly demanded JavaScript scheduling tool from our product portfolio used by many development teams in their project management apps. Therefore, we often receive requests and &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":12036,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[33,15,10],"class_list":["post-12027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-all-posts","tag-dhtmlxscheduler","tag-dhtmlxsuite"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101014"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=12027"}],"version-history":[{"count":20,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12027\/revisions"}],"predecessor-version":[{"id":13879,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12027\/revisions\/13879"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/12036"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=12027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=12027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=12027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}