aboutsummaryrefslogtreecommitdiff
path: root/src/client/documents/DocFromField.ts
diff options
context:
space:
mode:
authorNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-05-09 00:02:30 -0400
committerNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-05-09 00:02:30 -0400
commit2f5f13946cf0a1ec87efddbfbbc6a9fd878da924 (patch)
treeea9ec90561f73ed1c977e0538699c5f53b3c4712 /src/client/documents/DocFromField.ts
parent0766ba00727e9e13ced2e16cfb049d49711fa738 (diff)
parentfa4d377b53c9ca31d8900d9c11bd25be57025962 (diff)
Merge branch 'nathan-starter' of https://github.com/brown-dash/Dash-Web into nathan-starter
Diffstat (limited to 'src/client/documents/DocFromField.ts')
-rw-r--r--src/client/documents/DocFromField.ts59
1 files changed, 20 insertions, 39 deletions
diff --git a/src/client/documents/DocFromField.ts b/src/client/documents/DocFromField.ts
index 1c0a9755b..b65bbbdf5 100644
--- a/src/client/documents/DocFromField.ts
+++ b/src/client/documents/DocFromField.ts
@@ -1,50 +1,31 @@
-/* eslint-disable prefer-destructuring */
-/* eslint-disable default-param-last */
-/* eslint-disable no-use-before-define */
import { Doc, DocListCast } from '../../fields/Doc';
import { InkField } from '../../fields/InkField';
import { List } from '../../fields/List';
+import { StrCast } from '../../fields/Types';
import { AudioField, ImageField, PdfField, VideoField } from '../../fields/URLField';
-import { InkingStroke } from '../views/InkingStroke';
-import { CollectionView } from '../views/collections/CollectionView';
-import { AudioBox } from '../views/nodes/AudioBox';
-import { ImageBox } from '../views/nodes/ImageBox';
-import { PDFBox } from '../views/nodes/PDFBox';
-import { VideoBox } from '../views/nodes/VideoBox';
-import { FormattedTextBox } from '../views/nodes/formattedText/FormattedTextBox';
import { Docs, DocumentOptions } from './Documents';
+/**
+ * Changes the field key in the doc's layout string to be the specified field
+ */
+export function ResetLayoutFieldKey(doc: Doc, fieldKey: string) {
+ doc.layout = StrCast(doc.layout).replace(/={'.*'}/, `={'${fieldKey}'}`);
+ return doc;
+}
export function DocumentFromField(target: Doc, fieldKey: string, proto?: Doc, options?: DocumentOptions): Doc | undefined {
- let created: Doc | undefined;
const field = target[fieldKey];
const resolved = options ?? {};
- if (field instanceof ImageField) {
- created = Docs.Create.ImageDocument(field.url.href, resolved);
- created.layout = ImageBox.LayoutString(fieldKey);
- } else if (field instanceof Doc) {
- created = field;
- } else if (field instanceof VideoField) {
- created = Docs.Create.VideoDocument(field.url.href, resolved);
- created.layout = VideoBox.LayoutString(fieldKey);
- } else if (field instanceof PdfField) {
- created = Docs.Create.PdfDocument(field.url.href, resolved);
- created.layout = PDFBox.LayoutString(fieldKey);
- } else if (field instanceof AudioField) {
- created = Docs.Create.AudioDocument(field.url.href, resolved);
- created.layout = AudioBox.LayoutString(fieldKey);
- } else if (field instanceof InkField) {
- created = Docs.Create.InkDocument(field.inkData, resolved);
- created.layout = InkingStroke.LayoutString(fieldKey);
- } else if (field instanceof List && field[0] instanceof Doc) {
- created = Docs.Create.StackingDocument(DocListCast(field), resolved);
- created.layout = CollectionView.LayoutString(fieldKey);
- } else {
- created = Docs.Create.TextDocument('', { ...{ _width: 200, _height: 25, _layout_autoHeight: true }, ...resolved });
- created.layout = FormattedTextBox.LayoutString(fieldKey);
- }
- if (created) {
- created.title = fieldKey;
- proto && created.proto && (created.proto = Doc.GetProto(proto));
- }
+ const nonDocFieldToDoc = () => {
+ if (field instanceof ImageField) return Docs.Create.ImageDocument(field.url.href, resolved);
+ if (field instanceof VideoField) return Docs.Create.VideoDocument(field.url.href, resolved);
+ if (field instanceof PdfField) return Docs.Create.PdfDocument(field.url.href, resolved);
+ if (field instanceof AudioField) return Docs.Create.AudioDocument(field.url.href, resolved);
+ if (field instanceof InkField) return Docs.Create.InkDocument(field.inkData, resolved);
+ if (field instanceof List && field[0] instanceof Doc) return Docs.Create.StackingDocument(DocListCast(field), resolved);
+ return Docs.Create.TextDocument('', { ...{ _width: 200, _height: 25, _layout_autoHeight: true }, ...resolved });
+ };
+ const created = field instanceof Doc ? field : ResetLayoutFieldKey(nonDocFieldToDoc(), fieldKey);
+ created.title = fieldKey;
+ proto && created.proto && (created.proto = Doc.GetProto(proto));
return created;
}