aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/views/FilterPanel.scss33
-rw-r--r--src/client/views/FilterPanel.tsx102
-rw-r--r--src/client/views/PropertiesView.scss11
-rw-r--r--src/client/views/PropertiesView.tsx5
-rw-r--r--src/fields/Doc.ts1
5 files changed, 131 insertions, 21 deletions
diff --git a/src/client/views/FilterPanel.scss b/src/client/views/FilterPanel.scss
index 4f0460659..7cf886e12 100644
--- a/src/client/views/FilterPanel.scss
+++ b/src/client/views/FilterPanel.scss
@@ -135,7 +135,7 @@
.filterBox-addFilter {
width: 120px;
- background-color: #e9e9e9;
+ backgroundcolor: #e9e9e9;
border-radius: 12px;
padding: 5px;
margin: 5px;
@@ -188,6 +188,8 @@
margin-bottom: 10px;
margin-left: 5px;
overflow: auto;
+
+
}
}
@@ -199,14 +201,35 @@
// float:right;
.filterBox-facetHeader-collapse{
- float: right;
- justify-items: right;
- align-items: flex-end;
+ // float: right;
+ // justify-items: right;
+ // align-items: flex-end;
margin-left: auto;
- margin-right: 9px;
+ // margin-right: 9px;
+
+ float: right;
+ font-size: 16;
+ }
+
+ .filterBox-facetHeader-remove{
+ // margin-left: auto;
+ float: right;
+ font-size: 16;
}
+
+
}
+.filterbox-collpasedAndActive{
+ // left:100px;
+ text-indent: 18px;
+ // background-color: pink;
+ font-size: 12px;
+ font-weight: bold;
+
+}
+
+
diff --git a/src/client/views/FilterPanel.tsx b/src/client/views/FilterPanel.tsx
index 68d29942b..b03e11f79 100644
--- a/src/client/views/FilterPanel.tsx
+++ b/src/client/views/FilterPanel.tsx
@@ -14,9 +14,12 @@ import { undoable } from '../util/UndoManager';
import { AiOutlineMinusSquare } from 'react-icons/ai';
import { CiCircleRemove } from 'react-icons/ci';
+//slight bug when you don't click on background canvas before creating filter and the you click on the canvas
+
interface filterProps {
rootDoc: Doc;
}
+
@observer
export class FilterPanel extends React.Component<filterProps> {
public static LayoutString(fieldKey: string) {
@@ -102,18 +105,28 @@ export class FilterPanel extends React.Component<filterProps> {
return { strings: Array.from(valueSet.keys()), rtFields };
}
+
+
public removeFilter = (filterName: string) => {
Doc.setDocFilter(this.targetDoc, filterName, undefined, 'remove');
Doc.setDocRangeFilter(this.targetDoc, filterName, undefined);
};
@observable _chosenFacets = new ObservableMap<string, 'text' | 'checkbox' | 'slider' | 'range'>();
+ @observable _chosenFacetsCollapse = new ObservableMap<string, boolean>();
+ @observable _currentActiveFilters = new ObservableMap<string, string>();
+ @observable _collapseReturnKeys = new Array();
+
+ // let returnKeys = [];
+
@computed get activeFacets() {
+ // console.log("chosen collpase " + this._chosenFacetsCollapse)
const facets = new Map<string, 'text' | 'checkbox' | 'slider' | 'range'>(this._chosenFacets);
StrListCast(this.targetDoc?._childFilters).map(filter => facets.set(filter.split(Doc.FilterSep)[0], filter.split(Doc.FilterSep)[2] === 'match' ? 'text' : 'checkbox'));
setTimeout(() => StrListCast(this.targetDoc?._childFilters).map(action(filter => this._chosenFacets.set(filter.split(Doc.FilterSep)[0], filter.split(Doc.FilterSep)[2] === 'match' ? 'text' : 'checkbox'))));
return facets;
}
+
/**
* Responds to clicking the check box in the flyout menu
*/
@@ -141,8 +154,33 @@ export class FilterPanel extends React.Component<filterProps> {
} else {
this._chosenFacets.set(facetHeader, 'checkbox');
}
+ this._chosenFacetsCollapse.set(facetHeader, false)
};
+
+ @action
+ sortingCurrentFacetValues = (facetHeader:string) => {
+
+ this._collapseReturnKeys.splice(0)
+
+ for (var key of this.facetValues(facetHeader)){
+ console.log("key : " + key )
+ if (this._currentActiveFilters.get(key)){
+ this._collapseReturnKeys.push(key)
+ }}
+ // return "hello"
+
+ return (<div className = " filterbox-collpasedAndActive">
+
+ {this._collapseReturnKeys.toString()}
+ </div>)
+
+
+ }
+
+
+
+
facetValues = (facetHeader: string) => {
const allCollectionDocs = new Set<Doc>();
SearchBox.foreachRecursiveDoc(this.targetDocChildren, (depth: number, doc: Doc) => allCollectionDocs.add(doc));
@@ -167,10 +205,10 @@ export class FilterPanel extends React.Component<filterProps> {
return nonNumbers / facetValues.length > 0.1 ? facetValues.sort() : facetValues.sort((n1: string, n2: string) => Number(n1) - Number(n2));
};
+
render() {
const options = this._allFacets.filter(facet => this.currentFacets.indexOf(facet) === -1).map(facet => ({ value: facet, label: facet }));
- console.log("this is option " + options)
- console.log("this is alll facets " + this._allFacets)
+
return (
<div className="filterBox-treeView">
<div className="filterBox-select">
@@ -196,15 +234,41 @@ export class FilterPanel extends React.Component<filterProps> {
<div className = "filterBox-facetHeader-Header"> </div>
{facetHeader.charAt(0).toUpperCase() + facetHeader.slice(1)}
- <div className = "filterBox-facetHeader-collapse">
- <AiOutlineMinusSquare/>
- {/* <CiCircleRemove/> */}
- </div>
-
+ {/* <div className = "filterBox-facetHeader-collapse"> */}
+ <div className = "filterBox-facetHeader-collapse"
+ onClick = {action((e) => {
+ const collapseBoolValue = this._chosenFacetsCollapse.get(facetHeader)
+ this._chosenFacetsCollapse.set(facetHeader, !collapseBoolValue )})}>
+
+ <AiOutlineMinusSquare/>
+
+ </div>
+
+ <div className='filterBox-facetHeader-remove'
+ onClick = {action((e) => {
+ for (var key of this.facetValues(facetHeader)){
+ if (this._currentActiveFilters.get(key)){
+ Doc.setDocFilter(this.targetDoc, facetHeader, key, 'remove')
+ this._currentActiveFilters.delete(key)
+ }}
+
+ this.activeFacets.delete(facetHeader)
+ this._chosenFacets.delete(facetHeader)
+ this._chosenFacetsCollapse.delete(facetHeader)
+
+ })} >
+
+ <CiCircleRemove/> </div>
+ {/* </div> */}
+
</div>
-
- {this.displayFacetValueFilterUIs(this.activeFacets.get(facetHeader), facetHeader)}
+ { this._chosenFacetsCollapse.get(facetHeader) ?
+ // <div className = 'filterbox-collpasedAndActive' style={{backgroundColor: 'yellow', fontSize: 50}} > {this.sortingCurrentFacetValues(facetHeader)} </div> && this._collapseReturnKeys.splice(0)
+ this.sortingCurrentFacetValues(facetHeader)
+ // && this._collapseReturnKeys.splice(0)
+ : this.displayFacetValueFilterUIs(this.activeFacets.get(facetHeader), facetHeader) }
+ {/* */}
</div>
))}
</div>
@@ -227,19 +291,26 @@ export class FilterPanel extends React.Component<filterProps> {
/>
);
case 'checkbox':
+
return this.facetValues(facetHeader).map(fval => {
const facetValue = fval;
return (
<div>
<input
style={{ width: 20, marginLeft: 20 }}
- checked={
- StrListCast(this.targetDoc._childFilters)
- .find(filter => filter.split(Doc.FilterSep)[0] === facetHeader && filter.split(Doc.FilterSep)[1] == facetValue)
- ?.split(Doc.FilterSep)[2] === 'check'
+ checked={
+ StrListCast(this.targetDoc._childFilters)
+ .find(filter => filter.split(Doc.FilterSep)[0] === facetHeader && filter.split(Doc.FilterSep)[1] == facetValue)
+ ?.split(Doc.FilterSep)[2] === 'check'
+
}
type={type}
- onChange={undoable(e => Doc.setDocFilter(this.targetDoc, facetHeader, fval, e.target.checked ? 'check' : 'remove'), 'set filter')}
+ onChange={undoable(e => Doc.setDocFilter(this.targetDoc, facetHeader, fval, e.target.checked ? 'check' : 'remove'), 'set filter')}
+ onClick={undoable (e =>
+ e.target.checked ? this._currentActiveFilters.set(fval, facetHeader) : this._currentActiveFilters.delete(fval) , 'set filter'
+ ) }
+
+
/>
{facetValue}
</div>
@@ -248,3 +319,6 @@ export class FilterPanel extends React.Component<filterProps> {
}
}
}
+
+
+// NEED TO LEARN HOW TO RESET FILTERS WHEN WEBPAGE IS RELOADED \ No newline at end of file
diff --git a/src/client/views/PropertiesView.scss b/src/client/views/PropertiesView.scss
index 060b506e3..23bf31b95 100644
--- a/src/client/views/PropertiesView.scss
+++ b/src/client/views/PropertiesView.scss
@@ -26,6 +26,17 @@
padding: 5px 10px;
}
+ .propertiesView-propAndInfoGrouping{
+ display: flex;
+ }
+
+ .propertiesView-info{
+ margin-top: 20;
+ margin-right: 10;
+ float: right;
+ font-size: 20;
+ }
+
.propertiesView-sharing {
//border-bottom: 1px solid black;
diff --git a/src/client/views/PropertiesView.tsx b/src/client/views/PropertiesView.tsx
index a6a99b3cc..3ad60865d 100644
--- a/src/client/views/PropertiesView.tsx
+++ b/src/client/views/PropertiesView.tsx
@@ -584,7 +584,8 @@ export class PropertiesView extends React.Component<PropertiesViewProps> {
return (
<div>
- <div className = "propertiesView-wordType">Type</div>
+ Type
+ {/* <div className = "propertiesView-wordType">Type</div> */}
<div className= "currentType">
<div className='currentType-icon'>
{this.currentComponent}
@@ -1733,7 +1734,7 @@ export class PropertiesView extends React.Component<PropertiesViewProps> {
<div className="propertiesView-title" style={{ width: this.props.width }}>
Properties
</div>
- <div className = "propertiesView-info" onClick={() => window.open('https://brown-dash.github.io/Dash-Documentation/')}>
+ <div className = "propertiesView-info" onClick={() => window.open('https://brown-dash.github.io/Dash-Documentation//properties/')}>
<GrCircleInformation/> </div>
</div>
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 5a8a6e4b6..770a72855 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -1437,6 +1437,7 @@ export namespace Doc {
// all documents with the specified value for the specified key are included/excluded
// based on the modifiers :"check", "x", undefined
export function setDocFilter(container: Opt<Doc>, key: string, value: any, modifiers: 'remove' | 'match' | 'check' | 'x' | 'exists' | 'unset', toggle?: boolean, fieldPrefix?: string, append: boolean = true) {
+ console.log("in setDocFilter: key "+ key + "value " + value)
if (!container) return;
const filterField = '_' + (fieldPrefix ? fieldPrefix + '_' : '') + 'childFilters';
const childFilters = StrListCast(container[filterField]);