From e2d04a72e95b0c58e99a23bba388016a014d3504 Mon Sep 17 00:00:00 2001 From: ml bonhomme <bonhomme@teklia.com> Date: Wed, 25 Oct 2023 14:30:34 +0000 Subject: [PATCH] Change worker version display when worker is not linked to a repository --- .../Process/Workers/Versions/List.vue | 51 +++++++++++-------- .../Process/Workers/Versions/Row.vue | 46 +++++++++-------- src/stores/workers.ts | 4 +- src/types/worker.ts | 4 ++ src/views/Process/Workers/List.vue | 10 ++-- src/views/Process/Workers/Manage.vue | 7 ++- 6 files changed, 74 insertions(+), 48 deletions(-) diff --git a/src/components/Process/Workers/Versions/List.vue b/src/components/Process/Workers/Versions/List.vue index b5822e8c1..7c4f0bc5a 100644 --- a/src/components/Process/Workers/Versions/List.vue +++ b/src/components/Process/Workers/Versions/List.vue @@ -1,11 +1,13 @@ <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() } diff --git a/src/components/Process/Workers/Versions/Row.vue b/src/components/Process/Workers/Versions/Row.vue index f92cd5047..47b432a26 100644 --- a/src/components/Process/Workers/Versions/Row.vue +++ b/src/components/Process/Workers/Versions/Row.vue @@ -1,27 +1,33 @@ <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) }} diff --git a/src/stores/workers.ts b/src/stores/workers.ts index a55ed9352..2f55e335d 100644 --- a/src/stores/workers.ts +++ b/src/stores/workers.ts @@ -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 }, diff --git a/src/types/worker.ts b/src/types/worker.ts index 7dfb917ff..1ba9fae59 100644 --- a/src/types/worker.ts +++ b/src/types/worker.ts @@ -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 { diff --git a/src/views/Process/Workers/List.vue b/src/views/Process/Workers/List.vue index 190f782f1..f97872082 100644 --- a/src/views/Process/Workers/List.vue +++ b/src/views/Process/Workers/List.vue @@ -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: '', diff --git a/src/views/Process/Workers/Manage.vue b/src/views/Process/Workers/Manage.vue index 7e224fc9a..d1e783783 100644 --- a/src/views/Process/Workers/Manage.vue +++ b/src/views/Process/Workers/Manage.vue @@ -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: { -- GitLab