UNPKG

jqwidgets-scripts-custom

Version:

jQWidgets is an advanced jQuery, Angular 7, Vue, React, ASP .NET MVC, Custom Elements and HTML5 UI framework.

259 lines (244 loc) 10.1 kB
import React from 'react'; import ReactDOM from 'react-dom'; import JqxScheduler from '../../../jqwidgets-react/react_jqxscheduler.js'; import JqxButton from '../../../jqwidgets-react/react_jqxbuttons.js'; class App extends React.Component { componentDidMount() { this.refs.myScheduler.ensureAppointmentVisible('id1'); } render() { let appointments = new Array(); let appointment1 = { id: 'id1', description: 'George brings projector for presentations.', location: '', subject: 'Fashion Expo', calendar: 'East Coast Events', start: new Date(2016, 10, 15, 9, 0, 0), end: new Date(2016, 10, 18, 16, 0, 0) } let appointment2 = { id: 'id2', description: '', location: '', subject: 'Cloud Data Expo', calendar: 'Middle West Events', start: new Date(2016, 10, 20, 10, 0, 0), end: new Date(2016, 10, 22, 15, 0, 0) } let appointment3 = { id: 'id3', description: '', location: '', subject: 'Digital Media Conference', calendar: 'West Coast Events', start: new Date(2016, 10, 23, 11, 0, 0), end: new Date(2016, 10, 28, 13, 0, 0) } let appointment4 = { id: 'id4', description: '', location: '', subject: 'Modern Software Development Conference', calendar: 'West Coast Events', start: new Date(2016, 10, 10, 16, 0, 0), end: new Date(2016, 10, 12, 18, 0, 0) } let appointment5 = { id: 'id5', description: '', location: '', subject: 'Marketing Future Expo', calendar: 'Middle West Events', start: new Date(2016, 10, 5, 15, 0, 0), end: new Date(2016, 10, 6, 17, 0, 0) } let appointment6 = { id: 'id6', description: '', location: '', subject: 'Future Computing', calendar: 'East Coast Events', start: new Date(2016, 10, 13, 14, 0, 0), end: new Date(2016, 10, 20, 16, 0, 0) } appointments.push(appointment1); appointments.push(appointment2); appointments.push(appointment3); appointments.push(appointment4); appointments.push(appointment5); appointments.push(appointment6); // prepare the data let source = { dataType: 'array', dataFields: [ { name: 'id', type: 'string' }, { name: 'description', type: 'string' }, { name: 'location', type: 'string' }, { name: 'subject', type: 'string' }, { name: 'calendar', type: 'string' }, { name: 'start', type: 'date' }, { name: 'end', type: 'date' } ], id: 'id', localData: appointments }; let adapter = new $.jqx.dataAdapter(source); let printButton = null; let resources = { colorScheme: 'scheme01', dataField: 'calendar', source: new $.jqx.dataAdapter(source) }; let appointmentDataFields = { from: 'start', to: 'end', id: 'id', description: 'description', location: 'place', subject: 'subject', resourceId: 'calendar' }; let views = [ 'dayView', 'weekView', 'monthView' ]; // called when the dialog is craeted. let editDialogCreate = (dialog, fields, editAppointment) => { // hide repeat option fields.repeatContainer.hide(); // hide status option fields.statusContainer.hide(); // hide timeZone option fields.timeZoneContainer.hide(); // hide color option fields.colorContainer.hide(); fields.subjectLabel.html("Title"); fields.locationLabel.html("Where"); fields.fromLabel.html("Start"); fields.toLabel.html("End"); fields.resourceLabel.html("Calendar"); // add custom print button. let buttonContainer = document.createElement('div'); buttonContainer.id = 'printButton'; fields.buttons.append(buttonContainer); printButton = ReactDOM.render( <JqxButton style={{ marginLeft: 5, float: 'right' }} value='Print' theme={this.theme} />, document.getElementById('printButton') ); printButton.on('click', () => { let appointment = editAppointment; if (!appointment && printButton.disabled()) { return; } let appointmentContent = "<table class='printTable'>" + "<tr>" + "<td class='label'>Title</td>" + "<td>" + fields.subject.val() + "</td>" + "</tr>" + "<tr>" + "<td class='label'>Start</td>" + "<td>" + fields.from.val() + "</td>" + "</tr>" + "<tr>" + "<td class='label'>End</td>" + "<td>" + fields.to.val() + "</td>" + "</tr>" + "<tr>" + "<td class='label'>Where</td>" + "<td>" + fields.location.val() + "</td>" + "</tr>" + "<tr>" + "<td class='label'>Calendar</td>" + "<td>" + fields.resource.val() + "</td>" + "</tr>" + "</table>"; let newWindow = window.open('', '', 'width=800, height=500'), document = newWindow.document.open(), pageContent = '<!DOCTYPE html>\n' + '<html>\n' + '<head>\n' + '<meta charset="utf-8" />\n' + '<title>jQWidgets Scheduler</title>\n' + '<style>\n' + '.printTable {\n' + 'border-color: #aaa;\n' + '}\n' + '.printTable .label {\n' + 'font-weight: bold;\n' + '}\n' + '.printTable td{\n' + 'padding: 4px 3px;\n' + 'border: 1px solid #DDD;\n' + 'vertical-align: top;\n' + '}\n' + '</style>' + '</head>\n' + '<body>\n' + appointmentContent + '\n</body>\n</html>'; try { document.write(pageContent); document.close(); } catch (error) { } newWindow.print(); }); }; /** * called when the dialog is opened. Returning true as a result disables the built-in handler. * @param {Object} dialog - jqxWindow's jQuery object. * @param {Object} fields - Object with all widgets inside the dialog. * @param {Object} the selected appointment instance or NULL when the dialog is opened from cells selection. */ let editDialogOpen = (dialog, fields, editAppointment) => { if (!editAppointment && printButton) { printButton.disabled(true); } else if (editAppointment && printButton) { printButton.disabled(false); } }; /** * called when the dialog is closed. * @param {Object} dialog - jqxWindow's jQuery object. * @param {Object} fields - Object with all widgets inside the dialog. * @param {Object} the selected appointment instance or NULL when the dialog is opened from cells selection. */ let editDialogClose = (dialog, fields, editAppointment) => { }; /** * called when a key is pressed while the dialog is on focus. Returning true or false as a result disables the built-in keyDown handler. * @param {Object} dialog - jqxWindow's jQuery object. * @param {Object} fields - Object with all widgets inside the dialog. * @param {Object} the selected appointment instance or NULL when the dialog is opened from cells selection. * @param {jQuery.Event Object} the keyDown event. */ let editDialogKeyDown = (dialog, fields, editAppointment, event) => { }; return ( <JqxScheduler ref='myScheduler' date={new $.jqx.date(2016, 11, 23)} width={850} height={600} source={adapter} showLegend={true} editDialogCreate={editDialogCreate} editDialogOpen={editDialogOpen} editDialogClose={editDialogClose} editDialogKeyDown={editDialogKeyDown} resources={resources} views={views} view={'monthView'} appointmentDataFields={appointmentDataFields} /> ) } } ReactDOM.render(<App />, document.getElementById('app'));