Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
c8f22e0
Rename
g-bar Aug 13, 2025
70f3580
div
g-bar Aug 13, 2025
96c0a7a
breadcrumbs
g-bar Aug 13, 2025
5e00690
Merge branch 'task/v2' into new-ui-detail-view
g-bar Aug 13, 2025
04857c9
Fetch entity
g-bar Aug 13, 2025
70787c0
breadcrumbs
g-bar Aug 13, 2025
811681f
fetch on server
g-bar Aug 13, 2025
f1fed6f
Use slug
g-bar Aug 14, 2025
3f19f5d
navigation
g-bar Aug 14, 2025
63ae4b1
root redirect to overview
g-bar Aug 14, 2025
bac0290
Merge branch 'task/v2' into new-ui-detail-view
g-bar Aug 15, 2025
d1d31d1
actions
g-bar Aug 15, 2025
8f62e9d
copy action
g-bar Aug 18, 2025
0cdf6bb
Add actoins
g-bar Aug 18, 2025
90ed149
working on bookmarks
g-bar Aug 18, 2025
664d2db
add bookmark categories
g-bar Aug 19, 2025
a4b34e4
Merge branch 'task/v2' into new-ui-detail-view
g-bar Aug 19, 2025
0c01d24
add bookmark
g-bar Aug 19, 2025
c9c85ec
bookmark funtion
g-bar Aug 19, 2025
9867932
Download
g-bar Aug 20, 2025
22ec219
lint
g-bar Aug 20, 2025
46e7768
lint
g-bar Aug 20, 2025
e6fc07a
Merge branch 'new-ui-detail-view' of github.com:openbraininstitute/co…
g-bar Aug 20, 2025
2edc00f
Merge branch 'task/v2' into new-ui-detail-view
g-bar Aug 20, 2025
c31091f
bookmarks
g-bar Aug 20, 2025
25a756e
bookmarkCategory:
g-bar Aug 20, 2025
d042019
Linting
g-bar Aug 20, 2025
83fe9b8
restore lefthook for now
g-bar Aug 20, 2025
e02b4f0
restore lefthook for now
g-bar Aug 20, 2025
f008e6a
Merge branch 'new-ui-detail-view' of github.com:openbraininstitute/co…
g-bar Aug 20, 2025
50776f1
test
g-bar Aug 20, 2025
81698a5
Merge branch 'new-ui-detail-view' of github.com:openbraininstitute/co…
g-bar Aug 20, 2025
b47d665
download entity
g-bar Aug 20, 2025
0ad7690
Working on detail view
g-bar Aug 20, 2025
45a9aae
Add overview page
g-bar Aug 20, 2025
73785b0
add morphology page
g-bar Aug 20, 2025
b08439a
add electrophysiology viz
g-bar Aug 20, 2025
a7a78a1
prettier
g-bar Aug 25, 2025
0adef03
entity one required
g-bar Aug 25, 2025
8ab450f
Feedback
g-bar Aug 26, 2025
d1be917
Merge branch 'task/v2' into new-ux-detail-view-content
g-bar Aug 26, 2025
fc46c14
minor
g-bar Aug 26, 2025
7e88436
remove unused routes
g-bar Aug 26, 2025
f589cdc
Redirect to overview
g-bar Aug 26, 2025
eea7c9a
Visualization
g-bar Aug 27, 2025
589985c
analysis tab
g-bar Aug 27, 2025
1cff217
emodel related artifacts
g-bar Aug 27, 2025
bfa97db
ion channel to ion channel model
g-bar Aug 27, 2025
2b0bb72
emodel, memodel
g-bar Aug 27, 2025
dd6c471
add synaptome
g-bar Aug 27, 2025
02ad811
clean up
g-bar Aug 27, 2025
87ec2b5
circuit
g-bar Aug 28, 2025
a6a75f1
fields
g-bar Aug 28, 2025
1f5558a
add single neuron simulation
g-bar Aug 28, 2025
3e204df
results
g-bar Aug 29, 2025
75a96c1
add synaptome
g-bar Aug 29, 2025
97bdc00
add synaptome
g-bar Aug 29, 2025
86dcf10
Merge branch 'task/v2' into new-ux-detail-view-pages
g-bar Aug 29, 2025
b7dd528
Merge branch 'task/v2' into new-ux-detail-view-pages
g-bar Sep 3, 2025
7e0508e
redirect detail root to overview
g-bar Sep 3, 2025
1e9b56e
adding name to pages
g-bar Sep 3, 2025
7227cf7
name
g-bar Sep 4, 2025
6b9f724
explore -> data
g-bar Sep 4, 2025
463cbda
remove double name
g-bar Sep 4, 2025
4695601
add related publications tab
g-bar Sep 4, 2025
4e4bcc2
main scree
g-bar Sep 4, 2025
650e0c9
add circuit viz
g-bar Sep 5, 2025
ba95ebc
Add circuit analysis
g-bar Sep 5, 2025
f2b5b3a
add related publications
g-bar Sep 5, 2025
37efabf
add mtype, etype to synaptome
g-bar Sep 8, 2025
b0cef05
add related circuits
g-bar Sep 8, 2025
d0044d4
add microcircuit
g-bar Sep 8, 2025
5950228
Merge branch 'task/v2' into circuit-detail
g-bar Sep 8, 2025
aeb2693
lint
g-bar Sep 8, 2025
6164b85
fix analysis
g-bar Sep 8, 2025
c96c538
implement back
g-bar Sep 8, 2025
4b9dea3
fix circuit fields layout
g-bar Sep 8, 2025
d44e153
viz in overview for circuite
g-bar Sep 8, 2025
f1e5397
tabbed component
g-bar Sep 8, 2025
8ac843b
improve styles of related publications
g-bar Sep 8, 2025
7275bb9
add tabs
g-bar Sep 8, 2025
ab9cd86
provenance
g-bar Sep 8, 2025
8f9752f
improve analysis styles
g-bar Sep 8, 2025
645b5fa
improve layout
g-bar Sep 8, 2025
a150522
Default message
g-bar Sep 8, 2025
5fb86bc
merge
g-bar Sep 8, 2025
e8f921e
move viz to overview
g-bar Sep 9, 2025
ab9a2eb
ephys viewer
g-bar Sep 9, 2025
d2cf2c1
working on fields
g-bar Sep 9, 2025
c436599
fix render mtypes, etypes
g-bar Sep 9, 2025
ac71046
Add mtype etypes
g-bar Sep 9, 2025
0671155
header layout
g-bar Sep 9, 2025
7a5aefd
improve analysis style
g-bar Sep 9, 2025
986a8ab
Merge branch 'task/v2' into detail-view-styles-2
g-bar Sep 9, 2025
6ccaab9
implemente simulate action
g-bar Sep 10, 2025
fd457f7
Clone MEModel
g-bar Sep 10, 2025
673f41a
simulate
g-bar Sep 10, 2025
b1da2b4
Merge branch 'task/v2' into simulate-button
g-bar Sep 10, 2025
6e20286
remove unused console.log
g-bar Sep 10, 2025
fb9a62f
fix back button
g-bar Sep 10, 2025
6f54965
Merge branch 'task/v2' into detail-view-polish
g-bar Sep 12, 2025
c5fdd1f
fix dowload private
g-bar Sep 12, 2025
dcd415b
Merge branch 'fix-download-private' into detail-view-polish
g-bar Sep 12, 2025
53ab9cc
sim not downloadable
g-bar Sep 12, 2025
fd8ab68
hide download button
g-bar Sep 12, 2025
c0bc436
add single neuron simulation download
g-bar Sep 15, 2025
b0a58e5
add single neuron synaptome simulation download
g-bar Sep 15, 2025
4ace149
download panel
g-bar Sep 15, 2025
745d47e
downlaod panel
g-bar Sep 15, 2025
8d7b57e
Merge branch 'task/v2' into detail-view-polish
g-bar Sep 15, 2025
c3924e8
fix linter
g-bar Sep 15, 2025
d32bc30
paths
g-bar Sep 15, 2025
95b405a
remove useless comma
g-bar Sep 15, 2025
bbed2c4
fix redirection
g-bar Sep 16, 2025
f5f263f
fix highlighted group
g-bar Sep 16, 2025
c34d366
Merge branch 'task/v2' into detail-view-polish
g-bar Sep 16, 2025
f0e873c
remove clickable header from related publications
g-bar Sep 16, 2025
aa88fc4
Merge branch 'task/v2' into detail-view-polish
g-bar Sep 17, 2025
09d8034
split contributors
g-bar Sep 17, 2025
4c9046b
fix institutional contributors
g-bar Sep 17, 2025
6d0c7ca
line clamp
g-bar Sep 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions src/api/entitycore/types/shared/global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,23 +111,26 @@ type RoleBase = {

interface IRole extends RoleBase, Timestamps, EntityCoreIdentifiable {}

type OrganizationBase = {
export interface IOrganization extends Timestamps, EntityCoreIdentifiable {
type: 'organization';
pref_label: string;
alternative_name?: string | null;
};

interface IOrganization extends OrganizationBase, Timestamps, EntityCoreIdentifiable {}
}

type PersonBase = {
export interface IPerson extends Timestamps, EntityCoreIdentifiable {
type: 'person';
givenName: string | null;
familyName: string | null;
pref_label: string;
};
}

export interface IConsortium extends Timestamps, EntityCoreIdentifiable {
pref_label: string;
alternative_name: string;
type: 'consortium';
}

export interface IPerson extends PersonBase, Timestamps, EntityCoreIdentifiable {}
export type Agent = IPerson | IOrganization;
export type Agent = IPerson | IOrganization | IConsortium;

export interface IContributor extends Timestamps, EntityCoreIdentifiable {
agent: Agent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import DetailMenu from '@/ui/segments/explore/detail-menu';
import ActionMenu from '@/ui/segments/action-menu';
import type { WorkspaceContext, AwaitedType } from '@/types/common';
import Close from '@/ui/molecules/close';
import { DownloadPanel as CircuitDownloadPanel } from '@/ui/segments/explore/circuit/elements/download-panel';

interface Params {
id: string;
Expand Down Expand Up @@ -66,37 +67,38 @@ export default async function Layout({
ctx: { virtualLabId, projectId },
});

const parentLink = `${ROOT_ROUTE}/${virtualLabId}/${projectId}/data/browse/entity/${type}?group=${entityType.group}`;

return (
<div className="ml-5 flex h-full rounded-md border-[1px] border-[#D9D9D9] px-5 py-3">
<div className="w-1/5">
<div className="flex flex-wrap gap-3">
<Breadcrumb>
<NextLink href={`${ROOT_ROUTE}/${virtualLabId}/${projectId}/data`}>Explore</NextLink>
</Breadcrumb>
<Breadcrumb>
<NextLink
href={`${ROOT_ROUTE}/${virtualLabId}/${projectId}/data/browse/entity/${type}`}
>
{entityType.title}
</NextLink>
</Breadcrumb>
<Breadcrumb showChevron={false}>{entity.name}</Breadcrumb>
</div>
<div className="mt-5 flex flex-col gap-5">
<DetailMenu sections={entityType.detailViewSections} />
<>
<div className="ml-5 flex h-full rounded-md border-[1px] border-[#D9D9D9] px-5 py-3">
<div className="w-1/5">
<div className="flex flex-wrap gap-3">
<Breadcrumb>
<NextLink href={`${ROOT_ROUTE}/${virtualLabId}/${projectId}/data`}>Explore</NextLink>
</Breadcrumb>
<Breadcrumb>
<NextLink href={parentLink}>{entityType.title}</NextLink>
</Breadcrumb>
<Breadcrumb showChevron={false}>{entity.name}</Breadcrumb>
</div>
<div className="mt-5 flex flex-col gap-5">
<DetailMenu sections={entityType.detailViewSections} />
</div>
<ActionMenu entity={entity} type={type} ctx={{ virtualLabId, projectId }} />
</div>
<ActionMenu entity={entity} type={type} ctx={{ virtualLabId, projectId }} />
</div>
<div className="relative w-4/5">
<div className="h-full w-full overflow-x-auto overflow-y-auto p-10">
<div className="h-[9%]">
<div className="text-neutral-4 uppercase">Name</div>
<div className="text-primary-8 text-2xl font-bold">{entity.name}</div>
<div className="relative w-4/5">
<div className="h-full w-full overflow-x-auto overflow-y-auto p-10">
<div className="h-[9%]">
<div className="text-neutral-4 uppercase">Name</div>
<div className="text-primary-8 text-2xl font-bold">{entity.name}</div>
</div>
<div className="h-[91%]">{children}</div>
</div>
<div className="h-[91%]">{children}</div>
<Close href={parentLink} />
</div>
<Close />
</div>
</div>
{entityType.extendedType === 'circuit' && <CircuitDownloadPanel />}
</>
);
}
79 changes: 60 additions & 19 deletions src/entity-configuration/definitions/fields-defs/common.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button } from 'antd';
import { useAtom } from 'jotai';

import { makeCustomRowSelectionEvent } from '@/components/explore-section/ExploreSectionListingView/expandable-row/custom-row-selection-event';
import { transformAgentToNames } from '@/api/entitycore/transformers';
import { ExtendedEntitiesTypeDict } from '@/api/entitycore/types/extended-entity-type';
import { hasAssets } from '@/api/entitycore/guards';
Expand All @@ -22,10 +22,20 @@ import { DownloadIcon } from '@/components/icons';
import type { EntityCoreObjectTypes } from '@/api/entitycore/types';
import type { IContributor } from '@/api/entitycore/types/shared/global';
import type { FieldsDefinitionRegistry } from '@/entity-configuration/definitions/types';
import { downloadPanelCircuitAtom } from '@/ui/segments/explore/circuit/elements/download-panel';

export type ProcessedContributor = {
name: string;
type: number; // 0 for Org, 1 for Person
import { ICircuit } from '@/api/entitycore/types/entities/circuit';
import { EntityTypeValue } from '@/entity-configuration/domain';

const renderContributors = (r: EntityTypeValue, filter: 'person' | 'organization') => {
if (!('contributions' in r) || !r.contributions) return EmptyValue;

const filteredContributions = r.contributions.filter(
(c) => c.agent.type === 'consortium' || c.agent.type === filter
);

if (!filteredContributions || filteredContributions.length === 0) return EmptyValue;
return renderContributorsModal(filteredContributions, false, () => {}, 'inline');
};

export const FieldsDefinition: Partial<FieldsDefinitionRegistry<EntityCoreObjectTypes>> = {
Expand All @@ -52,16 +62,7 @@ export const FieldsDefinition: Partial<FieldsDefinitionRegistry<EntityCoreObject
description: 'Download item',
filter: null,
render: (record) => {
const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {
e.stopPropagation();
e.preventDefault();
makeCustomRowSelectionEvent({ record });
};
return (
<Button className="p-2" type="text" htmlType="button" onClick={onClick}>
<DownloadIcon className="text-current" />
</Button>
);
return <DownloadButton entity={record} />;
},
style: { width: 50, fixed: 'left', align: 'center' },
isFilterable: false,
Expand Down Expand Up @@ -167,12 +168,29 @@ export const FieldsDefinition: Partial<FieldsDefinitionRegistry<EntityCoreObject
(r as EntityCoreObjectTypes & { contributions?: Array<IContributor> | null }).contributions,
false
),
renderForDetailView: (r) => {
const { contributions } = r as EntityCoreObjectTypes & {
contributions?: Array<IContributor> | null;
};
return renderContributorsModal(contributions, false, () => {}, 'inline');
renderForDetailView: (r) => renderContributors(r, 'person'),
vocabulary: {
plural: 'Contributors',
singular: 'Contributor',
},
defaultConstraint: 'contribution__pref_label__in',
order: {
property: 'contribution__order_by',
value: 'pref_label',
},
isSortable: false,
isFilterable: true,
isDisplayable: true,
},
[EntityCoreFields.InstitutionalContributions]: {
title: 'Institutional Contributors',
filter: CoreFieldFilterTypeEnum.CheckList,
render: (r) =>
transformAgentToNames(
(r as EntityCoreObjectTypes & { contributions?: Array<IContributor> | null }).contributions,
false
),
renderForDetailView: (r) => renderContributors(r, 'organization'),
vocabulary: {
plural: 'Contributors',
singular: 'Contributor',
Expand Down Expand Up @@ -260,3 +278,26 @@ export const FieldsDefinition: Partial<FieldsDefinitionRegistry<EntityCoreObject
isDisplayable: true,
},
};

function DownloadButton({ entity }: { entity: EntityCoreObjectTypes }) {
const [, setDownloadPanelCircuit] = useAtom(downloadPanelCircuitAtom);

return (
<Button
className="p-2"
type="text"
htmlType="button"
onClick={(e) => {
const { type } = entity;
if (type !== 'circuit') return;

e.stopPropagation();
e.preventDefault();

setDownloadPanelCircuit(entity as ICircuit);
}}
>
<DownloadIcon className="text-current" />
</Button>
);
}
1 change: 1 addition & 0 deletions src/entity-configuration/definitions/fields-defs/enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export enum EntityCoreFields {
RegistrationDate = 'registration_date',
UpdateDate = 'update_date',
Contributions = 'contribution',
InstitutionalContributions = 'institutional_contributions',
License = 'license',
BrainRegion = 'brain_region',
MType = 'mtype',
Expand Down
44 changes: 21 additions & 23 deletions src/entity-configuration/definitions/renderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import isEmpty from 'lodash/isEmpty';
import isNil from 'lodash/isNil';
import find from 'lodash/find';

import { ProcessedContributor } from '@/entity-configuration/definitions/fields-defs/common';
import { getEntityByExtendedType } from '@/entity-configuration/domain/helpers';
import { PreviewThumbnail } from '@/features/thumbnail/preview';
import { tryCatch } from '@/api/utils';
Expand All @@ -18,6 +17,7 @@ import type { WorkspaceContext } from '@/types/common';
import type {
EntityCoreIdentifiable,
EntityCoreResource,
IContributor,
ILicense,
MeasurementBase,
} from '@/api/entitycore/types/shared/global';
Expand Down Expand Up @@ -254,61 +254,59 @@ export const renderMorphologyMeasurement = (
// CONTRIBUTOR MODAL

function ContributorsModalTrigger({
sortedContributors,
contributors,
}: {
sortedContributors: ProcessedContributor[];
contributors: Array<{ agent: { pref_label: string; type: string } }> | null | undefined;
contributors: Array<IContributor>;
}): React.ReactElement {
const [isOpen, setIsOpen] = useState(false);
return (
<>
<Button type="link" onClick={() => setIsOpen(true)} className="mt-2 h-auto p-0 text-gray-600">
View {sortedContributors.length} Contributor{sortedContributors.length > 1 ? 's' : ''}
View {contributors.length} Contributor{contributors.length > 1 ? 's' : ''}
</Button>
{renderContributorsModal(contributors, isOpen, () => setIsOpen(false), 'modal')}
</>
);
}

export const renderContributorsModal = (
contributors: Array<{ agent: { pref_label: string; type: string } }> | null | undefined,
contributors: Array<IContributor>,
open: boolean,
onClose: () => void,
mode: 'modal' | 'inline' = 'modal'
): ReactNode => {
if (!contributors || contributors.length === 0) return EmptyValue;
const getName = (c: IContributor) =>
('givenName' in c.agent && c.agent.givenName) || c.agent.pref_label;

const processedContributors: ProcessedContributor[] = contributors.map((contributor) => ({
name: contributor.agent.pref_label,
type: contributor.agent.type === 'organization' ? 0 : 1, // 0 for Org, 1 for Person
}));
const sortContributors = (a: IContributor, b: IContributor) => {
return getName(a).localeCompare(getName(b));
};

const sortedContributors = processedContributors.sort((a, b) =>
a.type === b.type ? String(a.name ?? '').localeCompare(String(b.name ?? '')) : a.type - b.type
);
const consortia = contributors
.filter((c) => c.agent.type === 'consortium')
.sort(sortContributors);
const other = contributors.filter((c) => c.agent.type !== 'consortium').sort(sortContributors);

const sortedContributors = [...consortia, ...other];

if (mode === 'inline') {
const displayContributors = sortedContributors.slice(0, 6);
const hasMoreContributors = sortedContributors.length > 6;

return (
<div>
<span>
<span className="line-clamp-2">
{displayContributors.map((contributor, index) => (
<span key={`${contributor.name}-${contributor.type}`}>
{contributor.name}
<span key={`${contributor.agent.pref_label}-${contributor.agent.type}`}>
{getName(contributor)}
{index < displayContributors.length - 1 ? ', ' : ''}
</span>
))}
</span>
{hasMoreContributors && (
<>
{displayContributors.length > 0 && ' '}
<ContributorsModalTrigger
sortedContributors={sortedContributors}
contributors={contributors}
/>
<ContributorsModalTrigger contributors={contributors} />
</>
)}
</div>
Expand All @@ -330,8 +328,8 @@ export const renderContributorsModal = (
>
<p className="text-primary-8" style={{ margin: 0, fontSize: '18px' }}>
{sortedContributors.map((contributor, index) => (
<span key={`${contributor.name}-${contributor.type}`}>
{contributor.name}
<span key={`${contributor.agent.pref_label}-${contributor.agent.type}`}>
{getName(contributor)}
{index < sortedContributors.length - 1 ? ', ' : ''}
</span>
))}
Expand Down
1 change: 1 addition & 0 deletions src/entity-configuration/definitions/view-defs/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import type { TExperimentTypeNames } from '@/entity-configuration/domain/experim
export const CommonSummaryViewFields = [
{ field: EntityCoreFields.Description, className: 'col-span-3' },
{ field: EntityCoreFields.Contributions },
{ field: EntityCoreFields.InstitutionalContributions },
{ field: EntityCoreFields.RegistrationDate },
] as TypeSummaryProps[];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export const PairedNeuronCircuitSimulation: EntityCoreTypeConfig<ICircuitSimulat
},
detailViewSections: ['overview', 'related-publications'],
isBookmarkable: false,
isDownloadable: true,
isDownloadable: false,
isCopyable: true,
isSimulatable: true,
} as const;
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export const SingleNeuronSimulation: EntityCoreTypeConfig<ISingleNeuronSimulatio
},
detailViewSections: ['overview', 'configuration', 'results', 'related-publications'],
isBookmarkable: true,
isDownloadable: false,
isDownloadable: true,
isCopyable: true,
isSimulatable: false,
} as const;
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export const SingleNeuronSynaptomeSimulation: EntityCoreTypeConfig<ISingleNeuron
},
isBookmarkable: true,
detailViewSections: ['overview', 'configuration', 'results', 'related-publications'],
isDownloadable: false,
isDownloadable: true,
isCopyable: true,
isSimulatable: false,
} as const;
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ interface PaperHeaderProps {
export function Header({ title, className }: PaperHeaderProps) {
return (
<h2
className={`text-primary-8 flex-1 cursor-pointer text-xl leading-tight font-bold transition-colors ${className || ''}`}
className={`text-primary-8 flex-1 text-xl leading-tight font-bold transition-colors ${className || ''}`}
>
{title}
</h2>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { BaseTable } from '@/components/explore-section/ExploreSectionListingVie
import { ExtendedEntitiesTypeDict } from '@/api/entitycore/types/extended-entity-type';
import { activeColumnsAtom } from '@/state/explore-section/list-view-atoms';
import { ExploreDataScope } from '@/types/explore-section/application';
import { resolveExploreDetailsPageUrl } from '@/utils/url-builder';
import { resolveExploreDetailsPageUrl2 } from '@/utils/url-builder';

import type { ICircuit } from '@/api/entitycore/types/entities/circuit';
import type { WorkspaceContext } from '@/types/common';
Expand Down Expand Up @@ -47,7 +47,7 @@ export function DerivedFrom({ data }: Props) {

const onCellClick = (basePath: string, record: ICircuit) => {
navigate(
resolveExploreDetailsPageUrl({
resolveExploreDetailsPageUrl2({
ctx: { virtualLabId, projectId },
dataType: ExtendedEntitiesTypeDict.Circuit,
entityId: record.id,
Expand Down
Loading