Skip to content

Commit 1d5c584

Browse files
committed
Merge branch 'master' into feature-task-3634-tdei-theme
2 parents ded4388 + d41aec5 commit 1d5c584

7 files changed

Lines changed: 55 additions & 27 deletions

File tree

components/ProjectGroupPicker.vue

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<div class="position-relative project-group-picker" ref="pickerRef" @focusout="onFocusOut">
33
<input
44
v-model="searchText"
5+
:id="props.id"
56
type="text"
67
class="form-select"
78
:disabled="props.disabled"
@@ -22,7 +23,7 @@
2223
Showing first {{ projectGroups.length }} of {{ totalCount }} project groups
2324
<span v-if="hasMore && !loading" class="pg-scroll-hint">&#183; Scroll to continue loading</span>
2425
</template>
25-
<template v-else-if="!hasMore">Showing all {{ projectGroups.length }} project group{{ projectGroups.length !== 1 ? 's' : '' }}</template>
26+
<template v-else-if="!showScrollHint">Showing all {{ projectGroups.length }} project group{{ projectGroups.length !== 1 ? 's' : '' }}</template>
2627
<template v-else>
2728
Showing first {{ projectGroups.length }} results
2829
<span v-if="!loading" class="pg-scroll-hint">&#183; Scroll to continue loading</span>
@@ -32,7 +33,7 @@
3233
</div>
3334
<div
3435
class="pg-list-wrap"
35-
:class="{ 'pg-has-more': hasMore && !loading }"
36+
:class="{ 'pg-has-more': showScrollHint && !loading }"
3637
ref="listRef"
3738
@scroll="onScroll"
3839
>
@@ -88,8 +89,9 @@ import { ref, watch, onMounted, onUnmounted, nextTick } from 'vue'
8889
import { tdeiUserClient } from '~/services/index'
8990
import type { TdeiProjectGroupItem } from '~/types/tdei'
9091
91-
const props = withDefaults(defineProps<{ disabled?: boolean; options?: TdeiProjectGroupItem[] }>(), {
92+
const props = withDefaults(defineProps<{ id?: string; disabled?: boolean; options?: TdeiProjectGroupItem[]; rememberSelection?: boolean }>(), {
9293
disabled: false,
94+
rememberSelection: false,
9395
})
9496
9597
const model = defineModel({ required: true })
@@ -104,6 +106,7 @@ const listRef = ref<HTMLElement | null>(null)
104106
const activeIndex = ref(-1)
105107
106108
const projectGroups = computed(() => props.options ?? fetchedGroups.value)
109+
const showScrollHint = computed(() => !props.options && hasMore.value)
107110
108111
let pageNo = 1
109112
const hasMore = ref(true)
@@ -143,7 +146,9 @@ const loadGroups = async (reset = false) => {
143146
if (total !== undefined) totalCount.value = total
144147
fetchedGroups.value.push(...newGroups)
145148
const selected = newGroups.find(g => g.tdei_project_group_id === model.value)
146-
if (selected) persistCachedName(selected.tdei_project_group_id, selected.name)
149+
if (selected && props.rememberSelection) {
150+
persistCachedName(selected.tdei_project_group_id, selected.name)
151+
}
147152
148153
if (newGroups.length < pageSize) {
149154
hasMore.value = false
@@ -204,7 +209,9 @@ const selectGroup = (id: string) => {
204209
if (pg) {
205210
searchText.value = pg.name
206211
selectedGroupName.value = pg.name
207-
persistCachedName(pg.tdei_project_group_id, pg.name)
212+
if (props.rememberSelection) {
213+
persistCachedName(pg.tdei_project_group_id, pg.name)
214+
}
208215
}
209216
}
210217
@@ -295,7 +302,7 @@ watch(
295302
(groups) => {
296303
if (groups.length > 0) {
297304
const pgId = model.value as string | undefined
298-
if (!pgId || !groups.some(pg => pg.tdei_project_group_id === pgId)) {
305+
if (!pgId || (props.options && !groups.some(pg => pg.tdei_project_group_id === pgId))) {
299306
model.value = groups[0]?.tdei_project_group_id
300307
}
301308
const selected = groups.find(pg => pg.tdei_project_group_id === model.value)
@@ -310,7 +317,7 @@ watch(
310317
311318
onMounted(async () => {
312319
// Show cached name immediately before the API call completes
313-
if (model.value && loadCachedName(model.value as string)) {
320+
if (props.rememberSelection && model.value && loadCachedName(model.value as string)) {
314321
applyCachedName()
315322
}
316323
@@ -322,7 +329,7 @@ onMounted(async () => {
322329
if (selected) {
323330
searchText.value = selected.name
324331
selectedGroupName.value = selected.name
325-
} else if (model.value && loadCachedName(model.value as string)) {
332+
} else if (props.rememberSelection && model.value && loadCachedName(model.value as string)) {
326333
// Group is beyond page 1 — use the cached name for display
327334
applyCachedName()
328335
} else if (model.value) {

components/ServicePicker.vue

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ async function refreshServices() {
3737
services.value = (await tdeiUserClient.getMyServices(props.projectGroupId, props.serviceType))
3838
.sort((a, b) => a.name.localeCompare(b.name));
3939
40-
if (!model.value && services.length > 0) {
41-
model.value = services[0].id
40+
const selectedServiceStillExists = services.value.some(s => s.id === model.value)
41+
42+
if (!selectedServiceStillExists) {
43+
model.value = services.value[0]?.id ?? null
4244
}
4345
}
4446
4547
</script>
46-

pages/dashboard.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
<div class="d-flex">
44
<h2 class="visually-hidden">My Workspaces</h2>
55

6-
<label class="page-header-title" for="ws_project_group_picker">Project Group</label>
7-
<project-group-picker v-model="currentProjectGroup" id="ws_project_group_picker" />
6+
<label for="ws_project_group_picker">Project Group</label>
7+
<project-group-picker
8+
id="ws_project_group_picker"
9+
v-model="currentProjectGroup"
10+
remember-selection
11+
/>
812

913
<nuxt-link class="btn tdei-primary-button flex-shrink-0" to="/workspace/create">
1014
<app-icon variant="add" size="24" />

pages/workspace/[id]/export/tdei.vue

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,16 @@
6262
Dataset Name
6363
<input v-model.trim="datasetName" class="form-control" />
6464
</label>
65-
<label class="d-block mt-3">
66-
Project Group
65+
<div class="mt-3">
66+
<label class="d-block" for="export_tdei_project_group">
67+
Project Group
68+
</label>
6769
<project-group-picker
70+
id="export_tdei_project_group"
6871
v-model="workspace.tdeiProjectGroupId"
6972
:options="eligibleProjectGroups"
7073
/>
71-
</label>
74+
</div>
7275
<label class="d-block mt-3">
7376
Service
7477
<service-picker
@@ -123,11 +126,13 @@ const exporter = new TdeiExporter(tdeiClient, osmClient, context);
123126
const route = useRoute();
124127
const workspaceId = Number(route.params.id);
125128
126-
const [workspace, { items: myProjectGroups }] = await Promise.all([
129+
const [workspaceData, { items: myProjectGroups }] = await Promise.all([
127130
workspacesClient.getWorkspace(workspaceId),
128131
tdeiUserClient.getMyProjectGroups(1, '', 10000),
129132
]);
130133
134+
const workspace = reactive(workspaceData);
135+
131136
const dataGeneratorRole = `${workspace.type}_data_generator`;
132137
const eligibleProjectGroups = myProjectGroups.filter(pg =>
133138
pg.roles.includes('poc') || pg.roles.includes(dataGeneratorRole),

pages/workspace/create/blank.vue

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111
<input v-model.trim="workspaceTitle" class="form-control" />
1212
</label>
1313

14-
<label class="d-block mb-3">
15-
Project Group
16-
<project-group-picker v-model="projectGroupId" />
17-
</label>
14+
<div class="mb-3">
15+
<label class="d-block" for="create_blank_project_group">
16+
Project Group
17+
</label>
18+
<project-group-picker
19+
id="create_blank_project_group"
20+
v-model="projectGroupId"
21+
/>
22+
</div>
1823

1924
<div>Dataset Type</div>
2025
<dataset-type-radio v-model="datasetType" class="mb-3" />

pages/workspace/create/file.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@
1616
>
1717
</label>
1818

19-
<label class="d-block mb-3">
20-
Project Group
19+
<div class="mb-3">
20+
<label class="d-block" for="create_file_project_group">
21+
Project Group
22+
</label>
2123
<project-group-picker
24+
id="create_file_project_group"
2225
v-model="projectGroupId"
2326
:disabled="context.active"
2427
required
2528
/>
26-
</label>
29+
</div>
2730

2831
<div>Dataset Type</div>
2932
<dataset-type-radio

pages/workspace/create/tdei.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@
2020
>
2121
</label>
2222

23-
<label class="d-block mb-3">
24-
Project Group
23+
<div class="mb-3">
24+
<label class="d-block" for="create_tdei_project_group">
25+
Project Group
26+
</label>
2527
<project-group-picker
28+
id="create_tdei_project_group"
2629
v-model="projectGroupId"
2730
:disabled="context.active"
2831
required
2932
/>
30-
</label>
33+
</div>
3134

3235
<label v-if="!$route.query.tdeiRecordId" class="d-block mb-3">
3336
Dataset

0 commit comments

Comments
 (0)