diff --git a/models/card/src/index.ts b/models/card/src/index.ts index 6d41c44afb..b59be4050f 100644 --- a/models/card/src/index.ts +++ b/models/card/src/index.ts @@ -12,7 +12,7 @@ // limitations under the License. import activity from '@hcengineering/activity' -import { CardEvents, cardId, type Card, type MasterTag, type Tag } from '@hcengineering/card' +import { CardEvents, cardId, DOMAIN_CARD, type Card, type MasterTag, type Tag } from '@hcengineering/card' import chunter from '@hcengineering/chunter' import contact from '@hcengineering/contact' import core, { @@ -20,7 +20,6 @@ import core, { DOMAIN_MODEL, IndexKind, type CollectionSize, - type Domain, type MarkupBlobRef, type Rank, type Ref @@ -48,8 +47,6 @@ import card from './plugin' export { cardId } from '@hcengineering/card' -const DOMAIN_CARD = 'card' as Domain - @Model(card.class.MasterTag, core.class.Class) export class TMasterTag extends TClass implements MasterTag {} diff --git a/models/server-card/src/index.ts b/models/server-card/src/index.ts index c58a425f6b..97d76b871c 100644 --- a/models/server-card/src/index.ts +++ b/models/server-card/src/index.ts @@ -46,7 +46,7 @@ export function createModel (builder: Builder): void { isAsync: true, txMatch: { _class: core.class.TxRemoveDoc, - objectClass: card.class.MasterTag + objectClass: { $in: [card.class.MasterTag, card.class.Tag] } } }) diff --git a/packages/core/lang/cs.json b/packages/core/lang/cs.json index 3007c2cd4f..878cc9109d 100644 --- a/packages/core/lang/cs.json +++ b/packages/core/lang/cs.json @@ -23,17 +23,17 @@ "Archived": "Archivováno", "ClassLabel": "Typ", "ClassPropertyLabel": "Štítek", - "String": "Řetězec", + "String": "Text", "Markup": "Značení", "Number": "Číslo", - "Boolean": "Boolean", + "Boolean": "Zaškrtávací políčko", "Timestamp": "Časové razítko", "Date": "Datum", "IntlString": "Mezinárodní řetězec", "Ref": "Odkaz", "Collection": "Kolekce", - "Array": "Pole", - "Enum": "Výčet", + "Array": "Vícenásobný výběr", + "Enum": "Výběr", "Members": "Členové", "Hyperlink": "URL", "Collaborative": "Spolupráce", diff --git a/packages/core/lang/de.json b/packages/core/lang/de.json index cc7acb9ded..bc8768fa84 100644 --- a/packages/core/lang/de.json +++ b/packages/core/lang/de.json @@ -26,14 +26,14 @@ "String": "Text", "Markup": "Formatierter Text", "Number": "Zahl", - "Boolean": "Boolesch", + "Boolean": "Kontrollkästchen", "Timestamp": "Zeitstempel", "Date": "Datum", "IntlString": "Internationaler Text", "Ref": "Referenz", "Collection": "Sammlung", - "Array": "Liste", - "Enum": "Aufzählung", + "Array": "Mehrfachauswahl", + "Enum": "Auswahl", "Members": "Mitglieder", "Hyperlink": "URL", "MarkupBlobRef": "Kollaborativ", diff --git a/packages/core/lang/en.json b/packages/core/lang/en.json index 9cbb35b14c..f9687e3159 100644 --- a/packages/core/lang/en.json +++ b/packages/core/lang/en.json @@ -23,17 +23,17 @@ "Archived": "Archived", "ClassLabel": "Type", "ClassPropertyLabel": "Label", - "String": "String", + "String": "Text", "Markup": "Markup", "Number": "Number", - "Boolean": "Boolean", + "Boolean": "Checkbox", "Timestamp": "Timestamp", "Date": "Date", "IntlString": "IntlString", - "Ref": "Ref", + "Ref": "Reference", "Collection": "Collection", - "Array": "Array", - "Enum": "Enum", + "Array": "Multi-Select", + "Enum": "Select", "Members": "Members", "Hyperlink": "URL", "MarkupBlobRef": "Collaborative", diff --git a/packages/core/lang/es.json b/packages/core/lang/es.json index 0452e20070..e6917fa281 100644 --- a/packages/core/lang/es.json +++ b/packages/core/lang/es.json @@ -16,17 +16,17 @@ "Archived": "Archivado", "ClassLabel": "Tipo", "ClassPropertyLabel": "Etiqueta", - "String": "Cadena de texto", + "String": "Texto", "Markup": "Marcado", "Number": "Número", - "Boolean": "Booleano", + "Boolean": "Casilla de verificación", "Timestamp": "Marca de tiempo", "Date": "Fecha", "IntlString": "Cadena de texto internacionalizada", - "Ref": "Ref.", + "Ref": "Referencia", "Collection": "Colección", - "Array": "Arreglo", - "Enum": "Enum.", + "Array": "Selección múltiple", + "Enum": "Selección", "Members": "Miembros", "Hyperlink": "Enlace", "MarkupBlobRef": "Colaborativo", diff --git a/packages/core/lang/fr.json b/packages/core/lang/fr.json index 187972dd03..7b248d769b 100644 --- a/packages/core/lang/fr.json +++ b/packages/core/lang/fr.json @@ -23,17 +23,17 @@ "Archived": "Archivé", "ClassLabel": "Type", "ClassPropertyLabel": "Label", - "String": "Chaîne", + "String": "Texte", "Markup": "Balise", "Number": "Nombre", - "Boolean": "Booléen", + "Boolean": "Case à cocher", "Timestamp": "Horodatage", "Date": "Date", "IntlString": "Chaîne internationale", - "Ref": "Réf", + "Ref": "Référence", "Collection": "Collection", - "Array": "Tableau", - "Enum": "Énumération", + "Array": "Sélection multiple", + "Enum": "Sélection", "Members": "Membres", "Hyperlink": "URL", "MarkupBlobRef": "Collaboratif", diff --git a/packages/core/lang/it.json b/packages/core/lang/it.json index cf24f5a8c8..68f072205e 100644 --- a/packages/core/lang/it.json +++ b/packages/core/lang/it.json @@ -23,17 +23,17 @@ "Archived": "Archiviato", "ClassLabel": "Tipo", "ClassPropertyLabel": "Etichetta", - "String": "Stringa", + "String": "Testo", "Markup": "Markup", "Number": "Numero", - "Boolean": "Booleano", + "Boolean": "Casella di controllo", "Timestamp": "Timestamp", "Date": "Data", "IntlString": "StringaIntl", "Ref": "Riferimento", "Collection": "Collezione", - "Array": "Array", - "Enum": "Enumeratore", + "Array": "Selezione multipla", + "Enum": "Selezione", "Members": "Membri", "Hyperlink": "Hyperlink", "Collaborative": "Collaborativo", diff --git a/packages/core/lang/pt.json b/packages/core/lang/pt.json index 87911c8648..c7df192c7d 100644 --- a/packages/core/lang/pt.json +++ b/packages/core/lang/pt.json @@ -16,17 +16,17 @@ "Archived": "Arquivado", "ClassLabel": "Tipo", "ClassPropertyLabel": "Rótulo", - "String": "Cadeia de texto", + "String": "Texto", "Markup": "Marcação", "Number": "Número", - "Boolean": "Booleano", + "Boolean": "Caixa de seleção", "Timestamp": "Marca de data/hora", "Date": "Data", "IntlString": "Cadeia de texto internacionalizada", - "Ref": "Ref.", + "Ref": "Referência", "Collection": "Coleção", - "Array": "Matriz", - "Enum": "Enumeração", + "Array": "Seleção múltipla", + "Enum": "Seleção", "Members": "Membros", "Hyperlink": "URL", "MarkupBlobRef": "Colaborativo", diff --git a/packages/core/lang/ru.json b/packages/core/lang/ru.json index 81c0f1f3a8..24cb255c36 100644 --- a/packages/core/lang/ru.json +++ b/packages/core/lang/ru.json @@ -23,17 +23,17 @@ "Archived": "Архивный", "ClassLabel": "Тип", "ClassPropertyLabel": "Название", - "String": "Строка", + "String": "Текст", "Markup": "Разметка", "Number": "Число", - "Boolean": "Логическое", + "Boolean": "Чекбокс", "Timestamp": "Временная отметка", "Date": "Дата", "IntlString": "Интернационализированная строка", "Ref": "Ссылка", "Collection": "Коллекция", - "Array": "Массив", - "Enum": "Справочник", + "Array": "Множественный выбор", + "Enum": "Выбор", "Members": "Участники", "Hyperlink": "URL", "MarkupBlobRef": "Коллаборативный", diff --git a/packages/core/lang/zh.json b/packages/core/lang/zh.json index a8e9d195dd..696a334f60 100644 --- a/packages/core/lang/zh.json +++ b/packages/core/lang/zh.json @@ -23,17 +23,17 @@ "Archived": "已归档", "ClassLabel": "类型", "ClassPropertyLabel": "标签", - "String": "字符串", + "String": "文字", "Markup": "标记", "Number": "数字", - "Boolean": "布尔值", + "Boolean": "复选框", "Timestamp": "时间戳", "Date": "日期", "IntlString": "国际字符串", "Ref": "引用", "Collection": "集合", - "Array": "数组", - "Enum": "枚举", + "Array": "多选", + "Enum": "选择", "Members": "成员", "Hyperlink": "URL", "MarkupBlobRef": "协作", diff --git a/packages/ui/src/components/DropdownLabelsPopup.svelte b/packages/ui/src/components/DropdownLabelsPopup.svelte index 1794e359af..bbd693e7dc 100644 --- a/packages/ui/src/components/DropdownLabelsPopup.svelte +++ b/packages/ui/src/components/DropdownLabelsPopup.svelte @@ -45,13 +45,13 @@ return } if (multiselect && Array.isArray(selected)) { - const index = selected.indexOf(item.id) - if (index !== -1) { - selected.splice(index, 1) - selected = selected + const set = new Set(selected) + if (set.has(item.id)) { + set.delete(item.id) } else { - selected = selected === undefined ? [item.id] : [...selected, item.id] + set.add(item.id) } + selected = Array.from(set) dispatch('update', selected) } else { dispatch('close', item.id) diff --git a/plugins/card-resources/src/components/settings/GeneralSection.svelte b/plugins/card-resources/src/components/settings/GeneralSection.svelte index a80a2b1d31..fadbccbe31 100644 --- a/plugins/card-resources/src/components/settings/GeneralSection.svelte +++ b/plugins/card-resources/src/components/settings/GeneralSection.svelte @@ -50,7 +50,7 @@ async function handleDelete (): Promise { await deleteMasterTag(masterTag, () => { const loc = getCurrentLocation() - if (masterTag.extends !== card.class.MasterTag && masterTag.extends !== undefined) { + if (masterTag.extends !== card.class.Card && masterTag.extends !== undefined) { loc.path[4] = masterTag.extends } else { loc.path.length = 3 diff --git a/plugins/card-resources/src/components/settings/RelationsSection.svelte b/plugins/card-resources/src/components/settings/RelationsSection.svelte index 5b9921c5e8..7f3eae3c60 100644 --- a/plugins/card-resources/src/components/settings/RelationsSection.svelte +++ b/plugins/card-resources/src/components/settings/RelationsSection.svelte @@ -34,12 +34,18 @@ const query = createQuery() query.query(core.class.Association, {}, (res) => { + console.log(res) associations = res }) function getClassLabel (_class: Ref>): IntlString { - const _classLabel = hierarchy.getClass(_class) - return _classLabel.label + try { + const _classLabel = hierarchy.getClass(_class) + return _classLabel.label + } catch (err) { + console.error(err) + return core.string.Class + } } function addRelation (): void { diff --git a/plugins/card/src/index.ts b/plugins/card/src/index.ts index 955ddc9ab1..238ff86b85 100644 --- a/plugins/card/src/index.ts +++ b/plugins/card/src/index.ts @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Class, Mixin, Doc, Ref, MarkupBlobRef, Rank } from '@hcengineering/core' +import { Class, Mixin, Doc, Ref, MarkupBlobRef, Rank, Domain } from '@hcengineering/core' import { Asset, IntlString, plugin, Plugin } from '@hcengineering/platform' import type { AnyComponent } from '@hcengineering/ui' @@ -42,6 +42,8 @@ export interface MasterTagEditorSection extends Doc { */ export const cardId = 'card' as Plugin +export const DOMAIN_CARD = 'card' as Domain + /** * @public */ diff --git a/plugins/setting-resources/src/components/CreateRelation.svelte b/plugins/setting-resources/src/components/CreateRelation.svelte index 6901621c49..750c107409 100644 --- a/plugins/setting-resources/src/components/CreateRelation.svelte +++ b/plugins/setting-resources/src/components/CreateRelation.svelte @@ -57,18 +57,22 @@ if (added.has(_id) || ignore.has(_id)) continue const _class = hierarchy.getClass(_id) if (_class.label === undefined) continue - if (viewlets.has(hierarchy.getBaseClass(_id))) { - added.add(_id) - const descendants = hierarchy.getDescendants(_id) - const toAdd: Class[] = [] - for (const desc of descendants) { - if (added.has(desc) || ignore.has(desc)) continue - const _class = hierarchy.getClass(desc) - if (_class.label === undefined) continue - added.add(desc) - toAdd.push(_class) + try { + if (viewlets.has(hierarchy.getBaseClass(_id))) { + added.add(_id) + const descendants = hierarchy.getDescendants(_id) + const toAdd: Class[] = [] + for (const desc of descendants) { + if (added.has(desc) || ignore.has(desc)) continue + const _class = hierarchy.getClass(desc) + if (_class.label === undefined) continue + added.add(desc) + toAdd.push(_class) + } + base.set(_id, toAdd) } - base.set(_id, toAdd) + } catch (err) { + ignore.add(_id) } } const result: [DropdownIntlItem, DropdownIntlItem[]][] = [] diff --git a/plugins/setting-resources/src/components/typeEditors/ArrayEditor.svelte b/plugins/setting-resources/src/components/typeEditors/ArrayEditor.svelte index ba204a913d..c1ed07a70c 100644 --- a/plugins/setting-resources/src/components/typeEditors/ArrayEditor.svelte +++ b/plugins/setting-resources/src/components/typeEditors/ArrayEditor.svelte @@ -85,6 +85,7 @@ is={getComponent(selected)} props={{ type: type?.of, + nested: true, editable, kind, size diff --git a/plugins/setting-resources/src/components/typeEditors/EnumTypeEditor.svelte b/plugins/setting-resources/src/components/typeEditors/EnumTypeEditor.svelte index b081208ea7..d6661f8046 100644 --- a/plugins/setting-resources/src/components/typeEditors/EnumTypeEditor.svelte +++ b/plugins/setting-resources/src/components/typeEditors/EnumTypeEditor.svelte @@ -26,6 +26,7 @@ export let type: EnumOf | undefined export let editable: boolean = true export let value: Enum | undefined + export let nested: boolean = false export let defaultValue: string | undefined export let kind: ButtonKind = 'no-border' export let size: ButtonSize = 'small' @@ -66,7 +67,9 @@ {#if editable} {:else if value} - {value.name} +
+ {value.name} +
{/if} {#if value}