|
8 | 8 |
|
9 | 9 | <GTable class="table" :loading :items :columns sortColumn="document"> |
10 | 10 | <template #header> |
| 11 | + <legend class="entities-legend"> |
| 12 | + <p>Legend:</p> |
| 13 | + <div> |
| 14 | + <span v-for="(job, i) in Object.keys(entities?.jobs ?? {})" :key="i"> |
| 15 | + <strong>{{ i + 1 }}:</strong> {{ job }} |
| 16 | + </span> |
| 17 | + </div> |
| 18 | + </legend> |
11 | 19 | <form class="filter" @submit.prevent> |
12 | 20 | <fieldset> |
13 | 21 | <label for="entities-select">Entities</label> |
14 | 22 | <MultiSelect id="entities-select" v-model="selectedEntities" :options="entityOptions" |
15 | | - placeholder="Select entities" :maxSelectedLabels="3" /> |
| 23 | + placeholder="Select entities" :maxSelectedLabels="3" optionLabel="text" |
| 24 | + optionValue="value" /> |
16 | 25 | </fieldset> |
17 | 26 | <fieldset> |
18 | 27 | <label for="jobs-select">Jobs</label> |
@@ -56,7 +65,32 @@ const selectedEntities = ref<string[]>([]) |
56 | 65 | const selectedJobs = ref<string[]>([]) |
57 | 66 |
|
58 | 67 | // --- computed --- |
59 | | -const entityOptions = computed(() => ["total"].concat(Object.keys(entities.value?.stddev?.stddev ?? {}).toSorted())) |
| 68 | +const entityLegend = computed(() => { |
| 69 | + if (!entities.value) return {} |
| 70 | + const legend = {} |
| 71 | + for (const [jobName, jobData] of Object.entries(entities.value.jobs)) { |
| 72 | + legend[jobName] = Object.keys(jobData.summary) |
| 73 | + } |
| 74 | + return legend |
| 75 | +}) |
| 76 | +const entityOptions = computed(() => { |
| 77 | + const options = [{ text: "Total", value: "total" }] |
| 78 | + const labels = Object.keys(entities.value?.stddev?.stddev ?? {}).toSorted() |
| 79 | + for (const label of labels) { |
| 80 | + // in which indices of entittyLegend does this label occur? |
| 81 | + const occurence = [] |
| 82 | + for (const [i, job] of Object.keys(entities.value.jobs).entries()) { |
| 83 | + console.log("job", job, "i", i) |
| 84 | + if (entities.value.jobs[job].summary[label] !== undefined) { |
| 85 | + occurence.push(i + 1) // +1 because we want to start from 1, not 0 |
| 86 | + } |
| 87 | + } |
| 88 | + // ex.: LOC (1, 2, 3) |
| 89 | + const text = `${label} (${occurence})` |
| 90 | + options.push({ text: text, value: label }) |
| 91 | + } |
| 92 | + return options |
| 93 | +}) |
60 | 94 | const jobOptions = computed(() => Object.keys(entities.value?.jobs ?? {}).toSorted()) |
61 | 95 | const items = computed<DocumentEntitiesRow[]>(() => convertJobsEntities(entities.value)) |
62 | 96 | const columns = computed<Column<Record<string, number>>[]>(() => { |
@@ -202,4 +236,17 @@ function formatNumber(value: unknown): string | unknown { |
202 | 236 | align-items: center; |
203 | 237 | } |
204 | 238 | } |
| 239 | +
|
| 240 | +.entities-legend { |
| 241 | + display: flex; |
| 242 | + flex-direction: column; |
| 243 | + gap: 0.25rem; |
| 244 | + align-items: center; |
| 245 | +
|
| 246 | + div { |
| 247 | + display: flex; |
| 248 | + flex-wrap: wrap; |
| 249 | + gap: 0.5rem; |
| 250 | + } |
| 251 | +} |
205 | 252 | </style> |
0 commit comments