@plusscommunities/pluss-core-web 1.2.8 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -10188,8 +10188,6 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10188
10188
  });
10189
10189
 
10190
10190
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleColumn", function (key) {
10191
- var source = _this.props.source;
10192
-
10193
10191
  var columns = ___default['default'].cloneDeep(_this.state.columns);
10194
10192
 
10195
10193
  var column = columns.find(function (c) {
@@ -10205,25 +10203,132 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10205
10203
  var selectedHeaders = columns.filter(function (c) {
10206
10204
  return c.key && c.selected;
10207
10205
  });
10208
- var selectedheaderKeys = selectedHeaders.map(function (h) {
10209
- return h.key;
10206
+
10207
+ _this.setState({
10208
+ columns: columns,
10209
+ selectedHeaders: selectedHeaders
10210
+ });
10211
+ }
10212
+ });
10213
+
10214
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleStartDateFilter", function () {
10215
+ var filterDateStartVisible = _this.state.filterDateStartVisible;
10216
+
10217
+ if (filterDateStartVisible) {
10218
+ setTimeout(function () {
10219
+ return _this.setState({
10220
+ filterDateStartVisible: false
10221
+ });
10222
+ }, 200);
10223
+ } else {
10224
+ _this.setState({
10225
+ filterDateStartVisible: true
10210
10226
  });
10211
- var selectedSource = source.map(function (i) {
10212
- return ___default['default'].pick(i, selectedheaderKeys);
10227
+ }
10228
+ });
10229
+
10230
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleEndDateFilter", function () {
10231
+ var filterDateEndVisible = _this.state.filterDateEndVisible;
10232
+
10233
+ if (filterDateEndVisible) {
10234
+ setTimeout(function () {
10235
+ return _this.setState({
10236
+ filterDateEndVisible: false
10237
+ });
10238
+ }, 200);
10239
+ } else {
10240
+ _this.setState({
10241
+ filterDateEndVisible: true
10213
10242
  });
10243
+ }
10244
+ });
10245
+
10246
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onDateFilterStartChanged", function (date) {
10247
+ var filterDateEnd = _this.state.filterDateEnd;
10248
+ var start = moment__default['default'](date);
10214
10249
 
10250
+ if (start.isSameOrBefore(filterDateEnd)) {
10215
10251
  _this.setState({
10216
- columns: columns,
10217
- selectedHeaders: selectedHeaders,
10218
- selectedSource: selectedSource
10252
+ filterDateStart: start.startOf('day'),
10253
+ filterDateStartVisible: false
10254
+ });
10255
+ }
10256
+ });
10257
+
10258
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onDateFilterEndChanged", function (date) {
10259
+ var filterDateStart = _this.state.filterDateStart;
10260
+ var end = moment__default['default'](date);
10261
+
10262
+ if (end.isSameOrAfter(filterDateStart)) {
10263
+ _this.setState({
10264
+ filterDateEnd: end.endOf('day'),
10265
+ filterDateEndVisible: false
10219
10266
  });
10220
10267
  }
10221
10268
  });
10222
10269
 
