Rename owners to members in workspace settings (#10729)

* Renamw owners to members in workspace settings

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Try to fix tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix formatting

Signed-off-by: Artem Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artem Savchenko <armisav@gmail.com>
This commit is contained in:
Artyom Savchenko
2026-04-09 14:14:19 +07:00
committed by GitHub
parent a593b81680
commit f78df72be5
25 changed files with 41 additions and 41 deletions
+4 -4
View File
@@ -304,13 +304,13 @@ export function createModel (builder: Builder): void {
core.space.Model,
{
name: 'owners',
label: setting.string.Owners,
icon: setting.icon.Owners,
component: setting.component.Owners,
label: setting.string.Members,
icon: setting.icon.Members,
component: setting.component.Members,
order: 1000,
role: AccountRole.Maintainer
},
setting.ids.Owners
setting.ids.Members
)
builder.createDoc(
setting.class.WorkspaceSettingCategory,
+1 -1
View File
@@ -44,7 +44,7 @@ export default mergeIds(settingId, setting, {
AssociationEditor: '' as AnyComponent,
EnumTypeEditor: '' as AnyComponent,
General: '' as AnyComponent,
Owners: '' as AnyComponent,
Members: '' as AnyComponent,
CreateMixin: '' as AnyComponent,
InviteSetting: '' as AnyComponent,
ArrayEditor: '' as AnyComponent,
-6
View File
@@ -3,12 +3,6 @@
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 8C9.65685 8 11 6.65685 11 5C11 3.34315 9.65685 2 8 2C6.34315 2 5 3.34315 5 5C5 6.65685 6.34315 8 8 8ZM8 9C10.2091 9 12 7.20914 12 5C12 2.79086 10.2091 1 8 1C5.79086 1 4 2.79086 4 5C4 7.20914 5.79086 9 8 9Z" />
<path d="M6.5 10C4.567 10 3 11.567 3 13.5V14.5C3 14.7761 3.22386 15 3.5 15C3.77614 15 4 14.7761 4 14.5V13.5C4 12.1193 5.11929 11 6.5 11H9.5C10.8807 11 12 12.1193 12 13.5V14.5C12 14.7761 12.2239 15 12.5 15C12.7761 15 13 14.7761 13 14.5V13.5C13 11.567 11.433 10 9.5 10H6.5Z" />
</symbol>
<symbol id="owners" viewBox="0 0 16 16">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 5.5C2 3.567 3.567 2 5.5 2C7.433 2 9 3.567 9 5.5C9 7.433 7.433 9 5.5 9C3.567 9 2 7.433 2 5.5ZM5.5 3C4.11929 3 3 4.11929 3 5.5C3 6.88071 4.11929 8 5.5 8C6.88071 8 8 6.88071 8 5.5C8 4.11929 6.88071 3 5.5 3Z" />
<path d="M10.5 10C10.2239 10 10 10.2239 10 10.5C10 10.7761 10.2239 11 10.5 11H11.5C12.8807 11 14 12.1193 14 13.5C14 13.7761 14.2239 14 14.5 14C14.7761 14 15 13.7761 15 13.5C15 11.567 13.433 10 11.5 10H10.5Z" />
<path d="M4.5 11C3.11929 11 2 12.1193 2 13.5C2 13.7761 1.77614 14 1.5 14C1.22386 14 1 13.7761 1 13.5C1 11.567 2.567 10 4.5 10H6.5C8.433 10 10 11.567 10 13.5C10 13.7761 9.77614 14 9.5 14C9.22386 14 9 13.7761 9 13.5C9 12.1193 7.88071 11 6.5 11H4.5Z" />
<path d="M10.5 2.99988C10.2238 2.99988 9.99995 3.22374 9.99995 3.49988C9.99995 3.77602 10.2238 3.99988 10.5 3.99988C10.7846 3.99988 11.0661 4.06066 11.3254 4.17815C11.5847 4.29564 11.8159 4.46714 12.0036 4.68119C12.1913 4.89523 12.3312 5.14688 12.4138 5.41931C12.4965 5.69174 12.52 5.97868 12.4828 6.26093C12.4457 6.54318 12.3487 6.81425 12.1984 7.05601C12.048 7.29777 11.8478 7.50465 11.6111 7.66282C11.3744 7.82098 11.1066 7.92679 10.8257 7.97316C10.5449 8.01954 10.2573 8.00541 9.98232 7.93173C9.71558 7.86026 9.44141 8.01855 9.36994 8.28528C9.29847 8.55202 9.45677 8.82618 9.7235 8.89766C10.136 9.00818 10.5673 9.02937 10.9886 8.95981C11.41 8.89025 11.8116 8.73153 12.1667 8.49429C12.5217 8.25704 12.8221 7.94672 13.0476 7.58408C13.2731 7.22144 13.4186 6.81484 13.4743 6.39146C13.53 5.96807 13.4947 5.53767 13.3708 5.12902C13.2468 4.72038 13.037 4.3429 12.7555 4.02184C12.4739 3.70078 12.127 3.44353 11.7381 3.26729C11.3491 3.09105 10.927 2.99988 10.5 2.99988Z" />
</symbol>
<symbol id="members" viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.7,5.7c-1.4,0-2.7,0.5-3.5,1.5c-0.9,0.9-1.3,2.3-1.2,3.7c0.2,2.7,2.3,5.1,4.8,5.1c2.5,0,4.6-2.3,4.8-5.1C25.7,8,23.5,5.7,20.7,5.7z M18.5,8.5C18,9,17.7,9.8,17.7,10.8c0.1,2,1.6,3.3,2.9,3.3c1.3,0,2.8-1.3,2.9-3.3c0.1-1.9-1.1-3.2-2.9-3.2C19.8,7.6,19,7.9,18.5,8.5z" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.4,24.1c1.1-4.2,5.2-6.3,9.3-6.3c4,0,8.2,2,9.3,6.3c0.2,0.9-0.4,2.1-1.6,2.1H13C11.7,26.3,11.2,25.1,11.4,24.1z M13.3,24.4h14.8c-0.9-3-3.9-4.7-7.4-4.7C17.2,19.7,14.1,21.4,13.3,24.4z" />

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

+1 -1
View File
@@ -60,7 +60,7 @@
"NewValue": "Nová hodnota",
"Leave": "Opustit pracovní prostor",
"LeaveDescr": "Opravdu chcete opustit tento pracovní prostor? Tuto akci nelze vrátit zpět.",
"Owners": "Vlastníci",
"Members": "Členové",
"WorkspaceSettings": "Nastavení pracovního prostoru",
"Select": "Vybrat",
"AddOwner": "Přidat vlastníka",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Neuer Wert",
"Leave": "Arbeitsbereich verlassen",
"LeaveDescr": "Sind Sie sicher, dass Sie den Arbeitsbereich verlassen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"Owners": "Eigentümer",
"Members": "Mitglieder",
"WorkspaceSettings": "Arbeitsbereich-Einstellungen",
"Select": "Auswählen",
"AddOwner": "Eigentümer hinzufügen",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "New value",
"Leave": "Leave workspace",
"LeaveDescr": "Are you sure you want to leave the workspace? This action cannot be undone.",
"Owners": "Owners",
"Members": "Members",
"WorkspaceSettings": "Workspace settings",
"Select": "Select",
"AddOwner": "Add owner",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Nuevo valor",
"Leave": "Abandonar espacio de trabajo",
"LeaveDescr": "¿Estás seguro de que quieres abandonar el espacio de trabajo? Esta acción es irreversible.",
"Owners": "Propietarios",
"Members": "Miembros",
"WorkspaceSettings": "Ajustes del espacio de trabajo",
"Select": "Seleccionar",
"AddOwner": "Añadir propietario",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Nouvelle valeur",
"Leave": "Quitter l'espace de travail",
"LeaveDescr": "Êtes-vous sûr de vouloir quitter l'espace de travail ? Cette action est irréversible.",
"Owners": "Propriétaires",
"Members": "Membres",
"WorkspaceSettings": "Paramètres de l'espace de travail",
"Select": "Sélectionner",
"AddOwner": "Ajouter un propriétaire",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Nuovo valore",
"Leave": "Lascia spazio di lavoro",
"LeaveDescr": "Sei sicuro di voler lasciare lo spazio di lavoro? Questa azione non può essere annullata.",
"Owners": "Proprietari",
"Members": "Membri",
"WorkspaceSettings": "Impostazioni spazio di lavoro",
"Select": "Seleziona",
"AddOwner": "Aggiungi proprietario",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "新しい値",
"Leave": "ワークスペースを退出",
"LeaveDescr": "本当にワークスペースを退出しますか?この操作は元に戻せません。",
"Owners": "所有者",
"Members": "メンバー",
"WorkspaceSettings": "ワークスペース設定",
"Select": "選択",
"AddOwner": "所有者を追加",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Novo valor",
"Leave": "Sair do espaço de trabalho",
"LeaveDescr": "Tem certeza de que deseja sair do espaço de trabalho? Esta ação não pode ser desfeita.",
"Owners": "Proprietários",
"Members": "Membros",
"WorkspaceSettings": "Configurações do espaço de trabalho",
"Select": "Selecionar",
"AddOwner": "Adicionar proprietário",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Novo valor",
"Leave": "Sair do espaço de trabalho",
"LeaveDescr": "Tem certeza de que deseja sair do espaço de trabalho? Esta ação não pode ser desfeita.",
"Owners": "Proprietários",
"Members": "Membros",
"WorkspaceSettings": "Configurações do espaço de trabalho",
"Select": "Selecionar",
"AddOwner": "Adicionar proprietário",
+1 -1
View File
@@ -71,7 +71,7 @@
"NewValue": "Новое значение",
"Leave": "Покинуть рабочее пространство",
"LeaveDescr": "Вы действительно хотите покинуть рабочее пространство? Отменить это действие невозможно",
"Owners": "Владельцы",
"Members": "Участники",
"WorkspaceSettings": "Рабочее пространство",
"Select": "Выбрать",
"AddOwner": "Добавить владельца",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "Yeni değer",
"Leave": "Çalışma alanından ayrıl",
"LeaveDescr": "Çalışma alanından ayrılmak istediğinizden emin misiniz? Bu işlem geri alınamaz.",
"Owners": "Sahipler",
"Members": "Üyeler",
"WorkspaceSettings": "Çalışma alanı ayarları",
"Select": "Seç",
"AddOwner": "Sahip ekle",
+1 -1
View File
@@ -66,7 +66,7 @@
"NewValue": "新值",
"Leave": "离开工作区",
"LeaveDescr": "您确定要离开工作区吗?此操作无法撤销。",
"Owners": "所有者",
"Members": "成员",
"WorkspaceSettings": "工作区设置",
"Select": "选择",
"AddOwner": "添加所有者",
-1
View File
@@ -19,7 +19,6 @@ import setting from '@hcengineering/setting'
const icons = require('../assets/icons.svg') as string // eslint-disable-line
loadMetadata(setting.icon, {
AccountSettings: `${icons}#accountSettings`,
Owners: `${icons}#owners`,
Members: `${icons}#members`,
GuestPermissions: `${icons}#guestPermissions`,
Password: `${icons}#password`,
@@ -1,5 +1,5 @@
<!--
// Copyright © 2022 Hardcore Engineering Inc.
// Copyright © 2026 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
@@ -88,7 +88,7 @@
<div class="hulyComponent">
<Header adaptive={'disabled'}>
<Breadcrumb icon={setting.icon.Owners} label={setting.string.Owners} size={'large'} isCurrent />
<Breadcrumb icon={setting.icon.Members} label={setting.string.Members} size={'large'} isCurrent />
<svelte:fragment slot="search">
<SearchInput bind:value={search} collapsed />
</svelte:fragment>
+2 -2
View File
@@ -25,7 +25,7 @@ import EnumSetting from './components/EnumSetting.svelte'
import Integrations from './components/integrations/Integrations.svelte'
import General from './components/General.svelte'
import Backup from './components/Backup.svelte'
import Owners from './components/Owners.svelte'
import Members from './components/Members.svelte'
import Password from './components/Password.svelte'
import Privacy from './components/Privacy.svelte'
import Profile from './components/Profile.svelte'
@@ -144,7 +144,7 @@ export default async (): Promise<Resources> => ({
EnumSetting,
General,
Backup,
Owners,
Members,
CreateMixin,
InviteSetting,
Configure,
+2 -3
View File
@@ -189,7 +189,7 @@ export default plugin(settingId, {
Terms: '' as Ref<Doc>,
ClassSetting: '' as Ref<Doc>,
General: '' as Ref<Doc>,
Owners: '' as Ref<Doc>,
Members: '' as Ref<Doc>,
InviteSettings: '' as Ref<Doc>,
RoleCapabilitySettings: '' as Ref<Doc>,
WorkspaceSetting: '' as Ref<Doc>,
@@ -275,7 +275,7 @@ export default plugin(settingId, {
Reconnect: '' as IntlString,
ClassSetting: '' as IntlString,
Classes: '' as IntlString,
Owners: '' as IntlString,
Members: '' as IntlString,
Configure: '' as IntlString,
InviteSettings: '' as IntlString,
RoleCapabilitySettings: '' as IntlString,
@@ -357,7 +357,6 @@ export default plugin(settingId, {
},
icon: {
AccountSettings: '' as Asset,
Owners: '' as Asset,
Members: '' as Asset,
GuestPermissions: '' as Asset,
Password: '' as Asset,
@@ -32,7 +32,7 @@ export class CustomAttributesPage {
this.page = page
}
member = (): Locator => this.page.getByRole('button', { name: 'Member' })
member = (): Locator => this.page.getByRole('button', { name: 'Member', exact: true })
contact = (): Locator => this.page.getByRole('button', { name: 'Contact' })
person = (): Locator => this.page.getByRole('button', { name: 'Person' })
employee = (): Locator => this.page.getByRole('button', { name: 'Employee' })
@@ -7,7 +7,7 @@ export class ClassesPage {
this.page = page
}
member = (): Locator => this.page.getByRole('button', { name: 'Member' })
member = (): Locator => this.page.getByRole('button', { name: 'Member', exact: true })
contact = (): Locator => this.page.getByRole('button', { name: 'Contact' })
person = (): Locator => this.page.getByRole('button', { name: 'Person' })
employee = (): Locator => this.page.getByRole('button', { name: 'Employee' })
@@ -9,7 +9,15 @@ export class OwnersPage {
owner = (ownerName: string): Locator => this.page.getByRole('link', { name: ownerName })
spacesAdminText = (): Locator => this.page.getByText('Admin Members')
addMemberButton = (): Locator => this.page.getByRole('button', { name: 'Members' })
// Sidebar "Members" nav item clashes with Spaces role pickers (label "Members"). Scope to settings content
// and the "Admin" role row — Spaces.svelte renders one AccountArrayEditor per role.
addMemberButton = (): Locator =>
this.page
.locator('.antiPanel-component.filledNav')
.locator('.antiGrid-row')
.filter({ has: this.page.locator('.antiGrid-row__header', { hasText: /^Admin$/ }) })
.getByRole('button', { name: 'Members' })
selectMember = (memberName: string): Locator => this.page.getByRole('button', { name: memberName })
workspaceLogo = (): Locator => this.page.locator('.hulyComponent .hulyAvatar-container')
publicTemplate = (): Locator => this.page.getByText('Public templates')
@@ -2,7 +2,7 @@ import { type Locator, type Page } from '@playwright/test'
export enum ButtonType {
General,
Owners,
Members,
Spaces,
TextTemplate,
RelatedIssues,
@@ -19,7 +19,7 @@ export class WorkspaceSettingsPage {
}
general = (): Locator => this.page.getByRole('button', { name: 'General' })
owners = (): Locator => this.page.getByRole('button', { name: 'Owners' })
members = (): Locator => this.page.getByRole('button', { name: 'Members' })
spaces = (): Locator => this.page.getByRole('button', { name: 'Spaces', exact: true })
textTemplate = (): Locator => this.page.getByRole('button', { name: 'Text Templates' })
relatedIssues = (): Locator => this.page.getByRole('button', { name: 'Related issues' })
@@ -32,8 +32,8 @@ export class WorkspaceSettingsPage {
case ButtonType.General:
await this.general().click()
break
case ButtonType.Owners:
await this.owners().click()
case ButtonType.Members:
await this.members().click()
break
case ButtonType.Spaces:
await this.spaces().click()
@@ -28,8 +28,8 @@ test.describe('Vacancy tests', () => {
await settingsPage.profileButton().click()
await settingsPage.selectPopupAp('Settings')
const wsPage: WorkspaceSettingsPage = new WorkspaceSettingsPage(page)
await wsPage.owners().click()
await settingsPage.checkOpened('Owners')
await wsPage.members().click()
await settingsPage.checkOpened('Members')
const count = await page.locator('div[id="workbench:component:WorkbenchTabs"] div.container.main').count()
for (let i = 1; i < count; i++) {
await page.locator('div[id="workbench:component:WorkbenchTabs"] div.container.main:first-child button').click()
@@ -44,7 +44,7 @@ test.describe('Workspace tests', () => {
await selectWorkspacePage.createWorkspace(newWorkspaceName)
await userProfilePage.openProfileMenu()
await userProfilePage.clickSettings()
await workspaceSettingsPage.selectWorkspaceSettingsTab(ButtonType.Owners)
await workspaceSettingsPage.selectWorkspaceSettingsTab(ButtonType.Members)
await ownersPage.checkIfOwnerExists(newUser.firstName)
})