Basic recusrive nesting
This commit is contained in:
parent
b5144c04dc
commit
677af8b5be
@ -9,6 +9,7 @@ import ResolvedIcon from "components/resolvedicon";
|
|||||||
export default function ServicesGroup({
|
export default function ServicesGroup({
|
||||||
group,
|
group,
|
||||||
services,
|
services,
|
||||||
|
groups,
|
||||||
layout,
|
layout,
|
||||||
fiveColumns,
|
fiveColumns,
|
||||||
disableCollapse,
|
disableCollapse,
|
||||||
@ -74,7 +75,24 @@ export default function ServicesGroup({
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
|
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
|
||||||
<List group={group} services={services.services} layout={layout} useEqualHeights={useEqualHeights} />
|
{groups?.length ? (
|
||||||
|
<div className="grid grid-cols-1 gap-2">
|
||||||
|
{groups.map((subgroup) => (
|
||||||
|
<ServicesGroup
|
||||||
|
key={subgroup.name}
|
||||||
|
group={subgroup.name}
|
||||||
|
services={subgroup}
|
||||||
|
layout={layout}
|
||||||
|
fiveColumns={fiveColumns}
|
||||||
|
disableCollapse={disableCollapse}
|
||||||
|
useEqualHeights={useEqualHeights}
|
||||||
|
groupsInitiallyCollapsed={groupsInitiallyCollapsed}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<List group={group} services={services.services} layout={layout} useEqualHeights={useEqualHeights} />
|
||||||
|
)}
|
||||||
</Disclosure.Panel>
|
</Disclosure.Panel>
|
||||||
</Transition>
|
</Transition>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@ -293,6 +293,7 @@ function Home({ initialSettings }) {
|
|||||||
key={group.name}
|
key={group.name}
|
||||||
group={group.name}
|
group={group.name}
|
||||||
services={group}
|
services={group}
|
||||||
|
groups={group.groups}
|
||||||
layout={settings.layout?.[group.name]}
|
layout={settings.layout?.[group.name]}
|
||||||
fiveColumns={settings.fiveColumns}
|
fiveColumns={settings.fiveColumns}
|
||||||
disableCollapse={settings.disableCollapse}
|
disableCollapse={settings.disableCollapse}
|
||||||
@ -318,6 +319,7 @@ function Home({ initialSettings }) {
|
|||||||
key={group.name}
|
key={group.name}
|
||||||
group={group.name}
|
group={group.name}
|
||||||
services={group}
|
services={group}
|
||||||
|
groups={group.groups}
|
||||||
layout={settings.layout?.[group.name]}
|
layout={settings.layout?.[group.name]}
|
||||||
fiveColumns={settings.fiveColumns}
|
fiveColumns={settings.fiveColumns}
|
||||||
disableCollapse={settings.disableCollapse}
|
disableCollapse={settings.disableCollapse}
|
||||||
|
|||||||
@ -153,6 +153,7 @@ export async function servicesResponse() {
|
|||||||
services: [...discoveredDockerGroup.services, ...discoveredKubernetesGroup.services, ...configuredGroup.services]
|
services: [...discoveredDockerGroup.services, ...discoveredKubernetesGroup.services, ...configuredGroup.services]
|
||||||
.filter((service) => service)
|
.filter((service) => service)
|
||||||
.sort(compareServices),
|
.sort(compareServices),
|
||||||
|
groups: [...configuredGroup.groups], // TODO: do this properly
|
||||||
};
|
};
|
||||||
|
|
||||||
if (definedLayouts) {
|
if (definedLayouts) {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ function parseServicesToGroups(services) {
|
|||||||
serviceGroup[name].forEach((entries) => {
|
serviceGroup[name].forEach((entries) => {
|
||||||
const entryName = Object.keys(entries)[0];
|
const entryName = Object.keys(entries)[0];
|
||||||
if (Array.isArray(entries[entryName])) {
|
if (Array.isArray(entries[entryName])) {
|
||||||
groups.push(parseServicesToGroups([{ [entryName]: entries[entryName] }]));
|
groups = groups.concat(parseServicesToGroups([{ [entryName]: entries[entryName] }]));
|
||||||
} else {
|
} else {
|
||||||
services.push({
|
services.push({
|
||||||
name: entryName,
|
name: entryName,
|
||||||
@ -675,13 +675,29 @@ export function cleanServiceGroups(groups) {
|
|||||||
});
|
});
|
||||||
return cleanedService;
|
return cleanedService;
|
||||||
}),
|
}),
|
||||||
|
type: serviceGroup.type,
|
||||||
|
groups: cleanServiceGroups(serviceGroup.groups),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function findGroupByName(groups, name) {
|
||||||
|
for (const group of groups) {
|
||||||
|
if (group.name === name) {
|
||||||
|
return group;
|
||||||
|
} else if (group.groups) {
|
||||||
|
const foundGroup = findGroupByName(group.groups, name);
|
||||||
|
if (foundGroup) {
|
||||||
|
return foundGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
export async function getServiceItem(group, service) {
|
export async function getServiceItem(group, service) {
|
||||||
const configuredServices = await servicesFromConfig();
|
const configuredServices = await servicesFromConfig();
|
||||||
|
|
||||||
const serviceGroup = configuredServices.find((g) => g.name === group);
|
const serviceGroup = findGroupByName(configuredServices, group);
|
||||||
if (serviceGroup) {
|
if (serviceGroup) {
|
||||||
const serviceEntry = serviceGroup.services.find((s) => s.name === service);
|
const serviceEntry = serviceGroup.services.find((s) => s.name === service);
|
||||||
if (serviceEntry) return serviceEntry;
|
if (serviceEntry) return serviceEntry;
|
||||||
@ -689,14 +705,14 @@ export async function getServiceItem(group, service) {
|
|||||||
|
|
||||||
const discoveredServices = await servicesFromDocker();
|
const discoveredServices = await servicesFromDocker();
|
||||||
|
|
||||||
const dockerServiceGroup = discoveredServices.find((g) => g.name === group);
|
const dockerServiceGroup = findGroupByName(discoveredServices, group);
|
||||||
if (dockerServiceGroup) {
|
if (dockerServiceGroup) {
|
||||||
const dockerServiceEntry = dockerServiceGroup.services.find((s) => s.name === service);
|
const dockerServiceEntry = dockerServiceGroup.services.find((s) => s.name === service);
|
||||||
if (dockerServiceEntry) return dockerServiceEntry;
|
if (dockerServiceEntry) return dockerServiceEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
const kubernetesServices = await servicesFromKubernetes();
|
const kubernetesServices = await servicesFromKubernetes();
|
||||||
const kubernetesServiceGroup = kubernetesServices.find((g) => g.name === group);
|
const kubernetesServiceGroup = findGroupByName(kubernetesServices, group);
|
||||||
if (kubernetesServiceGroup) {
|
if (kubernetesServiceGroup) {
|
||||||
const kubernetesServiceEntry = kubernetesServiceGroup.services.find((s) => s.name === service);
|
const kubernetesServiceEntry = kubernetesServiceGroup.services.find((s) => s.name === service);
|
||||||
if (kubernetesServiceEntry) return kubernetesServiceEntry;
|
if (kubernetesServiceEntry) return kubernetesServiceEntry;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user