|
|
@ -1,16 +1,20 @@ |
|
|
|
import React, { useState, useEffect } from 'react'; |
|
|
|
import React, { useState, useEffect } from 'react'; |
|
|
|
import { ThemeProvider, CssBaseline, createMuiTheme, AppBar, Box } from '@material-ui/core'; |
|
|
|
import { ThemeProvider, CssBaseline, createMuiTheme, AppBar, Box, LinearProgress } from '@material-ui/core'; |
|
|
|
import { QueryElem, toApiQuery } from '../lib/query/Query'; |
|
|
|
import { QueryElem, toApiQuery } from '../lib/query/Query'; |
|
|
|
import QueryBuilder from './querybuilder/QueryBuilder'; |
|
|
|
import QueryBuilder from './querybuilder/QueryBuilder'; |
|
|
|
import * as serverApi from '../api'; |
|
|
|
import * as serverApi from '../api'; |
|
|
|
import { SongTable } from './tables/ResultsTable'; |
|
|
|
import { SongTable } from './tables/ResultsTable'; |
|
|
|
import stringifyList from '../lib/stringifyList'; |
|
|
|
import stringifyList from '../lib/stringifyList'; |
|
|
|
import { getArtists, getSongTitles, getAlbums, getTags } from '../lib/query/Getters'; |
|
|
|
import { getArtists, getSongTitles, getAlbums, getTags } from '../lib/query/Getters'; |
|
|
|
|
|
|
|
import { grey } from '@material-ui/core/colors'; |
|
|
|
var _ = require('lodash'); |
|
|
|
var _ = require('lodash'); |
|
|
|
|
|
|
|
|
|
|
|
const darkTheme = createMuiTheme({ |
|
|
|
const darkTheme = createMuiTheme({ |
|
|
|
palette: { |
|
|
|
palette: { |
|
|
|
type: 'dark' |
|
|
|
type: 'dark', |
|
|
|
|
|
|
|
primary: { |
|
|
|
|
|
|
|
main: grey[100], |
|
|
|
|
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
@ -34,7 +38,7 @@ export default function Window(props: any) { |
|
|
|
// Recursively resolve the name.
|
|
|
|
// Recursively resolve the name.
|
|
|
|
const resolveTag = (tag: any) => { |
|
|
|
const resolveTag = (tag: any) => { |
|
|
|
var r = [tag.name]; |
|
|
|
var r = [tag.name]; |
|
|
|
if(tag.parent) { r.unshift(resolveTag(tag.parent)); } |
|
|
|
if (tag.parent) { r.unshift(resolveTag(tag.parent)); } |
|
|
|
return r; |
|
|
|
return r; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -42,7 +46,7 @@ export default function Window(props: any) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const doQuery = async (_query: QueryElem) => {
|
|
|
|
const doQuery = async (_query: QueryElem) => { |
|
|
|
var q: serverApi.QueryRequest = { |
|
|
|
var q: serverApi.QueryRequest = { |
|
|
|
query: toApiQuery(_query), |
|
|
|
query: toApiQuery(_query), |
|
|
|
offsetsLimits: { |
|
|
|
offsetsLimits: { |
|
|
@ -56,17 +60,17 @@ export default function Window(props: any) { |
|
|
|
ascending: true, |
|
|
|
ascending: true, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const requestOpts = { |
|
|
|
const requestOpts = { |
|
|
|
method: 'POST', |
|
|
|
method: 'POST', |
|
|
|
headers: { 'Content-Type': 'application/json' }, |
|
|
|
headers: { 'Content-Type': 'application/json' }, |
|
|
|
body: JSON.stringify(q), |
|
|
|
body: JSON.stringify(q), |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return (async () => { |
|
|
|
return (async () => { |
|
|
|
const response = await fetch((process.env.REACT_APP_BACKEND || "") + serverApi.QueryEndpoint, requestOpts) |
|
|
|
const response = await fetch((process.env.REACT_APP_BACKEND || "") + serverApi.QueryEndpoint, requestOpts) |
|
|
|
let json: any = await response.json(); |
|
|
|
let json: any = await response.json(); |
|
|
|
if(_.isEqual(query, _query)) { |
|
|
|
if (_.isEqual(query, _query)) { |
|
|
|
setResultsFor({ |
|
|
|
setResultsFor({ |
|
|
|
for: _query, |
|
|
|
for: _query, |
|
|
|
results: json.songs, |
|
|
|
results: json.songs, |
|
|
@ -114,6 +118,7 @@ export default function Window(props: any) { |
|
|
|
songs={showResults} |
|
|
|
songs={showResults} |
|
|
|
songGetters={songGetters} |
|
|
|
songGetters={songGetters} |
|
|
|
/> |
|
|
|
/> |
|
|
|
|
|
|
|
{loading && <LinearProgress />} |
|
|
|
</Box> |
|
|
|
</Box> |
|
|
|
</Box> |
|
|
|
</Box> |
|
|
|
|
|
|
|
|
|
|
|