CRUD Calendar Items"

From Documentation
Line 33: Line 33:
 
</source>
 
</source>
  
 +
== Show the Popup==
 
Then we need to add an event listener to open this popup and initialize UI with user-clicked date/time.
 
Then we need to add an event listener to open this popup and initialize UI with user-clicked date/time.
  
Line 51: Line 52:
 
     }
 
     }
 
</source>
 
</source>
 +
 +
 +
 +
When an end-user clicks "Create" button, it invokes the listener below to instantiate a <tt>DefaultCalendarItem</tt>:
 +
 +
<source lang='java' high='10'>
 +
    @Listen(Events.ON_CLICK + " = button[label='Create']")
 +
    public void create() {
 +
        DefaultCalendarItem item = new CalendarItemBuilder()
 +
                .setBegin(beginBox.getValue().toInstant())
 +
                .setEnd(endBox.getValue().toInstant())
 +
                .setTitle(titleBox.getValue())
 +
                .setContent(contentBox.getValue())
 +
                .build();
 +
 +
        model.add(item);
 +
        closeCreationBox();
 +
    }
 +
</source>
 +
 +
* Line 3: <tt>CalendarItemBuilder</tt> is a helper class we made for this example. It helps us to create a DefaultCalendarItem with fewer parameters. Since DefaultCalendarItem's constructor requires many parameters.
 +
* Line 10: We need to add the new item to SimpleCalendarModel to show it on Calendars.
  
 
= Read =
 
= Read =

Revision as of 10:22, 29 January 2021


CRUD Calendar Items





CRUD Example

Since Calendars support model-driven display, to manipulate (CRUD) items on the calendars, you actually need to manipulate CalendarModel via add() and remove(). By default, when an end-user interacts with this component, it doesn't add or delete items automatically. Application developers need to add event listeners to implement creation, update, and deletion of CalendarItem by themselves.

Here we demonstrate the basic approach with CalendarCrudComposer and the default implementation: SimpleCalendarModel and DefaultCalendarItem.


Create

Creation Popup

To allow users input, we need to build UI for properties of DefaultCalendarItem. Here is a simple example:

        <popup id="creationBox">
            <vlayout>
                <datebox id="beginBox" placeholder="beginning date" format="yyyy-MM-dd HH:mm" hflex="min"/>
                <datebox id="endBox" placeholder="end date" format="yyyy-MM-dd HH:mm" hflex="min"/>
                <textbox id="titleBox" placeholder="title"/>
                <textbox id="contentBox" placeholder="content"/>
                <hlayout>
                    <button label="Cancel"/>
                    <button id="update" label="Update"/>
                    <button id="delete" label="Delete"/>
                    <button id="create" label="Create"/>
                </hlayout>
            </vlayout>
        </popup>

Show the Popup

Then we need to add an event listener to open this popup and initialize UI with user-clicked date/time.

    @Listen(CalendarsEvent.ON_ITEM_CREATE + " = #calendars")
    public void showCreationBox(CalendarsEvent event) {
        //initialize datebox with the user-clicked date/time
        beginBox.setValue(event.getBeginDate());
        endBox.setValue(event.getEndDate());
        //reset previous values
        titleBox.setValue("");
        contentBox.setValue("");
        //put focus for user convenience
        titleBox.setFocus(true);

        toCreateMode();
        creationBox.open(calendars, "middle_center");
    }


When an end-user clicks "Create" button, it invokes the listener below to instantiate a DefaultCalendarItem:

    @Listen(Events.ON_CLICK + " = button[label='Create']")
    public void create() {
        DefaultCalendarItem item = new CalendarItemBuilder()
                .setBegin(beginBox.getValue().toInstant())
                .setEnd(endBox.getValue().toInstant())
                .setTitle(titleBox.getValue())
                .setContent(contentBox.getValue())
                .build();

        model.add(item);
        closeCreationBox();
    }
  • Line 3: CalendarItemBuilder is a helper class we made for this example. It helps us to create a DefaultCalendarItem with fewer parameters. Since DefaultCalendarItem's constructor requires many parameters.
  • Line 10: We need to add the new item to SimpleCalendarModel to show it on Calendars.

Read

To display items on a Calendar you need to create a CalendarModel, please refer to Displaying Calendar Items.

Update

Delete

The example project is at Github


Last Update : 2021/01/29

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.