10270
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getSelectedSource", function () {
10271
+ var source = _this.props.source;
10272
+ var selectedHeaders = _this.state.selectedHeaders;
10273
+ var result = source; // apply timestamp filter
10274
+
10275
+ if (_this.props.timestampFilter) {
10276
+ var _this$state = _this.state,
10277
+ filterDateStart = _this$state.filterDateStart,
10278
+ filterDateEnd = _this$state.filterDateEnd;
10279
+ var filterKey = _this.props.timestampFilter.filterKey;
10280
+ var minDate = filterDateStart.valueOf();
10281
+ var maxDate = filterDateEnd.valueOf();
10282
+ result = ___default['default'].filter(source, function (item) {
10283
+ return item[filterKey] >= minDate && item[filterKey] <= maxDate;
10284
+ });
10285
+ } // map result to columns
10286
+
10287
+
10288
+ var selectedheaderKeys = selectedHeaders.map(function (h) {
10289
+ return h.key;
10290
+ });
10291
+ return result.map(function (i) {
10292
+ return ___default['default'].pick(i, selectedheaderKeys);
10293
+ });
10294
+ });
10295
+
10296
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "renderTimestampFilter", function () {
10297
+ if (!_this.props.timestampFilter) {
10298
+ return null;
10299
+ }
10300
+
10301
+ return /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(GenericInput, {
10302
+ id: "dateStart",
10303
+ label: "Start Date",
10304
+ alwaysShowLabel: true,
10305
+ placeholder: 'Select start date',
10306
+ value: _this.state.filterDateStart.format('DD/MM/YYYY'),
10307
+ onClick: _this.onToggleStartDateFilter,
10308
+ readOnly: true
10309
+ }), _this.state.filterDateStartVisible ? /*#__PURE__*/React__default['default'].createElement(DatePicker, {
10310
+ hideTop: true,
10311
+ selectedDate: _this.state.filterDateStart,
10312
+ selectDate: _this.onDateFilterStartChanged
10313
+ }) : null, /*#__PURE__*/React__default['default'].createElement(GenericInput, {
10314
+ id: "dateEnd",
10315
+ label: "End Date",
10316
+ alwaysShowLabel: true,
10317
+ placeholder: 'Select end date',
10318
+ value: _this.state.filterDateEnd.format('DD/MM/YYYY'),
10319
+ onClick: _this.onToggleEndDateFilter,
10320
+ readOnly: true
10321
+ }), _this.state.filterDateEndVisible ? /*#__PURE__*/React__default['default'].createElement(DatePicker, {
10322
+ hideTop: true,
10323
+ selectedDate: _this.state.filterDateEnd,
10324
+ selectDate: _this.onDateFilterEndChanged
10325
+ }) : null);
10326
+ });
10327
+
10223
10328
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "renderContent", function () {
10224
- var _this$state = _this.state,
10225
- saving = _this$state.saving,
10226
- columns = _this$state.columns;
10329
+ var _this$state2 = _this.state,
10330
+ saving = _this$state2.saving,
10331
+ columns = _this$state2.columns;
10227
10332
 
10228
10333
  if (saving) {
10229
10334
  return /*#__PURE__*/React__default['default'].createElement("div", {
@@ -10258,27 +10363,35 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10258
10363
  }));
10259
10364
  });
10260
10365
 
10261
- _this.state = {
10366
+ var state = {
10262
10367
  columns: props.columns,
10368
+ selectedHeaders: props.columns.filter(function (c) {
10369
+ return c.key && c.selected;
10370
+ }),
10263
10371
  selectedSource: [],
10264
10372
  saving: false
10265
10373
  };
10374
+
10375
+ if (props.timestampFilter) {
10376
+ state.filterDateStart = props.timestampFilter.startDate;
10377
+ state.filterDateEnd = props.timestampFilter.endDate;
10378
+ }
10379
+
10380
+ _this.state = state;
10266
10381
  return _this;
10267
10382
  }
10268
10383
 
10269
10384
  _createClass__default['default'](ExportCsvPopup, [{
10270
10385
  key: "render",
10271
10386
  value: function render() {
10272
- var _this$state2 = this.state,
10273
- selectedHeaders = _this$state2.selectedHeaders,
10274
- selectedSource = _this$state2.selectedSource;
10387
+ var selectedHeaders = this.state.selectedHeaders;
10275
10388
  var filename = this.props.filename;
10276
10389
  var buttons = [{
10277
10390
  type: 'primary',
10278
10391
  isActive: this.canSave(),
10279
10392
  text: /*#__PURE__*/React__default['default'].createElement(reactCsv.CSVLink, {
10280
10393
  headers: selectedHeaders,
10281
- data: selectedSource,
10394
+ data: this.getSelectedSource(),
10282
10395
  style: {
10283
10396
  textDecoration: 'none',
10284
10397
  color: '#fff'
@@ -10294,7 +10407,6 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10294
10407
  }];
10295
10408
  return /*#__PURE__*/React__default['default'].createElement(Popup, {
10296
10409
  title: "Confirm Export",
10297
- subtitle: "Select which columns to include in the export",
10298
10410
  boxClasses: "flex flex-column",
10299
10411
  innerClasses: "flex flex-column fillSpace flex-1",
10300
10412
  minWidth: 500,
@@ -10304,7 +10416,9 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10304
10416
  hasPadding: true,
10305
10417
  onClose: this.onClose,
10306
10418
  buttons: buttons
10307
- }, this.renderContent());
10419
+ }, this.renderTimestampFilter(), /*#__PURE__*/React__default['default'].createElement(Text, {
10420
+ type: "bodyLarge"
10421
+ }, "Select which columns to include in the export"), this.renderContent());
10308
10422
  }
10309
10423
  }]);
10310
10424
 
package/dist/index.esm.js CHANGED
@@ -10161,8 +10161,6 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10161
10161
  });
