Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge latest 24.2 into dev. #19290

Merged
merged 29 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f0c8376
remove double label in form default
ElectronicBlueberry Dec 4, 2024
cf9b302
remove workflows and inputs from editor config
ElectronicBlueberry Dec 4, 2024
0d7561d
add panel for input nodes
ElectronicBlueberry Dec 4, 2024
73096b4
Only allow moving activity bar icons when editing the bar.
jmchilton Dec 3, 2024
66565db
Fix connection from best practice panel to attributes.
jmchilton Dec 2, 2024
fa384b7
add missing required prop to test
ElectronicBlueberry Dec 5, 2024
d0da7e7
fix parameters inputs function
ElectronicBlueberry Dec 5, 2024
f1e3ba4
fix input id
ElectronicBlueberry Dec 5, 2024
f80c777
ListPairs Usability - don't auto-pair on empty filters.
jmchilton Dec 4, 2024
26fd567
ListPairs Usability - use new Galaxy green for component.
jmchilton Dec 4, 2024
3e6b12b
ListPairs Usability - don't attempt failed auto-pair initially.
jmchilton Dec 4, 2024
0cc2bab
ListPairs Usability - disable the clear filter button if nothing to c…
jmchilton Dec 4, 2024
ea0308c
Merge pull request #19258 from jmchilton/stray_moving_24_2
ahmedhamidawan Dec 5, 2024
e017a72
Fix CollectionCreatorModal being reopened on selection after creating…
davelopez Dec 6, 2024
8c73b88
Improve language in collection builders...
jmchilton Dec 6, 2024
42cf859
Fix list collection creator usage instructions.
jmchilton Dec 6, 2024
830c764
Update client/src/components/Collections/ListCollectionCreator.vue
jmchilton Dec 4, 2024
83c19e0
Trying to integrate PR comments.
jmchilton Dec 6, 2024
c554490
Merge pull request #19276 from davelopez/24.2_fix_duplicated_build_co…
ahmedhamidawan Dec 6, 2024
73ce5b8
Merge pull request #19244 from jmchilton/collection_builder_language
ahmedhamidawan Dec 6, 2024
d1c0154
Metrics usability - link dots to jobs.
jmchilton Dec 6, 2024
58c22dc
Merge pull request #19230 from jmchilton/linting_connection
bgruening Dec 8, 2024
cb62d4c
Merge pull request #19252 from ElectronicBlueberry/workflow-inputs-ac…
jmchilton Dec 8, 2024
3b47ca5
Update client/src/components/Collections/PairedListCollectionCreator.vue
jmchilton Dec 8, 2024
f5f2efe
Merge pull request #19279 from jmchilton/metrics_usability
jmchilton Dec 8, 2024
d6b5d5c
Fix multiple layers with different axis labels in workflow metrics.
jmchilton Dec 6, 2024
ef968a7
Merge pull request #19283 from jmchilton/aggregate_metrics
mvdbeek Dec 9, 2024
0a11a41
Merge pull request #19248 from jmchilton/list_pairs_usability
jmchilton Dec 9, 2024
bcd3643
Merge remote-tracking branch 'origin/release_24.2' into merge_24_2_dev
jmchilton Dec 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"elkjs": "^0.8.2",
"file-saver": "^2.0.5",
"flush-promises": "^1.0.2",
"font-awesome-6": "npm:@fortawesome/free-solid-svg-icons@6",
"glob": "^10.3.10",
"handsontable": "^4.0.0",
"hsluv": "^1.0.1",
Expand Down
2 changes: 2 additions & 0 deletions client/src/api/schema/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18464,6 +18464,8 @@ export interface components {
* }
*/
WorkflowJobMetric: {
/** Job Id */
job_id: string;
/**
* Name
* @description The name of the metric variable.
Expand Down
17 changes: 16 additions & 1 deletion client/src/components/ActivityBar/ActivityBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ function setActiveSideBar(key: string) {
activityStore.toggledSideBar = key;
}

const canDrag = computed(() => {
return isActiveSideBar("settings");
});

defineExpose({
isActiveSideBar,
setActiveSideBar,
Expand All @@ -209,14 +213,18 @@ defineExpose({
<draggable
:list="activities"
:class="{ 'activity-popper-disabled': isDragging }"
:disabled="!canDrag"
:force-fallback="true"
chosen-class="activity-chosen-class"
:delay="DRAG_DELAY"
drag-class="activity-drag-class"
ghost-class="activity-chosen-class"
@start="isDragging = true"
@end="isDragging = false">
<div v-for="(activity, activityIndex) in activities" :key="activityIndex">
<div
v-for="(activity, activityIndex) in activities"
:key="activityIndex"
:class="{ 'can-drag': canDrag }">
<div v-if="activity.visible && (activity.anonymous || !isAnonymous)">
<UploadItem
v-if="activity.id === 'upload'"
Expand Down Expand Up @@ -380,4 +388,11 @@ defineExpose({
overflow-y: auto;
overflow-x: hidden;
}

.can-drag {
border-radius: 12px;
border: 1px;
outline: dashed darkgray;
outline-offset: -3px;
}
</style>
21 changes: 12 additions & 9 deletions client/src/components/Collections/CollectionCreatorModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -113,22 +113,25 @@ watch(
}
);

const extensionInTitle = computed<string>(() => {
const extensions = props.extensions;
if (!extensions || extensions.length == 0 || extensions.indexOf("data") >= 0) {
return "";
} else {
return orList(extensions);
}
});

const modalTitle = computed(() => {
if (props.collectionType === "list") {
return localize(
`Create a collection from a list of ${fromSelection.value ? "selected" : ""} ${
props.extensions?.length ? orList(props.extensions) : ""
} datasets`
);
return localize(`Create a list of ${fromSelection.value ? "selected" : ""} ${extensionInTitle.value} datasets`);
} else if (props.collectionType === "list:paired") {
return localize(
`Create a collection of ${fromSelection.value ? "selected" : ""} ${
props.extensions?.length ? orList(props.extensions) : ""
} dataset pairs`
`Create a list of ${fromSelection.value ? "selected" : ""} ${extensionInTitle.value} paired datasets`
);
} else if (props.collectionType === "paired") {
return localize(
`Create a ${props.extensions?.length ? orList(props.extensions) : ""} dataset pair collection ${
`Create a ${extensionInTitle.value} paired dataset collection ${
fromSelection.value ? "from selected items" : ""
}`
);
Expand Down
31 changes: 22 additions & 9 deletions client/src/components/Collections/ListCollectionCreator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -412,28 +412,38 @@ function renameElement(element: any, name: string) {
:history-id="props.historyId"
:hide-source-items="hideSourceItems"
:extensions="extensions"
collection-type="list"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@on-update-datatype-toggle="changeDatatypeFilter"
@onUpdateHideSourceItems="onUpdateHideSourceItems"
@clicked-create="clickedCreate">
<template v-slot:help-content>
<!-- TODO: Update help content for case where `fromSelection` is false -->
<p>
{{
localize(
[
"Collections of datasets are permanent, ordered lists of datasets that can be passed to tools ",
"This interface allows you to build a new Galaxy list of datasets. ",
"A list is a type of Galaxy dataset collection that is a permanent, ordered list of datasets that can be passed to tools ",
"and workflows in order to have analyses done on each member of the entire group. This interface allows ",
"you to create a collection and re-order the final collection.",
"you to create and re-order a list of datasets. The datasets in a Galaxy collection have an identifier that is preserved accross ",
"tool executions and serves as a form of sample tracking - setting the name in this form will pick the identifier for that element ",
"of the list but will not change the dataset's actual name in Galaxy.",
].join("")
)
}}
</p>

<ul>
<li v-if="!fromSelection">
Move datsets from the "Unselected" column to the "Selected" column below to compose the list
in the intended order and with the intended datasets.
</li>
<li v-if="!fromSelection">
The filter textbox can be used to rapidly find the datasets of interest by name.
</li>
<li>
{{ localize("Rename elements in the list by clicking on") }}
{{ localize("Change the identifier of elements in the list by clicking on") }}
<i data-target=".collection-element .name">
{{ localize("the existing name") }}
</i>
Expand All @@ -442,13 +452,16 @@ function renameElement(element: any, name: string) {

<li>
{{ localize("Discard elements from the final created list by clicking on the ") }}
<i data-target=".collection-element .discard">
{{ localize("Discard") }}
<i v-if="fromSelection" data-target=".collection-element .discard">
{{ localize("Remove") }}
</i>
<i v-else data-target=".collection-element .discard">
{{ localize("discard") }}
</i>
{{ localize("button.") }}
</li>

<li>
<li v-if="fromSelection">
{{
localize(
"Reorder the list by clicking and dragging elements. Select multiple elements by clicking on"
Expand All @@ -468,15 +481,15 @@ function renameElement(element: any, name: string) {
{{ localize("link.") }}
</li>

<li>
<li v-if="fromSelection">
{{ localize("Click ") }}
<i data-target=".reset">
<FontAwesomeIcon :icon="faUndo" />
</i>
{{ localize("to begin again as if you had just opened the interface.") }}
</li>

<li>
<li v-if="fromSelection">
{{ localize("Click ") }}
<i data-target=".sort-items">
<FontAwesomeIcon :icon="faSortAlphaDown" />
Expand Down
3 changes: 2 additions & 1 deletion client/src/components/Collections/PairCollectionCreator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
:suggested-name="initialSuggestedName"
:extensions="props.extensions"
:extensions-toggle="removeExtensions"
collection-type="paired"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@onUpdateHideSourceItems="onUpdateHideSourceItems"
Expand Down Expand Up @@ -423,7 +424,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
<i data-target=".collection-name"> {{ localize("name") }}</i>
{{ localize("and click ") }}
<i data-target=".create-collection">
{{ localize("Create list") }}
{{ localize("Create dataset pair") }}
</i>
{{ localize(".") }}
</p>
Expand Down
37 changes: 29 additions & 8 deletions client/src/components/Collections/PairedListCollectionCreator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,14 @@ const hasFilter = computed(() => forwardFilter.value || reverseFilter.value);
const strategy = ref(autoPairLCS);
const duplicatePairNames = ref<string[]>([]);

const canClearFilters = computed(() => {
return forwardFilter.value || reverseFilter.value;
});

const canAutoPair = computed(() => {
return forwardFilter.value && reverseFilter.value && pairableElements.value.length > 0;
});

const forwardElements = computed<HDASummary[]>(() => {
return filterElements(workingElements.value, forwardFilter.value);
});
Expand All @@ -117,7 +125,11 @@ const autoPairButton = computed(() => {
let variant;
let icon;
let text;
if (!firstAutoPairDone.value && pairableElements.value.length > 0) {
if (!canAutoPair.value) {
variant = "secondary";
icon = faLink;
text = localize("Specify simple filters to divide datasets into forward and reverse reads for pairing.");
} else if (!firstAutoPairDone.value && pairableElements.value.length > 0) {
variant = "primary";
icon = faExclamationCircle;
text = localize("Click to auto-pair datasets based on the current filters");
Expand Down Expand Up @@ -235,8 +247,11 @@ function initialFiltersSet() {
illumina++;
}
});

if (illumina > dot12s && illumina > Rs) {
// if we cannot filter don't set an initial filter and hide all the data
if (illumina == 0 && dot12s == 0 && Rs == 0) {
forwardFilter.value = "";
reverseFilter.value = "";
} else if (illumina > dot12s && illumina > Rs) {
changeFilters("illumina");
} else if (dot12s > illumina && dot12s > Rs) {
changeFilters("dot12s");
Expand Down Expand Up @@ -864,6 +879,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
render-extensions-toggle
:extensions-toggle="removeExtensions"
:extensions="extensions"
collection-type="list:paired"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@onUpdateHideSourceItems="hideSourceItems = $event"
Expand All @@ -875,9 +891,10 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
{{
localize(
[
"Collections of paired datasets are ordered lists of dataset pairs (often forward and reverse reads). ",
"These collections can be passed to tools and workflows in order to have analyses done on each member of ",
"the entire group. This interface allows you to create a collection, choose which datasets are paired, ",
"This interface allows you to build a new Galaxy list of pairs. List of pairs are an ordered list of ",
"individual dataset paired together in their own paired collection (often forward and reverse reads). ",
"These lists can be passed to tools and workflows in order to have analyses done on each member of ",
"the entire group. This interface allows you to create such a list of paired datasets, choose which datasets are paired, ",
"and re-order the final collection.",
].join("")
)
Expand Down Expand Up @@ -994,7 +1011,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
</i>
{{ localize("and click ") }}
<i data-target=".create-collection">
{{ localize("Create list") }}
{{ localize("Create list or pairs") }}
</i>
{{ localize(". (Note: you do not have to pair all unpaired datasets to finish.)") }}
</p>
Expand Down Expand Up @@ -1133,6 +1150,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
<BButtonGroup vertical>
<BButton
class="clear-filters-link"
:disabled="!canClearFilters"
size="sm"
:variant="hasFilter ? 'danger' : 'secondary'"
@click="clickClearFilters">
Expand All @@ -1141,6 +1159,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
</BButton>
<BButton
class="autopair-link"
:disabled="!canAutoPair"
size="sm"
:title="autoPairButton.text"
:variant="autoPairButton.variant"
Expand Down Expand Up @@ -1309,6 +1328,8 @@ $fa-font-path: "../../../node_modules/@fortawesome/fontawesome-free/webfonts/";
@import "~@fortawesome/fontawesome-free/scss/solid";
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
@import "~@fortawesome/fontawesome-free/scss/brands";
@import "~bootstrap/scss/_functions.scss";
@import "theme/blue.scss";
.paired-column {
text-align: center;
// mess with these two to make center more/scss priority
Expand Down Expand Up @@ -1355,7 +1376,7 @@ li.dataset.paired {
white-space: nowrap;
overflow: hidden;
border: 2px solid grey;
background: #aff1af;
background: $state-success-bg;
text-align: center;
span {
display: inline-block;
Expand Down
18 changes: 16 additions & 2 deletions client/src/components/Collections/common/CollectionCreator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
extensions?: string[];
extensionsToggle?: boolean;
noItems?: boolean;
collectionType?: string;

Check warning on line 42 in client/src/components/Collections/common/CollectionCreator.vue

View workflow job for this annotation

GitHub Actions / client-unit-test (18)

Prop 'collectionType' requires default value to be set
}

const props = withDefaults(defineProps<Props>(), {
Expand Down Expand Up @@ -102,6 +103,19 @@
}
});

const shortWhatIsBeingCreated = computed<string>(() => {
// plain language for what is being created
if (props.collectionType === "list") {
return "list";
} else if (props.collectionType === "list:paired") {
return "list of pairs";
} else if (props.collectionType == "paired") {
return "dataset pair";
} else {
return "collection";
}
});

function addUploadedFiles(value: HDASummary[]) {
// TODO: We really need to wait for each of these items to get `state = 'ok'`
// before we can add them to the collection.
Expand Down Expand Up @@ -222,7 +236,7 @@
id="collection-name"
v-model="collectionName"
class="collection-name"
:placeholder="localize('Enter a name for your new collection')"
:placeholder="localize('Enter a name for your new ' + shortWhatIsBeingCreated)"
size="sm"
required
:state="!collectionName ? false : null" />
Expand All @@ -240,7 +254,7 @@
variant="primary"
:disabled="!validInput"
@click="emit('clicked-create', collectionName)">
{{ localize("Create collection") }}
{{ localize("Create " + shortWhatIsBeingCreated) }}
</BButton>
</div>
</div>
Expand Down
12 changes: 11 additions & 1 deletion client/src/components/Form/Elements/FormData/FormData.vue
Original file line number Diff line number Diff line change
Expand Up @@ -607,10 +607,20 @@ watch(
const formatsVisible = ref(false);
const formatsButtonId = useUid("form-data-formats-");

function collectionTypeToText(collectionType: string): string {
if (collectionType == "list:paired") {
return "list of pairs";
} else {
return collectionType;
}
}

const warningListAmount = 4;
const noOptionsWarningMessage = computed(() => {
const itemType = props.type === "data" ? "datasets" : "dataset collections";
const collectionTypeLabel = props.collectionTypes?.length ? `${orList(props.collectionTypes)} ` : "";
const collectionTypeLabel = props.collectionTypes?.length
? `${orList(props.collectionTypes.map(collectionTypeToText))} `
: "";
if (!props.extensions || props.extensions.length === 0 || props.extensions.includes("data")) {
return `No ${collectionTypeLabel}${itemType} available`;
} else if (props.extensions.length <= warningListAmount) {
Expand Down
10 changes: 8 additions & 2 deletions client/src/components/Help/HelpText.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import HelpPopover from "./HelpPopover.vue";
interface Props {
uri: string;
text: string;
forTitle?: boolean;
}

defineProps<Props>();
withDefaults(defineProps<Props>(), {
forTitle: false,
});
</script>

<template>
Expand All @@ -18,7 +21,7 @@ defineProps<Props>();
}
"
:term="uri" />
<span ref="helpTarget" class="help-text">{{ text }}</span>
<span ref="helpTarget" class="help-text" :class="{ 'title-help-text': forTitle }">{{ text }}</span>
</span>
</template>

Expand All @@ -28,4 +31,7 @@ defineProps<Props>();
text-decoration-line: underline;
text-decoration-style: dashed;
}
.title-help-text {
text-decoration-thickness: 1px;
}
</style>
Loading
Loading