mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-20 16:47:50 +02:00
Merge remote-tracking branch 'origin/develop' into staging-new
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
This commit is contained in:
@@ -339,7 +339,7 @@ export async function configurePlatform (onWorkbenchConnect?: () => Promise<void
|
||||
|
||||
setMetadata(billingPlugin.metadata.BillingURL, config.BILLING_URL ?? '')
|
||||
|
||||
const languages = myBranding.languages !== undefined && myBranding.languages !== '' ? myBranding.languages.split(',').map((l) => l.trim()) : ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja']
|
||||
const languages = myBranding.languages !== undefined && myBranding.languages !== '' ? myBranding.languages.split(',').map((l) => l.trim()) : ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
|
||||
|
||||
setMetadata(uiPlugin.metadata.Languages, languages)
|
||||
|
||||
|
||||
@@ -496,7 +496,7 @@ export async function configurePlatform() {
|
||||
|
||||
const languages = myBranding.languages
|
||||
? (myBranding.languages as string).split(',').map((l) => l.trim())
|
||||
: ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja']
|
||||
: ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
|
||||
|
||||
setMetadata(uiPlugin.metadata.Languages, languages)
|
||||
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
// Copyright © 2025 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
|
||||
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
//
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { type Builder } from '@hcengineering/model'
|
||||
import presentation from '@hcengineering/model-presentation'
|
||||
import setting from '@hcengineering/model-setting'
|
||||
import view, { createAction } from '@hcengineering/model-view'
|
||||
import workbench from '@hcengineering/model-workbench'
|
||||
import card from './plugin'
|
||||
|
||||
export function createActions (builder: Builder): void {
|
||||
createAction(builder, {
|
||||
action: card.actionImpl.EditSpace,
|
||||
label: presentation.string.Edit,
|
||||
icon: view.icon.Edit,
|
||||
input: 'focus',
|
||||
category: view.category.General,
|
||||
target: card.class.CardSpace,
|
||||
visibilityTester: view.function.CanEditSpace,
|
||||
query: {},
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.CopyTextToClipboard,
|
||||
actionProps: {
|
||||
textProvider: card.function.GetSpaceAccessPublicLink
|
||||
},
|
||||
label: card.string.GetIndividualPublicLink,
|
||||
icon: view.icon.CopyLink,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.CardSpace,
|
||||
query: {},
|
||||
visibilityTester: card.function.CanGetSpaceAccessPublicLink,
|
||||
context: {
|
||||
mode: ['context', 'browser']
|
||||
}
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.SetParentActionPopup,
|
||||
element: 'top',
|
||||
fillProps: {
|
||||
_objects: 'value'
|
||||
}
|
||||
},
|
||||
label: card.string.SetParent,
|
||||
icon: card.icon.MasterTag,
|
||||
input: 'none',
|
||||
category: card.category.Card,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context'],
|
||||
application: card.app.Card,
|
||||
group: 'associate'
|
||||
}
|
||||
},
|
||||
card.action.SetParent
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: view.actionImpl.UpdateDocument,
|
||||
actionProps: {
|
||||
key: 'parent',
|
||||
value: null
|
||||
},
|
||||
query: {
|
||||
parent: { $ne: null, $exists: true }
|
||||
},
|
||||
label: card.string.UnsetParent,
|
||||
icon: card.icon.MasterTag,
|
||||
input: 'none',
|
||||
category: card.category.Card,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context'],
|
||||
application: card.app.Card,
|
||||
group: 'associate'
|
||||
}
|
||||
},
|
||||
card.action.UnsetParent
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.Tag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateTag,
|
||||
input: 'focus',
|
||||
icon: view.icon.Add,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.Tag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateTag,
|
||||
input: 'focus',
|
||||
icon: view.icon.Add,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.Tag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: card.actionImpl.DeleteMasterTag,
|
||||
label: workbench.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'remove'
|
||||
}
|
||||
},
|
||||
card.action.DeleteMasterTag
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
action: card.actionImpl.DeleteMasterTag,
|
||||
label: workbench.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.Tag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'remove'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.ChangeType,
|
||||
fillProps: {
|
||||
_object: 'value'
|
||||
}
|
||||
},
|
||||
label: card.string.ChangeType,
|
||||
input: 'focus',
|
||||
icon: card.icon.MasterTag,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.MasterTag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateMasterTag,
|
||||
input: 'focus',
|
||||
icon: card.icon.MasterTag,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
}
|
||||
+6
-200
@@ -13,6 +13,7 @@
|
||||
|
||||
import activity from '@hcengineering/activity'
|
||||
import {
|
||||
type CanCreateCardResource,
|
||||
type Card,
|
||||
cardId,
|
||||
type CardNavigation,
|
||||
@@ -20,7 +21,6 @@ import {
|
||||
type CardSpace,
|
||||
type CardViewDefaults,
|
||||
type CreateCardExtension,
|
||||
type CanCreateCardResource,
|
||||
DOMAIN_CARD,
|
||||
type FavoriteCard,
|
||||
type MasterTag,
|
||||
@@ -60,17 +60,18 @@ import {
|
||||
import attachment from '@hcengineering/model-attachment'
|
||||
import { TAttachedDoc, TClass, TDoc, TMixin, TSpace } from '@hcengineering/model-core'
|
||||
import { createPublicLinkAction } from '@hcengineering/model-guest'
|
||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||
import presentation from '@hcengineering/model-presentation'
|
||||
import setting from '@hcengineering/model-setting'
|
||||
import view, { createAction, type Viewlet } from '@hcengineering/model-view'
|
||||
import view, { type Viewlet } from '@hcengineering/model-view'
|
||||
import workbench, { WidgetType } from '@hcengineering/model-workbench'
|
||||
import { type Asset, getEmbeddedLabel, type IntlString, type Resource } from '@hcengineering/platform'
|
||||
import time, { type ToDo } from '@hcengineering/time'
|
||||
import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type BuildModelKey } from '@hcengineering/view'
|
||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||
import card from './plugin'
|
||||
import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
|
||||
import { createActions } from './actions'
|
||||
|
||||
export { cardId } from '@hcengineering/card'
|
||||
|
||||
@@ -399,37 +400,7 @@ export function createModel (builder: Builder): void {
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: card.actionImpl.EditSpace,
|
||||
label: presentation.string.Edit,
|
||||
icon: view.icon.Edit,
|
||||
input: 'focus',
|
||||
category: view.category.General,
|
||||
target: card.class.CardSpace,
|
||||
visibilityTester: view.function.CanEditSpace,
|
||||
query: {},
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.CopyTextToClipboard,
|
||||
actionProps: {
|
||||
textProvider: card.function.GetSpaceAccessPublicLink
|
||||
},
|
||||
label: card.string.GetIndividualPublicLink,
|
||||
icon: view.icon.CopyLink,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.CardSpace,
|
||||
query: {},
|
||||
visibilityTester: card.function.CanGetSpaceAccessPublicLink,
|
||||
context: {
|
||||
mode: ['context', 'browser']
|
||||
}
|
||||
})
|
||||
createActions(builder)
|
||||
|
||||
builder.mixin(card.class.CardSpace, core.class.Class, workbench.mixin.SpaceView, {
|
||||
view: {
|
||||
@@ -497,31 +468,6 @@ export function createModel (builder: Builder): void {
|
||||
presenter: card.component.SpacePresenter
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.SetParentActionPopup,
|
||||
element: 'top',
|
||||
fillProps: {
|
||||
_objects: 'value'
|
||||
}
|
||||
},
|
||||
label: card.string.SetParent,
|
||||
icon: card.icon.MasterTag,
|
||||
input: 'none',
|
||||
category: card.category.Card,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context'],
|
||||
application: card.app.Card,
|
||||
group: 'associate'
|
||||
}
|
||||
},
|
||||
card.action.SetParent
|
||||
)
|
||||
|
||||
builder.mixin(card.class.Card, core.class.Class, view.mixin.AttributeEditor, {
|
||||
inlineEditor: card.component.CardEditor
|
||||
})
|
||||
@@ -530,31 +476,6 @@ export function createModel (builder: Builder): void {
|
||||
inlineEditor: card.component.CardArrayEditor
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: view.actionImpl.UpdateDocument,
|
||||
actionProps: {
|
||||
key: 'parent',
|
||||
value: null
|
||||
},
|
||||
query: {
|
||||
parent: { $ne: null, $exists: true }
|
||||
},
|
||||
label: card.string.UnsetParent,
|
||||
icon: card.icon.MasterTag,
|
||||
input: 'none',
|
||||
category: card.category.Card,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context'],
|
||||
application: card.app.Card,
|
||||
group: 'associate'
|
||||
}
|
||||
},
|
||||
card.action.UnsetParent
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
view.class.Viewlet,
|
||||
core.space.Model,
|
||||
@@ -693,50 +614,6 @@ export function createModel (builder: Builder): void {
|
||||
encode: card.function.GetCardLink
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.Tag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateTag,
|
||||
input: 'focus',
|
||||
icon: view.icon.Add,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.Tag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateTag,
|
||||
input: 'focus',
|
||||
icon: view.icon.Add,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.Tag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
builder.mixin(card.class.MasterTag, core.class.Class, view.mixin.IgnoreActions, {
|
||||
actions: [setting.action.CreateMixin, view.action.OpenInNewTab, view.action.Delete, setting.action.DeleteMixin]
|
||||
})
|
||||
@@ -745,77 +622,6 @@ export function createModel (builder: Builder): void {
|
||||
actions: [setting.action.CreateMixin, view.action.OpenInNewTab, view.action.Delete, setting.action.DeleteMixin]
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: card.actionImpl.DeleteMasterTag,
|
||||
label: workbench.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'remove'
|
||||
}
|
||||
},
|
||||
card.action.DeleteMasterTag
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
action: card.actionImpl.DeleteMasterTag,
|
||||
label: workbench.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'any',
|
||||
category: view.category.General,
|
||||
target: card.class.Tag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'remove'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.ChangeType,
|
||||
fillProps: {
|
||||
_object: 'value'
|
||||
}
|
||||
},
|
||||
label: card.string.ChangeType,
|
||||
input: 'focus',
|
||||
icon: card.icon.MasterTag,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.Card,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: card.component.CreateTag,
|
||||
props: {
|
||||
_class: card.class.MasterTag
|
||||
},
|
||||
fillProps: {
|
||||
_object: 'parent'
|
||||
}
|
||||
},
|
||||
label: card.string.CreateMasterTag,
|
||||
input: 'focus',
|
||||
icon: card.icon.MasterTag,
|
||||
category: setting.category.Settings,
|
||||
target: card.class.MasterTag,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'edit'
|
||||
}
|
||||
})
|
||||
|
||||
builder.createDoc(
|
||||
setting.class.WorkspaceSettingCategory,
|
||||
core.space.Model,
|
||||
|
||||
@@ -12,6 +12,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.ReviewDocumentPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.ReviewDocumentDescription
|
||||
},
|
||||
documents.permission.ReviewDocument
|
||||
@@ -22,6 +23,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.ApproveDocumentPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.ApproveDocumentDescription
|
||||
},
|
||||
documents.permission.ApproveDocument
|
||||
@@ -32,6 +34,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.ArchiveDocumentPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.ArchiveDocumentDescription
|
||||
},
|
||||
documents.permission.ArchiveDocument
|
||||
@@ -42,6 +45,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.CoAuthorDocumentPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.CoAuthorDocumentDescription
|
||||
},
|
||||
documents.permission.CoAuthorDocument
|
||||
@@ -52,6 +56,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.CreateDocumentPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.CreateDocumentDescription
|
||||
},
|
||||
documents.permission.CreateDocument
|
||||
@@ -62,6 +67,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.UpdateDocumentOwnerPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.UpdateDocumentOwnerDescription
|
||||
},
|
||||
documents.permission.UpdateDocumentOwner
|
||||
@@ -72,6 +78,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.CreateDocumentCategoryPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.CreateDocumentCategoryDescription
|
||||
},
|
||||
documents.permission.CreateDocumentCategory
|
||||
@@ -82,6 +89,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.UpdateDocumentCategoryPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.UpdateDocumentCategoryDescription
|
||||
},
|
||||
documents.permission.UpdateDocumentCategory
|
||||
@@ -92,6 +100,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: documents.string.DeleteDocumentCategoryPermission,
|
||||
scope: 'space',
|
||||
description: documents.string.DeleteDocumentCategoryDescription
|
||||
},
|
||||
documents.permission.DeleteDocumentCategory
|
||||
|
||||
@@ -23,6 +23,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.CreateObject,
|
||||
scope: 'space',
|
||||
description: core.string.CreateObjectDescription
|
||||
},
|
||||
core.permission.CreateObject
|
||||
@@ -33,6 +34,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.UpdateObject,
|
||||
scope: 'space',
|
||||
description: core.string.UpdateObjectDescription
|
||||
},
|
||||
core.permission.UpdateObject
|
||||
@@ -43,6 +45,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.DeleteObject,
|
||||
scope: 'space',
|
||||
description: core.string.DeleteObjectDescription
|
||||
},
|
||||
core.permission.DeleteObject
|
||||
@@ -53,36 +56,20 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.ForbidDeleteObject,
|
||||
txClass: core.class.TxRemoveDoc,
|
||||
forbid: true,
|
||||
scope: 'space',
|
||||
description: core.string.ForbidDeleteObjectDescription
|
||||
},
|
||||
core.permission.ForbidDeleteObject
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.UpdateObject,
|
||||
description: core.string.UpdateObjectDescription
|
||||
},
|
||||
core.permission.UpdateObject
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.DeleteObject,
|
||||
description: core.string.DeleteObjectDescription
|
||||
},
|
||||
core.permission.DeleteObject
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.UpdateSpace,
|
||||
scope: 'space',
|
||||
description: core.string.UpdateSpaceDescription
|
||||
},
|
||||
core.permission.UpdateSpace
|
||||
@@ -93,6 +80,7 @@ export function definePermissions (builder: Builder): void {
|
||||
core.space.Model,
|
||||
{
|
||||
label: core.string.ArchiveSpace,
|
||||
scope: 'space',
|
||||
description: core.string.ArchiveSpaceDescription
|
||||
},
|
||||
core.permission.ArchiveSpace
|
||||
|
||||
@@ -29,7 +29,9 @@ import {
|
||||
type SpaceTypeDescriptor,
|
||||
type TypedSpace,
|
||||
type AccountUuid,
|
||||
type TxAccessLevel
|
||||
type TxAccessLevel,
|
||||
type Tx,
|
||||
type Doc
|
||||
} from '@hcengineering/core'
|
||||
import {
|
||||
ArrOf,
|
||||
@@ -155,6 +157,10 @@ export class TRole extends TAttachedDoc implements Role {
|
||||
@UX(core.string.Permission)
|
||||
export class TPermission extends TDoc implements Permission {
|
||||
label!: IntlString
|
||||
txClass?: Ref<Class<Tx>>
|
||||
forbid?: boolean
|
||||
objectClass?: Ref<Class<Doc<Space>>>
|
||||
scope?: 'space' | 'workspace'
|
||||
description?: IntlString
|
||||
icon?: Asset
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ import { type Asset, getEmbeddedLabel } from '@hcengineering/platform'
|
||||
import tags from '@hcengineering/tags'
|
||||
import time, { type ToDo, type Todoable } from '@hcengineering/time'
|
||||
import document from './plugin'
|
||||
import { definePermissions } from './permissions'
|
||||
|
||||
export { documentId } from '@hcengineering/document'
|
||||
|
||||
@@ -550,6 +551,7 @@ export function createModel (builder: Builder): void {
|
||||
defineDocument(builder)
|
||||
|
||||
defineApplication(builder)
|
||||
definePermissions(builder)
|
||||
|
||||
builder.createDoc(core.class.DomainIndexConfiguration, core.space.Model, {
|
||||
domain: DOMAIN_DOCUMENT,
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { Builder } from '@hcengineering/model'
|
||||
import core from '@hcengineering/core'
|
||||
import document from '@hcengineering/document'
|
||||
|
||||
export function definePermissions (builder: Builder): void {
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: document.string.ForbidCreateTeamspacePermission,
|
||||
scope: 'workspace',
|
||||
txClass: core.class.TxCreateDoc,
|
||||
objectClass: document.class.Teamspace,
|
||||
forbid: true,
|
||||
description: document.string.ForbidCreateTeamspacePermissionDescription
|
||||
},
|
||||
document.permission.ForbidCreateTeamspace
|
||||
)
|
||||
}
|
||||
@@ -63,6 +63,7 @@ import workbench from '@hcengineering/model-workbench'
|
||||
import { getEmbeddedLabel } from '@hcengineering/platform'
|
||||
|
||||
import drive from './plugin'
|
||||
import { definePermissions } from './permissions'
|
||||
|
||||
export { driveId } from '@hcengineering/drive'
|
||||
export { driveOperation } from './migration'
|
||||
@@ -790,4 +791,5 @@ export function createModel (builder: Builder): void {
|
||||
defineFile(builder)
|
||||
defineFileVersion(builder)
|
||||
defineApplication(builder)
|
||||
definePermissions(builder)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { Builder } from '@hcengineering/model'
|
||||
import core from '@hcengineering/core'
|
||||
import drive from '@hcengineering/drive'
|
||||
|
||||
export function definePermissions (builder: Builder): void {
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: drive.string.ForbidCreateDrivePermission,
|
||||
scope: 'workspace',
|
||||
txClass: core.class.TxCreateDoc,
|
||||
objectClass: drive.class.Drive,
|
||||
forbid: true,
|
||||
description: drive.string.ForbidCreateDrivePermissionDescription
|
||||
},
|
||||
drive.permission.ForbidCreateDrive
|
||||
)
|
||||
}
|
||||
@@ -32,6 +32,7 @@ import { type ViewOptionsModel } from '@hcengineering/view'
|
||||
|
||||
import lead from './plugin'
|
||||
import { defineSpaceType } from './spaceType'
|
||||
import { definePermissions } from './permissions'
|
||||
import { TCustomer, TFunnel, TLead } from './types'
|
||||
|
||||
export { leadId } from '@hcengineering/lead'
|
||||
@@ -660,4 +661,5 @@ export function createModel (builder: Builder): void {
|
||||
})
|
||||
|
||||
defineSpaceType(builder)
|
||||
definePermissions(builder)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { Builder } from '@hcengineering/model'
|
||||
import core from '@hcengineering/core'
|
||||
import lead from '@hcengineering/lead'
|
||||
|
||||
export function definePermissions (builder: Builder): void {
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: lead.string.ForbidCreateFunnelPermission,
|
||||
scope: 'workspace',
|
||||
txClass: core.class.TxCreateDoc,
|
||||
objectClass: lead.class.Funnel,
|
||||
forbid: true,
|
||||
description: lead.string.ForbidCreateFunnelPermissionDescription
|
||||
},
|
||||
lead.permission.ForbidCreateFunnel
|
||||
)
|
||||
}
|
||||
@@ -434,6 +434,54 @@ export function defineFunctions (builder: Builder): void {
|
||||
process.function.RoleContext
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
process.class.ProcessFunction,
|
||||
core.space.Model,
|
||||
{
|
||||
of: core.class.ArrOf,
|
||||
category: 'array',
|
||||
label: process.string.EmptyArray,
|
||||
type: 'context'
|
||||
},
|
||||
process.function.EmptyArray
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
process.class.ProcessFunction,
|
||||
core.space.Model,
|
||||
{
|
||||
of: contact.mixin.Employee,
|
||||
category: 'attribute',
|
||||
label: process.string.ExecutionInitiator,
|
||||
type: 'context'
|
||||
},
|
||||
process.function.ExecutionEmployeeInitiator
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
process.class.ProcessFunction,
|
||||
core.space.Model,
|
||||
{
|
||||
of: contact.class.Person,
|
||||
category: 'attribute',
|
||||
label: process.string.ExecutionInitiator,
|
||||
type: 'context'
|
||||
},
|
||||
process.function.ExecutionInitiator
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
process.class.ProcessFunction,
|
||||
core.space.Model,
|
||||
{
|
||||
of: core.class.TypeDate,
|
||||
category: 'attribute',
|
||||
label: process.string.ExecutionStarted,
|
||||
type: 'context'
|
||||
},
|
||||
process.function.ExecutionStarted
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
process.class.ProcessFunction,
|
||||
core.space.Model,
|
||||
|
||||
+23
-17
@@ -37,6 +37,7 @@ import { type KeyBinding, type ViewOptionModel, type ViewOptionsModel } from '@h
|
||||
import recruit from './plugin'
|
||||
import { createReviewModel, reviewTableConfig, reviewTableOptions } from './review'
|
||||
import { defineSpaceType } from './spaceType'
|
||||
import { definePermissions } from './permissions'
|
||||
import { TApplicant, TApplicantMatch, TCandidate, TOpinion, TReview, TVacancy, TVacancyList } from './types'
|
||||
|
||||
export { recruitId } from '@hcengineering/recruit'
|
||||
@@ -1019,24 +1020,28 @@ export function createModel (builder: Builder): void {
|
||||
},
|
||||
override: [recruit.action.CreateGlobalApplication]
|
||||
})
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: recruit.component.CreateCandidate,
|
||||
element: 'top'
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: recruit.component.CreateCandidate,
|
||||
element: 'top'
|
||||
},
|
||||
label: recruit.string.CreateTalent,
|
||||
icon: recruit.icon.Create,
|
||||
keyBinding: ['keyC'],
|
||||
input: 'none',
|
||||
category: recruit.category.Recruit,
|
||||
target: core.class.Doc,
|
||||
context: {
|
||||
mode: ['workbench', 'browser'],
|
||||
application: recruit.app.Recruit,
|
||||
group: 'create'
|
||||
}
|
||||
},
|
||||
label: recruit.string.CreateTalent,
|
||||
icon: recruit.icon.Create,
|
||||
keyBinding: ['keyC'],
|
||||
input: 'none',
|
||||
category: recruit.category.Recruit,
|
||||
target: core.class.Doc,
|
||||
context: {
|
||||
mode: ['workbench', 'browser'],
|
||||
application: recruit.app.Recruit,
|
||||
group: 'create'
|
||||
}
|
||||
})
|
||||
recruit.action.CreateTalent
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
@@ -1596,4 +1601,5 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
defineSpaceType(builder)
|
||||
definePermissions(builder)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { Builder } from '@hcengineering/model'
|
||||
import core from '@hcengineering/core'
|
||||
import recruit from '@hcengineering/recruit'
|
||||
|
||||
export function definePermissions (builder: Builder): void {
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: recruit.string.ForbidCreateVacancyPermission,
|
||||
scope: 'workspace',
|
||||
txClass: core.class.TxCreateDoc,
|
||||
objectClass: recruit.class.Vacancy,
|
||||
forbid: true,
|
||||
description: recruit.string.ForbidCreateVacancyPermissionDescription
|
||||
},
|
||||
recruit.permission.ForbidCreateVacancy
|
||||
)
|
||||
}
|
||||
@@ -237,6 +237,27 @@ export function createModel (builder: Builder): void {
|
||||
func: serverProcess.transform.RemoveLast
|
||||
})
|
||||
|
||||
builder.mixin(process.function.EmptyArray, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, {
|
||||
func: serverProcess.transform.EmptyArray
|
||||
})
|
||||
|
||||
builder.mixin(
|
||||
process.function.ExecutionEmployeeInitiator,
|
||||
process.class.ProcessFunction,
|
||||
serverProcess.mixin.FuncImpl,
|
||||
{
|
||||
func: serverProcess.transform.ExecutionInitiator
|
||||
}
|
||||
)
|
||||
|
||||
builder.mixin(process.function.ExecutionInitiator, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, {
|
||||
func: serverProcess.transform.ExecutionInitiator
|
||||
})
|
||||
|
||||
builder.mixin(process.function.ExecutionStarted, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, {
|
||||
func: serverProcess.transform.ExecutionStarted
|
||||
})
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverProcess.trigger.OnExecutionContinue,
|
||||
txMatch: {
|
||||
|
||||
@@ -32,6 +32,7 @@ import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
|
||||
import { createActions as defineActions } from './actions'
|
||||
import tracker from './plugin'
|
||||
import { definePresenters } from './presenters'
|
||||
import { definePermissions } from './permissions'
|
||||
import {
|
||||
DOMAIN_TRACKER,
|
||||
TClassicProjectTypeData,
|
||||
@@ -709,6 +710,7 @@ export function createModel (builder: Builder): void {
|
||||
]
|
||||
})
|
||||
|
||||
definePermissions(builder)
|
||||
defineSpaceType(builder)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { Builder } from '@hcengineering/model'
|
||||
import core from '@hcengineering/core'
|
||||
import tracker from '@hcengineering/tracker'
|
||||
|
||||
export function definePermissions (builder: Builder): void {
|
||||
builder.createDoc(
|
||||
core.class.Permission,
|
||||
core.space.Model,
|
||||
{
|
||||
label: tracker.string.ForbidCreateProjectPermission,
|
||||
txClass: core.class.TxCreateDoc,
|
||||
objectClass: tracker.class.Project,
|
||||
forbid: true,
|
||||
scope: 'workspace',
|
||||
description: tracker.string.ForbidCreateProjectPermissionDescription
|
||||
},
|
||||
tracker.permission.ForbidCreateProject
|
||||
)
|
||||
}
|
||||
@@ -354,18 +354,22 @@ function defineTraining (builder: Builder): void {
|
||||
|
||||
definePermission(builder, training.permission.ChangeSomeoneElsesTrainingOwner, {
|
||||
label: training.string.Permission_ChangeSomeoneElsesTrainingOwner,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ChangeSomeoneElsesTrainingOwner_Description
|
||||
})
|
||||
definePermission(builder, training.permission.CreateTraining, {
|
||||
label: training.string.Permission_CreateTraining,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_CreateTraining_Description
|
||||
})
|
||||
definePermission(builder, training.permission.ViewSomeoneElsesTrainingOverview, {
|
||||
label: training.string.Permission_ViewSomeoneElsesTrainingOverview,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ViewSomeoneElsesTrainingOverview_Description
|
||||
})
|
||||
definePermission(builder, training.permission.ViewSomeoneElsesTrainingQuestions, {
|
||||
label: training.string.Permission_ViewSomeoneElsesTrainingQuestions,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ViewSomeoneElsesTrainingQuestions_Description
|
||||
})
|
||||
}
|
||||
@@ -491,14 +495,17 @@ function defineTrainingRequest (builder: Builder): void {
|
||||
|
||||
definePermission(builder, training.permission.ChangeSomeoneElsesSentRequestOwner, {
|
||||
label: training.string.Permission_ChangeSomeoneElsesSentRequestOwner,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ChangeSomeoneElsesSentRequestOwner_Description
|
||||
})
|
||||
definePermission(builder, training.permission.CreateRequestOnSomeoneElsesTraining, {
|
||||
label: training.string.Permission_CreateRequestOnSomeoneElsesTraining,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_CreateRequestOnSomeoneElsesTraining_Description
|
||||
})
|
||||
definePermission(builder, training.permission.ViewSomeoneElsesSentRequest, {
|
||||
label: training.string.Permission_ViewSomeoneElsesSentRequest,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ViewSomeoneElsesSentRequest_Description
|
||||
})
|
||||
})()
|
||||
@@ -753,6 +760,7 @@ function defineTrainingAttempt (builder: Builder): void {
|
||||
|
||||
definePermission(builder, training.permission.ViewSomeoneElsesTraineesResults, {
|
||||
label: training.string.Permission_ViewSomeoneElsesTraineesResults,
|
||||
scope: 'space',
|
||||
description: training.string.Permission_ViewSomeoneElsesTraineesResults_Description
|
||||
})
|
||||
}
|
||||
|
||||
@@ -835,6 +835,25 @@ export function createModel (builder: Builder): void {
|
||||
view.action.Join
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
action: view.actionImpl.ShowPopup,
|
||||
actionProps: {
|
||||
component: view.component.AddRelationPopup,
|
||||
fillProps: {
|
||||
_objects: 'value'
|
||||
}
|
||||
},
|
||||
label: core.string.AddRelation,
|
||||
input: 'any',
|
||||
icon: view.icon.CopyLink,
|
||||
category: view.category.Editor,
|
||||
target: core.class.Doc,
|
||||
context: {
|
||||
mode: ['context', 'browser'],
|
||||
group: 'associate'
|
||||
}
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
|
||||
@@ -96,7 +96,8 @@ export default mergeIds(viewId, view, {
|
||||
BaseDocPresenter: '' as AnyComponent,
|
||||
MasterDetailView: '' as AnyComponent,
|
||||
AssociationPresenter: '' as AnyComponent,
|
||||
TreeView: '' as AnyComponent
|
||||
TreeView: '' as AnyComponent,
|
||||
AddRelationPopup: '' as AnyComponent
|
||||
},
|
||||
string: {
|
||||
Table: '' as IntlString,
|
||||
|
||||
@@ -69,4 +69,4 @@
|
||||
"PersonId": "Osoba",
|
||||
"AccountId": "Účet"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,4 @@
|
||||
"PersonId": "Id de personne",
|
||||
"AccountId": "Compte"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"string": {
|
||||
"Id": "Id",
|
||||
"Space": "Alan",
|
||||
"Spaces": "Alanlar",
|
||||
"SpacesDescription": "Tüm alanların alan tipini yönet",
|
||||
"TypedSpace": "Tipli alan",
|
||||
"SpaceType": "Alan tipi",
|
||||
"Modified": "Değiştirildi",
|
||||
"ModifiedDate": "Değiştirilme tarihi",
|
||||
"ModifiedBy": "Değiştiren",
|
||||
"Class": "Sınıf",
|
||||
"AttachedTo": "Eklenen",
|
||||
"AttachedToClass": "Eklenen sınıf",
|
||||
"Name": "İsim",
|
||||
"Description": "Açıklama",
|
||||
"ShortDescription": "Kısa açıklama",
|
||||
"Descriptor": "Tanımlayıcı",
|
||||
"TargetClass": "Hedef sınıf",
|
||||
"Role": "Rol",
|
||||
"Roles": "Roller",
|
||||
"Private": "Özel",
|
||||
"Archived": "Arşivlendi",
|
||||
"ClassLabel": "Tip",
|
||||
"ClassPropertyLabel": "Etiket",
|
||||
"String": "Metin",
|
||||
"Markup": "İşaretleme",
|
||||
"Number": "Sayı",
|
||||
"Boolean": "Onay kutusu",
|
||||
"Timestamp": "Zaman damgası",
|
||||
"Date": "Tarih",
|
||||
"IntlString": "IntlString",
|
||||
"Ref": "Referans",
|
||||
"Collection": "Koleksiyon",
|
||||
"Array": "Çoklu Seçim",
|
||||
"Enum": "Seçim",
|
||||
"Members": "Üyeler",
|
||||
"Hyperlink": "URL",
|
||||
"MarkupBlobRef": "İşbirlikçi",
|
||||
"Object": "Nesne",
|
||||
"System": "Sistem",
|
||||
"CreatedBy": "Oluşturan",
|
||||
"CreatedDate": "Oluşturulma tarihi",
|
||||
"Status": "Durum",
|
||||
"StatusCategory": "Durum kategorisi",
|
||||
"Account": "Hesap",
|
||||
"Rank": "Sıra",
|
||||
"Owners": "Sahipler",
|
||||
"Permission": "İzin",
|
||||
"CreateObject": "Nesne oluştur",
|
||||
"UpdateObject": "Nesneyi güncelle",
|
||||
"DeleteObject": "Nesneyi sil",
|
||||
"ForbidDeleteObject": "Nesne silmeyi yasakla",
|
||||
"UpdateSpace": "Alanı güncelle",
|
||||
"ArchiveSpace": "Alanı arşivle",
|
||||
"CreateObjectDescription": "Kullanıcılara alanda nesne oluşturma yetkisi verir",
|
||||
"UpdateObjectDescription": "Kullanıcılara alandaki nesneleri güncelleme yetkisi verir",
|
||||
"DeleteObjectDescription": "Kullanıcılara alandaki nesneleri silme yetkisi verir",
|
||||
"ForbidDeleteObjectDescription": "Kullanıcıların alandaki nesneleri silmesini yasaklar",
|
||||
"UpdateSpaceDescription": "Kullanıcılara alanı güncelleme yetkisi verir",
|
||||
"ArchiveSpaceDescription": "Kullanıcılara alanı arşivleme yetkisi verir",
|
||||
"AutoJoin": "Otomatik katıl",
|
||||
"AutoJoinDescr": "Yeni çalışanları bu alana otomatik olarak ekle",
|
||||
"BlobSize": "Boyut",
|
||||
"BlobContentType": "İçerik türü",
|
||||
"Relation": "İlişki",
|
||||
"Relations": "İlişkiler",
|
||||
"AddRelation": "İlişki ekle",
|
||||
"PersonId": "Kişi",
|
||||
"AccountId": "Hesap"
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
import type { Asset, IntlString, Plugin } from '@hcengineering/platform'
|
||||
import type { DocumentQuery } from './storage'
|
||||
import { type WorkspaceDataId, type WorkspaceUuid } from './utils'
|
||||
import { Tx } from '.'
|
||||
|
||||
/**
|
||||
* @public
|
||||
@@ -529,6 +530,10 @@ export type RolesAssignment = Record<Ref<Role>, AccountUuid[] | undefined>
|
||||
*/
|
||||
export interface Permission extends Doc {
|
||||
label: IntlString
|
||||
txClass?: Ref<Class<Tx>>
|
||||
forbid?: boolean
|
||||
objectClass?: Ref<Class<Doc>>
|
||||
scope?: 'space' | 'workspace'
|
||||
description?: IntlString
|
||||
icon?: Asset
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"status": {
|
||||
"LoadingPlugin": "{plugin} eklentisi yükleniyor...",
|
||||
"UnknownError": "Bilinmeyen hata: {message}",
|
||||
"InvalidId": "Geçersiz Id: {id}",
|
||||
"BadRequest": "Hatalı istek",
|
||||
"Forbidden": "Yasak",
|
||||
"Conflict": "Çakışma",
|
||||
"ExpiredLink": "Bu davet bağlantısının süresi dolmuş",
|
||||
"Unauthorized": "Yetkisiz",
|
||||
"UnknownMethod": "Bilinmeyen metod: {method}",
|
||||
"InternalServerError": "Dahili sunucu hatası",
|
||||
"MaintenanceWarning": "Bakım Planlandı:",
|
||||
"MaintenanceWarningTime": "{time, plural, =1 {bir dakikadan az} other {# dakika}}",
|
||||
"AccountNotFound": "Hesap bulunamadı veya girilen kimlik bilgileri yanlış",
|
||||
"AccountNotConfirmed": "Hesap doğrulanmadı",
|
||||
"WorkspaceNotFound": "Çalışma alanı bulunamadı",
|
||||
"AccountAlreadyExists": "Hesap zaten mevcut",
|
||||
"WorkspaceRateLimit": "Sunucu meşgul, Lütfen biraz bekleyin ve tekrar deneyin",
|
||||
"AccountAlreadyConfirmed": "Hesap zaten doğrulandı",
|
||||
"WorkspaceAlreadyExists": "Çalışma alanı zaten mevcut",
|
||||
"InvalidOtp": "Geçersiz kod",
|
||||
"InviteNotFound": "E-posta ile davet bulunamadı: {email}",
|
||||
"WorkspaceLimitReached": "Çalışma alanı limitine ulaştınız. Lütfen bizimle iletişime geçin...",
|
||||
"ReadOnlyAccount": "Anonim Misafir Demo",
|
||||
"SystemAccount": "Sistem hesabı",
|
||||
"SocialIdAlreadyExists": "Sosyal ID zaten mevcut"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"string": {
|
||||
"Create": "Oluştur",
|
||||
"Cancel": "İptal",
|
||||
"Ok": "Tamam",
|
||||
"Save": "Kaydet",
|
||||
"Saved": "Kaydedildi...",
|
||||
"Download": "İndir",
|
||||
"DownloadOriginal": "Orijinali indir",
|
||||
"Delete": "Sil",
|
||||
"Close": "Kapat",
|
||||
"NotSelected": "Seçilmedi",
|
||||
"Deselect": "Seçimi kaldır",
|
||||
"Archived": "(arşivlendi)",
|
||||
"AddSocialLinks": "Sosyal bağlantılar ekle",
|
||||
"EditSocialLinks": "Sosyal bağlantıları düzenle",
|
||||
"Change": "Değiştir",
|
||||
"Remove": "Kaldır",
|
||||
"Search": "Ara...",
|
||||
"Spaces": "Alanlar",
|
||||
"NumberSpaces": "{count, plural, =0 {İçinde} =1 {1 yerde} other {# yerde}}",
|
||||
"InThis": "Bu {space} içinde",
|
||||
"NoMatchesInThis": "Bu {space} içinde eşleşme yok",
|
||||
"NoMatchesFound": "Eşleşme bulunamadı",
|
||||
"NotInThis": "Bu {space} içinde değil",
|
||||
"Match": "Eşleşme",
|
||||
"Add": "Ekle",
|
||||
"Edit": "Düzenle",
|
||||
"DocumentPreview": "Önizleme",
|
||||
"MakePrivate": "Özel yap",
|
||||
"MakePrivateDescription": "Sadece üyeler görebilir",
|
||||
"Created": "Oluşturuldu",
|
||||
"Selected": "Seçildi",
|
||||
"NoResults": "Gösterilecek sonuç yok",
|
||||
"Next": "İleri",
|
||||
"FailedToPreview": "Önizleme başarısız",
|
||||
"ContentType": "İçerik türü",
|
||||
"ContentTypeNotSupported": "Bu içerik türü için önizleme mevcut değil",
|
||||
"StartDrawing": "Üzerine çiz",
|
||||
"DrawingHistory": "Çizim geçmişi",
|
||||
"ColorAdd": "Renk önayarı ekle",
|
||||
"ColorRemove": "Renk önayarını kaldır",
|
||||
"ColorReset": "Renk önayarlarını sıfırla",
|
||||
"Copy": "Kopyala",
|
||||
"DocumentUrlCopied": "Kopyalandı!",
|
||||
"CopyLink": "Bağlantıyı kopyala",
|
||||
"AccessDenied": "Nesne mevcut değil veya erişim izniniz yok.",
|
||||
"UnableToFollowMention": "Bahsedilen nesne açılamıyor",
|
||||
"Undo": "Geri al",
|
||||
"Redo": "Yinele",
|
||||
"ClearCanvas": "Tuvali temizle",
|
||||
"PenTool": "Kalem aracı",
|
||||
"EraserTool": "Silgi aracı",
|
||||
"PanTool": "Kaydırma aracı",
|
||||
"TextTool": "Metin aracı",
|
||||
"PaletteManagementMenu": "Renk önayarlarını yönet"
|
||||
},
|
||||
"status": {
|
||||
"FileTooLarge": "Dosya çok büyük"
|
||||
}
|
||||
}
|
||||
@@ -642,7 +642,6 @@
|
||||
border: 1px solid var(--theme-popup-divider); // var(--global-surface-02-BorderColor);
|
||||
border-radius: var(--large-BorderRadius);
|
||||
box-shadow: var(--global-modal-ShadowX) var(--global-modal-ShadowY) var(--global-modal-ShadowBlur) var(--global-modal-ShadowSpread) var(--global-popover-ShadowColor);
|
||||
max-width: 90vw;
|
||||
|
||||
&.large {
|
||||
min-width: unset;
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {1 minuta před} other {# minut před}}",
|
||||
"HoursBefore": "{hours, plural, =1 {1 hodina před} other {# hodin před}}",
|
||||
"DaysBefore": "{days, plural, =1 {1 den před} other {# dní před}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Tschechisch",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "Japanisch",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {eine Minute vorher} other {# Minuten vorher}}",
|
||||
"HoursBefore": "{hours, plural, =1 {eine Stunde vorher} other {# Stunden vorher}}",
|
||||
"DaysBefore": "{days, plural, =1 {einen Tag vorher} other {# Tage vorher}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {a minute before} other {# minutes before}}",
|
||||
"HoursBefore": "{hours, plural, =1 {an hour before} other {# hours before}}",
|
||||
"DaysBefore": "{days, plural, =1 {a day before} other {# days before}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {un minuto antes} other {# minutos antes}}",
|
||||
"HoursBefore": "{hours, plural, =1 {una hora antes} other {# horas antes}}",
|
||||
"DaysBefore": "{days, plural, =1 {un día antes} other {# días antes}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {une minute avant} other {# minutes avant}}",
|
||||
"HoursBefore": "{hours, plural, =1 {une heure avant} other {# heures avant}}",
|
||||
"DaysBefore": "{days, plural, =1 {un jour avant} other {# jours avant}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {un minuto prima} other {# minuti prima}}",
|
||||
"HoursBefore": "{hours, plural, =1 {un'ora prima} other {# ore prima}}",
|
||||
"DaysBefore": "{days, plural, =1 {un giorno prima} other {# giorni prima}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {1分前} other {#分前}}",
|
||||
"HoursBefore": "{hours, plural, =1 {1時間前} other {#時間前}}",
|
||||
"DaysBefore": "{days, plural, =1 {1日前} other {#日前}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {um minuto antes} other {# minutos antes}}",
|
||||
"HoursBefore": "{hours, plural, =1 {uma hora antes} other {# horas antes}}",
|
||||
"DaysBefore": "{days, plural, =1 {um dia antes} other {# dias antes}}",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {за минуту} one {за # минуту} few {за # минуты} other {за # минут}}",
|
||||
"HoursBefore": "{hours, plural, =1 {за час} one {за # час} few {за # часа} other {за # часов}}",
|
||||
"DaysBefore": "{days, plural, =1 {за день} one {за # день} few {за # дня} other {за # дней}}",
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"string": {
|
||||
"EditBoxPlaceholder": "Metin yazın...",
|
||||
"Ok": "Tamam",
|
||||
"Cancel": "İptal",
|
||||
"Save": "Kaydet",
|
||||
"Publish": "Yayınla",
|
||||
"SaveDraft": "Taslak kaydet",
|
||||
"MinutesAgo": "{minutes, plural, =0 {bir dakikadan az önce} =1 {bir dakika önce} other {# dakika önce}}",
|
||||
"HoursAgo": "{hours, plural, =0 {bir saatten az önce} =1 {bir saat önce} other {# saat önce}}",
|
||||
"DaysAgo": "{days, plural, =0 {bugün} =1 {dün} other {# gün önce}}",
|
||||
"MonthsAgo": "{months, plural, =0 {bu ay} =1 {bir ay önce} other {# ay önce}}",
|
||||
"YearsAgo": "{years, plural, =0 {bu yıl} =1 {bir yıl önce} other {# yıl önce}}",
|
||||
"Minutes": "{minutes, plural, =0 {bir dakikadan az} =1 {bir dakika} other {# dakika}}",
|
||||
"Hours": "{hours, plural, =0 {bir saatten az} =1 {bir saat} other {# saat}}",
|
||||
"Days": "{days, plural, =0 {bugün} =1 {1 gün} other {# gün}}",
|
||||
"Weeks": "{weeks, plural, =0 {bu hafta} =1 {1 hafta} other {# hafta}}",
|
||||
"Months": "{months, plural, =0 {bu ay} =1 {1 ay} other {# ay}}",
|
||||
"Years": "{years, plural, =0 {bu yıl} =1 {bir yıl} other {# yıl}}",
|
||||
"Before": "Önce",
|
||||
"After": "Sonra",
|
||||
"MinutesShort": "{value}dk",
|
||||
"HoursShort": "{value}sa",
|
||||
"DaysShort": "{value}g",
|
||||
"ShowMore": "Daha fazla göster",
|
||||
"ShowLess": "Daha az göster",
|
||||
"Search": "Ara",
|
||||
"SearchDots": "Ara...",
|
||||
"SearchResults": "Arama Sonuçları",
|
||||
"Suggested": "Önerilen",
|
||||
"TimeTooltip": "{value}",
|
||||
"SelectDate": "Tarih seç",
|
||||
"None": "Hiçbiri",
|
||||
"NotSelected": "Seçilmedi",
|
||||
"Today": "Bugün",
|
||||
"NoDate": "Tarih yok",
|
||||
"StartDate": "Başlangıç tarihi",
|
||||
"TargetDate": "Hedef tarih",
|
||||
"Overdue": "Gecikmiş",
|
||||
"DueDate": "Bitiş tarihi",
|
||||
"AddDueDate": "Bitiş tarihi ekle",
|
||||
"SetDueDate": "Bitiş tarihi belirle",
|
||||
"EditDueDate": "Bitiş tarihini düzenle",
|
||||
"SaveDueDate": "Bitiş tarihini kaydet",
|
||||
"NeedsToBeCompletedByThisDate": "Bu tarihe kadar tamamlanmalı",
|
||||
"DueDatePopupTitle": "Bitiş: {value}",
|
||||
"DueDatePopupOverdueTitle": "Bitiş tarihiydi: {value}",
|
||||
"DueDatePopupDescription": "{value, plural, =0 {Bugün} =1 {Yarın} other {# gün kaldı}}",
|
||||
"DueDatePopupOverdueDescription": "{value, plural, =1 {1 gün gecikti} other {# gün gecikti}}",
|
||||
"English": "English",
|
||||
"Russian": "Русский",
|
||||
"Portuguese": "Português",
|
||||
"Spanish": "Español",
|
||||
"Chinese": "中文",
|
||||
"French": "Français",
|
||||
"Italian": "Italiano",
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {bir dakika önce} other {# dakika önce}}",
|
||||
"HoursBefore": "{hours, plural, =1 {bir saat önce} other {# saat önce}}",
|
||||
"DaysBefore": "{days, plural, =1 {bir gün önce} other {# gün önce}}",
|
||||
"WeeksBefore": "{weeks, plural, =1 {bir hafta önce} other {# hafta önce}}",
|
||||
"MonthsBefore": "{months, plural, =1 {bir ay önce} other {# ay önce}}",
|
||||
"MinutesAfter": "{minutes, plural, =1 {bir dakika sonra} other {# dakika sonra}}",
|
||||
"HoursAfter": "{hours, plural, =1 {bir saat sonra} other {# saat sonra}}",
|
||||
"DaysAfter": "{days, plural, =1 {bir gün sonra} other {# gün sonra}}",
|
||||
"WeeksAfter": "{weeks, plural, =1 {bir hafta sonra} other {# hafta sonra}}",
|
||||
"MonthsAfter": "{months, plural, =1 {bir ay sonra} other {# ay sonra}}",
|
||||
"NoActionsDefined": "Uygulanabilir işlem yok",
|
||||
"Incoming": "Gelen",
|
||||
"HoursLabel": "Saat",
|
||||
"Back": "Geri",
|
||||
"Next": "İleri",
|
||||
"DropdownDefaultLabel": "Öğe Seç",
|
||||
"DD": "GG",
|
||||
"MM": "AA",
|
||||
"YYYY": "YYYY",
|
||||
"HH": "SS",
|
||||
"Remove": "Kaldır",
|
||||
"NoResults": "Sonuç Yok",
|
||||
"MoreCount": "{count} daha",
|
||||
"Spacious": "Geniş",
|
||||
"Compact": "Kompakt",
|
||||
"ThemeLight": "Açık",
|
||||
"ThemeDark": "Koyu",
|
||||
"ThemeSystem": "Sistem",
|
||||
"NoTimeZonesFound": "Zaman dilimi bulunamadı",
|
||||
"Selected": "Seçildi:",
|
||||
"Submit": "Gönder",
|
||||
"NextStep": "Sonraki adım",
|
||||
"TypeHere": "Buraya yazın...",
|
||||
"NormalSize": "Normal boyut",
|
||||
"FullSize": "Tam boyut",
|
||||
"UseMaxWidth": "Maksimum genişlik",
|
||||
"Sidebar": "Kenar çubuğu",
|
||||
"FontSize": "Yazı boyutu",
|
||||
"Language": "Dil",
|
||||
"DaysWOValue": "{days, plural, =1 {gün} other {gün}}",
|
||||
"WeeksWOValue": "{weeks, plural, =1 {hafta} other {hafta}}",
|
||||
"MonthsWOValue": "{months, plural, =1 {ay} other {ay}}",
|
||||
"Filter": "Filtre",
|
||||
"Clear": "Temizle",
|
||||
"Yesterday": "Dün",
|
||||
"ThisWeek": "Bu hafta",
|
||||
"ThisMonth": "Bu ay",
|
||||
"ThisYear": "Bu yıl",
|
||||
"EmojiStyle": "Emoji Stili",
|
||||
"EmojiSystem": "Sistem Varsayılanı",
|
||||
"EmojiNoto": "Noto Color"
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,7 @@
|
||||
"Czech": "Čeština",
|
||||
"German": "Deutsch",
|
||||
"Japanese": "日本語",
|
||||
"Turkish": "Türkçe",
|
||||
"MinutesBefore": "{minutes, plural, =1 {一分钟前} other {# 分钟前}}",
|
||||
"HoursBefore": "{hours, plural, =1 {一小时前} other {# 小时前}}",
|
||||
"DaysBefore": "{days, plural, =1 {一天前} other {# 天前}}",
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
<!--
|
||||
// Copyright © 2025 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
|
||||
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
//
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { HeaderButtonAction, SelectPopupValueType } from '../types'
|
||||
import { checkPermission, Client, getCurrentAccount, hasAccountRole, TxOperations } from '@hcengineering/core'
|
||||
import { ButtonWithDropdown, Button, Loading, IconAdd, IconDropdown } from '../index'
|
||||
|
||||
export let mainActionId: number | string | null = null
|
||||
export let loading = false
|
||||
export let client: TxOperations & Client
|
||||
export let actions: HeaderButtonAction[] = []
|
||||
export let visibleActions: (string | number | null)[] = []
|
||||
|
||||
let allowedActions: HeaderButtonAction[] = []
|
||||
let items: HeaderButtonAction[] = []
|
||||
let mainAction: HeaderButtonAction | undefined = undefined
|
||||
$: filterVisibleActions(allowedActions, visibleActions)
|
||||
$: filterAllowedActions(actions).catch(() => {})
|
||||
|
||||
function filterVisibleActions (allowed: HeaderButtonAction[], visible: (string | number | null)[]): void {
|
||||
items = allowed.filter((action) => visible.includes(action.id))
|
||||
mainAction = items.find((a) => a.id === mainActionId)
|
||||
if (mainAction === undefined && items.length > 0) {
|
||||
mainAction = items[0]
|
||||
}
|
||||
}
|
||||
|
||||
async function filterAllowedActions (actions: HeaderButtonAction[]): Promise<SelectPopupValueType[]> {
|
||||
const result: HeaderButtonAction[] = []
|
||||
for (const action of actions) {
|
||||
if (await isActionAllowed(action)) {
|
||||
result.push(action)
|
||||
}
|
||||
action.keyBinding = await action.keyBindingPromise
|
||||
}
|
||||
allowedActions = result
|
||||
return result
|
||||
}
|
||||
|
||||
async function isActionAllowed (action: HeaderButtonAction): Promise<boolean> {
|
||||
if (action.accountRole === undefined && action.permissions === undefined) return true
|
||||
if (action.accountRole !== undefined && hasAccountRole(getCurrentAccount(), action.accountRole)) return true
|
||||
if (action.permissions !== undefined) {
|
||||
for (const permission of action.permissions) {
|
||||
if (await checkPermission(client, permission.id, permission.space)) return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if mainAction !== undefined}
|
||||
{#if loading}
|
||||
<Loading shrink />
|
||||
{:else}
|
||||
<div class="antiNav-subheader">
|
||||
{#if items.length === 1}
|
||||
<Button
|
||||
icon={IconAdd}
|
||||
justify="left"
|
||||
kind="primary"
|
||||
label={mainAction.label}
|
||||
width="100%"
|
||||
on:click={mainAction.callback}
|
||||
showTooltip={{
|
||||
direction: 'bottom',
|
||||
label: mainAction.label,
|
||||
keys: mainAction.keyBinding
|
||||
}}
|
||||
>
|
||||
<div slot="content" class="draft-circle-container">
|
||||
{#if mainAction.draft === true}
|
||||
<div class="draft-circle" />
|
||||
{/if}
|
||||
</div>
|
||||
</Button>
|
||||
{:else}
|
||||
<ButtonWithDropdown
|
||||
icon={IconAdd}
|
||||
justify={'left'}
|
||||
kind={'primary'}
|
||||
label={mainAction.label}
|
||||
dropdownItems={items}
|
||||
dropdownIcon={IconDropdown}
|
||||
on:dropdown-selected={(ev) => {
|
||||
items.find((a) => a.id === ev.detail)?.callback()
|
||||
}}
|
||||
on:click={mainAction.callback}
|
||||
mainButtonId={mainAction.id !== null ? String(mainAction.id).replaceAll(':', '-') : undefined}
|
||||
showTooltipMain={{
|
||||
direction: 'bottom',
|
||||
label: mainAction.label,
|
||||
keys: mainAction.keyBinding
|
||||
}}
|
||||
>
|
||||
<div slot="content" class="draft-circle-container">
|
||||
{#if mainAction.draft === true}
|
||||
<div class="draft-circle" />
|
||||
{/if}
|
||||
</div>
|
||||
</ButtonWithDropdown>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
<style lang="scss">
|
||||
.draft-circle-container {
|
||||
margin-left: auto;
|
||||
padding-right: 12px;
|
||||
}
|
||||
.draft-circle {
|
||||
height: 6px;
|
||||
width: 6px;
|
||||
background-color: var(--primary-bg-color);
|
||||
border-radius: 50%;
|
||||
}
|
||||
</style>
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
export let type: 'type-aside' | 'type-popup' | 'type-component'
|
||||
export let width: 'large' | 'medium' | 'small' | 'x-small' | 'menu' | undefined = undefined
|
||||
export let maxWidth: string | undefined = undefined
|
||||
export let label: IntlString | undefined = undefined
|
||||
export let labelProps: any | undefined = undefined
|
||||
export let okAction: () => Promise<void> | void = () => {}
|
||||
@@ -69,7 +70,12 @@
|
||||
|
||||
<svelte:window on:keydown={onKeyDown} />
|
||||
|
||||
<div class="hulyModal-container {type} {width ?? ''}" class:hidden class:noTopIndent>
|
||||
<div
|
||||
class="hulyModal-container {type} {width ?? ''}"
|
||||
class:hidden
|
||||
class:noTopIndent
|
||||
style={maxWidth ? `max-width: ${maxWidth};` : ''}
|
||||
>
|
||||
<Header
|
||||
{type}
|
||||
{adaptive}
|
||||
|
||||
@@ -56,6 +56,7 @@ export { getCurrentLocation, locationToUrl, navigate, location, setLocationStora
|
||||
export { default as EditBox } from './components/EditBox.svelte'
|
||||
export { default as Label } from './components/Label.svelte'
|
||||
export { default as Button } from './components/Button.svelte'
|
||||
export { default as HeaderButton } from './components/HeaderButton.svelte'
|
||||
export { default as ButtonWithDropdown } from './components/ButtonWithDropdown.svelte'
|
||||
export { default as ButtonGroup } from './components/ButtonGroup.svelte'
|
||||
export { default as FilterButton } from './components/FilterButton.svelte'
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
import type { Blob, Ref, Timestamp } from '@hcengineering/core'
|
||||
import type { AccountRole, Blob, Permission, Ref, Timestamp, TypedSpace } from '@hcengineering/core'
|
||||
import type {
|
||||
Asset,
|
||||
IntlString,
|
||||
@@ -519,6 +519,21 @@ export interface SelectPopupValueType {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface HeaderButtonAction extends SelectPopupValueType {
|
||||
callback: () => void
|
||||
keyBindingPromise?: Promise<string[] | undefined>
|
||||
keyBinding?: string[] | undefined
|
||||
draft?: boolean
|
||||
accountRole?: AccountRole
|
||||
permissions?: Array<{
|
||||
id: Ref<Permission>
|
||||
space: Ref<TypedSpace>
|
||||
}>
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"string": {
|
||||
"Achievements": "Başarılar",
|
||||
"EarliestAdopter": "İlk Kullanıcı",
|
||||
"Epic": "Destansı",
|
||||
"Legendary": "Efsanevi"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"string": {
|
||||
"Activity": "Aktivite",
|
||||
"Added": "eklendi",
|
||||
"All": "Tümü",
|
||||
"AllActivity": "Tüm aktiviteler",
|
||||
"Attributes": "Öznitelikler",
|
||||
"Changed": "Değiştirildi",
|
||||
"CollectionUpdated": "{collection} güncellendi",
|
||||
"Created": "Oluşturuldu",
|
||||
"DocAdded": "{_class} eklendi",
|
||||
"DocCreated": "{_class} oluşturuldu",
|
||||
"DocDeleted": "{_class} silindi",
|
||||
"Edit": "Düzenle",
|
||||
"Edited": "Düzenlendi",
|
||||
"Emoji": "Emoji",
|
||||
"For": "İçin",
|
||||
"From": "kaynak",
|
||||
"In": "İçinde",
|
||||
"At": "de",
|
||||
"LastReply": "Son yanıt",
|
||||
"New": "Yeni",
|
||||
"NewestFirst": "Önce en yeniler",
|
||||
"Pinned": "Sabitlendi",
|
||||
"Reacted": "Tepki verildi",
|
||||
"Reactions": "Tepkiler",
|
||||
"Reaction": "Tepki",
|
||||
"Removed": "kaldırıldı",
|
||||
"Replies": "Yanıtlar",
|
||||
"RepliesCount": "{replies, plural, =1 {# yanıt} other {# yanıt}}",
|
||||
"Set": "ayarlandı",
|
||||
"To": "hedef",
|
||||
"Unset": "Kaldırıldı",
|
||||
"Update": "Güncelle",
|
||||
"Updated": "Güncellendi",
|
||||
"UpdatedCollection": "Güncellendi",
|
||||
"Message": "Mesaj",
|
||||
"Mentioned": "Bahsedildi",
|
||||
"You": "Sen",
|
||||
"Mentions": "Bahsetmeler",
|
||||
"MentionedYouIn": "{title} içinde senden bahsetti",
|
||||
"Messages": "Mesajlar",
|
||||
"Thread": "Başlık",
|
||||
"AddReaction": "Tepki ekle",
|
||||
"SaveForLater": "Sonraya kaydet",
|
||||
"RemoveFromLater": "Kayıtlılardan kaldır",
|
||||
"ReactionNotificationTitle": "{title} üzerine tepki",
|
||||
"ReactionNotificationBody": "{senderName}: {reaction}",
|
||||
"NewObject": "Yeni {object}",
|
||||
"RemovedObject": "Kaldırılan {object}",
|
||||
"ChangedObject": "Değişen {object}",
|
||||
"UnsetObject": "Kaldırılan {object}",
|
||||
"UpdatedObject": "Güncellenen {object}",
|
||||
"NewObjectType": "Yeni {type}: {title}",
|
||||
"RemovedObjectType": "Kaldırılan {type}: {title}",
|
||||
"AddedTag": "Etiket eklendi: {title}",
|
||||
"RemovedTag": "Etiket kaldırıldı: {title}",
|
||||
"AttributeSetTo": "{name}, {value} olarak ayarlandı",
|
||||
"ValueTooLarge": "Değer görüntülenemeyecek kadar büyük"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"string": {
|
||||
"IntegrationLabel": "AI Asistan",
|
||||
"IntegrationDescription": "Platformdaki günlük iş akışınızı düzenlemeye, otomatikleştirmeye ve kolaylaştırmaya yardımcı olan yapay zeka destekli kişisel asistanınız",
|
||||
"ConfigLabel": "AI Asistan",
|
||||
"ConfigDescription": "Yapay zeka destekli kişisel asistan",
|
||||
"Connect": "Bağlan",
|
||||
"Cancel": "İptal",
|
||||
"Status": "Durum",
|
||||
"FailedToConnect": "AI Asistan servisi kullanılamıyor",
|
||||
"Configure": "AI Asistanı Yapılandır"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"string": {
|
||||
"OnboardingChannelDescription": "Kullanıcı: {user}; Çalışma alanı: {workspace}",
|
||||
"Error": "Hata: ",
|
||||
"InProject": " projede ",
|
||||
"NavigateToSpecial": "{app}: {special} aç",
|
||||
"OpenSpecial": "{special} aç ",
|
||||
"Set": "Ayarla ",
|
||||
"To": " değerine ",
|
||||
"Open": "aç ",
|
||||
"Workbench": "Çalışma Masası: ",
|
||||
"OnboardingChannel": "Karşılama Kanalı",
|
||||
"OnboardingChannels": "Karşılama Kanalları",
|
||||
"WorkspaceId": "Çalışma alanı id",
|
||||
"WorkspaceName": "Çalışma alanı adı",
|
||||
"WorkspaceUrl": "Çalışma alanı url",
|
||||
"Account": "Hesap",
|
||||
"UserName": "Kullanıcı adı",
|
||||
"DisableAIReplies": "AI yanıtlarını devre dışı bırak",
|
||||
"ShowAIReplies": "AI yanıtlarını göster"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"string": {
|
||||
"UploadDropFilesHere": "Dosyaları yükleyin veya buraya sürükleyin",
|
||||
"NoAttachments": "Buna ait ek yok",
|
||||
"NoParticipants": "Katılımcı eklenmedi",
|
||||
"AddAttachment": "ek yüklendi",
|
||||
"Attachments": "Ekler",
|
||||
"Photos": "Fotoğraflar",
|
||||
"File": "Dosya",
|
||||
"Files": "Dosyalar",
|
||||
"NoFiles": "Dosya yok",
|
||||
"ShowMoreAttachments": "Daha fazla göster",
|
||||
"Type": "Tip",
|
||||
"Size": "Boyut",
|
||||
"Photo": "Fotoğraf",
|
||||
"Date": "Tarih",
|
||||
"LastModified": "Son Değiştirilme",
|
||||
"Name": "İsim",
|
||||
"FileBrowser": "Dosya tarayıcı",
|
||||
"FileBrowserFileCounter": "{results, plural, =1 {# sonuç} other {# sonuç}}",
|
||||
"FileBrowserListView": "Liste",
|
||||
"FileBrowserGridView": "Izgara",
|
||||
"FileBrowserFilterFrom": "Kimden",
|
||||
"FileBrowserFilterIn": "İçinde",
|
||||
"FileBrowserFilterDate": "Tarih",
|
||||
"FileBrowserFilterFileType": "Dosya tipi",
|
||||
"FileBrowserSort": "Sırala",
|
||||
"FileBrowserSortNewest": "En yeni dosya",
|
||||
"FileBrowserSortOldest": "En eski dosya",
|
||||
"FileBrowserSortAZ": "A'dan Z'ye",
|
||||
"FileBrowserSortZA": "Z'den A'ya",
|
||||
"FileBrowserSortSmallest": "En küçük dosya",
|
||||
"FileBrowserSortBiggest": "En büyük dosya",
|
||||
"FileBrowserDateFilterAny": "Herhangi bir zaman",
|
||||
"FileBrowserDateFilterToday": "Bugün",
|
||||
"FileBrowserDateFilterYesterday": "Dün",
|
||||
"FileBrowserDateFilter7Days": "Son 7 gün",
|
||||
"FileBrowserDateFilter30Days": "Son 30 gün",
|
||||
"FileBrowserDateFilter3Months": "Son 3 ay",
|
||||
"FileBrowserDateFilter12Months": "Son 12 ay",
|
||||
"FileBrowserTypeFilterAny": "Herhangi bir dosya tipi",
|
||||
"FileBrowserTypeFilterImages": "Görseller",
|
||||
"FileBrowserTypeFilterAudio": "Ses",
|
||||
"FileBrowserTypeFilterVideos": "Videolar",
|
||||
"FileBrowserTypeFilterPDFs": "PDF'ler",
|
||||
"AddAttachmentToSaved": "Eki kayıtlılara ekle",
|
||||
"RemoveAttachmentFromSaved": "Eki kayıtlılardan kaldır",
|
||||
"DeleteFile": "Dosyayı sil",
|
||||
"Description": "Açıklama",
|
||||
"Pinned": "Önemli",
|
||||
"PinAttachment": "Önemli olarak işaretle",
|
||||
"UnPinAttachment": "Daha az önemli olarak işaretle",
|
||||
"FilterAttachments": "Ekler",
|
||||
"RemovedAttachment": "Ek kaldırıldı",
|
||||
"ContentType": "İçerik türü",
|
||||
"OpenInWindow": "Pencerede aç",
|
||||
"Embeddings": "Gömülü içerikler"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"string": {
|
||||
"Billing": "Faturalama",
|
||||
"DriveSize": "Dosya boyutu",
|
||||
"DriveCount": "Dosya sayısı",
|
||||
"OfficeSessionsDuration": "Toplantı süresi",
|
||||
"OfficeSessionsBandwidth": "Toplantı bant genişliği",
|
||||
"OfficeEgressDuration": "Kayıt süresi"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"string": {
|
||||
"BitrixTokenUrl": "Bitrix24 Token Url",
|
||||
"Bitrix": "",
|
||||
"BitrixDesc": "Bitrix 24 entegrasyonu",
|
||||
"Settings": "Yapılandır",
|
||||
"NotAllowed": "Yönetici hakları olmadan izin verilmiyor",
|
||||
"BitrixEntityType": "Varlık eşleştirmesi",
|
||||
"FieldMapping": "Alan eşleştirmesi",
|
||||
"AddField": "Eşleştirme ekle",
|
||||
"Attribute": "Öznitelik",
|
||||
"MapField": "Eşleştir...",
|
||||
"BitrixImport": "Bitrix ile senkronize et",
|
||||
"AddMapping": "Varlık eşleştirmesi ekle",
|
||||
"ConfigLabel": "Bitrix24",
|
||||
"ConfigDescription": "Bitrix 24 entegrasyonu için uzantı"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"string": {
|
||||
"Completed": "Tamamlandı",
|
||||
"Name": "İsim",
|
||||
"CreateBoard": "Pano oluştur",
|
||||
"OpenCard": "Kartı Aç",
|
||||
"CreateCard": "Kart oluştur",
|
||||
"CardName": "Kart adı",
|
||||
"Cards": "Kartlar",
|
||||
"SelectBoard": "Pano seç",
|
||||
"More": "Daha fazla...",
|
||||
"Title": "Başlık",
|
||||
"ManageBoardStatuses": "Pano durumlarını yönet",
|
||||
"BoardName": "Pano",
|
||||
"CardCreateLabel": "Kart",
|
||||
"CardPlaceholder": "Kart yer tutucusu",
|
||||
"Board": "Pano",
|
||||
"Boards": "Panolar",
|
||||
"MyBoards": "Panolarım",
|
||||
"BoardApplication": "Panolar",
|
||||
"Card": "Kart",
|
||||
"Assignee": "Atanan",
|
||||
"Description": "Açıklama",
|
||||
"DescriptionPlaceholder": "Daha detaylı bir açıklama ekleyin...",
|
||||
"Location": "Konum",
|
||||
"Members": "Üyeler",
|
||||
"IsArchived": "Arşivlendi",
|
||||
"BoardCreateLabel": "Pano",
|
||||
"Settings": "Ayarlar",
|
||||
"Suggested": "Önerilen",
|
||||
"Labels": "Etiketler",
|
||||
"CreateLabel": "Yeni etiket oluştur",
|
||||
"SearchLabels": "Etiket ara...",
|
||||
"SelectColor": "Renk seç",
|
||||
"NoColor": "Renk yok.",
|
||||
"NoColorInfo": "Bu, kartların önünde görünmeyecek.",
|
||||
"Checklists": "Kontrol listeleri",
|
||||
"ChecklistDropdownNone": "(hiçbiri)",
|
||||
"ShowDoneChecklistItems": "İşaretli öğeleri göster ({done})",
|
||||
"HideDoneChecklistItems": "İşaretli öğeleri gizle",
|
||||
"CopyChecklistFrom": "Öğeleri kopyala...",
|
||||
"Dates": "Tarihler",
|
||||
"Attachments": "Ekler",
|
||||
"AddAttachment": "Ek ekle",
|
||||
"DropFileToUpload": "Yüklemek için dosyaları bırakın.",
|
||||
"AttachFrom": "Buradan ekle...",
|
||||
"AttachmentTip": "İpucu: Dosyaları yüklemek için kartların üzerine sürükleyip bırakabilirsiniz.",
|
||||
"Computer": "Bilgisayar",
|
||||
"CustomFields": "Özel Alanlar",
|
||||
"AddButton": "Düğme Ekle",
|
||||
"Actions": "İşlemler",
|
||||
"Cover": "Kapak",
|
||||
"Join": "Katıl",
|
||||
"Move": "Taşı",
|
||||
"Copy": "Kopyala",
|
||||
"MakeTemplate": "Şablon Yap",
|
||||
"Archive": "Arşivle",
|
||||
"SendToBoard": "Panoya gönder",
|
||||
"Delete": "Sil",
|
||||
"HideDetails": "Detayları Gizle",
|
||||
"ShowDetails": "Detayları Göster",
|
||||
"NewList": "Başka liste ekle",
|
||||
"AddList": "Liste ekle",
|
||||
"NewListPlaceholder": "Liste başlığı girin...",
|
||||
"AddACard": "Kart ekle",
|
||||
"AddCard": "Kart ekle",
|
||||
"CardTitlePlaceholder": "Bu kart için başlık girin...",
|
||||
"MoveCard": "Kartı taşı",
|
||||
"SelectDestination": "Hedef seç",
|
||||
"Create": "Oluştur",
|
||||
"CreateDescription": "İsterseniz, her yeni satır ({number}) için bir kart oluşturabiliriz. Ayrıca uzun başlıklı tek bir kart oluşturabilirsiniz.",
|
||||
"CreateSingle": "Sadece bir kart",
|
||||
"CreateMultiple": "{number} kart oluştur",
|
||||
"Cancel": "İptal",
|
||||
"List": "Liste",
|
||||
"Position": "Pozisyon",
|
||||
"Current": "{label} (mevcut)",
|
||||
"Save": "Kaydet",
|
||||
"Remove": "Kaldır",
|
||||
"NullDate": "G/A/YYYY",
|
||||
"ViewProfile": "Profili görüntüle",
|
||||
"RemoveFromCard": "Karttan kaldır",
|
||||
"LinkName": "Bağlantı adı",
|
||||
"Edit": "Düzenle",
|
||||
"Update": "Güncelle",
|
||||
"DeleteAttachment": "Ek silme kalıcıdır. Geri alma yoktur.",
|
||||
"DeleteCard": "Tüm işlemler aktivite akışından kaldırılacak ve kartı yeniden açamazsınız. Geri alma yoktur.",
|
||||
"SearchMembers": "Üye ara",
|
||||
"Menu": "Menü",
|
||||
"ShowMenu": "Menüyü göster",
|
||||
"ToArchive": "Arşivle",
|
||||
"CopyCard": "Kartı kopyala",
|
||||
"AlsoCopy": "Koru...",
|
||||
"CopyTo": "Kopyala...",
|
||||
"NoResults": "Sonuç yok",
|
||||
"SwitchToLists": "Listelere geç",
|
||||
"SwitchToCards": "Kartlara geç",
|
||||
"SearchArchive": "Arşivi ara...",
|
||||
"Size": "Boyut",
|
||||
"RemoveCover": "Kapağı kaldır",
|
||||
"DeleteChecklist": "Kontrol listesini sil",
|
||||
"DeleteChecklistConfirm": "Kontrol listesini silme kalıcıdır ve geri almanın yolu yoktur.",
|
||||
"ConvertToCard": "Karta dönüştür",
|
||||
"ConfigLabel": "Pano",
|
||||
"ConfigDescription": "Kanban panolarını yönetmek için uzantı."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"string": {
|
||||
"ApplicationLabelCalendar": "Takvim",
|
||||
"Calendars": "Takvimler",
|
||||
"Participants": "Katılımcılar",
|
||||
"NoParticipants": "Katılımcı eklenmedi",
|
||||
"PersonsLabel": "{name}",
|
||||
"AddDescription": "Açıklama ekle",
|
||||
"Date": "Tarih",
|
||||
"DueTo": "Bitiş tarihi",
|
||||
"Description": "Açıklama",
|
||||
"Title": "Başlık",
|
||||
"Location": "Konum",
|
||||
"Company": "Şirket",
|
||||
"CreateCalendar": "Takvim Oluştur",
|
||||
"Calendar": "Takvim",
|
||||
"Events": "Etkinlikler",
|
||||
"Event": "Etkinlik",
|
||||
"ModeDay": "Gün",
|
||||
"ModeWeek": "Hafta",
|
||||
"ModeMonth": "Ay",
|
||||
"ModeYear": "Yıl",
|
||||
"Today": "Bugün",
|
||||
"TableView": "Tablo",
|
||||
"DueMinutes": "{minutes, plural, =0 {bir dakikadan az} =1 {bir dakika} other {# dakika}}",
|
||||
"DueHours": "{hours, plural, =0 {bir saatten az} =1 {1 saat} other {# saat}}",
|
||||
"DueDays": "{days, plural, =0 {bugün} =1 {1 gün} other {# gün}}",
|
||||
"Reminder": "Hatırlatıcı",
|
||||
"ReminderTime": "Hatırlatıcı zamanı",
|
||||
"RemindMeAt": "Bana hatırlat:",
|
||||
"CreateReminder": "Hatırlatıcı oluştur",
|
||||
"CreatedReminder": "Hatırlatıcı oluşturuldu",
|
||||
"Reminders": "Hatırlatıcılar",
|
||||
"Shift": "Vardiya",
|
||||
"State": "Durum",
|
||||
"NoReminders": "Hatırlatıcı yok",
|
||||
"AllDay": "Tüm gün",
|
||||
"AndMore": "Ve {count} daha",
|
||||
"CreateEvent": "Etkinlik oluştur",
|
||||
"EventFor": "Etkinlik:",
|
||||
"ConfigLabel": "Takvim",
|
||||
"ConfigDescription": "Etkinliklerle takvim görmek için uzantı",
|
||||
"HideDetails": "Detayları gizle",
|
||||
"ReccuringEvent": "Tekrarlanan etkinlik",
|
||||
"ExternalParticipants": "Harici katılımcılar",
|
||||
"IntegrationDescr": "Etkinlikleri ve görevleri Google Takvim ile senkronize edin",
|
||||
"Connect": "Bağlan",
|
||||
"RedirectGoogle": "Google kimlik doğrulama sayfasına yönlendirileceksiniz. Lütfen tüm izinleri seçtiğinizden emin olun.",
|
||||
"ConnectCalendar": "Google Takvim hesabını bağla",
|
||||
"EditRecEvent": "Tekrarlanan etkinliği düzenle",
|
||||
"RemoveRecEvent": "Tekrarlanan etkinliği kaldır",
|
||||
"ThisEvent": "Bu etkinlik",
|
||||
"ThisAndNext": "Bu ve sonraki etkinlikler",
|
||||
"AllEvents": "Tüm etkinlikler",
|
||||
"EventTitlePlaceholder": "Etkinlik başlığı",
|
||||
"TimeZone": "Saat dilimi",
|
||||
"Repeat": "Tekrarla",
|
||||
"On": "Açık",
|
||||
"Every": "Her",
|
||||
"After": "Sonra",
|
||||
"Ends": "Biter",
|
||||
"Never": "Asla",
|
||||
"Day": "Gün",
|
||||
"Week": "Hafta",
|
||||
"Month": "Ay",
|
||||
"Year": "Yıl",
|
||||
"MondayShort": "Pt",
|
||||
"TuesdayShort": "Sa",
|
||||
"WednesdayShort": "Ça",
|
||||
"ThursdayShort": "Pe",
|
||||
"FridayShort": "Cu",
|
||||
"SaturdayShort": "Ct",
|
||||
"SundayShort": "Pa",
|
||||
"OnUntil": "Açık",
|
||||
"Times": "{count, plural, one {kez} other {kez}}",
|
||||
"AddParticipants": "Katılımcı ekle",
|
||||
"Sync": "Senkronizasyon",
|
||||
"Busy": "Meşgul",
|
||||
"AddReminder": "Hatırlatıcı ekle",
|
||||
"SeeAllNumberParticipants": "{value, plural, other {Tüm # katılımcıyı gör}}",
|
||||
"SeeAllNumberReminders": "{value, plural, other {Tüm # hatırlatıcıyı gör}}",
|
||||
"Visibility": "Görünürlük",
|
||||
"Private": "Sadece size görünür",
|
||||
"Public": "Herkese görünür",
|
||||
"FreeBusy": "Uygunluk Durumu",
|
||||
"DefaultVisibility": "Varsayılan görünürlük",
|
||||
"NotAllPermissions": "Tüm izinler verilmedi",
|
||||
"GooglePrivacy": "Huly'nin Google API'lerinden aldığı bilgilerin kullanımı ve diğer uygulamalara aktarımı, Sınırlı Kullanım gereksinimleri dahil olmak üzere <a href=\"https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes\" target=\"_blank\">Google API Hizmetleri Kullanıcı Verileri Politikası</a>'na uyacaktır.",
|
||||
"Value": "{value}",
|
||||
"Schedule": "Genel program",
|
||||
"ScheduleNew": "Program ekle",
|
||||
"ScheduleDeleteConfirm": "Program silinecek. Onaylıyor musunuz?",
|
||||
"ScheduleShareLink": "Bağlantıyı paylaş",
|
||||
"ScheduleSharedLinkMessage": "<p>Başkalarının sizinle toplantı ayarlamasına izin vermek için bu bağlantıyı paylaşın:</p><p><a href=\"{link}\" target=\"_blank\">{link}</a></p>",
|
||||
"ScheduleAvailability": "Uygunluk",
|
||||
"ScheduleUnavailable": "Uygun değil",
|
||||
"ScheduleTitlePlaceholder": "Program başlığı",
|
||||
"ScheduleAddPeriod": "Dönem ekle",
|
||||
"ScheduleRemovePeriod": "Dönem kaldır",
|
||||
"MeetingDuration": "Toplantı süresi",
|
||||
"MeetingInterval": "Toplantılar arası mola",
|
||||
"CalDavAccess": "CalDAV erişimi",
|
||||
"CalDavAccessPrompt": "CalDAV protokolü, kişisel Huly takviminizi harici takvim uygulamalarıyla senkronize etmenizi sağlar. Bir takvim istemci uygulamasında Huly CalDAV sunucusunu kaydetmek için bu hesabı ve önerilen şifreyi kullanın.",
|
||||
"CalDavAccessEnable": "{ws} çalışma alanındaki kişisel takvime CalDAV erişimini etkinleştir",
|
||||
"CalDavAccessServer": "CalDAV sunucusu",
|
||||
"CalDavAccessAccount": "Huly hesabı",
|
||||
"CalDavAccessPassword": "Şifre",
|
||||
"CalDavAccessPasswordWarning": "Bu şifreyi bir daha göremeyeceksiniz. Lütfen güvenli bir yere kaydedin.",
|
||||
"MeetingScheduledNotification": "Toplantı planlandı",
|
||||
"MeetingRescheduledNotification": "Toplantı zamanı değişti",
|
||||
"MeetingCanceledNotification": "Toplantı iptal edildi: {title}",
|
||||
"PrimaryCalendar": "Birincil takvim",
|
||||
"Hidden": "Gizli",
|
||||
"Each": "Her",
|
||||
"OnThe": "Şu tarihte:",
|
||||
"First": "İlk",
|
||||
"Second": "İkinci",
|
||||
"Third": "Üçüncü",
|
||||
"Fourth": "Dördüncü",
|
||||
"Fifth": "Beşinci",
|
||||
"NextToLast": "Sondan bir önceki",
|
||||
"Last": "Son",
|
||||
"Weekday": "Hafta içi günü",
|
||||
"WeekendDay": "Hafta sonu günü",
|
||||
"SynchronizedCalendars": "Senkronize takvimler",
|
||||
"Account": "Hesap",
|
||||
"NoCalendars": "Senkronizasyon için takvim seçilmedi"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"string": {
|
||||
"Card": "Kart",
|
||||
"CardApplication": "Kartlar (beta)",
|
||||
"Cards": "Kartlar",
|
||||
"Content": "İçerik",
|
||||
"CreateCard": "Kart Oluştur",
|
||||
"CreateMasterTag": "Tip Oluştur",
|
||||
"CreateTag": "Etiket Oluştur",
|
||||
"MasterTag": "Tip",
|
||||
"MasterTags": "Tipler",
|
||||
"Parent": "Üst",
|
||||
"Tags": "Etiketler",
|
||||
"Tag": "Etiket",
|
||||
"AddTag": "Etiket Ekle",
|
||||
"CardLibrary": "Kart Kütüphanesi",
|
||||
"MinimizeAll": "Tümünü Küçült",
|
||||
"ExpandAll": "Tümünü Genişlet",
|
||||
"DeleteTag": "Etiketi Sil",
|
||||
"TagRelations": "Etiket İlişkileri",
|
||||
"DeleteTagConfirm": "Bu etiketi silmek istediğinizden emin misiniz? İlgili tüm özellikler silinecektir",
|
||||
"DeleteMasterTag": "Tipi Sil",
|
||||
"DeleteMasterTagConfirm": "Bu tipi silmek istediğinizden emin misiniz? Bu tiple ilgili tüm nesneler silinecektir",
|
||||
"UnsetParent": "Üst öğeyi kaldır",
|
||||
"SetParent": "Üst öğe belirle",
|
||||
"CreateChild": "Alt öğe oluştur",
|
||||
"Children": "Alt öğeler",
|
||||
"Views": "Görünümler",
|
||||
"CreateView": "Görünüm Oluştur",
|
||||
"EditView": "Görünümü Düzenle",
|
||||
"SelectViewType": "Görünüm Tipi Seç",
|
||||
"Document": "Doküman",
|
||||
"Documents": "Dokümanlar",
|
||||
"ChangeType": "Tip değiştir",
|
||||
"ChangeTypeWarning": "Uyarı: Bir Kartın Tipini değiştirmek, hedef Tipte bulunmayan öznitelikler için tüm verileri kaldıracaktır. Önceki öznitelik verileri, Kartı önceki Tipe geri değiştirerek geri yüklenebilir. Kart içeriği etkilenmeyecektir.",
|
||||
"MasterDetailViews": "Ana Detay Görünümleri",
|
||||
"SelectType": "Tip Seç",
|
||||
"CreateSpace": "Alan oluştur",
|
||||
"NumberTypes": "{count, plural, one {# tip} other {# tip}}",
|
||||
"Labels": "Etiketler",
|
||||
"Properties": "Özellikler",
|
||||
"NoChildren": "Alt öğe yok",
|
||||
"ConfigDescription": "Veritabanı tarzı bilgi yönetimi için uzantı.",
|
||||
"AddCollaborators": "İşbirlikçi ekle",
|
||||
"CardTitle": "Başlık",
|
||||
"Post": "Gönderi",
|
||||
"GetIndividualPublicLink": "Kişiselleştirilmiş genel bağlantı al",
|
||||
"ShowLess": "Daha az göster",
|
||||
"CardContent": "Ne paylaşmak istiyorsunuz?",
|
||||
"Feed": "Akış",
|
||||
"AllCards": "Tüm Kartlar"
|
||||
}
|
||||
}
|
||||
@@ -151,6 +151,7 @@
|
||||
okLoading={creating}
|
||||
canSave={data.title != null && data.title.trim().length > 0 && _space != null}
|
||||
onCancel={handleCancel}
|
||||
maxWidth="90vw"
|
||||
on:close
|
||||
>
|
||||
<div class="hulyModal-content__titleGroup" style="padding: 0">
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"string": {
|
||||
"Channel": "Kanal",
|
||||
"Channels": "Kanallar",
|
||||
"Chat": "Sohbet",
|
||||
"Description": "Açıklama",
|
||||
"Loading": "Yükleniyor...",
|
||||
"MessageIn": "#{title} içinde mesaj",
|
||||
"Thread": "Başlık",
|
||||
"Threads": "Başlıklar",
|
||||
"Title": "Başlık",
|
||||
"All": "Tüm güncellemeler",
|
||||
"Inbox": "Gelen Kutusu",
|
||||
"ReactedToYourMessage": "mesajınıza tepki verdi",
|
||||
"ClearAll": "Tümünü temizle",
|
||||
"InboxIsClear": "Gelen kutusu temiz",
|
||||
"YouDontHaveAnyNewMessages": "Yeni mesajınız yok"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"string": {
|
||||
"ApplicationLabelChunter": "Sohbet",
|
||||
"LeftComment": "yorum bıraktı",
|
||||
"Channels": "Kanallar",
|
||||
"DirectMessages": "Direkt mesajlar",
|
||||
"CreateChannel": "Yeni Kanal",
|
||||
"NewDirectMessage": "Yeni Direkt Mesaj",
|
||||
"ChannelName": "İsim",
|
||||
"ChannelNamePlaceholder": "Kanal",
|
||||
"ChannelDescription": "Açıklama",
|
||||
"Channel": "Kanal",
|
||||
"DirectMessage": "Direkt mesaj",
|
||||
"EditUpdate": "Kaydet...",
|
||||
"EditCancel": "İptal",
|
||||
"Comments": "Yorumlar",
|
||||
"About": "Hakkında",
|
||||
"Members": "Üyeler",
|
||||
"NoMembers": "Üye yok",
|
||||
"MentionedIn": "Senden bahsetti: ",
|
||||
"Mentioned": "Bahsedildi",
|
||||
"ContactInfo": "İletişim Bilgisi",
|
||||
"Content": "İçerik",
|
||||
"Comment": "Yorum",
|
||||
"Message": "Mesaj",
|
||||
"MessageOn": "Mesaj tarihi",
|
||||
"On": "tarihinde",
|
||||
"Reference": "Referans",
|
||||
"Chat": "Sohbet",
|
||||
"In": "İçinde",
|
||||
"MentionNotification": "Bahsedildi",
|
||||
"Topic": "Konu",
|
||||
"Thread": "Başlık",
|
||||
"Threads": "Başlıklar",
|
||||
"New": "Yeni",
|
||||
"MarkUnread": "Okunmadı olarak işaretle",
|
||||
"GetNewReplies": "Yeni yanıtlardan haberdar ol",
|
||||
"TurnOffReplies": "Yanıt bildirimlerini kapat",
|
||||
"PinMessage": "Mesajı sabitle",
|
||||
"UnpinMessage": "Sabitleneni kaldır",
|
||||
"Pinned": "Sabitlendi",
|
||||
"EditMessage": "Mesajı düzenle",
|
||||
"Edited": "düzenlendi",
|
||||
"DeleteMessage": "Mesajı sil",
|
||||
"AndYou": "{participants, plural, =0 {Sadece sen} other {ve sen}}",
|
||||
"ShowMoreReplies": "{count} yanıt daha göster",
|
||||
"Settings": "Ayarlar",
|
||||
"ArchiveChannel": "Kanalı arşivle",
|
||||
"UnarchiveChannel": "Arşivden çıkar",
|
||||
"ArchiveConfirm": "Bir kanalı arşivlediğinizde, herkes için arşivlenir.<br/><br/>Kimse mesaj gönderemez, ancak kanalın geçmişine erişim devam eder.<br/><br/>Kanalın içeriğini arama yoluyla bulabilirsiniz.<br/>Ve gerekirse gelecekte kanalı arşivden çıkarabilirsiniz.\n",
|
||||
"UnarchiveConfirm": "Kanalı arşivden çıkarmak istiyor musunuz?",
|
||||
"AddToSaved": "Kayıtlılara ekle",
|
||||
"RemoveFromSaved": "Kayıtlılardan kaldır",
|
||||
"EmptySavedHeader": "Daha sonra dönmek için mesajlar ekleyin",
|
||||
"EmptySavedText": "Yapılacaklarınızı işaretleyin veya bir şeyi başka bir zamana kaydedin. Kayıtlı öğelerinizi sadece siz görebilirsiniz, bu yüzden istediğiniz gibi kullanın.",
|
||||
"SharedBy": "{name} tarafından {time} paylaşıldı",
|
||||
"LeaveChannel": "Kanaldan ayrıl",
|
||||
"ChannelBrowser": "Kanal tarayıcı",
|
||||
"Saved": "Kayıtlı",
|
||||
"ConvertToPrivate": "Özel kanala dönüştür",
|
||||
"MessagesBrowser": "Mesaj tarayıcı",
|
||||
"CreateBy": "Oluşturan",
|
||||
"ThreadMessage": "Başlık mesajı",
|
||||
"ChunterBrowser": "Tarayıcı",
|
||||
"Messages": "Mesajlar",
|
||||
"NoResults": "Sonuç yok",
|
||||
"CopyLink": "Bağlantıyı kopyala",
|
||||
"FilterBacklinks": "Geri bağlantılar",
|
||||
"DM": "Direkt mesaj",
|
||||
"DMNotification": "Size mesaj gönderdi",
|
||||
"ConfigLabel": "Sohbet",
|
||||
"ConfigDescription": "Metin iletişimi gerçekleştirmek için uzantı",
|
||||
"LastMessage": "Son mesaj",
|
||||
"You": "Sen",
|
||||
"YouHaveJoinedTheConversation": "Sohbete katıldınız",
|
||||
"NoMessages": "Henüz mesaj yok",
|
||||
"DirectNotificationTitle": "{senderName}",
|
||||
"DirectNotificationBody": "{message}",
|
||||
"MessageNotificationBody": "{senderName}: {message}",
|
||||
"AddCommentPlaceholder": "Yorum ekle...",
|
||||
"Reacted": "Tepki verildi",
|
||||
"Docs": "Dokümanlar",
|
||||
"NewestFirst": "Önce en yeniler",
|
||||
"ReplyToThread": "Başlığa yanıt ver",
|
||||
"SentMessage": "Mesaj gönderildi",
|
||||
"Direct": "Direkt",
|
||||
"RepliedToThread": "Başlığa yanıt verildi",
|
||||
"RepliedTo": "yanıtlandı: {message}",
|
||||
"AllChannels": "Tüm kanallar",
|
||||
"AllContacts": "Tüm kişiler",
|
||||
"NewChannel": "Yeni kanal",
|
||||
"TopicOptional": "Konu (opsiyonel)",
|
||||
"Visibility": "Görünürlük",
|
||||
"Public": "Genel",
|
||||
"Private": "Özel",
|
||||
"NewDirectChat": "Yeni direkt sohbet",
|
||||
"AddMembers": "Üye ekle",
|
||||
"PinnedCount": "{count} sabitlendi",
|
||||
"LoadingHistory": "Geçmiş yükleniyor...",
|
||||
"UnpinChannels": "Tüm kanalların sabitlemesini kaldır",
|
||||
"ArchiveActivityConfirmationTitle": "Tüm aktivite kanallarını arşivle?",
|
||||
"ArchiveActivityConfirmationMessage": "Tüm aktivite kanallarını arşivlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
|
||||
"CloseConversation": "Sohbeti kapat",
|
||||
"Starred": "Yıldızlı",
|
||||
"DeleteStarred": "Yıldızlıyı sil",
|
||||
"StarChannel": "Kanalı yıldızla",
|
||||
"StarConversation": "Sohbeti yıldızla",
|
||||
"UnstarChannel": "Kanal yıldızını kaldır",
|
||||
"UnstarConversation": "Sohbet yıldızını kaldır",
|
||||
"JoinChannelHeader": "Başlamak için \"Katıl\"a tıklayın.",
|
||||
"JoinChannelText": "Katıldıktan sonra tüm mesajları okuyabilir ve tartışmaya katkıda bulunabilirsiniz.",
|
||||
"NoMessagesInChannel": "Şu anda mesaj yok",
|
||||
"SendMessagesInChannel": "Sohbeti başlatmak için ilk mesajı gönderin",
|
||||
"LatestMessages": "↓ Son mesajlar",
|
||||
"Joined": "Katıldı",
|
||||
"Left": "Ayrıldı",
|
||||
"Added": "Eklendi",
|
||||
"Removed": "Kaldırıldı",
|
||||
"CreatedChannelOn": "Bu kanal {date} tarihinde oluşturuldu",
|
||||
"ChannelMessages": "Kanal mesajları",
|
||||
"JoinChannel": "Kanala katıl",
|
||||
"YouJoinedChannel": "Kanala katıldınız",
|
||||
"AndMore": "ve {count} daha",
|
||||
"IsTyping": "{count, plural, =1 {yazıyor} other {yazıyorlar}}...",
|
||||
"ThreadIn": "{name} içinde başlık",
|
||||
"TranslateMessage": "Mesajı çevir",
|
||||
"Translate": "Çevir",
|
||||
"ShowOriginal": "Orijinali göster",
|
||||
"Translating": "Çevriliyor...",
|
||||
"StartConversation": "Sohbet başlat",
|
||||
"ViewingThreadFromArchivedChannel": "Arşivlenmiş bir kanaldan başlık görüntülüyorsunuz",
|
||||
"ViewingArchivedChannel": "Arşivlenmiş bir kanal görüntülüyorsunuz",
|
||||
"OpenChatInSidebar": "Sohbeti kenar çubuğunda aç",
|
||||
"ResolveThread": "Çöz",
|
||||
"NoThreadsYet": "Henüz başlık yok.",
|
||||
"SummarizeMessages": "Tartışmayı özetle"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"string": {
|
||||
"Messages": "Mesajlar",
|
||||
"FirstMessages": "İlk mesajlar",
|
||||
"LatestMessages": "Son mesajlar",
|
||||
"Subscribe": "Abone ol",
|
||||
"Unsubscribe": "Abonelikten çık",
|
||||
"File": "Dosya",
|
||||
"Files": "Dosyalar",
|
||||
"Added": "Eklendi",
|
||||
"All": "Tümü ({count})",
|
||||
"Attach": "Ekle",
|
||||
"Cancel": "İptal",
|
||||
"Edit": "Düzenle",
|
||||
"Edited": "Düzenlendi",
|
||||
"Emoji": "Emoji",
|
||||
"HoursAgo": "{hours, plural, =0 {bir saatten az önce} =1 {bir saat önce} other {# saat önce}}",
|
||||
"JustNow": "Şimdi",
|
||||
"LastReply": "Son yanıt",
|
||||
"Mention": "Bahset",
|
||||
"MinutesAgo": "{minutes, plural, =0 {bir dakikadan az önce} =1 {bir dakika önce} other {# dakika önce}}",
|
||||
"MonthAt": "{month} - {time}",
|
||||
"New": "Yeni",
|
||||
"Removed": "Kaldırıldı",
|
||||
"RepliesCount": "{count, plural, =0 {yanıt yok} =1 {1 yanıt} other {# yanıt}}",
|
||||
"Reply": "Yanıtla",
|
||||
"Send": "Gönder",
|
||||
"Set": "Ayarla",
|
||||
"ShowFormatting": "Biçimlendirmeyi göster",
|
||||
"To": "Kime",
|
||||
"Today": "Bugün",
|
||||
"Unset": "Kaldır",
|
||||
"WeekdayAt": "{weekday} - {time}",
|
||||
"YearAt": "{year} - {time}",
|
||||
"Yesterday": "Dün",
|
||||
"YesterdayAt": "Dün - {time}",
|
||||
"AndMore": "ve {count} daha",
|
||||
"IsTyping": "{count, plural, =1 {yazıyor} other {yazıyorlar}}...",
|
||||
"Loading": "Yükleniyor...",
|
||||
"MessageIn": "#{title} içinde mesaj",
|
||||
"ThreadWasRemoved": "Bu başlık kaldırıldı.",
|
||||
"MessageWasRemoved": "Bu mesaj kaldırıldı.",
|
||||
"JoinedThe": "Katıldı:",
|
||||
"LeftThe": "Ayrıldı:",
|
||||
"Translating": "Çevriliyor...",
|
||||
"ShowOriginal": "Orijinal gösteriliyor",
|
||||
"AddReaction": "Tepki ekle",
|
||||
"ReplyInThread": "Başlıkta yanıtla",
|
||||
"TranslateMessage": "Mesajı çevir",
|
||||
"ShowOriginalMessage": "Orijinal mesajı göster",
|
||||
"EditMessage": "Mesajı düzenle",
|
||||
"RemoveMessage": "Mesajı kaldır",
|
||||
"CreateCard": "Kart oluştur",
|
||||
"MessageAlreadyHasCardAttached": "Bu mesaja zaten bir kart eklenmiş!",
|
||||
"CreatePoll": "Anket oluştur",
|
||||
"Poll": "Anket",
|
||||
"QuestionIsRequired": "Soru gereklidir.",
|
||||
"AnswerIsRequired": "Cevap gereklidir.",
|
||||
"OptionIsRequired": "Seçenek gereklidir.",
|
||||
"StartDateMustBeInTheFuture": "Başlangıç tarihi gelecekte olmalıdır.",
|
||||
"EndDateMustBeInTheFuture": "Bitiş tarihi gelecekte olmalıdır.",
|
||||
"Question": "Soru",
|
||||
"AskQuestion": "Soru sor",
|
||||
"PollOptions": "Anket seçenekleri",
|
||||
"Option": "Seçenek",
|
||||
"AnonymousVoting": "Anonim oylama",
|
||||
"MultipleChoice": "Çoktan seçmeli",
|
||||
"QuizMode": "Quiz modu",
|
||||
"StartTime": "Başlangıç zamanı",
|
||||
"EndTime": "Bitiş zamanı",
|
||||
"OpenPoll": "Anketi aç",
|
||||
"RetractVote": "Oyu geri çek",
|
||||
"Quiz": "Quiz",
|
||||
"VotesCount": "{count, plural, =0 {oy yok} =1 {1 oy} other {# oy}}",
|
||||
"Vote": "Oy ver",
|
||||
"ShowResults": "Sonuçları göster",
|
||||
"Ended": "Bitti",
|
||||
"StartsAt": "Başlangıç: {date}",
|
||||
"EndsAt": "Bitiş: {date}",
|
||||
"StartsTomorrow": "Yarın başlıyor: {date}",
|
||||
"EndsTomorrow": "Yarın bitiyor: {date}",
|
||||
"PollResults": "Anket sonuçları",
|
||||
"Polls": "Anketler",
|
||||
"TotalVotes": "Toplam oy",
|
||||
"Voted": "Oy verildi",
|
||||
"VotedFor": "Oy verilen",
|
||||
"RevokedVote": "Oy geri çekildi",
|
||||
"AnonymousQuiz": "Anonim quiz",
|
||||
"Direct": "Direkt",
|
||||
"Directs": "Direktler",
|
||||
"Members": "Üyeler"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"string": {
|
||||
"Apply": "Uygula",
|
||||
"Contacts": "Kişiler",
|
||||
"Persons": "Kişiler",
|
||||
"Organizations": "Şirketler",
|
||||
"CreatePerson": "Kişi",
|
||||
"CreateOrganization": "Şirket",
|
||||
"OrganizationNamePlaceholder": "Şirket adı",
|
||||
"OrganizationsNamePlaceholder": "Şirketler",
|
||||
"PersonFirstNamePlaceholder": "Ad",
|
||||
"PersonLastNamePlaceholder": "Soyad",
|
||||
"PersonLocationPlaceholder": "Konum",
|
||||
"PersonsNamePlaceholder": "Klasör",
|
||||
"Name": "İsim",
|
||||
"SelectFolder": "Klasör seç",
|
||||
"OrganizationsFolder": "Şirketler klasörü",
|
||||
"PersonsFolder": "Kişiler klasörü",
|
||||
"ContactCreateLabel": "Kişi oluştur",
|
||||
"SearchEmployee": "Çalışan ara...",
|
||||
"SearchPerson": "Kişi ara...",
|
||||
"SearchOrganization": "Şirket ara...",
|
||||
"ContactInfo": "İletişim Bilgisi",
|
||||
"Contact": "Kişi",
|
||||
"Location": "Konum",
|
||||
"Channel": "Kişi kaydı",
|
||||
"ChannelProvider": "Kanal sağlayıcı",
|
||||
"Person": "Kişi",
|
||||
"Organization": "Şirket",
|
||||
"Employee": "Çalışan",
|
||||
"DeleteEmployee": "Çalışanı sil",
|
||||
"DeleteEmployeeDescr": "Çalışanı çalışma alanından silmek istediğinizden emin misiniz?",
|
||||
"Value": "Değer",
|
||||
"FullDescription": "Tam açıklama",
|
||||
"Phone": "Telefon",
|
||||
"LinkedIn": "LinkedIn",
|
||||
"GitHub": "GitHub",
|
||||
"Twitter": "Twitter",
|
||||
"Google": "Google",
|
||||
"Telegram": "Telegram",
|
||||
"PhonePlaceholder": "+90 555 333 7777",
|
||||
"LinkedInPlaceholder": "https://linkedin.com/in/adisoyad",
|
||||
"AtPlaceHolder": "@kullaniciadi",
|
||||
"FacebookPlaceholder": "https://fb.com/adisoyad",
|
||||
"Facebook": "Facebook",
|
||||
"HomepagePlaceholder": "https://adisoyad.com",
|
||||
"Homepage": "Ana sayfa",
|
||||
"SocialLinks": "Sosyal bağlantılar",
|
||||
"ViewActivity": "Aktiviteyi görüntüle",
|
||||
"PersonAlreadyExists": "Kişi zaten mevcut...",
|
||||
"Status": "Durum",
|
||||
"SetStatus": "Durum belirle",
|
||||
"ClearStatus": "Durumu temizle",
|
||||
"SaveStatus": "Kaydet",
|
||||
"Cancel": "İptal",
|
||||
"StatusDueDate": "Bitiş tarihi",
|
||||
"NoExpire": "Süresiz",
|
||||
"TypeLabel": "Tip",
|
||||
"StatusDueDateTooltip": "{date} tarihine kadar",
|
||||
"CopyToClipboard": "Kopyala",
|
||||
"ViewFullProfile": "Tam profili görüntüle",
|
||||
"Member": "Üye",
|
||||
"Members": "Üyeler",
|
||||
"NoMembers": "Üye eklenmedi",
|
||||
"AddMember": "Üye ekle",
|
||||
"KickEmployee": "Çalışanı çıkar",
|
||||
"KickEmployeeDescr": "Çalışanı çalışma alanından çıkarmak istediğinizden emin misiniz? Bu işlem geri alınamaz",
|
||||
"ResendInvite": "Daveti Yeniden Gönder",
|
||||
"ResendInviteDescr": "Bu kullanıcıya çalışma alanı için daveti yeniden göndermek istediğinizden emin misiniz?",
|
||||
"Email": "E-posta",
|
||||
"CreateEmployee": "Çalışan",
|
||||
"Inactive": "Pasif",
|
||||
"Active": "Aktif",
|
||||
"Role": "Rol",
|
||||
"Birthday": "Doğum günü",
|
||||
"UseImage": "Ekli fotoğraf",
|
||||
"UseGravatar": "Gravatar",
|
||||
"UseColor": "Renk",
|
||||
"NotSpecified": "Belirtilmedi",
|
||||
"Whatsapp": "Whatsapp",
|
||||
"WhatsappPlaceholder": "Whatsapp",
|
||||
"Skype": "Skype",
|
||||
"SkypePlaceholder": "Skype",
|
||||
"Profile": "Profil",
|
||||
"ProfilePlaceholder": "Profil...",
|
||||
"CurrentEmployee": "Mevcut çalışan",
|
||||
"MergePersons": "Kişileri birleştir",
|
||||
"MergePersonsFrom": "Kaynak kişi",
|
||||
"MergePersonsTo": "Hedef kişi",
|
||||
"SelectAvatar": "Avatar seç",
|
||||
"Avatar": "Avatar",
|
||||
"AvatarProvider": "Avatar sağlayıcı",
|
||||
"GravatarsManaged": "Gravatar'lar yönetilir",
|
||||
"Through": "üzerinden",
|
||||
"AddMembersHeader": "{value}'e üye ekle:",
|
||||
"Assigned": "Atanmış",
|
||||
"Unassigned": "Atanmamış",
|
||||
"CategoryCurrentUser": "Mevcut kullanıcı",
|
||||
"CategoryOther": "Diğer",
|
||||
"NumberMembers": "{count, plural, =0 {üye yok} =1 {1 üye} other {# üye}}",
|
||||
"Position": "Pozisyon",
|
||||
"ConfigLabel": "Kişiler",
|
||||
"ConfigDescription": "Tüm Çalışanlar ve diğer Kişi/Organizasyon kişileri hakkında bilgi tutmak için uzantı.",
|
||||
"HasMessagesIn": "mesajları var:",
|
||||
"HasNewMessagesIn": "yeni mesajları var:",
|
||||
"Employees": "Çalışanlar",
|
||||
"People": "Kişiler",
|
||||
"For": "İçin",
|
||||
"SelectUsers": "Kullanıcıları seç",
|
||||
"AddGuest": "Misafir ekle",
|
||||
"ViewProfile": "Profili görüntüle",
|
||||
"Viber": "Viber",
|
||||
"ViberPlaceholder": "Viber",
|
||||
"SocialId": "Sosyal ID",
|
||||
"SocialIds": "Sosyal ID'ler",
|
||||
"Type": "Tip",
|
||||
"Confirmed": "Doğrulandı",
|
||||
"UserProfile": "Kullanıcı profili",
|
||||
"DeactivatedAccount": "Devre dışı hesap",
|
||||
"LocalTime": "yerel saat",
|
||||
"Everyone": "Herkes",
|
||||
"Here": "Burada",
|
||||
"EveryoneDescription": "Bu {title} içindeki herkesi bilgilendir",
|
||||
"HereDescription": "Bu {title} içindeki çevrimiçi üyeleri bilgilendir",
|
||||
"Guest": "Misafir",
|
||||
"Deleted": "Silindi",
|
||||
"CannotMerge": "Hata: Global kişiler birleştirilemez"
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@
|
||||
export let placeholder: IntlString = presentation.string.Search
|
||||
export let selected: Ref<Employee>[] = []
|
||||
export let skipCurrentAccount = false
|
||||
export let skipAccounts: Ref<Employee>[] = []
|
||||
export let disableDeselectFor: Ref<Employee>[] = []
|
||||
export let showStatus = true
|
||||
export let skipInactive = false
|
||||
@@ -91,6 +92,7 @@
|
||||
{showStatus}
|
||||
{disableDeselectFor}
|
||||
{skipCurrentAccount}
|
||||
{skipAccounts}
|
||||
{skipInactive}
|
||||
on:select={handleSelectionChanged}
|
||||
/>
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
export let search: string = ''
|
||||
export let selected: Ref<Employee>[] = []
|
||||
export let skipCurrentAccount = false
|
||||
export let skipAccounts: Ref<Employee>[] = []
|
||||
export let disableDeselectFor: Ref<Employee>[] = []
|
||||
export let showStatus = true
|
||||
export let skipInactive = false
|
||||
@@ -52,7 +53,7 @@
|
||||
? { $search: search }
|
||||
: { [searchField]: { $like: '%' + search + '%' } }
|
||||
: {}),
|
||||
...(skipCurrentAccount ? { _id: { $ne: me } } : {}),
|
||||
...{ _id: { $nin: skipCurrentAccount ? [...skipAccounts, me] : [...skipAccounts] } },
|
||||
...(skipInactive ? { active: true } : {}),
|
||||
...(skipOnlyLocal ? { personUuid: { $exists: true } } : {})
|
||||
},
|
||||
|
||||
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"string": {
|
||||
"ID": "ID",
|
||||
"Code": "Kod",
|
||||
"Number": "Numara",
|
||||
"Category": "Kategori",
|
||||
"CollaborativeDocument": "İşbirlikli doküman",
|
||||
"ControlledDocument": "Kontrollü doküman",
|
||||
"Requests": "Talepler",
|
||||
"EffectiveDate": "Yürürlük tarihi",
|
||||
"PlannedEffectiveDate": "Planlanan yürürlük tarihi",
|
||||
"Rank": "Sıra",
|
||||
"DocumentRequest": "Talep",
|
||||
"DocumentReviewRequest": "Doküman inceleme talebi",
|
||||
"DocumentApprovalRequest": "Doküman onay talebi",
|
||||
"ControlledStatus": "Kontrol durumu",
|
||||
"Categories": "Kategoriler",
|
||||
"Guidance": "Rehber",
|
||||
"Required": "Gerekli",
|
||||
"Description": "Açıklama",
|
||||
"Major": "Majör",
|
||||
"Minor": "Minör",
|
||||
"Patch": "Yama",
|
||||
"ValidationWorkflow": "Doğrulama iş akışı",
|
||||
"Creator": "Oluşturan",
|
||||
"ChangeOwner": "Doküman yazarını değiştir",
|
||||
"ChangeOwnerHintBeginning": "Yazarlığı",
|
||||
"ChangeOwnerHintEnd": "başka bir kişiye aktar.",
|
||||
"ChangeOwnerWarning": "Bu işlemden sonra bu dokümanı düzenleyemeyeceksiniz.",
|
||||
"SelectOwner": "Yeni yazar seç",
|
||||
"CreateDocument": "Yeni doküman oluştur",
|
||||
"CreateTemplate": "Yeni şablon oluştur",
|
||||
"Documents": "Dokümanlar",
|
||||
"Document": "Doküman",
|
||||
"NewDocumentDialogClose": "Bu diyalogu kapatmak istiyor musunuz?",
|
||||
"NewDocumentCloseNote": "Tüm değişiklikler kaybolacak",
|
||||
"Cancel": "İptal",
|
||||
"EditorPlaceholder": "düzenlemeye başlamak için yazın...",
|
||||
"Version": "Sürüm",
|
||||
"TemplateVersion": "Şablon sürümü",
|
||||
"VersionValue": "v{major}.{minor}",
|
||||
"SearchDocument": "Doküman ara...",
|
||||
"CreateEnVersion": "İnceleme için sürüm oluştur",
|
||||
"Approvers": "Onaylayanlar",
|
||||
"CoAuthors": "Ortak Yazarlar",
|
||||
"Status": "Durum",
|
||||
"TemplateName": "Şablon adı",
|
||||
"DocumentApplication": "Kontrollü Dokümanlar",
|
||||
"MyDocuments": "Dokümanlarım",
|
||||
"Library": "Kütüphane",
|
||||
"Labels": "Etiketler",
|
||||
"Author": "Yazar",
|
||||
"Review": "İnceleme",
|
||||
"Approval": "Onay",
|
||||
"Reviewer": "İnceleyici",
|
||||
"Approver": "Onaylayan",
|
||||
"DeleteCategory": "Kategori silinsin mi?",
|
||||
"DeleteCategoryHint": "Bu işlem geri alınamaz",
|
||||
"DeleteCategoryWarning": "Kategori kullanımda olduğu için silinemez",
|
||||
"Latest": "Güncel",
|
||||
"Draft": "Taslak",
|
||||
"Reviewers": "İnceleyiciler",
|
||||
"ViewMode": "Görüntüleme",
|
||||
"EditMode": "Düzenleme",
|
||||
"ComparisonMode": "Karşılaştırma",
|
||||
"Compare": "Karşılaştır:",
|
||||
"Against": "İle:",
|
||||
"ComparisonModeNotSupported": "Karşılaştırma modu desteklenmiyor.",
|
||||
"CreateDraft": "Taslak Oluştur",
|
||||
"SendForApproval": "Onaya gönder",
|
||||
"SendForReview": "İncelemeye gönder",
|
||||
"CompleteReview": "İncelemeyi tamamla",
|
||||
"Approve": "Onayla",
|
||||
"Reject": "Reddet",
|
||||
"ConfirmApproval": "Onayı onayla",
|
||||
"ConfirmRejection": "Reddi onayla",
|
||||
"ProvideRejectionReason": "Red nedenini yazın...",
|
||||
"RejectionReason": "Red nedeni",
|
||||
"ConfirmReviewCompletion": "İnceleme tamamlamayı onayla",
|
||||
"ConfirmApprovalSubmission": "Onay gönderimini onayla",
|
||||
"ConfirmReviewSubmission": "İnceleme gönderimini onayla",
|
||||
"AddApprovalTitle": "Dokümanınızı onaylayanlar gönder",
|
||||
"AddApprovalDescription1": "Dokümanınızı onaya hazırlamak için birkaç gereksinimi karşılaması gerekir:",
|
||||
"AddApprovalDescription2": "'Taslak' veya 'İncelendi' durumunda olmalı",
|
||||
"AddApprovalDescription3": "çözülmemiş yorumu olmamalı",
|
||||
"AddApprovalDescription4": "eğitim planlanmışsa, eğitimin durumu 'Yayınlandı' olmalı",
|
||||
"NoApprovalsDescription": "Bu doküman sürümü için onay yok",
|
||||
"CurrentVersion": "Mevcut sürüm",
|
||||
"DocumentTemplate": "Şablon",
|
||||
"DocumentTemplates": "Şablonlar",
|
||||
"DocumentCode": "Doküman kodu",
|
||||
"TemplateCode": "Şablon kodu",
|
||||
"DocumentCodePlaceholder": "DOC-1",
|
||||
"DocumentPrefixPlaceholder": "DOC",
|
||||
"DocumentPrefix": "Doküman öneki",
|
||||
"DocumentTemplateCreateLabel": "Şablon",
|
||||
"DocumentCategoryCreateLabel": "Kategori",
|
||||
"CreateDocumentCategory": "Kategori oluştur",
|
||||
"DocumentCategoryAlreadyExists": "\"{title}\" kategorisi zaten mevcut. ",
|
||||
"DocumentCategoryCodeAlreadyExists": "\"{code}\" kodu zaten kullanılıyor. ",
|
||||
"AttachmentsMax": "İzin verilen maksimum ek",
|
||||
"Resolve": "Çöz",
|
||||
"Unresolve": "Çözülmemiş yap",
|
||||
"Pending": "Beklemede",
|
||||
"Resolved": "Çözüldü",
|
||||
"ShowResolved": "Çözülen yorumları göster",
|
||||
"Ordering": "Sıralama",
|
||||
"Title": "Başlık",
|
||||
"Effective": "Yürürlükte",
|
||||
"Archived": "Arşivlendi",
|
||||
"Deleted": "Silindi",
|
||||
"MetaAbstract": "Özet",
|
||||
"Obsolete": "Geçersiz",
|
||||
"MakeDocumentObsolete": "Geçersiz olarak işaretle",
|
||||
"MakeDocumentObsoleteDialog": "{count, plural, =0 {dokümanı} other {dokümanları}} geçersiz olarak işaretle",
|
||||
"MakeDocumentObsoleteConfirm": "Şu dokümanları gerçekten geçersiz olarak işaretlemek istiyor musunuz: {titles}?",
|
||||
"ContentTab": "İçerik",
|
||||
"TeamTab": "Takım",
|
||||
"MetaTab": "Meta veriler",
|
||||
"ChangeControlTab": "Değişiklik kontrolü",
|
||||
"ReleaseTab": "Yayın",
|
||||
"HistoryTab": "Geçmiş",
|
||||
"ModificationDate": "Değiştirilme tarihi",
|
||||
"Modified": "Değiştirildi",
|
||||
"Owner": "Sahip",
|
||||
"AssignedTo": "Atanan",
|
||||
"Unassigned": "Atanmamış",
|
||||
"Untitled": "Başlıksız",
|
||||
"Copy": "kopyala",
|
||||
"AccessWorkarea": "Çalışma Alanına Erişim",
|
||||
"EffectiveLibrary": "Yürürlükteki kütüphane",
|
||||
"WorkingLibrary": "Çalışma kütüphanesi",
|
||||
"CreateDraftQmsDocuments": "Taslak QMS dokümanları oluştur",
|
||||
"OwnDocumentAskReviewGetApproval": "QMS dokümanına sahip ol, inceleme iste, onay al",
|
||||
"ApproveDocuments": "Dokümanları onayla",
|
||||
"ReassignOwnershipToAnotherUser": "Sahipliği başka bir kullanıcıya devret",
|
||||
"MakeDocumentEffective": "Dokümanı yürürlüğe koy",
|
||||
"CreateDraftQmsTemplates": "Taslak QMS şablonları oluştur",
|
||||
"ChangeControl": "Değişiklik Kontrolü",
|
||||
"ReviewInterval": "İnceleme aralığı",
|
||||
"SelectReviewers": "İnceleyicileri seç",
|
||||
"SelectApprovers": "Onaylayanları seç",
|
||||
"RequestsToReviewTheDoc": "dokümanı incelemenizi talep ediyor",
|
||||
"RequestsToApproveTheDoc": "dokümanı onaylamanızı talep ediyor",
|
||||
"Parent": "Üst",
|
||||
"Template": "Şablon",
|
||||
"GeneralInfo": "Genel Bilgi",
|
||||
"InProgress": "Devam ediyor",
|
||||
"EditDescription": "Açıklamayı düzenle",
|
||||
"EditGuidance": "Rehberi düzenle",
|
||||
"NewDocument": "Yeni doküman",
|
||||
"NewDocumentCategory": "Yeni kategori",
|
||||
"NewDocumentTemplate": "Yeni şablon",
|
||||
"LocationStepTitle": "Konum",
|
||||
"TemplateStepTitle": "Şablon",
|
||||
"InfoStepTitle": "Bilgi",
|
||||
"TeamStepTitle": "Takım",
|
||||
"TitleAndDescr": "Başlık ve açıklama",
|
||||
"Reason": "Neden",
|
||||
"AbstractPlaceholder": "Bu doküman ne hakkında? Kime ve ne zaman gerekecek? ...",
|
||||
"NewDocCreation": "Yeni doküman oluşturma",
|
||||
"NewTemplateCreation": "Yeni şablon oluşturma",
|
||||
"NewTemplatePlaceholder": "Bu şablon ne hakkında? Nasıl düzgün kullanılacağını açıklayın...",
|
||||
"CustomReason": "Özel",
|
||||
"ReasonPlaceholder": "Nedeni belirtin...",
|
||||
"EditDocument": "Dokümanı düzenle",
|
||||
"Key": "Anahtar",
|
||||
"CommentsSequence": "Yorum sırası",
|
||||
"Email": "E-posta",
|
||||
"Password": "Şifre",
|
||||
"FieldIsEmpty": "{field} boş",
|
||||
"ValidatingCredentials": "Kimlik bilgileri doğrulanıyor...",
|
||||
"GeneralDocumentation": "Genel dokümantasyon",
|
||||
"TechnicalDocumentation": "Teknik dokümantasyon",
|
||||
"UnsortedTemplates": "Sıralanmamış şablonlar",
|
||||
"Project": "Proje",
|
||||
"Projects": "Projeler",
|
||||
"ExternalSpace": "Proje alanı",
|
||||
"DocumentSpaceType": "Doküman alan tipi",
|
||||
"EffectiveImmediately": "Onay üzerine hemen",
|
||||
"EffectiveOn": "Yürürlüğe alma tarihi",
|
||||
"PeriodicReviewToBeCompleted": "Periyodik inceleme tamamlanmalı:",
|
||||
"MonthsAfterEffectiveDate": "ay yürürlük tarihinden sonra",
|
||||
"ToBePassedWithin": "İçinde geçilmeli",
|
||||
"AttemptsAnd": "deneme ve",
|
||||
"DaysAfterEffectiveDate": "gün yürürlük tarihinden sonra",
|
||||
"Index": "İndeks",
|
||||
"Path": "Yol",
|
||||
"CreateChildDocument": "Alt doküman oluştur",
|
||||
"CreateChildTemplate": "Alt şablon oluştur",
|
||||
"All": "Tümü",
|
||||
"Space": "Alan",
|
||||
"SelectParent": "Dokümanınız için üst nesne seçin",
|
||||
"PrefixInUse": "Bu önek zaten kullanılıyor:",
|
||||
"CodeInUse": "Bu kod zaten kullanılıyor:",
|
||||
"ChangeCode": "Kodu Değiştir",
|
||||
"ChangePrefix": "Öneki Değiştir",
|
||||
"MarkDocAsDeleted": "Dokümanı silinmiş olarak işaretle",
|
||||
"MarkDocsAsDeleted": "Birden fazla dokümanı silinmiş olarak işaretle",
|
||||
"MarkDocAsDeletedConfirm": "Şu dokümanları gerçekten silinmiş olarak işaretlemek istiyor musunuz: {titles}?",
|
||||
"ArchiveDocs": "{count, plural, =0 {dokümanı} other {dokümanları}} arşivle",
|
||||
"ArchiveDocsConfirm": "Şu dokümanları gerçekten arşivlemek istiyor musunuz: {titles}?",
|
||||
"DocumentInHierarchy": "Hiyerarşide doküman",
|
||||
"FirstDraftVersion": "Bu, dokümanın ilk taslak sürümü. Henüz geçmiş yok.",
|
||||
"EffectiveDocumentLifecycle": "Yürürlükteki doküman yaşam döngüsü",
|
||||
"ReasonAndImpact": "Neden ve Etki",
|
||||
"ImpactAnalysis": "Etki analizi",
|
||||
"ImpactedDocuments": "Etkilenen dokümanlar",
|
||||
"CreateDocumentFailed": "Doküman oluşturulamadı",
|
||||
"CreateDocumentTemplateFailed": "Şablon oluşturulamadı",
|
||||
"TryAgain": "Lütfen tekrar deneyin",
|
||||
"DescribeChanges": "Nelerin değiştiğini açıklayın...",
|
||||
"DescribeReason": "Neden değiştiğini açıklayın...",
|
||||
"DescribeImpact": "Etkisi var:",
|
||||
"AddDocument": "Doküman ekle",
|
||||
"NoDocuments": "Doküman yok",
|
||||
"SysTemplate": "Sistem şablonu",
|
||||
"DocumentTrainingDueDays": "Son tarih günleri",
|
||||
"DocumentTrainingEnabled": "Etkin",
|
||||
"Own": "Sahip",
|
||||
"Snapshot": "Anlık görüntü",
|
||||
"Snapshots": "Anlık görüntüler",
|
||||
"ControlledSnapshot": "Kontrollü anlık görüntü",
|
||||
"Name": "İsim",
|
||||
"DraftRevision": "Taslak revizyonu",
|
||||
"CreateNewDraft": "Yeni sürüm taslağı",
|
||||
"RestoreDraft": "Taslağı geri yükle",
|
||||
"ChangeSeverity": "Değişiklik şiddeti",
|
||||
"Reference": "Referans",
|
||||
"History": "Geçmiş",
|
||||
"Signatories": "İmzalayanlar",
|
||||
"Page": "Sayfa ",
|
||||
"Of": " / ",
|
||||
"CreatedFromTemplate": "Şablondan oluşturuldu: ",
|
||||
"ViewAll": "Tümünü görüntüle",
|
||||
"Readonly": "Salt okunur",
|
||||
"NewDocumentSpace": "Yeni doküman alanı",
|
||||
"EditDocumentSpace": "Doküman alanını düzenle",
|
||||
"DocSpaceDescriptionPlaceholder": "Alanınızı açıklayın...",
|
||||
"Members": "Üyeler",
|
||||
"RoleLabel": "Rol: {role}",
|
||||
"CreateOrgSpace": "Organizasyon alanı oluştur",
|
||||
"ReviewDocumentPermission": "Dokümanı incele",
|
||||
"ReviewDocumentDescription": "Kullanıcılara doküman inceleme yetkisi verir",
|
||||
"ApproveDocumentPermission": "Dokümanı onayla",
|
||||
"ApproveDocumentDescription": "Kullanıcılara doküman onaylama yetkisi verir",
|
||||
"ArchiveDocumentPermission": "Dokümanı arşivle",
|
||||
"ArchiveDocumentDescription": "Kullanıcılara doküman arşivleme yetkisi verir",
|
||||
"CoAuthorDocumentPermission": "Doküman ortak yazarı",
|
||||
"CoAuthorDocumentDescription": "Kullanıcılara doküman ortak yazarlığı yetkisi verir",
|
||||
"CreateDocumentPermission": "Doküman oluştur",
|
||||
"CreateDocumentDescription": "Kullanıcılara doküman oluşturma yetkisi verir",
|
||||
"UpdateDocumentOwnerPermission": "Doküman sahibini güncelle",
|
||||
"UpdateDocumentOwnerDescription": "Kullanıcılara doküman sahibini güncelleme yetkisi verir",
|
||||
"CreateDocumentCategoryPermission": "Doküman kategorisi oluştur",
|
||||
"CreateDocumentCategoryDescription": "Kullanıcılara doküman kategorisi oluşturma yetkisi verir",
|
||||
"UpdateDocumentCategoryPermission": "Doküman kategorisini güncelle",
|
||||
"UpdateDocumentCategoryDescription": "Kullanıcılara doküman kategorisini güncelleme yetkisi verir",
|
||||
"DeleteDocumentCategoryPermission": "Doküman kategorisini sil",
|
||||
"DeleteDocumentCategoryDescription": "Kullanıcılara doküman kategorisini silme yetkisi verir",
|
||||
"ConfigLabel": "Kontrollü Dokümanlar",
|
||||
"ConfigDescription": "Kontrollü dokümanları yönetmek için uzantı",
|
||||
"Transfer": "Aktar",
|
||||
"TransferWarning": "Bu işlemden sonra bazı takım üyeleri bu dokümanı görüntüleme veya düzenleme yeteneğini kaybedebilir.",
|
||||
"TransferDocuments": "Kontrollü dokümanları aktar",
|
||||
"TransferDocumentsHint": "Seçilen alana aktarılacak dokümanlar:",
|
||||
"CreateFolder": "Yeni klasör oluştur",
|
||||
"RenameFolder": "Klasörü yeniden adlandır",
|
||||
"CreateChildFolder": "Alt klasör oluştur",
|
||||
"LatestVersionHint": "en güncel",
|
||||
"CannotDeleteFolder": "Klasör silinemez",
|
||||
"CannotDeleteFolderHint": "Klasörü silmeden önce lütfen tüm alt dokümanları başka bir konuma taşıyın.",
|
||||
"AllDocumentSpaces": "Tüm doküman alanları"
|
||||
},
|
||||
"controlledDocStates": {
|
||||
"Empty": "",
|
||||
"Approved": "Onaylandı",
|
||||
"InApproval": "Onayda",
|
||||
"InReview": "İncelemede",
|
||||
"Reviewed": "İncelendi",
|
||||
"Rejected": "Reddedildi",
|
||||
"ToReview": "İncelemeye"
|
||||
}
|
||||
}
|
||||
+4
-1
@@ -4,10 +4,12 @@
|
||||
import chunter, { type ChatMessage } from '@hcengineering/chunter'
|
||||
import { Ref, generateId } from '@hcengineering/core'
|
||||
import { ReferenceInput } from '@hcengineering/text-editor-resources'
|
||||
import { popupstore as popups } from '@hcengineering/ui'
|
||||
|
||||
import { addDocumentCommentFx } from '../../../stores/editors/document'
|
||||
|
||||
export let nodeId: string | undefined
|
||||
export let popupId: string | undefined
|
||||
|
||||
const dispatch = createEventDispatcher()
|
||||
|
||||
@@ -22,7 +24,8 @@
|
||||
|
||||
function handleClick (event: MouseEvent): void {
|
||||
if (event.target instanceof Node) {
|
||||
if (popup !== undefined && !popup.contains(event.target)) {
|
||||
const top = $popups.length > 0 && $popups[$popups.length - 1].id === popupId
|
||||
if (top && popup !== undefined && !popup.contains(event.target)) {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
dispatch('close', undefined)
|
||||
|
||||
@@ -44,6 +44,9 @@ export default mergeIds(documentsId, documents, {
|
||||
CreateDocumentsSpace: '' as AnyComponent,
|
||||
CreateDocumentSpaceType: '' as AnyComponent
|
||||
},
|
||||
ids: {
|
||||
AddCommentPopup: '' as Resource<string>
|
||||
},
|
||||
string: {
|
||||
ID: '' as IntlString,
|
||||
ValidationWorkflow: '' as IntlString,
|
||||
|
||||
+12
-3
@@ -16,7 +16,7 @@ import { type Attachment } from '@hcengineering/attachment'
|
||||
import { type Ref, generateId } from '@hcengineering/core'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { type CompAndProps, type PopupAlignment, popupstore, showPopup } from '@hcengineering/ui'
|
||||
import documents, { type Document, type DocumentComment } from '@hcengineering/controlled-documents'
|
||||
import { type Document, type DocumentComment } from '@hcengineering/controlled-documents'
|
||||
import { isDocumentCommentAttachedTo } from '../../../utils'
|
||||
import {
|
||||
type DocumentCommentsFilter,
|
||||
@@ -36,6 +36,8 @@ import {
|
||||
controlledDocumentOpened
|
||||
} from './actions'
|
||||
|
||||
import documents from '../../../plugin'
|
||||
|
||||
export const $areDocumentCommentPopupsOpened = createStore(false).on(
|
||||
documentCommentPopupsOpened,
|
||||
(_, isOpened) => isOpened
|
||||
@@ -118,7 +120,10 @@ export const showDocumentCommentsPopupFx = createEffect(
|
||||
export const showAddCommentPopupFx = createEffect((payload: { element?: PopupAlignment, nodeId?: string | null }) => {
|
||||
showPopup(
|
||||
documents.component.AddCommentPopup,
|
||||
payload,
|
||||
{
|
||||
...payload,
|
||||
popupId: documents.ids.AddCommentPopup
|
||||
},
|
||||
payload.element,
|
||||
(result) => {
|
||||
if (result === null || result === undefined) {
|
||||
@@ -129,7 +134,11 @@ export const showAddCommentPopupFx = createEffect((payload: { element?: PopupAli
|
||||
}
|
||||
},
|
||||
undefined,
|
||||
{ category: DocumentCommentPopupCategory, overlay: true }
|
||||
{
|
||||
id: documents.ids.AddCommentPopup,
|
||||
category: DocumentCommentPopupCategory,
|
||||
overlay: true
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"string": {
|
||||
"Downloads": "İndirilenler",
|
||||
"Completed": "Tamamlandı",
|
||||
"Cancelled": "İptal Edildi",
|
||||
"Interrupted": "Kesintiye Uğradı",
|
||||
"Paused": "Duraklatıldı",
|
||||
"Progressing": "Devam Ediyor"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"string": {
|
||||
"ShowNotifications": "Bildirimleri göster",
|
||||
"PlaySound": "Ses çal",
|
||||
"BounceAppIcon": "Uygulama simgesini zıplat (sadece mac)",
|
||||
"ShowBadge": "Uygulama simgesinde rozet göster",
|
||||
"SoundAndAppearance": "Ses ve görünüm",
|
||||
"HaveGotANotification": "Bir bildiriminiz var",
|
||||
"TotalNotificationsCount": "Toplam {count, plural, =1 {# bildiriminiz} other {# bildiriminiz}} var"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"string": {
|
||||
"ViewMode": "Görüntüleme modu",
|
||||
"Unified": "Birleşik",
|
||||
"Split": "Bölünmüş",
|
||||
"Viewed": "Görüntülendi",
|
||||
"ShowDiff": "Farkı göster",
|
||||
"NoChanges": "Dosya farkında değişiklik yok",
|
||||
"LargeDiffsAreHidden": "Büyük farklar varsayılan olarak gösterilmez.",
|
||||
"FileIsTooLarge": "Dosya görüntülenemeyecek kadar büyük.",
|
||||
"FileWasRenamed": "Dosya değişiklik olmadan yeniden adlandırıldı.",
|
||||
"FileWasDeleted": "Dosya silindi."
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,8 @@
|
||||
|
||||
"Icon": "Ikona",
|
||||
"Color": "Barva",
|
||||
"RoleLabel": "Role: {role}"
|
||||
"RoleLabel": "Role: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Zakázat vytvoření týmového prostoru",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Zakazuje uživatelům vytvářet nové týmové prostory"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "Erweiterung für kollaborative Dokumentbearbeitung",
|
||||
"Icon": "Symbol",
|
||||
"Color": "Farbe",
|
||||
"RoleLabel": "Rolle: {role}"
|
||||
"RoleLabel": "Rolle: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Arbeitsbereichserstellung verbieten",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Verbietet Benutzern das Erstellen neuer Arbeitsbereiche"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,8 @@
|
||||
|
||||
"Icon": "Icon",
|
||||
"Color": "Color",
|
||||
"RoleLabel": "Role: {role}"
|
||||
"RoleLabel": "Role: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Forbid create teamspace",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Forbid users creating new teamspaces"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "Extensión para edición colaborativo de documentos",
|
||||
"Icon": "Icono",
|
||||
"Color": "Color",
|
||||
"RoleLabel": "Role: {role}"
|
||||
"RoleLabel": "Role: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Prohibir crear espacio de trabajo",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Prohíbe a los usuarios crear nuevos espacios de trabajo"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "Extension pour l'édition collaborative de documents",
|
||||
"Icon": "Icône",
|
||||
"Color": "Couleur",
|
||||
"RoleLabel": "Rôle : {role}"
|
||||
"RoleLabel": "Rôle : {role}",
|
||||
"ForbidCreateTeamspacePermission": "Interdire la création d'espace d'équipe",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Interdit aux utilisateurs de créer de nouveaux espaces d'équipe"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "Estensione per la modifica collaborativa dei documenti",
|
||||
"Icon": "Icona",
|
||||
"Color": "Colore",
|
||||
"RoleLabel": "Ruolo: {role}"
|
||||
"RoleLabel": "Ruolo: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Vieta creazione teamspace",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Vieta agli utenti di creare nuovi teamspaces"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "共同ドキュメント編集のための拡張機能",
|
||||
"Icon": "アイコン",
|
||||
"Color": "色",
|
||||
"RoleLabel": "ロール: {role}"
|
||||
"RoleLabel": "ロール: {role}",
|
||||
"ForbidCreateTeamspacePermission": "チームスペースの作成禁止",
|
||||
"ForbidCreateTeamspacePermissionDescription": "ユーザーが新しいチームスペースを作成することを禁止します"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
"ConfigDescription": "Extensão para edição colaborativa de documentos",
|
||||
"Icon": "Ícone",
|
||||
"Color": "Cor",
|
||||
"RoleLabel": "Papel: {role}"
|
||||
"RoleLabel": "Papel: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Proibir criação de espaço de trabalho",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Proíbe os utilizadores de criar novos espaços de trabalho"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,8 @@
|
||||
|
||||
"Icon": "Иконка",
|
||||
"Color": "Цвет",
|
||||
"RoleLabel": "Роль: {role}"
|
||||
"RoleLabel": "Роль: {role}",
|
||||
"ForbidCreateTeamspacePermission": "Запретить создание пространства",
|
||||
"ForbidCreateTeamspacePermissionDescription": "Запрещает пользователям создавать новые пространства"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"string": {
|
||||
"Document": "Doküman",
|
||||
"ParentDocument": "Üst doküman",
|
||||
"ChildDocument": "Alt doküman",
|
||||
"CreateDocument": "Doküman oluştur",
|
||||
"Documents": "Dokümanlar",
|
||||
"CreateAnVersion": "Yeni sürüm oluştur",
|
||||
"DocumentNamePlaceholder": "Başlıksız",
|
||||
"Name": "İsim",
|
||||
"Cancel": "İptal",
|
||||
"Version": "Sürüm",
|
||||
"SearchDocument": "Doküman ara...",
|
||||
"Snapshot": "Anlık görüntü",
|
||||
"NoVersions": "Sürüm tanımlanmamış",
|
||||
"DocumentApplication": "Dokümanlar",
|
||||
"MyDocuments": "Dokümanlarım",
|
||||
"Teamspace": "Takım alanı",
|
||||
"Teamspaces": "Takım alanları",
|
||||
"Labels": "Etiketler",
|
||||
"AddLabel": "Etiket ekle",
|
||||
"Authors": "Yazarlar",
|
||||
"Backlinks": "Geri bağlantılar",
|
||||
"History": "Geçmiş",
|
||||
"DescriptionPlaceholder": "detaylar için yazın...",
|
||||
"CreateTeamspace": "Takım alanı oluştur",
|
||||
"EditTeamspace": "Takım alanını düzenle",
|
||||
"NewTeamspace": "Yeni takım alanı",
|
||||
"TeamspaceTitle": "Takım alanı başlığı",
|
||||
"TeamspaceTitlePlaceholder": "Yeni takım alanı",
|
||||
"TeamspaceDescriptionPlaceholder": "Açıklama ekle ...",
|
||||
"ChooseIcon": "İkon seç",
|
||||
"TeamspaceMembers": "Üyeler",
|
||||
"NoParentDocument": "Üst doküman yok",
|
||||
"NoBacklinks": "Geri bağlantı yok",
|
||||
"NoHistory": "Önceki geçmiş yok",
|
||||
"Untitled": "Başlıksız",
|
||||
"Description": "Açıklama",
|
||||
"CopyDocumentUrl": "Doküman URL'sini panoya kopyala",
|
||||
"DocumentUrlCopied": "Kopyalandı!",
|
||||
"ViewMode": "Görüntüle",
|
||||
"EditMode": "Düzenle",
|
||||
"SuggestMode": "Öner",
|
||||
"CompareTo": "Karşılaştır...",
|
||||
"Star": "Yıldızla",
|
||||
"Unstar": "Yıldızı kaldır",
|
||||
"Lock": "Kilitle",
|
||||
"Unlock": "Kilidi aç",
|
||||
"Locked": "Kilitli",
|
||||
"ConfigLabel": "Dokümanlar",
|
||||
"ConfigDescription": "İşbirlikli doküman düzenleme için uzantı",
|
||||
"Icon": "İkon",
|
||||
"Color": "Renk",
|
||||
"RoleLabel": "Rol: {role}"
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,8 @@
|
||||
"ReassignToDoConfirm": "您要更改待办事项被指派人吗?待办事项将从当前被指派人的计划中移除。",
|
||||
"Icon": "图标",
|
||||
"Color": "颜色",
|
||||
"RoleLabel": "角色:{role}"
|
||||
"RoleLabel": "角色:{role}",
|
||||
"ForbidCreateTeamspacePermission": "禁止创建团队空间",
|
||||
"ForbidCreateTeamspacePermissionDescription": "禁止用户创建新团队空间"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,17 +13,9 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { AccountRole, Ref, Space, getCurrentAccount, hasAccountRole } from '@hcengineering/core'
|
||||
import core, { AccountRole, Ref, Space, getCurrentAccount } from '@hcengineering/core'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import {
|
||||
Button,
|
||||
ButtonWithDropdown,
|
||||
IconAdd,
|
||||
IconDropdown,
|
||||
Loading,
|
||||
SelectPopupValueType,
|
||||
showPopup
|
||||
} from '@hcengineering/ui'
|
||||
import { HeaderButton, showPopup } from '@hcengineering/ui'
|
||||
import { openDoc } from '@hcengineering/view-resources'
|
||||
import { Analytics } from '@hcengineering/analytics'
|
||||
import { DocumentEvents } from '@hcengineering/document'
|
||||
@@ -70,51 +62,37 @@
|
||||
showPopup(CreateTeamspace, {}, 'top')
|
||||
}
|
||||
|
||||
async function dropdownItemSelected (res?: SelectPopupValueType['id']): Promise<void> {
|
||||
if (res === document.string.CreateDocument) {
|
||||
await newDocument()
|
||||
} else if (res === document.string.CreateTeamspace) {
|
||||
await newTeamspace()
|
||||
let mainActionId: string | undefined = undefined
|
||||
let visibleActions: string[] = []
|
||||
function updateActions (teamspace: boolean): void {
|
||||
mainActionId = document.string.CreateDocument
|
||||
if (teamspace) {
|
||||
visibleActions = [document.string.CreateTeamspace, document.string.CreateDocument]
|
||||
} else {
|
||||
visibleActions = [document.string.CreateTeamspace]
|
||||
}
|
||||
}
|
||||
|
||||
const dropdownItems = hasAccountRole(myAcc, AccountRole.User)
|
||||
? [
|
||||
{ id: document.string.CreateDocument, label: document.string.CreateDocument },
|
||||
{ id: document.string.CreateTeamspace, label: document.string.CreateTeamspace }
|
||||
]
|
||||
: [{ id: document.string.CreateDocument, label: document.string.CreateDocument }]
|
||||
$: updateActions(hasTeamspace)
|
||||
</script>
|
||||
|
||||
{#if loading}
|
||||
<Loading shrink />
|
||||
{:else}
|
||||
<div class="antiNav-subheader">
|
||||
{#if hasTeamspace}
|
||||
<ButtonWithDropdown
|
||||
icon={IconAdd}
|
||||
justify={'left'}
|
||||
kind={'primary'}
|
||||
label={document.string.CreateDocument}
|
||||
on:click={newDocument}
|
||||
mainButtonId={'new-document'}
|
||||
dropdownIcon={IconDropdown}
|
||||
{dropdownItems}
|
||||
on:dropdown-selected={(ev) => {
|
||||
void dropdownItemSelected(ev.detail)
|
||||
}}
|
||||
/>
|
||||
{:else}
|
||||
<Button
|
||||
id={'new-teamspace'}
|
||||
icon={IconAdd}
|
||||
label={document.string.CreateTeamspace}
|
||||
justify={'left'}
|
||||
width={'100%'}
|
||||
kind={'primary'}
|
||||
gap={'large'}
|
||||
on:click={newTeamspace}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
<HeaderButton
|
||||
{loading}
|
||||
{client}
|
||||
{mainActionId}
|
||||
{visibleActions}
|
||||
actions={[
|
||||
{
|
||||
id: document.string.CreateTeamspace,
|
||||
label: document.string.CreateTeamspace,
|
||||
accountRole: AccountRole.User,
|
||||
callback: newTeamspace
|
||||
},
|
||||
{
|
||||
id: document.string.CreateDocument,
|
||||
label: document.string.CreateDocument,
|
||||
accountRole: AccountRole.User,
|
||||
callback: newDocument
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { Class, Doc, Mixin, Ref, SpaceType, SpaceTypeDescriptor } from '@hcengineering/core'
|
||||
import type { Class, Doc, Mixin, Ref, SpaceType, SpaceTypeDescriptor, Permission } from '@hcengineering/core'
|
||||
import { NotificationGroup, NotificationType } from '@hcengineering/notification'
|
||||
import type { Asset, Plugin, Resource } from '@hcengineering/platform'
|
||||
import { IntlString, plugin } from '@hcengineering/platform'
|
||||
@@ -69,7 +69,9 @@ export const documentPlugin = plugin(documentId, {
|
||||
string: {
|
||||
ConfigLabel: '' as IntlString,
|
||||
CreateDocument: '' as IntlString,
|
||||
Documents: '' as IntlString
|
||||
Documents: '' as IntlString,
|
||||
ForbidCreateTeamspacePermission: '' as IntlString,
|
||||
ForbidCreateTeamspacePermissionDescription: '' as IntlString
|
||||
},
|
||||
ids: {
|
||||
NoParent: '' as Ref<Document>,
|
||||
@@ -81,6 +83,9 @@ export const documentPlugin = plugin(documentId, {
|
||||
},
|
||||
spaceType: {
|
||||
DefaultTeamspaceType: '' as Ref<SpaceType>
|
||||
},
|
||||
permission: {
|
||||
ForbidCreateTeamspace: '' as Ref<Permission>
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Přejmenovat",
|
||||
"Restore": "Obnovit",
|
||||
"RoleLabel": "Role",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Zakázat vytvoření disku",
|
||||
"ForbidCreateDrivePermissionDescription": "Zakazuje uživatelům vytvářet nové disky"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Umbenennen",
|
||||
"Restore": "Wiederherstellen",
|
||||
"RoleLabel": "Rolle",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Laufwerkserstellung verbieten",
|
||||
"ForbidCreateDrivePermissionDescription": "Verbietet Benutzern die Erstellung neuer Laufwerke"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Rename",
|
||||
"Restore": "Restore",
|
||||
"RoleLabel": "Role",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Forbid create drive",
|
||||
"ForbidCreateDrivePermissionDescription": "Forbid users creating new drives"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Renombrar",
|
||||
"Restore": "Restaurar",
|
||||
"RoleLabel": "Rol",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Prohibir crear unidad",
|
||||
"ForbidCreateDrivePermissionDescription": "Prohíbe a los usuarios crear nuevas unidades"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Renommer",
|
||||
"Restore": "Restaurer",
|
||||
"RoleLabel": "Rôle",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Interdire la création de disque",
|
||||
"ForbidCreateDrivePermissionDescription": "Interdit aux utilisateurs de créer de nouveaux disques"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Rinomina",
|
||||
"Restore": "Ripristina",
|
||||
"RoleLabel": "Ruolo",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Vieta creazione drive",
|
||||
"ForbidCreateDrivePermissionDescription": "Vieta agli utenti di creare nuovi drive"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "名前を変更",
|
||||
"Restore": "復元",
|
||||
"RoleLabel": "ロール",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "ドライブの作成禁止",
|
||||
"ForbidCreateDrivePermissionDescription": "ユーザーが新しいドライブを作成することを禁止します"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Renomear",
|
||||
"Restore": "Restaurar",
|
||||
"RoleLabel": "Papel",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Proibir criação de unidade",
|
||||
"ForbidCreateDrivePermissionDescription": "Proíbe os utilizadores de criar novas unidades"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "Переименовать",
|
||||
"Restore": "Восстановить",
|
||||
"RoleLabel": "Роль",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "Запретить создание диска",
|
||||
"ForbidCreateDrivePermissionDescription": "Запрещает пользователям создавать новые диски"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"string": {
|
||||
"Drive": "Sürücü",
|
||||
"Drives": "Sürücüler",
|
||||
"Grid": "Izgara",
|
||||
"File": "Dosya",
|
||||
"Files": "Dosyalar",
|
||||
"FileVersion": "Dosya sürümü",
|
||||
"FileVersions": "Dosya sürümleri",
|
||||
"Folder": "Klasör",
|
||||
"Folders": "Klasörler",
|
||||
"Resource": "Kaynak",
|
||||
"Name": "İsim",
|
||||
"Description": "Açıklama",
|
||||
"Parent": "Üst",
|
||||
"Path": "Yol",
|
||||
"Version": "Sürüm",
|
||||
"Size": "Boyut",
|
||||
"ContentType": "İçerik türü",
|
||||
"LastModified": "Son Değiştirilme",
|
||||
"Download": "İndir",
|
||||
"Upload": "Yükle",
|
||||
"CreateDrive": "Sürücü Oluştur",
|
||||
"CreateFolder": "Klasör Oluştur",
|
||||
"UploadFile": "Dosya Yükle",
|
||||
"EditDrive": "Sürücüyü Düzenle",
|
||||
"Rename": "Yeniden adlandır",
|
||||
"Restore": "Geri yükle",
|
||||
"RoleLabel": "Rol",
|
||||
"Root": "/"
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,8 @@
|
||||
"Rename": "重命名",
|
||||
"Restore": "恢复",
|
||||
"RoleLabel": "角色",
|
||||
"Root": "/"
|
||||
"Root": "/",
|
||||
"ForbidCreateDrivePermission": "禁止创建磁盘",
|
||||
"ForbidCreateDrivePermissionDescription": "禁止用户创建新磁盘"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,44 +13,66 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { AccountRole, Ref, getCurrentAccount, hasAccountRole } from '@hcengineering/core'
|
||||
import { AccountRole, Ref, getCurrentAccount } from '@hcengineering/core'
|
||||
import { type Drive } from '@hcengineering/drive'
|
||||
import { getResource } from '@hcengineering/platform'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import { Button, ButtonWithDropdown, IconAdd, IconDropdown, Loading, SelectPopupValueType } from '@hcengineering/ui'
|
||||
import { FileUploadOptions, getUploadHandlers, UploadHandler } from '@hcengineering/uploader'
|
||||
import { HeaderButton, HeaderButtonAction } from '@hcengineering/ui'
|
||||
import { getUploadHandlers } from '@hcengineering/uploader'
|
||||
import drive from '../plugin'
|
||||
import { getFolderIdFromFragment } from '../navigation'
|
||||
import {
|
||||
showCreateDrivePopup,
|
||||
showCreateFolderPopup,
|
||||
uploadFilesToDrivePopup,
|
||||
getUploadOptionsByFragment
|
||||
} from '../utils'
|
||||
import { showCreateDrivePopup, showCreateFolderPopup, getUploadOptionsByFragment } from '../utils'
|
||||
import { onMount } from 'svelte'
|
||||
|
||||
export let currentSpace: Ref<Drive> | undefined
|
||||
export let currentFragment: string | undefined
|
||||
|
||||
const basicActions: HeaderButtonAction[] = [
|
||||
{
|
||||
id: drive.string.CreateDrive,
|
||||
label: drive.string.CreateDrive,
|
||||
icon: drive.icon.Drive,
|
||||
accountRole: AccountRole.User,
|
||||
callback: handleCreateDrive
|
||||
},
|
||||
{
|
||||
id: drive.string.CreateFolder,
|
||||
label: drive.string.CreateFolder,
|
||||
icon: drive.icon.Folder,
|
||||
callback: handleCreateFolder
|
||||
}
|
||||
]
|
||||
|
||||
let uploadActions: HeaderButtonAction[] = []
|
||||
let allActions: HeaderButtonAction[] = []
|
||||
|
||||
const myAcc = getCurrentAccount()
|
||||
|
||||
const client = getClient()
|
||||
const query = createQuery()
|
||||
const actionWithExtensionMap = new Map<string, UploadHandler>()
|
||||
|
||||
onMount(() => {
|
||||
const handlers = getUploadHandlers(client)
|
||||
const newUploadActions: HeaderButtonAction[] = []
|
||||
for (const handler of handlers) {
|
||||
dropdownItems.push({ id: handler._id, label: handler.label, icon: handler.icon })
|
||||
const uploadHandler = async (opts: FileUploadOptions): Promise<void> => {
|
||||
const uploadHandler = async (): Promise<void> => {
|
||||
if (currentSpace === undefined) return
|
||||
const fn = await getResource(handler.handler)
|
||||
const opts = await getUploadOptionsByFragment(currentSpace, currentFragment ?? '')
|
||||
await fn(opts)
|
||||
}
|
||||
actionWithExtensionMap.set(handler._id, uploadHandler)
|
||||
newUploadActions.push({
|
||||
id: handler.label,
|
||||
label: handler.label,
|
||||
icon: handler.icon,
|
||||
callback: () => {
|
||||
void uploadHandler()
|
||||
}
|
||||
})
|
||||
}
|
||||
uploadActions = newUploadActions
|
||||
})
|
||||
|
||||
let loading = true
|
||||
let hasDrive = false
|
||||
query.query(
|
||||
drive.class.Drive,
|
||||
@@ -63,74 +85,25 @@
|
||||
|
||||
$: parent = getFolderIdFromFragment(currentFragment ?? '') ?? drive.ids.Root
|
||||
|
||||
async function handleDropdownItemSelected (res?: SelectPopupValueType['id']): Promise<void> {
|
||||
if (res === drive.string.CreateDrive) {
|
||||
await handleCreateDrive()
|
||||
} else if (res === drive.string.CreateFolder) {
|
||||
await handleCreateFolder()
|
||||
} else if (typeof res === 'string' && currentSpace !== undefined) {
|
||||
const opts = await getUploadOptionsByFragment(currentSpace, currentFragment ?? '')
|
||||
const uploadFn = actionWithExtensionMap.get(res)
|
||||
if (uploadFn === undefined) {
|
||||
return
|
||||
}
|
||||
await uploadFn(opts)
|
||||
function handleCreateDrive (): void {
|
||||
void showCreateDrivePopup()
|
||||
}
|
||||
|
||||
function handleCreateFolder (): void {
|
||||
void showCreateFolderPopup(currentSpace, parent, true)
|
||||
}
|
||||
|
||||
let visibleActions: (string | number | null)[] = []
|
||||
function updateActions (hasSpace: boolean, uploadActions: HeaderButtonAction[]): void {
|
||||
allActions = [...basicActions, ...uploadActions]
|
||||
if (hasSpace) {
|
||||
visibleActions = allActions.map((a) => a.id)
|
||||
} else {
|
||||
visibleActions = [drive.string.CreateDrive]
|
||||
}
|
||||
}
|
||||
|
||||
async function handleCreateDrive (): Promise<void> {
|
||||
await showCreateDrivePopup()
|
||||
}
|
||||
|
||||
async function handleCreateFolder (): Promise<void> {
|
||||
await showCreateFolderPopup(currentSpace, parent, true)
|
||||
}
|
||||
|
||||
async function handleUploadFile (): Promise<void> {
|
||||
if (currentSpace !== undefined) {
|
||||
await uploadFilesToDrivePopup(currentSpace, parent)
|
||||
}
|
||||
}
|
||||
|
||||
const dropdownItems: SelectPopupValueType[] = hasAccountRole(myAcc, AccountRole.User)
|
||||
? [
|
||||
{ id: drive.string.CreateDrive, label: drive.string.CreateDrive, icon: drive.icon.Drive },
|
||||
{ id: drive.string.CreateFolder, label: drive.string.CreateFolder, icon: drive.icon.Folder }
|
||||
]
|
||||
: [{ id: drive.string.CreateFolder, label: drive.string.CreateFolder, icon: drive.icon.Folder }]
|
||||
|
||||
loading = false
|
||||
$: updateActions(hasDrive, uploadActions)
|
||||
</script>
|
||||
|
||||
{#if loading}
|
||||
<Loading shrink />
|
||||
{:else}
|
||||
<div class="antiNav-subheader">
|
||||
{#if hasDrive}
|
||||
<ButtonWithDropdown
|
||||
icon={IconAdd}
|
||||
justify={'left'}
|
||||
kind={'primary'}
|
||||
label={drive.string.UploadFile}
|
||||
mainButtonId={'new-document'}
|
||||
dropdownIcon={IconDropdown}
|
||||
{dropdownItems}
|
||||
disabled={currentSpace === undefined}
|
||||
on:click={handleUploadFile}
|
||||
on:dropdown-selected={(ev) => {
|
||||
void handleDropdownItemSelected(ev.detail)
|
||||
}}
|
||||
/>
|
||||
{:else}
|
||||
<Button
|
||||
icon={IconAdd}
|
||||
label={drive.string.CreateDrive}
|
||||
justify={'left'}
|
||||
width={'100%'}
|
||||
kind={'primary'}
|
||||
gap={'large'}
|
||||
on:click={handleCreateDrive}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
<HeaderButton loading={false} {client} mainActionId={uploadActions[0]?.id} {visibleActions} actions={allActions} />
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { Class, Doc, Mixin, Ref, SpaceType, SpaceTypeDescriptor, Type } from '@hcengineering/core'
|
||||
import type { Class, Doc, Mixin, Ref, SpaceType, SpaceTypeDescriptor, Type, Permission } from '@hcengineering/core'
|
||||
import type { Asset, IntlString, Plugin, Resource as PlatformResource } from '@hcengineering/platform'
|
||||
import { plugin } from '@hcengineering/platform'
|
||||
import type { Location, ResolvedLocation } from '@hcengineering/ui/src/types'
|
||||
@@ -64,13 +64,18 @@ export const drivePlugin = plugin(driveId, {
|
||||
File: '' as IntlString,
|
||||
FileVersion: '' as IntlString,
|
||||
Folder: '' as IntlString,
|
||||
Resource: '' as IntlString
|
||||
Resource: '' as IntlString,
|
||||
ForbidCreateDrivePermission: '' as IntlString,
|
||||
ForbidCreateDrivePermissionDescription: '' as IntlString
|
||||
},
|
||||
descriptor: {
|
||||
DriveType: '' as Ref<SpaceTypeDescriptor>
|
||||
},
|
||||
spaceType: {
|
||||
DefaultDrive: '' as Ref<SpaceType>
|
||||
},
|
||||
permission: {
|
||||
ForbidCreateDrive: '' as Ref<Permission>
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"string": {
|
||||
"SmileysAndPeople": "Gül & İnsanlar",
|
||||
"Components": "Bileşenler",
|
||||
"AnimalsAndNature": "Hayvanlar & Doğa",
|
||||
"FoodAndDrink": "Yemek & İçecek",
|
||||
"TravelAndPlaces": "Seyahat & Yerler",
|
||||
"Activities": "Aktiviteler",
|
||||
"Objects": "Nesneler",
|
||||
"Symbols": "Semboller",
|
||||
"Flags": "Bayraklar",
|
||||
"FrequentlyUsed": "Sık kullanılanlar",
|
||||
"GettingWorkDone": "İşleri halledelim",
|
||||
"DefaultSkinTone": "Varsayılan ten rengi",
|
||||
"NoTone": "Ton yok",
|
||||
"Light": "Açık",
|
||||
"MediumLight": "Orta-açık",
|
||||
"Medium": "Orta",
|
||||
"MediumDark": "Orta-koyu",
|
||||
"Dark": "Koyu",
|
||||
"Remove": "Kaldır",
|
||||
"SearchDots": "Ara...",
|
||||
"SearchResults": "Arama Sonuçları",
|
||||
"CustomEmojis": "Özel Emojiler",
|
||||
"Shortcode": "İsim",
|
||||
"ShortcodeDescription": "Harf, sayı ve '-', '+', '_' sembollerini içerebilir.",
|
||||
"Image": "Görsel",
|
||||
"ImageDescription": "Emojiniz için .gif, .png veya .jpg dosyası belirtin.",
|
||||
"UploadImage": "Yükle",
|
||||
"Preview": "Önizleme",
|
||||
"PreviewTextBegin": "Bu, içinde ",
|
||||
"PreviewTextEnd": " olan bir cümle.",
|
||||
"CreateTitle": "Özel Emoji oluştur",
|
||||
"Create": "Oluştur",
|
||||
"ImageAspectError": "Görsel 1:1 en-boy oranına sahip olmalıdır.",
|
||||
"ShortcodeMatchError": "Harf, sayı ve '-', '+', '_' sembollerini içerebilir.",
|
||||
"ShortcodeExistsError": "Bu isim zaten kullanılıyor. Lütfen başka bir isim seçin.",
|
||||
"NewCustomEmojiDialogClose": "Bu diyalogu kapatmak istiyor musunuz?",
|
||||
"NewCustomEmojiDialogCloseNote": "Tüm değişiklikler kaybolacak"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"string": {
|
||||
"WorkspaceNamePattern": "İsim 40 karakter veya daha kısa, boş olmamalı ve özel karakterler (<, >, /) içermemelidir",
|
||||
"Export": "Dışa Aktar",
|
||||
"DataToExport": "Dışa aktarılacak veri",
|
||||
"ExportDocuments": "Dokümanlar",
|
||||
"ExportMilestones": "Kilometre Taşı",
|
||||
"ExportIssues": "Sorunlar",
|
||||
"ExportTestCases": "Test Senaryoları",
|
||||
"ExportTestRuns": "Test Çalıştırmaları",
|
||||
"ExportTestPlans": "Test Planları",
|
||||
"ExportFormat": "Dışa aktarma formatı",
|
||||
"ExportJSON": "JSON",
|
||||
"ExportCSV": "CSV",
|
||||
"ExportUnifiedFormat": "Huly Birleşik Format",
|
||||
"ExportIncludeContent": "İçerik dahil et",
|
||||
"ExportEverything": "Her şey",
|
||||
"ExportAttributesOnly": "Sadece öznitelikler",
|
||||
"ExportRequestSuccess": "Dışa aktarma başladı.",
|
||||
"ExportRequestSuccessMessage": "Dışa aktarma başladı. Tamamlandığında Gelen Kutunuzda bir bildirim alacaksınız.",
|
||||
"ExportRequestFailed": "Dışa aktarma gönderilemedi.",
|
||||
"ExportRequestFailedMessage": "Dışa aktarma gönderirken hata oluştu. Lütfen daha sonra tekrar deneyin.",
|
||||
"ExportCompleted": "Dışa aktarma tamamlandı. Dosyalarınız hazır. Bunları sürücüden indirebilirsiniz.",
|
||||
"ExportFailed": "Veri dışa aktarılamadı. Lütfen daha sonra tekrar deneyin."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"string": {
|
||||
"MessageID": "MesajID",
|
||||
"IntegrationLabel": "Gmail",
|
||||
"IntegrationDescription": "E-posta göndermek, almak ve yönetmek için Gmail hesabınızı bağlayın",
|
||||
"SharedMessages": "paylaşılan e-postalar",
|
||||
"To": "Kime:",
|
||||
"From": "Kimden:",
|
||||
"Copy": "Kopya",
|
||||
"MessagesSelected": "mesaj seçildi",
|
||||
"PublishSelected": "Seçilenleri yayınla",
|
||||
"CreateMessage": "Mesaj oluştur",
|
||||
"ShareMessages": "Mesajları paylaş",
|
||||
"Connect": "Bağlan",
|
||||
"RedirectGoogle": "Google kimlik doğrulama sayfasına yönlendirileceksiniz. Lütfen tüm izinleri seçtiğinizden emin olun.",
|
||||
"ConnectGmail": "Gmail hesabını bağla",
|
||||
"Reply": "Yanıtla",
|
||||
"Subject": "Konu",
|
||||
"Send": "Gönder",
|
||||
"Resend": "Yeniden gönder",
|
||||
"NewMessage": "Yeni mesaj",
|
||||
"NewMessageTo": "Yeni mesaj:",
|
||||
"Cancel": "İptal",
|
||||
"SubjectPlaceholder": "Mesaj konusu",
|
||||
"CopyPlaceholder": "Kopya:",
|
||||
"ReplyTo": "Yanıtla:",
|
||||
"Message": "Mesaj",
|
||||
"Messages": "Mesajlar",
|
||||
"Incoming": "Gelen",
|
||||
"Email": "E-posta",
|
||||
"Status": "Durum",
|
||||
"EmailPlaceholder": "ahmet.yilmaz@ornek.com",
|
||||
"WriteEmail": "E-posta Yaz",
|
||||
"Shared": "Paylaşıldı",
|
||||
"AvailableTo": "Uygun:",
|
||||
"HaveWrittenEmail": "bir e-posta yazdı",
|
||||
"NewIncomingMessage": "Size yeni bir e-posta gönderdi",
|
||||
"ConfigLabel": "E-posta",
|
||||
"ConfigDescription": "Gmail e-posta entegrasyonu için uzantı",
|
||||
"GooglePrivacy": "Huly'nin Google API'lerinden aldığı bilgilerin kullanımı ve diğer uygulamalara aktarımı, Sınırlı Kullanım gereksinimleri dahil olmak üzere <a href=\"https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes\" target=\"_blank\">Google API Hizmetleri Kullanıcı Verileri Politikası</a>'na uyacaktır.",
|
||||
"EmailNotificationsDescription": "E-posta üzerinden kişisel bildirimler alın.",
|
||||
"FailedToConnect": "Gmail servisi kullanılamıyor",
|
||||
"TotalMessages": "Toplam mesaj:",
|
||||
"Configure": "Gmail entegrasyonunu yapılandır",
|
||||
"GmailSpace": "Mesaj kanalı için alan",
|
||||
"PersonSpaceInfo": "E-posta size açık olacak",
|
||||
"SharedSpaceInfo": "E-posta tüm alan katılımcılarına açık olacak",
|
||||
"ConfigurationRequired": "Kullanmaya başlamak için lütfen Gmail entegrasyonunuzu yapılandırın"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"string": {
|
||||
"CreatePublicLink": "Genel bağlantı oluştur",
|
||||
"PublicLink": "Genel bağlantı",
|
||||
"Revoke": "İptal et",
|
||||
"RevokeConfirmation": "Bu, önceden paylaşılan bağlantının çalışmayı durdurmasına neden olur. Bu genel bağlantıyı iptal etmek istediğinizden emin misiniz?",
|
||||
"LinkWasRevoked": "Genel bağlantı iptal edildi",
|
||||
"Copy": "Kopyala"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"string": {
|
||||
"Department": "Departman",
|
||||
"ParentDepartmentLabel": "Üst departman",
|
||||
"Structure": "Yapı",
|
||||
"CreateDepartment": "Departman oluştur",
|
||||
"CreateDepartmentLabel": "Departman",
|
||||
"DepartmentPlaceholder": "Departman",
|
||||
"TeamLead": "Takım lideri",
|
||||
"UnAssignLead": "Takım liderini kaldır",
|
||||
"MemberCount": "{count, plural, =0 {çalışan yok} =1 {1 çalışan} other {# çalışan}}",
|
||||
"AssignLead": "Takım lideri ata",
|
||||
"TeamLeadTooltip": "{value}",
|
||||
"HRApplication": "İnsan kaynakları (beta)",
|
||||
"MoveStaff": "Çalışan transferi",
|
||||
"MoveStaffDescr": "Çalışanı {current}'ten {department}'e transfer etmek istiyor musunuz?",
|
||||
"Departments": "Departmanlar",
|
||||
"Positions": "Pozisyonlar",
|
||||
"ShowEmployees": "Çalışanları göster",
|
||||
"AddEmployee": "Çalışan ekle",
|
||||
"SelectEmployee": "Çalışan seç",
|
||||
"Schedule": "Program",
|
||||
"RequestType": "Tip",
|
||||
"CreateRequest": "{type} oluştur",
|
||||
"Today": "Bugün",
|
||||
"Summary": "Toplam",
|
||||
"NoEmployeesInDepartment": "Seçilen departmanda çalışan yok",
|
||||
"Vacation": "Tatil",
|
||||
"Sick": "Hastalık",
|
||||
"PTO": "İzin",
|
||||
"PTOs": "İzinler",
|
||||
"Remote": "Uzaktan",
|
||||
"Overtime": "Fazla mesai",
|
||||
"PTO2": "İzin/2",
|
||||
"Overtime2": "Fazla mesai/2",
|
||||
"EditRequest": "{type} düzenle",
|
||||
"EditRequestType": "Tip düzenle",
|
||||
"ChooseNewType": "Yeni tip seç:",
|
||||
"UnchangeableType": "Bu tip değiştirilemez",
|
||||
"Request": "Talep",
|
||||
"ExistingRequests": "Belirlenen tarihler için zaten mevcut talepler var",
|
||||
"Staff": "Çalışan",
|
||||
"Member": "Üye",
|
||||
"Members": "Üyeler",
|
||||
"NoMembers": "Üye eklenmedi",
|
||||
"AddMember": "Üye ekle",
|
||||
"Subscribers": "Aboneler",
|
||||
"PublicHoliday": "Resmi tatil",
|
||||
"Title": "Başlık",
|
||||
"Description": "Açıklama",
|
||||
"PublicHolidays": "Resmi tatiller",
|
||||
"MarkAsPublicHoliday": "Resmi tatil olarak işaretle",
|
||||
"EditPublicHoliday": "Resmi tatili düzenle",
|
||||
"Managers": "Yöneticiler",
|
||||
"Export": "Dışa aktar",
|
||||
"Separator": "Ayırıcı",
|
||||
"ChooseSeparator": "Ayırıcı seç",
|
||||
"RequestCreated": "Talep oluşturuldu",
|
||||
"RequestUpdated": "Talep güncellendi",
|
||||
"RequestRemoved": "Talep kaldırıldı",
|
||||
"ConfigLabel": "İnsan kaynakları",
|
||||
"ConfigDescription": "Organizasyon yapısını ve çalışan iş takvimini yönetmek için uzantı",
|
||||
"WorkingDays": "Çalışma günleri",
|
||||
"ReportedDays": "Raporlanan günler",
|
||||
"Tasks": "Görevler",
|
||||
"TPD": "TPD",
|
||||
"EXTRa": "EXTRa"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"string": {
|
||||
"IntegrationLabel": "Huly Mail",
|
||||
"IntegrationDescription": "E-posta göndermek, almak ve yönetmek için Huly posta kutunuzu bağlayın",
|
||||
"Connect": "Bağlan",
|
||||
"ConnectHulyMail": "Huly posta kutusunu bağla",
|
||||
"Cancel": "İptal",
|
||||
"Email": "E-posta",
|
||||
"Status": "Durum",
|
||||
"FailedToConnect": "Huly mail servisi kullanılamıyor",
|
||||
"TotalMessages": "Toplam mesaj:",
|
||||
"Configure": "Huly mail'i yapılandır",
|
||||
"ChannelSpace": "Mesaj kanalı için alan",
|
||||
"PersonSpaceInfo": "E-posta size açık olacak",
|
||||
"SharedSpaceInfo": "E-posta tüm alan katılımcılarına açık olacak",
|
||||
"Mailbox": "Posta kutusu",
|
||||
"MailboxesNotConfigured": "Posta kutusu bulunamadı",
|
||||
"ConfigureMailBoxes": "Başlamak için lütfen `Posta Kutuları` bölümünden bir posta kutusu ekleyin"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user