Skip to content

Commit bacd846

Browse files
committed
Merge branch 'newDoc' of https://github.com/terminusdb/terminusdb-dashboard into newDoc
2 parents f4451b9 + 9d708f3 commit bacd846

File tree

4 files changed

+211
-4
lines changed

4 files changed

+211
-4
lines changed

packages/tdb-documents-ui-template/src/components/DocumentsGraphqlTable.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React,{useState,useEffect} from "react";
2-
import {AdvancedSearch, GraphqlTable, ControlledGraphqlQuery} from '@terminusdb/terminusdb-react-table'
2+
import {AdvancedSearch, GraphqlTable, useGraphqlTDBTable} from '@terminusdb/terminusdb-react-table'
33
import {Tab,Tabs,Button,Alert,Container,ProgressBar} from 'react-bootstrap'
44
import { GraphqlQueryView } from "./GraphqlQueryViewer";
55
import { format } from 'graphql-formatter'
@@ -31,7 +31,7 @@ export const DocumentsGraphqlTable = ({gqlQuery,apolloClient,tableConfig, type,
3131
filterBy,
3232
loading,
3333
// hiddenColumnsArr,
34-
extractedData } = ControlledGraphqlQuery(apolloClient,query, type, 10, 0, {}, false);
34+
extractedData } = useGraphqlTDBTable(apolloClient,query, type, 10, 0, {}, false);
3535

3636
let extractedResults = extractedData || []
3737

packages/tdb-react-table/src/AdvancedSearch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ export const AdvancedSearch = (props) =>{
196196
}
197197

