0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-02-25 01:36:30 +01:00
gitea/web_src/js/components/projects/WorkflowStore.ts
2025-09-02 21:42:47 -07:00

86 lines
2.5 KiB
TypeScript

import {reactive} from 'vue';
import {GET, POST} from '../../modules/fetch.ts';
export function createWorkflowStore(props: { projectLink: string, eventID: string}) {
const store = reactive({
workflowEvents: [],
selectedItem: props.eventID,
selectedWorkflow: null,
projectColumns: [],
saving: false,
workflowFilters: {
scope: '', // 'issue', 'pull_request', or ''
},
workflowActions: {
column: '', // column ID to move to
closeIssue: false,
},
async loadEvents() {
const response = await GET(`${props.projectLink}/workflows/events`);
store.workflowEvents = await response.json();
return store.workflowEvents;
},
async loadProjectColumns() {
try {
const response = await GET(`${props.projectLink}/workflows/columns`);
store.projectColumns = await response.json();
} catch (error) {
console.error('Failed to load project columns:', error);
store.projectColumns = [];
}
},
async loadWorkflowData(eventId: string) {
// Load project columns for the dropdown
await store.loadProjectColumns();
// Find the workflow from existing workflowEvents
const workflow = store.workflowEvents.find((e) => e.event_id === eventId);
if (workflow && workflow.filters && workflow.actions) {
// Load existing configuration from the workflow data
store.workflowFilters = workflow.filters || {scope: ''};
store.workflowActions = workflow.actions || {column: '', closeIssue: false};
} else {
// Reset to defaults for new workflow
store.resetWorkflowData();
}
},
resetWorkflowData() {
store.workflowFilters = {scope: ''};
store.workflowActions = {column: '', closeIssue: false};
},
async saveWorkflow() {
if (!store.selectedWorkflow) return;
store.saving = true;
try {
const workflowData = {
event_id: store.selectedWorkflow.event_id,
filters: store.workflowFilters,
actions: store.workflowActions,
};
const response = await POST(`${props.projectLink}/workflows/${store.selectedWorkflow.event_id}`, {
data: workflowData,
});
if (!response.ok) {
throw new Error('Failed to save workflow');
}
} catch (error) {
console.error('Error saving workflow:', error);
} finally {
store.saving = false;
}
},
});
return store;
}