mirror of
https://github.com/unraid/api.git
synced 2026-01-24 01:18:39 -06:00
implement 'start / stop' bulk & row actions
This commit is contained in:
1
web/components.d.ts
vendored
1
web/components.d.ts
vendored
@@ -130,6 +130,7 @@ declare module 'vue' {
|
||||
URadioGroup: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.4_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_655bac6707ae017754653173419b3890/node_modules/@nuxt/ui/dist/runtime/components/RadioGroup.vue')['default']
|
||||
USelectMenu: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.4_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_655bac6707ae017754653173419b3890/node_modules/@nuxt/ui/dist/runtime/components/SelectMenu.vue')['default']
|
||||
'UserProfile.standalone': typeof import('./src/components/UserProfile.standalone.vue')['default']
|
||||
USkeleton: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.4_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_655bac6707ae017754653173419b3890/node_modules/@nuxt/ui/dist/runtime/components/Skeleton.vue')['default']
|
||||
UTable: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.4_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_655bac6707ae017754653173419b3890/node_modules/@nuxt/ui/dist/runtime/components/Table.vue')['default']
|
||||
'WanIpCheck.standalone': typeof import('./src/components/WanIpCheck.standalone.vue')['default']
|
||||
'WelcomeModal.standalone': typeof import('./src/components/Activation/WelcomeModal.standalone.vue')['default']
|
||||
|
||||
@@ -8,6 +8,8 @@ import { CREATE_DOCKER_FOLDER } from '@/components/Docker/docker-create-folder.m
|
||||
import { DELETE_DOCKER_ENTRIES } from '@/components/Docker/docker-delete-entries.mutation';
|
||||
import { MOVE_DOCKER_ENTRIES_TO_FOLDER } from '@/components/Docker/docker-move-entries.mutation';
|
||||
import { SET_DOCKER_FOLDER_CHILDREN } from '@/components/Docker/docker-set-folder-children.mutation';
|
||||
import { START_DOCKER_CONTAINER } from '@/components/Docker/docker-start-container.mutation';
|
||||
import { STOP_DOCKER_CONTAINER } from '@/components/Docker/docker-stop-container.mutation';
|
||||
import { ContainerState } from '@/composables/gql/graphql';
|
||||
|
||||
import type {
|
||||
@@ -16,7 +18,7 @@ import type {
|
||||
ResolvedOrganizerFolder,
|
||||
} from '@/composables/gql/graphql';
|
||||
import type { TableColumn } from '@nuxt/ui';
|
||||
import type { VNode } from 'vue';
|
||||
import type { Component, VNode } from 'vue';
|
||||
|
||||
interface Props {
|
||||
containers: DockerContainer[];
|
||||
@@ -35,6 +37,7 @@ const UInput = resolveComponent('UInput');
|
||||
const UDropdownMenu = resolveComponent('UDropdownMenu');
|
||||
const UContextMenu = resolveComponent('UContextMenu');
|
||||
const UModal = resolveComponent('UModal');
|
||||
const USkeleton = resolveComponent('USkeleton') as Component;
|
||||
|
||||
function formatPorts(container?: DockerContainer | null): string {
|
||||
if (!container) return '';
|
||||
@@ -61,6 +64,7 @@ type TreeRow = {
|
||||
autoStart?: string;
|
||||
updates?: string;
|
||||
children?: TreeRow[];
|
||||
containerId?: string;
|
||||
};
|
||||
|
||||
function toContainerTreeRow(meta: DockerContainer | null | undefined, fallbackName?: string): TreeRow {
|
||||
@@ -76,6 +80,7 @@ function toContainerTreeRow(meta: DockerContainer | null | undefined, fallbackNa
|
||||
ports: formatPorts(meta || undefined),
|
||||
autoStart: meta?.autoStart ? 'On' : 'Off',
|
||||
updates: updatesParts.join(' / ') || '—',
|
||||
containerId: meta?.id,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -93,6 +98,7 @@ function buildTree(entry: ResolvedOrganizerEntry): TreeRow | null {
|
||||
const meta = entry.meta as DockerContainer | null | undefined;
|
||||
const row = toContainerTreeRow(meta, entry.name || undefined);
|
||||
row.id = entry.id;
|
||||
row.containerId = meta?.id;
|
||||
return row;
|
||||
}
|
||||
return {
|
||||
@@ -118,9 +124,15 @@ type DropdownMenuItem = { label: string; icon: string; onSelect: (e?: Event) =>
|
||||
type DropdownMenuItems = DropdownMenuItem[][];
|
||||
|
||||
function wrapCell(row: { original: TreeRow }, child: VNode) {
|
||||
const content = h('div', { 'data-row-id': row.original.id, class: 'block w-full h-full px-3 py-2' }, [
|
||||
child,
|
||||
]);
|
||||
const isBusy = busyRowIds.value.has((row.original as TreeRow).id);
|
||||
const content = h(
|
||||
'div',
|
||||
{
|
||||
'data-row-id': row.original.id,
|
||||
class: `block w-full h-full px-3 py-2 ${isBusy ? 'opacity-50 pointer-events-none select-none' : ''}`,
|
||||
},
|
||||
[child]
|
||||
);
|
||||
if ((row.original as TreeRow).type === 'container') {
|
||||
return h(
|
||||
UContextMenu,
|
||||
@@ -216,19 +228,17 @@ const columns = computed<TableColumn<TreeRow>[]>(() => {
|
||||
cell: ({ row }) => {
|
||||
if (row.original.type === 'folder') return '';
|
||||
const state = row.original.state ?? '';
|
||||
const isBusy = busyRowIds.value.has(row.original.id);
|
||||
const color = {
|
||||
[ContainerState.RUNNING]: 'success' as const,
|
||||
[ContainerState.EXITED]: 'neutral' as const,
|
||||
}[state];
|
||||
if (isBusy) {
|
||||
return wrapCell(row, h(USkeleton, { class: 'h-5 w-20' }));
|
||||
}
|
||||
return wrapCell(
|
||||
row,
|
||||
h(
|
||||
UBadge,
|
||||
{
|
||||
color,
|
||||
},
|
||||
() => state
|
||||
)
|
||||
h(UBadge, { color }, () => state)
|
||||
);
|
||||
},
|
||||
},
|
||||
@@ -312,6 +322,8 @@ const { mutate: createFolderMutation, loading: creating } = useMutation(CREATE_D
|
||||
const { mutate: moveEntriesMutation, loading: moving } = useMutation(MOVE_DOCKER_ENTRIES_TO_FOLDER);
|
||||
const { mutate: deleteEntriesMutation, loading: deleting } = useMutation(DELETE_DOCKER_ENTRIES);
|
||||
const { mutate: setFolderChildrenMutation } = useMutation(SET_DOCKER_FOLDER_CHILDREN);
|
||||
const { mutate: startContainerMutation } = useMutation(START_DOCKER_CONTAINER);
|
||||
const { mutate: stopContainerMutation } = useMutation(STOP_DOCKER_CONTAINER);
|
||||
|
||||
const moveOpen = ref(false);
|
||||
const selectedFolderId = ref<string>('');
|
||||
@@ -322,6 +334,144 @@ const renameValue = ref<string>('');
|
||||
const newTreeFolderName = ref<string>('');
|
||||
|
||||
const rootFolderId = computed<string>(() => props.organizerRoot?.id || '');
|
||||
// Busy/disabled rows while performing start/stop
|
||||
const busyRowIds = ref<Set<string>>(new Set());
|
||||
|
||||
function setRowsBusy(ids: string[], busy: boolean) {
|
||||
const next = new Set(busyRowIds.value);
|
||||
for (const id of ids) {
|
||||
if (busy) next.add(id);
|
||||
else next.delete(id);
|
||||
}
|
||||
busyRowIds.value = next;
|
||||
}
|
||||
|
||||
function getRowById(targetId: string): TreeRow | undefined {
|
||||
function walk(rows: TreeRow[]): TreeRow | undefined {
|
||||
for (const r of rows) {
|
||||
if (r.id === targetId) return r;
|
||||
if (r.children?.length) {
|
||||
const found = walk(r.children as TreeRow[]);
|
||||
if (found) return found;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
return walk(treeData.value);
|
||||
}
|
||||
|
||||
function classifyStartStop(ids: string[]) {
|
||||
const toStart: { id: string; containerId: string; name: string }[] = [];
|
||||
const toStop: { id: string; containerId: string; name: string }[] = [];
|
||||
for (const id of ids) {
|
||||
const row = getRowById(id);
|
||||
if (!row || row.type !== 'container') continue;
|
||||
const containerId = row.containerId || row.id;
|
||||
const state = row.state as string | undefined;
|
||||
const name = row.name;
|
||||
if (state === ContainerState.RUNNING) toStop.push({ id, containerId, name });
|
||||
else toStart.push({ id, containerId, name });
|
||||
}
|
||||
return { toStart, toStop };
|
||||
}
|
||||
|
||||
async function runStartStopBatch(
|
||||
toStart: { id: string; containerId: string; name: string }[],
|
||||
toStop: { id: string; containerId: string; name: string }[]
|
||||
) {
|
||||
const totalOps = toStop.length + toStart.length;
|
||||
let completed = 0;
|
||||
// Execute sequentially; attach refetch to the final operation only
|
||||
for (const item of toStop) {
|
||||
completed++;
|
||||
const isLast = completed === totalOps;
|
||||
await stopContainerMutation(
|
||||
{ id: item.containerId },
|
||||
isLast
|
||||
? {
|
||||
refetchQueries: [{ query: GET_DOCKER_CONTAINERS, variables: { skipCache: true } }],
|
||||
awaitRefetchQueries: true,
|
||||
}
|
||||
: { awaitRefetchQueries: false }
|
||||
);
|
||||
}
|
||||
for (const item of toStart) {
|
||||
completed++;
|
||||
const isLast = completed === totalOps;
|
||||
await startContainerMutation(
|
||||
{ id: item.containerId },
|
||||
isLast
|
||||
? {
|
||||
refetchQueries: [{ query: GET_DOCKER_CONTAINERS, variables: { skipCache: true } }],
|
||||
awaitRefetchQueries: true,
|
||||
}
|
||||
: { awaitRefetchQueries: false }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleRowStartStop(row: TreeRow) {
|
||||
if (row.type !== 'container') return;
|
||||
const containerId = row.containerId || row.id;
|
||||
if (!containerId) return;
|
||||
setRowsBusy([row.id], true);
|
||||
try {
|
||||
const isRunning = row.state === ContainerState.RUNNING;
|
||||
const mutate = isRunning ? stopContainerMutation : startContainerMutation;
|
||||
await mutate(
|
||||
{ id: containerId },
|
||||
{
|
||||
refetchQueries: [{ query: GET_DOCKER_CONTAINERS, variables: { skipCache: true } }],
|
||||
awaitRefetchQueries: true,
|
||||
}
|
||||
);
|
||||
} finally {
|
||||
setRowsBusy([row.id], false);
|
||||
}
|
||||
}
|
||||
|
||||
// Bulk Start/Stop handling with mixed confirmation
|
||||
const confirmStartStopOpen = ref(false);
|
||||
const confirmToStart = ref<{ name: string }[]>([]);
|
||||
const confirmToStop = ref<{ name: string }[]>([]);
|
||||
let pendingStartStopIds: string[] = [];
|
||||
|
||||
function openStartStop(ids?: string[]) {
|
||||
const sources = ids ?? getSelectedContainerIds();
|
||||
if (sources.length === 0) return;
|
||||
const { toStart, toStop } = classifyStartStop(sources);
|
||||
const isMixed = toStart.length > 0 && toStop.length > 0;
|
||||
if (isMixed) {
|
||||
pendingStartStopIds = sources;
|
||||
confirmToStart.value = toStart.map((i) => ({ name: i.name }));
|
||||
confirmToStop.value = toStop.map((i) => ({ name: i.name }));
|
||||
confirmStartStopOpen.value = true;
|
||||
return;
|
||||
}
|
||||
// Single-type selection: run immediately with busy rows
|
||||
setRowsBusy(sources, true);
|
||||
runStartStopBatch(toStart, toStop)
|
||||
.then(() => showToast('Action completed'))
|
||||
.finally(() => {
|
||||
setRowsBusy(sources, false);
|
||||
rowSelection.value = {};
|
||||
});
|
||||
}
|
||||
|
||||
async function confirmStartStop(close: () => void) {
|
||||
const { toStart, toStop } = classifyStartStop(pendingStartStopIds);
|
||||
setRowsBusy(pendingStartStopIds, true);
|
||||
try {
|
||||
await runStartStopBatch(toStart, toStop);
|
||||
showToast('Action completed');
|
||||
rowSelection.value = {};
|
||||
} finally {
|
||||
setRowsBusy(pendingStartStopIds, false);
|
||||
confirmStartStopOpen.value = false;
|
||||
pendingStartStopIds = [];
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
type FolderNode = { id: string; name: string; children: FolderNode[] };
|
||||
|
||||
@@ -540,7 +690,12 @@ function showToast(message: string) {
|
||||
|
||||
function handleBulkAction(action: string) {
|
||||
const ids = getSelectedContainerIds();
|
||||
console.log('ids', ids);
|
||||
if (ids.length === 0) return;
|
||||
if (action === 'Start / Stop') {
|
||||
openStartStop(ids);
|
||||
return;
|
||||
}
|
||||
showToast(`${action} (${ids.length})`);
|
||||
}
|
||||
|
||||
@@ -555,6 +710,10 @@ function handleBulkAction(action: string) {
|
||||
|
||||
function handleRowAction(row: TreeRow, action: string) {
|
||||
if (row.type !== 'container') return;
|
||||
if (action === 'Start / Stop') {
|
||||
handleRowStartStop(row);
|
||||
return;
|
||||
}
|
||||
showToast(`${action}: ${row.name}`);
|
||||
}
|
||||
|
||||
@@ -644,6 +803,7 @@ function getRowActionItems(row: TreeRow): DropdownMenuItems {
|
||||
v-model:global-filter="globalFilter"
|
||||
:data="treeData"
|
||||
:columns="columns"
|
||||
:get-row-id="(row: any) => row.id"
|
||||
:get-sub-rows="(row: any) => row.children"
|
||||
:column-filters-options="{ filterFromLeafRows: true }"
|
||||
:loading="loading"
|
||||
@@ -756,5 +916,32 @@ function getRowActionItems(row: TreeRow): DropdownMenuItems {
|
||||
</UButton>
|
||||
</template>
|
||||
</UModal>
|
||||
|
||||
<UModal
|
||||
v-model:open="confirmStartStopOpen"
|
||||
title="Confirm actions"
|
||||
:ui="{ footer: 'justify-end', overlay: 'z-50', content: 'z-50' }"
|
||||
>
|
||||
<template #body>
|
||||
<div class="space-y-3">
|
||||
<div v-if="confirmToStop.length" class="space-y-1">
|
||||
<div class="text-sm font-medium">Will stop</div>
|
||||
<ul class="list-disc pl-5 text-sm text-gray-600 dark:text-gray-300">
|
||||
<li v-for="item in confirmToStop" :key="item.name" class="truncate">{{ item.name }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="confirmToStart.length" class="space-y-1">
|
||||
<div class="text-sm font-medium">Will start</div>
|
||||
<ul class="list-disc pl-5 text-sm text-gray-600 dark:text-gray-300">
|
||||
<li v-for="item in confirmToStart" :key="item.name" class="truncate">{{ item.name }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer="{ close }">
|
||||
<UButton color="neutral" variant="outline" @click="close">Cancel</UButton>
|
||||
<UButton @click="confirmStartStop(close)">Confirm</UButton>
|
||||
</template>
|
||||
</UModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
13
web/src/components/Docker/docker-start-container.mutation.ts
Normal file
13
web/src/components/Docker/docker-start-container.mutation.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const START_DOCKER_CONTAINER = gql`
|
||||
mutation StartDockerContainer($id: PrefixedID!) {
|
||||
docker {
|
||||
start(id: $id) {
|
||||
id
|
||||
names
|
||||
state
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
13
web/src/components/Docker/docker-stop-container.mutation.ts
Normal file
13
web/src/components/Docker/docker-stop-container.mutation.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const STOP_DOCKER_CONTAINER = gql`
|
||||
mutation StopDockerContainer($id: PrefixedID!) {
|
||||
docker {
|
||||
stop(id: $id) {
|
||||
id
|
||||
names
|
||||
state
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
@@ -34,6 +34,8 @@ type Documents = {
|
||||
"\n mutation MoveDockerEntriesToFolder($destinationFolderId: String!, $sourceEntryIds: [String!]!) {\n moveDockerEntriesToFolder(\n destinationFolderId: $destinationFolderId\n sourceEntryIds: $sourceEntryIds\n ) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n": typeof types.MoveDockerEntriesToFolderDocument,
|
||||
"\n query GetDockerContainerOverviewForm($skipCache: Boolean = false) {\n dockerContainerOverviewForm(skipCache: $skipCache) {\n id\n dataSchema\n uiSchema\n data\n }\n }\n": typeof types.GetDockerContainerOverviewFormDocument,
|
||||
"\n mutation SetDockerFolderChildren($folderId: String, $childrenIds: [String!]!) {\n setDockerFolderChildren(folderId: $folderId, childrenIds: $childrenIds) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n": typeof types.SetDockerFolderChildrenDocument,
|
||||
"\n mutation StartDockerContainer($id: PrefixedID!) {\n docker {\n start(id: $id) {\n id\n names\n state\n }\n }\n }\n": typeof types.StartDockerContainerDocument,
|
||||
"\n mutation StopDockerContainer($id: PrefixedID!) {\n docker {\n stop(id: $id) {\n id\n names\n state\n }\n }\n }\n": typeof types.StopDockerContainerDocument,
|
||||
"\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": typeof types.LogFilesDocument,
|
||||
"\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": typeof types.LogFileContentDocument,
|
||||
"\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": typeof types.LogFileSubscriptionDocument,
|
||||
@@ -85,6 +87,8 @@ const documents: Documents = {
|
||||
"\n mutation MoveDockerEntriesToFolder($destinationFolderId: String!, $sourceEntryIds: [String!]!) {\n moveDockerEntriesToFolder(\n destinationFolderId: $destinationFolderId\n sourceEntryIds: $sourceEntryIds\n ) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n": types.MoveDockerEntriesToFolderDocument,
|
||||
"\n query GetDockerContainerOverviewForm($skipCache: Boolean = false) {\n dockerContainerOverviewForm(skipCache: $skipCache) {\n id\n dataSchema\n uiSchema\n data\n }\n }\n": types.GetDockerContainerOverviewFormDocument,
|
||||
"\n mutation SetDockerFolderChildren($folderId: String, $childrenIds: [String!]!) {\n setDockerFolderChildren(folderId: $folderId, childrenIds: $childrenIds) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n": types.SetDockerFolderChildrenDocument,
|
||||
"\n mutation StartDockerContainer($id: PrefixedID!) {\n docker {\n start(id: $id) {\n id\n names\n state\n }\n }\n }\n": types.StartDockerContainerDocument,
|
||||
"\n mutation StopDockerContainer($id: PrefixedID!) {\n docker {\n stop(id: $id) {\n id\n names\n state\n }\n }\n }\n": types.StopDockerContainerDocument,
|
||||
"\n query LogFiles {\n logFiles {\n name\n path\n size\n modifiedAt\n }\n }\n": types.LogFilesDocument,
|
||||
"\n query LogFileContent($path: String!, $lines: Int, $startLine: Int) {\n logFile(path: $path, lines: $lines, startLine: $startLine) {\n path\n content\n totalLines\n startLine\n }\n }\n": types.LogFileContentDocument,
|
||||
"\n subscription LogFileSubscription($path: String!) {\n logFile(path: $path) {\n path\n content\n totalLines\n }\n }\n": types.LogFileSubscriptionDocument,
|
||||
@@ -210,6 +214,14 @@ export function graphql(source: "\n query GetDockerContainerOverviewForm($skipC
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n mutation SetDockerFolderChildren($folderId: String, $childrenIds: [String!]!) {\n setDockerFolderChildren(folderId: $folderId, childrenIds: $childrenIds) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n mutation SetDockerFolderChildren($folderId: String, $childrenIds: [String!]!) {\n setDockerFolderChildren(folderId: $folderId, childrenIds: $childrenIds) {\n version\n views {\n id\n name\n root {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n children {\n __typename\n ... on ResolvedOrganizerFolder {\n id\n name\n type\n }\n ... on OrganizerContainerResource {\n id\n name\n type\n }\n }\n }\n }\n }\n }\n }\n"];
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n mutation StartDockerContainer($id: PrefixedID!) {\n docker {\n start(id: $id) {\n id\n names\n state\n }\n }\n }\n"): (typeof documents)["\n mutation StartDockerContainer($id: PrefixedID!) {\n docker {\n start(id: $id) {\n id\n names\n state\n }\n }\n }\n"];
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n mutation StopDockerContainer($id: PrefixedID!) {\n docker {\n stop(id: $id) {\n id\n names\n state\n }\n }\n }\n"): (typeof documents)["\n mutation StopDockerContainer($id: PrefixedID!) {\n docker {\n stop(id: $id) {\n id\n names\n state\n }\n }\n }\n"];
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
|
||||
@@ -2775,6 +2775,20 @@ export type SetDockerFolderChildrenMutation = { __typename?: 'Mutation', setDock
|
||||
> }
|
||||
}> } };
|
||||
|
||||
export type StartDockerContainerMutationVariables = Exact<{
|
||||
id: Scalars['PrefixedID']['input'];
|
||||
}>;
|
||||
|
||||
|
||||
export type StartDockerContainerMutation = { __typename?: 'Mutation', docker: { __typename?: 'DockerMutations', start: { __typename?: 'DockerContainer', id: string, names: Array<string>, state: ContainerState } } };
|
||||
|
||||
export type StopDockerContainerMutationVariables = Exact<{
|
||||
id: Scalars['PrefixedID']['input'];
|
||||
}>;
|
||||
|
||||
|
||||
export type StopDockerContainerMutation = { __typename?: 'Mutation', docker: { __typename?: 'DockerMutations', stop: { __typename?: 'DockerContainer', id: string, names: Array<string>, state: ContainerState } } };
|
||||
|
||||
export type LogFilesQueryVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
@@ -2979,6 +2993,8 @@ export const DeleteDockerEntriesDocument = {"kind":"Document","definitions":[{"k
|
||||
export const MoveDockerEntriesToFolderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MoveDockerEntriesToFolder"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"destinationFolderId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"sourceEntryIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"moveDockerEntriesToFolder"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"destinationFolderId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"destinationFolderId"}}},{"kind":"Argument","name":{"kind":"Name","value":"sourceEntryIds"},"value":{"kind":"Variable","name":{"kind":"Name","value":"sourceEntryIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"views"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"root"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ResolvedOrganizerFolder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"children"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ResolvedOrganizerFolder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"OrganizerContainerResource"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<MoveDockerEntriesToFolderMutation, MoveDockerEntriesToFolderMutationVariables>;
|
||||
export const GetDockerContainerOverviewFormDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetDockerContainerOverviewForm"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"skipCache"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}},"defaultValue":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"dockerContainerOverviewForm"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"skipCache"},"value":{"kind":"Variable","name":{"kind":"Name","value":"skipCache"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSchema"}},{"kind":"Field","name":{"kind":"Name","value":"uiSchema"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}}]}}]} as unknown as DocumentNode<GetDockerContainerOverviewFormQuery, GetDockerContainerOverviewFormQueryVariables>;
|
||||
export const SetDockerFolderChildrenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetDockerFolderChildren"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"folderId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"childrenIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setDockerFolderChildren"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"folderId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"folderId"}}},{"kind":"Argument","name":{"kind":"Name","value":"childrenIds"},"value":{"kind":"Variable","name":{"kind":"Name","value":"childrenIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"views"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"root"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ResolvedOrganizerFolder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"children"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ResolvedOrganizerFolder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"OrganizerContainerResource"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<SetDockerFolderChildrenMutation, SetDockerFolderChildrenMutationVariables>;
|
||||
export const StartDockerContainerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"StartDockerContainer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PrefixedID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"docker"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"names"}},{"kind":"Field","name":{"kind":"Name","value":"state"}}]}}]}}]}}]} as unknown as DocumentNode<StartDockerContainerMutation, StartDockerContainerMutationVariables>;
|
||||
export const StopDockerContainerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"StopDockerContainer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PrefixedID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"docker"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stop"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"names"}},{"kind":"Field","name":{"kind":"Name","value":"state"}}]}}]}}]}}]} as unknown as DocumentNode<StopDockerContainerMutation, StopDockerContainerMutationVariables>;
|
||||
export const LogFilesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFiles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedAt"}}]}}]}}]} as unknown as DocumentNode<LogFilesQuery, LogFilesQueryVariables>;
|
||||
export const LogFileContentDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"LogFileContent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"lines"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}},{"kind":"Argument","name":{"kind":"Name","value":"lines"},"value":{"kind":"Variable","name":{"kind":"Name","value":"lines"}}},{"kind":"Argument","name":{"kind":"Name","value":"startLine"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startLine"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}},{"kind":"Field","name":{"kind":"Name","value":"startLine"}}]}}]}}]} as unknown as DocumentNode<LogFileContentQuery, LogFileContentQueryVariables>;
|
||||
export const LogFileSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"LogFileSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"path"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"logFile"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"path"},"value":{"kind":"Variable","name":{"kind":"Name","value":"path"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"totalLines"}}]}}]}}]} as unknown as DocumentNode<LogFileSubscriptionSubscription, LogFileSubscriptionSubscriptionVariables>;
|
||||
|
||||
Reference in New Issue
Block a user