mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
Add Tree-View Interface (#4602)
* Fix local type extraction * Render basic tree in tree-view * Render drawer-item in tree-view-group * Retrieve nested draggable changes * Default sort query to configured sortField * Store nested group / sort to API * Allow updating item values * Figure out a dropzone approach on preview * Finish editable tree view * Set sort value based on sort field in relation * Add create-new / add-existing * Respect previously made nested edits * Add description in setup * Fix fetching level of o2m sort field * Remove min height on empty root * Remove unused types * Add notice for invalid relationship type * Allow recursive o2m in setup * Styling tweak * Revert changes in v-list * Revert changes in groupable
This commit is contained in:
@@ -155,8 +155,6 @@ function getDBQuery(
|
||||
delete queryCopy.limit;
|
||||
}
|
||||
|
||||
query.sort = query.sort || [{ column: primaryKeyField, order: 'asc' }];
|
||||
|
||||
applyQuery(table, dbQuery, queryCopy, schema);
|
||||
|
||||
return dbQuery;
|
||||
@@ -187,6 +185,10 @@ function applyParentFilters(nestedCollectionNodes: NestedCollectionNode[], paren
|
||||
nestedNode.children.push({ type: 'field', name: nestedNode.relation.many_field });
|
||||
}
|
||||
|
||||
if (nestedNode.relation.sort_field) {
|
||||
nestedNode.children.push({ type: 'field', name: nestedNode.relation.sort_field });
|
||||
}
|
||||
|
||||
nestedNode.query = {
|
||||
...nestedNode.query,
|
||||
filter: {
|
||||
@@ -245,16 +247,30 @@ function mergeWithParentItems(
|
||||
}
|
||||
} else if (nestedNode.type === 'o2m') {
|
||||
for (const parentItem of parentItems) {
|
||||
let itemChildren = nestedItems.filter((nestedItem) => {
|
||||
if (nestedItem === null) return false;
|
||||
if (Array.isArray(nestedItem[nestedNode.relation.many_field])) return true;
|
||||
let itemChildren = nestedItems
|
||||
.filter((nestedItem) => {
|
||||
if (nestedItem === null) return false;
|
||||
if (Array.isArray(nestedItem[nestedNode.relation.many_field])) return true;
|
||||
|
||||
return (
|
||||
nestedItem[nestedNode.relation.many_field] == parentItem[nestedNode.relation.one_primary!] ||
|
||||
nestedItem[nestedNode.relation.many_field]?.[nestedNode.relation.one_primary!] ==
|
||||
parentItem[nestedNode.relation.one_primary!]
|
||||
);
|
||||
});
|
||||
return (
|
||||
nestedItem[nestedNode.relation.many_field] == parentItem[nestedNode.relation.one_primary!] ||
|
||||
nestedItem[nestedNode.relation.many_field]?.[nestedNode.relation.one_primary!] ==
|
||||
parentItem[nestedNode.relation.one_primary!]
|
||||
);
|
||||
})
|
||||
.sort((a, b) => {
|
||||
// This is pre-filled in get-ast-from-query
|
||||
const { column, order } = nestedNode.query.sort![0]!;
|
||||
|
||||
if (a[column] === b[column]) return 0;
|
||||
if (a[column] === null) return 1;
|
||||
if (b[column] === null) return -1;
|
||||
if (order === 'asc') {
|
||||
return a[column] < b[column] ? -1 : 1;
|
||||
} else {
|
||||
return a[column] < b[column] ? 1 : -1;
|
||||
}
|
||||
});
|
||||
|
||||
// We re-apply the requested limit here. This forces the _n_ nested items per parent concept
|
||||
if (nested) {
|
||||
|
||||
Reference in New Issue
Block a user