fix(editor): Respect tag querystring filter when listing workflows (#11029)

This commit is contained in:
Ricardo Espinoza
2024-10-02 15:11:41 -04:00
committed by GitHub
parent 948edd1a04
commit 59c5ff6135
3 changed files with 44 additions and 1 deletions

View File

@@ -73,4 +73,28 @@ describe('Workflows', () => {
WorkflowsPage.getters.newWorkflowButtonCard().should('be.visible'); WorkflowsPage.getters.newWorkflowButtonCard().should('be.visible');
}); });
it('should respect tag querystring filter when listing workflows', () => {
WorkflowsPage.getters.newWorkflowButtonCard().click();
cy.createFixtureWorkflow('Test_workflow_2.json', getUniqueWorkflowName('My New Workflow'));
cy.visit(WorkflowsPage.url);
WorkflowsPage.getters.createWorkflowButton().click();
cy.createFixtureWorkflow('Test_workflow_1.json', 'Empty State Card Workflow');
cy.visit(WorkflowsPage.url);
WorkflowsPage.getters.workflowFilterButton().click();
WorkflowsPage.getters.workflowTagsDropdown().click();
WorkflowsPage.getters.workflowTagItem('some-tag-1').click();
cy.reload();
WorkflowsPage.getters.workflowCards().should('have.length', 1);
});
}); });

View File

@@ -22,6 +22,7 @@ describe('WorkflowsView', () => {
let projectsStore: ReturnType<typeof useProjectsStore>; let projectsStore: ReturnType<typeof useProjectsStore>;
const routerReplaceMock = vi.fn(); const routerReplaceMock = vi.fn();
const routerPushMock = vi.fn();
const renderComponent = createComponentRenderer(WorkflowsView, { const renderComponent = createComponentRenderer(WorkflowsView, {
global: { global: {
@@ -32,6 +33,7 @@ describe('WorkflowsView', () => {
}, },
$router: { $router: {
replace: routerReplaceMock, replace: routerReplaceMock,
push: routerPushMock,
}, },
}, },
}, },

View File

@@ -26,6 +26,8 @@ interface Filters {
tags: string[]; tags: string[];
} }
type QueryFilters = Partial<Filters>;
const StatusFilter = { const StatusFilter = {
ACTIVE: true, ACTIVE: true,
DEACTIVATED: false, DEACTIVATED: false,
@@ -152,6 +154,9 @@ const WorkflowsView = defineComponent({
}, },
async mounted() { async mounted() {
this.documentTitle.set(this.$locale.baseText('workflows.heading')); this.documentTitle.set(this.$locale.baseText('workflows.heading'));
await this.tagsStore.fetchAll();
await this.setFiltersFromQueryString(); await this.setFiltersFromQueryString();
void this.usersStore.showPersonalizationSurvey(); void this.usersStore.showPersonalizationSurvey();
@@ -263,10 +268,20 @@ const WorkflowsView = defineComponent({
isValidProjectId(projectId: string) { isValidProjectId(projectId: string) {
return this.projectsStore.availableProjects.some((project) => project.id === projectId); return this.projectsStore.availableProjects.some((project) => project.id === projectId);
}, },
async removeInvalidQueryFiltersFromUrl(filtersToApply: QueryFilters) {
await this.$router.push({
query: {
...(filtersToApply.tags && { tags: filtersToApply.tags?.join(',') }),
...(filtersToApply.status && { status: filtersToApply.status?.toString() }),
...(filtersToApply.search && { search: filtersToApply.search }),
...(filtersToApply.homeProject && { homeProject: filtersToApply.homeProject }),
},
});
},
async setFiltersFromQueryString() { async setFiltersFromQueryString() {
const { tags, status, search, homeProject } = this.$route.query; const { tags, status, search, homeProject } = this.$route.query;
const filtersToApply: { [key: string]: string | string[] | boolean } = {}; const filtersToApply: QueryFilters = {};
if (homeProject && typeof homeProject === 'string') { if (homeProject && typeof homeProject === 'string') {
await this.projectsStore.getAvailableProjects(); await this.projectsStore.getAvailableProjects();
@@ -295,6 +310,8 @@ const WorkflowsView = defineComponent({
filtersToApply.status = status === 'true'; filtersToApply.status = status === 'true';
} }
await this.removeInvalidQueryFiltersFromUrl(filtersToApply);
if (Object.keys(filtersToApply).length) { if (Object.keys(filtersToApply).length) {
this.filters = { this.filters = {
...this.filters, ...this.filters,