aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/documents/Documents.ts25
-rw-r--r--src/client/views/PropertiesView.scss4
-rw-r--r--src/client/views/collections/CollectionView.tsx16
-rw-r--r--src/client/views/nodes/FilterBox.tsx10
4 files changed, 35 insertions, 20 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 0f1abb3ac..c13a69402 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -636,9 +636,7 @@ export namespace Docs {
protoProps.system = delegateProps.system;
- if (!("author" in protoProps)) {
- protoProps.author = Doc.CurrentUserEmail;
- }
+ if (!("author" in protoProps)) protoProps.author = Doc.CurrentUserEmail;
if (!("creationDate" in protoProps)) {
protoProps.creationDate = new DateField;
@@ -1019,18 +1017,22 @@ export namespace DocUtils {
return false;
}
- console.log(FilterBox._filterBoolean);
for (const facetKey of Object.keys(filterFacets).filter(fkey => fkey !== "cookies")) {
const facet = filterFacets[facetKey];
- console.log(facet)
+
+ // facets that match some value in the field of the document (e.g. some text field)
const matches = Object.keys(facet).filter(value => value !== "cookies" && facet[value] === "match");
+
+ // facets that have a check next to them
const checks = Object.keys(facet).filter(value => facet[value] === "check");
+
+ // facets that have an x next to them
const xs = Object.keys(facet).filter(value => facet[value] === "x");
if (!xs.length && !checks.length && !matches.length) return true;
const failsNotEqualFacets = !xs.length ? false : xs.some(value => Doc.matchFieldValue(d, facetKey, value));
const satisfiesCheckFacets = !checks.length ? true : checks.some(value => Doc.matchFieldValue(d, facetKey, value));
- const satisfiesMatchFacets = matches.some(value => {
+ const satisfiesMatchFacets = !matches.length ? true : matches.some(value => {
if (facetKey.startsWith("*")) { // fields starting with a '*' are used to match families of related fields. ie, *lastModified will match text-lastModified, data-lastModified, etc
const allKeys = Array.from(Object.keys(d));
allKeys.push(...Object.keys(Doc.GetProto(d)));
@@ -1039,16 +1041,13 @@ export namespace DocUtils {
}
return Field.toString(d[facetKey] as Field).includes(value);
});
- console.log(satisfiesCheckFacets, failsNotEqualFacets);
+ // if we're ORing them together, the default return is false, and we return true for a doc if it satisfies any one set of criteria
if (FilterBox._filterBoolean === "OR") {
- if (satisfiesCheckFacets && !failsNotEqualFacets) {
- return true;
- }
+ if (satisfiesCheckFacets && !failsNotEqualFacets && satisfiesMatchFacets) return true;
}
+ // if we're ANDing them together, the default return is true, and we return false for a doc if it doesn't satisfy any set of criteria
else {
- if (!satisfiesCheckFacets || failsNotEqualFacets) {
- return false;
- }
+ if (!satisfiesCheckFacets || failsNotEqualFacets || (matches.length && satisfiesMatchFacets)) return false;
}
}
diff --git a/src/client/views/PropertiesView.scss b/src/client/views/PropertiesView.scss
index 1d52136de..7c6d507b8 100644
--- a/src/client/views/PropertiesView.scss
+++ b/src/client/views/PropertiesView.scss
@@ -191,8 +191,8 @@
font-size: 10px;
padding: 10px;
margin-left: 5px;
- // max-height: 40%;
- overflow-y: visible;
+ max-height: 40%;
+ overflow-y: scroll;
.propertiesView-buttonContainer {
float: right;
diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx
index 34fd20f1a..4f37747b0 100644
--- a/src/client/views/collections/CollectionView.tsx
+++ b/src/client/views/collections/CollectionView.tsx
@@ -38,6 +38,8 @@ import { SubCollectionViewProps } from './CollectionSubView';
import { CollectionTimeView } from './CollectionTimeView';
import { CollectionTreeView } from "./CollectionTreeView";
import './CollectionView.scss';
+import { FilterBox } from '../nodes/FilterBox';
+import { listSpec } from '../../../fields/Schema';
export const COLLECTION_BORDER_WIDTH = 2;
const path = require('path');
@@ -116,6 +118,19 @@ export class CollectionView extends Touchable<CollectionViewProps> {
whenActiveChanged = (isActive: boolean) => this.props.whenActiveChanged(this._isChildActive = isActive);
+ /**
+ * Applies the collection/dashboard's current filter attributes to the doc being added
+ */
+ addFilterAttributes = (doc: Doc) => {
+ Cast(FilterBox.targetDoc._docFilters, listSpec("string"))?.forEach(attribute => {
+ if (attribute.charAt(0).toUpperCase() === attribute.charAt(0)) {
+ const fields = attribute.split(':');
+ if (fields[2] === "check") doc[DataSym][fields[0]] = fields[1];
+ else if (fields[2] === "x" && doc[DataSym][fields[0]] === fields[1]) doc[DataSym][fields[0]] = undefined;
+ }
+ });
+ }
+
@action.bound
addDocument = (doc: Doc | Doc[]): boolean => {
if (this.props.filterAddDocument?.(doc) === false) {
@@ -157,6 +172,7 @@ export class CollectionView extends Touchable<CollectionViewProps> {
DocUtils.LeavePushpin(doc);
doc._stayInCollection = undefined;
doc.context = this.props.Document;
+ this.addFilterAttributes(doc); //
});
added.map(doc => this.props.layerProvider?.(doc, true));// assigns layer values to the newly added document... testing the utility of this
(targetDataDoc[this.props.fieldKey] as List<Doc>).push(...added);
diff --git a/src/client/views/nodes/FilterBox.tsx b/src/client/views/nodes/FilterBox.tsx
index 41e274e7a..541693cdf 100644
--- a/src/client/views/nodes/FilterBox.tsx
+++ b/src/client/views/nodes/FilterBox.tsx
@@ -39,7 +39,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
constructor(props: Readonly<FieldViewProps>) {
super(props);
- const targetDoc = this.targetDoc;
+ const targetDoc = FilterBox.targetDoc;
if (!targetDoc) CurrentUserUtils.setupFilterDocs(targetDoc);
}
public static LayoutString(fieldKey: string) { return FieldView.LayoutString(FilterBox, fieldKey); }
@@ -52,7 +52,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
/**
* @returns the relevant doc according to the value of FilterBox._filterScope i.e. either the Current Dashboard or the Current Collection
*/
- @computed get targetDoc() {
+ @computed static get targetDoc() {
return FilterBox._filterScope === "Current Collection" ? SelectionManager.Views()[0].Document || CollectionDockingView.Instance.props.Document : CollectionDockingView.Instance.props.Document;
}
@@ -68,7 +68,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
@computed get allDocs() {
trace();
const allDocs = new Set<Doc>();
- const targetDoc = this.targetDoc;
+ const targetDoc = FilterBox.targetDoc;
if (this._loaded && targetDoc) {
// if (targetDoc) {
const activeTabs = DocListCast(targetDoc.data);
@@ -140,7 +140,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
public removeFilter = (filterName: string) => {
console.log("remove filter");
- const targetDoc = this.targetDoc;
+ const targetDoc = FilterBox.targetDoc;
const filterDoc = targetDoc.currentFilter as Doc;
const attributes = DocListCast(filterDoc["data"]);
const found = attributes.findIndex(doc => doc.title === filterName);
@@ -170,7 +170,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
console.log("facetClick: " + facetHeader);
console.log(this.props.fieldKey);
- const targetDoc = this.targetDoc;
+ const targetDoc = FilterBox.targetDoc;
const found = this.activeAttributes.findIndex(doc => doc.title === facetHeader);
if (found !== -1) {
// comment this bit out later once the x works in treeview