Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/reducers/app/actions.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
SET_ITEMS,
SET_ITEMS_CSV,
SET_FILTER,
SET_TAB,
SET_LOADING,
Expand Down Expand Up @@ -286,4 +287,11 @@ export function setTopBakersQueryUrl(topBakersUrl: string) {
type: SET_TOP_BAKERS_QUERY_URL,
topBakersUrl,
}
}
}

export function setItemsCsv(itemsCsv: string) {
return {
type: SET_ITEMS_CSV,
itemsCsv,
}
}
7 changes: 6 additions & 1 deletion src/reducers/app/reducers.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
SET_ITEMS,
SET_ITEMS_CSV,
SET_FILTER,
SET_TAB,
SET_LOADING,
Expand Down Expand Up @@ -48,6 +49,7 @@ export interface AppState {
columns: object;
attributes: object;
items: object;
itemsCsv: string;
operators: object;
selectedFilters: any;
queryFilters: any;
Expand Down Expand Up @@ -80,6 +82,7 @@ let initialState: AppState = {
entities: [],
attributes,
items: {},
itemsCsv: '',
selectedFilters: {},
queryFilters: {},
operators: {
Expand Down Expand Up @@ -163,6 +166,8 @@ export const app = (state = initialState, action: any) => {
const items = { ...state.items, [action.entity]: action.items };
return { ...state, items };
}
case SET_ITEMS_CSV:
return { ...state, itemsCsv: action.itemsCsv };
case SET_COLUMNS: {
const columns = { ...state.columns, [action.entity]: action.columns };
const sort = { ...state.sort, [action.entity]: action.sorts };
Expand Down Expand Up @@ -305,7 +310,7 @@ export const app = (state = initialState, action: any) => {
}
case SET_HOURLY_TRANSACTIONS_LOADING:
return { ...state, isTransactionsLoading: action.isTransactionsLoading };
case SET_HOURLY_TRANSACTIONS:
case SET_HOURLY_TRANSACTIONS:
return { ...state, hourlytransactions: action.hourlytransactions };
case SET_HOURLY_TRANSACTIONS_QUERY_URL:
return { ...state, hourlytransactionsUrl: action.hourlytransactionsUrl };
Expand Down
36 changes: 24 additions & 12 deletions src/reducers/app/thunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {
setTopBakersLoadingAction,
setTopBakersQueryUrl,
setTopAccountsQueryUrl,
setItemsCsv,
} from './actions';
import { setModalItems, setModalOpen } from '../modal/actions';
import { createMessageAction } from '../message/actions';
Expand Down Expand Up @@ -270,6 +271,13 @@ export const fetchInitEntityAction = (
dispatch(createMessageAction(`Unable to retrieve data for ${name} request.`, true));
return [];
});

// Fetch items CSV
let queryCsv = ConseilQueryBuilder.setOutputType(query, ConseilOutput.csv);
queryCsv = ConseilQueryBuilder.setLimit(queryCsv, 50000);
const itemsCsv: any = await executeEntityQuery(serverInfo, platform, network, entity, queryCsv);
dispatch(setItemsCsv(itemsCsv));

await dispatch(setQueryFilters(entity, query));
await dispatch(setEntityPropertiesAction(entity, filters, sorts, columns, items, aggregations));
await Promise.all(cardinalityPromises);
Expand Down Expand Up @@ -615,23 +623,14 @@ export const shareReport = () => async (dispatch: any, state: any) => {
};

export const exportCsvData = () => async (dispatch: any, state: any) => {
const { selectedEntity, columns, sort, selectedFilters, selectedConfig, aggregations } = state().app;
const { platform, network, url, apiKey } = selectedConfig;
const serverInfo = { url, apiKey, network };
const { itemsCsv } = state().app;

const attributeNames = getAttributeNames(columns[selectedEntity]);
let query = getMainQuery(attributeNames, selectedFilters[selectedEntity], sort[selectedEntity], aggregations[selectedEntity]);
query = ConseilQueryBuilder.setOutputType(query, ConseilOutput.csv);
query = ConseilQueryBuilder.setLimit(query, 50000);

const result: any = await executeEntityQuery(serverInfo, platform, network, selectedEntity, query);

if (!result || result.length === 0) {
if (!itemsCsv || itemsCsv.length === 0) {
dispatch(createMessageAction('Export failed, no results were returned.', true));
return;
}

let blob = new Blob([result]);
let blob = new Blob([itemsCsv]);
const winOpenBlob: any = window.navigator.msSaveOrOpenBlob || null;
if (winOpenBlob) {
window.navigator.msSaveBlob(blob, 'arronax-results.csv');
Expand All @@ -654,10 +653,15 @@ export const submitQuery = () => async (dispatch: any, state: any) => {

let query = getMainQuery(attributeNames, selectedFilters[selectedEntity], sort[selectedEntity], aggregations[selectedEntity]);
query = setLimit(query, 1000);
let queryCsv = ConseilQueryBuilder.setOutputType(query, ConseilOutput.csv);
queryCsv = ConseilQueryBuilder.setLimit(queryCsv, 50000);

try {
const items = await executeEntityQuery(serverInfo, platform, network, selectedEntity, query);
await dispatch(setSubmitAction(selectedEntity, items, selectedFilters[selectedEntity].length));
await dispatch(setQueryFilters(selectedEntity, query));
const itemsCsv: any = await executeEntityQuery(serverInfo, platform, network, selectedEntity, queryCsv);
dispatch(setItemsCsv(itemsCsv));
dispatch(setLoadingAction(false));
} catch (e) {
const message = `Unable to submit query`;
Expand Down Expand Up @@ -696,14 +700,22 @@ export const searchByIdThunk = (id: string | number) => async (dispatch: any, st
try {
const { entity, query } = TezosConseilClient.getEntityQueryForId(id);
const items = await executeEntityQuery(serverInfo, platform, network, entity, query);

if (items.length > 0) {
await dispatch(changeTab(entity));

// Fetch items CSV
let queryCsv = ConseilQueryBuilder.setOutputType(query, ConseilOutput.csv);
queryCsv = ConseilQueryBuilder.setLimit(queryCsv, 50000);
const itemsCsv: any = await executeEntityQuery(serverInfo, platform, network, entity, queryCsv);
dispatch(setItemsCsv(itemsCsv));
} else {
const searchedEntity = entities.find((item: any) => item.name === entity);
dispatch(setLoadingAction(false));
dispatch(createMessageAction(`The ${searchedEntity.displayName.toLowerCase()} was not found.`, true));
return { entity: '', items: [], subItems: [] };
}

dispatch(setLoadingAction(false));
await dispatch(setModalItems(platform, network, entity, id, items ));
await dispatch(setModalOpen(true));
Expand Down
1 change: 1 addition & 0 deletions src/reducers/app/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const SET_ITEMS = 'SET_ITEMS';
export const SET_ITEMS_CSV = 'SET_ITEMS_CSV';
export const SET_COLUMNS = 'SET_COLUMNS';
export const SET_FILTER = 'SET_FILTER';
export const SET_TAB = 'SET_TAB';
Expand Down