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

Remove workflow search from activity bar #17479

Closed
wants to merge 104 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
1db3ff0
create AdvancedFilteringHelpModal generic component
itisAliRH Aug 28, 2023
4ac0c2a
update AsyncButton: add loading title prop, support object icons and …
itisAliRH Aug 28, 2023
aaf5100
update AdvancedFilteringHelpModal hide
itisAliRH Aug 28, 2023
9063c0a
create generic AdvancedFiltering component, export HandlerReturn type…
itisAliRH Aug 28, 2023
0314f80
create ListHeader component
itisAliRH Aug 28, 2023
f49e567
update WorkflowRunButton to vue composition api
itisAliRH Aug 28, 2023
9e2eaf7
create WorkflowRename component
itisAliRH Aug 28, 2023
7d4ff73
create WorkflowCreate component
itisAliRH Aug 28, 2023
935fc93
create WorkflowListActions component
itisAliRH Aug 28, 2023
c52fc63
add full view to WorkflowRunButton
itisAliRH Aug 29, 2023
bff7ceb
create WorkflowQuickView component
itisAliRH Aug 29, 2023
e025e77
create WorkflowActions component
itisAliRH Aug 29, 2023
8739fce
create WorkflowInvocationsCount component
itisAliRH Aug 29, 2023
c2bfb5b
create WorkflowIndicators component
itisAliRH Aug 29, 2023
b884ff3
create WorkflowCard component
itisAliRH Aug 29, 2023
8997bda
create workflows.services
itisAliRH Aug 29, 2023
5a434c7
temporary use old workflow create component until the API is migrated
itisAliRH Aug 29, 2023
32ff759
add preferredListViewMode in userStore and add missing username filed…
itisAliRH Aug 29, 2023
1301052
update WorkflowList with new components and use workflow cards
itisAliRH Aug 29, 2023
0fbd99e
update workflows lists routes
itisAliRH Aug 29, 2023
73fce68
add workflow restore button in WorkflowActions
itisAliRH Aug 29, 2023
ef5a29f
update `TextSummary` to match with workflow card
itisAliRH Aug 31, 2023
f1abf03
touch up workflows list and card UI with @container
itisAliRH Aug 31, 2023
5fbb491
add WorkflowList header bottom highlight on scroll
itisAliRH Sep 1, 2023
acb350e
fx ListHeader typo and CSS
itisAliRH Sep 4, 2023
2e2f249
WorkflowActions: add menu mode and add dynamics actions
itisAliRH Sep 4, 2023
ad8e0e6
WorkflowCard: update CSS and breakpoints
itisAliRH Sep 4, 2023
7f5f208
WorkflowInvocationsCount: add compact view
itisAliRH Sep 4, 2023
aa9d394
WorkflowList: add owner query search, sync deleted button with filter…
itisAliRH Sep 4, 2023
823d68f
WorkflowQuickView: improve Ui
itisAliRH Sep 4, 2023
57069b1
fix double click on AsyncButton
itisAliRH Oct 27, 2023
b7441f3
drop `AdvancedFiltering` component
itisAliRH Oct 27, 2023
df1d8f8
update `WorkflowActions`
itisAliRH Oct 27, 2023
cbd7d62
add `WorkflowActionsExtend`: always show most used actions `share`, `…
itisAliRH Oct 27, 2023
c20d4fa
add `outline-badge` css class for badges
itisAliRH Oct 27, 2023
2e2c9db
update `WorkflowIndicators` style
itisAliRH Oct 27, 2023
7ceea57
update `WorkflowInvocationsCount` style
itisAliRH Oct 27, 2023
a6c6d0b
`WorkflowRename`: update confirm button text and disable on empty name
itisAliRH Oct 27, 2023
07ed9ff
`WorkflowInformation`: fix publishedByUser url query
itisAliRH Oct 27, 2023
d57b6a2
update `WorkflowCard`: use `WorkflowActionsExtend`, `Import` button f…
itisAliRH Oct 27, 2023
035d9f9
update `WorkflowList`: replace dropped `AdvanceFiltering` wit `Filter…
itisAliRH Oct 27, 2023
e7e90cc
fix `WorkflowCard` style
itisAliRH Oct 27, 2023
de2ae8f
update `WorkflowRunButton` unit test with typescript
itisAliRH Nov 9, 2023
b7a284c
fix `InvocationsList` unit test
itisAliRH Nov 9, 2023
d0b5e98
update `WorkflowList` unit test with typescript
itisAliRH Nov 9, 2023
7b91dcc
fix `userStore` unit test error on `username` field
itisAliRH Nov 9, 2023
189744d
use danger variant button on delete `Workflow`
itisAliRH Nov 9, 2023
ff48be0
create `test-utils` for `Workflow`
itisAliRH Nov 9, 2023
9ba7163
drop unused components: `WorkflowBookmark`, `WorkflowDropdown` and `W…
itisAliRH Nov 9, 2023
92dea42
add left border for shared or trs workflows in `WorkflowCard`
itisAliRH Nov 9, 2023
1a5a154
fix `WorkflowList` unit test
itisAliRH Nov 9, 2023
aa39297
fix import path error
itisAliRH Nov 9, 2023
b9537a2
create `LoginRequired` component
itisAliRH Nov 9, 2023
52f7ec8
use `LoginRequired` in `WorkflowList` for my and shared with me tabs
itisAliRH Nov 9, 2023
c495239
fix workflow bookmark showing in tools and update ids
itisAliRH Nov 15, 2023
9439c57
update workflow components ids
itisAliRH Nov 15, 2023
da5d2fb
fix some workflow tests
itisAliRH Nov 15, 2023
a633b45
update workflows navigation
itisAliRH Nov 15, 2023
e090956
update workflow selenium navigation selectors and methods
itisAliRH Nov 21, 2023
bd94515
update workflow actions and indicators classes
itisAliRH Nov 21, 2023
adb32b8
use MultiTag filter menu for WorkflowList
itisAliRH Nov 21, 2023
537e5a7
use TagsMultiselect in WorkflowCard and more improvements
itisAliRH Nov 21, 2023
3b1ef39
fix some workflow selenium tests
itisAliRH Nov 21, 2023
d11a486
fix Selenium and Integration Selenium tests
itisAliRH Nov 22, 2023
b624bf5
change workflow rename icon to be invisible instead of none display
itisAliRH Nov 23, 2023
1191c0d
fix workflow related selenium tests
itisAliRH Nov 23, 2023
4522e41
create `breakpoints.scss`
itisAliRH Nov 27, 2023
15338a0
update breakpoints and fix styles
itisAliRH Nov 27, 2023
8fe6c7c
add `Highlights` toggle for imported and shared workflows
itisAliRH Nov 27, 2023
e4b590b
fix `WorkflowQuickView` styles
itisAliRH Nov 27, 2023
9b1922f
update workflow import message to use Toast
itisAliRH Nov 30, 2023
ccc198f
disable `tags` edit due to performance issues in rendering
itisAliRH Dec 11, 2023
4a2307a
use name css container in `WorkflowCard`
itisAliRH Dec 11, 2023
87b350c
update `loadWorkflows` service: return header and data
itisAliRH Dec 11, 2023
6da2275
`WorkflowList`: add infinite load, update css
itisAliRH Dec 11, 2023
52b2ed9
WorkflowList: fix click on a tag for the second time to remove
itisAliRH Dec 12, 2023
bae8045
TextSummary: fix reactivity on `maxLength` changes
itisAliRH Dec 12, 2023
fb5fb82
WorkflowCard: use `AsyncButton` for `Import` button
itisAliRH Dec 12, 2023
7c99dd6
WorkflowCard: add `focus-within` css for the rename button
itisAliRH Dec 12, 2023
7b30d75
WorkflowListActions: delete unused codes in
itisAliRH Dec 12, 2023
ce3a7ba
rename `client/src/components/Workflow/test-utils.ts` to `testUtils`
itisAliRH Dec 12, 2023
b9dabe5
drop `AdvancedFilteringHelpModal`
itisAliRH Jan 8, 2024
d9d0021
`WorkflowActions`: rename `if` to `condition`
itisAliRH Jan 8, 2024
bc56087
fix `WorkflowCreate` issue
itisAliRH Jan 8, 2024
7b5383a
`WorkflowList`: add filtering menu help modal
itisAliRH Jan 8, 2024
84e6296
fix user store error for preferredListViewMode
itisAliRH Jan 8, 2024
cb998ab
improve `workflow-count-actions` icons styling
itisAliRH Jan 8, 2024
23bd813
`WorkflowList`: add overlay loading and pagination
itisAliRH Jan 8, 2024
8200142
use fixed-width for icons and update styles
itisAliRH Jan 18, 2024
e047622
relocate workflow indicators
itisAliRH Jan 18, 2024
fb191bb
drop highlight filter for workflow
itisAliRH Jan 18, 2024
8e677cf
change workflow invocation count style in card view
itisAliRH Jan 18, 2024
197fd41
fix stateStore setScale
itisAliRH Jan 18, 2024
a350d13
enable tags edit
itisAliRH Jan 18, 2024
afc8a11
Add prefix to workflow update request
guerler Feb 13, 2024
456f77f
update bounds when modal opens
ElectronicBlueberry Feb 13, 2024
9241b92
fix background color leaking
ElectronicBlueberry Feb 13, 2024
3cda031
fix input tag selector in `workflow_index_click_tag_display` with the…
itisAliRH Feb 13, 2024
cdfffe0
Add prefix to download url
guerler Feb 13, 2024
edc54bc
fix selenium issue with tooltips on `WorkflowActionsExtend`
itisAliRH Feb 14, 2024
6dfc5ad
remove unused icons in `WorkflowList`
itisAliRH Feb 14, 2024
79738fe
always show shared icon in `WorkflowIndicators`
itisAliRH Feb 14, 2024
5636771
drop 'workflow invocations count'
itisAliRH Feb 15, 2024
110bad5
remove workflow search in sidebar
itisAliRH Feb 15, 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
4 changes: 1 addition & 3 deletions client/src/components/ActivityBar/ActivityBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import NotificationsPanel from "@/components/Panels/NotificationsPanel.vue";
import SettingsPanel from "@/components/Panels/SettingsPanel.vue";
import ToolPanel from "@/components/Panels/ToolPanel.vue";
import WorkflowPanel from "@/components/Panels/WorkflowPanel.vue";

const { config, isConfigLoaded } = useConfig();

Expand Down Expand Up @@ -114,7 +113,7 @@

<template>
<div class="d-flex">
<div

Check warning on line 116 in client/src/components/ActivityBar/ActivityBar.vue

View workflow job for this annotation

GitHub Actions / client-unit-test (18)

Visible, non-interactive elements should not have an interactive handler
class="activity-bar d-flex flex-column no-highlight"
data-description="activity bar"
@dragover.prevent="onDragOver"
Expand Down Expand Up @@ -151,7 +150,7 @@
:to="activity.to"
@click="onToggleSidebar()" />
<ActivityItem
v-else-if="['tools', 'workflows', 'visualizations'].includes(activity.id)"
v-else-if="['tools', 'visualizations'].includes(activity.id)"
:id="`activity-${activity.id}`"
:key="activity.id"
:icon="activity.icon"
Expand Down Expand Up @@ -193,7 +192,6 @@
</div>
<FlexPanel v-if="isSideBarOpen" side="left" :collapsible="false">
<ToolPanel v-if="isActiveSideBar('tools')" />
<WorkflowPanel v-else-if="isActiveSideBar('workflows')" />
<VisualizationPanel v-else-if="isActiveSideBar('visualizations')" />
<NotificationsPanel v-else-if="isActiveSideBar('notifications')" />
<SettingsPanel v-else-if="isActiveSideBar('settings')" />
Expand Down
61 changes: 29 additions & 32 deletions client/src/components/Common/AsyncButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,36 @@ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { BButton } from "bootstrap-vue";
import { ref } from "vue";

const loading = ref(false);
interface Props {
icon: string | object;
title?: string;
disabled?: boolean;
loadingTitle?: string;
size?: "sm" | "md" | "lg";
action: () => Promise<void>;

variant?:
| "outline-primary"
| "primary"
| "secondary"
| "success"
| "danger"
| "warning"
| "info"
| "light"
| "dark"
| "link";
}

const props = defineProps({
icon: {
type: String,
required: true,
},
title: {
type: String,
required: false,
default: "",
},
action: {
type: Function,
required: true,
},
size: {
type: String,
required: false,
default: "md",
},
variant: {
type: String,
required: false,
default: "link",
},
disabled: {
type: Boolean,
required: false,
default: false,
},
const props = withDefaults(defineProps<Props>(), {
title: "",
size: "md",
variant: "link",
loadingTitle: "Loading...",
});

const loading = ref(false);

async function onClick() {
loading.value = true;
await props.action();
Expand All @@ -51,8 +48,8 @@ async function onClick() {
:variant="variant"
:disabled="loading || disabled"
@click="onClick">
<span v-if="loading" class="loading-icon fa fa-spinner fa-spin" title="loading"></span>
<FontAwesomeIcon v-else :icon="props.icon" @click="onClick" />
<span v-if="loading" class="loading-icon fa fa-spinner fa-spin" :title="loadingTitle" />
<FontAwesomeIcon v-else :icon="props.icon" fixed-width />
<slot></slot>
</BButton>
</template>
123 changes: 123 additions & 0 deletions client/src/components/Common/ListHeader.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<script setup lang="ts">
import { library } from "@fortawesome/fontawesome-svg-core";
import { faAngleDown, faAngleUp, faBars, faGripVertical } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { BButton } from "bootstrap-vue";
import { computed, ref } from "vue";

import { useUserStore } from "@/stores/userStore";

library.add(faAngleDown, faAngleUp, faBars, faGripVertical);

type ListView = "grid" | "list";
type SortBy = "create_time" | "update_time" | "name";

interface Props {
showViewToggle?: boolean;
}

withDefaults(defineProps<Props>(), {
showViewToggle: false,
});

const userStore = useUserStore();

const sortDesc = ref(true);
const sortBy = ref<SortBy>("update_time");
const listViewMode = computed<ListView>(() => (userStore.preferredListViewMode as ListView) || "grid");

function onSort(newSortBy: SortBy) {
if (sortBy.value === newSortBy) {
sortDesc.value = !sortDesc.value;
} else {
sortBy.value = newSortBy;
}
}

function onToggleView(newView: ListView) {
userStore.setPreferredListViewMode(newView);
}

defineExpose({
sortBy,
sortDesc,
listViewMode,
});
</script>

<template>
<div class="list-header">
<div class="list-header-filters">
Sort by:
<BButtonGroup>
<BButton
id="sortby-name"
v-b-tooltip.hover
size="sm"
:title="sortDesc ? 'Sort by name ascending' : 'Sort by name descending'"
:pressed="sortBy === 'name'"
variant="outline-primary"
@click="onSort('name')">
<FontAwesomeIcon v-show="sortBy === 'name'" :icon="sortDesc ? faAngleDown : faAngleUp" />
Name
</BButton>

<BButton
id="sortby-update-time"
v-b-tooltip.hover
size="sm"
:title="sortDesc ? 'Sort by update time ascending' : 'Sort by update time descending'"
:pressed="sortBy === 'update_time'"
variant="outline-primary"
@click="onSort('update_time')">
<FontAwesomeIcon v-show="sortBy === 'update_time'" :icon="sortDesc ? faAngleDown : faAngleUp" />
Update time
</BButton>
</BButtonGroup>

<slot name="extra-filter" />
</div>

<div v-if="showViewToggle">
Display:
<BButtonGroup>
<BButton
id="view-grid"
v-b-tooltip
title="Grid view"
size="sm"
:pressed="listViewMode === 'grid'"
variant="outline-primary"
@click="onToggleView('grid')">
<FontAwesomeIcon :icon="faGripVertical" />
</BButton>

<BButton
id="view-list"
v-b-tooltip
title="List view"
size="sm"
:pressed="listViewMode === 'list'"
variant="outline-primary"
@click="onToggleView('list')">
<FontAwesomeIcon :icon="faBars" />
</BButton>
</BButtonGroup>
</div>
</div>
</template>

<style scoped lang="scss">
.list-header {
display: flex;
justify-content: space-between;
align-items: center;

.list-header-filters {
display: flex;
gap: 0.25rem;
flex-wrap: wrap;
align-items: center;
}
}
</style>
20 changes: 20 additions & 0 deletions client/src/components/Common/LoginRequired.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script setup lang="ts">
import { BPopover } from "bootstrap-vue";

import { useUserStore } from "@/stores/userStore";
import { withPrefix } from "@/utils/redirect";

defineProps<{
title: string;
target: string;
}>();

const userStore = useUserStore();
</script>

<template>
<BPopover v-if="userStore.isAnonymous" :target="target" triggers="hover focus" placement="bottom">
<template v-slot:title> {{ title }} </template>
Please <a :href="withPrefix('/login')">log in or register</a> to use this feature.
</BPopover>
</template>
64 changes: 20 additions & 44 deletions client/src/components/Common/TextSummary.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,39 @@
import { library } from "@fortawesome/fontawesome-svg-core";
import { faChevronDown, faChevronUp } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { computed } from "vue";
import { computed, ref } from "vue";

const props = defineProps({
description: {
type: String,
required: true,
},
showDetails: {
type: Boolean,
default: false,
},
maxLength: {
type: Number,
default: 150,
},
});
library.add(faChevronUp, faChevronDown);

const emit = defineEmits<{
(e: "update:show-details", showDetails: boolean): void;
}>();
interface Props {
maxLength?: number;
description: string;
}

const propShowDetails = computed({
get: () => {
return props.showDetails;
},
set: (val) => {
emit("update:show-details", val);
},
const props = withDefaults(defineProps<Props>(), {
maxLength: 150,
});

library.add(faChevronUp, faChevronDown);
const collapsedEnableIcon = "fas fa-chevron-down";
const collapsedDisableIcon = "fas fa-chevron-up";

// summarized length
const x = Math.round(props.maxLength - props.maxLength / 2);
const showDetails = ref(false);

const summary = computed(() => props.description.length > props.maxLength);
const textTooLong = computed(() => props.description.length > props.maxLength);
const text = computed(() =>
props.description.length > props.maxLength ? props.description.slice(0, x) : props.description
textTooLong.value && !showDetails.value
? props.description.slice(0, Math.round(props.maxLength - props.maxLength / 2)) + "..."
: props.description
);
</script>

<template>
<div>
{{ text }}
<span v-if="summary">
<a
v-if="!propShowDetails"
class="text-summary-expand"
href="javascript:void(0)"
@click.stop="propShowDetails = true">
... <FontAwesomeIcon :icon="collapsedEnableIcon" />
</a>
<a v-else href="javascript:void(0)" @click.stop="propShowDetails = false">
... <FontAwesomeIcon :icon="collapsedDisableIcon" />
</a>
<span
v-if="textTooLong"
v-b-tooltip.hover
class="info-icon cursor-pointer"
:title="textTooLong ? 'Show more' : 'Show less'"
@click="showDetails = !showDetails">
<FontAwesomeIcon :icon="showDetails ? 'chevron-up' : 'chevron-down'" />
</span>
</div>
</template>
Loading
Loading