From 6d98c9068c4489f55fd300bb63f6bbbe9cd5e950 Mon Sep 17 00:00:00 2001 From: Lilly Schramm Date: Fri, 20 Jun 2025 20:27:40 +0200 Subject: [PATCH] feat(frontend): Add Clone Button To Role Page --- locales/en-US.yml | 1 + .../frontend/src/pages/admin/roles.role.vue | 8 +++ packages/misskey-js/etc/misskey-js.api.md | 8 +++ .../misskey-js/src/autogen/apiClientJSDoc.ts | 11 ++++ packages/misskey-js/src/autogen/endpoint.ts | 3 + packages/misskey-js/src/autogen/entities.ts | 2 + packages/misskey-js/src/autogen/types.ts | 63 +++++++++++++++++++ 7 files changed, 96 insertions(+) diff --git a/locales/en-US.yml b/locales/en-US.yml index 230717f372..3f0b88c613 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -51,6 +51,7 @@ copyContent: "Copy contents" copyLink: "Copy link" copyRemoteLink: "Copy remote link" copyLinkRenote: "Copy renote link" +clone: "Clone" delete: "Delete" deleteAndEdit: "Delete and edit" deleteAndEditConfirm: "Are you sure you want to redraft this note? This means you will lose all reactions, renotes, and replies to it." diff --git a/packages/frontend/src/pages/admin/roles.role.vue b/packages/frontend/src/pages/admin/roles.role.vue index 04e6405f9b..2cc2500efb 100644 --- a/packages/frontend/src/pages/admin/roles.role.vue +++ b/packages/frontend/src/pages/admin/roles.role.vue @@ -9,6 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.edit }} + {{ i18n.ts.clone }} {{ i18n.ts.delete }}
@@ -97,6 +98,13 @@ function edit() { router.push('/admin/roles/' + role.id + '/edit'); } +async function clone() { + const newRole = await misskeyApi('admin/roles/clone', { + roleId: role.id, + }); + router.push('/admin/roles/' + newRole.id + '/edit'); +} + async function del() { const { canceled } = await os.confirm({ type: 'warning', diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 44700add31..f9a68b1cac 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -326,6 +326,12 @@ type AdminResolveAbuseUserReportRequest = operations['admin___resolve-abuse-user // @public (undocumented) type AdminRolesAssignRequest = operations['admin___roles___assign']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminRolesCloneRequest = operations['admin___roles___clone']['requestBody']['content']['application/json']; + +// @public (undocumented) +type AdminRolesCloneResponse = operations['admin___roles___clone']['responses']['200']['content']['application/json']; + // @public (undocumented) type AdminRolesCreateRequest = operations['admin___roles___create']['requestBody']['content']['application/json']; @@ -1585,6 +1591,8 @@ declare namespace entities { AdminResetPasswordResponse, AdminResolveAbuseUserReportRequest, AdminRolesAssignRequest, + AdminRolesCloneRequest, + AdminRolesCloneResponse, AdminRolesCreateRequest, AdminRolesCreateResponse, AdminRolesDeleteRequest, diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index 8827fe9c39..be7479b009 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -856,6 +856,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:admin:roles* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index b424927316..4712c16265 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -98,6 +98,8 @@ import type { AdminResetPasswordResponse, AdminResolveAbuseUserReportRequest, AdminRolesAssignRequest, + AdminRolesCloneRequest, + AdminRolesCloneResponse, AdminRolesCreateRequest, AdminRolesCreateResponse, AdminRolesDeleteRequest, @@ -738,6 +740,7 @@ export type Endpoints = { 'admin/reset-password': { req: AdminResetPasswordRequest; res: AdminResetPasswordResponse }; 'admin/resolve-abuse-user-report': { req: AdminResolveAbuseUserReportRequest; res: EmptyResponse }; 'admin/roles/assign': { req: AdminRolesAssignRequest; res: EmptyResponse }; + 'admin/roles/clone': { req: AdminRolesCloneRequest; res: AdminRolesCloneResponse }; 'admin/roles/create': { req: AdminRolesCreateRequest; res: AdminRolesCreateResponse }; 'admin/roles/delete': { req: AdminRolesDeleteRequest; res: EmptyResponse }; 'admin/roles/list': { req: EmptyRequest; res: AdminRolesListResponse }; diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index 39359e3cfa..e1ba4e9704 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -101,6 +101,8 @@ export type AdminResetPasswordRequest = operations['admin___reset-password']['re export type AdminResetPasswordResponse = operations['admin___reset-password']['responses']['200']['content']['application/json']; export type AdminResolveAbuseUserReportRequest = operations['admin___resolve-abuse-user-report']['requestBody']['content']['application/json']; export type AdminRolesAssignRequest = operations['admin___roles___assign']['requestBody']['content']['application/json']; +export type AdminRolesCloneRequest = operations['admin___roles___clone']['requestBody']['content']['application/json']; +export type AdminRolesCloneResponse = operations['admin___roles___clone']['responses']['200']['content']['application/json']; export type AdminRolesCreateRequest = operations['admin___roles___create']['requestBody']['content']['application/json']; export type AdminRolesCreateResponse = operations['admin___roles___create']['responses']['200']['content']['application/json']; export type AdminRolesDeleteRequest = operations['admin___roles___delete']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 8debdec9c1..97356e0c6e 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -711,6 +711,15 @@ export type paths = { */ post: operations['admin___roles___assign']; }; + '/admin/roles/clone': { + /** + * admin/roles/clone + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:admin:roles* + */ + post: operations['admin___roles___clone']; + }; '/admin/roles/create': { /** * admin/roles/create @@ -10385,6 +10394,60 @@ export type operations = { }; }; }; + /** + * admin/roles/clone + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:admin:roles* + */ + admin___roles___clone: { + requestBody: { + content: { + 'application/json': { + /** Format: misskey:id */ + roleId: string; + }; + }; + }; + responses: { + /** @description OK (with results) */ + 200: { + content: { + 'application/json': components['schemas']['Role']; + }; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; /** * admin/roles/create * @description No description provided.