198198
//"element/part/name
199-
if(field.indexOf("/")>-1){
199+
if(field && field.indexOf("/")>-1){
200200
const fieldArr = field.split("/");
201201
let fieldObj = {}
202202
let i = (fieldArr.length-2)
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
import React, {useState, useEffect} from 'react'
2+
import {extractDocuments} from './hookUtility'
3+
4+
export function useGraphqlTDBTable (apolloClient, graphqlQuery, documentType, queryLimit, queryStart, order, filter,tableConfigObj,hiddenColumnsStart) {
5+
const [limit, setLimit] = useState(queryLimit || 10)
6+
const [start, setStart] = useState(queryStart || 0)
7+
const [error, setError] = useState(false)
8+
const [loading, setLoading] = useState(false)
9+
const [rowCount, setRowCount] = useState(0)
10+
// const [hasNextPage, setHasNextPage] = useState(true)
11+
const [controlledRefresh, setControlledRefresh] = useState(0)
12+
const [data, setData] = useState(null)
13+
const [extractedData, setExtractedData] = useState(null)
14+
15+
const [hiddenColumnsArr,setHiddenColumnsArr] = useState(['_id'])
16+
17+
//filter is the filter formatted for the query
18+
let filterTable = []
19+
20+
// the original orderBy from the table and the object for the query
21+
const [orderBy, setOrderBy] = useState([])
22+
const [queryOrderBy, setQueryOrderBy] = useState(false)
23+
24+
const [filterBy, setFilters] = useState(filterTable)
25+
const [queryFilters, setQueryFilters] = useState(false)
26+
27+
28+
function formatFilterForTable(){
29+
if (filter){
30+
const keys = Object.keys(filter)
31+
keys.forEach(propN =>{
32+
33+
const operator = Object.keys(filter[propN])[0]
34+
35+
filterTable.push({id:propN, value:{value:filter[propN][operator],operator:operator}})
36+
})
37+
setFilters(filterTable)
38+
}
39+
}
40+
41+
const callFetchMore = async (currentlimit,currentpage,currentOrderBy,currentFilter) =>{
42+
setLoading(true)
43+
setError(false)
44+
try{
45+
const result = await apolloClient.query({query:graphqlQuery,
46+
variables:{"offset":currentpage , "limit":currentlimit+1,
47+
"orderBy":currentOrderBy || {}, "filter":currentFilter || {}}})
48+
49+
if(result.errors) {
50+
setRowCount(0)
51+
setData([])
52+
setError("Graphql Error")
53+
}else{
54+
const data = result.data
55+
if(!Array.isArray(data[documentType]))return []
56+
//current page is the startoffset
57+
const rowCountTmp = currentpage+data[documentType].length
58+
if(data[documentType].length === (currentlimit+1)){
59+
//setHasNextPage(false)
60+
data[documentType].pop()
61+
}
62+
setRowCount(rowCountTmp)
63+
const extractedData = extractDocuments(data[documentType])
64+
setData(data)
65+
setExtractedData(extractedData)
66+
}
67+
}catch(err){
68+
console.log("ERRORRRRR",err)
69+
}finally{
70+
setLoading(false)
71+
}
72+
}
73+
74+
75+
const changeLimits =(currentlimit,currentpage,fetchMore=false)=>{
76+
setStart(currentpage)
77+
setLimit(currentlimit)
78+
console.log("changeLimits" ,queryFilters)
79+
callFetchMore(currentlimit,currentpage,queryOrderBy,queryFilters)
80+
}
81+
82+
/*
83+
* the advanced filter is already formatted for the query
84+
*/
85+
const setAdvancedFilters = (advfilter,fetchMore=false)=>{
86+
setFilters([])
87+
setQueryFilters(advfilter)
88+
console.log("setAdvancedFilters" ,advfilter, queryFilters)
89+
callFetchMore(limit,start,queryOrderBy,advfilter)
90+
}
91+
92+
/*
93+
* the table filter need to be transformed
94+
*/
95+
const changeFilters = (filtersArr) =>{
96+
const filtersTmp = {}
97+
if(Array.isArray(filtersArr)){
98+
filtersArr.forEach(item=>{
99+
// value has operator:value {"eq":"myvalue"}
100+
if(item.value){
101+
let elementValue = item.value.value
102+
if(item.value.operator === "regex"){
103+
elementValue = `(?i)${elementValue}`
104+
}
105+
106+
let value = {[item.value.operator]: elementValue}
107+
108+
if(item.value.mode === "ARRAY"){
109+
value = {"someHave": {[item.value.operator]: elementValue}}
110+
}
111+
112+
//max 2 level
113+
if(item.value.varPath){
114+
try{
115+
const level01 = Object.keys(item.value.varPath)[0]
116+
if(!filtersTmp[level01] ) filtersTmp[level01] = {}
117+
118+
const level02 = Object.keys(item.value.varPath[level01])[0]
119+
filtersTmp[level01][level02] = value
120+
}catch(err){
121+
console.log(err.message)
122+
filtersTmp[item.id] = value
123+
}
124+
}else{
125+
filtersTmp[item.id] = value
126+
}
127+
}
128+
})
129+
}
130+
setFilters(filtersArr)
131+
setStart(0)
132+
setQueryFilters(filtersTmp)
133+
134+
console.log("changeFilters" ,filtersArr, filtersTmp)
135+
callFetchMore(limit,0,queryOrderBy,filtersTmp)
136+
}
137+
138+
const changeOrder = (orderByArr) =>{
139+
const orderByObj = {}
140+
if(Array.isArray(orderByArr)){
141+
orderByArr.forEach(item=>{
142+
orderByObj[item.id] = item.desc === true ? "DESC" : "ASC"
143+
})
144+
}
145+
setOrderBy(orderByArr)
146+
setStart(0)
147+
setQueryOrderBy(orderByObj)
148+
callFetchMore(limit,0,orderByObj,queryFilters)
149+
}
150+
151+
const onRefresh = () => {
152+
setRefresh(controlledRefresh+1)
153+
}
154+
155+
const setHiddenColumns =(id, checked)=>{
156+
const indexof = hiddenColumnsArr.indexOf(id)
157+
if(id==="__ALL__"){
158+
if(checked){
159+
setHiddenColumnsArr([])
160+
}else{
161+
//columns name
162+
if(Array.isArray(tableConfigObj)){
163+
tableConfigObj.forEach(item =>{
164+
if(hiddenColumnsArr.indexOf(item.id) === -1)
165+
hiddenColumnsArr.push(item.id)
166+
})
167+
}
168+
}
169+
}else{
170+
if(indexof>-1 && checked===true){
171+
// we remove the item if it is in the array
172+
const x = hiddenColumnsArr.splice(indexof, 1);
173+
}else if(checked===false && indexof=== -1) {
174+
hiddenColumnsArr.push(id)
175+
}
176+
}
177+
178+
}
179+
180+
return {
181+
callFetchMore,
182+
documentError:error,
183+
// updateDocument,
184+
changeOrder,
185+
changeLimits,
186+
changeFilters,
187+
setAdvancedFilters,
188+
orderBy,
189+
filterBy,
190+
queryFilters,
191+
queryOrderBy,
192+
// controlledDocument,
193+
limit,
194+
start,
195+
loading,
196+
rowCount,
197+
onRefresh,
198+
documentResults:data,
199+
extractedData,
200+
hiddenColumnsArr,
201+
setHiddenColumns,
202+
// maybe we need to set from outside
203+
// setDocumentResults,
204+
// setControlledRefresh,
205+
controlledRefresh
206+
}
207+
}

packages/tdb-react-table/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
export {ControlledQueryHook} from './hook/ControlledQuery';
77
export {ControlledGetDocumentQuery} from "./hook/ControlledGetDocumentQuery"
88
export {ControlledDocuments} from "./hook/ControlledDocuments"
9-
export {ControlledGraphqlQuery} from "./hook/ControlledGraphqlQuery"
9+
export {useGraphqlTDBTable} from "./hook/useGraphqlTDBTable"

0 commit comments

Comments
 (0)