10162
10162
 
10163
10163
  _defineProperty(_assertThisInitialized(_this), "onToggleColumn", function (key) {
10164
- var source = _this.props.source;
10165
-
10166
10164
  var columns = _.cloneDeep(_this.state.columns);
10167
10165
 
10168
10166
  var column = columns.find(function (c) {
@@ -10178,25 +10176,132 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10178
10176
  var selectedHeaders = columns.filter(function (c) {
10179
10177
  return c.key && c.selected;
10180
10178
  });
10181
- var selectedheaderKeys = selectedHeaders.map(function (h) {
10182
- return h.key;
10179
+
10180
+ _this.setState({
10181
+ columns: columns,
10182
+ selectedHeaders: selectedHeaders
10183
+ });
10184
+ }
10185
+ });
10186
+
10187
+ _defineProperty(_assertThisInitialized(_this), "onToggleStartDateFilter", function () {
10188
+ var filterDateStartVisible = _this.state.filterDateStartVisible;
10189
+
10190
+ if (filterDateStartVisible) {
10191
+ setTimeout(function () {
10192
+ return _this.setState({
10193
+ filterDateStartVisible: false
10194
+ });
10195
+ }, 200);
10196
+ } else {
10197
+ _this.setState({
10198
+ filterDateStartVisible: true
10183
10199
  });
10184
- var selectedSource = source.map(function (i) {
10185
- return _.pick(i, selectedheaderKeys);
10200
+ }
10201
+ });
10202
+
10203
+ _defineProperty(_assertThisInitialized(_this), "onToggleEndDateFilter", function () {
10204
+ var filterDateEndVisible = _this.state.filterDateEndVisible;
10205
+
10206
+ if (filterDateEndVisible) {
10207
+ setTimeout(function () {
10208
+ return _this.setState({
10209
+ filterDateEndVisible: false
10210
+ });
10211
+ }, 200);
10212
+ } else {
10213
+ _this.setState({
10214
+ filterDateEndVisible: true
10186
10215
  });
10216
+ }
10217
+ });
10218
+
10219
+ _defineProperty(_assertThisInitialized(_this), "onDateFilterStartChanged", function (date) {
10220
+ var filterDateEnd = _this.state.filterDateEnd;
10221
+ var start = moment(date);
10187
10222
 
10223
+ if (start.isSameOrBefore(filterDateEnd)) {
10188
10224
  _this.setState({
10189
- columns: columns,
10190
- selectedHeaders: selectedHeaders,
10191
- selectedSource: selectedSource
10225
+ filterDateStart: start.startOf('day'),
10226
+ filterDateStartVisible: false
10227
+ });
10228
+ }
10229
+ });
10230
+
10231
+ _defineProperty(_assertThisInitialized(_this), "onDateFilterEndChanged", function (date) {
10232
+ var filterDateStart = _this.state.filterDateStart;
10233
+ var end = moment(date);
10234
+
10235
+ if (end.isSameOrAfter(filterDateStart)) {
10236
+ _this.setState({
10237
+ filterDateEnd: end.endOf('day'),
10238
+ filterDateEndVisible: false
10192
10239
  });
10193
10240
  }
10194
10241
  });
10195
10242
 
10243
+ _defineProperty(_assertThisInitialized(_this), "getSelectedSource", function () {
10244
+ var source = _this.props.source;
10245
+ var selectedHeaders = _this.state.selectedHeaders;
10246
+ var result = source; // apply timestamp filter
10247
+
10248
+ if (_this.props.timestampFilter) {
10249
+ var _this$state = _this.state,
10250
+ filterDateStart = _this$state.filterDateStart,
10251
+ filterDateEnd = _this$state.filterDateEnd;
10252
+ var filterKey = _this.props.timestampFilter.filterKey;
10253
+ var minDate = filterDateStart.valueOf();
10254
+ var maxDate = filterDateEnd.valueOf();
10255
+ result = _.filter(source, function (item) {
10256
+ return item[filterKey] >= minDate && item[filterKey] <= maxDate;
10257
+ });
10258
+ } // map result to columns
10259
+
10260
+
10261
+ var selectedheaderKeys = selectedHeaders.map(function (h) {
10262
+ return h.key;
10263
+ });
10264
+ return result.map(function (i) {
10265
+ return _.pick(i, selectedheaderKeys);
10266
+ });
10267
+ });
10268
+
10269
+ _defineProperty(_assertThisInitialized(_this), "renderTimestampFilter", function () {
10270
+ if (!_this.props.timestampFilter) {
10271
+ return null;
10272
+ }
10273
+
10274
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(GenericInput, {
10275
+ id: "dateStart",
10276
+ label: "Start Date",
10277
+ alwaysShowLabel: true,
10278
+ placeholder: 'Select start date',
10279
+ value: _this.state.filterDateStart.format('DD/MM/YYYY'),
10280
+ onClick: _this.onToggleStartDateFilter,
10281
+ readOnly: true
10282
+ }), _this.state.filterDateStartVisible ? /*#__PURE__*/React.createElement(DatePicker, {
10283
+ hideTop: true,
10284
+ selectedDate: _this.state.filterDateStart,
10285
+ selectDate: _this.onDateFilterStartChanged
10286
+ }) : null, /*#__PURE__*/React.createElement(GenericInput, {
10287
+ id: "dateEnd",
10288
+ label: "End Date",
10289
+ alwaysShowLabel: true,
10290
+ placeholder: 'Select end date',
10291
+ value: _this.state.filterDateEnd.format('DD/MM/YYYY'),
10292
+ onClick: _this.onToggleEndDateFilter,
10293
+ readOnly: true
10294
+ }), _this.state.filterDateEndVisible ? /*#__PURE__*/React.createElement(DatePicker, {
10295
+ hideTop: true,
10296
+ selectedDate: _this.state.filterDateEnd,
10297
+ selectDate: _this.onDateFilterEndChanged
10298
+ }) : null);
10299
+ });
10300
+
10196
10301
  _defineProperty(_assertThisInitialized(_this), "renderContent", function () {
10197
- var _this$state = _this.state,
10198
- saving = _this$state.saving,
10199
- columns = _this$state.columns;
10302
+ var _this$state2 = _this.state,
10303
+ saving = _this$state2.saving,
10304
+ columns = _this$state2.columns;
10200
10305
 
10201
10306
  if (saving) {
10202
10307
  return /*#__PURE__*/React.createElement("div", {
@@ -10231,27 +10336,35 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10231
10336
  }));
10232
10337
  });
10233
10338
 
10234
- _this.state = {
10339
+ var state = {
10235
10340
  columns: props.columns,
10341
+ selectedHeaders: props.columns.filter(function (c) {
10342
+ return c.key && c.selected;
10343
+ }),
10236
10344
  selectedSource: [],
10237
10345
  saving: false
10238
10346
  };
10347
+
10348
+ if (props.timestampFilter) {
10349
+ state.filterDateStart = props.timestampFilter.startDate;
10350
+ state.filterDateEnd = props.timestampFilter.endDate;
10351
+ }
10352
+
10353
+ _this.state = state;
10239
10354
  return _this;
10240
10355
  }
10241
10356
 
10242
10357
  _createClass(ExportCsvPopup, [{
10243
10358
  key: "render",
10244
10359
  value: function render() {
10245
- var _this$state2 = this.state,
10246
- selectedHeaders = _this$state2.selectedHeaders,
10247
- selectedSource = _this$state2.selectedSource;
10360
+ var selectedHeaders = this.state.selectedHeaders;
10248
10361
  var filename = this.props.filename;
10249
10362
  var buttons = [{
10250
10363
  type: 'primary',
10251
10364
  isActive: this.canSave(),
10252
10365
  text: /*#__PURE__*/React.createElement(CSVLink, {
10253
10366
  headers: selectedHeaders,
10254
- data: selectedSource,
10367
+ data: this.getSelectedSource(),
10255
10368
  style: {
10256
10369
  textDecoration: 'none',
10257
10370
  color: '#fff'
@@ -10267,7 +10380,6 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10267
10380
  }];
10268
10381
  return /*#__PURE__*/React.createElement(Popup, {
10269
10382
  title: "Confirm Export",
10270
- subtitle: "Select which columns to include in the export",
10271
10383
  boxClasses: "flex flex-column",
10272
10384
  innerClasses: "flex flex-column fillSpace flex-1",
10273
10385
  minWidth: 500,
@@ -10277,7 +10389,9 @@ var ExportCsvPopup = /*#__PURE__*/function (_Component) {
10277
10389
  hasPadding: true,
10278
10390
  onClose: this.onClose,
10279
10391
  buttons: buttons
10280
- }, this.renderContent());
10392
+ }, this.renderTimestampFilter(), /*#__PURE__*/React.createElement(Text, {
10393
+ type: "bodyLarge"
10394
+ }, "Select which columns to include in the export"), this.renderContent());
10281
10395
  }
10282
10396
  }]);
10283
10397
 
package/dist/index.umd.js CHANGED
@@ -10163,8 +10163,6 @@
10163
10163
  });
10164
10164
 
10165
10165
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleColumn", function (key) {
10166
- var source = _this.props.source;
10167
-
10168
10166
  var columns = ___default['default'].cloneDeep(_this.state.columns);
10169
10167
 
10170
10168
  var column = columns.find(function (c) {
@@ -10180,25 +10178,132 @@
10180
10178
  var selectedHeaders = columns.filter(function (c) {
10181
10179
  return c.key && c.selected;
10182
10180
  });
10183
- var selectedheaderKeys = selectedHeaders.map(function (h) {
10184
- return h.key;
10181
+
10182
+ _this.setState({
10183
+ columns: columns,
10184
+ selectedHeaders: selectedHeaders
10185
+ });
10186
+ }
10187
+ });
10188
+
10189
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleStartDateFilter", function () {
10190
+ var filterDateStartVisible = _this.state.filterDateStartVisible;
10191
+
10192
+ if (filterDateStartVisible) {
10193
+ setTimeout(function () {
10194
+ return _this.setState({
10195
+ filterDateStartVisible: false
10196
+ });
10197
+ }, 200);
10198
+ } else {
10199
+ _this.setState({
10200
+ filterDateStartVisible: true
10185
10201
  });
10186
- var selectedSource = source.map(function (i) {
10187
- return ___default['default'].pick(i, selectedheaderKeys);
10202
+ }
10203
+ });
10204
+
10205
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onToggleEndDateFilter", function () {
10206
+ var filterDateEndVisible = _this.state.filterDateEndVisible;
10207
+
10208
+ if (filterDateEndVisible) {
10209
+ setTimeout(function () {
10210
+ return _this.setState({
10211
+ filterDateEndVisible: false
10212
+ });
10213
+ }, 200);
10214
+ } else {
10215
+ _this.setState({
10216
+ filterDateEndVisible: true
10188
10217
  });
10218
+ }
10219
+ });
10220
+
10221
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onDateFilterStartChanged", function (date) {
10222
+ var filterDateEnd = _this.state.filterDateEnd;
10223
+ var start = moment__default['default'](date);
10189
10224
 
10225
+ if (start.isSameOrBefore(filterDateEnd)) {
10190
10226
  _this.setState({
10191
- columns: columns,
10192
- selectedHeaders: selectedHeaders,
10193
- selectedSource: selectedSource
10227
+ filterDateStart: start.startOf('day'),
10228
+ filterDateStartVisible: false
10229
+ });
10230
+ }
10231
+ });
10232
+
10233
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onDateFilterEndChanged", function (date) {
10234
+ var filterDateStart = _this.state.filterDateStart;
10235
+ var end = moment__default['default'](date);
10236
+
10237
+ if (end.isSameOrAfter(filterDateStart)) {
10238
+ _this.setState({
10239
+ filterDateEnd: end.endOf('day'),
10240
+ filterDateEndVisible: false
10194
10241
  });
10195
10242
  }
10196
10243
  });
