Skip to content
Snippets Groups Projects
Commit e2d04a72 authored by ml bonhomme's avatar ml bonhomme :bee: Committed by Erwan Rouchet
Browse files

Change worker version display when worker is not linked to a repository

parent 00c5aa31
No related branches found
No related tags found
1 merge request!1576Change worker version display when worker is not linked to a repository
<template>
<input
id="switchAll"
type="checkbox"
class="switch is-rtl is-rounded is-info"
v-model="advancedMode"
/>
<label class="is-pulled-right" for="switchAll">Display all versions</label>
<template v-if="worker.repository_id">
<input
id="switchAll"
type="checkbox"
class="switch is-rtl is-rounded is-info"
v-model="advancedMode"
/>
<label class="is-pulled-right" for="switchAll">Display all versions</label>
</template>
<h2 class="title is-4">Versions</h2>
<span class="is-clearfix"></span>
<div v-if="versionsError" class="notification is-warning">{{ versionsError }}</div>
......@@ -23,11 +25,17 @@
<thead>
<tr>
<th>Id</th>
<th>Hash</th>
<th>Message</th>
<th>Author</th>
<th>Created</th>
<th>References</th>
<template v-if="worker.repository_id">
<th>Hash</th>
<th>Message</th>
<th>Author</th>
<th>Created</th>
<th>References</th>
</template>
<template v-else>
<th>Created</th>
<th>Version</th>
</template>
<th>State</th>
<th v-if="processId || selectable">Actions</th>
</tr>
......@@ -47,7 +55,7 @@
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import { PropType, defineComponent } from 'vue'
import { mapActions } from 'pinia'
import { errorParser } from '@/helpers'
import Paginator from '@/components/Paginator.vue'
......@@ -55,7 +63,7 @@ import Row from './Row.vue'
import { useNotificationStore, useWorkerStore } from '@/stores'
import { WorkerVersionListParameters } from '@/api'
import { PageNumberPagination } from '@/types'
import { WorkerVersion } from '@/types/worker'
import { WorkerVersion, Worker } from '@/types/worker'
export default defineComponent({
components: {
......@@ -70,8 +78,8 @@ export default defineComponent({
default: false
},
// Lists versions related to a specific worker
workerId: {
type: String,
worker: {
type: Object as PropType<Worker>,
required: true
},
/*
......@@ -104,13 +112,15 @@ export default defineComponent({
this.versionsPage = null
this.versionsError = null
this.loading = true
let mode = 'complete' as WorkerVersionListParameters['mode']
if (this.worker.repository_id) mode = this.advancedMode ? 'complete' : 'simple'
const payload: WorkerVersionListParameters = {
page: this.page,
page_size: this.pageSize,
mode: this.advancedMode ? 'complete' : 'simple'
mode
}
try {
this.versionsPage = await this.listVersions(this.workerId, payload)
this.versionsPage = await this.listVersions(this.worker.id, payload)
} catch (err) {
this.versionsError = errorParser(err)
} finally {
......@@ -120,9 +130,10 @@ export default defineComponent({
},
watch: {
page: 'fetchVersions',
workerId: {
worker: {
immediate: true,
handler () {
handler (newValue, oldValue) {
if (oldValue?.id === newValue.id) return
this.page = 1
this.fetchVersions()
}
......
<template>
<tr>
<td class="shrink">
<td :class="{ 'shrink': version.revision }">
<ItemId :item-id="version.id" />
</td>
<td class="shrink">
<a v-if="version.revision" :href="version.revision.commit_url" target="_blank">
<samp>{{ version.revision.hash.substring(0,8) }}</samp>
</a>
<span v-else></span>
</td>
<td>{{ version?.revision?.message || '' }}</td>
<td>{{ version?.revision?.author || '' }}</td>
<td>{{ created(version.created) }}</td>
<td class="shrink">
<span
v-for="ref in version?.revision?.refs || []"
:key="ref.name"
class="tag mr-3"
:class="refClass(ref.type)"
>
{{ ref.name }}
</span>
</td>
<template v-if="version.revision">
<td class="shrink">
<a v-if="version.revision" :href="version.revision.commit_url" target="_blank">
<samp>{{ version.revision.hash.substring(0,8) }}</samp>
</a>
<span v-else></span>
</td>
<td>{{ version.revision.message || '' }}</td>
<td>{{ version.revision.author || '' }}</td>
<td>{{ created(version.created) }}</td>
<td class="shrink">
<span
v-for="ref in version.revision.refs || []"
:key="ref.name"
class="tag mr-3"
:class="refClass(ref.type)"
>
{{ ref.name }}
</span>
</td>
</template>
<template v-else>
<td>{{ created(version.created) }}</td>
<td>{{ version.version }}</td>
</template>
<td class="shrink">
<span class="tag" :class="stateClass(version.state)">
{{ capitalize(version.state) }}
......
......@@ -150,7 +150,9 @@ export const useWorkerStore = defineStore('worker', {
}
this.workers = {
...this.workers,
...Object.fromEntries(resp.results.map(v => [v.worker.id, v.worker]))
...Object.fromEntries(resp.results.map(v =>
[v.worker.id, { ...(this.workers[v.worker.id] ?? {}), ...v.worker }]
))
}
return resp
},
......
......@@ -19,6 +19,10 @@ export interface Worker extends WorkerLight {
repository_id: UUID
}
export function isWorker(worker: WorkerLight): worker is Worker {
return ('repository_id' in worker && (worker.repository_id === null || typeof worker.repository_id === 'string'))
}
export type UserConfiguration = Record<string, UserConfigurationField>
interface WorkerVersionConfiguration {
......
......@@ -55,9 +55,9 @@
<tr
v-for="worker in results"
:key="worker.id"
v-on:click="selectedWorker = worker.id"
v-on:click="selectedWorker = worker"
class="is-clickable"
:class="{ 'is-selected': selectedWorker === worker.id }"
:class="{ 'is-selected': selectedWorker?.id === worker.id }"
>
<td>
<WorkerTag :worker="worker" />
......@@ -74,7 +74,7 @@
</div>
<template v-else>
<VersionList
:worker-id="selectedWorker"
:worker="selectedWorker"
:process-id="processId"
:selectable="selectable"
v-on:selected-version="$emit('selected-version', $event)"
......@@ -84,7 +84,7 @@
<h2 class="title is-4">Members</h2>
<ListMembers
content-type="worker"
:content-id="selectedWorker"
:content-id="selectedWorker.id"
v-model:page-number="membersPageNumber"
/>
</template>
......@@ -151,7 +151,7 @@ export default {
loading: false,
workersPage: null,
membersPageNumber: 1,
// ID of the selected worker
// Selected worker
selectedWorker: null,
page: 1,
nameFilter: '',
......
......@@ -9,7 +9,7 @@
<div class="title">{{ worker.name }}</div>
<hr />
<VersionList :worker-id="workerId" />
<VersionList :worker="worker" />
<hr />
<h2 class="title is-4">Members</h2>
......@@ -30,6 +30,7 @@ import { errorParser } from '@/helpers'
import VersionList from '@/components/Process/Workers/Versions/List.vue'
import ListMembers from '@/components/Memberships/ListMembers.vue'
import { useNotificationStore, useWorkerStore } from '@/stores'
import { isWorker } from '@/types/worker'
export default defineComponent({
props: {
......@@ -52,7 +53,9 @@ export default defineComponent({
computed: {
...mapState(useWorkerStore, ['workers']),
worker () {
return this.workers[this.workerId]
const worker = this.workers[this.workerId]
if (!worker || !isWorker(worker)) return
return worker
}
},
methods: {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment