mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 10:31:15 +00:00
105 lines
2.6 KiB
Vue
105 lines
2.6 KiB
Vue
<script setup lang="ts">
|
|
import { computed, onBeforeMount, onBeforeUnmount, onMounted } from 'vue';
|
|
import { useRouter } from 'vue-router';
|
|
|
|
import { useI18n } from '@/composables/useI18n';
|
|
import { useOrchestrationStore } from '@/stores/orchestration.store';
|
|
import { useDocumentTitle } from '@/composables/useDocumentTitle';
|
|
import { usePushConnection } from '@/composables/usePushConnection';
|
|
import { usePushConnectionStore } from '@/stores/pushConnection.store';
|
|
import { useRootStore } from '@/stores/root.store';
|
|
import { useTelemetry } from '@/composables/useTelemetry';
|
|
|
|
withDefaults(
|
|
defineProps<{
|
|
autoRefreshEnabled?: boolean;
|
|
}>(),
|
|
{
|
|
autoRefreshEnabled: true,
|
|
},
|
|
);
|
|
|
|
const router = useRouter();
|
|
const i18n = useI18n();
|
|
const pushConnection = usePushConnection({ router });
|
|
const documentTitle = useDocumentTitle();
|
|
const telemetry = useTelemetry();
|
|
|
|
const orchestrationManagerStore = useOrchestrationStore();
|
|
const rootStore = useRootStore();
|
|
const pushStore = usePushConnectionStore();
|
|
|
|
const initialStatusReceived = computed(() => orchestrationManagerStore.initialStatusReceived);
|
|
|
|
const workerIds = computed(() => Object.keys(orchestrationManagerStore.workers));
|
|
|
|
const pageTitle = computed(() => i18n.baseText('workerList.pageTitle'));
|
|
|
|
onMounted(() => {
|
|
documentTitle.set(pageTitle.value);
|
|
|
|
telemetry.track('User viewed worker view', {
|
|
instance_id: rootStore.instanceId,
|
|
});
|
|
});
|
|
|
|
onBeforeMount(() => {
|
|
if (window.Cypress !== undefined) {
|
|
return;
|
|
}
|
|
|
|
pushConnection.initialize();
|
|
pushStore.pushConnect();
|
|
orchestrationManagerStore.startWorkerStatusPolling();
|
|
});
|
|
|
|
onBeforeUnmount(() => {
|
|
if (window.Cypress !== undefined) {
|
|
return;
|
|
}
|
|
|
|
orchestrationManagerStore.stopWorkerStatusPolling();
|
|
pushStore.pushDisconnect();
|
|
pushConnection.terminate();
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<PushConnectionTracker class="actions"></PushConnectionTracker>
|
|
<div :class="$style.workerListHeader">
|
|
<n8n-heading tag="h1" size="2xlarge">{{ pageTitle }}</n8n-heading>
|
|
</div>
|
|
<div v-if="!initialStatusReceived">
|
|
<n8n-spinner />
|
|
</div>
|
|
<div v-else>
|
|
<div v-if="workerIds.length === 0">{{ i18n.baseText('workerList.empty') }}</div>
|
|
<div v-else>
|
|
<div v-for="workerId in workerIds" :key="workerId" :class="$style.card">
|
|
<WorkerCard :worker-id="workerId" data-test-id="worker-card" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style module lang="scss">
|
|
.workerListHeader {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: var(--spacing-s);
|
|
}
|
|
|
|
.card {
|
|
margin-bottom: var(--spacing-s);
|
|
}
|
|
|
|
.tableLoader {
|
|
width: 100%;
|
|
height: 48px;
|
|
margin-bottom: var(--spacing-2xs);
|
|
}
|
|
</style>
|