@darwino/darwino-react
Version:
A set of Javascript classes and utilities
175 lines (140 loc) • 5.09 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/*
* (c) Copyright Darwino Inc. 2014-2017.
*/
import React, { Component } from "react";
import PropTypes from 'prop-types';
import { DEV_OPTIONS, JstoreCursor, EmptyDataFetcher, PagingDataFetcher, ArrayDataFetcher, jsonEquals } from '@darwino/darwino';
import BaseCursorComponent from './BaseCursorComponent';
/*
* Expected properties:
* - databaseId (string)
* - storeId (string)
* - params (object)
* - columns (array of objects (title/key))
* - baseRoute (string)
*
* Note: 'store' is a reserved prop with redux so the parameter is 'storeId', and 'databaseId' for consistency.
*/
class BaseCursorList extends BaseCursorComponent {
// Cursor property
// CLEANUP: Is that used?
constructor(props) {
super(props);
_defineProperty(this, "orderBy", null);
_defineProperty(this, "descending", false);
this.handleRowClick = this.handleRowClick.bind(this);
this.handleDeleteSelectedDocuments = this.handleDeleteSelectedDocuments.bind(this);
this.loadMoreRows = this.loadMoreRows.bind(this);
}
loadMoreRows() {
return this.dataFetcher.loadMoreRows();
}
reinitData() {
// The dataFetcher, or the dataLoader, can be passed as properties
// In this case, these are used instead of creating a brand new one
if (this.props.dataFetcher) {
this.dataFetcher = this.props.dataFetcher;
} else {
var dataLoader = this.props.dataLoader || this.createDataLoader();
this.dataFetcher = this.createDataFetcher(dataLoader);
}
this.dataFetcher.init();
this.forceUpdate();
}
createDataLoader() {
return this.createJstoreCursor().getDataLoader();
}
createDataFetcher(dataLoader) {
if (!dataLoader) return new EmptyDataFetcher();
return this.createArrayDataFetcher(dataLoader);
}
createPagingDataFetcher(dataLoader) {
return new PagingDataFetcher(_objectSpread({
dataLoader,
autoFetch: true,
onDataLoaded: () => {
this.forceUpdate();
}
}, this.props.dataFetcher));
}
createArrayDataFetcher(dataLoader) {
return new ArrayDataFetcher(_objectSpread({
dataLoader,
onDataLoaded: () => {
this.forceUpdate();
}
}, this.props.dataFetcher));
}
clearEntries() {
this.setPage(0);
}
setPage(page) {
this.dataFetcher.firstPage = page * this.props.pageSize;
this.dataFetcher.init();
}
getDataFetcher() {
return this.dataFetcher;
}
handleRowClick(entry) {
if (this.props.onRowClicked) {
this.props.onRowClicked(entry);
return;
}
var {
baseRoute,
dynamicRoute
} = this.props;
if (!baseRoute && !dynamicRoute || !entry || !entry.__meta) {
return;
}
if (entry.__meta.category) {
return;
}
var url = dynamicRoute ? dynamicRoute(entry) : baseRoute + '/' + entry.__meta.unid; // https://stackoverflow.com/questions/42701129/how-to-push-to-history-in-react-router-v4
if (url) this.context.router.history.push(url);
}
handleRowDoubleClick(entry) {
if (this.props.onRowDoubleClicked) {
this.props.onRowDoubleClicked(entry);
return;
}
} //
// Handling selection
//
clearSelection() {}
hasSelectedEntries() {
return this.getSelectedEntries().length > 0;
}
getSelectedEntries() {
return [];
}
getSelectedDocIds() {
return [];
}
handleDeleteSelectedDocuments() {
var ids = this.getSelectedDocIds();
if (ids.length) {
var {
databaseId
} = this.props;
if (!confirm("This will delete the ".concat(ids.length, " selected document(s).\nDo you want to continue?"))) {
return;
}
return fetch("".concat(DEV_OPTIONS.serverPrefix, "$darwino-jstore/databases/").concat(encodeURIComponent(databaseId), "/operation/delete"), {
credentials: DEV_OPTIONS.credentials,
method: 'POST',
body: JSON.stringify(ids)
}).then(doc => {
this.clearSelection();
this.clearEntries();
this.setPage(0);
return doc;
});
}
}
}
export default BaseCursorList;
//# sourceMappingURL=BaseCursorList.js.map