aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/DocServer.ts1
-rw-r--r--src/client/apis/google_docs/GoogleApiClientUtils.ts85
-rw-r--r--src/client/views/MainView.tsx11
3 files changed, 96 insertions, 1 deletions
diff --git a/src/client/DocServer.ts b/src/client/DocServer.ts
index bf5168c22..47aff2bb6 100644
--- a/src/client/DocServer.ts
+++ b/src/client/DocServer.ts
@@ -5,6 +5,7 @@ import { Utils, emptyFunction } from '../Utils';
import { SerializationHelper } from './util/SerializationHelper';
import { RefField } from '../new_fields/RefField';
import { Id, HandleUpdate } from '../new_fields/FieldSymbols';
+import { docs_v1 } from 'googleapis';
/**
* This class encapsulates the transfer and cross-client synchronization of
diff --git a/src/client/apis/google_docs/GoogleApiClientUtils.ts b/src/client/apis/google_docs/GoogleApiClientUtils.ts
new file mode 100644
index 000000000..42e621f6b
--- /dev/null
+++ b/src/client/apis/google_docs/GoogleApiClientUtils.ts
@@ -0,0 +1,85 @@
+import { docs_v1 } from "googleapis";
+import { PostToServer } from "../../../Utils";
+import { RouteStore } from "../../../server/RouteStore";
+
+export namespace GoogleApiClientUtils {
+
+ export namespace Docs {
+
+ export enum Actions {
+ Create = "create",
+ Retrieve = "retrieve"
+ }
+
+ export namespace Helpers {
+
+ export const fromRgb = (red: number, green: number, blue: number) => {
+ return { color: { rgbColor: { red, green, blue } } };
+ };
+
+ }
+
+ export const ExampleDocumentSchema = {
+ title: "This is a Google Doc Created From Dash Web",
+ body: {
+ content: [
+ {
+ paragraph: {
+ elements: [
+ {
+ textRun: {
+ content: "And this is its bold, blue text!!!",
+ textStyle: {
+ bold: true,
+ backgroundColor: Helpers.fromRgb(0, 0, 1)
+ }
+ }
+ }
+ ]
+ }
+ }
+ ] as docs_v1.Schema$StructuralElement[]
+ }
+ } as docs_v1.Schema$Document;
+
+ /**
+ * After following the authentication routine, which connects this API call to the current signed in account
+ * and grants the appropriate permissions, this function programmatically creates an arbitrary Google Doc which
+ * should appear in the user's Google Doc library instantaneously.
+ *
+ * @param schema whatever subset of a docs_v1.Schema$Document is required to properly initialize your
+ * Google Doc. This schema defines all aspects of a Google Doc, from the title to headers / footers to the
+ * actual document body and its styling!
+ * @returns the documentId of the newly generated document, or undefined if the creation process fails.
+ */
+ export const Create = async (schema?: docs_v1.Schema$Document): Promise<string | undefined> => {
+ let path = RouteStore.googleDocs + Actions.Create;
+ let parameters = { requestBody: schema || ExampleDocumentSchema };
+ let generatedId: string | undefined;
+ try {
+ generatedId = await PostToServer(path, parameters);
+ } catch (e) {
+ console.error(e);
+ generatedId = undefined;
+ } finally {
+ return generatedId;
+ }
+ };
+
+ let path = RouteStore.googleDocs + Actions.Retrieve;
+ export const Retrieve = async (documentId: string): Promise<any> => {
+ let parameters = { documentId };
+ let documentContents: any;
+ try {
+ documentContents = await PostToServer(path, parameters);
+ } catch (e) {
+ console.error(e);
+ documentContents = undefined;
+ } finally {
+ return documentContents;
+ }
+ };
+
+ }
+
+} \ No newline at end of file
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 031478477..0a987de4a 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -15,7 +15,7 @@ import { listSpec } from '../../new_fields/Schema';
import { Cast, FieldValue, NumCast, BoolCast, StrCast } from '../../new_fields/Types';
import { CurrentUserUtils } from '../../server/authentication/models/current_user_utils';
import { RouteStore } from '../../server/RouteStore';
-import { emptyFunction, returnOne, returnTrue, Utils, returnEmptyString } from '../../Utils';
+import { emptyFunction, returnOne, returnTrue, Utils, returnEmptyString, PostToServer } from '../../Utils';
import { DocServer } from '../DocServer';
import { Docs } from '../documents/Documents';
import { SetupDrag } from '../util/DragManager';
@@ -40,6 +40,8 @@ import { CollectionTreeView } from './collections/CollectionTreeView';
import { ClientUtils } from '../util/ClientUtils';
import { SchemaHeaderField, RandomPastel } from '../../new_fields/SchemaHeaderField';
import { DictationManager } from '../util/DictationManager';
+import { docs_v1 } from 'googleapis';
+import { GoogleApiClientUtils } from '../apis/google_docs/GoogleApiClientUtils';
@observer
export class MainView extends React.Component {
@@ -130,6 +132,8 @@ export class MainView extends React.Component {
window.removeEventListener("keydown", KeyManager.Instance.handle);
window.addEventListener("keydown", KeyManager.Instance.handle);
+ GoogleApiClientUtils.Docs.Create().then(id => console.log(id));
+
reaction(() => {
let workspaces = CurrentUserUtils.UserDocument.workspaces;
let recent = CurrentUserUtils.UserDocument.recentlyClosed;
@@ -569,6 +573,11 @@ export class MainView extends React.Component {
render() {
return (
<div id="main-div">
+ <input style={{ position: "absolute", zIndex: 100000 }} onKeyPress={e => {
+ if (e.which === 13) {
+ GoogleApiClientUtils.Docs.Retrieve(e.currentTarget.value.trim()).then((res: any) => console.log(res));
+ }
+ }} />
{this.dictationOverlay}
<DocumentDecorations />
{this.mainContent}