+ ) : (
+ <>
+ {scenes.length !== 0 ? (
+
{
- // Dummy Data - replace with API data
+ // Hard coded scenes
const dummyScenes: SceneTypes[] = [
{
token: "m_9pf7a7v0138zx58f4x6ejsehjcvfq6",
@@ -32,14 +32,14 @@ export const NewSceneFromTemplate = ({
const element = scrollContainerRef.current;
if (element) {
const atBottom =
- element.scrollHeight - element.scrollTop === element.clientHeight;
+ element.scrollHeight - element.scrollTop <= element.clientHeight + 1;
const hasOverflow = element.scrollHeight > element.clientHeight;
setBottomGradientOpacity(hasOverflow && !atBottom ? 1 : 0);
}
};
- useEffect(() => {
+ useLayoutEffect(() => {
const element = scrollContainerRef.current;
if (element) {
handleScroll();
@@ -53,7 +53,7 @@ export const NewSceneFromTemplate = ({
return (
-
+
diff --git a/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/SceneCard.tsx b/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/SceneCard.tsx
new file mode 100644
index 0000000000..e5e4e13479
--- /dev/null
+++ b/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/SceneCard.tsx
@@ -0,0 +1,81 @@
+import React from "react";
+import { twMerge } from "tailwind-merge";
+
+export type SceneTypes = {
+ token: string;
+ name: string;
+ updated_at?: string;
+ thumbnail: string;
+};
+
+interface SceneCardProps {
+ scene: SceneTypes;
+ onSceneSelect: (selectedScene: SceneTypes) => void;
+ selectedSceneId: string | null;
+ showDate?: boolean;
+}
+
+export const SceneCard: React.FC
= ({
+ scene,
+ onSceneSelect,
+ selectedSceneId,
+ showDate,
+}) => {
+ const handleSelected = (scene: SceneTypes) => {
+ onSceneSelect(scene);
+ };
+
+ // const bucketConfig = useRef(new BucketConfig());
+ // const imageUrl = bucketConfig.current.getCdnUrl(
+ // scene.thumbnail + "-thumb.gif",
+ // 360,
+ // 20,
+ // );
+ // thumbnail will be replaced with 3d scene screenshots
+ const tempThumbnail = "/resources/placeholders/scene_placeholder.png";
+
+ return (
+
+ );
+};
diff --git a/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/ScenePicker.tsx b/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/ScenePicker.tsx
index ba30c0bec7..cc454a0462 100644
--- a/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/ScenePicker.tsx
+++ b/app/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/ScenePicker.tsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
-import { twMerge } from "tailwind-merge";
+import { SceneCard } from "~/pages/PageEnigma/comps/ControlsTopButtons/ScenePicker/SceneCard";
export type SceneTypes = {
token: string;
@@ -36,48 +36,13 @@ export const ScenePicker: React.FC = ({
return (
{scenes.map((scene) => (
-
+ scene={scene}
+ onSceneSelect={() => handleSelected(scene)}
+ selectedSceneId={selectedSceneId}
+ showDate={showDate}
+ />
))}
);
diff --git a/app/pages/PageEnigma/models/types.tsx b/app/pages/PageEnigma/models/types.tsx
index 3cf5106925..335240b77c 100644
--- a/app/pages/PageEnigma/models/types.tsx
+++ b/app/pages/PageEnigma/models/types.tsx
@@ -58,7 +58,7 @@ export enum MediaFileType {
// Full Storyteller Engine scenes (RON = Rusty Object Notation)
// This is a temporary format that will eventually go away.
- SceneRon = "scene_ron",
+ Scene = "scene",
None = "none",
}
diff --git a/app/pages/PageEnigma/store/sizing.ts b/app/pages/PageEnigma/store/sizing.ts
index b637a8eaf4..2a9950d5a6 100644
--- a/app/pages/PageEnigma/store/sizing.ts
+++ b/app/pages/PageEnigma/store/sizing.ts
@@ -6,7 +6,7 @@ import { timelineScrollX } from "~/pages/PageEnigma/store/timing";
// timeline
export const scale = signal(1);
-export const filmLength = signal(12);
+export const filmLength = signal(7);
export const timelineHeight = signal(0);
export const cameraMinimized = signal(false);