10197
10244
 
10245
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getSelectedSource", function () {
10246
+ var source = _this.props.source;
10247
+ var selectedHeaders = _this.state.selectedHeaders;
10248
+ var result = source; // apply timestamp filter
10249
+
10250
+ if (_this.props.timestampFilter) {
10251
+ var _this$state = _this.state,
10252
+ filterDateStart = _this$state.filterDateStart,
10253
+ filterDateEnd = _this$state.filterDateEnd;
10254
+ var filterKey = _this.props.timestampFilter.filterKey;
10255
+ var minDate = filterDateStart.valueOf();
10256
+ var maxDate = filterDateEnd.valueOf();
10257
+ result = ___default['default'].filter(source, function (item) {
10258
+ return item[filterKey] >= minDate && item[filterKey] <= maxDate;
10259
+ });
10260
+ } // map result to columns
10261
+
10262
+
10263
+ var selectedheaderKeys = selectedHeaders.map(function (h) {
10264
+ return h.key;
10265
+ });
10266
+ return result.map(function (i) {
10267
+ return ___default['default'].pick(i, selectedheaderKeys);
10268
+ });
10269
+ });
10270
+
10271
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "renderTimestampFilter", function () {
10272
+ if (!_this.props.timestampFilter) {
10273
+ return null;
10274
+ }
10275
+
10276
+ return /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(GenericInput, {
10277
+ id: "dateStart",
10278
+ label: "Start Date",
10279
+ alwaysShowLabel: true,
10280
+ placeholder: 'Select start date',
10281
+ value: _this.state.filterDateStart.format('DD/MM/YYYY'),
10282
+ onClick: _this.onToggleStartDateFilter,
10283
+ readOnly: true
10284
+ }), _this.state.filterDateStartVisible ? /*#__PURE__*/React__default['default'].createElement(DatePicker, {
10285
+ hideTop: true,
10286
+ selectedDate: _this.state.filterDateStart,
10287
+ selectDate: _this.onDateFilterStartChanged
10288
+ }) : null, /*#__PURE__*/React__default['default'].createElement(GenericInput, {
10289
+ id: "dateEnd",
10290
+ label: "End Date",
10291
+ alwaysShowLabel: true,
10292
+ placeholder: 'Select end date',
10293
+ value: _this.state.filterDateEnd.format('DD/MM/YYYY'),
10294
+ onClick: _this.onToggleEndDateFilter,
10295
+ readOnly: true
10296
+ }), _this.state.filterDateEndVisible ? /*#__PURE__*/React__default['default'].createElement(DatePicker, {
10297
+ hideTop: true,
10298
+ selectedDate: _this.state.filterDateEnd,
10299
+ selectDate: _this.onDateFilterEndChanged
10300
+ }) : null);
10301
+ });
10302
+
10198
10303
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "renderContent", function () {
10199
- var _this$state = _this.state,
10200
- saving = _this$state.saving,
10201
- columns = _this$state.columns;
10304
+ var _this$state2 = _this.state,
10305
+ saving = _this$state2.saving,
10306
+ columns = _this$state2.columns;
10202
10307
 
10203
10308
  if (saving) {
10204
10309
  return /*#__PURE__*/React__default['default'].createElement("div", {
@@ -10233,27 +10338,35 @@
10233
10338
  }));
10234
10339
  });
