DevExtreme v24.2 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

Angular Scheduler - Agenda

The Agenda view shows appointments as a simple list. This is the most compact display style because it doesn't render a time scale. Appointments follow each other without empty spaces and their sizes do not depend on event duration.

To add the Agenda view to your Scheduler, declare it in the views array.

The Agenda view does not allow a user to add appointments or modify them by dragging.

For more information about Agenda and other supported views, refer to the following help topic: View Types.

Backend API
<dx-scheduler timeZone="America/Los_Angeles" [dataSource]="appointmentsData" [views]="['agenda']" currentView="agenda" [currentDate]="currentDate" [startDayHour]="9" [height]="600" > <dxi-resource fieldExpr="assigneeId" label="Assignee" [allowMultiple]="true" [dataSource]="assignees" [useColorAsDefault]="true" > </dxi-resource> <dxi-resource fieldExpr="priorityId" label="Priority" [dataSource]="priorities" > </dxi-resource> </dx-scheduler>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxSchedulerModule } from 'devextreme-angular'; import ArrayStore from "devextreme/data/array_store" import { Appointment, Service, Priority, Assignee, } from './app.service'; if (!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ styleUrls: [`app/app.component.css`], selector: 'demo-app', templateUrl: `app/app.component.html`, providers: [Service], }) export class AppComponent { appointmentsData: ArrayStore; assignees: Assignee[]; priorities: Priority[]; currentDate: Date = new Date(2021, 4, 11); constructor(service: Service) { this.assignees = service.getAssignees(); this.priorities = service.getPriorities(); this.appointmentsData = new ArrayStore({ key: 'id', data: service.getAppointments(), }) } } @NgModule({ imports: [ BrowserModule, DxSchedulerModule, ], declarations: [AppComponent], bootstrap: [AppComponent], }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
import { Injectable } from '@angular/core'; export class Appointment { id: number; text: string; startDate: Date; endDate: Date; allDay?: boolean; assigneeId: number[]; priorityId: number; recurrenceRule?: string; } export class Assignee { text: string; id: number; color: string; } export class Priority { text: string; id: number; color: string; } const appointments: Appointment[] = [ { id: 1, text: 'Google AdWords Strategy', startDate: new Date('2021-05-03T16:00:00.000Z'), endDate: new Date('2021-05-03T17:30:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 2, text: 'New Brochures', startDate: new Date('2021-05-03T18:30:00.000Z'), endDate: new Date('2021-05-03T21:15:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 3, text: 'Brochure Design Review', startDate: new Date('2021-05-03T20:15:00.000Z'), endDate: new Date('2021-05-03T23:15:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 4, text: 'Website Re-Design Plan', startDate: new Date('2021-05-03T23:45:00.000Z'), endDate: new Date('2021-05-04T18:15:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 5, text: 'Rollout of New Website and Marketing Brochures', startDate: new Date('2021-05-04T15:15:00.000Z'), endDate: new Date('2021-05-04T17:45:00.000Z'), assigneeId: [4], priorityId: 2, }, { id: 6, text: 'Update Sales Strategy Documents', startDate: new Date('2021-05-04T19:00:00.000Z'), endDate: new Date('2021-05-04T20:45:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 7, text: 'Non-Compete Agreements', startDate: new Date('2021-05-05T15:15:00.000Z'), endDate: new Date('2021-05-05T16:00:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 8, text: 'Approve Hiring of John Jeffers', startDate: new Date('2021-05-05T17:00:00.000Z'), endDate: new Date('2021-05-05T18:15:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 9, text: 'Update NDA Agreement', startDate: new Date('2021-05-05T18:45:00.000Z'), endDate: new Date('2021-05-05T20:45:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 10, text: 'Update Employee Files with New NDA', startDate: new Date('2021-05-05T21:00:00.000Z'), endDate: new Date('2021-05-05T23:45:00.000Z'), assigneeId: [4], priorityId: 1, }, { id: 11, text: 'Submit Questions Regarding New NDA', startDate: new Date('2021-05-07T01:00:00.000Z'), endDate: new Date('2021-05-06T16:30:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 12, text: 'Submit Signed NDA', startDate: new Date('2021-05-06T19:45:00.000Z'), endDate: new Date('2021-05-06T21:00:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 13, text: 'Review Revenue Projections', startDate: new Date('2021-05-07T00:15:00.000Z'), endDate: new Date('2021-05-06T15:00:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 14, text: 'Comment on Revenue Projections', startDate: new Date('2021-05-07T16:15:00.000Z'), endDate: new Date('2021-05-07T18:15:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 15, text: 'Provide New Health Insurance Docs', startDate: new Date('2021-05-07T19:45:00.000Z'), endDate: new Date('2021-05-07T21:15:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 16, text: 'Review Changes to Health Insurance Coverage', startDate: new Date('2021-05-07T21:15:00.000Z'), endDate: new Date('2021-05-07T22:30:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 17, text: 'Review Training Course for any Omissions', startDate: new Date('2021-05-10T21:00:00.000Z'), endDate: new Date('2021-05-11T19:00:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 18, text: 'Recall Rebate Form', startDate: new Date('2021-05-10T19:45:00.000Z'), endDate: new Date('2021-05-10T20:15:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 19, text: 'Create Report on Customer Feedback', startDate: new Date('2021-05-11T22:15:00.000Z'), endDate: new Date('2021-05-12T00:30:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 20, text: 'Review Customer Feedback Report', startDate: new Date('2021-05-11T23:15:00.000Z'), endDate: new Date('2021-05-12T01:30:00.000Z'), assigneeId: [2], priorityId: 1, }, { id: 21, text: 'Customer Feedback Report Analysis', startDate: new Date('2021-05-12T16:30:00.000Z'), endDate: new Date('2021-05-12T17:30:00.000Z'), recurrenceRule: 'FREQ=WEEKLY', assigneeId: [4], priorityId: 2, }, { id: 22, text: 'Prepare Shipping Cost Analysis Report', startDate: new Date('2021-05-12T19:30:00.000Z'), endDate: new Date('2021-05-12T20:30:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 23, text: 'Provide Feedback on Shippers', startDate: new Date('2021-05-12T21:15:00.000Z'), endDate: new Date('2021-05-12T23:00:00.000Z'), assigneeId: [4], priorityId: 2, }, { id: 24, text: 'Select Preferred Shipper', startDate: new Date('2021-05-13T00:30:00.000Z'), endDate: new Date('2021-05-13T03:00:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 25, text: 'Complete Shipper Selection Form', startDate: new Date('2021-05-13T15:30:00.000Z'), endDate: new Date('2021-05-13T17:00:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 26, text: 'Upgrade Server Hardware', startDate: new Date('2021-05-13T19:00:00.000Z'), endDate: new Date('2021-05-13T21:15:00.000Z'), recurrenceRule: 'FREQ=WEEKLY', assigneeId: [2], priorityId: 1, }, { id: 27, text: 'Upgrade Personal Computers', startDate: new Date('2021-05-13T21:45:00.000Z'), endDate: new Date('2021-05-13T23:30:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 28, text: 'Upgrade Apps to Windows RT or stay with WinForms', startDate: new Date('2021-05-14T17:30:00.000Z'), endDate: new Date('2021-05-14T20:00:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 29, text: 'Estimate Time Required to Touch-Enable Apps', startDate: new Date('2021-05-14T21:45:00.000Z'), endDate: new Date('2021-05-14T23:30:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 30, text: 'Report on Tranistion to Touch-Based Apps', startDate: new Date('2021-05-15T01:30:00.000Z'), endDate: new Date('2021-05-15T02:00:00.000Z'), assigneeId: [4], priorityId: 1, }, { id: 31, text: 'Submit New Website Design', startDate: new Date('2021-05-17T15:00:00.000Z'), endDate: new Date('2021-05-17T17:00:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 32, text: 'Create Icons for Website', startDate: new Date('2021-05-17T18:30:00.000Z'), endDate: new Date('2021-05-17T20:15:00.000Z'), assigneeId: [4], priorityId: 2, }, { id: 33, text: 'Create New Product Pages', startDate: new Date('2021-05-18T16:45:00.000Z'), endDate: new Date('2021-05-18T18:45:00.000Z'), assigneeId: [2], priorityId: 1, }, { id: 34, text: 'Approve Website Launch', startDate: new Date('2021-05-18T19:00:00.000Z'), endDate: new Date('2021-05-18T22:15:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 35, text: 'Update Customer Shipping Profiles', startDate: new Date('2021-05-19T16:30:00.000Z'), endDate: new Date('2021-05-19T18:00:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 36, text: 'Create New Shipping Return Labels', startDate: new Date('2021-05-19T19:45:00.000Z'), endDate: new Date('2021-05-19T21:00:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 37, text: 'Get Design for Shipping Return Labels', startDate: new Date('2021-05-19T22:00:00.000Z'), endDate: new Date('2021-05-19T23:30:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 38, text: 'PSD needed for Shipping Return Labels', startDate: new Date('2021-05-20T15:30:00.000Z'), endDate: new Date('2021-05-20T16:15:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 39, text: 'Contact ISP and Discuss Payment Options', startDate: new Date('2021-05-20T18:30:00.000Z'), endDate: new Date('2021-05-20T23:00:00.000Z'), assigneeId: [4], priorityId: 1, }, { id: 40, text: 'Prepare Year-End Support Summary Report', startDate: new Date('2021-05-21T00:00:00.000Z'), endDate: new Date('2021-05-21T03:00:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 41, text: 'Review New Training Material', startDate: new Date('2021-05-21T15:00:00.000Z'), endDate: new Date('2021-05-21T16:15:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 42, text: 'Distribute Training Material to Support Staff', startDate: new Date('2021-05-21T19:45:00.000Z'), endDate: new Date('2021-05-21T21:00:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 43, text: 'Training Material Distribution Schedule', startDate: new Date('2021-05-21T21:15:00.000Z'), endDate: new Date('2021-05-21T23:15:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 44, text: 'Approval on Converting to New HDMI Specification', startDate: new Date('2021-05-24T16:30:00.000Z'), endDate: new Date('2021-05-24T17:15:00.000Z'), assigneeId: [4], priorityId: 2, }, { id: 45, text: 'Create New Spike for Automation Server', startDate: new Date('2021-05-24T17:00:00.000Z'), endDate: new Date('2021-05-24T19:30:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 46, text: 'Code Review - New Automation Server', startDate: new Date('2021-05-24T20:00:00.000Z'), endDate: new Date('2021-05-24T22:00:00.000Z'), assigneeId: [3], priorityId: 1, }, { id: 47, text: 'Confirm Availability for Sales Meeting', startDate: new Date('2021-05-25T17:15:00.000Z'), endDate: new Date('2021-05-25T22:15:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 48, text: 'Reschedule Sales Team Meeting', startDate: new Date('2021-05-25T23:15:00.000Z'), endDate: new Date('2021-05-26T01:00:00.000Z'), assigneeId: [1], priorityId: 1, }, { id: 49, text: 'Send 2 Remotes for Giveaways', startDate: new Date('2021-05-26T16:30:00.000Z'), endDate: new Date('2021-05-26T18:45:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 50, text: 'Discuss Product Giveaways with Management', startDate: new Date('2021-05-26T19:15:00.000Z'), endDate: new Date('2021-05-26T23:45:00.000Z'), assigneeId: [4], priorityId: 1, }, { id: 51, text: 'Replace Desktops on the 3rd Floor', startDate: new Date('2021-05-27T16:30:00.000Z'), endDate: new Date('2021-05-27T17:45:00.000Z'), assigneeId: [2], priorityId: 1, }, { id: 52, text: 'Update Database with New Leads', startDate: new Date('2021-05-27T19:00:00.000Z'), endDate: new Date('2021-05-27T21:15:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 53, text: 'Mail New Leads for Follow Up', startDate: new Date('2021-05-27T21:45:00.000Z'), endDate: new Date('2021-05-27T22:30:00.000Z'), assigneeId: [1], priorityId: 2, }, { id: 54, text: 'Send Territory Sales Breakdown', startDate: new Date('2021-05-28T01:00:00.000Z'), endDate: new Date('2021-05-28T03:00:00.000Z'), assigneeId: [2], priorityId: 2, }, { id: 55, text: 'Territory Sales Breakdown Report', startDate: new Date('2021-05-28T15:45:00.000Z'), endDate: new Date('2021-05-28T16:45:00.000Z'), assigneeId: [3], priorityId: 2, }, { id: 56, text: 'Report on the State of Engineering Dept', startDate: new Date('2021-05-28T21:45:00.000Z'), endDate: new Date('2021-05-28T22:30:00.000Z'), assigneeId: [4], priorityId: 1, }, { id: 57, text: 'Staff Productivity Report', startDate: new Date('2021-05-28T23:15:00.000Z'), endDate: new Date('2021-05-29T02:30:00.000Z'), assigneeId: [1], priorityId: 1, }, ]; const assignees: Assignee[] = [ { text: 'Samantha Bright', id: 1, color: '#727bd2', }, { text: 'John Heart', id: 2, color: '#32c9ed', }, { text: 'Todd Hoffman', id: 3, color: '#2a7ee4', }, { text: 'Sandra Johnson', id: 4, color: '#7b49d3', }, ]; const priorities: Priority[] = [ { text: 'High', id: 1, color: '#cc5c53', }, { text: 'Low', id: 2, color: '#ff9747', }, ]; @Injectable() export class Service { getAppointments(): Appointment[] { return appointments; } getAssignees(): Assignee[] { return assignees; } getPriorities(): Priority[] { return priorities; } }
// In real applications, you should not transpile code in the browser. // You can see how to create your own application with Angular and DevExtreme here: // https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/ const componentNames = [ 'accordion', 'action-sheet', 'autocomplete', 'bar-gauge', 'box', 'bullet', 'button-group', 'button', 'calendar', 'chart', 'chat', 'check-box', 'circular-gauge', 'color-box', 'context-menu', 'data-grid', 'date-box', 'date-range-box', 'defer-rendering', 'diagram', 'draggable', 'drawer', 'drop-down-box', 'drop-down-button', 'file-manager', 'file-uploader', 'filter-builder', 'form', 'funnel', 'gallery', 'gantt', 'html-editor', 'linear-gauge', 'list', 'load-indicator', 'load-panel', 'lookup', 'map', 'menu', 'multi-view', 'nested', 'number-box', 'pagination', 'pie-chart', 'pivot-grid-field-chooser', 'pivot-grid', 'polar-chart', 'popover', 'popup', 'progress-bar', 'radio-group', 'range-selector', 'range-slider', 'recurrence-editor', 'resizable', 'responsive-box', 'sankey', 'scheduler', 'scroll-view', 'select-box', 'slider', 'sortable', 'sparkline', 'speed-dial-action', 'splitter', 'switch', 'tab-panel', 'tabs', 'tag-box', 'text-area', 'text-box', 'tile-view', 'toast', 'toolbar', 'tooltip', 'tree-list', 'tree-map', 'tree-view', 'validation-group', 'validation-summary', 'validator', 'vector-map', ]; window.exports = window.exports || {}; window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, }, meta: { 'typescript': { 'exports': 'ts', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, '@angular/platform-browser-dynamic': { 'esModule': true, }, '@angular/platform-browser': { 'esModule': true, }, '@angular/core': { 'esModule': true, }, '@angular/common': { 'esModule': true, }, '@angular/common/http': { 'esModule': true, }, '@angular/animations': { 'esModule': true, }, '@angular/forms': { 'esModule': true, }, 'openai': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', 'bundles:': '../../../../bundles/', 'externals:': '../../../../bundles/externals/', }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', /* @angular */ '@angular/compiler': 'bundles:@angular/compiler.umd.js', '@angular/platform-browser-dynamic': 'bundles:@angular/platform-browser-dynamic.umd.js', '@angular/core': 'bundles:@angular/core.umd.js', '@angular/core/primitives/signals': 'bundles:@angular/core.primitives.signals.umd.js', '@angular/common': 'bundles:@angular/common.umd.js', '@angular/common/http': 'bundles:@angular/common-http.umd.js', '@angular/platform-browser': 'bundles:@angular/platform-browser.umd.js', '@angular/platform-browser/animations': 'bundles:@angular/platform-browser.umd.js', '@angular/forms': 'bundles:@angular/forms.umd.js', /* devextreme */ 'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12', 'devextreme/bundles/dx.all': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/bundles/dx.all.js', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.5', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.54', /* devextreme-angular umd maps */ 'devextreme-angular': 'bundles:devextreme-angular/devextreme-angular.umd.js', 'devextreme-angular/core': 'bundles:devextreme-angular/devextreme-angular-core.umd.js', 'devextreme-angular/http': 'bundles:devextreme-angular/devextreme-angular-http.umd.js', ...componentNames.reduce((acc, name) => { acc[`devextreme-angular/ui/${name}`] = `bundles:devextreme-angular/devextreme-angular-ui-${name}.umd.js`; acc[`devextreme-angular/ui/${name}/nested`] = `bundles:devextreme-angular/devextreme-angular-ui-${name}-nested.umd.js`; return acc; }, {}), 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@7.5.3/dist/bundles/rxjs.umd.js', 'rxjs/operators': 'npm:rxjs@7.5.3/dist/cjs/operators/index.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts', }, 'devextreme': { defaultExtension: 'js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, 'rxjs': { defaultExtension: 'js', }, 'rxjs/operators': { defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.12/inferno/package.json', 'npm:rxjs@7.5.3/package.json', 'npm:rxjs@7.5.3/operators/package.json', 'npm:devexpress-diagram@2.2.5/package.json', 'npm:devexpress-gantt@4.1.54/package.json', ], }; System.config(window.config); // System.import('@angular/compiler').catch(console.error.bind(console));
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.2.3/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.14.10/bundles/zone.umd.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.13/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import("app").catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>