2022-07-16 13:49:32 +05:00
|
|
|
import { ToolbarGroupDefinition } from "@streetwriters/editor";
|
|
|
|
|
import { Editor } from "@streetwriters/editor";
|
2022-06-23 19:14:55 +05:00
|
|
|
import { Dispatch, MutableRefObject, RefObject, SetStateAction } from "react";
|
|
|
|
|
import { useEditorController } from "../hooks/useEditorController";
|
|
|
|
|
|
|
|
|
|
export type SafeAreaType = {
|
|
|
|
|
top: number;
|
|
|
|
|
left: number;
|
|
|
|
|
bottom: number;
|
|
|
|
|
right: number;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export type Settings = {
|
|
|
|
|
readonly: boolean;
|
|
|
|
|
fullscreen: boolean;
|
|
|
|
|
deviceMode: "mobile" | "smallTablet" | "tablet";
|
|
|
|
|
premium: boolean;
|
2022-06-27 18:39:59 +05:00
|
|
|
tools: ToolbarGroupDefinition[];
|
2022-06-30 09:47:04 +05:00
|
|
|
noToolbar?: boolean;
|
|
|
|
|
noHeader?: boolean;
|
2022-07-18 16:27:11 +05:00
|
|
|
keyboardShown?: boolean;
|
2022-08-06 23:39:07 +05:00
|
|
|
doubleSpacedLines?: boolean;
|
2022-06-23 19:14:55 +05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
declare global {
|
2022-06-30 09:47:04 +05:00
|
|
|
var readonly: boolean;
|
|
|
|
|
var noToolbar: boolean;
|
|
|
|
|
var noHeader: boolean;
|
2022-06-23 19:14:55 +05:00
|
|
|
/**
|
|
|
|
|
* Id of current session
|
|
|
|
|
*/
|
|
|
|
|
var sessionId: string;
|
|
|
|
|
/**
|
|
|
|
|
* Current tiptap instance
|
|
|
|
|
*/
|
|
|
|
|
var editor: Editor | null;
|
|
|
|
|
/**
|
|
|
|
|
* Current editor controller
|
|
|
|
|
*/
|
|
|
|
|
var editorController: ReturnType<typeof useEditorController>;
|
|
|
|
|
|
|
|
|
|
var settingsController: {
|
|
|
|
|
update: (settings: Settings) => void;
|
|
|
|
|
previous: Settings;
|
|
|
|
|
set?: Dispatch<SetStateAction<Settings>>;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var premiumController: {
|
|
|
|
|
update: (premium: boolean) => void;
|
|
|
|
|
previous: boolean;
|
|
|
|
|
set?: Dispatch<SetStateAction<boolean>>;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var safeAreaController: {
|
|
|
|
|
update: (insets: SafeAreaType) => void;
|
|
|
|
|
reset: () => void;
|
|
|
|
|
previous: SafeAreaType;
|
|
|
|
|
set?: Dispatch<
|
|
|
|
|
SetStateAction<{
|
|
|
|
|
top: number;
|
|
|
|
|
bottom: number;
|
|
|
|
|
left: number;
|
|
|
|
|
right: number;
|
|
|
|
|
}>
|
|
|
|
|
>;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var editorTitle: RefObject<HTMLInputElement>;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Global ref to manage tags in editor.
|
|
|
|
|
*/
|
|
|
|
|
var editorTags: MutableRefObject<{
|
|
|
|
|
setTags: React.Dispatch<
|
|
|
|
|
React.SetStateAction<{ title: string; alias: string }[]>
|
|
|
|
|
>;
|
|
|
|
|
}>;
|
|
|
|
|
|
|
|
|
|
function logger(type: "info" | "warn" | "error", ...logs: any[]): void;
|
|
|
|
|
/**
|
|
|
|
|
* Function to post message to react native
|
|
|
|
|
* @param type
|
|
|
|
|
* @param value
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function post(type: string, value?: unknown): void;
|
|
|
|
|
interface Window {
|
|
|
|
|
/**
|
|
|
|
|
* React Native WebView
|
|
|
|
|
*/
|
|
|
|
|
ReactNativeWebView: {
|
|
|
|
|
postMessage: (data: string) => void;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-20 23:15:04 +05:00
|
|
|
export const timerFn = (callback: () => void, duration: number) => {
|
|
|
|
|
// timer = setTimeout(callback, duration);
|
|
|
|
|
// return timer;
|
2022-06-23 19:14:55 +05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const EventTypes = {
|
|
|
|
|
selection: "editor-event:selection",
|
|
|
|
|
content: "editor-event:content",
|
|
|
|
|
title: "editor-event:title",
|
|
|
|
|
scroll: "editor-event:scroll",
|
|
|
|
|
history: "editor-event:history",
|
|
|
|
|
newtag: "editor-event:newtag",
|
|
|
|
|
tag: "editor-event:tag",
|
|
|
|
|
filepicker: "editor-event:picker",
|
|
|
|
|
download: "editor-event:download-attachment",
|
|
|
|
|
logger: "native:logger",
|
|
|
|
|
back: "editor-event:back",
|
|
|
|
|
pro: "editor-event:pro",
|
|
|
|
|
monograph: "editor-event:monograph",
|
|
|
|
|
properties: "editor-event:properties",
|
2022-07-18 16:27:11 +05:00
|
|
|
fullscreen: "editor-event:fullscreen",
|
2022-06-23 19:14:55 +05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function isReactNative(): boolean {
|
|
|
|
|
return !!window.ReactNativeWebView;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function logger(type: "info" | "warn" | "error", ...logs: any[]) {
|
|
|
|
|
let logString = logs
|
|
|
|
|
.map((log) => {
|
|
|
|
|
return typeof log !== "string" ? JSON.stringify(log) : log;
|
|
|
|
|
})
|
|
|
|
|
.join(" ");
|
|
|
|
|
|
|
|
|
|
post(EventTypes.logger, `[${type}]: ` + logString);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function post(type: string, value?: unknown) {
|
|
|
|
|
if (isReactNative()) {
|
|
|
|
|
window.ReactNativeWebView.postMessage(
|
|
|
|
|
JSON.stringify({
|
|
|
|
|
//@ts-ignore
|
|
|
|
|
type: EventTypes[type] || type,
|
|
|
|
|
value: value,
|
2022-07-18 16:27:11 +05:00
|
|
|
sessionId: global.sessionId,
|
2022-06-23 19:14:55 +05:00
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
console.log(type, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
globalThis.logger = logger;
|
|
|
|
|
globalThis.post = post;
|