Project

General

Profile

« Previous | Next » 

Revision 35939

Initial sort and filter bar in monitor funding requests

View differences:

MonitorFundingRequestsWidget.java
1 1
package eu.dnetlib.client;
2 2

  
3
import com.github.gwtbootstrap.client.ui.AccordionGroup;
4
import com.github.gwtbootstrap.client.ui.Alert;
3
import com.github.gwtbootstrap.client.ui.*;
4
import com.github.gwtbootstrap.client.ui.ListBox;
5 5
import com.github.gwtbootstrap.client.ui.constants.AlertType;
6
import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
7
import com.github.gwtbootstrap.client.ui.constants.FormType;
6 8
import com.github.gwtbootstrap.client.ui.constants.IconType;
7 9
import com.github.gwtbootstrap.client.ui.event.HideEvent;
8 10
import com.github.gwtbootstrap.client.ui.event.HideHandler;
......
11 13
import com.google.gwt.core.client.GWT;
12 14
import com.google.gwt.dom.client.Document;
13 15
import com.google.gwt.dom.client.Style;
16
import com.google.gwt.event.dom.client.ChangeEvent;
17
import com.google.gwt.event.dom.client.ChangeHandler;
14 18
import com.google.gwt.i18n.client.DateTimeFormat;
19
import com.google.gwt.user.client.Timer;
15 20
import com.google.gwt.user.client.rpc.AsyncCallback;
16 21
import com.google.gwt.user.client.ui.*;
17
import eu.dnetlib.goldoa.domain.Request;
18
import eu.dnetlib.goldoa.domain.RequestInfo;
22
import com.google.gwt.user.client.ui.Label;
23
import eu.dnetlib.client.widgets.FormFieldSet;
24
import eu.dnetlib.client.widgets.TextBox;
25
import eu.dnetlib.client.widgets.ValueChangeEvent;
26
import eu.dnetlib.client.widgets.ValueChangeHandler;
27
import eu.dnetlib.goldoa.domain.*;
19 28

  
29
import java.util.Date;
20 30
import java.util.List;
21 31

  
22 32
/**
......
31 41
    private Alert errorLabel = new Alert();
32 42
    private Alert warningLabel = new Alert();
33 43

  
44
    private FlowPanel sortAndFilterPanel = new FlowPanel();
45
    private TextBox search = new TextBox();
46
    private ListBox orderByTypes = new ListBox();
47
    private ListBox sortByTypes = new ListBox();
48

  
34 49
    private FlowPanel requestsForApprovalPanel = new FlowPanel();
35 50

  
36 51
    private DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy/MM/dd");
37 52
    private DataServiceAsync dataService = GWT.create(DataService.class);
38 53

  
54
    private Timer timer;
55

  
39 56
    public MonitorFundingRequestsWidget() {
40 57

  
41 58
        monitorFundingRequestsPagePanel.addStyleName("content");
......
58 75
        warningLabel.setClose(false);
59 76
        warningLabel.setVisible(false);
60 77

  
78
        addUtilitiesBar();
79

  
61 80
        requestsForApprovalPanel.addStyleName("requestsListPanel");
62 81

  
63 82
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsTitleLabel);
64 83
        monitorFundingRequestsPagePanel.add(monitorFundingRequestsInfoLabel);
84
        monitorFundingRequestsPagePanel.add(sortAndFilterPanel);
65 85
        monitorFundingRequestsPagePanel.add(errorLabel);
66 86
        monitorFundingRequestsPagePanel.add(warningLabel);
67 87
        monitorFundingRequestsPagePanel.add(requestsForApprovalPanel);
......
90 110
        SidebarPanel sidebarPanel = new SidebarPanel("Help");
91 111
        RootPanel.get("sidebar").add(sidebarPanel.asWidget());
92 112

  
93
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
94
        requestsForApprovalPanel.addStyleName("loading");
95
        requestsForApprovalPanel.add(loadingWheel);
113
        search.setValue("", false);
114
        orderByTypes.setSelectedValue(RequestSortOrder.ASCENDING.name());
115
        sortByTypes.setSelectedValue(RequestSort.DATE.name());
116
        timer = null;
96 117

  
97
        dataService.getRequests(null, null, null, null, null, null, new AsyncCallback<List<RequestInfo>>() {
118
        loadRequests(null, null, RequestSort.DATE, RequestSortOrder.ASCENDING, null, null);
119
    }
98 120

  
99
            @Override
100
            public void onFailure(Throwable throwable) {
121
    @Override
122
    public void setToken(String token) {
101 123

  
102
                requestsForApprovalPanel.removeStyleName("loading");
103
                requestsForApprovalPanel.remove(loadingWheel);
124
    }
104 125

  
105
                errorLabel.setText("System error retrieving requests");
106
                errorLabel.setVisible(true);
126
    private void addUtilitiesBar() {
127

  
128
        FlowPanel sortAndFilterBar = new FlowPanel();
129
        sortAndFilterBar.addStyleName("sortAndFilterBar");
130

  
131
        search.addStyleName("searchTextBox");
132
        search.addStyleName("float-right");
133
        search.setPlaceholder("Filter...");
134
        search.setValueChangeHandler(new ValueChangeHandler() {
135
            @Override
136
            public void handle(ValueChangeEvent valueChangeEvent) {
137
                sortAndFilter();
107 138
            }
139
        });
108 140

  
141
        sortAndFilterBar.add(search);
142

  
143
        orderByTypes.addItem("Ascending", RequestSortOrder.ASCENDING.name());
144
        orderByTypes.addItem("Descending", RequestSortOrder.DESCENDING.name());
145
        orderByTypes.setAlternateSize(AlternateSize.SMALL);
146
        orderByTypes.addChangeHandler(new ChangeHandler() {
109 147
            @Override
110
            public void onSuccess(List<RequestInfo> requestInfoList) {
148
            public void onChange(ChangeEvent changeEvent) {
149
                sortAndFilter();
150
            }
151
        });
111 152

  
112
                requestsForApprovalPanel.removeStyleName("loading");
113
                requestsForApprovalPanel.remove(loadingWheel);
153
        Form orderBy = new Form();
154
        orderBy.setType(FormType.HORIZONTAL);
155
        orderBy.addStyleName("inlineBlock");
156
        orderBy.add(new FormFieldSet("Order by", orderByTypes));
114 157

  
115
                if(requestInfoList.isEmpty()) {
116
                    warningLabel.setText("No available requests at the moment.");
117
                    warningLabel.setVisible(true);
118
                } else {
119
                    for(RequestInfo requestInfo : requestInfoList)
120
                        drawRequestInfo(requestInfo);
121
                }
158
        sortByTypes.addItem("Date", RequestSort.DATE.name());
159
        sortByTypes.addItem("Publication", RequestSort.PUBLICATION.name());
160
        sortByTypes.addItem("Status", RequestSort.STATUS.name());
161
        sortByTypes.setAlternateSize(AlternateSize.SMALL);
162
        sortByTypes.addChangeHandler(new ChangeHandler() {
163
            @Override
164
            public void onChange(ChangeEvent changeEvent) {
165
                sortAndFilter();
122 166
            }
123 167
        });
124 168

  
169
        Form sortBy = new Form();
170
        sortBy.setType(FormType.HORIZONTAL);
171
        sortBy.addStyleName("inlineBlock");
172
        sortBy.add(new FormFieldSet("Sort by", sortByTypes));
173

  
174
        sortAndFilterBar.add(sortBy);
175
        sortAndFilterBar.add(orderBy);
176

  
177
        sortAndFilterPanel.add(sortAndFilterBar);
125 178
    }
126 179

  
127
    @Override
128
    public void setToken(String token) {
180
    private void sortAndFilter() {
129 181

  
182
        if(timer==null) {
183

  
184
            timer = new Timer() {
185

  
186
                @Override
187
                public void run() {
188

  
189
                    RequestSort requestSort = RequestSort.valueOf(sortByTypes.getSelectedValue());
190
                    RequestSortOrder requestSortOrder = RequestSortOrder.valueOf(orderByTypes.getSelectedValue());
191
                    String term = null;
192
                    if(!search.getValue().trim().equals(""))
193
                        term = search.getValue().trim();
194

  
195
                    loadRequests(null, null, requestSort, requestSortOrder, null, term);
196
                }
197
            };
198
            timer.schedule(300);
199

  
200
        } else {
201

  
202
            timer.cancel();
203
            timer.schedule(300);
204
        }
130 205
    }
131 206

  
207
    private void loadRequests(Date from, Date to, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term) {
208

  
209
        final HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
210
        requestsForApprovalPanel.addStyleName("loading");
211
        requestsForApprovalPanel.add(loadingWheel);
212

  
213
        dataService.getRequests(from, to, requestSortBy, order, requestFilter, term,
214
                new AsyncCallback<List<RequestInfo>>() {
215

  
216
                    @Override
217
                    public void onFailure(Throwable throwable) {
218

  
219
                        requestsForApprovalPanel.clear();
220
                        requestsForApprovalPanel.removeStyleName("loading");
221

  
222
                        errorLabel.setText("System error retrieving requests");
223
                        errorLabel.setVisible(true);
224
                    }
225

  
226
                    @Override
227
                    public void onSuccess(List<RequestInfo> requestInfoList) {
228

  
229
                        requestsForApprovalPanel.clear();
230
                        requestsForApprovalPanel.removeStyleName("loading");
231

  
232
                        if (requestInfoList.isEmpty()) {
233
                            warningLabel.setText("No available requests at the moment.");
234
                            warningLabel.setVisible(true);
235
                        } else {
236
                            for (RequestInfo requestInfo : requestInfoList)
237
                                drawRequestInfo(requestInfo);
238
                        }
239
                    }
240
                });
241
    }
242

  
132 243
    private void drawRequestInfo(final RequestInfo requestInfo) {
133 244

  
134 245
        final AccordionGroup dataRequestAccordionItem = new AccordionGroup();

Also available in: Unified diff