Mirror of https://github.com/roostorg/osprey
github.com/roostorg/osprey
1import { QueryRecord, SavedQuery, QueryState, QueryRecordRequest, TopNTable } from '../types/QueryTypes';
2import HTTPUtils, { HTTPResponse } from '../utils/HTTPUtils';
3import { formatQueryForRequest } from './QueryActions';
4
5export async function createSavedQuery(queryId: string, name: string): Promise<SavedQuery> {
6 /* eslint-disable-next-line */
7 const response: HTTPResponse = await HTTPUtils.post('saved-queries', { query_id: queryId, name });
8 if (!response.ok) {
9 throw Error;
10 }
11
12 let data = response.data;
13 if (Array.isArray(data.query.top_n)) {
14 data.query.top_n = data.query.top_n.map(TopNTable.fromQueryParam);
15 }
16
17 return data;
18}
19
20export async function getSavedQueries(userEmail?: string, before?: string): Promise<SavedQuery[]> {
21 const response: HTTPResponse = await HTTPUtils.get('saved-queries', {
22 params: { before, user_email: userEmail } /* eslint-disable-line */,
23 });
24
25 if (!response.ok) {
26 return [];
27 }
28
29 let data = response.data;
30
31 return data.map((d: any) => {
32 if (Array.isArray(d.query.top_n)) {
33 d.query.top_n = d.query.top_n.map(TopNTable.fromQueryParam);
34 }
35 return d;
36 });
37}
38
39export async function getSavedQuery(savedQueryId: string): Promise<SavedQuery> {
40 const response: HTTPResponse = await HTTPUtils.get(`saved-queries/${savedQueryId}`);
41
42 if (!response.ok) {
43 throw Error('Saved query not found');
44 }
45
46 let data = response.data;
47 if (Array.isArray(data.query.top_n)) {
48 data.query.top_n = data.query.top_n.map(TopNTable.fromQueryParam);
49 }
50
51 return data;
52}
53
54export async function updateSavedQuery(
55 savedQueryId: string,
56 name: string,
57 queryState?: QueryState
58): Promise<SavedQuery> {
59 const updateData: { name: string; query?: QueryRecordRequest } = { name };
60
61 if (queryState != null) {
62 updateData.query = formatQueryForRequest(queryState);
63 }
64
65 const response: HTTPResponse = await HTTPUtils.patch(`saved-queries/${savedQueryId}`, updateData);
66
67 if (!response.ok) {
68 throw Error('Error updating saved query');
69 }
70
71 let data = response.data;
72 if (Array.isArray(data.query.top_n)) {
73 data.query.top_n = data.query.top_n.map(TopNTable.fromQueryParam);
74 }
75
76 return data;
77}
78
79export async function getSavedQueryHistory(savedQueryId: string): Promise<QueryRecord[]> {
80 const response: HTTPResponse = await HTTPUtils.get(`saved-queries/${savedQueryId}/history`);
81
82 if (!response.ok) {
83 return [];
84 }
85
86 let data = response.data;
87
88 return data.map((d: any) => {
89 if (Array.isArray(d.top_n)) {
90 d.top_n = d.top_n.map(TopNTable.fromQueryParam);
91 }
92 return d;
93 });
94}
95
96export async function deleteSavedQuery(savedQueryId: string): Promise<void> {
97 const response: HTTPResponse = await HTTPUtils.delete(`saved-queries/${savedQueryId}`);
98
99 if (!response.ok) {
100 throw Error('Error deleting saved query');
101 }
102
103 return response.data;
104}
105
106export async function getSavedQueryUserEmails(): Promise<string[]> {
107 const response: HTTPResponse = await HTTPUtils.get('saved-queries/user-emails');
108
109 if (!response.ok) {
110 return [];
111 }
112
113 return response.data;
114}