Skip to content

Commit

Permalink
HUB-248 long query text (#29)
Browse files Browse the repository at this point in the history
* Replace agent id and dataset id for dataset

* use savedQueryId to fetch results

* Remove all instances of agentid and datasetid

* Fix sample queries loading in chart builder

* Update example link
  • Loading branch information
DanialBetres authored Oct 17, 2019
1 parent 19db74a commit bfb1f4d
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 97 deletions.
10 changes: 4 additions & 6 deletions src/components/Header.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,17 @@ class Header extends Component<{
}> {
render() {
const { store } = this.props
const { agentid, datasetid } = store
const { dataset } = store

const hasContext = !!(agentid && datasetid)
const hasContext = !!dataset

const href = hasContext
? `https://data.world/${agentid}/${datasetid}`
? `https://data.world/${dataset}`
: 'https://data.world'

const headerText = hasContext ? (
<Fragment>
<span style={{ color: 'white' }}>
{agentid}/{datasetid}
</span>
<span style={{ color: 'white' }}>{dataset}</span>
<span style={{ color: '#a3afbf' }}>/chart-builder</span>
</Fragment>
) : (
Expand Down
4 changes: 2 additions & 2 deletions src/components/__tests__/Header.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ it('renders', () => {
snap(<Header store={store} />)
})

it('renders with agentid/datasetid', () => {
it('renders with dataset', () => {
const store = Store.create({
location: {
search: 'agentid=foo&datasetid=bar'
search: 'dataset=foo/bar'
}
})

Expand Down
6 changes: 2 additions & 4 deletions src/components/__tests__/__snapshots__/Header.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ exports[`renders 1`] = `
</nav>
`;

exports[`renders with agentid/datasetid 1`] = `
exports[`renders with dataset 1`] = `
<nav
className="navbar navbar-inverse navbar-static-top"
style={
Expand Down Expand Up @@ -116,9 +116,7 @@ exports[`renders with agentid/datasetid 1`] = `
}
}
>
foo
/
bar
foo/bar
</span>
<span
style={
Expand Down
50 changes: 14 additions & 36 deletions src/util/Store.js
Original file line number Diff line number Diff line change
Expand Up @@ -342,12 +342,11 @@ export type StoreType = {

// views
parsedUrlQuery: Object,
possibleResourceFromQuery: ?{ agentid: string, datasetid: string },
hasValidParams: boolean,
agentid: string,
datasetid: string,
query: string,
queryType: 'sql' | 'sparql',
savedQueryId: string | null,
dataset: string,

// actions
syncQueryParams: Object => void,
Expand All @@ -369,45 +368,13 @@ const Store: ModelType<StoreType> = types
})
.views((self: StoreType) => ({
get hasValidParams() {
return !!self.agentid && !!self.datasetid && !!self.query
return !!self.dataset && (!!self.query || !!self.savedQueryId)
},

get parsedUrlQuery() {
return parseParams(self.location.search)
},

/*
support 3 types of passing resource:
dataset=<agentid>/<datasetid>
project=<agentid>/<datasetid>
agentid=<agentid>&datasetid=<datasetid>
they're preferred in that order
*/
get possibleResourceFromQuery() {
const resource: ?string =
self.parsedUrlQuery.dataset || self.parsedUrlQuery.project
if (resource != null) {
const [agentid, datasetid] = resource.split('/')
if (agentid && datasetid) {
return { agentid, datasetid }
}
}
return null
},

get agentid() {
const resource = self.possibleResourceFromQuery
if (resource) return resource.agentid

return self.parsedUrlQuery.agentid
},
get datasetid() {
const resource = self.possibleResourceFromQuery
if (resource) return resource.datasetid

return self.parsedUrlQuery.datasetid
},
get query() {
return self.parsedUrlQuery.query
},
Expand All @@ -418,6 +385,17 @@ const Store: ModelType<StoreType> = types
if (lowered === 'sql' || lowered === 'sparql') return lowered
}
return 'sql'
},
get savedQueryId() {
const providedSavedQueryId = self.parsedUrlQuery.saved_query
if (!providedSavedQueryId) {
return null
}
return providedSavedQueryId
},
get dataset() {
const providedDataset = self.parsedUrlQuery.dataset
return providedDataset
}
}))
.actions((self: StoreType) => ({
Expand Down
33 changes: 4 additions & 29 deletions src/util/__test__/Store.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,20 @@ describe('Store', () => {
it('detects valid params', () => {
const store = Store.create({
location: {
search: 'agentid=foo&datasetid=bar&query=select'
search: 'dataset=foo/bar&query=select'
}
})
expect(store.hasValidParams).toBe(true)
expect({
agentid: store.agentid,
datasetid: store.datasetid,
dataset: store.dataset,
query: store.query
}).toMatchSnapshot()
})

it('detects invalid params', () => {
const store = Store.create({
location: {
search: 'agentid=foo&datasetid=bar'
search: 'dataset=foo/bar'
}
})
expect(store.hasValidParams).toBe(false)
Expand All @@ -40,36 +39,12 @@ describe('Store', () => {
it(`standardizes queryType from ${type} to ${expected}`, () => {
const store = Store.create({
location: {
search: `agentid=foo&datasetid=bar&query=select&query_type=${type}`
search: `dataset=foo/bar&query=select&query_type=${type}`
}
})
expect(store.queryType).toBe(expected)
})
})
;[
['agentid=a&datasetid=b', { agentid: 'a', datasetid: 'b' }],
['dataset=a/b', { agentid: 'a', datasetid: 'b' }],
['dataset=a&agentid=b&datasetid=c', { agentid: 'b', datasetid: 'c' }],
['project=a/b', { agentid: 'a', datasetid: 'b' }],
['dataset=c/d&project=a/b', { agentid: 'c', datasetid: 'd' }],
[
'dataset=c/d&project=a/b&agentid=e&datasetid=f',
{ agentid: 'c', datasetid: 'd' }
]
].forEach(([search, expected]) => {
it(`parsing agentid/datasetid works for ${search}`, () => {
const store = Store.create({
location: {
search
}
})

expect({
agentid: store.agentid,
datasetid: store.datasetid
}).toEqual(expected)
})
})
})

describe('ChartConfig', () => {
Expand Down
3 changes: 1 addition & 2 deletions src/util/__test__/__snapshots__/Store.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@ Object {

exports[`Store detects valid params 1`] = `
Object {
"agentid": "foo",
"datasetid": "bar",
"dataset": "foo/bar",
"query": "select",
}
`;
Expand Down
42 changes: 26 additions & 16 deletions src/views/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,6 @@ class App extends Component<AppP> {
}
}

getQueryUrl() {
const { store } = this.props
return `${API_HOST}/v0/${store.queryType}/${store.agentid}/${
store.datasetid
}?includeTableSchema=true`
}

getQueryHeaders() {
const { store } = this.props
return {
Expand All @@ -91,11 +84,28 @@ class App extends Component<AppP> {
this.data = null
this.loading = true
})
const res = await fetch(this.getQueryUrl(), {
method: 'POST',
headers: this.getQueryHeaders(),
body: createParams({ query: store.query }).toString()
})

let res
if (store.savedQueryId && !store.savedQueryId.includes('sample')) {
const savedQueryURL = `${API_HOST}/v0/queries/${
store.savedQueryId
}/results?includeTableSchema=true`

res = await fetch(savedQueryURL, {
method: 'GET',
headers: this.getQueryHeaders()
})
} else {
const unsavedQueryURL = `${API_HOST}/v0/${store.queryType}/${
store.dataset
}?includeTableSchema=true`

res = await fetch(unsavedQueryURL, {
method: 'POST',
headers: this.getQueryHeaders(),
body: createParams({ query: store.query }).toString()
})
}

const loadError = () =>
runInAction(() => {
Expand Down Expand Up @@ -249,7 +259,7 @@ class App extends Component<AppP> {
to={{
pathname: '/',
search:
'?s=N4IgbgpgTgzglgewHYgFwEYA0IA2CDGAhgC6IqqgwSFT4AWaIA-IQOYRKkAmAvAFbI8ATw4wAZFxKEq3HnE7QAthC5wSEALSTihDQHcEUHFzEBHAK7QhPKjgj5iAUgBMABhcBBF64BmUBIrejq5eAGyuMHQICKRIrDD4cMRCMDrEEAB0+DBgLgBikdGx8YnJqeqO4S4AwsEerIrIEEIZla7mMBqlQhrpigAOGlCEcRAwba3h1UlC3gAqEAPeAEoj7BkAHjgwG-kAInA+PtAc+BDe8vOL-eNVIXp0J96FMfIlM+XpWR9p5wDMeza02SVyWblWo02212zjyByOJyQZwuSFBNwmwKEZksUCEAH1kv0IDwAMoARQAMiAAL7YfDIHxwVhoUCkYh2NBIcw4HDYRQ0ADWjAARjQQNhTghVHEYGgANqgPFwLhoVzYRkQYyMT4QPFIQjKcUgegjJCaxgbI2EiCMQjmYgII3C+RoHyEbYQbBsVhQCCsdSc7m8kAAL2gjtQxCglmwCXdNtQuHk1CgRpghmItoSHGlzOwpGUAFUkElAzzYxm8nBNSrUFyebTFcq0FgQBqtYmAFRGk1IM04RhCK1CIm2+2O7DO8huj1e1g+v0BxP08ycI1h-xoKMxkBxjmJnDJsUVqCZxPSM5IXNWuBFktn+vB9Onqs1ss4RsgJW15zq6sdx86ToU1zWXBA8FTfMRwTEA7QdJ0XVQGcqDnBd-XSd9sA3CNt09XciH3JMzWPXcMyzS9r3zW8IGLUs6yDE9iFfACg2pABdPkRnMd0SSJfBMJAPRlWIBh6PLEBHiZOgH1Y6kgA'
'?s=N4IgbgpgTgzglgewHYgFwEYA0IA2CDGAhgC6IqqgwSFT4AWaIA-ACYmFXEC8AVsngE8ISGAFIATADE4SYtAC2EFnBIQAtG2KE1AdwRQcLAGQBHAK7QBXKjgj5iEgAwSAgk4BmUBPKcw6CBFIkAHMYfDhiARgtOQkAYVFHF2D5ZAgBADpRADZHMxg1cMi1OXkABzUoQhCIMVys3LiIgScAFQhypwAlauCIDIAPHBgBiUkAETh3d2hhfAgnGTaOsrrnJJ06Wd9-QJlQoqiY-sPo1VEAZnGcxybI5c7xRx6aweHRqUnp2aR5xaQHqsbhk7gJTBYoAIAPqRMoQLgAZQAigAZEAAX2w+GQ7jgwTQoFIxFsaCQZhwOGw8hoAGtGAAjGggbBzBDKEIwNAAbVAULgLDQjmwuIghkYZzkUKQhEUzJA9GqSFFjAGcthEEYhDMxAQcvpMjQ7kIwwg2EIwWCUAgwVUpPJlJAAC9oLrUMQoBZsGFjRrULgZNQoHKYPpiJqwsJ2fjsKRFABVJARO0Ur2h6SigWoMkUzG8-loLAgEViv0AKjlCqQSpwjAEaoEcM12t12H15CNJrNFqtNrkjGxZlkcudXjQ7s9IG9JL9OADTNTUDDfo48yQUbVcHjiaX2YdIcX6ZLu9zID5mfEwrgGeTDsr1f7CDwQZjDd9IC1Or1BtQHaoXct1q2lm9rYCOrrjqak5ENO-pKvOk6huGq7rjGm4QAmSbASmCEHleR72uiAC6VLVGYxoInC+A3tgOj8sQDBYQ6Wx4nQO4EeiQA'
}}
>
Here's another example (with a preconfigured chart)
Expand Down Expand Up @@ -286,7 +296,7 @@ class App extends Component<AppP> {

return (
<Fragment>
<Header agentid={store.agentid} datasetid={store.datasetid} />
<Header />

<div className={classes.main}>
<Sidebar />
Expand Down Expand Up @@ -350,14 +360,14 @@ class App extends Component<AppP> {
{this.saveModalOpen === 'insight' && (
<SaveAsInsightModal
onClose={() => (this.saveModalOpen = false)}
defaultId={store.agentid + '/' + store.datasetid}
defaultId={store.dataset}
data={this.data}
/>
)}
{this.saveModalOpen === 'file' && (
<SaveAsFileModal
onClose={() => (this.saveModalOpen = false)}
defaultId={store.agentid + '/' + store.datasetid}
defaultId={store.dataset}
data={this.data}
/>
)}
Expand Down
3 changes: 1 addition & 2 deletions src/views/StateRestorationGate.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ export default class StateRestorationGate extends Component<Props> {
history.replace({
pathname: '/',
search: createParams({
agentid: store.agentid,
datasetid: store.datasetid,
dataset: store.dataset,
query: store.query
}).toString()
})
Expand Down

0 comments on commit bfb1f4d

Please sign in to comment.