('aggregation', 'namespaces');
const [activeNamespaces, setActiveNamespaces] = useListParamWithDefault('ns');
const [activeScopes, setActiveScopes] = useListParamWithDefault('scopes');
const filters = useMemo(
() => ({ namespaces: activeNamespaces, scopes: activeScopes }),
[activeNamespaces, activeScopes]
);
const { groups, groupType, availableAggregations, filteredCount } = useWorkspaceAggregation(
items,
aggregation,
filters
);
const plugins = useCardPlugins({ compModelsById, showPreview: isMinimal });
return (
{filteredCount === 0 && }
{groups.map((group) => (
{groupType !== 'none' && {group.displayName}
}
{group.items.map((item) => (
))}
))}
);
}
export function useCardPlugins({
compModelsById,
showPreview,
}: {
compModelsById: Map;
showPreview?: boolean;
}): ComponentCardPluginType[] {
const serverUrlsSignature = React.useMemo(() => {
const serversCount = Array.from(compModelsById.values())
.filter((comp) => comp.server?.url)
.map((comp) => comp.server?.url)
.join(',');
return serversCount;
}, [compModelsById]);
const plugins = React.useMemo(
() => [
{
preview: function Preview({ component, shouldShowPreview }) {
const compModel = compModelsById.get(component.id.toString());
if (!compModel) return null;
return (
);
},
},
{
previewBottomRight: function PreviewBottomRight({ component }) {
const env = component.get('teambit.envs/envs');
const envComponentId = env?.id ? ComponentID.fromString(env?.id) : undefined;
return (
);
},
},
new LinkPlugin(),
],
[compModelsById.size, serverUrlsSignature, showPreview]
);
return plugins;
}