aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/Import & Export/ImageUtils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/util/Import & Export/ImageUtils.ts')
-rw-r--r--src/client/util/Import & Export/ImageUtils.ts33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/client/util/Import & Export/ImageUtils.ts b/src/client/util/Import & Export/ImageUtils.ts
index 33ca55aa9..bf482aea8 100644
--- a/src/client/util/Import & Export/ImageUtils.ts
+++ b/src/client/util/Import & Export/ImageUtils.ts
@@ -1,9 +1,11 @@
-import { Doc } from "../../../new_fields/Doc";
+import { Doc, DocListCast, DocListCastAsync, Opt } from "../../../new_fields/Doc";
import { ImageField } from "../../../new_fields/URLField";
-import { Cast } from "../../../new_fields/Types";
+import { Cast, StrCast } from "../../../new_fields/Types";
import { RouteStore } from "../../../server/RouteStore";
import { Docs } from "../../documents/Documents";
import { Identified } from "../../Network";
+import { Id } from "../../../new_fields/FieldSymbols";
+import { Utils } from "../../../Utils";
export namespace ImageUtils {
@@ -19,4 +21,31 @@ export namespace ImageUtils {
return data !== undefined;
};
+ export type Hierarchy = { [id: string]: string | Hierarchy };
+
+ export const ExportHierarchyToFileSystem = async (doc: Doc): Promise<void> => {
+ const hierarchy: Hierarchy = {};
+ await HierarchyTraverserRecursive(doc, hierarchy);
+ const a = document.createElement("a");
+ a.href = Utils.prepend(`${RouteStore.imageHierarchyExport}/${JSON.stringify(hierarchy)}`);
+ a.download = `Full Export of ${StrCast(doc.title)}`;
+ a.click();
+ };
+
+ const HierarchyTraverserRecursive = async (collection: Doc, hierarchy: Hierarchy) => {
+ const children = await DocListCastAsync(collection.data);
+ if (children) {
+ const local: Hierarchy = {};
+ hierarchy[collection[Id]] = local;
+ for (const child of children) {
+ let imageData: Opt<ImageField>;
+ if (imageData = Cast(child.data, ImageField)) {
+ local[child[Id]] = imageData.url.href;
+ } else {
+ await HierarchyTraverserRecursive(child, local);
+ }
+ }
+ }
+ };
+
} \ No newline at end of file