mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Export to Excel and Send to drive
Summary: Implementing export to excel and send to Google Drive feature. As part of this feature few things were implemented: - Server side google authentication exposed on url: (docs, docs-s, or localhost:8080)/auth/google - Exporting grist documents as an excel file (xlsx) - Storing exported grist document (in excel format) in Google Drive as a spreadsheet document. Server side google authentication requires one new environmental variables - GOOGLE_CLIENT_SECRET (required) used by authentication handler Test Plan: Browser tests for exporting to excel. Reviewers: paulfitz, dsagal Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D2924
This commit is contained in:
@@ -344,6 +344,13 @@ export interface DocAPI {
|
||||
// is HEAD, the result will contain a copy of any rows added or updated.
|
||||
compareVersion(leftHash: string, rightHash: string): Promise<DocStateComparison>;
|
||||
getDownloadUrl(template?: boolean): string;
|
||||
/**
|
||||
* Exports current document to the Google Drive as a spreadsheet file. To invoke this method, first
|
||||
* acquire "code" via Google Auth Endpoint (see ShareMenu.ts for an example).
|
||||
* @param code Authorization code returned from Google (requested via Grist's Google Auth Endpoint)
|
||||
* @param title Name of the spreadsheet that will be created (should use a Grist document's title)
|
||||
*/
|
||||
sendToDrive(code: string, title: string): Promise<{url: string}>;
|
||||
}
|
||||
|
||||
// Operations that are supported by a doc worker.
|
||||
@@ -775,4 +782,11 @@ export class DocAPIImpl extends BaseAPI implements DocAPI {
|
||||
public getDownloadUrl(template: boolean = false) {
|
||||
return this._url + `/download?template=${Number(template)}`;
|
||||
}
|
||||
|
||||
public async sendToDrive(code: string, title: string): Promise<{url: string}> {
|
||||
const url = new URL(`${this._url}/send-to-drive`);
|
||||
url.searchParams.append('title', title);
|
||||
url.searchParams.append('code', code);
|
||||
return this.requestJson(url.href);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ export function undef<T extends Array<any>>(...list: T): Undef<T> {
|
||||
*/
|
||||
export function safeJsonParse(json: string, defaultVal: any): any {
|
||||
try {
|
||||
return JSON.parse(json);
|
||||
return json !== '' && json !== undefined ? JSON.parse(json) : defaultVal;
|
||||
} catch (e) {
|
||||
return defaultVal;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user