10235
10340
 
10236
- _this.state = {
10341
+ var state = {
10237
10342
  columns: props.columns,
10343
+ selectedHeaders: props.columns.filter(function (c) {
10344
+ return c.key && c.selected;
10345
+ }),
10238
10346
  selectedSource: [],
10239
10347
  saving: false
10240
10348
  };
10349
+
10350
+ if (props.timestampFilter) {
10351
+ state.filterDateStart = props.timestampFilter.startDate;
10352
+ state.filterDateEnd = props.timestampFilter.endDate;
10353
+ }
10354
+
10355
+ _this.state = state;
10241
10356
  return _this;
10242
10357
  }
10243
10358
 
10244
10359
  _createClass__default['default'](ExportCsvPopup, [{
10245
10360
  key: "render",
10246
10361
  value: function render() {
10247
- var _this$state2 = this.state,
10248
- selectedHeaders = _this$state2.selectedHeaders,
10249
- selectedSource = _this$state2.selectedSource;
10362
+ var selectedHeaders = this.state.selectedHeaders;
10250
10363
  var filename = this.props.filename;
10251
10364
  var buttons = [{
10252
10365
  type: 'primary',
10253
10366
  isActive: this.canSave(),
10254
10367
  text: /*#__PURE__*/React__default['default'].createElement(reactCsv.CSVLink, {
10255
10368
  headers: selectedHeaders,
10256
- data: selectedSource,
10369
+ data: this.getSelectedSource(),
10257
10370
  style: {
10258
10371
  textDecoration: 'none',
10259
10372
  color: '#fff'
@@ -10269,7 +10382,6 @@
10269
10382
  }];
10270
10383
  return /*#__PURE__*/React__default['default'].createElement(Popup, {
10271
10384
  title: "Confirm Export",
10272
- subtitle: "Select which columns to include in the export",
10273
10385
  boxClasses: "flex flex-column",
10274
10386
  innerClasses: "flex flex-column fillSpace flex-1",
10275
10387
  minWidth: 500,
@@ -10279,7 +10391,9 @@
10279
10391
  hasPadding: true,
10280
10392
  onClose: this.onClose,
10281
10393
  buttons: buttons
10282
- }, this.renderContent());
10394
+ }, this.renderTimestampFilter(), /*#__PURE__*/React__default['default'].createElement(Text, {
10395
+ type: "bodyLarge"
10396
+ }, "Select which columns to include in the export"), this.renderContent());
10283
10397
  }
10284
10398
  }]);
10285
10399
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-core-web",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "Core extension package for Pluss Communities platform",
5
5
  "main": "dist/index.cjs.js",
6
6
  "scripts": {
@@ -1,19 +1,31 @@
1
1
  import React, { Component } from 'react';
2
2
  import _ from 'lodash';
3
+ import moment from 'moment';
3
4
  import FontAwesome from 'react-fontawesome';
4
5
  import { CSVLink } from 'react-csv';
5
6
  import { Popup } from './Popup';
6
7
  import { CheckBox } from './CheckBox';
8
+ import { GenericInput } from './GenericInput';
9
+ import { DatePicker } from './DatePicker';
10
+ import { Text } from './Text';
7
11
 
8
12
  class ExportCsvPopup extends Component {
9
13
  constructor(props) {
10
14
  super(props);
11
15
 
12
- this.state = {
16
+ const state = {
13
17
  columns: props.columns,
18
+ selectedHeaders: props.columns.filter((c) => c.key && c.selected),
14
19
  selectedSource: [],
15
20
  saving: false,
16
21
  };
22
+
23
+ if (props.timestampFilter) {
24
+ state.filterDateStart = props.timestampFilter.startDate;
25
+ state.filterDateEnd = props.timestampFilter.endDate;
26
+ }
27
+
28
+ this.state = state;
17
29
  }
18
30
 
19
31
  canSave = () => {
@@ -29,19 +41,106 @@ class ExportCsvPopup extends Component {
29
41
  };
30
42
 
31
43
  onToggleColumn = (key) => {
32
- const { source } = this.props;
33
44
  const columns = _.cloneDeep(this.state.columns);
34
45
  const column = columns.find((c) => c.key === key);
35
46
  if (column) {
36
47
  column.selected = !column.selected;
37
48
  if (!column.key) columns.map((c) => (c.selected = column.selected)); // Toggle all
38
49
  const selectedHeaders = columns.filter((c) => c.key && c.selected);
39
- const selectedheaderKeys = selectedHeaders.map((h) => h.key);
40
- const selectedSource = source.map((i) => _.pick(i, selectedheaderKeys));
41
- this.setState({ columns, selectedHeaders, selectedSource });
50
+ this.setState({ columns, selectedHeaders });
42
51
  }
43
52
  };
44
53
 
54
+ onToggleStartDateFilter = () => {
55
+ const { filterDateStartVisible } = this.state;
56
+ if (filterDateStartVisible) {
57
+ setTimeout(() => this.setState({ filterDateStartVisible: false }), 200);
58
+ } else {
59
+ this.setState({ filterDateStartVisible: true });
60
+ }
61
+ };
62
+
63
+ onToggleEndDateFilter = () => {
64
+ const { filterDateEndVisible } = this.state;
65
+ if (filterDateEndVisible) {
66
+ setTimeout(() => this.setState({ filterDateEndVisible: false }), 200);
67
+ } else {
68
+ this.setState({ filterDateEndVisible: true });
69
+ }
70
+ };
71
+
72
+ onDateFilterStartChanged = (date) => {
73
+ const { filterDateEnd } = this.state;
74
+ const start = moment(date);
75
+ if (start.isSameOrBefore(filterDateEnd)) {
76
+ this.setState({ filterDateStart: start.startOf('day'), filterDateStartVisible: false });
77
+ }
78
+ };
79
+
80
+ onDateFilterEndChanged = (date) => {
81
+ const { filterDateStart } = this.state;
82
+ const end = moment(date);
83
+ if (end.isSameOrAfter(filterDateStart)) {
84
+ this.setState({ filterDateEnd: end.endOf('day'), filterDateEndVisible: false });
85
+ }
86
+ };
87
+
88
+ getSelectedSource = () => {
89
+ const { source } = this.props;
90
+ const { selectedHeaders } = this.state;
91
+
92
+ let result = source;
93
+
94
+ // apply timestamp filter
95
+ if (this.props.timestampFilter) {
96
+ const { filterDateStart, filterDateEnd } = this.state;
97
+ const { filterKey } = this.props.timestampFilter;
98
+ const minDate = filterDateStart.valueOf();
99
+ const maxDate = filterDateEnd.valueOf();
100
+ result = _.filter(source, (item) => {
101
+ return item[filterKey] >= minDate && item[filterKey] <= maxDate;
102
+ });
103
+ }
104
+
105
+ // map result to columns
106
+ const selectedheaderKeys = selectedHeaders.map((h) => h.key);
107
+ return result.map((i) => _.pick(i, selectedheaderKeys));
108
+ };
109
+
110
+ renderTimestampFilter = () => {
111
+ if (!this.props.timestampFilter) {
112
+ return null;
113
+ }
114
+ return (
115
+ <div>
116
+ <GenericInput
117
+ id="dateStart"
118
+ label="Start Date"
119
+ alwaysShowLabel
120
+ placeholder={'Select start date'}
121
+ value={this.state.filterDateStart.format('DD/MM/YYYY')}
122
+ onClick={this.onToggleStartDateFilter}
123
+ readOnly
124
+ />
125
+ {this.state.filterDateStartVisible ? (
126
+ <DatePicker hideTop selectedDate={this.state.filterDateStart} selectDate={this.onDateFilterStartChanged} />
127
+ ) : null}
128
+ <GenericInput
129
+ id="dateEnd"
130
+ label="End Date"
131
+ alwaysShowLabel
132
+ placeholder={'Select end date'}
133
+ value={this.state.filterDateEnd.format('DD/MM/YYYY')}
134
+ onClick={this.onToggleEndDateFilter}
135
+ readOnly
136
+ />
137
+ {this.state.filterDateEndVisible ? (
138
+ <DatePicker hideTop selectedDate={this.state.filterDateEnd} selectDate={this.onDateFilterEndChanged} />
139
+ ) : null}
140
+ </div>
141
+ );
142
+ };
143
+
45
144
  renderContent = () => {
46
145
  const { saving, columns } = this.state;
47
146
 
@@ -72,7 +171,7 @@ class ExportCsvPopup extends Component {
72
171
  };
73
172
 
74
173
  render() {
75
- const { selectedHeaders, selectedSource } = this.state;
174
+ const { selectedHeaders } = this.state;
76
175
  const { filename } = this.props;
77
176
 
78
177
  const buttons = [
@@ -82,7 +181,7 @@ class ExportCsvPopup extends Component {
82
181
  text: (
83
182
  <CSVLink
84
183
  headers={selectedHeaders}
85
- data={selectedSource}
184
+ data={this.getSelectedSource()}
86
185
  style={{ textDecoration: 'none', color: '#fff' }}
87
186
  filename={filename || 'export.csv'}
88
187
  onClick={this.onConfirm}
@@ -102,7 +201,6 @@ class ExportCsvPopup extends Component {
102
201
  return (
103
202
  <Popup
104
203
  title="Confirm Export"
105
- subtitle="Select which columns to include in the export"
106
204
  boxClasses="flex flex-column"
107
205
  innerClasses="flex flex-column fillSpace flex-1"
108
206
  minWidth={500}
@@ -113,6 +211,8 @@ class ExportCsvPopup extends Component {
113
211
  onClose={this.onClose}
114
212
  buttons={buttons}
115
213
  >
214
+ {this.renderTimestampFilter()}
215
+ <Text type="bodyLarge">Select which columns to include in the export</Text>
116
216
  {this.renderContent()}
117
217
  </Popup>
118
218
  );