Skip to content

Commit

Permalink
parse Django model ordering; fix checkbox type
Browse files Browse the repository at this point in the history
  • Loading branch information
sheppard committed Dec 21, 2020
1 parent 983a852 commit b909674
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 10 deletions.
7 changes: 6 additions & 1 deletion packages/material/src/components/inputs/Checkbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import PropTypes from 'prop-types';
export default function Input({ label, ...props }) {
return (
<>
<Field component={CheckboxWithLabel} Label={{ label }} {...props} />
<Field
component={CheckboxWithLabel}
Label={{ label }}
{...props}
type="checkbox"
/>
<HelperText name={props.name} hint={props.hint} />
</>
);
Expand Down
28 changes: 21 additions & 7 deletions packages/model/src/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -409,8 +409,8 @@ class Model {
return this.orm.session(this.store.getState().orm);
}

getSessionModel() {
const model = this.getSession()[this.name];
getSessionModel(session) {
const model = (session || this.getSession())[this.name];
if (!model) {
throw new Error('Could not find model in session');
}
Expand All @@ -421,11 +421,25 @@ class Model {
return this.getSessionModel();
}

getQuerySet() {
const model = this.getSessionModel();
return model
.all()
.orderBy(this.idCol, this.opts.reversed ? 'desc' : 'asc');
getQuerySet(session) {
const model = this.getSessionModel(session),
ordering = this.config.ordering || [
this.opts.reversed ? `-${this.idCol}` : this.idCol
],
columns = [],
orders = [];

ordering.map(name => {
let order = 'asc';
if (name.startsWith('-')) {
order = 'desc';
name = name.slice(1);
}
columns.push(name);
orders.push(order);
});

return model.all().orderBy(columns, orders);
}

get objects() {
Expand Down
11 changes: 9 additions & 2 deletions packages/react/src/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,11 +318,18 @@ export function useModel(name, filter) {
typeof filter === 'function' ||
(typeof filter === 'object' && !Array.isArray(filter))
) {
// Filter by query
selector = createSelector(model.orm, session =>
session[name].filter(filter).toRefArray()
model.getQuerySet(session).filter(filter).toRefArray()
);
} else {
} else if (filter) {
// Filter by id (default ModelSelectorSpec behavior)
selector = state => createSelector(model.orm[name])(state, filter);
} else {
// All objects (use getQuerySet() to leverage config.ordering)
selector = createSelector(model.orm, session =>
model.getQuerySet(session).toRefArray()
);
}

return useSelector(selector);
Expand Down

0 comments on commit b909674

Please sign in to comment.