diff --git a/src/components/CodeEditor/index.tsx b/src/components/CodeEditor/index.tsx index 3e86e979..d48c41e5 100644 --- a/src/components/CodeEditor/index.tsx +++ b/src/components/CodeEditor/index.tsx @@ -10,6 +10,8 @@ import { useTranslation } from "react-i18next"; import { useResponsive, useSize, useTrackedEffect } from "ahooks"; import moment from "moment"; import cn from "classnames"; +import { useQuery } from "urql"; +import gql from "graphql-tag"; import Button from "@/components/Button"; import NoModels from "@/components/NoModels"; @@ -40,8 +42,34 @@ import styles from "./index.module.less"; import type { MergeStrategy } from "./RegenerateModal"; import type { FC } from "react"; -const resolveSavedBy = ( - schema: Dataschema | undefined, +const FirstDataschemaAppearanceDocument = gql` + query FirstDataschemaAppearance($branch_id: uuid!, $name: String!) { + versions( + where: { + branch_id: { _eq: $branch_id } + dataschemas: { name: { _eq: $name } } + } + order_by: { created_at: asc } + limit: 1 + ) { + dataschemas(where: { name: { _eq: $name } }, limit: 1) { + created_at + user_id + user { + display_name + } + } + } + } +`; + +type SchemaUserFields = { + user_id?: string | null; + user?: { display_name?: string | null } | null; +}; + +const resolveUserName = ( + schema: SchemaUserFields | undefined, members: Member[] | undefined, currentUserId?: string, currentUserName?: string | null @@ -63,6 +91,11 @@ const resolveSavedBy = ( return "—"; }; +const formatTimestampWithRelative = (timestamp?: string | null): string => { + if (!timestamp) return "—"; + return `${formatTime(timestamp)} (${moment(timestamp).fromNow()})`; +}; + interface CodeEditorProps { schemas?: Dataschema[]; active?: string | null; @@ -83,6 +116,7 @@ interface CodeEditorProps { validationError: string | ConsoleError[]; cubeRegistry?: CubeRegistry; onRefreshRegistry?: () => void; + branchId?: string; branchName?: string; versionNumber?: number; } @@ -108,6 +142,7 @@ const CodeEditor: FC = ({ validationError, cubeRegistry, onRefreshRegistry, + branchId, branchName, versionNumber, }) => { @@ -131,6 +166,17 @@ const CodeEditor: FC = ({ const [showRegenerateModal, setShowRegenerateModal] = useState(false); const [showInfoModal, setShowInfoModal] = useState(false); + const activeFileName = active && active !== "sqlrunner" ? active : null; + const [firstAppearance] = useQuery({ + query: FirstDataschemaAppearanceDocument, + variables: { + branch_id: branchId || "", + name: activeFileName || "", + }, + pause: !showInfoModal || !branchId || !activeFileName, + }); + const firstSchema = + firstAppearance.data?.versions?.[0]?.dataschemas?.[0] || undefined; // Create a default registry if none provided const registryRef = useRef(cubeRegistry ?? new CubeRegistry()); @@ -772,9 +818,9 @@ const CodeEditor: FC = ({ {typeof versionNumber === "number" ? versionNumber : "—"} -
Saved by
+
Last saved by
- {resolveSavedBy( + {resolveUserName( files[active], teamData?.members, currentUser?.id, @@ -782,22 +828,28 @@ const CodeEditor: FC = ({ )}
+
Created by
+
+ {resolveUserName( + firstSchema || files[active], + teamData?.members, + currentUser?.id, + currentUser?.displayName || currentUser?.email + )} +
+
Datasource
{files[active].datasource?.name || "—"}
Created at
- {files[active].created_at - ? formatTime(files[active].created_at) - : "—"} + {formatTimestampWithRelative( + firstSchema?.created_at || files[active].created_at + )}
Updated at
-
- {files[active].updated_at - ? formatTime(files[active].updated_at) - : "—"} -
+
{formatTimestampWithRelative(files[active].updated_at)}
Checksum
diff --git a/src/components/ModelsSidebar/index.module.less b/src/components/ModelsSidebar/index.module.less index f9b87791..83116ca4 100644 --- a/src/components/ModelsSidebar/index.module.less +++ b/src/components/ModelsSidebar/index.module.less @@ -136,7 +136,7 @@ .fileControl { padding: 0 !important; - color: rgba(#4a7faa, 0.4); + color: rgba(#4a7faa, 0.65); &:hover { color: #4a7faa !important; diff --git a/src/components/ModelsSidebar/index.tsx b/src/components/ModelsSidebar/index.tsx index c179d814..21a0f50e 100644 --- a/src/components/ModelsSidebar/index.tsx +++ b/src/components/ModelsSidebar/index.tsx @@ -206,14 +206,14 @@ const ModelsSidebar: FC = ({ )} onClick={() => onSelectFile(f.name)} > - - + + {icons[f.name.split(".")[1] as keyof typeof icons]}{" "} {f.name} = ({ cubeRegistry={cubeRegistry} onRefreshRegistry={onRefreshRegistry} branchName={currentBranch?.name} + branchId={currentBranch?.id} versionNumber={versionsCount} />