UNPKG

@darwino/darwino-react

Version:

A set of Javascript classes and utilities

175 lines (140 loc) 5.09 kB
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