diff --git a/app/web/src/newhotness/Workspace.vue b/app/web/src/newhotness/Workspace.vue
index 5e77a6b7b3..e9290b4e35 100644
--- a/app/web/src/newhotness/Workspace.vue
+++ b/app/web/src/newhotness/Workspace.vue
@@ -145,6 +145,7 @@
:actionId="actionId"
/>
+
@@ -184,6 +185,7 @@ import { ChangeSet, ChangeSetStatus } from "@/api/sdf/dal/change_set";
import { muspelheimStatuses } from "@/store/realtime/heimdall";
import { trackEvent } from "@/utils/tracking";
import Onboarding, { DEBUG_MODE } from "@/newhotness/Onboarding2.vue";
+import WorkspaceDashboard from "@/newhotness/WorkspaceDashboard.vue";
import NavbarPanelRight from "./nav/NavbarPanelRight.vue";
import Lobby from "./Lobby.vue";
import Explore, { GroupByUrlQuery, SortByUrlQuery } from "./Explore.vue";
@@ -960,6 +962,7 @@ const bumpToWorkspaces = () => {
};
const onReviewPage = computed(() => route.name === "new-hotness-review");
+const onDashPage = computed(() => route.name === "new-hotness-dash");
// POSTHOG TRACKING
watch(heimdall.initCompleted, () => {
diff --git a/app/web/src/newhotness/WorkspaceDashboard.vue b/app/web/src/newhotness/WorkspaceDashboard.vue
new file mode 100644
index 0000000000..6f1df7dd91
--- /dev/null
+++ b/app/web/src/newhotness/WorkspaceDashboard.vue
@@ -0,0 +1,394 @@
+
+
+
+
+ At A Glance:
+ {{ changeSetName }}
+
+ In Review
+
+
+
+
+
+
+
+ Explore components via
+
+
+
+
+
+
+
+ HEAD represents the state of your infrastructure in the real
+ world.
+
+
+
+
+
+
+
+
+ Action Queue
+
+
+
+
+
+
+
+
+
+ Failed Qualifications
+
+
+
+
+
+
+ navToComponent(component)"
+ />
+
+
+
+
+
+
+
+ Simulated Change Sets
+
+
+
+
+
+ In Review
+
+
+
+
+
+
+
+ In Progress
+
+
+
+
+
+
+
+
+
+ Change Sets represent a batch of changes to the components,
+ assets, functions, and actions in a workspace. When you want to
+ propose a change in the real world, you first create a change set
+ to do it. Nothing you do in a change set should alter the real
+ world.
+
+
+ If you are familiar with version control systems like git, you can
+ think of a change set as an automatically rebasing branch.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/web/src/newhotness/layout_components/CollapsingFlexItem.vue b/app/web/src/newhotness/layout_components/CollapsingFlexItem.vue
index 2eedbe33b9..c7e046538e 100644
--- a/app/web/src/newhotness/layout_components/CollapsingFlexItem.vue
+++ b/app/web/src/newhotness/layout_components/CollapsingFlexItem.vue
@@ -26,27 +26,42 @@
'group/header',
'flex-none flex items-center px-xs m-0 min-h-[2.5rem]',
!disableCollapse && [
- 'cursor-pointer',
+ !disableOpen && 'cursor-pointer',
variant === 'standard' &&
+ !disableOpen &&
themeClasses('hover:bg-neutral-100', 'hover:bg-neutral-700'),
],
`text-${computedHeaderTextSize}`,
variant === 'standard' && [
showOpen && 'border-b',
- themeClasses(
- 'bg-white border-neutral-400',
- 'bg-neutral-800 border-neutral-600',
- ),
+ !disableOpen &&
+ themeClasses(
+ 'bg-white border-neutral-400',
+ 'bg-neutral-800 border-neutral-600',
+ ),
+ disableOpen &&
+ themeClasses(
+ 'bg-neutral-200 border-neutral-300 text-gray-700',
+ 'bg-neutral-900 border-neutral-700 text-gray-300',
+ ),
],
variant === 'onboarding' && 'hover:underline',
)
"
@click="toggleOpen"
>
-
+
-
+
+
(),
{
h3class: tw`flex flex-row items-center gap-xs p-2xs z-30`,
@@ -153,6 +170,7 @@ const emit = defineEmits<{
}>();
const toggleOpen = () => {
+ if (props.disableOpen) return;
emit("toggle");
openState.toggle();
};
diff --git a/app/web/src/newhotness/layout_components/DashboardDetails.vue b/app/web/src/newhotness/layout_components/DashboardDetails.vue
new file mode 100644
index 0000000000..238ef292b3
--- /dev/null
+++ b/app/web/src/newhotness/layout_components/DashboardDetails.vue
@@ -0,0 +1,85 @@
+
+
+ -
+ {{ components }} Components
+
+ -
+
+ {{ resources }} Resources
+
+ -
+
+ {{ diff }} Changes
+
+ -
+
+ {{ failed }} Failed Qualifications
+
+
+
+
+
diff --git a/app/web/src/router.ts b/app/web/src/router.ts
index 5ee25cb70b..0e7e7a3ed4 100644
--- a/app/web/src/router.ts
+++ b/app/web/src/router.ts
@@ -104,6 +104,12 @@ const routes: RouteRecordRaw[] = [
// path: "lobby",
// component: () => import("@/newhotness/Workspace.vue"),
// },
+ {
+ name: "new-hotness-dash",
+ path: "dash",
+ props: true,
+ component: () => import("@/newhotness/Workspace.vue"),
+ },
{
name: "new-hotness-view",
path: ":viewId/v/edit",
diff --git a/app/web/src/store/realtime/heimdall_inner.ts b/app/web/src/store/realtime/heimdall_inner.ts
index 87bbfefb28..058a0a0039 100644
--- a/app/web/src/store/realtime/heimdall_inner.ts
+++ b/app/web/src/store/realtime/heimdall_inner.ts
@@ -9,7 +9,9 @@ import {
import { Gettable } from "@/workers/types/dbinterface";
import { Context } from "@/newhotness/types";
-export const innerUseMakeKey = (ctx: Context) => {
+export const rawUseMakeKey = (
+ ctx: Pick,
+) => {
return (
kind: MaybeRefOrGetter,
id?: MaybeRefOrGetter,
@@ -44,7 +46,13 @@ export const innerUseMakeKey = (ctx: Context) => {
});
};
-export const innerUseMakeArgs = (ctx: Context) => {
+export const innerUseMakeKey = (ctx: Context) => {
+ return rawUseMakeKey(ctx);
+};
+
+export const rawUseMakeArgs = (
+ ctx: Pick,
+) => {
return (kind: EntityKind, id?: string) => {
if (GLOBAL_ENTITIES.includes(kind as GlobalEntity)) {
return {
@@ -62,3 +70,7 @@ export const innerUseMakeArgs = (ctx: Context) => {
};
};
};
+
+export const innerUseMakeArgs = (ctx: Context) => {
+ return rawUseMakeArgs(ctx);
+};
diff --git a/lib/vue-lib/src/design-system/general/CollapseExpandChevron.vue b/lib/vue-lib/src/design-system/general/CollapseExpandChevron.vue
index 1339ab4403..9c0c2089e4 100644
--- a/lib/vue-lib/src/design-system/general/CollapseExpandChevron.vue
+++ b/lib/vue-lib/src/design-system/general/CollapseExpandChevron.vue
@@ -2,14 +2,15 @@