diff --git a/web/src/compositions/useInterval.ts b/web/src/compositions/useInterval.ts index 1779f020da..cbf63236f5 100644 --- a/web/src/compositions/useInterval.ts +++ b/web/src/compositions/useInterval.ts @@ -1,17 +1,19 @@ import { onBeforeUnmount, onMounted, ref } from 'vue'; -export function useInterval(fn: () => void | Promise, ms: number): void { - const id = ref(); +export function useInterval(fn: () => void | Promise, ms: number, options?: { immediate?: boolean }): void { + const id = ref(null); onMounted(async () => { - await fn(); // run once immediately + if ((options?.immediate ?? true) === true) { + await fn(); // run once immediately + } id.value = window.setInterval(() => { void fn(); }, ms); }); onBeforeUnmount(() => { - if (id.value != null) { + if (id.value !== null) { window.clearInterval(id.value); } }); diff --git a/web/src/lib/api/index.ts b/web/src/lib/api/index.ts index 55455b3943..22e7da7c6c 100644 --- a/web/src/lib/api/index.ts +++ b/web/src/lib/api/index.ts @@ -342,12 +342,12 @@ export default class WoodpeckerClient extends ApiClient { return this._post(`/api/orgs/${orgId}/agents`, agent) as Promise; } - async updateOrgAgent(orgId: number, agentId: number, agent: Partial): Promise { - return this._patch(`/api/orgs/${orgId}/agents/${agentId}`, agent) as Promise; + async updateOrgAgent(orgId: number, agent: Agent): Promise { + return this._patch(`/api/orgs/${orgId}/agents/${agent.id}`, agent) as Promise; } - async deleteOrgAgent(orgId: number, agentId: number): Promise { - return this._delete(`/api/orgs/${orgId}/agents/${agentId}`); + async deleteOrgAgent(orgId: number, agent: Agent): Promise { + return this._delete(`/api/orgs/${orgId}/agents/${agent.id}`); } async getForges(opts?: PaginationOptions): Promise { diff --git a/web/src/router.ts b/web/src/router.ts index b9e739f27c..7b85e3428d 100644 --- a/web/src/router.ts +++ b/web/src/router.ts @@ -213,9 +213,24 @@ const routes: RouteRecordRaw[] = [ }, { path: 'agents', - name: 'org-settings-agents', - component: (): Component => import('~/views/org/settings/OrgAgents.vue'), - props: true, + component: (): Component => import('~/components/layout/RouteWrapper.vue'), + children: [ + { + path: '', + name: 'org-settings-agents', + component: (): Component => import('~/views/org/settings/agents/OrgAgents.vue'), + }, + { + path: ':agentId', + name: 'org-settings-agent', + component: (): Component => import('~/views/org/settings/agents/OrgAgent.vue'), + }, + { + path: 'create', + name: 'org-settings-agent-create', + component: (): Component => import('~/views/org/settings/agents/OrgAgentCreate.vue'), + }, + ], }, ], }, @@ -277,7 +292,7 @@ const routes: RouteRecordRaw[] = [ }, { path: 'create', - name: 'admin-settings-agents-create', + name: 'admin-settings-agent-create', component: (): Component => import('~/views/admin/agents/AdminAgentCreate.vue'), }, ], @@ -344,9 +359,24 @@ const routes: RouteRecordRaw[] = [ }, { path: 'agents', - name: 'user-agents', - component: (): Component => import('~/views/user/UserAgents.vue'), - props: true, + component: (): Component => import('~/components/layout/RouteWrapper.vue'), + children: [ + { + path: '', + name: 'user-agents', + component: (): Component => import('~/views/user/agents/UserAgents.vue'), + }, + { + path: ':agentId', + name: 'user-agent', + component: (): Component => import('~/views/user/agents/UserAgent.vue'), + }, + { + path: 'create', + name: 'user-agent-create', + component: (): Component => import('~/views/user/agents/UserAgentCreate.vue'), + }, + ], }, ], }, diff --git a/web/src/views/admin/agents/AdminAgent.vue b/web/src/views/admin/agents/AdminAgent.vue index 6711fe2019..1f7bc0febd 100644 --- a/web/src/views/admin/agents/AdminAgent.vue +++ b/web/src/views/admin/agents/AdminAgent.vue @@ -1,7 +1,7 @@ diff --git a/web/src/views/org/settings/OrgAgents.vue b/web/src/views/org/settings/OrgAgents.vue deleted file mode 100644 index 3151b8dad7..0000000000 --- a/web/src/views/org/settings/OrgAgents.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/web/src/views/org/settings/agents/OrgAgent.vue b/web/src/views/org/settings/agents/OrgAgent.vue new file mode 100644 index 0000000000..31325395d3 --- /dev/null +++ b/web/src/views/org/settings/agents/OrgAgent.vue @@ -0,0 +1,74 @@ + + + diff --git a/web/src/views/org/settings/agents/OrgAgentCreate.vue b/web/src/views/org/settings/agents/OrgAgentCreate.vue new file mode 100644 index 0000000000..25e97aae9f --- /dev/null +++ b/web/src/views/org/settings/agents/OrgAgentCreate.vue @@ -0,0 +1,59 @@ + + + diff --git a/web/src/views/org/settings/agents/OrgAgents.vue b/web/src/views/org/settings/agents/OrgAgents.vue new file mode 100644 index 0000000000..765a94551c --- /dev/null +++ b/web/src/views/org/settings/agents/OrgAgents.vue @@ -0,0 +1,60 @@ + + + diff --git a/web/src/views/user/UserAgents.vue b/web/src/views/user/UserAgents.vue deleted file mode 100644 index dc90984d95..0000000000 --- a/web/src/views/user/UserAgents.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/web/src/views/user/agents/UserAgent.vue b/web/src/views/user/agents/UserAgent.vue new file mode 100644 index 0000000000..4099bd9b6e --- /dev/null +++ b/web/src/views/user/agents/UserAgent.vue @@ -0,0 +1,77 @@ + + + diff --git a/web/src/views/user/agents/UserAgentCreate.vue b/web/src/views/user/agents/UserAgentCreate.vue new file mode 100644 index 0000000000..c6be548b01 --- /dev/null +++ b/web/src/views/user/agents/UserAgentCreate.vue @@ -0,0 +1,62 @@ + + + diff --git a/web/src/views/user/agents/UserAgents.vue b/web/src/views/user/agents/UserAgents.vue new file mode 100644 index 0000000000..f9648a02a7 --- /dev/null +++ b/web/src/views/user/agents/UserAgents.vue @@ -0,0 +1,63 @@ + + +