aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2021-04-06 14:28:56 -0400
committerbobzel <zzzman@gmail.com>2021-04-06 14:28:56 -0400
commit46193ae586c28d5309cb0d6fa724846bb8520f20 (patch)
tree5ccb8d1c3fe57981b4be97c85ab475e258e51018 /src
parent998e9b239d1d97d5f4a44e8b7fb29c97e02002c4 (diff)
parent30888cd69690448e0ccf1a7a5b3fe544dea7c218 (diff)
Merge branch 'filters' of https://github.com/browngraphicslab/Dash-Web into filters
Diffstat (limited to 'src')
-rw-r--r--src/client/views/PropertiesView.tsx23
-rw-r--r--src/client/views/collections/CollectionSubView.tsx2
-rw-r--r--src/client/views/nodes/FilterBox.tsx21
-rw-r--r--src/client/views/nodes/SliderBox.tsx5
-rw-r--r--src/fields/Doc.ts5
5 files changed, 37 insertions, 19 deletions
diff --git a/src/client/views/PropertiesView.tsx b/src/client/views/PropertiesView.tsx
index 782a0e29e..0b1d75970 100644
--- a/src/client/views/PropertiesView.tsx
+++ b/src/client/views/PropertiesView.tsx
@@ -916,9 +916,12 @@ export class PropertiesView extends React.Component<PropertiesViewProps> {
* Creates a new currentFilter for this.filterDoc,
*/
createNewFilterDoc = () => {
- const temp = this.filterDoc._docFilters;
+ const currentDocFilters = this.filterDoc._docFilters;
+ const currentDocRangeFilters = this.filterDoc._docRangeFilters;
this.filterDoc._docFilters = new List<string>();
- (this.filterDoc.currentFilter as Doc)._docFiltersList = temp;
+ this.filterDoc._docRangeFilters = new List<string>();
+ (this.filterDoc.currentFilter as Doc)._docFiltersList = currentDocFilters;
+ (this.filterDoc.currentFilter as Doc)._docRangeFiltersList = currentDocRangeFilters;
this.filterDoc.currentFilter = undefined;
CurrentUserUtils.setupFilterDocs(this.filterDoc);
}
@@ -928,13 +931,21 @@ export class PropertiesView extends React.Component<PropertiesViewProps> {
*/
updateFilterDoc = (doc: Doc) => {
if (doc === this.filterDoc.currentFilter) return; // causes problems if you try to reapply the same doc
- const temp = doc._docFiltersList;
- const otherTemp = this.filterDoc._docFilters;
+ const savedDocFilters = doc._docFiltersList;
+ const currentDocFilters = this.filterDoc._docFilters;
this.filterDoc._docFilters = new List<string>();
- (this.filterDoc.currentFilter as Doc)._docFiltersList = otherTemp;
+ (this.filterDoc.currentFilter as Doc)._docFiltersList = currentDocFilters;
this.filterDoc.currentFilter = doc;
doc._docFiltersList = new List<string>();
- this.filterDoc._docFilters = temp;
+ this.filterDoc._docFilters = savedDocFilters;
+
+ const savedDocRangeFilters = doc._docRangeFiltersList;
+ const currentDocRangeFilters = this.filterDoc._docRangeFilters;
+ this.filterDoc._docRangeFilters = new List<string>();
+ (this.filterDoc.currentFilter as Doc)._docRangeFiltersList = currentDocRangeFilters;
+ this.filterDoc.currentFilter = doc;
+ doc._docRangeFiltersList = new List<string>();
+ this.filterDoc._docRangeFilters = savedDocRangeFilters;
}
@computed get filtersSubMenu() {
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index 542cbfe75..bc5a6129c 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -82,7 +82,7 @@ export function CollectionSubView<T, X>(schemaCtor: (doc: Doc) => T, moreProps?:
return Cast(this.dataField, listSpec(Doc));
}
docFilters = () => {
- return [...this.props.docFilters(), ...Cast(this.props.Document?._docFilters, listSpec("string"), [])];
+ return [...this.props.docFilters(), ...Cast(this.props.Document._docFilters, listSpec("string"), [])];
}
docRangeFilters = () => {
return [...this.props.docRangeFilters(), ...Cast(this.props.Document._docRangeFilters, listSpec("string"), [])];
diff --git a/src/client/views/nodes/FilterBox.tsx b/src/client/views/nodes/FilterBox.tsx
index 718ebca28..c6b5d4a0a 100644
--- a/src/client/views/nodes/FilterBox.tsx
+++ b/src/client/views/nodes/FilterBox.tsx
@@ -227,8 +227,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
newFacet.onTextChanged = ScriptField.MakeScript(scriptText, { this: Doc.name, text: "string" });
} else if (facetHeader !== "tags" && nonNumbers / facetValues.strings.length < .1) {
newFacet = Docs.Create.SliderDocument({
- title: facetHeader, _overflow: "visible", _fitWidth: true,
- _height: 40, _stayInCollection: true, treeViewExpandedView: "layout", treeViewOpen: true
+ title: facetHeader, _overflow: "visible", _fitWidth: true, target: targetDoc, _height: 40, _stayInCollection: true, treeViewExpandedView: "layout", treeViewOpen: true
});
const newFacetField = Doc.LayoutFieldKey(newFacet);
const ranged = Doc.readDocRangeFilter(targetDoc, facetHeader);
@@ -239,7 +238,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
newFacet[newFacetField + "-max"] = ranged === undefined ? extendedMaxVal : ranged[1];
Doc.GetProto(newFacet)[newFacetField + "-minThumb"] = extendedMinVal;
Doc.GetProto(newFacet)[newFacetField + "-maxThumb"] = extendedMaxVal;
- const scriptText = `setDocFilterRange(this?.target, "${facetHeader}", range)`;
+ const scriptText = `setDocRangeFilter(this?.target, "${facetHeader}", range)`;
newFacet.onThumbChanged = ScriptField.MakeScript(scriptText, { this: Doc.name, range: "number" });
} else {
newFacet = new Doc();
@@ -282,14 +281,22 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
@action
changeScope = (e: any) => {
if (FilterBox._filterScope === "Current Dashboard" && e.currentTarget.value === "Current Collection") {
- const temp = CurrentUserUtils.ActiveDashboard._docFilters;
+ const currentDashboardDocFilters = CurrentUserUtils.ActiveDashboard._docFilters;
CurrentUserUtils.ActiveDashboard._docFilters = new List<string>();
- (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docFilterList = temp;
+ (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docFilterList = currentDashboardDocFilters;
+
+ const currentDashboardDocRangeFilters = CurrentUserUtils.ActiveDashboard._docRangeFilters;
+ CurrentUserUtils.ActiveDashboard._docRangeFilters = new List<string>();
+ (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docRangeFilterList = currentDashboardDocRangeFilters;
}
else if (FilterBox._filterScope === "Current Collection" && e.currentTarget.value === "Current Dashboard") {
- const temp = (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docFilterList;
+ const savedDashboardDocFilters = (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docFilterList;
(CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docFilterList = undefined;
- CurrentUserUtils.ActiveDashboard._docFilters = temp;
+ CurrentUserUtils.ActiveDashboard._docFilters = savedDashboardDocFilters;
+
+ const savedDashboardDocRangeFilters = (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docRangeFilterList;
+ (CurrentUserUtils.ActiveDashboard.currentFilter as Doc)._docRangeFilterList = undefined;
+ CurrentUserUtils.ActiveDashboard._docRangeFilters = savedDashboardDocRangeFilters;
}
FilterBox._filterScope = e.currentTarget.value;
}
diff --git a/src/client/views/nodes/SliderBox.tsx b/src/client/views/nodes/SliderBox.tsx
index 67f8aed3c..92d1f7446 100644
--- a/src/client/views/nodes/SliderBox.tsx
+++ b/src/client/views/nodes/SliderBox.tsx
@@ -4,8 +4,7 @@ import * as React from 'react';
import { Handles, Rail, Slider, Ticks, Tracks } from 'react-compound-slider';
import { documentSchema } from '../../../fields/documentSchemas';
import { createSchema, makeInterface } from '../../../fields/Schema';
-import { ScriptField } from '../../../fields/ScriptField';
-import { Cast, NumCast, StrCast } from '../../../fields/Types';
+import { NumCast, ScriptCast, StrCast } from '../../../fields/Types';
import { ContextMenu } from '../ContextMenu';
import { ContextMenuProps } from '../ContextMenuItem';
import { ViewBoxBaseComponent } from '../DocComponent';
@@ -41,7 +40,7 @@ export class SliderBox extends ViewBoxBaseComponent<FieldViewProps, SliderDocume
onChange = (values: readonly number[]) => runInAction(() => {
this.dataDoc[this.minThumbKey] = values[0];
this.dataDoc[this.maxThumbKey] = values[1];
- Cast(this.layoutDoc.onThumbChanged, ScriptField, null)?.script.run({
+ ScriptCast(this.layoutDoc.onThumbChanged, null)?.script.run({
self: this.rootDoc,
scriptContext: this.props.scriptContext, range: values, this: this.layoutDoc
});
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 44eb7536e..c1b1ed7f6 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -1058,7 +1058,8 @@ export namespace Doc {
prevLayout === "icon" && (doc.deiconifyLayout = undefined);
doc.layoutKey = deiconify || "layout";
}
- export function setDocFilterRange(container: Doc, key: string, range?: number[]) {
+ export function setDocRangeFilter(container: Opt<Doc>, key: string, range?: number[]) {
+ if (!container) return;
const docRangeFilters = Cast(container._docRangeFilters, listSpec("string"), []);
for (let i = 0; i < docRangeFilters.length; i += 3) {
if (docRangeFilters[i] === key) {
@@ -1352,4 +1353,4 @@ Scripting.addGlobal(function selectedDocs(container: Doc, excludeCollections: bo
return docs.length ? new List(docs) : prevValue;
});
Scripting.addGlobal(function setDocFilter(container: Doc, key: string, value: any, modifiers: "match" | "check" | "x" | "remove") { Doc.setDocFilter(container, key, value, modifiers); });
-Scripting.addGlobal(function setDocFilterRange(container: Doc, key: string, range: number[]) { Doc.setDocFilterRange(container, key, range); });
+Scripting.addGlobal(function setDocRangeFilter(container: Doc, key: string, range: number[]) { Doc.setDocRangeFilter(container, key, range); });