From b0c3e4de6a179e1dfd83b655f168bffdf3bc64ab Mon Sep 17 00:00:00 2001 From: esikkala <esko.ikkala@aalto.fi> Date: Mon, 3 Dec 2018 08:26:18 +0200 Subject: [PATCH] Sketching author facet --- src/client/components/EnhancedTable.js | 60 ++++++------------------ src/client/components/FacetDialog.js | 31 +++++++++--- src/client/components/ResultTable.js | 5 +- src/client/components/ResultTableHead.js | 3 +- src/client/containers/MapApp.js | 1 + src/server/sparql/Datasets.js | 9 ++-- src/server/sparql/Manuscripts.js | 12 ++--- 7 files changed, 56 insertions(+), 65 deletions(-) diff --git a/src/client/components/EnhancedTable.js b/src/client/components/EnhancedTable.js index b5e6830e..b758e4b9 100644 --- a/src/client/components/EnhancedTable.js +++ b/src/client/components/EnhancedTable.js @@ -16,15 +16,8 @@ import Checkbox from '@material-ui/core/Checkbox'; import IconButton from '@material-ui/core/IconButton'; import Tooltip from '@material-ui/core/Tooltip'; import DeleteIcon from '@material-ui/icons/Delete'; -import FilterListIcon from '@material-ui/icons/FilterList'; import { lighten } from '@material-ui/core/styles/colorManipulator'; -let counter = 0; -function createData(name, calories, fat, carbs, protein) { - counter += 1; - return { id: counter, name, calories, fat, carbs, protein }; -} - function desc(a, b, orderBy) { if (b[orderBy] < a[orderBy]) { return -1; @@ -50,11 +43,8 @@ function getSorting(order, orderBy) { } const rows = [ - { id: 'name', numeric: false, disablePadding: true, label: 'Dessert (100g serving)' }, - { id: 'calories', numeric: true, disablePadding: false, label: 'Calories' }, - { id: 'fat', numeric: true, disablePadding: false, label: 'Fat (g)' }, - { id: 'carbs', numeric: true, disablePadding: false, label: 'Carbs (g)' }, - { id: 'protein', numeric: true, disablePadding: false, label: 'Protein (g)' }, + { id: 'title', numeric: false, disablePadding: true, label: 'Name' }, + { id: 'count', numeric: true, disablePadding: false, label: 'Count' }, ]; class EnhancedTableHead extends React.Component { @@ -142,6 +132,10 @@ const toolbarStyles = theme => ({ let EnhancedTableToolbar = props => { const { numSelected, classes } = props; + // Typography variant="h6" id="tableTitle"> + // Nutrition + // </Typography> + return ( <Toolbar className={classNames(classes.root, { @@ -153,11 +147,8 @@ let EnhancedTableToolbar = props => { <Typography color="inherit" variant="subtitle1"> {numSelected} selected </Typography> - ) : ( - <Typography variant="h6" id="tableTitle"> - Nutrition - </Typography> - )} + ) : '' + } </div> <div className={classes.spacer} /> <div className={classes.actions}> @@ -167,13 +158,7 @@ let EnhancedTableToolbar = props => { <DeleteIcon /> </IconButton> </Tooltip> - ) : ( - <Tooltip title="Filter list"> - <IconButton aria-label="Filter list"> - <FilterListIcon /> - </IconButton> - </Tooltip> - )} + ) : ''} </div> </Toolbar> ); @@ -204,23 +189,9 @@ class EnhancedTable extends React.Component { order: 'asc', orderBy: 'calories', selected: [], - data: [ - createData('Cupcake', 305, 3.7, 67, 4.3), - createData('Donut', 452, 25.0, 51, 4.9), - createData('Eclair', 262, 16.0, 24, 6.0), - createData('Frozen yoghurt', 159, 6.0, 24, 4.0), - createData('Gingerbread', 356, 16.0, 49, 3.9), - createData('Honeycomb', 408, 3.2, 87, 6.5), - createData('Ice cream sandwich', 237, 9.0, 37, 4.3), - createData('Jelly Bean', 375, 0.0, 94, 0.0), - createData('KitKat', 518, 26.0, 65, 7.0), - createData('Lollipop', 392, 0.2, 98, 0.0), - createData('Marshmallow', 318, 0, 81, 2.0), - createData('Nougat', 360, 19.0, 9, 37.0), - createData('Oreo', 437, 18.0, 63, 4.0), - ], + data: this.props.data, page: 0, - rowsPerPage: 5, + rowsPerPage: 10, }; handleRequestSort = (event, property) => { @@ -277,6 +248,7 @@ class EnhancedTable extends React.Component { const { classes } = this.props; const { data, order, orderBy, selected, rowsPerPage, page } = this.state; const emptyRows = rowsPerPage - Math.min(rowsPerPage, data.length - page * rowsPerPage); + console.log(data) return ( <Paper className={classes.root}> @@ -310,12 +282,9 @@ class EnhancedTable extends React.Component { <Checkbox checked={isSelected} /> </TableCell> <TableCell component="th" scope="row" padding="none"> - {n.name} + {n.title} </TableCell> - <TableCell numeric>{n.calories}</TableCell> - <TableCell numeric>{n.fat}</TableCell> - <TableCell numeric>{n.carbs}</TableCell> - <TableCell numeric>{n.protein}</TableCell> + <TableCell numeric>{n.cnt}</TableCell> </TableRow> ); })} @@ -349,6 +318,7 @@ class EnhancedTable extends React.Component { EnhancedTable.propTypes = { classes: PropTypes.object.isRequired, + data: PropTypes.array }; export default withStyles(styles)(EnhancedTable); diff --git a/src/client/components/FacetDialog.js b/src/client/components/FacetDialog.js index ec3aa002..6a03dcf8 100644 --- a/src/client/components/FacetDialog.js +++ b/src/client/components/FacetDialog.js @@ -5,6 +5,7 @@ import DialogContent from '@material-ui/core/DialogContent'; import DialogTitle from '@material-ui/core/DialogTitle'; import { withStyles } from '@material-ui/core/styles'; import Tree from './Tree'; +import EnhancedTable from './EnhancedTable'; import CircularProgress from '@material-ui/core/CircularProgress'; import purple from '@material-ui/core/colors/purple'; import Typography from '@material-ui/core/Typography'; @@ -14,6 +15,7 @@ const styles = () => ({ minHeight: '80vh', maxHeight: '80vh', minWidth: '60vh', + maxWidth: '100vh', }, }); @@ -26,10 +28,29 @@ class FacetDialog extends React.Component { handleClose = () => this.props.closeFacetDialog(); + facetRenderer = facetValues => { + const { activeFacet, facetOptions } = this.props.facet; + const hierarchical = facetOptions[activeFacet] == null ? null : facetOptions[activeFacet].hierarchical; + if (activeFacet != '' && hierarchical) { + return ( + <Tree + data={facetValues} + fetchFacet={this.props.fetchFacet} + updateFilter={this.props.updateFilter} + /> + ); + } else if (activeFacet != '') { + return <EnhancedTable data={facetValues} />; + } else { + return ''; + } + } + render() { const { classes, facet } = this.props; const label = facet.facetOptions[facet.activeFacet] == null ? '' : facet.facetOptions[facet.activeFacet].label; const facetValues = facet.facetValues[facet.activeFacet] == null ? [] : facet.facetValues[facet.activeFacet]; + return ( <Dialog classes={{ paper: classes.dialogPaper }} @@ -44,13 +65,9 @@ class FacetDialog extends React.Component { </DialogTitle> <DialogContent> {this.props.facet.fetchingFacet || facetValues.length == 0 ? - <CircularProgress style={{ color: purple[500] }} thickness={5} /> - : - <Tree - data={facetValues} - fetchFacet={this.props.fetchFacet} - updateFilter={this.props.updateFilter} - />} + <CircularProgress style={{ color: purple[500] }} thickness={5} /> : + this.facetRenderer(facetValues) + } </DialogContent> </Dialog> ); diff --git a/src/client/components/ResultTable.js b/src/client/components/ResultTable.js index bdb3eee6..f5ca7fc6 100644 --- a/src/client/components/ResultTable.js +++ b/src/client/components/ResultTable.js @@ -223,7 +223,7 @@ class ResultTable extends React.Component { <span>{Array.isArray(item.order) ? item.order.toString() : item.order}. </span> <a target='_blank' rel='noopener noreferrer' - href={item.sdbmLink} + href={item.dataProviderUrl} > {item.prefLabel} </a> @@ -247,8 +247,7 @@ class ResultTable extends React.Component { render() { const { classes, rows } = this.props; - //console.log(rows) - + // console.log(rows) if (this.props.fetchingManuscripts ) { return ( <Paper className={classes.progressContainer}> diff --git a/src/client/components/ResultTableHead.js b/src/client/components/ResultTableHead.js index 640d2ad2..a509f3a6 100644 --- a/src/client/components/ResultTableHead.js +++ b/src/client/components/ResultTableHead.js @@ -31,7 +31,8 @@ const columns = [ { label: 'Author', property: 'author', - desc: 'Author description' + desc: 'Author description', + filter: true }, { label: 'Production place', diff --git a/src/client/containers/MapApp.js b/src/client/containers/MapApp.js index ea95ea2a..82339b39 100644 --- a/src/client/containers/MapApp.js +++ b/src/client/containers/MapApp.js @@ -62,6 +62,7 @@ let MapApp = (props) => { const { classes } = props; // browser // error, + console.log(props.facet) return ( <div className={classes.root}> <div className={classes.appFrame}> diff --git a/src/server/sparql/Datasets.js b/src/server/sparql/Datasets.js index a934b884..83f8d501 100644 --- a/src/server/sparql/Datasets.js +++ b/src/server/sparql/Datasets.js @@ -32,7 +32,8 @@ module.exports = { WHERE { <FILTER> ?id a frbroo:F4_Manifestation_Singleton . - #?id dct:source mmm-schema:Bodley . + # ?id dct:source mmm-schema:Bodley . + # ?id dct:source mmm-schema:SDBM . } `, 'manuscriptQuery': ` @@ -54,8 +55,9 @@ module.exports = { SELECT DISTINCT ?id { <FILTER> ?id a frbroo:F4_Manifestation_Singleton . - #?id dct:source mmm-schema:Bodley . - #?id ^<http://erlangen-crm.org/efrbroo/R18_created>/<http://www.cidoc-crm.org/cidoc-crm/P7_took_place_at> ?orderBy . + # ?id dct:source mmm-schema:Bodley . + # ?id dct:source mmm-schema:SDBM . + # ?id ^<http://erlangen-crm.org/efrbroo/R18_created>/<http://www.cidoc-crm.org/cidoc-crm/P7_took_place_at> ?orderBy . } ORDER BY ?id #ORDER BY (!BOUND(?orderBy)) ?orderBy @@ -251,6 +253,7 @@ module.exports = { #?value dct:source mmm-schema:Bodley . } GROUP BY ?value ?parent + ORDER BY DESC(?cnt) } FILTER(BOUND(?value)) BIND(COALESCE(?value, <http://ldf.fi/NONEXISTENT_URI>) AS ?labelValue) OPTIONAL { ?labelValue skos:prefLabel ?lbl . diff --git a/src/server/sparql/Manuscripts.js b/src/server/sparql/Manuscripts.js index 2a8b3c51..3b895edf 100644 --- a/src/server/sparql/Manuscripts.js +++ b/src/server/sparql/Manuscripts.js @@ -16,12 +16,12 @@ const facetConfigs = { predicate: '^frbroo:R18_created/crm:P7_took_place_at', hierarchical: true, }, - // author: { - // id: 'author', - // label: 'Author', - // predicate: '(^frbroo:R18_created|^crm:P108_has_produced)/crm:P14_carried_out_by', - // hierarchical: false - // } + author: { + id: 'author', + label: 'Author', + predicate: '(^frbroo:R18_created|^crm:P108_has_produced)/mmm-schema:carried_out_by_as_author', + hierarchical: false + } }; export const getManuscripts = (page, pagesize, filters) => { -- GitLab